1
0
Эх сурвалжийг харах

feat: auto install from url

Zen 2 жил өмнө
parent
commit
44fdfe84e4

+ 1 - 0
.eslintrc.js

@@ -34,6 +34,7 @@ module.exports = {
   rules: {
     camelcase: 'off',
     'no-await-in-loop': 'off',
+    'no-alert': 'off',
     'import/no-import-module-exports': 'off',
     'no-console': ['warn', { allow: ['warn', 'error'] }],
     'no-underscore-dangle': 'off',

+ 39 - 0
src/content/index.js

@@ -1,6 +1,9 @@
 import browser from 'webextension-polyfill';
 import findSelector from '@/lib/findSelector';
 import { toCamelCase } from '@/utils/helper';
+import { openDB } from 'idb';
+import cloneDeep from 'lodash.clonedeep';
+import { nanoid } from 'nanoid';
 import blocksHandler from './blocksHandler';
 import showExecutedBlock from './showExecutedBlock';
 import shortcutListener from './services/shortcutListener';
@@ -233,3 +236,39 @@ function messageListener({ data, source }) {
     });
   });
 })();
+
+// Auto install only works on Chrome
+async function autoInstall() {
+  const link = window.location.href;
+  if (/.+\.automa\.json$/.test(link)) {
+    const workflow = JSON.parse(document.body.innerText);
+
+    const { workflows } = await browser.storage.local.get('workflows');
+    const db = await openDB('automa', 1, {
+      upgrade(event) {
+        event.createObjectStore('store');
+      },
+    });
+
+    await db.put('store', workflows, 'workflows');
+
+    const { workflows: workflowsStorage } = await browser.storage.local.get(
+      'workflows'
+    );
+    const copyWorkflow = cloneDeep(workflow);
+
+    copyWorkflow.table = copyWorkflow.table || copyWorkflow.dataColumns;
+    copyWorkflow.dataColumns = [];
+
+    workflowsStorage.push({
+      ...workflow,
+      id: nanoid(),
+      createdAt: Date.now(),
+    });
+
+    await browser.storage.local.set({ workflows: workflowsStorage });
+
+    alert('Workflow installed');
+  }
+}
+autoInstall();

+ 4 - 12
src/manifest.chrome.json

@@ -2,9 +2,7 @@
   "manifest_version": 2,
   "name": "Automa",
   "background": {
-    "scripts": [
-      "background.bundle.js"
-    ],
+    "scripts": ["background.bundle.js"],
     "persistent": false
   },
   "browser_action": {
@@ -25,12 +23,8 @@
   },
   "content_scripts": [
     {
-      "matches": [
-        "<all_urls>"
-      ],
-      "js": [
-        "contentScript.bundle.js"
-      ],
+      "matches": ["<all_urls>"],
+      "js": ["contentScript.bundle.js"],
       "all_frames": true
     },
     {
@@ -39,9 +33,7 @@
         "*://*.automa.site/*",
         "*://automa.vercel.app/*"
       ],
-      "js": [
-        "webService.bundle.js"
-      ],
+      "js": ["webService.bundle.js"],
       "all_frames": false
     }
   ],

+ 6 - 21
src/manifest.firefox.json

@@ -7,9 +7,7 @@
     }
   },
   "background": {
-    "scripts": [
-      "background.bundle.js"
-    ],
+    "scripts": ["background.bundle.js"],
     "persistent": false
   },
   "browser_action": {
@@ -30,30 +28,17 @@
   },
   "content_scripts": [
     {
-      "matches": [
-        "<all_urls>"
-      ],
-      "js": [
-        "contentScript.bundle.js"
-      ],
+      "matches": ["<all_urls>"],
+      "js": ["contentScript.bundle.js"],
       "all_frames": true
     },
     {
-      "matches": [
-        "*://*.automa.site/*",
-        "*://automa.vercel.app/*"
-      ],
-      "js": [
-        "webService.bundle.js"
-      ],
+      "matches": ["*://*.automa.site/*", "*://automa.vercel.app/*"],
+      "js": ["webService.bundle.js"],
       "all_frames": false
     }
   ],
-  "optional_permissions": [
-    "clipboardRead",
-    "downloads",
-    "notifications"
-  ],
+  "optional_permissions": ["clipboardRead", "downloads", "notifications"],
   "permissions": [
     "tabs",
     "proxy",

+ 1 - 1
src/utils/workflowData.js

@@ -120,7 +120,7 @@ export function exportWorkflow(workflow) {
   });
   const url = URL.createObjectURL(blob);
 
-  fileSaver(`${workflow.name}.json`, url);
+  fileSaver(`${workflow.name}.automa.json`, url);
 }
 
 export default {