Ahmad Kholid hace 2 años
padre
commit
8536a94700

+ 1 - 1
package.json

@@ -1,6 +1,6 @@
 {
   "name": "automa",
-  "version": "1.27.1",
+  "version": "1.27.2",
   "description": "An extension for automating your browser by connecting blocks",
   "repository": {
     "type": "git",

+ 5 - 3
src/components/content/shared/SharedElementSelector.vue

@@ -287,7 +287,9 @@ function onKeydown(event) {
     'selected'
   );
 }
-function onClick(event) {
+function onMousedown(event) {
+  event.preventDefault();
+  event.stopPropagation();
   retrieveElementsRect(event, 'selected');
 }
 function onMessage({ data }) {
@@ -309,17 +311,17 @@ function onMessage({ data }) {
 }
 function attachListeners() {
   window.addEventListener('scroll', onScroll);
-  document.addEventListener('click', onClick);
   window.addEventListener('message', onMessage);
   document.addEventListener('keydown', onKeydown);
   window.addEventListener('mousemove', onMousemove);
+  document.addEventListener('mousedown', onMousedown);
 }
 function detachListeners() {
   window.removeEventListener('scroll', onScroll);
-  document.removeEventListener('click', onClick);
   window.removeEventListener('message', onMessage);
   document.removeEventListener('keydown', onKeydown);
   window.removeEventListener('mousemove', onMousemove);
+  document.removeEventListener('mousedown', onMousedown);
 }
 
 watch(

+ 1 - 1
src/content/blocksHandler/handlerEventClick.js

@@ -33,7 +33,7 @@ function eventClick(block) {
           return;
         }
 
-        simulateClickElement(element, () => element.click());
+        simulateClickElement(element);
       },
       onError(error) {
         reject(error);

+ 1 - 0
src/content/services/webService.js

@@ -201,6 +201,7 @@ window.addEventListener('user-logout', () => {
 });
 
 window.addEventListener('app-mounted', async () => {
+  console.log('haha');
   try {
     const STORAGE_KEY = 'supabase.auth.token';
     const session = parseJSON(localStorage.getItem(STORAGE_KEY), null);

+ 2 - 0
src/content/utils.js

@@ -9,6 +9,8 @@ export function simulateClickElement(element) {
   } else {
     element.dispatchEvent(new PointerEvent('click', { bubbles: true }));
   }
+
+  element.focus?.();
 }
 
 export function generateLoopSelectors(

+ 27 - 4
src/stores/main.js

@@ -2,7 +2,7 @@ import { defineStore } from 'pinia';
 import defu from 'defu';
 import browser from 'webextension-polyfill';
 import deepmerge from 'lodash.merge';
-import { fetchGapi } from '@/utils/api';
+import { fetchGapi, fetchApi } from '@/utils/api';
 
 export const useStore = defineStore('main', {
   storageMap: {
@@ -49,7 +49,7 @@ export const useStore = defineStore('main', {
       this.settings = deepmerge(this.settings, settings);
       await this.saveToStorage('settings');
     },
-    async checkGDriveIntegration(force = false) {
+    async checkGDriveIntegration(force = false, retryCount = 0) {
       try {
         if (this.integrationsRetrieved.googleDrive && !force) return;
 
@@ -58,8 +58,31 @@ export const useStore = defineStore('main', {
         );
         if (!result) return;
 
-        this.integrations.googleDrive =
-          result.scope.includes('auth/drive.file');
+        const isIntegrated = result.scope.includes('auth/drive.file');
+        const { sessionToken } = await browser.storage.local.get(
+          'sessionToken'
+        );
+
+        if (!isIntegrated && sessionToken?.refresh && retryCount < 3) {
+          const response = await fetchApi(
+            `/me/refresh-session?token=${sessionToken.refresh}`,
+            { auth: true }
+          );
+          const refreshResult = await response.json();
+          if (!response.ok) throw new Error(refreshResult.message);
+
+          await browser.storage.local.set({
+            sessionToken: {
+              ...sessionToken,
+              access: refreshResult.token,
+            },
+          });
+          await this.checkGDriveIntegration(force, retryCount + 1);
+
+          return;
+        }
+
+        this.integrations.googleDrive = isIntegrated;
       } catch (error) {
         console.error(error);
       }

+ 6 - 4
src/utils/api.js

@@ -2,7 +2,7 @@ import secrets from 'secrets';
 import browser from 'webextension-polyfill';
 import { parseJSON, isObject } from './helper';
 
-export async function fetchApi(path, options) {
+export async function fetchApi(path, options = {}) {
   const urlPath = path.startsWith('/') ? path : `/${path}`;
   const headers = {
     'Content-Type': 'application/json',
@@ -161,7 +161,8 @@ export function validateOauthToken() {
       );
       if (response.status === 400 && sessionToken.refresh && retryCount <= 3) {
         const refreshResponse = await fetchApi(
-          `/me/refresh-session?token=${sessionToken.refresh}`
+          `/me/refresh-session?token=${sessionToken.refresh}`,
+          { auth: true }
         );
         const refreshResult = await refreshResponse.json();
 
@@ -211,11 +212,12 @@ export async function fetchGapi(url, resource = {}, options = {}) {
       response.status === 403 &&
       result?.error?.message.includes('insufficient authentication scopes');
     if (
-      (response.status === 401 || insufficientScope) &&
+      (!sessionToken.access || response.status === 401 || insufficientScope) &&
       sessionToken.refresh
     ) {
       const refreshResponse = await fetchApi(
-        `/me/refresh-session?token=${sessionToken.refresh}`
+        `/me/refresh-session?token=${sessionToken.refresh}`,
+        { auth: true }
       );
       const refreshResult = await refreshResponse.json();