From ae0935de1e1adc57ea782b7a9aa3d1483990226d Mon Sep 17 00:00:00 2001 From: Blake Byrnes Date: Thu, 19 Sep 2024 11:04:10 -0400 Subject: [PATCH] =?UTF-8?q?chore:=20migrate=20desktop=20to=20it=E2=80=99s?= =?UTF-8?q?=20own=20repo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitattributes | 1 + .github/workflows/desktop.yml | 72 - .github/workflows/lint-and-test.yml | 21 +- README.md | 7 +- client/docs/interface/payment-services.md | 5 + client/docs/overview/sql.md | 2 +- client/main/package.json | 2 +- cloud/main/.env.defaults | 4 +- datastore/broker/package.json | 2 +- datastore/core/.env.defaults | 4 +- datastore/core/package.json | 2 +- datastore/docs/advanced/databrokers.md | 74 + datastore/main/package.json | 2 +- desktop/chrome-extension/.eslintrc.js | 15 - desktop/chrome-extension/.prettierrc | 7 - desktop/chrome-extension/CHANGELOG.md | 213 -- desktop/chrome-extension/package.build.json | 6 - desktop/chrome-extension/package.dist.json | 6 - desktop/chrome-extension/package.json | 21 - desktop/chrome-extension/src/content.ts | 90 - desktop/chrome-extension/src/devtools.ts | 25 - .../src/lib/ElementOptionsOverlay.ts | 460 ---- .../src/lib/ElementsBucket.ts | 101 - .../src/lib/content/ContentMessenger.ts | 147 -- .../src/lib/content/findSelectors.ts | 205 -- .../src/lib/devtools/DevtoolsMessenger.ts | 149 -- desktop/chrome-extension/src/lib/logDebug.ts | 15 - .../chrome-extension/src/public/manifest.json | 15 - desktop/chrome-extension/tsconfig.json | 15 - desktop/chrome-extension/vite.config.js | 25 - desktop/main/.eslintrc.js | 6 - desktop/main/CHANGELOG.md | 221 -- desktop/main/app/CHANGELOG.md | 79 - desktop/main/app/assets/IconTemplate.png | Bin 559 -> 0 bytes desktop/main/app/assets/IconTemplate@2x.png | Bin 1118 -> 0 bytes desktop/main/app/assets/arg.icns | Bin 606421 -> 0 bytes desktop/main/app/assets/arg.ico | Bin 361102 -> 0 bytes desktop/main/app/assets/arg.png | Bin 4700 -> 0 bytes .../main/app/assets/entitlements.mac.plist | 15 - desktop/main/app/assets/icon.png | Bin 42455 -> 0 bytes desktop/main/app/index.ts | 22 - .../main/app/interfaces/IMenubarOptions.ts | 5 - desktop/main/app/lib/AccountManager.ts | 392 ---- desktop/main/app/lib/ApiClient.ts | 70 - desktop/main/app/lib/ApiManager.ts | 435 ---- desktop/main/app/lib/ArgonFile.ts | 26 - .../main/app/lib/ChromeAlivePagePreload.ts | 52 - desktop/main/app/lib/ChromeAliveWindow.ts | 522 ----- desktop/main/app/lib/DeploymentWatcher.ts | 61 - desktop/main/app/lib/DesktopPagePreload.ts | 46 - desktop/main/app/lib/DesktopWindow.ts | 104 - desktop/main/app/lib/Menubar.ts | 463 ---- desktop/main/app/lib/MenubarPagePreload.ts | 10 - desktop/main/app/lib/OsEncrypt.ts | 29 - .../main/app/lib/PrivateDesktopApiHandler.ts | 497 ----- desktop/main/app/lib/StaticServer.ts | 37 - desktop/main/app/lib/View.ts | 94 - desktop/main/app/lib/WindowManager.ts | 181 -- desktop/main/app/lib/util/UlixeeLogger.ts | 50 - desktop/main/app/lib/util/defaultEnvVars.ts | 6 - .../main/app/lib/util/installDefaultChrome.ts | 20 - desktop/main/app/lib/util/trayPositioner.ts | 65 - .../main/app/lib/util/windowStateKeeper.ts | 42 - desktop/main/app/menus/generateAppMenu.ts | 145 -- desktop/main/app/menus/generateContextMenu.ts | 111 - desktop/main/app/package.build.json | 16 - desktop/main/app/package.dist.json | 22 - desktop/main/app/package.json | 33 - desktop/main/builder/copySources.ts | 108 - desktop/main/check.sh | 2 - desktop/main/package.json | 94 - desktop/main/scripts/notarize.ts | 24 - desktop/main/sign.sh | 1 - desktop/ui/.browserslistrc | 1 - desktop/ui/.env.development | 2 - desktop/ui/.eslintignore | 0 desktop/ui/.eslintrc.js | 52 - desktop/ui/.gitignore | 22 - desktop/ui/.prettierrc | 7 - desktop/ui/CHANGELOG.md | 285 --- desktop/ui/desktop.html | 19 - desktop/ui/extension/hero-script.html | 19 - desktop/ui/extension/resources.html | 19 - desktop/ui/extension/state-generator.html | 19 - desktop/ui/infobox-range.html | 19 - desktop/ui/menu-finder.html | 19 - desktop/ui/menu-primary.html | 19 - desktop/ui/menu-timetravel.html | 19 - desktop/ui/menu-url.html | 19 - desktop/ui/menubar.html | 19 - desktop/ui/package.build.json | 5 - desktop/ui/package.dist.json | 5 - desktop/ui/package.json | 72 - desktop/ui/postcss.config.js | 6 - desktop/ui/prettier.config.js | 3 - desktop/ui/public/devtools-entrypoint.html | 6 - desktop/ui/screen-about.html | 19 - desktop/ui/screen-input.html | 19 - desktop/ui/screen-output.html | 19 - desktop/ui/screen-reliability.html | 19 - desktop/ui/src/api/Client.ts | 240 --- desktop/ui/src/api/ICloudConnection.ts | 10 - .../ui/src/assets/fonts/roboto-light.woff2 | Bin 49380 -> 0 bytes .../ui/src/assets/fonts/roboto-medium.woff2 | Bin 50224 -> 0 bytes .../ui/src/assets/fonts/roboto-regular.woff2 | Bin 49236 -> 0 bytes desktop/ui/src/assets/icons/add.svg | 4 - desktop/ui/src/assets/icons/apply-changes.svg | 11 - desktop/ui/src/assets/icons/argfile.svg | 9 - desktop/ui/src/assets/icons/argon.svg | 7 - desktop/ui/src/assets/icons/arrow-left.svg | 4 - desktop/ui/src/assets/icons/arrow-right.svg | 4 - desktop/ui/src/assets/icons/back.svg | 1 - desktop/ui/src/assets/icons/brackets.svg | 7 - desktop/ui/src/assets/icons/caret.svg | 5 - desktop/ui/src/assets/icons/database.svg | 8 - desktop/ui/src/assets/icons/domstate.svg | 11 - desktop/ui/src/assets/icons/dots.svg | 9 - desktop/ui/src/assets/icons/element.svg | 9 - desktop/ui/src/assets/icons/exit.svg | 11 - desktop/ui/src/assets/icons/external.svg | 11 - desktop/ui/src/assets/icons/extractor.svg | 8 - desktop/ui/src/assets/icons/heart.svg | 8 - desktop/ui/src/assets/icons/input.svg | 9 - desktop/ui/src/assets/icons/loading-bars.svg | 30 - desktop/ui/src/assets/icons/location.svg | 1 - desktop/ui/src/assets/icons/logo.svg | 9 - desktop/ui/src/assets/icons/menu-logo.svg | 7 - desktop/ui/src/assets/icons/navigate.svg | 4 - .../ui/src/assets/icons/node_search_icon.svg | 1 - desktop/ui/src/assets/icons/pause.svg | 8 - desktop/ui/src/assets/icons/play.svg | 11 - desktop/ui/src/assets/icons/plus.svg | 11 - desktop/ui/src/assets/icons/refresh.svg | 4 - desktop/ui/src/assets/icons/resource.svg | 9 - desktop/ui/src/assets/icons/search.svg | 9 - desktop/ui/src/assets/icons/spider.svg | 4 - desktop/ui/src/assets/icons/table.svg | 5 - desktop/ui/src/assets/icons/timetravel.svg | 9 - desktop/ui/src/assets/icons/tmp.html | 5 - desktop/ui/src/assets/style/code.scss | 209 -- .../ui/src/assets/style/common-mixins.scss | 55 - desktop/ui/src/assets/style/line-numbers.scss | 109 - .../ui/src/assets/style/overlay-mixins.scss | 49 - desktop/ui/src/assets/style/resets.scss | 23 - desktop/ui/src/components/Json.vue | 125 -- .../desktop/components/DatastoreCard.vue | 138 -- .../ui/src/pages/desktop/components/Modal.vue | 99 - .../ui/src/pages/desktop/components/Prism.vue | 82 - desktop/ui/src/pages/desktop/index.css | 3 - desktop/ui/src/pages/desktop/index.ts | 163 -- desktop/ui/src/pages/desktop/index.vue | 60 - desktop/ui/src/pages/desktop/lib/utils.ts | 43 - .../src/pages/desktop/stores/CloudsStore.ts | 131 -- .../pages/desktop/stores/DatastoresStore.ts | 406 ---- .../desktop/stores/GettingStartedStore.ts | 212 -- .../src/pages/desktop/stores/ReplaysStore.ts | 80 - .../src/pages/desktop/stores/WalletStore.ts | 102 - .../src/pages/desktop/views/CloudAddModal.vue | 211 -- desktop/ui/src/pages/desktop/views/Clouds.vue | 111 - .../ui/src/pages/desktop/views/Datastores.vue | 176 -- .../ui/src/pages/desktop/views/DropModal.vue | 39 - .../pages/desktop/views/GettingStarted.vue | 117 - .../ui/src/pages/desktop/views/Overview.vue | 54 - .../desktop/views/ReceiveArgonsModal.vue | 427 ---- .../ui/src/pages/desktop/views/Replays.vue | 303 --- .../ui/src/pages/desktop/views/Sidebar.vue | 234 -- desktop/ui/src/pages/desktop/views/Wallet.vue | 210 -- .../desktop/views/accounts/AccountDetails.vue | 129 -- .../views/accounts/ChainTransferModal.vue | 170 -- .../views/accounts/NewAccountModal.vue | 125 -- .../views/accounts/NewBrokerAccountModal.vue | 129 -- .../pages/desktop/views/accounts/Overview.vue | 383 ---- .../desktop/views/accounts/Transactions.vue | 124 -- .../views/cloud-details/CloudDetails.vue | 114 - .../desktop/views/cloud-details/Configure.vue | 103 - .../views/cloud-details/Connections.vue | 56 - .../views/cloud-details/Datastores.vue | 66 - .../views/datastore-details/CloneModal.vue | 80 - .../views/datastore-details/CreditsModal.vue | 173 -- .../datastore-details/DatastoreDetails.vue | 172 -- .../views/datastore-details/Entities.vue | 132 -- .../views/datastore-details/Overview.vue | 344 --- .../views/datastore-details/Queries.vue | 233 -- .../views/datastore-details/Reliability.vue | 413 ---- .../views/datastore-details/Versions.vue | 153 -- .../views/getting-started/ChromeAlive.vue | 135 -- .../desktop/views/getting-started/Clone.vue | 260 --- .../desktop/views/getting-started/Credit.vue | 134 -- .../views/getting-started/Datastore.vue | 167 -- .../desktop/views/getting-started/Deploy.vue | 182 -- .../desktop/views/getting-started/Hero.vue | 110 - .../desktop/views/getting-started/Payment.vue | 163 -- .../desktop/views/getting-started/Query.vue | 150 -- .../src/pages/extension/hero-script/index.css | 3 - .../src/pages/extension/hero-script/index.ts | 6 - .../src/pages/extension/hero-script/index.vue | 380 ---- .../src/pages/extension/resources/index.css | 3 - .../ui/src/pages/extension/resources/index.ts | 6 - .../src/pages/extension/resources/index.vue | 355 --- .../extension/state-generator/DomNode.vue | 377 ---- .../extension/state-generator/DomNodeState.ts | 374 ---- .../pages/extension/state-generator/index.css | 7 - .../pages/extension/state-generator/index.ts | 5 - .../pages/extension/state-generator/index.vue | 248 --- desktop/ui/src/pages/infobox-range/index.vue | 39 - desktop/ui/src/pages/menu-finder/index.css | 3 - desktop/ui/src/pages/menu-finder/index.ts | 5 - desktop/ui/src/pages/menu-finder/index.vue | 49 - .../ui/src/pages/menu-finder/views/Main.vue | 316 --- desktop/ui/src/pages/menu-primary/index.css | 3 - desktop/ui/src/pages/menu-primary/index.ts | 5 - desktop/ui/src/pages/menu-primary/index.vue | 46 - .../ui/src/pages/menu-primary/views/Main.vue | 163 -- .../ui/src/pages/menu-timetravel/index.css | 3 - desktop/ui/src/pages/menu-timetravel/index.ts | 5 - .../ui/src/pages/menu-timetravel/index.vue | 46 - .../src/pages/menu-timetravel/views/Main.vue | 79 - desktop/ui/src/pages/menu-url/index.css | 3 - desktop/ui/src/pages/menu-url/index.ts | 5 - desktop/ui/src/pages/menu-url/index.vue | 42 - desktop/ui/src/pages/menu-url/views/Main.vue | 101 - desktop/ui/src/pages/menubar/index.css | 3 - desktop/ui/src/pages/menubar/index.ts | 5 - desktop/ui/src/pages/menubar/index.vue | 24 - desktop/ui/src/pages/menubar/views/Main.vue | 216 -- desktop/ui/src/pages/screen-about/index.css | 3 - desktop/ui/src/pages/screen-about/index.ts | 5 - desktop/ui/src/pages/screen-about/index.vue | 62 - desktop/ui/src/pages/screen-input/index.css | 3 - desktop/ui/src/pages/screen-input/index.ts | 5 - desktop/ui/src/pages/screen-input/index.vue | 201 -- desktop/ui/src/pages/screen-output/index.css | 3 - desktop/ui/src/pages/screen-output/index.ts | 5 - desktop/ui/src/pages/screen-output/index.vue | 391 ---- .../ui/src/pages/screen-reliability/index.css | 3 - .../ui/src/pages/screen-reliability/index.ts | 5 - .../ui/src/pages/screen-reliability/index.vue | 54 - .../pages/toolbar/components/ArrowRight.vue | 68 - .../src/pages/toolbar/components/Borders.vue | 164 -- .../pages/toolbar/components/InputButton.vue | 125 -- .../pages/toolbar/components/MenuButton.vue | 97 - .../pages/toolbar/components/OutputButton.vue | 145 -- .../src/pages/toolbar/components/Player.vue | 440 ---- .../pages/toolbar/components/PlayerBar.vue | 807 ------- .../toolbar/components/ReliabilityButton.vue | 141 -- desktop/ui/src/pages/toolbar/index.css | 3 - desktop/ui/src/pages/toolbar/index.ts | 5 - desktop/ui/src/pages/toolbar/index.vue | 109 - .../pages/toolbar/lib/WindowsController.ts | 101 - desktop/ui/src/pages/toolbar/variables.scss | 27 - .../pages/toolbar/views/SessionController.vue | 244 --- desktop/ui/src/shims-prism.d.ts | 1 - desktop/ui/src/shims-router.d.ts | 8 - desktop/ui/src/shims-svg.d.ts | 5 - desktop/ui/src/shims-vue.d.ts | 6 - desktop/ui/src/utils/flattenJson.ts | 100 - desktop/ui/src/utils/humanizeBytes.ts | 15 - desktop/ui/src/utils/screenshotCache.ts | 61 - desktop/ui/src/vite-env.d.ts | 2 - desktop/ui/tailwind.config.js | 21 - desktop/ui/toolbar.html | 19 - desktop/ui/tsconfig.json | 34 - desktop/ui/vite.config.js | 63 - end-to-end/package.json | 4 +- package.dist.json | 5 - package.json | 4 +- sql/docs/clients/ulixee.md | 2 +- tsconfig.json | 5 - website/babel.config.js | 2 +- website/package.json | 2 + website/src/pages/Documentation.vue | 2 +- website/src/router/index.ts | 1 - yarn.lock | 1895 +---------------- 273 files changed, 220 insertions(+), 23613 deletions(-) create mode 100644 .gitattributes delete mode 100644 .github/workflows/desktop.yml create mode 100644 client/docs/interface/payment-services.md create mode 100644 datastore/docs/advanced/databrokers.md delete mode 100644 desktop/chrome-extension/.eslintrc.js delete mode 100644 desktop/chrome-extension/.prettierrc delete mode 100644 desktop/chrome-extension/CHANGELOG.md delete mode 100644 desktop/chrome-extension/package.build.json delete mode 100644 desktop/chrome-extension/package.dist.json delete mode 100644 desktop/chrome-extension/package.json delete mode 100644 desktop/chrome-extension/src/content.ts delete mode 100644 desktop/chrome-extension/src/devtools.ts delete mode 100644 desktop/chrome-extension/src/lib/ElementOptionsOverlay.ts delete mode 100644 desktop/chrome-extension/src/lib/ElementsBucket.ts delete mode 100644 desktop/chrome-extension/src/lib/content/ContentMessenger.ts delete mode 100644 desktop/chrome-extension/src/lib/content/findSelectors.ts delete mode 100644 desktop/chrome-extension/src/lib/devtools/DevtoolsMessenger.ts delete mode 100644 desktop/chrome-extension/src/lib/logDebug.ts delete mode 100644 desktop/chrome-extension/src/public/manifest.json delete mode 100644 desktop/chrome-extension/tsconfig.json delete mode 100644 desktop/chrome-extension/vite.config.js delete mode 100644 desktop/main/.eslintrc.js delete mode 100644 desktop/main/CHANGELOG.md delete mode 100644 desktop/main/app/CHANGELOG.md delete mode 100644 desktop/main/app/assets/IconTemplate.png delete mode 100644 desktop/main/app/assets/IconTemplate@2x.png delete mode 100644 desktop/main/app/assets/arg.icns delete mode 100644 desktop/main/app/assets/arg.ico delete mode 100644 desktop/main/app/assets/arg.png delete mode 100644 desktop/main/app/assets/entitlements.mac.plist delete mode 100644 desktop/main/app/assets/icon.png delete mode 100644 desktop/main/app/index.ts delete mode 100644 desktop/main/app/interfaces/IMenubarOptions.ts delete mode 100644 desktop/main/app/lib/AccountManager.ts delete mode 100644 desktop/main/app/lib/ApiClient.ts delete mode 100644 desktop/main/app/lib/ApiManager.ts delete mode 100644 desktop/main/app/lib/ArgonFile.ts delete mode 100644 desktop/main/app/lib/ChromeAlivePagePreload.ts delete mode 100644 desktop/main/app/lib/ChromeAliveWindow.ts delete mode 100644 desktop/main/app/lib/DeploymentWatcher.ts delete mode 100644 desktop/main/app/lib/DesktopPagePreload.ts delete mode 100644 desktop/main/app/lib/DesktopWindow.ts delete mode 100644 desktop/main/app/lib/Menubar.ts delete mode 100644 desktop/main/app/lib/MenubarPagePreload.ts delete mode 100644 desktop/main/app/lib/OsEncrypt.ts delete mode 100644 desktop/main/app/lib/PrivateDesktopApiHandler.ts delete mode 100644 desktop/main/app/lib/StaticServer.ts delete mode 100644 desktop/main/app/lib/View.ts delete mode 100644 desktop/main/app/lib/WindowManager.ts delete mode 100644 desktop/main/app/lib/util/UlixeeLogger.ts delete mode 100644 desktop/main/app/lib/util/defaultEnvVars.ts delete mode 100644 desktop/main/app/lib/util/installDefaultChrome.ts delete mode 100644 desktop/main/app/lib/util/trayPositioner.ts delete mode 100644 desktop/main/app/lib/util/windowStateKeeper.ts delete mode 100644 desktop/main/app/menus/generateAppMenu.ts delete mode 100644 desktop/main/app/menus/generateContextMenu.ts delete mode 100644 desktop/main/app/package.build.json delete mode 100644 desktop/main/app/package.dist.json delete mode 100644 desktop/main/app/package.json delete mode 100644 desktop/main/builder/copySources.ts delete mode 100755 desktop/main/check.sh delete mode 100644 desktop/main/package.json delete mode 100644 desktop/main/scripts/notarize.ts delete mode 100644 desktop/main/sign.sh delete mode 100644 desktop/ui/.browserslistrc delete mode 100644 desktop/ui/.env.development delete mode 100644 desktop/ui/.eslintignore delete mode 100644 desktop/ui/.eslintrc.js delete mode 100644 desktop/ui/.gitignore delete mode 100644 desktop/ui/.prettierrc delete mode 100644 desktop/ui/CHANGELOG.md delete mode 100644 desktop/ui/desktop.html delete mode 100644 desktop/ui/extension/hero-script.html delete mode 100644 desktop/ui/extension/resources.html delete mode 100644 desktop/ui/extension/state-generator.html delete mode 100644 desktop/ui/infobox-range.html delete mode 100644 desktop/ui/menu-finder.html delete mode 100644 desktop/ui/menu-primary.html delete mode 100644 desktop/ui/menu-timetravel.html delete mode 100644 desktop/ui/menu-url.html delete mode 100644 desktop/ui/menubar.html delete mode 100644 desktop/ui/package.build.json delete mode 100644 desktop/ui/package.dist.json delete mode 100644 desktop/ui/package.json delete mode 100644 desktop/ui/postcss.config.js delete mode 100644 desktop/ui/prettier.config.js delete mode 100644 desktop/ui/public/devtools-entrypoint.html delete mode 100644 desktop/ui/screen-about.html delete mode 100644 desktop/ui/screen-input.html delete mode 100644 desktop/ui/screen-output.html delete mode 100644 desktop/ui/screen-reliability.html delete mode 100644 desktop/ui/src/api/Client.ts delete mode 100644 desktop/ui/src/api/ICloudConnection.ts delete mode 100644 desktop/ui/src/assets/fonts/roboto-light.woff2 delete mode 100644 desktop/ui/src/assets/fonts/roboto-medium.woff2 delete mode 100644 desktop/ui/src/assets/fonts/roboto-regular.woff2 delete mode 100644 desktop/ui/src/assets/icons/add.svg delete mode 100644 desktop/ui/src/assets/icons/apply-changes.svg delete mode 100644 desktop/ui/src/assets/icons/argfile.svg delete mode 100644 desktop/ui/src/assets/icons/argon.svg delete mode 100644 desktop/ui/src/assets/icons/arrow-left.svg delete mode 100644 desktop/ui/src/assets/icons/arrow-right.svg delete mode 100644 desktop/ui/src/assets/icons/back.svg delete mode 100644 desktop/ui/src/assets/icons/brackets.svg delete mode 100644 desktop/ui/src/assets/icons/caret.svg delete mode 100644 desktop/ui/src/assets/icons/database.svg delete mode 100644 desktop/ui/src/assets/icons/domstate.svg delete mode 100644 desktop/ui/src/assets/icons/dots.svg delete mode 100644 desktop/ui/src/assets/icons/element.svg delete mode 100644 desktop/ui/src/assets/icons/exit.svg delete mode 100644 desktop/ui/src/assets/icons/external.svg delete mode 100644 desktop/ui/src/assets/icons/extractor.svg delete mode 100644 desktop/ui/src/assets/icons/heart.svg delete mode 100644 desktop/ui/src/assets/icons/input.svg delete mode 100644 desktop/ui/src/assets/icons/loading-bars.svg delete mode 100644 desktop/ui/src/assets/icons/location.svg delete mode 100644 desktop/ui/src/assets/icons/logo.svg delete mode 100644 desktop/ui/src/assets/icons/menu-logo.svg delete mode 100644 desktop/ui/src/assets/icons/navigate.svg delete mode 100644 desktop/ui/src/assets/icons/node_search_icon.svg delete mode 100644 desktop/ui/src/assets/icons/pause.svg delete mode 100644 desktop/ui/src/assets/icons/play.svg delete mode 100644 desktop/ui/src/assets/icons/plus.svg delete mode 100644 desktop/ui/src/assets/icons/refresh.svg delete mode 100644 desktop/ui/src/assets/icons/resource.svg delete mode 100644 desktop/ui/src/assets/icons/search.svg delete mode 100644 desktop/ui/src/assets/icons/spider.svg delete mode 100644 desktop/ui/src/assets/icons/table.svg delete mode 100644 desktop/ui/src/assets/icons/timetravel.svg delete mode 100644 desktop/ui/src/assets/icons/tmp.html delete mode 100644 desktop/ui/src/assets/style/code.scss delete mode 100644 desktop/ui/src/assets/style/common-mixins.scss delete mode 100644 desktop/ui/src/assets/style/line-numbers.scss delete mode 100644 desktop/ui/src/assets/style/overlay-mixins.scss delete mode 100644 desktop/ui/src/assets/style/resets.scss delete mode 100644 desktop/ui/src/components/Json.vue delete mode 100644 desktop/ui/src/pages/desktop/components/DatastoreCard.vue delete mode 100644 desktop/ui/src/pages/desktop/components/Modal.vue delete mode 100644 desktop/ui/src/pages/desktop/components/Prism.vue delete mode 100644 desktop/ui/src/pages/desktop/index.css delete mode 100644 desktop/ui/src/pages/desktop/index.ts delete mode 100644 desktop/ui/src/pages/desktop/index.vue delete mode 100644 desktop/ui/src/pages/desktop/lib/utils.ts delete mode 100644 desktop/ui/src/pages/desktop/stores/CloudsStore.ts delete mode 100644 desktop/ui/src/pages/desktop/stores/DatastoresStore.ts delete mode 100644 desktop/ui/src/pages/desktop/stores/GettingStartedStore.ts delete mode 100644 desktop/ui/src/pages/desktop/stores/ReplaysStore.ts delete mode 100644 desktop/ui/src/pages/desktop/stores/WalletStore.ts delete mode 100644 desktop/ui/src/pages/desktop/views/CloudAddModal.vue delete mode 100644 desktop/ui/src/pages/desktop/views/Clouds.vue delete mode 100644 desktop/ui/src/pages/desktop/views/Datastores.vue delete mode 100644 desktop/ui/src/pages/desktop/views/DropModal.vue delete mode 100644 desktop/ui/src/pages/desktop/views/GettingStarted.vue delete mode 100644 desktop/ui/src/pages/desktop/views/Overview.vue delete mode 100644 desktop/ui/src/pages/desktop/views/ReceiveArgonsModal.vue delete mode 100644 desktop/ui/src/pages/desktop/views/Replays.vue delete mode 100644 desktop/ui/src/pages/desktop/views/Sidebar.vue delete mode 100644 desktop/ui/src/pages/desktop/views/Wallet.vue delete mode 100644 desktop/ui/src/pages/desktop/views/accounts/AccountDetails.vue delete mode 100644 desktop/ui/src/pages/desktop/views/accounts/ChainTransferModal.vue delete mode 100644 desktop/ui/src/pages/desktop/views/accounts/NewAccountModal.vue delete mode 100644 desktop/ui/src/pages/desktop/views/accounts/NewBrokerAccountModal.vue delete mode 100644 desktop/ui/src/pages/desktop/views/accounts/Overview.vue delete mode 100644 desktop/ui/src/pages/desktop/views/accounts/Transactions.vue delete mode 100644 desktop/ui/src/pages/desktop/views/cloud-details/CloudDetails.vue delete mode 100644 desktop/ui/src/pages/desktop/views/cloud-details/Configure.vue delete mode 100644 desktop/ui/src/pages/desktop/views/cloud-details/Connections.vue delete mode 100644 desktop/ui/src/pages/desktop/views/cloud-details/Datastores.vue delete mode 100644 desktop/ui/src/pages/desktop/views/datastore-details/CloneModal.vue delete mode 100644 desktop/ui/src/pages/desktop/views/datastore-details/CreditsModal.vue delete mode 100644 desktop/ui/src/pages/desktop/views/datastore-details/DatastoreDetails.vue delete mode 100644 desktop/ui/src/pages/desktop/views/datastore-details/Entities.vue delete mode 100644 desktop/ui/src/pages/desktop/views/datastore-details/Overview.vue delete mode 100644 desktop/ui/src/pages/desktop/views/datastore-details/Queries.vue delete mode 100644 desktop/ui/src/pages/desktop/views/datastore-details/Reliability.vue delete mode 100644 desktop/ui/src/pages/desktop/views/datastore-details/Versions.vue delete mode 100644 desktop/ui/src/pages/desktop/views/getting-started/ChromeAlive.vue delete mode 100644 desktop/ui/src/pages/desktop/views/getting-started/Clone.vue delete mode 100644 desktop/ui/src/pages/desktop/views/getting-started/Credit.vue delete mode 100644 desktop/ui/src/pages/desktop/views/getting-started/Datastore.vue delete mode 100644 desktop/ui/src/pages/desktop/views/getting-started/Deploy.vue delete mode 100644 desktop/ui/src/pages/desktop/views/getting-started/Hero.vue delete mode 100644 desktop/ui/src/pages/desktop/views/getting-started/Payment.vue delete mode 100644 desktop/ui/src/pages/desktop/views/getting-started/Query.vue delete mode 100644 desktop/ui/src/pages/extension/hero-script/index.css delete mode 100644 desktop/ui/src/pages/extension/hero-script/index.ts delete mode 100644 desktop/ui/src/pages/extension/hero-script/index.vue delete mode 100644 desktop/ui/src/pages/extension/resources/index.css delete mode 100644 desktop/ui/src/pages/extension/resources/index.ts delete mode 100644 desktop/ui/src/pages/extension/resources/index.vue delete mode 100644 desktop/ui/src/pages/extension/state-generator/DomNode.vue delete mode 100644 desktop/ui/src/pages/extension/state-generator/DomNodeState.ts delete mode 100644 desktop/ui/src/pages/extension/state-generator/index.css delete mode 100644 desktop/ui/src/pages/extension/state-generator/index.ts delete mode 100644 desktop/ui/src/pages/extension/state-generator/index.vue delete mode 100644 desktop/ui/src/pages/infobox-range/index.vue delete mode 100644 desktop/ui/src/pages/menu-finder/index.css delete mode 100644 desktop/ui/src/pages/menu-finder/index.ts delete mode 100644 desktop/ui/src/pages/menu-finder/index.vue delete mode 100644 desktop/ui/src/pages/menu-finder/views/Main.vue delete mode 100644 desktop/ui/src/pages/menu-primary/index.css delete mode 100644 desktop/ui/src/pages/menu-primary/index.ts delete mode 100644 desktop/ui/src/pages/menu-primary/index.vue delete mode 100644 desktop/ui/src/pages/menu-primary/views/Main.vue delete mode 100644 desktop/ui/src/pages/menu-timetravel/index.css delete mode 100644 desktop/ui/src/pages/menu-timetravel/index.ts delete mode 100644 desktop/ui/src/pages/menu-timetravel/index.vue delete mode 100644 desktop/ui/src/pages/menu-timetravel/views/Main.vue delete mode 100644 desktop/ui/src/pages/menu-url/index.css delete mode 100644 desktop/ui/src/pages/menu-url/index.ts delete mode 100644 desktop/ui/src/pages/menu-url/index.vue delete mode 100644 desktop/ui/src/pages/menu-url/views/Main.vue delete mode 100644 desktop/ui/src/pages/menubar/index.css delete mode 100644 desktop/ui/src/pages/menubar/index.ts delete mode 100644 desktop/ui/src/pages/menubar/index.vue delete mode 100644 desktop/ui/src/pages/menubar/views/Main.vue delete mode 100644 desktop/ui/src/pages/screen-about/index.css delete mode 100644 desktop/ui/src/pages/screen-about/index.ts delete mode 100644 desktop/ui/src/pages/screen-about/index.vue delete mode 100644 desktop/ui/src/pages/screen-input/index.css delete mode 100644 desktop/ui/src/pages/screen-input/index.ts delete mode 100644 desktop/ui/src/pages/screen-input/index.vue delete mode 100644 desktop/ui/src/pages/screen-output/index.css delete mode 100644 desktop/ui/src/pages/screen-output/index.ts delete mode 100644 desktop/ui/src/pages/screen-output/index.vue delete mode 100644 desktop/ui/src/pages/screen-reliability/index.css delete mode 100644 desktop/ui/src/pages/screen-reliability/index.ts delete mode 100644 desktop/ui/src/pages/screen-reliability/index.vue delete mode 100644 desktop/ui/src/pages/toolbar/components/ArrowRight.vue delete mode 100644 desktop/ui/src/pages/toolbar/components/Borders.vue delete mode 100644 desktop/ui/src/pages/toolbar/components/InputButton.vue delete mode 100644 desktop/ui/src/pages/toolbar/components/MenuButton.vue delete mode 100644 desktop/ui/src/pages/toolbar/components/OutputButton.vue delete mode 100644 desktop/ui/src/pages/toolbar/components/Player.vue delete mode 100644 desktop/ui/src/pages/toolbar/components/PlayerBar.vue delete mode 100644 desktop/ui/src/pages/toolbar/components/ReliabilityButton.vue delete mode 100644 desktop/ui/src/pages/toolbar/index.css delete mode 100644 desktop/ui/src/pages/toolbar/index.ts delete mode 100644 desktop/ui/src/pages/toolbar/index.vue delete mode 100644 desktop/ui/src/pages/toolbar/lib/WindowsController.ts delete mode 100644 desktop/ui/src/pages/toolbar/variables.scss delete mode 100644 desktop/ui/src/pages/toolbar/views/SessionController.vue delete mode 100644 desktop/ui/src/shims-prism.d.ts delete mode 100644 desktop/ui/src/shims-router.d.ts delete mode 100644 desktop/ui/src/shims-svg.d.ts delete mode 100644 desktop/ui/src/shims-vue.d.ts delete mode 100644 desktop/ui/src/utils/flattenJson.ts delete mode 100644 desktop/ui/src/utils/humanizeBytes.ts delete mode 100644 desktop/ui/src/utils/screenshotCache.ts delete mode 100644 desktop/ui/src/vite-env.d.ts delete mode 100644 desktop/ui/tailwind.config.js delete mode 100644 desktop/ui/toolbar.html delete mode 100644 desktop/ui/tsconfig.json delete mode 100644 desktop/ui/vite.config.js diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 000000000..5fc4d971e --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +*.json linguist-language=JSON-with-Comments diff --git a/.github/workflows/desktop.yml b/.github/workflows/desktop.yml deleted file mode 100644 index 72f9e2e78..000000000 --- a/.github/workflows/desktop.yml +++ /dev/null @@ -1,72 +0,0 @@ -name: Desktop - -on: - push: - tags: - - 'v*' - workflow_dispatch: - -jobs: - app: - strategy: - fail-fast: false - matrix: - os: [macos-latest, windows-latest, ubuntu-latest] - runs-on: ${{ matrix.os }} - steps: - - name: Check out Git repository - uses: actions/checkout@v4 - - - uses: actions/setup-python@v5 - if: ${{ matrix.os != 'windows-latest' }} - with: - python-version: '3.10' - - - uses: actions/setup-node@v4 - with: - node-version: 20 - - - name: Add msbuild to PATH - if: ${{ matrix.os == 'windows-latest' }} - uses: microsoft/setup-msbuild@v2 - - - name: Add PIP Setuptools - if: ${{ matrix.os == 'windows-latest' }} - run: pip.exe install setuptools - - - name: Set timeout - run: yarn config set network-timeout 1000000 -g - - - name: Yarn build - run: yarn && yarn build && yarn build:dist - - - run: yarn - working-directory: build-dist - - - run: mkdir ~/.private_keys && echo "$APPLE_NOTARIZE_KEY" > ~/.private_keys/AuthKey_5VH6PQ3585.p8 - if: ${{ matrix.os == 'macos-latest' }} - shell: bash - env: - APPLE_NOTARIZE_KEY: ${{secrets.APPLE_NOTARIZE_KEY}} - - - name: Build Desktop - run: yarn build && yarn dist - working-directory: ./desktop/main - env: - NODE_ENV: production - USE_HARD_LINKS: false - force_no_cache: true - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - CSC_LINK: ${{ matrix.os == 'windows-latest' && secrets.WIN_CSC_LINK || secrets.CSC_LINK }} - CSC_KEY_PASSWORD: ${{ matrix.os == 'windows-latest' && secrets.WIN_CSC_KEY_PASSWORD || secrets.CSC_KEY_PASSWORD }} - - - name: Upload App - if: startsWith(github.ref, 'refs/tags/v') == false || failure() - uses: actions/upload-artifact@v4 - with: - name: desktop-${{ matrix.os }} - path: | - ./build/desktop/main/dist/*.AppImage - ./build/desktop/main/dist/*.dmg - ./build/desktop/main/dist/*.exe - retention-days: 1 diff --git a/.github/workflows/lint-and-test.yml b/.github/workflows/lint-and-test.yml index 53d540980..3eca49925 100644 --- a/.github/workflows/lint-and-test.yml +++ b/.github/workflows/lint-and-test.yml @@ -152,6 +152,11 @@ jobs: with: go-version: '1.23' + - uses: actions/setup-python@v5 + if: ${{ matrix.os != 'windows-latest' }} + with: + python-version: '3.10' + - name: Chocolatey Install Action if: ${{ matrix.os == 'windows-latest' }} uses: crazy-max/ghaction-chocolatey@v3 @@ -162,6 +167,16 @@ jobs: if: ${{ matrix.os == 'windows-latest' }} uses: microsoft/setup-msbuild@v2 + - name: Clear space + if: ${{ matrix.os == 'macos-latest' }} + run: | + sudo rm -rf /Users/runner/Library/Android/sdk + sudo rm -rf /Users/runner/hostedtoolcache/CodeQL + sudo rm -rf /Users/runner/Library/Developer/CoreSimulator + sudo rm -rf /Users/runner/Library/Developer/Xcode/DerivedData + sudo rm -rf /Users/runner/Library/Developer/Xcode/iOS DeviceSupport + sudo rm -rf /Users/runner/Library/Developer/Xcode/watchOS DeviceSupport + - name: Clone Mainchain shell: bash run: | @@ -189,13 +204,15 @@ jobs: run: yarn build working-directory: ../hero - - name: Set yarn config - run: yarn config set ignore-engines true && yarn config set frozen-lockfile true + - name: Install Deps + run: yarn config set ignore-engines true - name: Yarn build run: yarn build env: ELECTRON_SKIP_BINARY_DOWNLOAD: 1 + ULX_MITM_REBUILD_SOCKET: 0 + NODE_OPTIONS: --max_old_space_size=4096 - name: Redo mainchain deps run: yarn diff --git a/README.md b/README.md index 80f5d28c1..460c123b0 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ This repository is the development home to several of the tools that make it eas ## Tooling -Try out Ulixee Desktop! The Alpha release is available for download under [Assets](https://github.com/ulixee/platform/releases/latest). +Try out [Ulixee Desktop!](https://github.com/ulixee/desktop). It's a helpful tool for developing and managing your Ulixee scripts. ### Docker @@ -26,10 +26,9 @@ To use the image, we have a [run.sh](./cloud/tools/docker/run.sh) script that wi ## Developer Environment -This project serves as a Monorepo for developing the Ulixee Datastore, Desktop, Hero and Cloud. To install this project, you'll need to: +This project serves as a Monorepo for developing the Ulixee Datastore and Cloud. If you are developing, you might wish to have [hero][hero] as a project adjacent to this one. -1. Clone with `--recursive` so that submodules are initialized. -2. Run `yarn build:all` from the main repository. +1Run `yarn build:all` from the this repository to build all the projects. Learn more about Ulixee at [ulixee.org](https://ulixee.org). diff --git a/client/docs/interface/payment-services.md b/client/docs/interface/payment-services.md new file mode 100644 index 000000000..d9b977f9e --- /dev/null +++ b/client/docs/interface/payment-services.md @@ -0,0 +1,5 @@ +# Payment Services +> Ulixee Datastores come built-in supporting a simple payment mechanism using the Argon currency. Payment services allow you to delegate that function to someone else. + +## Interface + diff --git a/client/docs/overview/sql.md b/client/docs/overview/sql.md index 41b838f81..65e2a820a 100644 --- a/client/docs/overview/sql.md +++ b/client/docs/overview/sql.md @@ -13,4 +13,4 @@ client.query(`SELECT * FROM developers WHERE status='founder'`).then(records => By default all query are read-only (i.e., they must be SELECTs) unless you have special admin privileges. -More details are available in the [Ulixee SQL specification docs](../../sql). \ No newline at end of file +More details are available in the [Ulixee SQL specification docs](../../sql). diff --git a/client/main/package.json b/client/main/package.json index f7bed4fcd..8198380c1 100644 --- a/client/main/package.json +++ b/client/main/package.json @@ -8,7 +8,7 @@ "dependencies": { "@ulixee/commons": "2.0.0-alpha.29", "@ulixee/datastore": "2.0.0-alpha.29", - "@argonprotocol/localchain": "0.0.2", + "@argonprotocol/localchain": "0.0.4", "@ulixee/net": "2.0.0-alpha.29", "@ulixee/schema": "2.0.0-alpha.29" }, diff --git a/cloud/main/.env.defaults b/cloud/main/.env.defaults index d4ad03758..030cb3849 100644 --- a/cloud/main/.env.defaults +++ b/cloud/main/.env.defaults @@ -21,8 +21,6 @@ ULX_QUERY_HERO_SESSIONS_DIR=/ulixee/query-hero-sessions # A whitelist of comma separated identities (bech32 strings) who can administer this server [@ulixee/platform-utils/lib/Identity.bech32] ULX_CLOUD_ADMIN_IDENTITIES= -# Payment Address of this Miner owner to pay out datastore revenue (bech32 string) -ULX_PAYMENT_ADDRESS= ## Hosted Services ULX_DATASTORE_STATS_HOST=# Stats Tracker Service Host @@ -49,7 +47,7 @@ ULX_ENABLE_GLOBAL_CONFIG=true # Path to the localchain ULX_LOCALCHAIN_PATH= -# Default mainchain host TODO: fill in once mainchain is up# +# Default Argon mainchain host TODO: fill in once mainchain is up# ULX_MAINCHAIN_URL= # A vote output address for the localchain (activates vote creation) ULX_VOTES_ADDRESS= diff --git a/datastore/broker/package.json b/datastore/broker/package.json index 3e1c92271..3fd2486cc 100644 --- a/datastore/broker/package.json +++ b/datastore/broker/package.json @@ -20,7 +20,7 @@ "@ulixee/cloud": "2.0.0-alpha.29", "@ulixee/commons": "2.0.0-alpha.29", "@ulixee/datastore": "2.0.0-alpha.29", - "@argonprotocol/localchain": "0.0.2", + "@argonprotocol/localchain": "0.0.4", "@ulixee/net": "2.0.0-alpha.29", "@ulixee/platform-specification": "2.0.0-alpha.29", "@ulixee/platform-utils": "2.0.0-alpha.29", diff --git a/datastore/core/.env.defaults b/datastore/core/.env.defaults index 940902c03..7b7e3734c 100644 --- a/datastore/core/.env.defaults +++ b/datastore/core/.env.defaults @@ -4,8 +4,6 @@ ULX_QUERY_HERO_SESSIONS_DIR=/ulixee/query-hero-sessions # A whitelist of comma separated identities (bech32 strings) who can administer this server [@ulixee/platform-utils/lib/Identity.bech32] ULX_CLOUD_ADMIN_IDENTITIES= -# Payment Address of this Miner owner to pay out datastore revenue (bech32 string) -ULX_PAYMENT_ADDRESS= ## Hosted Services ULX_DATASTORE_STATS_HOST=# Stats Tracker Service Host @@ -32,7 +30,7 @@ ULX_ENABLE_GLOBAL_CONFIG=true # Path to the localchain ULX_LOCALCHAIN_PATH= -# Default mainchain host TODO: fill in once mainchain is up# +# Default Argon mainchain host TODO: fill in once mainchain is up# ULX_MAINCHAIN_URL= # A vote output address for the localchain (activates vote creation) ULX_VOTES_ADDRESS= diff --git a/datastore/core/package.json b/datastore/core/package.json index 2018130ca..f052ed095 100644 --- a/datastore/core/package.json +++ b/datastore/core/package.json @@ -8,7 +8,7 @@ "@ulixee/commons": "2.0.0-alpha.29", "@ulixee/datastore": "2.0.0-alpha.29", "@ulixee/datastore-docpage": "2.0.0-alpha.29", - "@argonprotocol/localchain": "0.0.2", + "@argonprotocol/localchain": "0.0.4", "@ulixee/net": "2.0.0-alpha.29", "@ulixee/platform-specification": "2.0.0-alpha.29", "@ulixee/platform-utils": "2.0.0-alpha.29", diff --git a/datastore/docs/advanced/databrokers.md b/datastore/docs/advanced/databrokers.md new file mode 100644 index 000000000..fae0314f0 --- /dev/null +++ b/datastore/docs/advanced/databrokers.md @@ -0,0 +1,74 @@ +# Databrokers + +> Databrokers allow you to hide the details of Argon Localchain payment from your team or customers. Instead of each team member needing to manage their own Argon wallet, they can use a shared Databroker to access the data they need. + +## How it works + +Databrokers whitelist users and Datastore domains and allocate funds to the users (how you allocate funds is up to you). This can be done through an admin interface or by directly interacting with the Databroker API. + +When a user requests data from a Datastore, the Databroker will automatically create an [Escrow](#escrows) for the user and Datastore with "delegated signing" activated. Delegated signing means the [Client](#client-usage) library will generate a signing key (a Schnorrkel x25519 private key), and will send the [Address](https://docs.substrate.io/reference/glossary/#ss58-address-format) as part of the request to the Databroker. It's now up to the Delegated Signing key to sign settlements for the Escrow. + +## Client Usage + +The client usage is through the normal Ulixee [Client](https://ulixee.org/docs/client) library. Assuming you have a Databroker account and identity registered, your code will look like this: + +```typescript +import { Client } from '@ulixee/client'; + +const mainchainUrl = 'wss://rpc.testnet.argonprotocol.org'; +const brokerAddress = 'wss://broker.testnet.ulixee.org'; +const dataDomain = 'UsCPI.Stats/v1.0.0'; +const paymentService = await DefaultPaymentService.fromBroker(brokerAddress, { + pemPath: 'path to your Identity pem file', +}); +const client = new Client(`ulx://${dataDomain}`, { + paymentService, + mainchainUrl, +}); +client.query(`SELECT * FROM publishingSchedule`).then(records => { + console.log(records); +}); +``` + +## Server Installation + +Databrokers are built to run as a CLI. A Datastore doesn't need to do anything special to support Databrokers. The Databroker CLI will automatically handle the Argon Localchain payment and data access at a client level. + +```bash +npm install @ulixee/databroker +``` + +## Server Usage + +You can start a Databroker using the CLI. There's an optional admin interface that allows you to easily manage users, organizations, and escrows. You can see an example of hiding this behind a reverse proxy here. + +```bash +$ @ulixee/databroker start --port 8080 --hostname localhost --admin-port 8081 \ + --storage-dir /path/to/storage --localchain-path /path/to/localchain +``` + +### Options + +- **-p, --port ** The port to use. Defaults to any 1814, or any available port. (env: ULX_DATABROKER_PORT) +- **-h, --hostname ** The hostname the public facing apis should listen on. (default: localhost) (env: ULX_HOSTNAME) +- **--admin-port ** The port to start an admin server (datastore registry, node registry). Defaults to 18171, or any available port (0). (env: + ULX_DATABROKER_ADMIN_PORT) +- **--storage-dir \** Override the default storage directory where the Databroker databases are located. (env: ULX_DATABROKER_DIR) +- **--env ** Load environment settings from a .env file. +- **--localchain-path ** The path to the localchain data directory. You can also configure this using the .env file (env: ULX_LOCALCHAIN_PATH) + +## Internal Structure + +Databrokers track information in a SQLite database. The database contains the following tables: + +### Organizations + +Databrokers can create one or more Organizations. Each organization has a unique ID and a name. Organizations can have one or more users. + +### Users + +Users are members of an organization with a name and an Identity (a bech32 encoded Ed25519 key). Users will use this identity to sign requests to the Databroker. + +### Escrows + +Argon micropayments are made through an Escrow, which is a pre-allocation of funds with updating settlements each time you pass a new threshold (1 milligon). diff --git a/datastore/main/package.json b/datastore/main/package.json index 9d81522c5..e366c5c29 100644 --- a/datastore/main/package.json +++ b/datastore/main/package.json @@ -43,7 +43,7 @@ "@polkadot/keyring": "^13.0.2", "@polkadot/util-crypto": "^13.0.2", "@ulixee/commons": "2.0.0-alpha.29", - "@argonprotocol/localchain": "0.0.2", + "@argonprotocol/localchain": "0.0.4", "@ulixee/net": "2.0.0-alpha.29", "@ulixee/platform-specification": "2.0.0-alpha.29", "@ulixee/platform-utils": "2.0.0-alpha.29", diff --git a/desktop/chrome-extension/.eslintrc.js b/desktop/chrome-extension/.eslintrc.js deleted file mode 100644 index 898cf6080..000000000 --- a/desktop/chrome-extension/.eslintrc.js +++ /dev/null @@ -1,15 +0,0 @@ -const Path = require('path'); - -module.exports = { - parserOptions: { - project: Path.join(__dirname, 'tsconfig.json'), - }, - extends: '../../.eslintrc.js', - rules: { - 'no-console': 'off', - 'global-require': 'off', - 'import/extensions': 'off', - '@typescript-eslint/explicit-function-return-type': 'off', - }, - ignorePatterns: [".eslintrc.js", "vite.config.js"] -}; diff --git a/desktop/chrome-extension/.prettierrc b/desktop/chrome-extension/.prettierrc deleted file mode 100644 index 6b4bb5d27..000000000 --- a/desktop/chrome-extension/.prettierrc +++ /dev/null @@ -1,7 +0,0 @@ -{ - "printWidth": 100, - "singleQuote": true, - "trailingComma": "all", - "tabWidth": 2, - "arrowParens": "avoid" -} diff --git a/desktop/chrome-extension/CHANGELOG.md b/desktop/chrome-extension/CHANGELOG.md deleted file mode 100644 index 63c7be7f4..000000000 --- a/desktop/chrome-extension/CHANGELOG.md +++ /dev/null @@ -1,213 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -# [2.0.0-alpha.29](https://github.com/ulixee/platform/compare/v2.0.0-alpha.28...v2.0.0-alpha.29) (2024-07-16) - - -### Features - -* integrate argon payments to desktop ([b8a7ffd](https://github.com/ulixee/platform/commit/b8a7ffd651d88160afbfe7906c09e2eac06a345d)) - - - - - -# [2.0.0-alpha.28](https://github.com/ulixee/platform/compare/v2.0.0-alpha.27...v2.0.0-alpha.28) (2024-03-11) - -**Note:** Version bump only for package @ulixee/desktop-chrome-extension - - - - - -# [2.0.0-alpha.27](https://github.com/ulixee/platform/compare/v2.0.0-alpha.26...v2.0.0-alpha.27) (2024-03-01) - -**Note:** Version bump only for package @ulixee/desktop-chrome-extension - - - - - -# [2.0.0-alpha.26](https://github.com/ulixee/platform/compare/v2.0.0-alpha.25...v2.0.0-alpha.26) (2024-02-02) - -**Note:** Version bump only for package @ulixee/desktop-chrome-extension - -# [2.0.0-alpha.25](https://github.com/ulixee/platform/compare/v2.0.0-alpha.24...v2.0.0-alpha.25) (2023-09-28) - -**Note:** Version bump only for package @ulixee/desktop-chrome-extension - -# [2.0.0-alpha.24](https://github.com/ulixee/platform/compare/v2.0.0-alpha.23...v2.0.0-alpha.24) (2023-08-09) - -**Note:** Version bump only for package @ulixee/desktop-chrome-extension - -# [2.0.0-alpha.23](https://github.com/ulixee/platform/compare/v2.0.0-alpha.22...v2.0.0-alpha.23) (2023-07-07) - -**Note:** Version bump only for package @ulixee/desktop-chrome-extension - -# [2.0.0-alpha.22](https://github.com/ulixee/platform/compare/v2.0.0-alpha.21...v2.0.0-alpha.22) (2023-06-12) - -### Features - -- **datastore:** add migrations ([04542bd](https://github.com/ulixee/platform/commit/04542bdb05bc4250839fdb7b30eb11a2ab20b290)) - -# [2.0.0-alpha.21](https://github.com/ulixee/platform/compare/v2.0.0-alpha.20...v2.0.0-alpha.21) (2023-04-24) - -### Bug Fixes - -- **desktop:** vm breaks in packaged electron app ([a5c9f4e](https://github.com/ulixee/platform/commit/a5c9f4ef62120a2807f7b5aa6e829460502ac72c)) - -# [2.0.0-alpha.20](https://github.com/ulixee/platform/compare/v2.0.0-alpha.19...v2.0.0-alpha.20) (2023-04-20) - -### chore - -- rename miner to cloud node ([a3c949e](https://github.com/ulixee/platform/commit/a3c949e4af806cc6a4acdd4b4b04305946add19b)) - -### Features - -- **desktop:** add datastore details page ([a6bce0b](https://github.com/ulixee/platform/commit/a6bce0b9f5ac1121d37c3029bd8fd20f147e9324)) - -### BREAKING CHANGES - -- @ulixee/miner package is now @ulixee/cloud. - You must import {CloudNode} from @ulixee/cloud and use in place of Miner. - -# [2.0.0-alpha.19](https://github.com/ulixee/platform/compare/v2.0.0-alpha.17...v2.0.0-alpha.19) (2023-02-25) - -### Features - -- **desktop:** playback of script ([521d21f](https://github.com/ulixee/platform/commit/521d21faaa769651ad485afee876f09a73dde18e)) - -# [2.0.0-alpha.18](https://github.com/ulixee/platform/compare/v2.0.0-alpha.17...v2.0.0-alpha.18) (2023-01-17) - -**Note:** Version bump only for package @ulixee/desktop-extension - -# [2.0.0-alpha.17](https://github.com/ulixee/platform/compare/v2.0.0-alpha.16...v2.0.0-alpha.17) (2022-12-15) - -**Note:** Version bump only for package @ulixee/desktop-extension - -# [2.0.0-alpha.16](https://github.com/ulixee/platform/compare/v2.0.0-alpha.15...v2.0.0-alpha.16) (2022-12-05) - -### Bug Fixes - -- node 18 fixes ([cba4510](https://github.com/ulixee/platform/commit/cba45107b038f0538429fa18bf87448140ace5c5)) - -# [2.0.0-alpha.15](https://github.com/ulixee/platform/compare/v2.0.0-alpha.14...v2.0.0-alpha.15) (2022-11-17) - -**Note:** Version bump only for package @ulixee/desktop-extension - -# [2.0.0-alpha.14](https://github.com/ulixee/ulixee/compare/v2.0.0-alpha.13...v2.0.0-alpha.14) (2022-11-02) - -**Note:** Version bump only for package @ulixee/desktop-extension - -# [2.0.0-alpha.13](https://github.com/ulixee/ulixee/compare/v2.0.0-alpha.12...v2.0.0-alpha.13) (2022-10-31) - -**Note:** Version bump only for package @ulixee/desktop-extension - -# [2.0.0-alpha.12](https://github.com/ulixee/ulixee/compare/v2.0.0-alpha.11...v2.0.0-alpha.12) (2022-10-03) - -**Note:** Version bump only for package @ulixee/desktop-extension - -# [2.0.0-alpha.11](https://github.com/ulixee/ulixee/compare/v2.0.0-alpha.10...v2.0.0-alpha.11) (2022-08-31) - -**Note:** Version bump only for package @ulixee/desktop-extension - -# [2.0.0-alpha.10](https://github.com/ulixee/ulixee/compare/v2.0.0-alpha.9...v2.0.0-alpha.10) (2022-08-16) - -**Note:** Version bump only for package @ulixee/desktop-extension - -# [2.0.0-alpha.9](https://github.com/ulixee/ulixee/compare/v2.0.0-alpha.8...v2.0.0-alpha.9) (2022-07-26) - -**Note:** Version bump only for package @ulixee/desktop-extension - -# [2.0.0-alpha.8](https://github.com/ulixee/ulixee/compare/v2.0.0-alpha.7...v2.0.0-alpha.8) (2022-07-13) - -**Note:** Version bump only for package @ulixee/desktop-extension - -# [2.0.0-alpha.7](https://github.com/ulixee/ulixee/compare/v2.0.0-alpha.6...v2.0.0-alpha.7) (2022-06-28) - -### Bug Fixes - -- **apps:** page performance tweaks ([f1bc076](https://github.com/ulixee/ulixee/commit/f1bc076f8a31523521d46c49db9fdaf549276474)) - -# [2.0.0-alpha.6](https://github.com/ulixee/ulixee/compare/v2.0.0-alpha.5...v2.0.0-alpha.6) (2022-06-10) - -**Note:** Version bump only for package @ulixee/desktop-extension - -# [2.0.0-alpha.5](https://github.com/ulixee/ulixee/compare/v2.0.0-alpha.3...v2.0.0-alpha.5) (2022-06-10) - -### Bug Fixes - -- events for chromealive not working ([88ca517](https://github.com/ulixee/ulixee/commit/88ca517875062ef2975eb441e5f3aa9e6bf6b2e6)) - -### Features - -- added new website ([1b749d1](https://github.com/ulixee/ulixee/commit/1b749d1aa93c47032b7133678916648b6d8d7a43)) -- **databox:** add databox cores ([36e4fd8](https://github.com/ulixee/ulixee/commit/36e4fd802175985755394751dd09a8ceabc5bfa4)) -- **databox:** packaging ([4303a87](https://github.com/ulixee/ulixee/commit/4303a8731ab3aaa6d3f5f859e760948c54305e69)) - -# [2.0.0-alpha.4](https://github.com/ulixee/ulixee/compare/v2.0.0-alpha.3...v2.0.0-alpha.4) (2022-06-09) - -### Features - -- added new website ([1b749d1](https://github.com/ulixee/ulixee/commit/1b749d1aa93c47032b7133678916648b6d8d7a43)) -- **databox:** add databox cores ([36e4fd8](https://github.com/ulixee/ulixee/commit/36e4fd802175985755394751dd09a8ceabc5bfa4)) -- **databox:** packaging ([4303a87](https://github.com/ulixee/ulixee/commit/4303a8731ab3aaa6d3f5f859e760948c54305e69)) - -# [2.0.0-alpha.3](https://github.com/ulixee/ulixee/compare/v2.0.0-alpha.2...v2.0.0-alpha.3) (2022-05-19) - -**Note:** Version bump only for package @ulixee/desktop-extension - -# [2.0.0-alpha.2](https://github.com/ulixee/ulixee/compare/v2.0.0-alpha.1...v2.0.0-alpha.2) (2022-05-17) - -**Note:** Version bump only for package @ulixee/desktop-extension - -# 2.0.0-alpha.1 (2022-05-16) - -### Bug Fixes - -- a few very tiny but important changes ([370e29a](https://github.com/ulixee/ulixee/commit/370e29af468cbbe13a6c5ddfb16111e187b08e5d)) -- **chromealive:** allow selecting a range on bar ([3daa0a1](https://github.com/ulixee/ulixee/commit/3daa0a1bb60ec06c996a7cc14f52cd7e93753aee)) -- **chromealive:** change output location for pkg ([e3b509a](https://github.com/ulixee/ulixee/commit/e3b509a86e61210a15279f2ee035ea942be4fcd7)) -- **chromealive:** child windows messing up hide ([1840ccc](https://github.com/ulixee/ulixee/commit/1840cccfbd9a27ac801949d222962ce36ee83695)) -- **chromealive:** finder focus and tabgroup ([cba583d](https://github.com/ulixee/ulixee/commit/cba583d875b713d3be22a856791c643988a46360)) -- **chromealive:** handle screen scale ([c104c21](https://github.com/ulixee/ulixee/commit/c104c21cdfcb8f048e3cdec8f1e89b06f05eaac4)) -- **chromealive:** hide toolbar when not in use ([7c961cf](https://github.com/ulixee/ulixee/commit/7c961cf0fde441d1871f1e0cb45df5e8408a781d)) -- **chromealive:** support multiple page states ([2e98ef6](https://github.com/ulixee/ulixee/commit/2e98ef6f1bbc4de3962aec4022435d9e7e1e8500)) -- **chromealive:** tab switching/closing bugs ([fb937e9](https://github.com/ulixee/ulixee/commit/fb937e9879ba1ed20fe7d6edb440f8ae571bd184)) -- **chromealive:** timeout clicking active tabs ([6ed6359](https://github.com/ulixee/ulixee/commit/6ed63592cba9a3d153c1f307e493a2b8e3a2668c)) -- disable selector menu + timeline snapshot recorder ([e29cc4f](https://github.com/ulixee/ulixee/commit/e29cc4f7e527543a471a0cf145dae1453b656127)) -- **docs:** remove w3c for docs ([4234da1](https://github.com/ulixee/ulixee/commit/4234da1940c33a330c5d156a4c0caa78b666abb2)) -- fixed linting issues + a test bug ([efc875e](https://github.com/ulixee/ulixee/commit/efc875e27404832a567ad7f4055455359f6ec1f0)) -- fixed several lint issues ([e283577](https://github.com/ulixee/ulixee/commit/e283577f5aafef2e4253dce75d83dad1543d9d82)) -- fixes related to messaging between core and extension ([9010624](https://github.com/ulixee/ulixee/commit/90106247e48b86f0818f4512a7c57f7da13e4993)) -- lint require return types ([a829f3f](https://github.com/ulixee/ulixee/commit/a829f3f150e788618f273c7ccfea0a3088ee41d5)) -- more lint fixes ([5ab4ce6](https://github.com/ulixee/ulixee/commit/5ab4ce61d4331931b57078c282c5b90482b80aa3)) -- **pagestate:** convert to panel view ([743d524](https://github.com/ulixee/ulixee/commit/743d524e0d3fb3cc3a20203b26c47ff57c93a844)) -- **pagestate:** service worker dying ([9611927](https://github.com/ulixee/ulixee/commit/9611927eedc6e70321ab0f02c083504a47d203bb)) -- removed usage of commons util createPromise from chromealive extension ([6f4155a](https://github.com/ulixee/ulixee/commit/6f4155aa5745fdde82e1b0c069282bbb676e6fa2)) -- renamed chromealive-extension Index.vue to index.vue ([ba85973](https://github.com/ulixee/ulixee/commit/ba8597330ca74bf9ba6d0d496dc26038b0fb04c0)) -- upgraded sass-loader ([e8be904](https://github.com/ulixee/ulixee/commit/e8be9046fd836eede5c85f4d56e78ceaf242f2ed)) - -### Features - -- added basic UI structure and messaging architecture for selector-generator ([00bfab0](https://github.com/ulixee/ulixee/commit/00bfab0574086be3b090ddc20266ba9bcf7460f4)) -- added chromealive-ui structures for screens and menus ([19ee561](https://github.com/ulixee/ulixee/commit/19ee561092689628831a49ac583c3c40e9e57076)) -- **apps:** automatic server address ([6d60f5e](https://github.com/ulixee/ulixee/commit/6d60f5e4806384cc5255c42439d3946cc1910d6d)) -- chromealive always has a gray dot and toolbar tabs open their screens ([03c5c33](https://github.com/ulixee/ulixee/commit/03c5c33215e7675ae08dc6f3c02cb5dc06129a76)) -- **chromealive:** add pagestate to ui ([d3b428d](https://github.com/ulixee/ulixee/commit/d3b428d5d1cf1711e396d9e9a1b34ffa537292dc)) -- **chromealive:** autoupdate ([b95f86d](https://github.com/ulixee/ulixee/commit/b95f86d1592dac0d73f38cd9032e9c845d79b255)) -- **chromealive:** finder styling, resource search ([6b7f252](https://github.com/ulixee/ulixee/commit/6b7f252e939f53e049a2812cb3bfe050122f652a)) -- **chromealive:** nav using hero script lines ([82f9f1b](https://github.com/ulixee/ulixee/commit/82f9f1bde103192b945d116790579d0ecf59b198)) -- **commons:** source map + code loading support ([ec0bb70](https://github.com/ulixee/ulixee/commit/ec0bb70ff0656535cf4be37db9615d2987909e69)) -- **commons:** ulixee config ([b02d3ce](https://github.com/ulixee/ulixee/commit/b02d3ce4dfd04f12f7686711a9ab95c08f02e96b)) -- coreServerAddress is injected into extension by way of json file ([eed89f4](https://github.com/ulixee/ulixee/commit/eed89f479374072309af396cc44e916729bf6bbb)) -- **finder:** added infrastructure needed for the chromealive finder window ([068fae6](https://github.com/ulixee/ulixee/commit/068fae6f7eda4ebc936cd95caa28e33a29a46e39)) -- first stage of the new toolbar/timeline ([e69f133](https://github.com/ulixee/ulixee/commit/e69f13360349a06daa825ba97671911b98eb2cb0)) -- **herobox:** convert collect to by async get ([8e52752](https://github.com/ulixee/ulixee/commit/8e52752c07156de91bf0fd9c676da55b135c9c88)) -- **pagestate:** align timeline hovers to ticks ([b340db5](https://github.com/ulixee/ulixee/commit/b340db56bdd2db66525ae026310083b2b8dfa5a4)) -- **pagestate:** align timeline hovers to ticks ([a87ae68](https://github.com/ulixee/ulixee/commit/a87ae68e77b0a733a000d7b04c5d592572fbe828)) -- rough working version of selector generator ([b257617](https://github.com/ulixee/ulixee/commit/b2576177b4fb2a1ee8e4b18219487978ff201b9f)) -- **server:** automatically track server host ([aa42f4d](https://github.com/ulixee/ulixee/commit/aa42f4df27414928f04c4bd6d074bb17fd23213c)) -- **toolbar:** removed AddressField in favor of a more robust Player ([b6d3ea1](https://github.com/ulixee/ulixee/commit/b6d3ea191dac92895c72acd98228f90e42599d85)) diff --git a/desktop/chrome-extension/package.build.json b/desktop/chrome-extension/package.build.json deleted file mode 100644 index 20f139f93..000000000 --- a/desktop/chrome-extension/package.build.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "private": true, - "scripts": {}, - "devDependencies": {}, - "dependencies": {} -} diff --git a/desktop/chrome-extension/package.dist.json b/desktop/chrome-extension/package.dist.json deleted file mode 100644 index 20f139f93..000000000 --- a/desktop/chrome-extension/package.dist.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "private": true, - "scripts": {}, - "devDependencies": {}, - "dependencies": {} -} diff --git a/desktop/chrome-extension/package.json b/desktop/chrome-extension/package.json deleted file mode 100644 index b9e9fc304..000000000 --- a/desktop/chrome-extension/package.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "@ulixee/desktop-chrome-extension", - "version": "2.0.0-alpha.29", - "private": true, - "license": "MIT", - "description": "Chrome extension helps ChromeAlive Sessions work", - "scripts": { - "build": "vite build", - "build:dist": "cross-env BUILD_DIR=\"build-dist\" npm run build", - "watch": "vite build -w" - }, - "dependencies": { - "@ulixee/desktop-interfaces": "2.0.0-alpha.29", - "@webcomponents/custom-elements": "^1.5.0", - "nanoid": "^3.3.6" - }, - "devDependencies": { - "@types/chrome": "^0.0.260", - "vite": "^4.5.2" - } -} diff --git a/desktop/chrome-extension/src/content.ts b/desktop/chrome-extension/src/content.ts deleted file mode 100644 index 9d460bd02..000000000 --- a/desktop/chrome-extension/src/content.ts +++ /dev/null @@ -1,90 +0,0 @@ -/// -import '@webcomponents/custom-elements'; -import { MessageEventType } from '@ulixee/desktop-interfaces/BridgeHelpers'; -import ElementOptionsOverlay from './lib/ElementOptionsOverlay'; -import { onMessagePayload, sendToDevtoolsScript } from './lib/content/ContentMessenger'; -import ElementsBucket from './lib/ElementsBucket'; -import findSelectors from './lib/content/findSelectors'; - - -// Define the new element -customElements.define('chromealive-element-options-overlay', ElementOptionsOverlay); - -let elementOptionsOverlay: ElementOptionsOverlay; -const elementsBucket = new ElementsBucket(); - -// eslint-disable-next-line @typescript-eslint/no-unused-vars -function openSelectorMenu(_options: { backendNodeId?: number, element?: HTMLElement }) { - // const { backendNodeId, element } = options; - // if (!elementOptionsOverlay) { - // elementOptionsOverlay = document.createElement('chromealive-element-options-overlay') as ElementOptionsOverlay; - // elementOptionsOverlay.attachElementsBucket(elementsBucket); - // document.body.appendChild(elementOptionsOverlay); - // document.body.addEventListener('click', closeSelectorMenu); - // } - // element ??= elementsBucket.getByKey(backendNodeId); - // if (element && backendNodeId) { - // elementOptionsOverlay.open(backendNodeId, element) - // } else if (backendNodeId) { - // elementOptionsOverlay.openByBackendNodeId(backendNodeId); - // } -} - -function closeSelectorMenu() { - if (!elementOptionsOverlay) return; - elementOptionsOverlay.close(); -} - -function tmpHideSelectorMenu(value: boolean) { - if (!elementOptionsOverlay) return; - elementOptionsOverlay.tmpHide(value); -} - -onMessagePayload(async payload => { - const { event, backendNodeId } = payload; - if (event === MessageEventType.InspectElementModeChanged) { - if (payload.isActive) { - closeSelectorMenu(); - } - - } else if (event === MessageEventType.OpenElementOptionsOverlay) { - openSelectorMenu({ backendNodeId }); - - } else if (event === MessageEventType.HideElementOptionsOverlay) { - tmpHideSelectorMenu(true); - - } else if (event === MessageEventType.RemoveHideFromElementOptionsOverlay) { - tmpHideSelectorMenu(false); - - } else if (event === MessageEventType.CloseElementOptionsOverlay) { - closeSelectorMenu(); - - } else if (event === MessageEventType.UpdateElementOptions) { - if ('isIncluded' in payload) { - if (payload.isIncluded) { - const element = await elementsBucket.getByBackendNodeId(backendNodeId); - elementsBucket.addIncludedElement(backendNodeId, element); - } else { - elementsBucket.removeIncludedElement(backendNodeId); - } - } else if ('isExcluded' in payload) { - if (payload.isExcluded) { - const element = await elementsBucket.getByBackendNodeId(backendNodeId); - elementsBucket.addExcludedElement(backendNodeId, element); - } else { - elementsBucket.removeExcludedElement(backendNodeId); - } - } - } else if (event === MessageEventType.RunSelectorGenerator) { - // const selectors: string[] = []; - const element = elementsBucket.includedElements[0]; - const selectors: string[][] = findSelectors(element).map(x => x.split(' ')); - sendToDevtoolsScript({ event: MessageEventType.FinishedSelectorGeneration, selectors }); - - } else if (event === MessageEventType.ResetSelectorGenerator) { - elementsBucket.reset(); - - } else { - console.log('UNHANDLED MESSAGE: ', payload); - } -}); diff --git a/desktop/chrome-extension/src/devtools.ts b/desktop/chrome-extension/src/devtools.ts deleted file mode 100644 index 05e741abe..000000000 --- a/desktop/chrome-extension/src/devtools.ts +++ /dev/null @@ -1,25 +0,0 @@ -/// - -window.addEventListener('message', event => { - if (event.data.action === 'returnCloudAddress') { - // @ts-expect-error - window.cloudAddress = event.data.cloudAddress; - } -}); - -window.parent?.postMessage({ action: 'getCloudAddress' }); - -function onPanel(extensionPanel) { - let runOnce = false; - extensionPanel.onShown.addListener(panelWindow => { - if (runOnce) return; - runOnce = true; - // @ts-expect-error - panelWindow.setCloudAddress(window.cloudAddress); - }); - return null; -} - -chrome.devtools.panels.create('Hero Script', '/img/logo.svg', '/extension/hero-script.html', onPanel); -chrome.devtools.panels.create('Resources', '/img/resource.svg', '/extension/resources.html', onPanel); -chrome.devtools.panels.create('State Generator', '/img/element.svg', '/extension/state-generator.html', onPanel); diff --git a/desktop/chrome-extension/src/lib/ElementOptionsOverlay.ts b/desktop/chrome-extension/src/lib/ElementOptionsOverlay.ts deleted file mode 100644 index 251bbceae..000000000 --- a/desktop/chrome-extension/src/lib/ElementOptionsOverlay.ts +++ /dev/null @@ -1,460 +0,0 @@ -import { - MessageEventType, - ___sendToCore, - IMessageObject, - MessageLocation, - packMessage, - ResponseCode -} from '@ulixee/desktop-interfaces/BridgeHelpers'; -import ElementsBucket from './ElementsBucket'; - -export default class ElementOptionsOverlay extends HTMLElement { - public hasStartedInitialization = false; - public hasFinishedInitialization = false; - public elementsBucket: ElementsBucket; - - private isOpen = false; - private isTmpHidden = false; - - private selectedElem: HTMLElement; - private selectedBackendNodeId: number; - - private titleNameElem: HTMLElement; - private positionElem: HTMLElement; - - private highlightElem: HTMLElement; - private overlayElem: HTMLElement; - - private mustIncludeToggle: HTMLElement; - private mustExcludeToggle: HTMLElement; - - public attachElementsBucket(elementsBucket: ElementsBucket) { - this.elementsBucket = elementsBucket; - } - - public openByBackendNodeId(backendNodeId: number) { - this.elementsBucket.getByBackendNodeId(backendNodeId) - .then(element => this.open(backendNodeId, element)) - .catch(error => { - console.log(`ERROR: Could not fetch element for backendNodeId: ${backendNodeId}`, error); - }); - } - - public open(backendNodeId: number, element: HTMLElement) { - if (!this.hasFinishedInitialization) { - this.hasFinishedInitialization = true; - return setTimeout(() => { - this.open(backendNodeId, element); - }); - } - - this.selectedElem = element; - this.selectedBackendNodeId = backendNodeId; - if (!element) return; - - const tagName = element.localName; - const classes = Array.from(element.classList); - const titleText = [`${tagName}`, ...classes].join('.'); - - const { width, height, top, left } = element.getBoundingClientRect(); - const absLeft = left + window.scrollX; - const absTop = top + window.scrollY; - - const positionText = `${Math.round(width * 100)/100} x ${Math.round(height * 100)/100}`; - - this.isOpen = true; - this.style.left = `${absLeft}px`; - this.style.top = `${absTop}px`; - this.style.width = `${width}px`; - this.style.height = `${height}px`; - - this.titleNameElem.innerHTML = titleText; - this.positionElem.textContent = positionText; - this.style.display = 'block'; - - const overlayHeight = this.overlayElem.offsetHeight; - - if (top - overlayHeight < 0) { - this.overlayElem.classList.remove('top'); - this.overlayElem.classList.add('bottom'); - } else { - this.overlayElem.classList.remove('bottom'); - this.overlayElem.classList.add('top'); - } - - if (this.elementsBucket.isIncludedBackendNodeId(this.selectedBackendNodeId)) { - this.addOnClassToIncludeToggle(); - } else { - this.addOffClassToIncludeToggle(); - } - - if (this.elementsBucket.isExcludedBackendNodeId(this.selectedBackendNodeId)) { - this.addOnClassToExcludeToggle(); - } else { - this.addOffClassToExcludeToggle(); - } - } - - public tmpHide(value: boolean) { - if (!this.isOpen) return; - if (value === true) { - this.isTmpHidden = true; - this.style.display = 'none'; - } else if (this.isTmpHidden) { - this.isTmpHidden = false; - this.style.display = 'block'; - } - } - - public close() { - this.isOpen = false; - this.isTmpHidden = false; - this.style.display = 'none'; - } - - // PRIVATE /////////////////////////////////////////////////////////////////// - - private addOffClassToIncludeToggle() { - this.mustIncludeToggle.classList.remove('on'); - this.mustIncludeToggle.classList.add('off'); - } - - private addOnClassToIncludeToggle() { - this.mustIncludeToggle.classList.remove('off'); - this.mustIncludeToggle.classList.add('on'); - this.addOffClassToExcludeToggle(); - } - - private addOnClassToExcludeToggle() { - this.mustExcludeToggle.classList.add('on'); - this.mustExcludeToggle.classList.remove('off'); - this.addOffClassToIncludeToggle(); - } - - private addOffClassToExcludeToggle() { - this.mustExcludeToggle.classList.add('off'); - this.mustExcludeToggle.classList.remove('on'); - - } - - private toggleIncluded() { - openSelectorGeneratorPanel(); - const isIncluded = this.elementsBucket.isIncludedBackendNodeId(this.selectedBackendNodeId); - if (isIncluded) { - this.elementsBucket.removeIncludedElement(this.selectedBackendNodeId); - this.addOffClassToIncludeToggle(); - } else { - this.elementsBucket.addIncludedElement(this.selectedBackendNodeId, this.selectedElem); - this.addOnClassToIncludeToggle(); - } - } - - private toggleMustExclude() { - openSelectorGeneratorPanel(); - const isExcluded = this.elementsBucket.isExcludedBackendNodeId(this.selectedBackendNodeId); - if (isExcluded) { - this.elementsBucket.removeExcludedElement(this.selectedBackendNodeId); - this.addOffClassToExcludeToggle(); - } else { - this.elementsBucket.addExcludedElement(this.selectedBackendNodeId, this.selectedElem); - this.addOnClassToExcludeToggle(); - } - } - - private initialize() { - this.style.position = 'absolute'; - this.style.zIndex = '2147483647'; - - this.attachShadow({ mode: 'open' }); - this.createStyleElem(); - this.createHighlighterElem(); - this.createOverlayElem(); - - this.shadowRoot.addEventListener('click', event => { - event.cancelBubble = true; - }); - } - - private createOverlayElem() { - const triangleWidth = 15; - const overlayElem = document.createElement('div'); - overlayElem.setAttribute('class', 'overlay'); - overlayElem.innerHTML = ` -
-
-
------
-
-
-
-
Selector Generator Options:
-
-
- -
- OFF - ON -
-
-
-
-
- -
- OFF - ON -
-
-
-
-
-
-
-
- `; - - this.mustIncludeToggle = overlayElem.querySelector('div#must-include'); - this.mustIncludeToggle.addEventListener('click', event => { - this.toggleIncluded(); - event.cancelBubble = true; - }); - - this.mustExcludeToggle = overlayElem.querySelector('div#must-exclude'); - this.mustExcludeToggle.addEventListener('click', event => { - this.toggleMustExclude(); - event.cancelBubble = true; - }); - - this.overlayElem = overlayElem; - this.titleNameElem = overlayElem.querySelector('.title .name'); - this.positionElem = overlayElem.querySelector('.title .position'); - - this.shadowRoot.appendChild(overlayElem); - } - - private createHighlighterElem() { - if (this.highlightElem) return; - this.highlightElem = document.createElement('div'); - this.highlightElem.setAttribute('class', 'highlighter'); - this.shadowRoot.appendChild(this.highlightElem); - } - - private createStyleElem() { - const css = ` - .highlighter { - background: rgba(91, 150, 202, 0.5); - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - z-index: 1; - } - .overlay { - position: absolute; - z-index: 2; - } - .overlay-panel { - position: relative; - left: 0; - bottom: 0; - z-index: 2; - background: white; - padding: 5px 10px; - border-radius: 4px; - box-shadow: 1px 1px 8px 0 rgb(0 0 0 / 40%); - min-width: 290px; - max-width: 390px; - } - - .overlay-triangle { - position: absolute; - overflow: hidden; - } - .overlay-triangle div { - position: absolute; - transform: rotate(45deg); - height: 15px; - width: 15px; - pointer-events: none; - background: #ffffff; - box-shadow: 1px 1px 8px 0 rgb(0 0 0 / 40%); - } - - .overlay.top { - left: 0; - bottom: calc(100% + 8px); - } - .overlay.top .overlay-triangle { - left: 15px; - top: 100%; - z-index: 2; - } - .overlay.top .overlay-triangle div { - top: -7px; - left: 5px; - } - - .overlay.bottom { - left: 0; - top: calc(100% + 8px); - } - .overlay.bottom .overlay-triangle { - left: 15px; - top: -15px; - z-index: 2; - } - .overlay.bottom .overlay-triangle div { - top: 7px; - left: 5px; - } - - .title { - position: relative; - } - .title .name { - white-space: nowrap; - color: #1A1AA6; - font-weight: bold; - overflow: hidden; - margin-right: 100px; - padding: 5px 0; - text-overflow: ellipsis; - } - .title .name .tag { - color: #881280; - } - .title .position { - padding: 5px 0; - color: silver; - width: 100px; - text-align: right; - position: absolute; - top: 0; - right: 0; - } - - .controller { - border-top: 1px solid rgba(0,0,0,0.1); - padding: 5px 0; - } - .controller .intro { - font-weight: 100; - color: #595959; - padding: 10px 0; - } - .controller .option { - padding: 10px 0; - border-top: 1px solid rgba(0,0,0,0.1); - position: relative; - line-height: 20px; - } - .controller .option label { - font-weight: bold; - } - .controller .option .symbol { - width: 20px; - height: 20px; - position: relative; - display: inline-block; - vertical-align: middle; - } - .controller .option .symbol:before { - content: ""; - position: absolute; - left: 4px; - top: 6px; - width: 12px; - height: 4px; - } - .controller .option .symbol.plus:before { - background: #1CA600; - } - .controller .option .symbol.plus:after { - content: ""; - position: absolute; - top: 2px; - left: 8px; - width: 4px; - height: 12px; - background: #1CA600; - } - .controller .option .symbol.minus:before { - background: #E20000; - } - .controller .option.must-include { - color: #1CA600; - } - .controller .option.must-exclude { - color: #E20000; - } - - .toggle-component { - background: #EFEFEF; - width: 90px; - height: 20px; - border: 1px solid #B3B3B3; - border-radius: 25px; - float: right; - position: relative; - color: silver; - text-shadow: 1px 1px white; - cursor: default; - } - .toggle-component .label { - width: 40px; - display: inline-block; - text-align: center; - z-index: 2; - position: relative; - } - .toggle-component .toggle { - width: 45px; - background: white; - border: 1px solid #8E8E8E; - position: absolute; - top: -1px; - height: 20px; - z-index: 1; - border-radius: 20px; - box-shadow: 1px 1px 1px rgb(0 0 0 / 10%); - } - .toggle-component.on .label.on { - color: black; - } - .toggle-component.off .label.off { - color: black; - } - .toggle-component.on .toggle { - right: -1px; - } - .toggle-component.off .toggle { - left: -1px; - } - `; - const style = document.createElement('style'); - style.appendChild(document.createTextNode(css)); - - this.shadowRoot.appendChild(style); - } - - private connectedCallback() { - if (this.hasStartedInitialization) return; - this.hasStartedInitialization = true; - this.initialize(); - } -} - -// HELPERS ///////////////////////////////////////////////////////////////////////////////////////// - -function openSelectorGeneratorPanel() { - const message: IMessageObject = { - destLocation: MessageLocation.DevtoolsPrivate, - origLocation: MessageLocation.ContentScript, - responseCode: ResponseCode.N, - payload: { - event: MessageEventType.OpenSelectorGeneratorPanel, - } - }; - const packedMessage = packMessage(message); - window[___sendToCore](packedMessage); -} diff --git a/desktop/chrome-extension/src/lib/ElementsBucket.ts b/desktop/chrome-extension/src/lib/ElementsBucket.ts deleted file mode 100644 index 52124fe33..000000000 --- a/desktop/chrome-extension/src/lib/ElementsBucket.ts +++ /dev/null @@ -1,101 +0,0 @@ -import { MessageEventType } from '@ulixee/desktop-interfaces/BridgeHelpers'; -import { sendToCore, sendToDevtoolsPrivate, sendToDevtoolsScript } from './content/ContentMessenger'; - -interface IResolvable { - resolve: (value?: T | PromiseLike) => void; - reject: (reason?: any) => void; -} - -const elementPromisesById: { [id: string]: IResolvable } = {}; - -export default class ElementsBucket { - private includedElementsById: Map = new Map(); - private excludedElementsById: Map = new Map(); - - public get includedElements(): HTMLElement[] { - return Array.from(this.includedElementsById.values()); - } - - public async getByBackendNodeId(backendNodeId: number): Promise { - // @ts-ignore - const callbackFnName = window.onElementFromCore.name; - const promise = new Promise((resolve, reject) => { - elementPromisesById[backendNodeId] = { resolve, reject }; - sendToCore({ event: MessageEventType.ContentScriptNeedsElement, backendNodeId, callbackFnName }); - }); - const element = await promise; - delete elementPromisesById[backendNodeId]; - return element; - } - - public reset() { - this.includedElementsById = new Map(); - this.excludedElementsById = new Map(); - } - - public isIncludedBackendNodeId(backendNodeId: number): boolean { - return this.includedElementsById.has(backendNodeId); - } - - public addIncludedElement(backendNodeId: number, element: HTMLElement): void { - const tagText = extractTagText(element); - this.includedElementsById.set(backendNodeId, element); - this.removeExcludedElement(backendNodeId); - - const payload = { event: MessageEventType.AddIncludedElement, name: tagText, backendNodeId }; - sendToDevtoolsScript(payload); - sendToDevtoolsPrivate(payload); - } - - public removeIncludedElement(backendNodeId: number): void { - this.includedElementsById.delete(backendNodeId); - - const payload = { event: MessageEventType.RemoveIncludedElement, backendNodeId }; - sendToDevtoolsScript(payload); - sendToDevtoolsPrivate(payload); - } - - public isExcludedBackendNodeId(backendNodeId: number): boolean { - return this.excludedElementsById.has(backendNodeId); - } - - public addExcludedElement(backendNodeId: number, element: HTMLElement): void { - const tagText = extractTagText(element); - this.excludedElementsById.set(backendNodeId, element); - this.removeIncludedElement(backendNodeId); - - const payload = { event: MessageEventType.AddExcludedElement, backendNodeId, name: tagText }; - sendToDevtoolsScript(payload); - sendToDevtoolsPrivate(payload); - } - - public removeExcludedElement(backendNodeId: number): void { - this.excludedElementsById.delete(backendNodeId); - - const payload = { event: MessageEventType.RemoveExcludedElement, backendNodeId }; - sendToDevtoolsScript(payload); - sendToDevtoolsPrivate(payload); - } - - public getByKey(backendNodeId: number): HTMLElement { - return this.includedElementsById.get(backendNodeId) || this.excludedElementsById.get(backendNodeId); - } -} - -function extractTagText(element: HTMLElement): string { - const outerHtml = element.outerHTML; - const len = outerHtml.length; - - const openTagLength = outerHtml[len - 2] === '/' ? // Is self-closing tag? - len : - len - element.innerHTML.length - (element.tagName.length + 3); - - return outerHtml.slice(0, openTagLength); -} - -// @ts-ignore -window.onElementFromCore = function onElementFromCore(backendNodeId: number, element: HTMLElement) { - if (!elementPromisesById[backendNodeId]) return; - elementPromisesById[backendNodeId].resolve(element); - delete elementPromisesById[backendNodeId]; -}; diff --git a/desktop/chrome-extension/src/lib/content/ContentMessenger.ts b/desktop/chrome-extension/src/lib/content/ContentMessenger.ts deleted file mode 100644 index 25d9d7a12..000000000 --- a/desktop/chrome-extension/src/lib/content/ContentMessenger.ts +++ /dev/null @@ -1,147 +0,0 @@ -import { - ___receiveFromCore, - ___sendToCore, - createResponseId, - IMessageLocation, - IMessageObject, - IResponseCode, - IRestOfMessageObject, - isResponseMessage, - messageExpectsResponse, - MessageLocation, - packMessage, - ResponseCode, -} from '@ulixee/desktop-interfaces/BridgeHelpers'; - -type IResponseFn = (response: any) => void; - -const currentMessengerLocation = MessageLocation.ContentScript; - -export function sendToDevtoolsScript(payload: any, responseCallbackFn?: IResponseFn) { - const message: IMessageObject = { - destLocation: MessageLocation.DevtoolsScript, - origLocation: currentMessengerLocation, - payload, - ...convertResponseFnToCodeAndId(responseCallbackFn), - }; - routeInternally(message); -} - -// @ts-ignore -window.sendToDevtoolsScript = sendToDevtoolsScript; - -export function sendToDevtoolsPrivate(payload: any, responseCallbackFn?: IResponseFn) { - const message: IMessageObject = { - destLocation: MessageLocation.DevtoolsPrivate, - origLocation: currentMessengerLocation, - payload, - ...convertResponseFnToCodeAndId(responseCallbackFn), - }; - routeInternally(message); -} - -export function sendToCore(payload: any, responseCallbackFn?: IResponseFn) { - const message: IMessageObject = { - destLocation: MessageLocation.Core, - origLocation: currentMessengerLocation, - payload, - ...convertResponseFnToCodeAndId(responseCallbackFn), - }; - routeInternally(message); -} - -let onMessagePayloadFn; -export function onMessagePayload(fn: (payload: any, responseFn: IResponseFn) => void) { - if (onMessagePayloadFn) throw new Error('onMessage has already been called'); - onMessagePayloadFn = fn; -} - -// LISTENER TO <-> FROM CORE /////////////////////////////////////////////////////////////////////// - -// receive and route messages coming in from core -window[___receiveFromCore] = ( - destLocation: IMessageLocation, - responseCode: IResponseCode, - restOfMessage: IRestOfMessageObject, -) => { - const message: IMessageObject = { - destLocation, - responseCode, - ...restOfMessage, - }; - if (message.destLocation === currentMessengerLocation) { - if (isResponseMessage(message)) { - handleIncomingLocalResponse(message); - } else { - handleIncomingLocalMessage(message); - } - } else { - throw new Error('Unknown destLocation'); - } -}; - -// INTERNAL VARIABLES ////////////////////////////////////////////////////////////////////////////// - -const pendingByResponseId: { - [id: string]: { - responseFn: IResponseFn; - timeoutId: any; - }; -} = {}; - -// HELPERS /////////////////////////////////////////////////////////////////////////// - -function handleIncomingLocalMessage(message: IMessageObject) { - const needsResponse = messageExpectsResponse(message); - const responseFn = needsResponse ? response => sendResponseBack(message, response) : undefined; - onMessagePayloadFn(message.payload, responseFn); -} - -function handleIncomingLocalResponse(response: IMessageObject) { - const pending = pendingByResponseId[response.responseId]; - if (!pending) { - throw new Error(`Incoming response (${response.responseId}) could not be handled`); - } - delete pendingByResponseId[response.responseId]; - clearTimeout(pending.timeoutId); - pending.responseFn(response.payload); -} - -function sendResponseBack(message: IMessageObject, responsePayload) { - const responseCode = ResponseCode.R; - const { responseId, origLocation: destLocation } = message; - const response: IMessageObject = { - destLocation, - origLocation: MessageLocation.Core, - responseId, - responseCode, - payload: responsePayload, - }; - routeInternally(response); -} - -// INTERNAL ROUTING //////////////////////////////////////////////////////////////////////////////// - -function routeInternally(message: IMessageObject) { - const packedMessage = packMessage(message); - window[___sendToCore](packedMessage); -} - -function convertResponseFnToCodeAndId(responseFn: IResponseFn) { - if (responseFn) { - const responseId = createResponseId(); - pendingByResponseId[responseId] = { - responseFn, - timeoutId: setTimeout(() => { - throw new Error(`Response for ${responseId} not received within 10s`); - }, 10e3), - }; - return { - responseCode: ResponseCode.Y, - responseId, - }; - } - return { - responseCode: ResponseCode.N, - }; -} diff --git a/desktop/chrome-extension/src/lib/content/findSelectors.ts b/desktop/chrome-extension/src/lib/content/findSelectors.ts deleted file mode 100644 index 9c4bac0c7..000000000 --- a/desktop/chrome-extension/src/lib/content/findSelectors.ts +++ /dev/null @@ -1,205 +0,0 @@ -type ISelectorOption = string[]; - -interface ITarget { - element: Element; - selectorOptions: ISelectorOption[]; -} - -type IAncestors = ITarget[]; -type ILayers = ITarget[]; - -const RankByType = { - tag: 1, - id: 2, - class: 3, - attr: 4, -}; - -function sortByLength(a, b) { - return a.length - b.length; -} - -export default function findSelectors(element: Element) { - const target = generateTarget(element); - const ancestors = generateAncestors(element); - const layerKeyPairs = generateLayerKeyPairs(target, ancestors); - const layers = [...ancestors, target]; - const possibleSelectorCount = calculatePossibleSelectorCount(layers, layerKeyPairs); - - console.log('target: ', target); - console.log('ancestors: ', ancestors); - console.log('ancestorsKeyPairs: ', layerKeyPairs); - console.log('possibleSelectors: ', possibleSelectorCount); - - const selectors = generateShortSelectors(layers, layerKeyPairs); - console.log('selectors: ', selectors); - - return selectors.sort(sortByLength); -} - -function generateShortSelectors(layers: ILayers, ancestorKeyPairs: string[][]): string[] { - const selectors: string[] = []; - const maxSelectorCount = 1e3; - let selectorDepth = 0; - while (selectors.length < maxSelectorCount) { - const maxSelectorCountRemaining = maxSelectorCount - selectors.length; - const possibleSelectors = fetchSelectorsToCheck( - selectorDepth, - layers, - ancestorKeyPairs, - maxSelectorCountRemaining, - ); - for (const possibleSelector of possibleSelectors) { - const hasOneMatch = document.querySelectorAll(possibleSelector).length === 1; - if (!hasOneMatch) continue; - - selectors.push(possibleSelector); - } - selectorDepth += 1; - } - return selectors; -} - -function fetchSelectorsToCheck( - depth: number, - layers: ILayers, - ancestorKeyPairs: string[][], - maxSelectorCount: number, -): string[] { - const selectors = []; - for (const ancestorKeys of ancestorKeyPairs.filter(x => x.length === depth + 2)) { - let baseSelectors = ['']; - let prevKey; - for (const key of ancestorKeys) { - let isDirectSibling = false; - if (prevKey && Number(key) - Number(prevKey) === 1) { - isDirectSibling = true; - } - const layer = layers[key]; - const selectorOptions = layer.selectorOptions.filter(x => x.length === depth + 1); - baseSelectors = appendToSelectors(baseSelectors, selectorOptions, isDirectSibling); - } - for (const selector of baseSelectors) { - selectors.push(selector); - } - if (selectors.length >= maxSelectorCount) break; - } - return selectors; -} - -function appendToSelectors( - baseSelectors, - selectorOptions: ISelectorOption[], - isDirectSibling: boolean, -): string[] { - const newSelectors = []; - const relation = isDirectSibling ? ' > ' : ' '; - for (const selectorOption of selectorOptions) { - try { - const newPart = selectorOption.join(''); - for (const baseSelector of baseSelectors) { - newSelectors.push(`${baseSelector}${relation}${newPart}`); - } - } catch (error) { - console.log(selectorOption); - throw error; - } - } - return newSelectors; -} - -function generateLayerKeyPairs(target: ITarget, ancestors: IAncestors): string[][] { - const ancestorCombinations = generateAllCombinations(Object.keys(ancestors)); - const allCombinations: string[][] = []; - for (const ancestorCombination of ancestorCombinations) { - allCombinations.push([...ancestorCombination, ancestors.length.toString()]); - } - return allCombinations.sort(sortByLength); -} - -function generateTarget(element: Element): ITarget { - const selectorOptions = extractSelectorOptions(element); - const parentElement = element.parentElement; - try { - const uniqueToParent = selectorOptions.filter( - x => parentElement.querySelectorAll(x.join('')).length === 1, - ); - return { element, selectorOptions: uniqueToParent }; - } catch (error) { - console.log(selectorOptions); - throw error; - } -} - -function generateAncestors(element: Element): IAncestors { - const ancestors: IAncestors = []; - while (element) { - const parent = element.parentElement; - if (parent.localName === 'body') break; - const selectorOptions = extractSelectorOptions(parent); - ancestors.unshift({ element: parent, selectorOptions }); - element = parent; - } - return ancestors; -} - -function extractSelectorOptions(element: Element): ISelectorOption[] { - const tagName = element.localName; - const id = element.id && !element.id.match(/^[0-9]/) ? `#${element.id}` : null; - const classes = Array.from(element.classList).map(x => `.${x}`); - const attrNames = element.getAttributeNames().filter(k => !['class'].includes(k)); - const attrs = attrNames.map(x => { - const v = element.getAttribute(x); - // only treat ID as an attribute if it starts with a number - if (x === 'id' && v && !v.match(/^[0-9]/)) return; - return `[${x}="${v}"]`; - }); - const parts = [ - { type: 'tag', rank: RankByType.tag, value: tagName }, - { type: 'id', rank: RankByType.id, value: id }, - ...classes.map(value => ({ type: 'class', rank: RankByType.class, value })), - ...attrs.map(value => ({ type: 'attr', rank: RankByType.attr, value })), - ].filter(x => x.value); - - const selectorCombinations = generateAllCombinations(parts).map(combination => { - return combination.sort((a, b) => a.rank - b.rank); - }); - - selectorCombinations.sort((a, b) => { - let aScore = a.length; - if (a.some(x => x.type === 'attr')) aScore += 1; - if (a[0].type === 'attr') aScore += 1; - let bScore = b.length; - if (b.some(x => x.type === 'attr')) bScore += 1; - if (b[0].type === 'attr') bScore += 1; - return aScore - bScore; - }); - - return selectorCombinations.map(x => x.map(y => y.value)); -} - -function generateAllCombinations(options) { - function combinationFn(activeSet, restOfArray, all) { - if (!activeSet.length && !restOfArray.length) return; - if (!restOfArray.length) { - all.push(activeSet); - } else { - combinationFn([...activeSet, restOfArray[0]], restOfArray.slice(1), all); - combinationFn([...activeSet], restOfArray.slice(1), all); - } - return all; - }; - return combinationFn([], [...options], []); -} - -function calculatePossibleSelectorCount(layers: ILayers, ancestorKeyPairs: string[][]) { - let count = 0; - for (const ancestorKeys of ancestorKeyPairs) { - let localCount = 1; - for (const ancestorKey of ancestorKeys) { - localCount *= layers[ancestorKey].selectorOptions.length; - } - count += localCount; - } - return count; -} diff --git a/desktop/chrome-extension/src/lib/devtools/DevtoolsMessenger.ts b/desktop/chrome-extension/src/lib/devtools/DevtoolsMessenger.ts deleted file mode 100644 index d7b721ae8..000000000 --- a/desktop/chrome-extension/src/lib/devtools/DevtoolsMessenger.ts +++ /dev/null @@ -1,149 +0,0 @@ -import { - MessageLocation, - IMessageObject, - ResponseCode, - isResponseMessage, - messageExpectsResponse, - createResponseId, - ___receiveFromCore, - IMessageLocation, - IResponseCode, - IRestOfMessageObject, - packMessage, - ___sendToCore, -} from '@ulixee/desktop-interfaces/BridgeHelpers'; - -type IResponseFn = (response: any) => void; - -const currentMessengerLocation = MessageLocation.DevtoolsScript; - -export function sendToContentScript(tabId: number, payload: any, responseCallbackFn?: IResponseFn) { - const message: IMessageObject = { - destLocation: MessageLocation.ContentScript, - origLocation: currentMessengerLocation, - payload, - ...convertResponseFnToCodeAndId(responseCallbackFn), - }; - routeInternally(message); -} - -export function sendToDevtoolsPrivate(payload: any, responseCallbackFn?: IResponseFn) { - const message: IMessageObject = { - destLocation: MessageLocation.DevtoolsPrivate, - origLocation: currentMessengerLocation, - payload, - ...convertResponseFnToCodeAndId(responseCallbackFn), - }; - routeInternally(message); -} - -export function sendToCore(payload, responseCallbackFn?: IResponseFn) { - const message: IMessageObject = { - destLocation: MessageLocation.Core, - origLocation: currentMessengerLocation, - payload, - ...convertResponseFnToCodeAndId(responseCallbackFn), - }; - routeInternally(message); -} - -// LISTEN TO MESSAGES ////////////////////////////////////////////////////////////////////////////// - -let onMessageFn; -export function onMessagePayload(fn: (payload: any, responseFn: IResponseFn) => void) { - if (onMessageFn) throw new Error('onMessage has already been set'); - onMessageFn = fn; -} - -export function offMessage() { - onMessageFn = undefined; -} - -// INTERNAL VARIABLES ////////////////////////////////////////////////////////////////////////////// - -const pendingByResponseId: { - [id: string]: { - responseFn: IResponseFn; - timeoutId: any; - }; -} = {}; - -// receive and route messages coming in from core -window[___receiveFromCore] = ( - destLocation: IMessageLocation, - responseCode: IResponseCode, - restOfMessage: IRestOfMessageObject, -) => { - const message: IMessageObject = { - destLocation, - responseCode, - ...restOfMessage, - }; - if (message.destLocation === currentMessengerLocation) { - if (isResponseMessage(message)) { - handleIncomingLocalResponse(message); - } else { - handleIncomingLocalMessage(message); - } - } else { - throw new Error('Unknown destLocation'); - } -}; - - -// HELPERS ////////////////////////////////////////////////////////////////////////////////////////// - -function handleIncomingLocalMessage(message: IMessageObject) { - const needsResponse = messageExpectsResponse(message); - const responseFn = needsResponse ? response => routeResponseBack(message, response) : undefined; - onMessageFn(message.payload, responseFn); -} - -function handleIncomingLocalResponse(response: IMessageObject) { - const pending = pendingByResponseId[response.responseId]; - if (!pending) { - throw new Error(`Incoming response (${response.responseId}) could not be handled`); - } - delete pendingByResponseId[response.responseId]; - clearTimeout(pending.timeoutId); - pending.responseFn(response.payload); -} - -function routeResponseBack(message: IMessageObject, responsePayload) { - const responseCode = ResponseCode.R; - const { responseId, origLocation: destLocation } = message; - const response: IMessageObject = { - destLocation, - origLocation: currentMessengerLocation, - responseId, - responseCode, - payload: responsePayload, - }; - routeInternally(response); -} - -// INTERNAL ROUTING //////////////////////////////////////////////////////////////////////////////// - -function routeInternally(message: IMessageObject) { - const packedMessage = packMessage(message); - window[___sendToCore](packedMessage); -} - -function convertResponseFnToCodeAndId(responseFn: IResponseFn) { - if (responseFn) { - const responseId = createResponseId(); - pendingByResponseId[responseId] = { - responseFn, - timeoutId: setTimeout(() => { - throw new Error(`Response for ${responseId} not received within 10s`); - }, 10e3), - }; - return { - responseCode: ResponseCode.Y, - responseId, - }; - } - return { - responseCode: ResponseCode.N, - }; -} diff --git a/desktop/chrome-extension/src/lib/logDebug.ts b/desktop/chrome-extension/src/lib/logDebug.ts deleted file mode 100644 index 2efc6ce1c..000000000 --- a/desktop/chrome-extension/src/lib/logDebug.ts +++ /dev/null @@ -1,15 +0,0 @@ -let isDebugEnabled = false; -export function enableDebugLogging(off = false) { - isDebugEnabled = !off; -} - -// @ts-ignore -// eslint-disable-next-line no-restricted-globals -self.enableDebugLogging = enableDebugLogging; - -export default function logDebug(message: string, ...args: any[]) { - if (isDebugEnabled) { - // eslint-disable-next-line no-console - console.log(`${new Date().toISOString().split('T').pop() } ${ message}`, ...args); - } -} diff --git a/desktop/chrome-extension/src/public/manifest.json b/desktop/chrome-extension/src/public/manifest.json deleted file mode 100644 index 14d2265c0..000000000 --- a/desktop/chrome-extension/src/public/manifest.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "Chrome Alive Extension", - "version": "1.0", - "manifest_version": 3, - "content_scripts": [ - { - "matches": ["*://*/*"], - "js": ["/content.js"], - "run_at": "document_start" - } - ], - "host_permissions": ["https://*/*", "http://*/*", "*://*/*"], - "devtools_page": "/devtools-entrypoint.html", - "key": "LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JSUV2Z0lCQURBTkJna3Foa2lHOXcwQkFRRUZBQVNDQktnd2dnU2tBZ0VBQW9JQkFRREgxcGJWdkQwNk5VQjUKclJuLzhIOSszc0IvMmFBL1o5MThQaUt6VWRWdjhzZlFkQzNldXQ3U0d3WkpnYy9SVXVhM2RxY0VFaGlYdTA5TApzazUwSFUwWnh1ZDhMSGw4RW90T29ITFRjRUZWamF2VVVXT09FMElPalY4TWdNcldQTkl2aE9EMnNnZDBzWXk2CkNMNUlpNUNGeEJTaVNhTkZtbG9Band5cCsrMmcrUWxkTnM4dk1zZjN1d2ZrQTljVHJGcWIrKzdnRzFrK2N5TnYKazFYRHFVWGNsL3JCdTFreTVRaDlYNUQ3SnVabURFTnVZeVhVNnFSdERJRytNUFhkMlVvc3liTDNaWW9xRFBDWApPVXhjSXdSdUFucFFaZDIyTXJ1aDRkRi9FSlk4cXhnd2Rha1hrQldJK2EvcUhka3hlMDh2ZEV6SndybFcrY1dWCmdRaE1Uakh6QWdNQkFBRUNnZ0VBSE5yZ1pyWktoUGdoZWpCRGU5QkhLSk9UYWlLTFgveG9YOE05RVhWMGd6aWsKSDNaWEZUMFlaWEFmaFVlb01VcHVJL21PL2loNndwWDZTaXpSNVRSQjZNSHV0T0JiSGs0ekxVUS9zRVlhT1BjKwo0MlpwSUorcFB4NnNwY3FHLzA1Qzd6ZVpvQ1Z1ckN2aTdRM01JLzk2KzhXblVST2U3ckx0NGZ6RjBGbWZJMG53CjBBZHRtbFBwOWtSK0VCRCtYNkwyRExWK2tkNkV3eERIbDFzYWVkOUdCMU9nM21Kd241enk2MUFTU1pMMzhuOXgKdW5qclJ2YW96Q3NTK1VGNFhkTERkOHEwZXUzRGFoRkIwS2h0RDRQRitaSGNHanYzaU1pSXBRWldJRDc1eWtIOAplSEJrb1ExWFUrTGkxTFBVbWkxWDJkd2x1bnhzenBVN0NMQ0w3MkpXc1FLQmdRRHpnYzdpbmpaYXVxUENPZ01MCmR4eTN1eHA2MlFUM1VZNi9hZlRDSkdOTXZ3cmN5dmY3KzZuMkNhU01JTDlGQ052bytzaUFZTFQ4K0VwdjIzMS8KQlVkc0ZiNnYrL3NBZWxjRHg4azdBZkE3NHBrMFV2Ti8wTkZLLzRCZWFsWWdUbWU1TVVvZU1aTHRvNGRIRnhmRQp3RytPbXQwa0d6b0dnM1JoeDRLajlBdGlHd0tCZ1FEU0Z6MTJGUDFJMlFtZzdNU0pla2ExNThxYytjWnN0Qjd4CkxlK3ZidHNRT3JKQlVrMGR6WDVCdE1QNzlsN1M5MU1qRTY5RWEwSEF6eVVOVGdIWW9qZWppR3FVNHl1YW1WSGoKSUxLWkdzT2pNOWlUdzVzckp0K2FNd0ZNMEFucDMxWUxlVFZxTzlQNHAvTkU3N3hoUldsTXd4OEhZOGg3SDl6agpoZFFRaVlzdENRS0JnQUZqdmtDQTBxS1Y2aFZUcTJ6SFV6eWhMcmVBd1l4L3hLYkcvZ1NWbkpOMWk2UlM3RE5kCjdreGZKYmMvQUpodVFvTUQyMTBRTURnNVdvTms1MFJ3VFVZS29ibnpZQzFTaFdpYUhVWGU3dllJaHdOTGJlUk8KMXNMc3psaTdscDQ4bEU3MFB3NEpEbU9ZeVU3WWpPUXNqUFp0WDlHeTdoUFhjRFNXcE9JMnBGSDlBb0dCQU5CVApEelQ2RnphWFVMN3NTTzd4K3hBQjZwM0I2QXAraVhncVR0UXRIcmgzRzY4K1J3M1lhT3dLclpRNWQwbkd5ZitzClUwMks5Y2FWSVc2Ui9hNnRISExpb0oxR3JrUTg2RUJLZWc3cnhUY2VBQkoyRW5XMXRHQVpWNTZ0WkVjdW1Rb0QKaFAzMG1YcW1QOG9KMTBpMUpYZGl2Ry85ZUJ6dk9YKzdnczlyTkVEUkFvR0JBS1hQeEZVVm9CV3RvVmd6TUFQQQpnbXVHdE5IaDRSajJKZ0dUSkZRYzR6VHY0VEV5akR6ZDluU0pxMThBSHBFLzlqOUhiaHV0emlPT3BQSGVjL3RPClBJTGpyLzFnR0Mzb0pCYWl0OU53cnk3c2xsaVBkd3YzMURqR1daTm1XOWc0SnNscjc3RERFV1JsSFJtVTVrT0EKdXEyQ3dYWFZNbTZYR0ExQUFSM1BIM0dTCi0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS0K" -} diff --git a/desktop/chrome-extension/tsconfig.json b/desktop/chrome-extension/tsconfig.json deleted file mode 100644 index fba08d0cd..000000000 --- a/desktop/chrome-extension/tsconfig.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "experimentalDecorators": true, - "target": "ES2021", - "module": "CommonJS", - "lib": ["ES2021", "DOM", "DOM.Iterable"], - "noImplicitAny": false, - "sourceMap": false, - "allowJs": true, - "types": ["node", "chrome"] - }, - "include": ["./src/**/*.ts", "manifest.json"], - "exclude": ["**/tsconfig*.json", "**/node_modules", "**/build"] -} diff --git a/desktop/chrome-extension/vite.config.js b/desktop/chrome-extension/vite.config.js deleted file mode 100644 index c309fc21d..000000000 --- a/desktop/chrome-extension/vite.config.js +++ /dev/null @@ -1,25 +0,0 @@ -import { defineConfig } from 'vite'; -import { fileURLToPath } from 'node:url'; - -const outDir = process.env.BUILD_DIR ?? 'build'; -const outputDir = fileURLToPath(new URL(`../../${outDir}/desktop/main/app/ui/`, import.meta.url)); - -export default defineConfig({ - root: 'src', - build: { - lib: { - entry: ['content.ts', 'devtools.ts'], - }, - outDir: outputDir, - target: 'chrome120', - // needed for commonjs to be activated for @ulixee deps - commonjsOptions: { include: [] }, - emptyOutDir: false, - sourcemap: 'inline', - }, - resolve: { - alias: { - '@': fileURLToPath(new URL('./src', import.meta.url)), - }, - }, -}); diff --git a/desktop/main/.eslintrc.js b/desktop/main/.eslintrc.js deleted file mode 100644 index f455ee806..000000000 --- a/desktop/main/.eslintrc.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - extends: ['../../.eslintrc.js'], - settings: { - 'import/core-modules': ['electron'], - }, -}; diff --git a/desktop/main/CHANGELOG.md b/desktop/main/CHANGELOG.md deleted file mode 100644 index 17defc73e..000000000 --- a/desktop/main/CHANGELOG.md +++ /dev/null @@ -1,221 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -# [2.0.0-alpha.29](https://github.com/ulixee/platform/compare/v2.0.0-alpha.28...v2.0.0-alpha.29) (2024-07-16) - - -### Bug Fixes - -* **end-to-end:** use docker for e2e tests ([3f243de](https://github.com/ulixee/platform/commit/3f243deb40d2b1cc86048d171d574b3690a29395)) -* **github:** databroker tests broken ([801f62c](https://github.com/ulixee/platform/commit/801f62cad9e16e441cbea7fe3660098ade31ef34)) - - -### Features - -* **databroker:** new feature to delegate payment ([47900e3](https://github.com/ulixee/platform/commit/47900e314b8d9f59f88598b1d914e211e1ae5bdf)) -* **datastore:** integrate escrow payments ([b00fdd5](https://github.com/ulixee/platform/commit/b00fdd52e36bc9480297639a5584a6f71d6890dd)) -* **desktop:** accounts vs localchains ([2c63e7e](https://github.com/ulixee/platform/commit/2c63e7eb1d0d7261dc00a74b80fa9a30a48ebb42)) -* **desktop:** add qr code to wallet ([ca432da](https://github.com/ulixee/platform/commit/ca432da2847ba95fccfc25cf7c51f93638c12964)) -* **desktop:** update wallet ux ([3b9fbfb](https://github.com/ulixee/platform/commit/3b9fbfba9c91bec72b3dbc4b88b83eb39992d617)) -* integrate argon payments to desktop ([b8a7ffd](https://github.com/ulixee/platform/commit/b8a7ffd651d88160afbfe7906c09e2eac06a345d)) - - - - - -# [2.0.0-alpha.28](https://github.com/ulixee/platform/compare/v2.0.0-alpha.27...v2.0.0-alpha.28) (2024-03-11) - -**Note:** Version bump only for package @ulixee/desktop - - - - - -# [2.0.0-alpha.27](https://github.com/ulixee/platform/compare/v2.0.0-alpha.26...v2.0.0-alpha.27) (2024-03-01) - -**Note:** Version bump only for package @ulixee/desktop - - - - - -# [2.0.0-alpha.26](https://github.com/ulixee/platform/compare/v2.0.0-alpha.25...v2.0.0-alpha.26) (2024-02-02) - -**Note:** Version bump only for package @ulixee/desktop - -# [2.0.0-alpha.25](https://github.com/ulixee/platform/compare/v2.0.0-alpha.24...v2.0.0-alpha.25) (2023-09-28) - -**Note:** Version bump only for package @ulixee/desktop - -# [2.0.0-alpha.24](https://github.com/ulixee/platform/compare/v2.0.0-alpha.23...v2.0.0-alpha.24) (2023-08-09) - -**Note:** Version bump only for package @ulixee/desktop - -# [2.0.0-alpha.23](https://github.com/ulixee/platform/compare/v2.0.0-alpha.22...v2.0.0-alpha.23) (2023-07-07) - -### Features - -- **datastore:** change urls to be id@version ([903e34b](https://github.com/ulixee/platform/commit/903e34b43d8fb2bca060dc6344453da885fef29a)) -- **datastore:** convert to id and semver ([1f5d524](https://github.com/ulixee/platform/commit/1f5d524eed5f7af42e271190994040c2d183f450)) - -# [2.0.0-alpha.22](https://github.com/ulixee/platform/compare/v2.0.0-alpha.21...v2.0.0-alpha.22) (2023-06-12) - -### Features - -- **cloud:** add peer network ([9b214de](https://github.com/ulixee/platform/commit/9b214de012f765df3a42aa45b6b92d95d7d68a22)) -- **cloud:** registry service configuration ([08e9f71](https://github.com/ulixee/platform/commit/08e9f719f0c242ffbbcc3f09aca334563c9b87b9)) -- **datastore:** add duplex connections to kad ([ada47bd](https://github.com/ulixee/platform/commit/ada47bd01e2c894d370011b7eb1296f269fb3e47)) -- **datastore:** add migrations ([04542bd](https://github.com/ulixee/platform/commit/04542bdb05bc4250839fdb7b30eb11a2ab20b290)) -- **datastore:** cluster replay store ([c0347aa](https://github.com/ulixee/platform/commit/c0347aa4a81c31ac2f80f507cc7a048a360c3561)) -- **datastore:** configure storage endpoint ([0fca691](https://github.com/ulixee/platform/commit/0fca6913eb63335c055e5b4c88760092f9c55694)) -- **datastore:** upload to storage eng to create ([1453654](https://github.com/ulixee/platform/commit/1453654cc2300fa2735f901545da5cf7e218b3cc)) - -# [2.0.0-alpha.21](https://github.com/ulixee/platform/compare/v2.0.0-alpha.20...v2.0.0-alpha.21) (2023-04-24) - -### Bug Fixes - -- **desktop:** vm breaks in packaged electron app ([a5c9f4e](https://github.com/ulixee/platform/commit/a5c9f4ef62120a2807f7b5aa6e829460502ac72c)) - -# [2.0.0-alpha.20](https://github.com/ulixee/platform/compare/v2.0.0-alpha.19...v2.0.0-alpha.20) (2023-04-20) - -### Bug Fixes - -- **datastore:** failing tests ([8e3f881](https://github.com/ulixee/platform/commit/8e3f881876a59c2b241806c04260d73e03d37617)) -- **datastore:** output rebuilding ([8d10cc7](https://github.com/ulixee/platform/commit/8d10cc7e24cfd1ad65725a3e14dc4a3a2a3d5954)) -- **desktop:** binary not loading properly ([3b0b641](https://github.com/ulixee/platform/commit/3b0b6414dbec9a798fba0e802ef06fd8ff790c6e)) -- **desktop:** event handling fixes ([841c031](https://github.com/ulixee/platform/commit/841c031a2ec5061ce201b21aeb58ea53c4ac64a8)) - -### chore - -- rename miner to cloud node ([a3c949e](https://github.com/ulixee/platform/commit/a3c949e4af806cc6a4acdd4b4b04305946add19b)) - -### Features - -- **datastore:** add docs ([da39923](https://github.com/ulixee/platform/commit/da39923c0ba5f21359e58a55fc205e82af708e65)) -- **desktop:** add datastore details page ([a6bce0b](https://github.com/ulixee/platform/commit/a6bce0b9f5ac1121d37c3029bd8fd20f147e9324)) -- **desktop:** getting started guide ([1e3fd87](https://github.com/ulixee/platform/commit/1e3fd87973807e8862a5696421aa768a6cd02bb6)) -- **desktop:** log user queries locally ([33fb721](https://github.com/ulixee/platform/commit/33fb7215afca7bde722217a827a82e4b89082a8c)) -- **desktop:** query ability on queries tab ([3960c7b](https://github.com/ulixee/platform/commit/3960c7b9fda1f9bea3a81850bb4fdadf9f54b2d4)) - -### BREAKING CHANGES - -- @ulixee/miner package is now @ulixee/cloud. - You must import {CloudNode} from @ulixee/cloud and use in place of Miner. - -# [2.0.0-alpha.19](https://github.com/ulixee/platform/compare/v2.0.0-alpha.17...v2.0.0-alpha.19) (2023-02-25) - -### Bug Fixes - -- **datastore:** error logging ([7ee3d02](https://github.com/ulixee/platform/commit/7ee3d02076c0ced0dda05c884b25a33236f73d12)) -- **desktop:** allow opening external sesison ([5f5e229](https://github.com/ulixee/platform/commit/5f5e229a45f2373f1c3f236aadd7e21b17dbda87)) - -### Features - -- **desktop:** add desktop home page ([d8f5611](https://github.com/ulixee/platform/commit/d8f56110c66a1d290bf28c9e227721716fbe1f7a)) -- **desktop:** add pages to home ([76ff239](https://github.com/ulixee/platform/commit/76ff239eeacdd3c03d44ed91781b900e352479a6)) -- **desktop:** playback of script ([521d21f](https://github.com/ulixee/platform/commit/521d21faaa769651ad485afee876f09a73dde18e)) - -# [2.0.0-alpha.18](https://github.com/ulixee/platform/compare/v2.0.0-alpha.17...v2.0.0-alpha.18) (2023-01-17) - -**Note:** Version bump only for package @ulixee/apps-desktop - -# [2.0.0-alpha.17](https://github.com/ulixee/platform/compare/v2.0.0-alpha.16...v2.0.0-alpha.17) (2022-12-15) - -### Features - -- **databox:** passthrough functions ([c84ba16](https://github.com/ulixee/platform/commit/c84ba168265ebdb167e6ceeb5e3f6bd116760710)) - -# [2.0.0-alpha.16](https://github.com/ulixee/platform/compare/v2.0.0-alpha.15...v2.0.0-alpha.16) (2022-12-05) - -### Bug Fixes - -- tests ([547e189](https://github.com/ulixee/platform/commit/547e189235e022cedbd8be365d742f684341ef2d)) - -### Features - -- databox functions ([b14352d](https://github.com/ulixee/platform/commit/b14352d8160de6667e05bdbf86b6b6df32d056e4)) - -# [2.0.0-alpha.15](https://github.com/ulixee/platform/compare/v2.0.0-alpha.14...v2.0.0-alpha.15) (2022-11-17) - -**Note:** Version bump only for package @ulixee/apps-desktop - -# [2.0.0-alpha.14](https://github.com/ulixee/platform/compare/v2.0.0-alpha.13...v2.0.0-alpha.14) (2022-11-02) - -**Note:** Version bump only for package @ulixee/apps-desktop - -# [2.0.0-alpha.13](https://github.com/ulixee/ulixee/compare/v2.0.0-alpha.12...v2.0.0-alpha.13) (2022-10-31) - -### Bug Fixes - -- add development mode for desktop app ([603b35e](https://github.com/ulixee/ulixee/commit/603b35e27a1e6b1ea3b14a7b0d29af8cd2c5612a)) - -# [2.0.0-alpha.12](https://github.com/ulixee/ulixee/compare/v2.0.0-alpha.11...v2.0.0-alpha.12) (2022-10-03) - -**Note:** Version bump only for package @ulixee/apps-desktop - -# [2.0.0-alpha.11](https://github.com/ulixee/ulixee/compare/v2.0.0-alpha.10...v2.0.0-alpha.11) (2022-08-31) - -**Note:** Version bump only for package @ulixee/apps-desktop - -# [2.0.0-alpha.10](https://github.com/ulixee/ulixee/compare/v2.0.0-alpha.9...v2.0.0-alpha.10) (2022-08-16) - -**Note:** Version bump only for package @ulixee/apps-desktop - -# [2.0.0-alpha.9](https://github.com/ulixee/ulixee/compare/v2.0.0-alpha.8...v2.0.0-alpha.9) (2022-07-26) - -**Note:** Version bump only for package @ulixee/apps-desktop - -# [2.0.0-alpha.8](https://github.com/ulixee/ulixee/compare/v2.0.0-alpha.7...v2.0.0-alpha.8) (2022-07-13) - -**Note:** Version bump only for package @ulixee/apps-desktop - -# [2.0.0-alpha.7](https://github.com/ulixee/ulixee/compare/v2.0.0-alpha.6...v2.0.0-alpha.7) (2022-06-28) - -**Note:** Version bump only for package @ulixee/apps-desktop - -# [2.0.0-alpha.6](https://github.com/ulixee/ulixee/compare/v2.0.0-alpha.5...v2.0.0-alpha.6) (2022-06-10) - -**Note:** Version bump only for package @ulixee/apps-desktop - -# [2.0.0-alpha.5](https://github.com/ulixee/ulixee/compare/v2.0.0-alpha.3...v2.0.0-alpha.5) (2022-06-10) - -### Bug Fixes - -- events for chromealive not working ([88ca517](https://github.com/ulixee/ulixee/commit/88ca517875062ef2975eb441e5f3aa9e6bf6b2e6)) - -### Features - -- **databox:** add databox cores ([36e4fd8](https://github.com/ulixee/ulixee/commit/36e4fd802175985755394751dd09a8ceabc5bfa4)) - -# [2.0.0-alpha.4](https://github.com/ulixee/ulixee/compare/v2.0.0-alpha.3...v2.0.0-alpha.4) (2022-06-09) - -### Features - -- **databox:** add databox cores ([36e4fd8](https://github.com/ulixee/ulixee/commit/36e4fd802175985755394751dd09a8ceabc5bfa4)) - -# [2.0.0-alpha.3](https://github.com/ulixee/ulixee/compare/v2.0.0-alpha.2...v2.0.0-alpha.3) (2022-05-19) - -**Note:** Version bump only for package @ulixee/apps-desktop - -# [2.0.0-alpha.2](https://github.com/ulixee/ulixee/compare/v2.0.0-alpha.1...v2.0.0-alpha.2) (2022-05-17) - -**Note:** Version bump only for package @ulixee/apps-desktop - -# 2.0.0-alpha.1 (2022-05-16) - -### Bug Fixes - -- **apps:** configuration order ([6483735](https://github.com/ulixee/ulixee/commit/64837359e2f86b96b529558f05c9a28eb8981b6b)) -- **chromealive:** change output location for pkg ([e3b509a](https://github.com/ulixee/ulixee/commit/e3b509a86e61210a15279f2ee035ea942be4fcd7)) - -### Features - -- **apps:** add version to boot ([43cc0db](https://github.com/ulixee/ulixee/commit/43cc0db17fe1ba955ef51cdda5dcc30d0bcfc9de)) -- **apps:** automatic server address ([6d60f5e](https://github.com/ulixee/ulixee/commit/6d60f5e4806384cc5255c42439d3946cc1910d6d)) -- **apps:** make chromealive “opt-in” ([0419c2b](https://github.com/ulixee/ulixee/commit/0419c2bc2db50856e727bab08b86d33eea5d692f)) -- **chromealive:** autoupdate ([b95f86d](https://github.com/ulixee/ulixee/commit/b95f86d1592dac0d73f38cd9032e9c845d79b255)) -- convert secret-agent to browser only ([968208f](https://github.com/ulixee/ulixee/commit/968208f0690900dfc641ad4c8fd47b51eef6fa11)) -- **server:** automatically track server host ([aa42f4d](https://github.com/ulixee/ulixee/commit/aa42f4df27414928f04c4bd6d074bb17fd23213c)) -- unify plugin structure ([ac6c30a](https://github.com/ulixee/ulixee/commit/ac6c30afd518c67b3230ff2109c90d381e21aaec)) diff --git a/desktop/main/app/CHANGELOG.md b/desktop/main/app/CHANGELOG.md deleted file mode 100644 index beefa650c..000000000 --- a/desktop/main/app/CHANGELOG.md +++ /dev/null @@ -1,79 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -# [2.0.0-alpha.29](https://github.com/ulixee/platform/compare/v2.0.0-alpha.28...v2.0.0-alpha.29) (2024-07-16) - - -### Bug Fixes - -* **end-to-end:** use docker for e2e tests ([3f243de](https://github.com/ulixee/platform/commit/3f243deb40d2b1cc86048d171d574b3690a29395)) -* **github:** databroker tests broken ([801f62c](https://github.com/ulixee/platform/commit/801f62cad9e16e441cbea7fe3660098ade31ef34)) - - -### Features - -* **databroker:** new feature to delegate payment ([47900e3](https://github.com/ulixee/platform/commit/47900e314b8d9f59f88598b1d914e211e1ae5bdf)) -* **datastore:** integrate escrow payments ([b00fdd5](https://github.com/ulixee/platform/commit/b00fdd52e36bc9480297639a5584a6f71d6890dd)) -* **desktop:** accounts vs localchains ([2c63e7e](https://github.com/ulixee/platform/commit/2c63e7eb1d0d7261dc00a74b80fa9a30a48ebb42)) -* **desktop:** add qr code to wallet ([ca432da](https://github.com/ulixee/platform/commit/ca432da2847ba95fccfc25cf7c51f93638c12964)) -* **desktop:** update wallet ux ([3b9fbfb](https://github.com/ulixee/platform/commit/3b9fbfba9c91bec72b3dbc4b88b83eb39992d617)) -* integrate argon payments to desktop ([b8a7ffd](https://github.com/ulixee/platform/commit/b8a7ffd651d88160afbfe7906c09e2eac06a345d)) - - - - - -# [2.0.0-alpha.28](https://github.com/ulixee/platform/compare/v2.0.0-alpha.27...v2.0.0-alpha.28) (2024-03-11) - -**Note:** Version bump only for package @ulixee/desktop-app - - - - - -# [2.0.0-alpha.27](https://github.com/ulixee/platform/compare/v2.0.0-alpha.26...v2.0.0-alpha.27) (2024-03-01) - -**Note:** Version bump only for package @ulixee/desktop-app - - - - - -# [2.0.0-alpha.26](https://github.com/ulixee/platform/compare/v2.0.0-alpha.25...v2.0.0-alpha.26) (2024-02-02) - -**Note:** Version bump only for package @ulixee/desktop-app - -# [2.0.0-alpha.25](https://github.com/ulixee/platform/compare/v2.0.0-alpha.24...v2.0.0-alpha.25) (2023-09-28) - -**Note:** Version bump only for package @ulixee/desktop-app - -# [2.0.0-alpha.24](https://github.com/ulixee/platform/compare/v2.0.0-alpha.23...v2.0.0-alpha.24) (2023-08-09) - -**Note:** Version bump only for package @ulixee/desktop-app - -# [2.0.0-alpha.23](https://github.com/ulixee/platform/compare/v2.0.0-alpha.22...v2.0.0-alpha.23) (2023-07-07) - -### Features - -- **datastore:** change urls to be id@version ([903e34b](https://github.com/ulixee/platform/commit/903e34b43d8fb2bca060dc6344453da885fef29a)) -- **datastore:** convert to id and semver ([1f5d524](https://github.com/ulixee/platform/commit/1f5d524eed5f7af42e271190994040c2d183f450)) - -# [2.0.0-alpha.22](https://github.com/ulixee/platform/compare/v2.0.0-alpha.21...v2.0.0-alpha.22) (2023-06-12) - -### Features - -- **cloud:** add peer network ([9b214de](https://github.com/ulixee/platform/commit/9b214de012f765df3a42aa45b6b92d95d7d68a22)) -- **cloud:** registry service configuration ([08e9f71](https://github.com/ulixee/platform/commit/08e9f719f0c242ffbbcc3f09aca334563c9b87b9)) -- **datastore:** add duplex connections to kad ([ada47bd](https://github.com/ulixee/platform/commit/ada47bd01e2c894d370011b7eb1296f269fb3e47)) -- **datastore:** add migrations ([04542bd](https://github.com/ulixee/platform/commit/04542bdb05bc4250839fdb7b30eb11a2ab20b290)) -- **datastore:** cluster replay store ([c0347aa](https://github.com/ulixee/platform/commit/c0347aa4a81c31ac2f80f507cc7a048a360c3561)) -- **datastore:** configure storage endpoint ([0fca691](https://github.com/ulixee/platform/commit/0fca6913eb63335c055e5b4c88760092f9c55694)) -- **datastore:** upload to storage eng to create ([1453654](https://github.com/ulixee/platform/commit/1453654cc2300fa2735f901545da5cf7e218b3cc)) - -# [2.0.0-alpha.21](https://github.com/ulixee/platform/compare/v2.0.0-alpha.20...v2.0.0-alpha.21) (2023-04-24) - -### Bug Fixes - -- **desktop:** vm breaks in packaged electron app ([a5c9f4e](https://github.com/ulixee/platform/commit/a5c9f4ef62120a2807f7b5aa6e829460502ac72c)) diff --git a/desktop/main/app/assets/IconTemplate.png b/desktop/main/app/assets/IconTemplate.png deleted file mode 100644 index 8cd6b6d9ddaf53e7568c8ac7f274b3dbce8cb229..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 559 zcmeAS@N?(olHy`uVBq!ia0vp^B0wy}!3HFwFZ>e#QY`6?zK#qG8~eHcB(ehe7O4@Q zX}-P;T0k}j17mw80}GJF2*grA%)r33fC(-lvVa-R76M7ig{r3m6)*C1aSX8#oO zekqxaK{*CB_3OX;r1zb+{(L2UUh%x*d&jHq%?#K0BD;6Vd4}8n?#;NI<>37H;I|pO zHyW~k-|+rR^H0lZAG(r{h}OQbJEXH~LT}WQ#X{m29v3cda+=k}dCrULv(=U#vrfE} zaAzwE?5S*-*eyF{F^~QSDWAz(7bM?wH+$^+>Ttzzkx2^z?!E~;94N}Yfq(Od=(>bh zceCtU>yzaowmKb~=#gU5X+ER-&YCv=Yrm8q*ZCyy-7{8kceULtz2mIO^@-cpY}G!d ze8O3K&xN@+3r{SOI$d^A-hA@+4UDD|PRw}|dk#pX95+65_ukL&kcs|lchxO7bQiQP zy}oQ^UpTXDyuIL6c7gC07RDFEuk{-DEEIWdV6WJA?#Svte>j3q9byWa$Z4wM$p59v z?a<#KCGKku_y0(REof5@cyVs=tjenm{Cmr;8=Mcw_nK}0UgfxKcTD1}nRguD3cdT! n==Hz-9@FI`=c?*@>tlbh+KIG1>g}^#2#PgNS3j3^P69#C|ap>SI#c?G06`!lH9kO5=JO#7S9#d}z36Wm)8!&^Z ztbvQL1tvie6!1KuItFZo(RfrnNkynV!#W%0Zx6Uj-@PY5@i}juO-(8< z3HT`;qn3ah(Es59)t*Ry9V_2s#JR+?exTQGkEb;o*D3tI1AV1i zU~GP+E`jNCL~~&UXoBLF&ah|;*>6B&(*}`tfwB3On&G2h4tA=MPWow%bcSt(XbakJ z;1Bp~jm-qV=P$5tg5Dst2i-cFj499}O`w+o`wi%48;Wl#)OvkXUVvGkBSuPtZBPk{ zp@Y3u(k*cU{1S3)x;Z3Wb9*2|4NsFPi{U5O{dDgKqI{y%fF0be>#N+B)|NKGeQ;zT+0zDu!r8AQKaZy5BHc7LnuM|7U^Lh}Lv{OsLPQc94N-v3P&hu=~9!jy< z8Qe}(Gp8BcZTaXn2~A@d$-PtU1Xa(3#bE5ZDnpSzF3Z6T9IY(CC&Tl5O_>a#=m4Wc zOUkzI$4{?Wn@Gzc6zS8*P9j!a=bm&Hde+qv{L`QK?;uuE_OoC3b_AV=&6d7Mnk&7g kw;u8KRdNsFb+-Nf0RTQVz=D2LVgLXD07*qoM6N<$f=&7L!~g&Q diff --git a/desktop/main/app/assets/arg.icns b/desktop/main/app/assets/arg.icns deleted file mode 100644 index 791a3c52253a510f90f4ce0351e360bc02109ac7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 606421 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

Nw$=*tHru0NZ*^O{ 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Π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Ϥozo!br-mXGzq22cP+meV{Wb0P8p4G@bO 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

=Ow8rYqx4jOMb~{k0T(3!dBq@z$94Y*|Ka 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 z⋘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 eOj*6-!~Xz@fj~xXXT&oA0000 - - - - com.apple.security.network.client - - com.apple.security.network.server - - - com.apple.security.cs.allow-jit - - com.apple.security.cs.allow-unsigned-executable-memory - - - diff --git a/desktop/main/app/assets/icon.png b/desktop/main/app/assets/icon.png deleted file mode 100644 index aa472894810a060f64b3341eeba54b60ff9c76ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42455 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

$6NE0Fx=L>>GBPw$<$H&n->-K5yq?K_%T&Zc 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 Btf>G1 diff --git a/desktop/main/app/index.ts b/desktop/main/app/index.ts deleted file mode 100644 index b5de03b88..000000000 --- a/desktop/main/app/index.ts +++ /dev/null @@ -1,22 +0,0 @@ -import '@ulixee/commons/lib/SourceMapSupport'; -import { app } from 'electron'; -import { Menubar } from './lib/Menubar'; -import './lib/util/UlixeeLogger'; -import './lib/util/defaultEnvVars'; - -process.env.ELECTRON_DISABLE_SECURITY_WARNINGS = 'true'; -process.env.DEVTOOLS_PORT ??= '8315'; -app.commandLine.appendSwitch('remote-debugging-port', process.env.DEVTOOLS_PORT); - -const { version } = require('./package.json'); - -const menubar = new Menubar({ - width: 300, - height: 300, - tooltip: 'Ulixee', -}); - -menubar.on('ready', () => { - // eslint-disable-next-line no-console - console.log('RUNNING ULIXEE DESKTOP', version); -}); diff --git a/desktop/main/app/interfaces/IMenubarOptions.ts b/desktop/main/app/interfaces/IMenubarOptions.ts deleted file mode 100644 index a6e0abad8..000000000 --- a/desktop/main/app/interfaces/IMenubarOptions.ts +++ /dev/null @@ -1,5 +0,0 @@ -export default interface IMenubarOptions { - tooltip: string; - width: number; - height: number; -} diff --git a/desktop/main/app/lib/AccountManager.ts b/desktop/main/app/lib/AccountManager.ts deleted file mode 100644 index fbf0d26e8..000000000 --- a/desktop/main/app/lib/AccountManager.ts +++ /dev/null @@ -1,392 +0,0 @@ -import EventSubscriber from '@ulixee/commons/lib/EventSubscriber'; -import { TypedEventEmitter } from '@ulixee/commons/lib/eventUtils'; -import Logger from '@ulixee/commons/lib/Logger'; -import Queue from '@ulixee/commons/lib/Queue'; -import Env from '@ulixee/datastore/env'; -import IDatastoreHostLookup from '@ulixee/datastore/interfaces/IDatastoreHostLookup'; -import ILocalUserProfile from '@ulixee/datastore/interfaces/ILocalUserProfile'; -import { IDatabrokerAccount, IWallet } from '@ulixee/datastore/interfaces/IPaymentService'; -import DatastoreLookup from '@ulixee/datastore/lib/DatastoreLookup'; -import LocalUserProfile from '@ulixee/datastore/lib/LocalUserProfile'; -import { IArgonFileMeta } from '@ulixee/desktop-interfaces/apis'; -import { - BalanceSyncResult, - CryptoScheme, - Localchain, - LocalchainOverview, - MainchainClient, -} from '@argonprotocol/localchain'; -import { ArgonFileSchema } from '@ulixee/platform-specification/types/IArgonFile'; -import ArgonUtils from '@ulixee/platform-utils/lib/ArgonUtils'; -import { gettersToObject } from '@ulixee/platform-utils/lib/objectUtils'; -import serdeJson from '@ulixee/platform-utils/lib/serdeJson'; -import * as Path from 'path'; -import BrokerEscrowSource from '@ulixee/datastore/payments/BrokerEscrowSource'; -import { IArgonFile } from './ArgonFile'; - -const { log } = Logger(module); - -export default class AccountManager extends TypedEventEmitter<{ - update: { wallet: IWallet }; -}> { - exited = false; - events = new EventSubscriber(); - public localchains: Localchain[] = []; - private localchainAddresses = new Map(); - private nextTick: NodeJS.Timeout; - private mainchainClient: MainchainClient; - private queue = new Queue('LOCALCHAIN', 1); - - constructor(readonly localUserProfile: LocalUserProfile) { - super(); - if (Env.defaultDataDir) { - Localchain.setDefaultDir(Path.join(Env.defaultDataDir, 'ulixee', 'localchain')); - } - } - - public async loadMainchainClient(url?: string, timeoutMillis?: number): Promise { - url ??= Env.mainchainUrl; - if (url) { - try { - this.mainchainClient = await MainchainClient.connect(url, timeoutMillis ?? 10e3); - for (const localchain of this.localchains) { - await localchain.attachMainchain(this.mainchainClient); - await localchain.updateTicker(); - } - } catch (error) { - log.error('Could not connect to mainchain', { error }); - throw error; - } - } - } - - public async start(): Promise { - if (!this.localUserProfile.localchainPaths.length) { - await this.addAccount(); - } - this.localchains = await Promise.all( - this.localUserProfile.localchainPaths.map(path => - Localchain.loadWithoutMainchain(path, { - genesisUtcTime: Env.genesisUtcTime, - tickDurationMillis: Env.tickDurationMillis, - ntpPoolUrl: Env.ntpPoolUrl, - escrowExpirationTicks: Env.escrowExpirationTicks, - }), - ), - ); - void this.loadMainchainClient().then(this.emitWallet.bind(this)); - this.scheduleNextSync(); - } - - public async close(): Promise { - if (this.exited) return; - this.exited = true; - } - - public async addBrokerAccount( - config: ILocalUserProfile['databrokers'][0], - ): Promise { - // check first and throw error if invalid - const balance = await this.getBrokerBalance(config.host, config.userIdentity); - const entry = this.localUserProfile.databrokers.find(x => x.host === config.host); - if (entry) { - entry.userIdentity = config.userIdentity; - entry.name = config.name; - } else { - this.localUserProfile.databrokers.push(config); - } - await this.localUserProfile.save(); - return { - ...config, - balance, - }; - } - - public async getBrokerBalance(host: string, identity: string): Promise { - return await BrokerEscrowSource.getBalance(host, identity); - } - - public async getBrokerAccounts(): Promise { - const brokers = this.localUserProfile.databrokers.map(x => ({ ...x, balance: 0n })); - for (const broker of brokers) { - broker.balance = await this.getBrokerBalance(broker.host, broker.userIdentity).catch( - () => 0n, - ); - } - return brokers; - } - - public async addAccount( - config: { path?: string; password?: string; cryptoScheme?: CryptoScheme; suri?: string } = {}, - ): Promise { - config ??= {}; - let defaultPath = config.path ?? Localchain.getDefaultPath(); - if (!defaultPath.endsWith('.db')) { - defaultPath = Path.join(defaultPath, 'primary.db'); - } - log.info('Adding localchain', { - localchainPath: defaultPath, - } as any); - const password = config.password - ? { - password: Buffer.from(config.password), - } - : undefined; - const localchain = await Localchain.loadWithoutMainchain( - defaultPath, - { - ...Env, - }, - password, - ); - this.localchains.push(localchain); - - if (!this.localUserProfile.localchainPaths.includes(localchain.path)) { - this.localUserProfile.localchainPaths.push(localchain.path); - await this.localUserProfile.save(); - } - if (this.mainchainClient) { - await localchain.attachMainchain(this.mainchainClient); - await localchain.updateTicker(); - } - if (!(await localchain.accounts.list()).length) { - if (config.suri) { - await localchain.keystore.importSuri( - config.suri, - config.cryptoScheme ?? CryptoScheme.Sr25519, - { - password: config.password ? Buffer.from(config.password) : undefined, - }, - ); - } else { - await localchain.keystore.bootstrap(); - } - } - return localchain; - } - - public async getAddress(localchain: Localchain): Promise { - if (!this.localchainAddresses.has(localchain)) { - this.localchainAddresses.set(localchain, await localchain.address); - } - return this.localchainAddresses.get(localchain); - } - - public async getLocalchain(address: String): Promise { - if (!address) return null; - for (const chain of this.localchains) { - if ((await this.getAddress(chain)) === address) return chain; - } - } - - public async getDatastoreHostLookup(): Promise { - return new DatastoreLookup(this.mainchainClient); - } - - public async getWallet(): Promise { - const accounts = await Promise.all(this.localchains.map(x => x.accountOverview())); - const brokerAccounts = await this.getBrokerAccounts(); - let balance = 0n; - for (const account of accounts) { - balance += account.balance + account.mainchainBalance; - } - for (const account of brokerAccounts) { - balance += account.balance; - } - - const formattedBalance = ArgonUtils.format(balance, 'milligons', 'argons'); - - return { - credits: [], - brokerAccounts, - accounts, - formattedBalance, - }; - } - - public async transferMainchainToLocal(address: string, amount: bigint): Promise { - const localchain = await this.getLocalchain(address); - if (!localchain) throw new Error('No localchain found for address'); - await localchain.mainchainTransfers.sendToLocalchain(amount); - } - - public async transferLocalToMainchain(address: string, amount: bigint): Promise { - const localchain = await this.getLocalchain(address); - if (!localchain) throw new Error('No localchain found for address'); - const change = localchain.beginChange(); - const account = await change.defaultDepositAccount(); - await account.sendToMainchain(amount); - const result = await change.notarize(); - log.info('Localchain to mainchain transfer notarized', { - notarizationTracker: await gettersToObject(result), - } as any); - } - - public async createAccount( - name: string, - suri?: string, - password?: string, - ): Promise { - const path = Path.join(Localchain.getDefaultDir(), `${name}.db`); - const localchain = await this.addAccount({ path, suri, password }); - return await localchain.accountOverview(); - } - - public async createArgonsToSendFile(request: { - milligons: bigint; - fromAddress?: string; - toAddress?: string; - }): Promise { - const localchain = (await this.getLocalchain(request.fromAddress)) ?? this.localchains[0]; - - const file = await localchain.transactions.send( - request.milligons, - request.toAddress ? [request.toAddress] : null, - ); - const argonFile = JSON.parse(file); - - const recipient = request.toAddress ? `for ${request.toAddress}` : 'cash'; - return { - rawJson: file, - file: ArgonFileSchema.parse(argonFile), - name: `${ArgonUtils.format(request.milligons, 'milligons', 'argons')} ${recipient}.arg`, - }; - } - - public async createArgonsToRequestFile(request: { - milligons: bigint; - sendToMyAddress?: String; - }): Promise { - const localchain = (await this.getLocalchain(request.sendToMyAddress)) ?? this.localchains[0]; - const file = await localchain.transactions.request(request.milligons); - const argonFile = JSON.parse(file); - - return { - rawJson: file, - file: ArgonFileSchema.parse(argonFile), - name: `Argon Request ${new Date().toLocaleString()}`, - }; - } - - public async acceptArgonRequest( - argonFile: IArgonFile, - fulfillFromAccount?: String, - ): Promise { - if (!argonFile.request) { - throw new Error('This Argon file is not a request'); - } - let fromAddress = fulfillFromAccount; - if (!fromAddress) { - const funding = argonFile.request.reduce((sum, x) => { - if (x.accountType === 'deposit') { - for (const note of x.notes) { - if (note.noteType.action === 'claim') sum += note.milligons; - } - } - return sum; - }, 0n); - for (const account of this.localchains) { - const overview = await account.accountOverview(); - if (overview.balance >= funding) { - fromAddress = overview.address; - break; - } - } - } - const localchain = (await this.getLocalchain(fromAddress)) ?? this.localchains[0]; - const argonFileJson = serdeJson(argonFile); - await this.queue.run(async () => { - const importChange = localchain.beginChange(); - await importChange.acceptArgonFileRequest(argonFileJson); - const result = await importChange.notarize(); - log.info('Argon request notarized', { - notarizationTracker: await gettersToObject(result), - } as any); - }); - } - - public async importArgons(argonFile: IArgonFile): Promise { - if (!argonFile.send) { - throw new Error('This Argon file does not contain any sent argons'); - } - - const filters = argonFile.send - .map(x => { - if (x.accountType === 'deposit') { - for (const note of x.notes) { - if (note.noteType.action === 'send') { - return note.noteType.to; - } - } - } - return []; - }) - .flat() - .filter(Boolean); - - let localchain = this.localchains[0]; - for (const filter of filters) { - const lookup = await this.getLocalchain(filter); - if (lookup) { - localchain = lookup; - break; - } - } - - const argonFileJson = serdeJson(argonFile); - await this.queue.run(async () => { - const importChange = localchain.beginChange(); - await importChange.importArgonFile(argonFileJson); - const result = await importChange.notarize(); - log.info('Argon import notarized', { - notarizationTracker: await gettersToObject(result), - } as any); - }); - } - - private scheduleNextSync(): void { - const localchain = this.localchains[0]; - if (!localchain) return null; - const nextTick = Number(localchain.ticker.millisToNextTick()); - this.nextTick = setTimeout(() => this.sync().catch(() => null), nextTick + 1); - } - - private async sync(): Promise { - clearTimeout(this.nextTick); - try { - const syncs = []; - for (const localchain of this.localchains) { - syncs.push(await this.queue.run(async () => localchain.balanceSync.sync())); - } - const result = syncs.reduce( - (x, next) => { - x.escrowNotarizations.push(...next.escrowNotarizations); - x.balanceChanges.push(...next.balanceChanges); - x.jumpAccountConsolidations.push(...next.jumpAccountConsolidations); - x.mainchainTransfers.push(...next.mainchainTransfers); - return x; - }, - { - escrowNotarizations: [], - balanceChanges: [], - jumpAccountConsolidations: [], - mainchainTransfers: [], - } as BalanceSyncResult, - ); - if (result.mainchainTransfers.length || result.balanceChanges.length) { - log.info('Account sync result', { - ...(await gettersToObject(result)), - } as any); - await this.emitWallet(); - } - } catch (error) { - log.error('Error synching account balance changes', { error }); - } - this.scheduleNextSync(); - } - - private async emitWallet(): Promise { - const wallet = await this.getWallet(); - this.emit('update', { wallet }); - } -} diff --git a/desktop/main/app/lib/ApiClient.ts b/desktop/main/app/lib/ApiClient.ts deleted file mode 100644 index a1edf8f5c..000000000 --- a/desktop/main/app/lib/ApiClient.ts +++ /dev/null @@ -1,70 +0,0 @@ -import { Serializable } from 'child_process'; -import { IChromeAliveSessionApis, IDesktopAppApis } from '@ulixee/desktop-interfaces/apis'; -import { TypedEventEmitter } from '@ulixee/commons/lib/eventUtils'; -import { ConnectionToCore, WsTransportToCore } from '@ulixee/net'; -import ITransport from '@ulixee/net/interfaces/ITransport'; -import ICoreResponsePayload from '@ulixee/net/interfaces/ICoreResponsePayload'; -import ICoreRequestPayload from '@ulixee/net/interfaces/ICoreRequestPayload'; -import IChromeAliveSessionEvents from '@ulixee/desktop-interfaces/events/IChromeAliveSessionEvents'; -import IDesktopAppEvents from '@ulixee/desktop-interfaces/events/IDesktopAppEvents'; -import { toUrl } from '@ulixee/commons/lib/utils'; - -export default class ApiClient< - TApis extends IDesktopAppApis | IChromeAliveSessionApis, - TEvents extends IChromeAliveSessionEvents | IDesktopAppEvents, - TEventNames extends keyof TEvents = keyof TEvents, -> extends TypedEventEmitter<{ close: void }> { - public isConnected = false; - public address: string; - public readonly transport: ITransport; - private connection: ConnectionToCore; - - constructor( - address: string, - public onEvent: (event: TEventNames, data?: TEvents[TEventNames]) => any, - ) { - super(); - try { - const url = toUrl(address); - url.hostname.replace('localhost', '127.0.0.1'); - this.address = url.href; - } catch (error) { - console.error('Invalid API URL', error, { address }); - throw error; - } - this.transport = new WsTransportToCore(this.address); - this.connection = new ConnectionToCore(this.transport); - this.connection.on('event', this.onMessage.bind(this)); - this.connection.on('disconnected', this.onDisconnected.bind(this)); - } - - public async connect(): Promise { - await this.connection.connect(false, 15e3); - this.isConnected = true; - } - - public async disconnect(): Promise { - this.isConnected = false; - await this.connection.disconnect(); - } - - public async send( - command: T, - ...args: ICoreRequestPayload['args'] - ): Promise['data']> { - return await this.connection.sendRequest({ command, args }); - } - - private onDisconnected(): void { - this.emit('close'); - } - - private onMessage(message: Serializable): void { - if (message === 'exit') { - this.onEvent('App.quit' as any); - return; - } - const apiEvent = (message as any).event; - this.onEvent(apiEvent.eventType, apiEvent.data); - } -} diff --git a/desktop/main/app/lib/ApiManager.ts b/desktop/main/app/lib/ApiManager.ts deleted file mode 100644 index 8950d9865..000000000 --- a/desktop/main/app/lib/ApiManager.ts +++ /dev/null @@ -1,435 +0,0 @@ -import { CloudNode } from '@ulixee/cloud'; -import UlixeeHostsConfig from '@ulixee/commons/config/hosts'; -import EventSubscriber from '@ulixee/commons/lib/EventSubscriber'; -import { TypedEventEmitter } from '@ulixee/commons/lib/eventUtils'; -import Resolvable from '@ulixee/commons/lib/Resolvable'; -import { toUrl } from '@ulixee/commons/lib/utils'; -import IDatastoreDeployLogEntry from '@ulixee/datastore-core/interfaces/IDatastoreDeployLogEntry'; -import { IWallet } from '@ulixee/datastore/interfaces/IPaymentService'; -import IQueryLogEntry from '@ulixee/datastore/interfaces/IQueryLogEntry'; -import DatastoreApiClient from '@ulixee/datastore/lib/DatastoreApiClient'; -import DatastoreApiClients from '@ulixee/datastore/lib/DatastoreApiClients'; -import LocalUserProfile from '@ulixee/datastore/lib/LocalUserProfile'; -import QueryLog from '@ulixee/datastore/lib/QueryLog'; -import DefaultPaymentService from '@ulixee/datastore/payments/DefaultPaymentService'; -import { IDesktopAppApis } from '@ulixee/desktop-interfaces/apis'; -import { ICloudConnected } from '@ulixee/desktop-interfaces/apis/IDesktopApis'; -import IDesktopAppEvents from '@ulixee/desktop-interfaces/events/IDesktopAppEvents'; -import ArgonUtils from '@ulixee/platform-utils/lib/ArgonUtils'; -import { screen } from 'electron'; -import * as http from 'http'; -import { AddressInfo } from 'net'; -import * as Path from 'path'; -import { ClientOptions } from 'ws'; -import WebSocket = require('ws'); -import AccountManager from './AccountManager'; -import ApiClient from './ApiClient'; -import ArgonFile, { IArgonFile } from './ArgonFile'; -import DeploymentWatcher from './DeploymentWatcher'; -import PrivateDesktopApiHandler from './PrivateDesktopApiHandler'; - -const { version } = require('../package.json'); - -const bundledDatastoreExample = Path.join(__dirname, '../assets/ulixee-docs.dbx.tgz'); - -export default class ApiManager< - TEventType extends keyof IDesktopAppEvents & string = keyof IDesktopAppEvents, -> extends TypedEventEmitter<{ - 'api-event': { - cloudAddress: string; - eventType: TEventType; - data: IDesktopAppEvents[TEventType]; - }; - 'new-cloud-address': ICloudConnected; - 'argon-file-opened': IArgonFile; - deployment: IDatastoreDeployLogEntry; - 'wallet-updated': { wallet: IWallet }; - query: IQueryLogEntry; -}> { - apiByCloudAddress = new Map< - string, - { - name: string; - adminIdentity?: string; - cloudNodes: number; - type: 'local' | 'public' | 'private'; - resolvable: Resolvable; - } - >(); - - localCloud: CloudNode; - exited = false; - events = new EventSubscriber(); - localCloudAddress: string; - debuggerUrl: string; - localUserProfile: LocalUserProfile; - deploymentWatcher: DeploymentWatcher; - paymentService: DefaultPaymentService; - accountManager: AccountManager; - queryLogWatcher: QueryLog; - privateDesktopApiHandler: PrivateDesktopApiHandler; - privateDesktopWsServer: WebSocket.Server; - privateDesktopWsServerAddress: string; - - datastoreApiClients = new DatastoreApiClients(); - private reconnectsByAddress: { [address: string]: NodeJS.Timeout } = {}; - - constructor() { - super(); - this.localUserProfile = new LocalUserProfile(); - this.deploymentWatcher = new DeploymentWatcher(); - this.queryLogWatcher = new QueryLog(); - this.privateDesktopApiHandler = new PrivateDesktopApiHandler(this); - this.accountManager = new AccountManager(this.localUserProfile); - } - - public async start(): Promise { - this.debuggerUrl = await this.getDebuggerUrl(); - this.privateDesktopWsServer = new WebSocket.Server({ port: 0 }); - this.events.on( - this.privateDesktopWsServer, - 'connection', - this.handlePrivateApiWsConnection.bind(this), - ); - this.privateDesktopWsServerAddress = await new Promise(resolve => { - this.privateDesktopWsServer.once('listening', () => { - const address = this.privateDesktopWsServer.address() as AddressInfo; - resolve(`ws://127.0.0.1:${address.port}`); - }); - }); - - this.paymentService = new DefaultPaymentService(); - await this.accountManager.start(); - this.events.on(this.accountManager, 'update', ev => - this.emit('wallet-updated', { wallet: ev.wallet }), - ); - - if (!this.localUserProfile.defaultAdminIdentityPath) { - await this.localUserProfile.createDefaultAdminIdentity(); - } - this.deploymentWatcher.start(); - this.queryLogWatcher.monitor(x => this.emit('query', x)); - await this.startLocalCloud(); - this.events.on(UlixeeHostsConfig.global, 'change', this.onNewLocalCloudAddress.bind(this)); - this.events.on(this.deploymentWatcher, 'new', x => this.emit('deployment', x)); - for (const cloud of this.localUserProfile.clouds) { - await this.connectToCloud({ - ...cloud, - adminIdentity: cloud.adminIdentity, - type: 'private', - }); - } - } - - public async getWallet(): Promise { - const localchainWallet = await this.accountManager.getWallet(); - const credits = await this.paymentService.credits(); - const creditBalance = credits.reduce((sum, x) => sum + x.remaining, 0); - const creditMilligons = ArgonUtils.microgonsToMilligons(creditBalance); - - const localchainBalance = localchainWallet.accounts.reduce( - (sum, x) => sum + x.balance + x.mainchainBalance, - 0n, - ); - - const brokerBalance = localchainWallet.brokerAccounts.reduce((sum, x) => sum + x.balance, 0n); - - const formattedBalance = ArgonUtils.format( - localchainBalance + creditMilligons + brokerBalance, - 'milligons', - 'argons', - ); - - return { - credits, - accounts: localchainWallet.accounts, - brokerAccounts: localchainWallet.brokerAccounts, - formattedBalance, - }; - } - - public async close(): Promise { - if (this.exited) return; - this.exited = true; - - await this.localCloud?.desktopCore?.shutdown(); - await this.stopLocalCloud(); - this.privateDesktopWsServer?.close(); - await this.privateDesktopApiHandler.close(); - this.events.close('error'); - for (const connection of this.apiByCloudAddress.values()) { - await this.closeApiGroup(connection.resolvable); - } - await this.datastoreApiClients.close(); - this.apiByCloudAddress.clear(); - this.deploymentWatcher.stop(); - await this.queryLogWatcher.close(); - } - - public async stopLocalCloud(): Promise { - await this.localCloud?.close(); - } - - public async startLocalCloud(): Promise { - let localCloudAddress = UlixeeHostsConfig.global.getVersionHost(version); - - localCloudAddress = await UlixeeHostsConfig.global.checkLocalVersionHost( - version, - localCloudAddress, - ); - let adminIdentity: string; - if (!localCloudAddress) { - adminIdentity = this.localUserProfile.defaultAdminIdentity.bech32; - this.localCloud ??= new CloudNode({ - shouldShutdownOnSignals: false, - host: 'localhost', - datastoreConfiguration: { - cloudAdminIdentities: [adminIdentity], - }, - }); - await this.localCloud.datastoreCore.copyDbxToStartDir(bundledDatastoreExample); - await this.localCloud.listen(); - localCloudAddress = await this.localCloud.address; - } - await this.connectToCloud({ address: localCloudAddress, type: 'local', adminIdentity }); - } - - public getDatastoreClient(cloudHost: string): DatastoreApiClient { - const hostUrl = toUrl(cloudHost); - this.datastoreApiClients[cloudHost] ??= new DatastoreApiClient(hostUrl.origin); - return this.datastoreApiClients[cloudHost]; - } - - public getCloudAddressByName(name: string): string { - for (const [address, entry] of this.apiByCloudAddress) { - if (entry.name === name) return address; - } - } - - public async connectToCloud(cloud: ICloudSetup): Promise { - const { adminIdentity, oldAddress, type } = cloud; - let { address, name } = cloud; - if (!address) return; - name ??= type; - address = this.formatCloudAddress(address); - if (this.apiByCloudAddress.has(address)) { - await this.apiByCloudAddress.get(address).resolvable.promise; - return; - } - try { - this.apiByCloudAddress.set(address, { - name: name ?? type, - adminIdentity, - type, - cloudNodes: 0, - resolvable: new Resolvable(), - }); - - const api = new ApiClient( - `${address}?type=app`, - this.onDesktopEvent.bind(this, address), - ); - await api.connect(); - const onApiClosed = this.events.once(api, 'close', this.onApiClosed.bind(this, cloud)); - - const mainScreen = screen.getPrimaryDisplay(); - const workarea = mainScreen.workArea; - const { id, cloudNodes } = await api.send('App.connect', { - workarea: { - left: workarea.x, - top: workarea.y, - ...workarea, - scale: mainScreen.scaleFactor, - }, - }); - const cloudApi = this.apiByCloudAddress.get(address); - cloudApi.cloudNodes = cloudNodes ?? 0; - - let url: URL; - try { - url = new URL(`/desktop-devtools`, api.transport.host); - url.searchParams.set('id', id); - } catch (error) { - console.error('Invalid ChromeAlive Devtools URL', error, { address }); - } - // pipe connection - const [wsToCore, wsToDevtoolsProtocol] = await Promise.all([ - this.connectToWebSocket(url.href, { perMessageDeflate: true }), - this.connectToWebSocket(this.debuggerUrl), - ]); - clearInterval(this.reconnectsByAddress[address]); - const events = [ - this.events.on(wsToCore, 'message', msg => wsToDevtoolsProtocol.send(msg)), - this.events.on(wsToCore, 'error', this.onDevtoolsError.bind(this, wsToCore)), - this.events.once(wsToCore, 'close', this.onApiClosed.bind(this, cloud)), - this.events.on(wsToDevtoolsProtocol, 'message', msg => wsToCore.send(msg)), - this.events.on( - wsToDevtoolsProtocol, - 'error', - this.onDevtoolsError.bind(this, wsToDevtoolsProtocol), - ), - this.events.once(wsToDevtoolsProtocol, 'close', this.onApiClosed.bind(this, cloud)), - ]; - this.events.group(`ws-${address}`, onApiClosed, ...events); - cloudApi.resolvable.resolve({ - id, - api, - wsToCore, - wsToDevtoolsProtocol, - }); - this.emit('new-cloud-address', { - address, - adminIdentity, - name, - cloudNodes, - type, - oldAddress, - }); - } catch (error) { - this.apiByCloudAddress.get(address)?.resolvable.reject(error, true); - throw error; - } - } - - public async onArgonFileOpened(file: string): Promise { - const argonFile = await ArgonFile.readFromPath(file); - if (argonFile) { - this.emit('argon-file-opened', argonFile); - } - } - - private onDesktopEvent( - cloudAddress: string, - eventType: TEventType, - data: IDesktopAppEvents[TEventType], - ): void { - if (this.exited) return; - - if (eventType === 'Session.opened') { - this.emit('api-event', { cloudAddress, eventType, data }); - } - - if (eventType === 'App.quit') { - const apis = this.apiByCloudAddress.get(cloudAddress); - if (apis) { - void this.closeApiGroup(apis.resolvable); - } - } - } - - private onDevtoolsError(ws: WebSocket, error: Error): void { - console.warn('ERROR in devtools websocket with Core at %s', ws.url, error); - } - - private async onNewLocalCloudAddress(): Promise { - const newAddress = UlixeeHostsConfig.global.getVersionHost(version); - if (!newAddress) return; - if (this.localCloudAddress !== newAddress) { - const oldAddress = this.localCloudAddress; - this.localCloudAddress = this.formatCloudAddress(newAddress); - // eslint-disable-next-line no-console - console.log('Desktop app connecting to local cloud', this.localCloudAddress); - await this.connectToCloud({ - address: this.localCloudAddress, - adminIdentity: this.localUserProfile.defaultAdminIdentity?.bech32, - name: 'local', - type: 'local', - oldAddress, - }); - } - } - - private onApiClosed(cloud: ICloudSetup): void { - const { address, name } = cloud; - console.warn('Api Disconnected', address, name); - const api = this.apiByCloudAddress.get(address); - this.events.endGroup(`ws-${address}`); - if (api) { - void this.closeApiGroup(api.resolvable); - } - this.apiByCloudAddress.delete(address); - if (!this.exited) { - this.reconnectsByAddress[cloud.address] = setTimeout( - this.reconnect.bind(this, cloud, 1e3), - 1e3, - ).unref(); - } - } - - private reconnect(cloud: ICloudSetup, delay: number): void { - if (this.exited) return; - console.warn('Reconnecting to Api', { address: cloud.address, name: cloud.name }); - void this.connectToCloud(cloud).catch(() => { - this.reconnectsByAddress[cloud.address] = setTimeout( - this.reconnect.bind(this, cloud, delay * 2), - Math.min(5 * 60e3, delay * 2), - ).unref(); - }); - } - - private async closeApiGroup(group: Resolvable): Promise { - const { api, wsToCore, wsToDevtoolsProtocol } = await group; - if (api.isConnected) await api.disconnect(); - wsToCore?.close(); - return wsToDevtoolsProtocol?.close(); - } - - private async connectToWebSocket(host: string, options?: ClientOptions): Promise { - const ws = new WebSocket(host, options); - await new Promise((resolve, reject) => { - const closeEvents = [ - this.events.once(ws, 'close', reject), - this.events.once(ws, 'error', reject), - ]; - this.events.once(ws, 'open', () => { - this.events.off(...closeEvents); - resolve(); - }); - }); - return ws; - } - - private handlePrivateApiWsConnection(ws: WebSocket, req: http.IncomingMessage): void { - this.privateDesktopApiHandler.onConnection(ws, req); - } - - private async getDebuggerUrl(): Promise { - const responseBody = await new Promise((resolve, reject) => { - const request = http.get( - `http://127.0.0.1:${process.env.DEVTOOLS_PORT}/json/version`, - async res => { - let jsonString = ''; - res.setEncoding('utf8'); - for await (const chunk of res) jsonString += chunk; - resolve(jsonString); - }, - ); - request.once('error', reject); - request.end(); - }); - const debugEndpoints = JSON.parse(responseBody); - - return debugEndpoints.webSocketDebuggerUrl; - } - - private formatCloudAddress(host: string): string { - const url = toUrl(host); - url.pathname = '/desktop'; - return url.href; - } -} - -interface IApiGroup { - api: ApiClient; - id: string; - wsToCore: WebSocket; - wsToDevtoolsProtocol: WebSocket; -} - -interface ICloudSetup { - address: string; - adminIdentity?: string; - type: 'public' | 'private' | 'local'; - name?: string; - oldAddress?: string; -} diff --git a/desktop/main/app/lib/ArgonFile.ts b/desktop/main/app/lib/ArgonFile.ts deleted file mode 100644 index 3d20af070..000000000 --- a/desktop/main/app/lib/ArgonFile.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { existsAsync, readFileAsJson } from '@ulixee/commons/lib/fileUtils'; -import IArgonFile, { ArgonFileSchema } from '@ulixee/platform-specification/types/IArgonFile'; -import ValidationError from '@ulixee/platform-specification/utils/ValidationError'; -import * as Fs from 'fs'; - -export { IArgonFile }; -export default { - async create(json: string, file: string): Promise { - if (await existsAsync(file)) await Fs.promises.rm(file); - await Fs.promises.writeFile(file, json); - }, - - async readFromPath(path: string): Promise { - const data = await readFileAsJson(path).catch(() => null); - if (data) { - const result = ArgonFileSchema.safeParse(data); - if (result.success === false) { - throw ValidationError.fromZodValidation( - `The Argon file you've just opened has invalid parameters.`, - result.error, - ); - } - return data; - } - }, -}; diff --git a/desktop/main/app/lib/ChromeAlivePagePreload.ts b/desktop/main/app/lib/ChromeAlivePagePreload.ts deleted file mode 100644 index d2b05da28..000000000 --- a/desktop/main/app/lib/ChromeAlivePagePreload.ts +++ /dev/null @@ -1,52 +0,0 @@ -// @ts-ignore -const { ipcRenderer } = require('electron'); - - -// @ts-ignore -document.addEventListener('chromealive:event', (e: any) => { - const message = e.detail; - // eslint-disable-next-line no-console - console.debug(message.eventType, message.data); -}); - -const caMessagesById = new Map(); -// @ts-ignore -document.addEventListener('chromealive:api', (e: any) => { - const message = e.detail; - caMessagesById.set(`${message.clientId}_${message.messageId}`, message); - ipcRenderer.send('chromealive:api', message.command, message.args); -}); - -// @ts-ignore -document.addEventListener('chromealive:api:response', (e: any) => { - const message = e.detail; - const key = `${message.clientId}_${message.responseId}`; - const original = caMessagesById.get(key); - caMessagesById.delete(key); - // eslint-disable-next-line no-console - console.debug(original?.command, { args: original?.args?.[0], result: message.data }); -}); - -// @ts-ignore -document.addEventListener('App:changeHeight', (e: any) => { - const message = e.detail; - // eslint-disable-next-line no-console - console.debug('App:changeHeight', message.height); - ipcRenderer.send('App:changeHeight', message.height); -}); - -// @ts-ignore -document.addEventListener('App:showChildWindow', (e: any) => { - const message = e.detail; - // eslint-disable-next-line no-console - console.debug('App:showChildWindow', message.frameName); - ipcRenderer.send('App:showChildWindow', message.frameName); -}); - -// @ts-ignore -document.addEventListener('App:hideChildWindow', (e: any) => { - const message = e.detail; - // eslint-disable-next-line no-console - console.debug('App:hideChildWindow', message.frameName); - ipcRenderer.send('App:hideChildWindow', message.frameName); -}); diff --git a/desktop/main/app/lib/ChromeAliveWindow.ts b/desktop/main/app/lib/ChromeAliveWindow.ts deleted file mode 100644 index 21817a959..000000000 --- a/desktop/main/app/lib/ChromeAliveWindow.ts +++ /dev/null @@ -1,522 +0,0 @@ -import EventSubscriber from '@ulixee/commons/lib/EventSubscriber'; -import Queue from '@ulixee/commons/lib/Queue'; -import { bindFunctions } from '@ulixee/commons/lib/utils'; -import { IChromeAliveSessionApis } from '@ulixee/desktop-interfaces/apis'; -import IChromeAliveSessionEvents from '@ulixee/desktop-interfaces/events/IChromeAliveSessionEvents'; -import ISessionAppModeEvent from '@ulixee/desktop-interfaces/events/ISessionAppModeEvent'; -import HeroCore from '@ulixee/hero-core'; -import { app, BrowserWindow, MenuItem, screen, shell } from 'electron'; -import { nanoid } from 'nanoid'; -import * as Path from 'path'; -import * as moment from 'moment'; -import generateContextMenu from '../menus/generateContextMenu'; -import ApiClient from './ApiClient'; -import StaticServer from './StaticServer'; -import View from './View'; -import BrowserView = Electron.BrowserView; - -// make electron packaging friendly -const extensionPath = Path.resolve(__dirname, '../ui').replace('app.asar', 'app.asar.unpacked'); -interface IReplayTab { - view: View; - heroTabId: number; - targetId: string; - browserContextId: string; - chromeTabId: number; -} - -export default class ChromeAliveWindow { - private static pages = { - Input: '/screen-input.html', - Output: '/screen-output.html', - Reliability: '/screen-reliability.html', - } as const; - - window: BrowserWindow; - api: ApiClient; - enableDevtoolsOnDevtools = process.env.DEVTOOLS ?? false; - - private get activeReplayTab(): IReplayTab { - return this.#replayTabs[this.#activeTabIdx]; - } - - #childWindowsByName = new Map(); - #toolbarView: View; - #toolbarHeight = 44; - #activeTabIdx = 0; - #replayTabs: IReplayTab[] = []; - #mainView: View; - #showingPopupName: string; - #hasShown = false; - #addTabQueue = new Queue('TAB CREATOR', 1); - - #eventSubscriber = new EventSubscriber(); - - constructor( - public readonly session: { - heroSessionId: string; - dbPath: string; - }, - private staticServer: StaticServer, - cloudAddress: string, - ) { - bindFunctions(this); - this.createApi(cloudAddress); - const currentWindow = BrowserWindow.getFocusedWindow() ?? BrowserWindow.getAllWindows()[0]; // Get the currently focused window - const windowBounds = currentWindow.getBounds(); - const display = screen.getDisplayNearestPoint({ x: windowBounds.x, y: windowBounds.y }); - const workarea = display.bounds; - - this.window = new BrowserWindow({ - show: false, - acceptFirstMouse: true, - webPreferences: { - contextIsolation: true, - sandbox: true, - partition: nanoid(5), - }, - titleBarStyle: 'hiddenInset', - icon: Path.resolve(app.getAppPath(), 'assets', 'icon.png'), - width: workarea.width, - height: workarea.height, - y: workarea.y, - x: workarea.x, - }); - - this.window.title = `${this.session.heroSessionId}`; - this.#eventSubscriber.on(this.window, 'resize', this.relayout); - this.#eventSubscriber.on(this.window, 'maximize', this.relayout); - this.#eventSubscriber.on(this.window, 'restore', this.relayout); - this.#eventSubscriber.on(this.window, 'unmaximize', this.relayout); - this.#eventSubscriber.on(this.window, 'close', this.onClose); - this.#eventSubscriber.on(this.window, 'blur', () => { - const finderMenu = this.#childWindowsByName.get('MenuFinder'); - if (finderMenu) { - finderMenu.setAlwaysOnTop(false); - finderMenu.moveAbove(this.window.getMediaSourceId()); - } - }); - this.#eventSubscriber.on(this.window, 'focus', () => { - this.#childWindowsByName.get('MenuFinder')?.setAlwaysOnTop(true); - }); - - this.#mainView = new View(this.window, { - preload: `${__dirname}/ChromeAlivePagePreload.js`, - }); - this.#mainView.attach(); - this.#mainView.hide(); - this.#eventSubscriber.on(this.#mainView.browserView.webContents, 'focus', this.closeOpenPopup); - - this.#toolbarView = new View(this.window, { - preload: `${__dirname}/ChromeAlivePagePreload.js`, - }); - this.#toolbarView.attach(); - // for child windows - this.#toolbarView.webContents.setWindowOpenHandler(details => { - const isMenu = details.frameName.includes('Menu'); - const canMoveAndResize = !isMenu || details.frameName.startsWith('MenuFinder'); - return { - action: 'allow', - overrideBrowserWindowOptions: { - resizable: canMoveAndResize, - frame: !isMenu, - roundedCorners: true, - movable: canMoveAndResize, - closable: true, - transparent: isMenu, - titleBarStyle: 'default', - alwaysOnTop: details.frameName.startsWith('MenuFinder'), - hasShadow: !isMenu, - acceptFirstMouse: true, - useContentSize: true, - webPreferences: { - preload: `${__dirname}/ChromeAlivePagePreload.js`, - }, - }, - }; - }); - - const toolbarWc = this.#toolbarView.webContents; - this.#eventSubscriber.on(toolbarWc, 'did-create-window', (childWindow, details) => { - childWindow.moveAbove(this.window.getMediaSourceId()); - this.trackChildWindow(childWindow, details); - }); - - if (process.env.DEVTOOLS) { - this.#toolbarView.webContents.openDevTools({ mode: 'detach' }); - } - this.#eventSubscriber.on(toolbarWc, 'ipc-message', (e, eventName, ...args) => { - if (eventName === 'App:changeHeight') { - this.#toolbarHeight = args[0]; - void this.relayout(); - } else if (eventName === 'App:showChildWindow') { - const frameName = args[0]; - const window = this.#childWindowsByName.get(frameName); - window?.show(); - window?.focusOnWebView(); - } else if (eventName === 'App:hideChildWindow') { - this.#childWindowsByName.get(args[0])?.close(); - } - }); - } - - replayControl(direction: 'back' | 'forward'): void { - void this.api?.send('Session.timetravel', { - step: direction, - }); - } - - async load(): Promise { - await this.api.connect(); - await this.addReplayTab(); - await this.relayout(); - await this.#toolbarView.webContents.loadURL(this.staticServer.getPath('toolbar.html')); - await this.#toolbarView.webContents.executeJavaScript(` - const elem = document.querySelector('body > #app'); - const resizeObserver = new ResizeObserver(() => { - document.dispatchEvent( - new CustomEvent('App:changeHeight', { - detail: { - height:elem.getBoundingClientRect().height, - }, - }), - ); - }); - resizeObserver.observe(elem); - `); - - await this.injectCloudAddress(this.#toolbarView.browserView); - } - - public async onClose(): Promise { - for (const win of this.#childWindowsByName.values()) { - if (win.webContents?.isDevToolsOpened()) win.webContents.closeDevTools(); - win.close(); - } - if (this.#toolbarView.webContents.isDevToolsOpened()) { - this.#toolbarView.webContents.closeDevTools(); - } - this.#toolbarView.webContents.close(); - for (const tab of this.#replayTabs) { - tab.view.webContents.close(); - } - this.#childWindowsByName.clear(); - this.#eventSubscriber.close(); - await this.api?.send('Session.close'); - await this.api?.disconnect(); - } - - public async reconnect(address: string): Promise { - if (this.api?.address.includes(address)) return; - if (this.api?.isConnected) { - await this.api.disconnect(); - } - this.createApi(address); - - await this.api.connect(); - for (const tab of this.#replayTabs) { - const webContents = tab.view.webContents; - - await this.api.send('Session.replayTargetCreated', { - browserContextId: tab.browserContextId, - targetId: tab.targetId, - chromeTabId: tab.chromeTabId, - heroTabId: tab.heroTabId, - isReconnect: true, - }); - const devtoolsWc = webContents.devToolsWebContents; - if (devtoolsWc) { - const { targetId, browserContextId } = await View.getTargetInfo(devtoolsWc); - - await this.api.send('Session.devtoolsTargetOpened', { - isReconnect: true, - targetId, - browserContextId, - }); - } - } - await Promise.all([ - this.injectCloudAddress(this.#toolbarView.browserView), - this.injectCloudAddress(this.#mainView.browserView), - ]); - } - - // NOTE: 1 is the default hero tab id for an incognito context. DOES NOT WORK in default context - private async addReplayTab(heroTabId = 1): Promise { - await this.#addTabQueue.run(async () => { - if (this.#replayTabs.some(x => x.heroTabId === heroTabId)) return; - const view = new View(this.window, { - partition: `persist:${nanoid(5)}`, - webSecurity: false, - }); - view.browserView.setAutoResize({ width: true, height: true }); - view.attach(); - - view.webContents.on('focus', () => { - if (!this.#showingPopupName?.startsWith('MenuFinder')) this.closeOpenPopup(); - }); - - await view.webContents.session.loadExtension(extensionPath, { - allowFileAccess: true, - }); - if (this.enableDevtoolsOnDevtools) await this.addDevtoolsOnDevtools(view); - this.#eventSubscriber.on(view.webContents, 'devtools-opened', async () => { - const devtoolsWc = view.webContents.devToolsWebContents; - if (!devtoolsWc) { - console.warn('No web contents on showing devtools'); - return; - } - - void devtoolsWc.executeJavaScript( - `(async () => { - window.addEventListener("message", (event) => { - event.source.postMessage({ - action: 'returnCloudAddress', - cloudAddress: '${this.api.address}' - }, event.origin); - }, false); - const tabbedPane = UI.panels.elements.parentWidgetInternal.parentWidgetInternal; - tabbedPane.closeTabs(['timeline', 'heap_profiler', 'lighthouse', 'chrome_recorder', 'security', 'resources', 'network', 'sources']); - - for (let i =0; i < 50; i+=1) { - const tab = tabbedPane.tabs.find(x => x.titleInternal === 'Hero Script'); - if (tab) { - tabbedPane.insertBefore(tab, 0); - tabbedPane.selectTab(tab.id); - break; - } - await new Promise(requestAnimationFrame); - } - })()`, - ); - const target = await View.getTargetInfo(devtoolsWc); - await this.api.send('Session.devtoolsTargetOpened', target); - }); - view.webContents.on('context-menu', (ev, params) => { - const menu = generateContextMenu(params, view.webContents); - menu.append( - new MenuItem({ - label: 'Generate Selector', - click: () => { - view.webContents.inspectElement(params.x, params.y); - void this.api.send('Session.openMode', { - mode: 'Finder', - position: { x: params.x, y: params.y }, - trigger: 'contextMenu', - }); - }, - }), - ); - menu.popup(); - }); - - await view.webContents.loadURL('about:blank'); - view.webContents.openDevTools({ mode: 'bottom' }); - - const { targetId, browserContextId } = await View.getTargetInfo(view.webContents); - const chromeTabId = view.webContents.id; - this.#replayTabs.push({ view, targetId, heroTabId, browserContextId, chromeTabId }); - await this.api.send('Session.replayTargetCreated', { - targetId, - browserContextId, - heroTabId, - chromeTabId, - }); - }); - } - - private createApi(baseHost: string): void { - const address = new URL(`/chromealive/${this.session.heroSessionId}`, baseHost); - if (!this.session.dbPath.includes(HeroCore.dataDir)) { - address.searchParams.set('path', this.session.dbPath); - } - this.api = new ApiClient(address.href, this.onChromeAliveEvent); - // eslint-disable-next-line no-console - console.log('Window connected to %s', this.api.address); - this.#eventSubscriber.once(this.api, 'close', this.onApiClose); - } - - private async injectCloudAddress(view: BrowserView): Promise { - if (!this.api.address) return; - await view.webContents.executeJavaScript( - `(() => { - window.cloudAddress = '${this.api.address}'; - if ('setCloudAddress' in window) window.setCloudAddress(window.cloudAddress); - })()`, - ); - } - - private onApiClose(): void { - this.#eventSubscriber.off({ emitter: this.api, eventName: 'close', handler: this.onApiClose }); - this.api = null; - } - - private async addDevtoolsOnDevtools(view: View): Promise { - const devtoolsOnDevtoolsWindow = new BrowserWindow({ - show: false, - }); - await devtoolsOnDevtoolsWindow.webContents.session.loadExtension(extensionPath, { - allowFileAccess: true, - }); - devtoolsOnDevtoolsWindow.show(); - view.webContents.setDevToolsWebContents(devtoolsOnDevtoolsWindow.webContents); - devtoolsOnDevtoolsWindow.webContents.openDevTools({ mode: 'undocked' }); - } - - private async activateView(mode: ISessionAppModeEvent['mode']): Promise { - let needsLayout: boolean; - if (mode === 'Live' || mode === 'Timetravel' || mode === 'Finder') { - if (this.activeReplayTab) { - needsLayout = this.activeReplayTab.view.isHidden; - this.activeReplayTab.view.isHidden = false; - this.activeReplayTab.view.bringToFront(); - } - this.#mainView.hide(); - } else { - needsLayout = this.#mainView.isHidden; - this.activeReplayTab?.view.hide(); - this.#mainView.bringToFront(); - this.#mainView.isHidden = false; - const page = ChromeAliveWindow.pages[mode]; - if (page) { - const url = this.staticServer.getPath(page); - if (this.#mainView.webContents.getURL() !== url) { - await this.#mainView.webContents.loadURL(url); - - await this.injectCloudAddress(this.#mainView.browserView); - - if (mode === 'Output') { - this.#mainView.webContents.openDevTools({ mode: 'bottom' }); - const view = this.#mainView; - this.#eventSubscriber.on(view.webContents, 'devtools-opened', () => { - const devtoolsWc = view.webContents.devToolsWebContents; - void devtoolsWc - ?.executeJavaScript( - `(async () => { - while (!UI.panels.elements.parentWidgetInternal) await new Promise(requestAnimationFrame); - UI.panels.elements.parentWidgetInternal.parentWidgetInternal.closeTabs(['timeline', 'heap_profiler', 'chrome_recorder', 'lighthouse', 'security', 'resources', 'network', 'sources', 'elements']); - })()`, - ) - .catch(() => null); - }); - } - } - } - } - if (needsLayout) await this.relayout(); - } - - private async relayout(): Promise { - const { width, height } = this.window.getContentBounds(); - - this.#toolbarView.setBounds({ height: this.#toolbarHeight, x: 0, y: 0, width }); - - const heightoffset = this.#toolbarHeight; - - const remainingBounds = { - x: 0, - y: heightoffset + 1, - width, - height: height - heightoffset, - }; - if (!this.#mainView.isHidden) this.#mainView.setBounds(remainingBounds); - if (!this.activeReplayTab?.view?.isHidden) this.activeReplayTab.view.setBounds(remainingBounds); - } - - private closeOpenPopup(): void { - try { - this.#childWindowsByName.get(this.#showingPopupName)?.close(); - this.#childWindowsByName.delete(this.#showingPopupName); - } catch {} - this.#showingPopupName = null; - } - - private onChromeAliveEvent( - eventType: T, - data: IChromeAliveSessionEvents[T], - ): void { - if (eventType === 'Session.updated') { - const session = data as IChromeAliveSessionEvents['Session.updated']; - let scriptEntrypoint = session.scriptEntrypoint; - const divider = scriptEntrypoint.includes('/') ? '/' : '\\'; - scriptEntrypoint = scriptEntrypoint.split(divider).slice(-2).join(divider); - const title = `${scriptEntrypoint} (${moment(session.startTime).format( - 'MMM D [at] h:mm a', - )})`; - if (this.window.title !== title) { - this.window.setTitle(title); - void this.#toolbarView.webContents.executeJavaScript(`document.title="${title}"`); - } - } - - if (eventType === 'Session.loaded' && !this.#hasShown) { - this.window.show(); - this.#hasShown = true; - } - - if (eventType === 'DevtoolsBackdoor.toggleInspectElementMode') { - this.activeReplayTab.view.webContents.focus(); - } - - if (eventType === 'Session.tabCreated') { - const createdTab = data as IChromeAliveSessionEvents['Session.tabCreated']; - void this.addReplayTab(createdTab.tabId); - } - - if (eventType === 'Session.appMode') { - const mode = (data as IChromeAliveSessionEvents['Session.appMode']).mode; - const isFinderPopup = this.#showingPopupName?.startsWith('MenuFinder') && mode === 'Finder'; - if (!isFinderPopup) this.closeOpenPopup(); - void this.activateView(mode); - } - } - - private trackChildWindow(childWindow: BrowserWindow, details: { frameName: string }): void { - const { frameName } = details; - if (this.#childWindowsByName.has(frameName)) { - throw new Error(`Child window with the same frameName already exists: ${frameName}`); - } - - this.#childWindowsByName.set(frameName, childWindow); - const onIpcMessage = this.#eventSubscriber.on( - childWindow.webContents, - 'ipc-message', - (e, eventName, ...args) => { - if (eventName === 'chromealive:api') { - const [command, apiArgs] = args; - if (command === 'File:navigate') { - const { filepath } = apiArgs; - shell.showItemInFolder(filepath); - } - } else if (eventName === 'App:changeHeight') { - childWindow.setBounds({ - height: Math.round(args[0]), - }); - } - }, - ); - - const onshow = this.#eventSubscriber.on(childWindow, 'show', () => { - if (this.#showingPopupName === frameName) return; - this.closeOpenPopup(); - this.#showingPopupName = frameName; - }); - let hasHandled = false; - childWindow.once('close', async e => { - this.#eventSubscriber.off(onshow, onIpcMessage); - if (this.#showingPopupName === frameName) this.#showingPopupName = null; - const popup = this.#childWindowsByName.get(frameName); - this.#childWindowsByName.delete(frameName); - if (!hasHandled && popup) { - hasHandled = true; - e.preventDefault(); - await popup?.webContents.executeJavaScript( - 'window.dispatchEvent(new CustomEvent("manual-close"))', - ); - try { - popup?.close(); - } catch {} - } - }); - } -} diff --git a/desktop/main/app/lib/DeploymentWatcher.ts b/desktop/main/app/lib/DeploymentWatcher.ts deleted file mode 100644 index 72467fe6f..000000000 --- a/desktop/main/app/lib/DeploymentWatcher.ts +++ /dev/null @@ -1,61 +0,0 @@ -import * as Fs from 'fs'; -import * as Path from 'path'; -import IDatastoreDeployLogEntry from '@ulixee/datastore-core/interfaces/IDatastoreDeployLogEntry'; -import UlixeeConfig from '@ulixee/commons/config'; -import { TypedEventEmitter } from '@ulixee/commons/lib/eventUtils'; - -const deploymentsFile = Path.join(UlixeeConfig.global.directoryPath, 'datastore-deployments.jsonl'); - -export default class DeploymentWatcher extends TypedEventEmitter<{ - new: IDatastoreDeployLogEntry; -}> { - public deployments: IDatastoreDeployLogEntry[] = []; - - private deploymentFileWatch: Fs.FSWatcher; - - constructor() { - super(); - void this.checkFile(); - } - - public start(): void { - if (!Fs.existsSync(deploymentsFile)) Fs.writeFileSync(deploymentsFile, ''); - if (process.platform === 'win32' || process.platform === 'darwin') { - this.deploymentFileWatch = Fs.watch(deploymentsFile, { persistent: false }, () => { - void this.checkFile(); - }); - } else { - Fs.watchFile(deploymentsFile, { persistent: false }, (curr, prev) => { - if (curr.mtimeMs > prev.mtimeMs) { - void this.checkFile(); - } - }); - } - } - - public stop(): void { - if (this.deploymentFileWatch) this.deploymentFileWatch?.close(); - else Fs.unwatchFile(deploymentsFile); - } - - private async checkFile(): Promise { - try { - const data = await Fs.promises.readFile(deploymentsFile, 'utf8'); - const allRecords: IDatastoreDeployLogEntry[] = data - .split(/\r?\n/g) - .filter(Boolean) - .map(x => JSON.parse(x)); - for (const record of allRecords) { - if ( - this.deployments.some( - x => x.cloudHost === record.cloudHost && x.version === record.version, - ) - ) { - continue; - } - this.deployments.push(record); - this.emit('new', record); - } - } catch {} - } -} diff --git a/desktop/main/app/lib/DesktopPagePreload.ts b/desktop/main/app/lib/DesktopPagePreload.ts deleted file mode 100644 index 1ad5fe1ce..000000000 --- a/desktop/main/app/lib/DesktopPagePreload.ts +++ /dev/null @@ -1,46 +0,0 @@ -// @ts-ignore -const { contextBridge, ipcRenderer } = require('electron'); - -contextBridge.exposeInMainWorld('appBridge', { - async send(api: string, args: any = {}): Promise { - try { - const result = await ipcRenderer.invoke('desktop:api', { api, args }); - // eslint-disable-next-line no-console - console.log(api, { - args, - result, - }); - return result; - } catch (error) { - console.error('ERROR in api', { api, args, error }); - throw error; - } - }, - getPrivateApiHost(): string { - return ipcRenderer.sendSync('getPrivateApiHost'); - }, -}); - -// @ts-ignore -document.addEventListener('chromealive:event', (e: any) => { - const message = e.detail; - // eslint-disable-next-line no-console - console.log(message.eventType, message.data); -}); - -const messagesById = new Map(); -// @ts-ignore -document.addEventListener('chromealive:api', (e: any) => { - const message = e.detail; - messagesById.set(`${message.clientId}_${message.messageId}`, message); -}); - -// @ts-ignore -document.addEventListener('chromealive:api:response', (e: any) => { - const message = e.detail; - const key = `${message.clientId}_${message.responseId}`; - const original = messagesById.get(key); - messagesById.delete(key); - // eslint-disable-next-line no-console - console.log(original?.command, { args: original?.args?.[0], result: message.data }); -}); diff --git a/desktop/main/app/lib/DesktopWindow.ts b/desktop/main/app/lib/DesktopWindow.ts deleted file mode 100644 index 25eb27b94..000000000 --- a/desktop/main/app/lib/DesktopWindow.ts +++ /dev/null @@ -1,104 +0,0 @@ -import { BrowserWindow, WebContents, shell } from 'electron'; -import * as Path from 'path'; -import EventSubscriber from '@ulixee/commons/lib/EventSubscriber'; -import { TypedEventEmitter } from '@ulixee/commons/lib/eventUtils'; -import StaticServer from './StaticServer'; -import ApiManager from './ApiManager'; -import generateContextMenu from '../menus/generateContextMenu'; -import WindowStateKeeper from './util/windowStateKeeper'; - -export default class DesktopWindow extends TypedEventEmitter<{ - close: void; - focus: void; -}> { - public get isOpen(): boolean { - return this.#window?.isVisible() === true; - } - - public get isFocused(): boolean { - return this.#window?.isFocused(); - } - - public get webContents(): WebContents { - return this.#window?.webContents; - } - - #window: BrowserWindow; - #events = new EventSubscriber(); - - #webpageUrl: string; - #windowStateKeeper = new WindowStateKeeper('DesktopWindow'); - - constructor(staticServer: StaticServer, private apiManager: ApiManager) { - super(); - this.#webpageUrl = staticServer.getPath('desktop.html'); - void this.open(false); - } - - public focus(): void { - this.#window.moveTop(); - } - - public async open(show = true): Promise { - if (this.#window) { - if (show) { - this.#window.setAlwaysOnTop(true); - this.#window.show(); - this.#window.setAlwaysOnTop(false); - } - return; - } - this.#window = new BrowserWindow({ - show: false, - acceptFirstMouse: true, - useContentSize: true, - titleBarStyle: 'hiddenInset', - ...this.#windowStateKeeper.windowState, - webPreferences: { - preload: `${__dirname}/DesktopPagePreload.js`, - }, - icon: Path.resolve('..', 'assets', 'icon.png'), - }); - - this.#windowStateKeeper.track(this.#window); - this.#window.setTitle('Ulixee Desktop'); - - this.#window.webContents.ipc.handle('desktop:api', async (e, { api, args }) => { - if (api === 'Argon.dragAsFile') { - return await this.apiManager.privateDesktopApiHandler.dragArgonsAsFile(args, e.sender); - } - }); - this.#window.webContents.ipc.on('getPrivateApiHost', e => { - e.returnValue = this.apiManager.privateDesktopWsServerAddress; - }); - - this.#window.webContents.setWindowOpenHandler(details => { - void shell.openExternal(details.url); - return { action: 'deny' }; - }); - - this.#events.on(this.#window.webContents, 'context-menu', (e, params) => { - generateContextMenu(params, this.#window.webContents).popup(); - }); - this.#events.on(this.#window, 'focus', this.emit.bind(this, 'focus')); - this.#events.on(this.#window, 'close', this.close.bind(this)); - - await this.#window.webContents.loadURL(this.#webpageUrl); - - if (show) { - this.#window.show(); - this.#window.moveTop(); - } - } - - public close(e, force = false): void { - if (force) { - this.#events.close(); - this.#window = null; - } else { - this.#window.hide(); - e.preventDefault(); - } - this.emit('close'); - } -} diff --git a/desktop/main/app/lib/Menubar.ts b/desktop/main/app/lib/Menubar.ts deleted file mode 100644 index 244ec5d58..000000000 --- a/desktop/main/app/lib/Menubar.ts +++ /dev/null @@ -1,463 +0,0 @@ -import { app, BrowserWindow, Event, shell, systemPreferences, Tray } from 'electron'; -import log from 'electron-log'; -import { autoUpdater, ProgressInfo, UpdateInfo } from 'electron-updater'; -import { EventEmitter } from 'events'; -import * as Path from 'path'; -import IMenubarOptions from '../interfaces/IMenubarOptions'; -import ApiManager from './ApiManager'; -import StaticServer from './StaticServer'; -import installDefaultChrome from './util/installDefaultChrome'; -import trayPositioner from './util/trayPositioner'; -import { WindowManager } from './WindowManager'; - -const { version } = require('../package.json'); -// Forked from https://github.com/maxogden/menubar - -const iconPath = Path.resolve(__dirname, '..', 'assets', 'IconTemplate.png'); -const uiDir = require.resolve('../index.js').replace('index.js', 'ui'); - -export class Menubar extends EventEmitter { - readonly staticServer: StaticServer; - - #tray?: Tray; - #menuWindow?: BrowserWindow; - #blurTimeout: NodeJS.Timeout | null = null; // track blur events with timeout - #windowManager: WindowManager; - #isClosing = false; - #updateInfoPromise: Promise; - #installUpdateOnExit = false; - #downloadProgress = 0; - #apiManager: ApiManager; - - #argonFileOpen: string; - #options: IMenubarOptions; - #trayMouseover: boolean; - - constructor(options: IMenubarOptions) { - super(); - this.#options = options; - - if (!app.requestSingleInstanceLock()) { - app.quit(); - return; - } - - // hide the dock icon if it shows - if (process.platform === 'darwin') { - app.setActivationPolicy('accessory'); - } - app.on('second-instance', this.onSecondInstance.bind(this)); - app.on('open-file', this.onFileOpened.bind(this)); - app.setAppLogsPath(); - (process.env as any).ELECTRON_DISABLE_SECURITY_WARNINGS = true; - this.staticServer = new StaticServer(uiDir); - void this.appReady(); - } - - get tray(): Tray { - if (!this.#tray) - throw new Error('Please access `this.tray` after the `ready` event has fired.'); - return this.#tray; - } - - private bindSignals(): void { - let didRun = false; - const exit = (): Promise => { - if (didRun) return; - didRun = true; - return this.appExit(); - }; - process.once('beforeExit', exit); - process.once('exit' as any, exit); - process.once('SIGTERM', exit); - process.once('SIGINT', exit); - process.once('SIGQUIT', exit); - } - - private hideMenu(): void { - if (this.#blurTimeout) { - clearTimeout(this.#blurTimeout); - this.#blurTimeout = null; - } - try { - if (!this.#menuWindow?.isDestroyed()) { - this.#menuWindow?.hide(); - } - } catch (error) { - if (!String(error).includes('Object has been destroyed')) throw error; - } - } - - private onSecondInstance(_, argv: string[]): void { - const argonFile = argv.find(x => x.endsWith('.arg')); - if (argonFile) { - this.handleArgonFile(argonFile); - } - } - - private handleArgonFile(path: string): void { - if (!path.endsWith('.arg')) return; - - if (this.#apiManager) { - void this.#apiManager.onArgonFileOpened(path); - } else { - this.#argonFileOpen = path; - } - } - - private onFileOpened(e: Event, path: string): void { - if (!path.endsWith('.arg')) return; - - e.preventDefault(); - this.handleArgonFile(path); - } - - private async showMenu(trayPos?: Electron.Rectangle): Promise { - if (!this.#tray) { - throw new Error('Tray should have been instantiated by now'); - } - - if (!this.#menuWindow) { - await this.createWindow(); - } - - // Use guard for TypeScript, to avoid ! everywhere - if (!this.#menuWindow) { - throw new Error('Window has been initialized just above. qed.'); - } - - trayPositioner.alignTrayMenu(this.#menuWindow, trayPos); - this.#menuWindow.show(); - this.#menuWindow.on('blur', this.checkHideMenu.bind(this)); - } - - private async beforeQuit(): Promise { - if (this.#isClosing) return; - this.#isClosing = true; - console.warn('Quitting Ulixee Menubar'); - this.#tray?.removeAllListeners(); - this.hideMenu(); - await this.#apiManager?.close(); - this.#windowManager.close(); - if (this.#installUpdateOnExit) { - await this.#updateInfoPromise; - await autoUpdater.quitAndInstall(false, true); - } - } - - private async appExit(): Promise { - await this.beforeQuit(); - app.exit(); - } - - private async appReady(): Promise { - try { - await app.whenReady(); - // for now auto-start - await this.staticServer.load(); - this.#apiManager = new ApiManager(); - this.#windowManager = new WindowManager(this, this.#apiManager); - await this.#apiManager.start(); - this.bindSignals(); - if (this.#argonFileOpen) { - await this.#apiManager.onArgonFileOpened(this.#argonFileOpen); - this.#argonFileOpen = null; - } - await this.updateLocalCloudStatus(); - - await this.createWindow(); - - this.#tray = new Tray(iconPath); - - app.on('activate', () => { - if (!this.#windowManager.desktopWindow.isOpen) { - this.#windowManager.desktopWindow.focus(); - } - }); - - this.#tray.on('click', this.clicked.bind(this)); - this.#tray.on('mouse-leave', this.enterTray.bind(this)); - this.#tray.on('mouse-enter', this.leaveTray.bind(this)); - this.#tray.on('right-click', this.rightClicked.bind(this)); - this.#tray.on('drop-files', this.onDropFiles.bind(this)); - this.#tray.setToolTip(this.#options.tooltip || ''); - app.dock?.hide(); - - this.emit('ready'); - - this.initUpdater(); - await installDefaultChrome(); - } catch (error) { - console.error('ERROR in appReady: ', error); - await this.appExit(); - } - } - - private checkHideMenu(): void { - if (!this.#trayMouseover) { - this.hideMenu(); - } - } - - private enterTray(): void { - this.#trayMouseover = true; - } - - private leaveTray(): void { - this.#trayMouseover = false; - if (!this.#menuWindow?.isFocused()) { - this.hideMenu(); - } - } - - private initUpdater(): void { - try { - autoUpdater.logger = null; - autoUpdater.autoDownload = true; - autoUpdater.autoInstallOnAppQuit = false; - autoUpdater.allowDowngrade = true; - autoUpdater.allowPrerelease = version.includes('alpha'); - autoUpdater.on('update-not-available', this.noUpdateAvailable.bind(this)); - autoUpdater.on('update-available', this.onUpdateAvailable.bind(this)); - autoUpdater.signals.progress(this.onDownloadProgress.bind(this)); - } catch (error) { - log.error('Error initializing AutoUpdater', { error }); - } - } - - private async noUpdateAvailable(): Promise { - log.verbose('No new Ulixee.app versions available'); - await this.sendToFrontend('Version.onLatest', {}); - } - - private async onUpdateAvailable(update: UpdateInfo): Promise { - log.info('New Ulixee.app version available', update); - this.#updateInfoPromise = Promise.resolve(update); - await this.sendToFrontend('Version.available', { - version: update.version, - }); - } - - private async onDownloadProgress(progress: ProgressInfo): Promise { - log.verbose('New version download progress', progress); - this.#downloadProgress = Math.round(progress.percent); - await this.sendToFrontend('Version.download', { - progress: this.#downloadProgress, - }); - } - - private async versionCheck(): Promise { - if (await this.#updateInfoPromise) return; - if (autoUpdater.isUpdaterActive()) return; - try { - log.verbose('Checking for version update'); - this.#updateInfoPromise = autoUpdater.checkForUpdates().then(x => x.updateInfo); - await this.#updateInfoPromise; - } catch (error) { - log.error('ERROR checking for new version', error); - } - } - - private async versionInstall(): Promise { - log.verbose('Installing version', { - progress: this.#downloadProgress, - update: await this.#updateInfoPromise, - }); - this.#installUpdateOnExit = true; - await this.sendToFrontend('Version.installing', {}); - if (this.#downloadProgress < 100) await autoUpdater.downloadUpdate(); - await autoUpdater.quitAndInstall(false, true); - } - - private async clicked(): Promise { - if (this.#menuWindow?.isVisible()) { - this.hideMenu(); - } - - await this.#windowManager.openDesktop(); - await this.checkForUpdates(); - } - - private async rightClicked( - event?: Electron.KeyboardEvent, - bounds?: Electron.Rectangle, - ): Promise { - if (event && (event.shiftKey || event.ctrlKey || event.metaKey)) { - return this.hideMenu(); - } - - // if blur was invoked clear timeout - if (this.#blurTimeout) { - clearInterval(this.#blurTimeout); - this.#blurTimeout = null; - } - - if (this.#menuWindow?.isVisible()) { - return this.hideMenu(); - } - - await this.showMenu(bounds); - await this.checkForUpdates(); - } - - private onDropFiles(_, files: string[]): void { - for (const file of files) { - if (file.endsWith('.arg')) this.handleArgonFile(file); - } - } - - private async checkForUpdates(): Promise { - try { - if (!this.#updateInfoPromise) { - this.#updateInfoPromise = autoUpdater - .checkForUpdatesAndNotify() - .then(x => x?.updateInfo ?? null); - await this.#updateInfoPromise; - } - } catch (error) { - log.error('ERROR checking for new version', error); - } - } - - private async createWindow(): Promise { - const defaults = { - show: false, // Don't show it at first - frame: false, // Remove window frame - width: this.#options.width, - height: this.#options.height, - }; - - this.#menuWindow = new BrowserWindow({ - ...defaults, - roundedCorners: true, - skipTaskbar: true, - autoHideMenuBar: true, - transparent: false, - alwaysOnTop: true, - useContentSize: true, - webPreferences: { - javascript: true, - preload: `${__dirname}/MenubarPagePreload.js`, - }, - }); - - this.#menuWindow.on('blur', () => { - if (!this.#menuWindow || this.#isClosing) { - return; - } - this.#blurTimeout = setTimeout(() => this.hideMenu(), 100); - }); - this.#menuWindow.on('focus', () => { - clearTimeout(this.#blurTimeout); - this.#blurTimeout = null; - }); - - this.#menuWindow.setVisibleOnAllWorkspaces(true); - this.#menuWindow.on('close', this.windowClear.bind(this)); - this.#menuWindow.webContents.on('ipc-message', async (e, message, ...args) => { - if (message === 'desktop:api') { - const [api] = args; - - if (api === 'mousedown') { - this.hideMenu(); - } - - if (api === 'App.quit') { - await this.appExit(); - } - - if (api === 'App.openLogsDirectory') { - await shell.openPath(Path.dirname(log.transports.file.getFile().path)); - } - - if (api === 'App.openDataDirectory') { - await shell.openPath(this.#apiManager.localCloud.datastoreCore.options.datastoresDir); - } - - if (api === 'App.openHeroSession') { - await this.#windowManager.pickHeroSession(); - } - - if (api === 'App.openDesktop') { - await this.#windowManager.openDesktop(); - } - - if (api === 'Cloud.stop' || api === 'Cloud.restart') { - await this.stopCloud(); - } - - if (api === 'Cloud.start' || api === 'Cloud.restart') { - await this.startCloud(); - } - - if (api === 'Cloud.getStatus') { - await this.updateLocalCloudStatus(); - } - - if (api === 'Version.check') { - await this.versionCheck(); - } - - if (api === 'Version.install') { - await this.versionInstall(); - } - } - }); - - const backgroundPref = process.platform === 'win32' ? 'window' : 'window-background'; - const windowBackground = systemPreferences.getColor(backgroundPref)?.replace('#', '') ?? ''; - const url = this.staticServer.getPath(`menubar.html?windowBackground=${windowBackground}`); - await this.#menuWindow.loadURL(url); - if (process.env.OPEN_DEVTOOLS) { - this.#menuWindow.webContents.openDevTools({ mode: 'detach' }); - } - if (this.#apiManager.localCloud) { - await this.updateLocalCloudStatus(); - } - } - - private windowClear(): void { - this.#menuWindow = undefined; - } - - /// //// CLOUD MANAGEMENT //////////////////////////////////////////////////////////////////////////////////////////// - - private async stopCloud(): Promise { - if (!this.#apiManager?.localCloud) return; - - // eslint-disable-next-line no-console - console.log(`CLOSING ULIXEE CLOUD`); - await this.#apiManager.stopLocalCloud(); - await this.updateLocalCloudStatus(); - } - - private async startCloud(): Promise { - await this.#apiManager.startLocalCloud(); - - // eslint-disable-next-line no-console - console.log(`STARTED ULIXEE CLOUD at ${await this.#apiManager.localCloud.address}`); - await this.updateLocalCloudStatus(); - } - - private async updateLocalCloudStatus(): Promise { - if (this.#isClosing) return; - let address: string = null; - if (this.#apiManager.localCloud) { - address = await this.#apiManager.localCloud.address; - } - await this.sendToFrontend('Cloud.status', { - started: !!this.#apiManager.localCloud, - address, - }); - } - - private async sendToFrontend(eventType: string, data: any): Promise { - if (this.#menuWindow) { - const json = { detail: { eventType, data } }; - await this.#menuWindow.webContents.executeJavaScript(`(()=>{ - const evt = ${JSON.stringify(json)}; - document.dispatchEvent(new CustomEvent('desktop:event', evt)); - })()`); - } - } -} diff --git a/desktop/main/app/lib/MenubarPagePreload.ts b/desktop/main/app/lib/MenubarPagePreload.ts deleted file mode 100644 index c7e97b33f..000000000 --- a/desktop/main/app/lib/MenubarPagePreload.ts +++ /dev/null @@ -1,10 +0,0 @@ -// @ts-ignore -const { ipcRenderer } = require('electron'); - -// @ts-ignore -document.addEventListener('desktop:api', (e: any) => { - // eslint-disable-next-line no-console - console.log('desktop:api', e); - const message = e.detail; - ipcRenderer.send('desktop:api', message.api, message.args); -}); diff --git a/desktop/main/app/lib/OsEncrypt.ts b/desktop/main/app/lib/OsEncrypt.ts deleted file mode 100644 index 68fe6e80f..000000000 --- a/desktop/main/app/lib/OsEncrypt.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { safeStorage } from 'electron'; -import * as crypto from 'crypto'; - -// Adding this before use just so I remember some of the moving parts. -// SecureStorage puts things in a keychain, so secured to user, but not specific to this app -// Unclear whether this is valuable for encrypting the argon keychain. Probably wise to mimic an ethereum/bitcoin wallet. -export default class OsEncrypt { - static encrypt( - body: string, - password: string, - ): { encryptedText: string; iv: Buffer; authTag: Buffer } { - const key = safeStorage.encryptString(password); - const iv = crypto.randomBytes(12); - const cipher = crypto.createCipheriv('aes-256-gcm', key, iv); - let encryptedText = cipher.update(body, 'utf8', 'base64'); - encryptedText += cipher.final('base64'); - return { encryptedText, iv, authTag: cipher.getAuthTag() }; - } - - static decrypt(encryptedText: string, iv: Buffer, authTag: Buffer, password: string): string { - const key = safeStorage.encryptString(password); - const decipher = crypto.createDecipheriv('aes-256-gcm', key, iv); - decipher.setAuthTag(authTag); - let result = decipher.update(encryptedText, 'base64', 'utf8'); - result += decipher.final('utf8'); - - return result; - } -} diff --git a/desktop/main/app/lib/PrivateDesktopApiHandler.ts b/desktop/main/app/lib/PrivateDesktopApiHandler.ts deleted file mode 100644 index 7c2a2506b..000000000 --- a/desktop/main/app/lib/PrivateDesktopApiHandler.ts +++ /dev/null @@ -1,497 +0,0 @@ -import { getDataDirectory } from '@ulixee/commons/lib/dirUtils'; -import EventSubscriber from '@ulixee/commons/lib/EventSubscriber'; -import { TypedEventEmitter } from '@ulixee/commons/lib/eventUtils'; -import Resolvable from '@ulixee/commons/lib/Resolvable'; -import IDatastoreDeployLogEntry from '@ulixee/datastore-core/interfaces/IDatastoreDeployLogEntry'; -import DatastoreManifest from '@ulixee/datastore-core/lib/DatastoreManifest'; -import type ILocalUserProfile from '@ulixee/datastore/interfaces/ILocalUserProfile'; -import { IDatabrokerAccount, IWallet } from '@ulixee/datastore/interfaces/IPaymentService'; -import IQueryLogEntry from '@ulixee/datastore/interfaces/IQueryLogEntry'; -import DatastoreApiClient from '@ulixee/datastore/lib/DatastoreApiClient'; -import { - IArgonFileMeta, - IDatastoreResultItem, - IDesktopAppPrivateApis, - TCredit, -} from '@ulixee/desktop-interfaces/apis'; -import { ICloudConnected } from '@ulixee/desktop-interfaces/apis/IDesktopApis'; -import IDesktopAppPrivateEvents from '@ulixee/desktop-interfaces/events/IDesktopAppPrivateEvents'; -import { ARGON_FILE_VERSION, LocalchainOverview } from '@argonprotocol/localchain'; -import { ConnectionToClient, WsTransportToClient } from '@ulixee/net'; -import IConnectionToClient from '@ulixee/net/interfaces/IConnectionToClient'; -import IArgonFile, { ArgonFileSchema } from '@ulixee/platform-specification/types/IArgonFile'; -import ArgonUtils from '@ulixee/platform-utils/lib/ArgonUtils'; -import Identity from '@ulixee/platform-utils/lib/Identity'; -import { dialog, Menu, WebContents } from 'electron'; -import { IncomingMessage } from 'http'; -import { nanoid } from 'nanoid'; -import * as Os from 'os'; -import * as Path from 'path'; -import WebSocket = require('ws'); -import CreditReserver from '@ulixee/datastore/payments/CreditReserver'; -import ApiManager from './ApiManager'; -import ArgonFile from './ArgonFile'; - -const argIconPath = Path.resolve(__dirname, '..', 'assets', 'arg.png'); - -export interface IOpenReplay { - cloudAddress: string; - heroSessionId: string; - dbPath: string; -} - -export default class PrivateDesktopApiHandler extends TypedEventEmitter<{ - 'open-replay': IOpenReplay; -}> { - public Apis: IDesktopAppPrivateApis = { - 'Argon.importSend': this.importArgons.bind(this), - 'Argon.acceptRequest': this.acceptArgonRequest.bind(this), - 'Argon.send': this.createArgonsToSendFile.bind(this), - 'Argon.request': this.createArgonsToRequestFile.bind(this), - 'Argon.dropFile': this.onArgonFileDrop.bind(this), - 'Argon.showFileContextMenu': this.showContextMenu.bind(this), - 'Argon.transferFromMainchain': this.transferArgonsFromMainchain.bind(this), - 'Argon.transferToMainchain': this.transferArgonsToMainchain.bind(this), - 'Credit.create': this.createCredit.bind(this), - 'Credit.save': this.saveCredit.bind(this), - 'Cloud.findAdminIdentity': this.findCloudAdminIdentity.bind(this), - 'Datastore.setAdminIdentity': this.setDatastoreAdminIdentity.bind(this), - 'Datastore.findAdminIdentity': this.findAdminIdentity.bind(this), - 'Datastore.getInstalled': this.getInstalledDatastores.bind(this), - 'Datastore.query': this.queryDatastore.bind(this), - 'Datastore.deploy': this.deployDatastore.bind(this), - 'Datastore.install': this.installDatastore.bind(this), - 'Datastore.uninstall': this.uninstallDatastore.bind(this), - 'Desktop.getAdminIdentities': this.getAdminIdentities.bind(this), - 'Desktop.getCloudConnections': this.getCloudConnections.bind(this), - 'Desktop.connectToPrivateCloud': this.connectToPrivateCloud.bind(this), - 'GettingStarted.getCompletedSteps': this.gettingStartedProgress.bind(this), - 'GettingStarted.completeStep': this.completeGettingStartedStep.bind(this), - 'Session.openReplay': this.openReplay.bind(this), - 'User.getQueries': this.getQueries.bind(this), - 'User.getWallet': this.getWallet.bind(this), - 'User.createAccount': this.createAccount.bind(this), - 'User.addBrokerAccount': this.addBrokerAccount.bind(this), - } as const; - - public Events: IDesktopAppPrivateEvents; - - private connectionToClient: IConnectionToClient; - private waitForConnection = new Resolvable(); - private events = new EventSubscriber(); - - constructor(private readonly apiManager: ApiManager) { - super(); - - this.events.on(apiManager, 'new-cloud-address', this.onNewCloudAddress.bind(this)); - this.events.on(apiManager, 'deployment', this.onDeployment.bind(this)); - this.events.on(apiManager, 'query', this.onQuery.bind(this)); - this.events.on(apiManager, 'wallet-updated', this.onWalletUpdated.bind(this)); - } - - public onConnection(ws: WebSocket, req: IncomingMessage): void { - if (this.connectionToClient) { - void this.connectionToClient.disconnect(); - } - this.waitForConnection.resolve(); - const transport = new WsTransportToClient(ws, req); - this.connectionToClient = new ConnectionToClient(transport, this.Apis); - const promise = this.waitForConnection; - this.events.once(this.connectionToClient, 'disconnected', () => { - if (this.waitForConnection === promise) this.waitForConnection = new Resolvable(); - }); - } - - public async close(): Promise { - try { - await this.connectionToClient?.disconnect(); - } catch {} - this.events.close(); - } - - public async getWallet(): Promise { - return this.apiManager.getWallet(); - } - - public async completeGettingStartedStep(step: string): Promise { - if (!this.apiManager.localUserProfile.gettingStartedCompletedSteps.includes(step)) { - this.apiManager.localUserProfile.gettingStartedCompletedSteps.push(step); - await this.apiManager.localUserProfile.save(); - } - } - - public gettingStartedProgress(): string[] { - return this.apiManager.localUserProfile.gettingStartedCompletedSteps ?? []; - } - - public async onArgonFileDrop(path: string): Promise { - const argonFile = await ArgonFile.readFromPath(path); - await this.onArgonFileOpened(argonFile); - } - - public async addBrokerAccount( - request: Omit, - ): Promise { - return await this.apiManager.accountManager.addBrokerAccount(request); - } - - public async createAccount(request: { - name: string; - suri?: string; - password?: string; - }): Promise { - return await this.apiManager.accountManager.createAccount( - request.name, - request.suri, - request.password, - ); - } - - public async createArgonsToSendFile(request: { - milligons: bigint; - fromAddress?: string; - toAddress?: string; - }): Promise { - return this.apiManager.accountManager.createArgonsToSendFile(request); - } - - public async transferArgonsFromMainchain(request: { - milligons: bigint; - address?: string; - }): Promise { - await this.apiManager.accountManager.transferMainchainToLocal( - request.address, - request.milligons, - ); - } - - public async transferArgonsToMainchain(request: { - milligons: bigint; - address?: string; - }): Promise { - return this.apiManager.accountManager.transferLocalToMainchain( - request.address, - request.milligons, - ); - } - - public async createArgonsToRequestFile(request: { - milligons: bigint; - sendToMyAddress?: string; - }): Promise { - return this.apiManager.accountManager.createArgonsToRequestFile(request); - } - - public async acceptArgonRequest(request: { - argonFile: IArgonFile; - fundWithAddress?: string; - }): Promise { - const argonFile = ArgonFileSchema.parse(request.argonFile); - if (argonFile.credit) { - await this.saveCredit({ credit: argonFile.credit }); - return; - } - return this.apiManager.accountManager.acceptArgonRequest(argonFile, request.fundWithAddress); - } - - public async importArgons(claim: { argonFile: IArgonFile }): Promise { - const argonFile = ArgonFileSchema.parse(claim.argonFile); - if (argonFile.credit) { - await this.saveCredit({ credit: argonFile.credit }); - return; - } - return this.apiManager.accountManager.importArgons(argonFile); - } - - public getInstalledDatastores(): ILocalUserProfile['installedDatastores'] { - return this.apiManager.localUserProfile.installedDatastores; - } - - public getQueries(): IQueryLogEntry[] { - return Object.values(this.apiManager.queryLogWatcher.queriesById); - } - - public queryDatastore(args: { - id: string; - version: string; - cloudHost: string; - query: string; - }): Promise { - const { id, version, query, cloudHost } = args; - const client = this.apiManager.getDatastoreClient(cloudHost); - const queryId = nanoid(12); - const date = new Date(); - void client.query(id, version, query, { queryId }); - return Promise.resolve({ - date, - query, - input: [], - id, - version, - queryId, - } as any); - } - - public async deployDatastore(args: { - id: string; - version: string; - cloudHost: string; - cloudName: string; - }): Promise { - const { id, version, cloudName, cloudHost } = args; - const adminIdentity = this.apiManager.localUserProfile.getAdminIdentity(id, cloudName); - - if (!cloudHost) throw new Error('No cloud host available.'); - const apiClient = new DatastoreApiClient(cloudHost); - if (version.includes(DatastoreManifest.TemporaryIdPrefix)) { - throw new Error('This Datastore has only been started. You need to deploy it.'); - } - const { - compressedDbx, - adminSignature, - adminIdentity: identityResult, - } = await apiClient.download(id, version, adminIdentity); - await apiClient.upload(compressedDbx, { - forwardedSignature: { adminIdentity: identityResult, adminSignature }, - }); - } - - public async installDatastore(arg: { - cloudHost: string; - id: string; - version: string; - }): Promise { - const { cloudHost, id, version } = arg; - await this.apiManager.localUserProfile.installDatastore(cloudHost, id, version); - } - - public async uninstallDatastore(arg: { - cloudHost: string; - id: string; - version: string; - }): Promise { - const { cloudHost, id, version } = arg; - await this.apiManager.localUserProfile.uninstallDatastore(cloudHost, id, version); - } - - public async setDatastoreAdminIdentity( - datastoreId: string, - adminIdentityPath: string, - ): Promise { - return await this.apiManager.localUserProfile.setDatastoreAdminIdentity( - datastoreId, - adminIdentityPath, - ); - } - - public async saveCredit(arg: { credit: TCredit }): Promise { - const credit = await CreditReserver.storeCreditFromUrl( - arg.credit.datastoreUrl, - arg.credit.microgons, - await this.apiManager.accountManager.getDatastoreHostLookup(), - ); - this.apiManager.paymentService.addCredit(credit); - } - - public async createCredit(args: { - datastore: Pick; - cloud: string; - argons: number; - }): Promise { - const { argons, datastore } = args; - const address = new URL(this.apiManager.getCloudAddressByName(args.cloud)); - const adminIdentity = this.apiManager.localUserProfile.getAdminIdentity( - datastore.id, - args.cloud, - ); - if (!adminIdentity) { - throw new Error("Sorry, we couldn't find the AdminIdentity for this cloud."); - } - const microgons = argons * Number(ArgonUtils.MicrogonsPerArgon); - const client = new DatastoreApiClient(address.href); - try { - const { id, remainingCredits, secret } = await client.createCredits( - datastore.id, - datastore.version, - microgons, - adminIdentity, - ); - - const file: IArgonFile = { - version: ARGON_FILE_VERSION, - credit: { - datastoreUrl: `ulx://${id}:${secret}@${address.host}/${datastore.id}@v${datastore.version}`, - microgons: remainingCredits, - }, - }; - - return { - rawJson: JSON.stringify(file), - file, - name: `₳${argons} at ${ - (datastore.name ?? datastore.scriptEntrypoint)?.replace(/[.\\/]/g, '-') ?? - 'a Ulixee Datastore' - }.arg`, - }; - } finally { - await client.disconnect(); - } - } - - public async dragArgonsAsFile(args: IArgonFileMeta, context: WebContents): Promise { - const file = Path.join(Os.tmpdir(), '.ulixee', args.name); - await ArgonFile.create(args.rawJson, file); - context.startDrag({ - file, - icon: argIconPath, - }); - } - - public async showContextMenu( - args: IArgonFileMeta & { - position: { x: number; y: number }; - }, - ): Promise { - const file = Path.join(Os.tmpdir(), '.ulixee', args.name); - await ArgonFile.create(args.rawJson, file); - - const menu = Menu.buildFromTemplate([ - { - label: 'Copy', - accelerator: 'CmdOrCtrl+C', - click() { - try { - // eslint-disable-next-line import/no-unresolved - const clipboardEx = require('electron-clipboard-ex'); - clipboardEx.writeFilePaths([file]); - } catch (e) {} - }, - }, - { - type: 'separator', - }, - { - role: 'shareMenu', - sharingItem: { - filePaths: [file], - }, - }, - ]); - menu.popup({ x: args.position.x, y: args.position.y }); - } - - public async onArgonFileOpened(file: IArgonFile): Promise { - await this.waitForConnection; - await this.connectionToClient.sendEvent({ eventType: 'Argon.opened', data: file }); - } - - public async findAdminIdentity(datastoreId: string): Promise { - const result = await dialog.showOpenDialog({ - properties: ['openFile', 'showHiddenFiles'], - message: 'Select your Admin Identity for this Datastore to enable administrative features.', - defaultPath: Path.join(getDataDirectory(), 'ulixee', 'identities'), - filters: [{ name: 'Identities', extensions: ['pem'] }], - }); - if (result.filePaths.length) { - const [filename] = result.filePaths; - return await this.setDatastoreAdminIdentity(datastoreId, filename); - } - return null; - } - - public async findCloudAdminIdentity(cloudName: string): Promise { - const result = await dialog.showOpenDialog({ - properties: ['openFile', 'showHiddenFiles'], - message: 'Select your Admin Identity for this Cloud to enable administrative features.', - defaultPath: Path.join(getDataDirectory(), 'ulixee', 'identities'), - filters: [{ name: 'Identities', extensions: ['pem'] }], - }); - if (result.filePaths.length) { - const [filename] = result.filePaths; - return await this.apiManager.localUserProfile.setCloudAdminIdentity(cloudName, filename); - } - return null; - } - - public getAdminIdentities(): { - datastoresById: { - [id: string]: string; - }; - cloudsByName: { [name: string]: string }; - } { - const datastoresById: Record = {}; - for (const { datastoreId, adminIdentity } of this.apiManager.localUserProfile - .datastoreAdminIdentities) { - datastoresById[datastoreId] = adminIdentity; - } - const cloudsByName: Record = {}; - for (const cloud of this.apiManager.apiByCloudAddress.values()) { - if (cloud.adminIdentity) { - cloudsByName[cloud.name] = cloud.adminIdentity; - } - } - return { datastoresById, cloudsByName }; - } - - public async onDeployment(event: IDatastoreDeployLogEntry): Promise { - await this.connectionToClient?.sendEvent({ eventType: 'Datastore.onDeployed', data: event }); - } - - public async onQuery(event: IQueryLogEntry): Promise { - await this.connectionToClient?.sendEvent({ eventType: 'User.onQuery', data: event }); - } - - public async onNewCloudAddress(event: ICloudConnected): Promise { - await this.connectionToClient?.sendEvent({ eventType: 'Cloud.onConnected', data: event }); - } - - public async onWalletUpdated(event: { wallet: IWallet }): Promise { - await this.connectionToClient?.sendEvent({ eventType: 'Wallet.updated', data: event }); - } - - public openReplay(arg: IOpenReplay): void { - this.emit('open-replay', arg); - } - - public getCloudConnections(): ICloudConnected[] { - const result: ICloudConnected[] = []; - for (const [address, group] of this.apiManager.apiByCloudAddress) { - if (group.resolvable.isResolved && !group.resolvable.resolved?.api) continue; - result.push({ - address, - cloudNodes: group.cloudNodes, - adminIdentity: group.adminIdentity, - name: group.name, - type: group.type, - }); - } - return result; - } - - public async connectToPrivateCloud(arg: { - address: string; - name: string; - adminIdentityPath?: string; - }): Promise { - const { address, name, adminIdentityPath } = arg; - if (!address) { - console.warn('No valid address provided to connect to', arg); - return; - } - const adminIdentity = adminIdentityPath - ? Identity.loadFromFile(arg.adminIdentityPath).bech32 - : undefined; - await this.apiManager.connectToCloud({ - address, - type: 'private', - name, - adminIdentity, - }); - - const profile = this.apiManager.localUserProfile; - if (!profile.clouds.find(x => x.address === address)) { - profile.clouds.push({ address, name, adminIdentityPath: arg.adminIdentityPath }); - await profile.save(); - } - } -} diff --git a/desktop/main/app/lib/StaticServer.ts b/desktop/main/app/lib/StaticServer.ts deleted file mode 100644 index 04a3c7551..000000000 --- a/desktop/main/app/lib/StaticServer.ts +++ /dev/null @@ -1,37 +0,0 @@ -import * as Http from 'http'; -import { AddressInfo } from 'net'; -import { app } from 'electron'; -import * as Fs from 'fs'; -import staticServe from '@ulixee/platform-utils/lib/staticServe'; - -export default class StaticServer { - #httpServer: Http.Server; - #serverPort: number; - - constructor(distFolder: string, cacheTime?: number) { - cacheTime ??= app.isPackaged ? 3600 * 24 : 0; - - if (!Fs.existsSync(distFolder)) - throw new Error(`Static UI files could not be found: ${distFolder}`); - const fileServer = staticServe(distFolder, cacheTime); - - this.#httpServer = Http.createServer((req, res) => { - void fileServer(req, res).catch(() => null); - }); - } - - public async load(): Promise { - this.#serverPort = await new Promise((resolve, reject) => { - this.#httpServer.once('error', reject); - this.#httpServer.listen({ port: 0 }, () => { - this.#httpServer.off('error', reject); - resolve((this.#httpServer.address() as AddressInfo).port); - }); - }); - } - - public getPath(path: string): string { - if (path.startsWith('/')) path = path.slice(1); - return `http://localhost:${this.#serverPort}/${path}`; - } -} diff --git a/desktop/main/app/lib/View.ts b/desktop/main/app/lib/View.ts deleted file mode 100644 index e387314d4..000000000 --- a/desktop/main/app/lib/View.ts +++ /dev/null @@ -1,94 +0,0 @@ -import { BrowserView } from 'electron'; -import Rectangle = Electron.Rectangle; -import BrowserWindow = Electron.BrowserWindow; -import WebContents = Electron.WebContents; -import generateContextMenu from '../menus/generateContextMenu'; - -export default class View { - public isHidden: boolean; - public bounds: Rectangle; - public browserView: BrowserView; - - public get webContents(): WebContents { - return this.browserView.webContents; - } - - protected isAttached = false; - protected readonly window: BrowserWindow; - - constructor(window: BrowserWindow, webPreferences: Electron.WebPreferences = {}) { - this.window = window; - this.browserView = new BrowserView({ - webPreferences: { - sandbox: false, - contextIsolation: false, - ...webPreferences, - }, - }); - } - - public addContextMenu(): void { - this.webContents.on('context-menu', (e, params) => { - generateContextMenu(params, this.webContents).popup(); - }); - } - - public attach(): void { - if (!this.isAttached) { - this.window.addBrowserView(this.browserView); - this.isAttached = true; - } - } - - public bringToFront(): void { - this.attach(); - this.window.setTopBrowserView(this.browserView); - } - - public detach(): void { - if (this.browserView) this.window.removeBrowserView(this.browserView); - this.isAttached = false; - } - - public destroy(): void { - this.detach(); - this.browserView = null; - } - - public hide(): void { - const { x, y } = this.bounds ?? { x: 0, y: 0 }; - this.setBounds({ x, y, width: 0, height: 0 }); - } - - public async getContentsHeight(): Promise { - return await this.webContents.executeJavaScript( - `document.querySelector('body > #app').offsetHeight`, - ); - } - - public setBounds(newBounds: Rectangle): void { - if ( - this.bounds && - this.bounds.x === newBounds.x && - this.bounds.y === newBounds.y && - this.bounds.width === newBounds.width && - this.bounds.height === newBounds.height - ) { - return; - } - this.browserView.setBounds(newBounds); - this.bounds = newBounds; - this.isHidden = newBounds.width === 0 && newBounds.height === 0; - } - - public static async getTargetInfo(wc: WebContents): Promise<{ - targetId: string; - browserContextId: string; - url: string; - }> { - await wc.debugger.attach(); - const { targetInfo } = await wc.debugger.sendCommand('Target.getTargetInfo'); - await wc.debugger.detach(); - return targetInfo; - } -} diff --git a/desktop/main/app/lib/WindowManager.ts b/desktop/main/app/lib/WindowManager.ts deleted file mode 100644 index 8799b6d56..000000000 --- a/desktop/main/app/lib/WindowManager.ts +++ /dev/null @@ -1,181 +0,0 @@ -import { app, dialog, ipcMain, Menu } from 'electron'; -import * as Path from 'path'; -import EventSubscriber from '@ulixee/commons/lib/EventSubscriber'; -import * as Os from 'os'; -import IRegisteredEventListener from '@ulixee/commons/interfaces/IRegisteredEventListener'; -import { INewHeroSessionEvent } from '@ulixee/desktop-interfaces/events/IDesktopAppEvents'; -import ChromeAliveWindow from './ChromeAliveWindow'; -import { Menubar } from './Menubar'; -import ApiManager from './ApiManager'; -import DesktopWindow from './DesktopWindow'; -import generateAppMenu from '../menus/generateAppMenu'; -import { IArgonFile } from './ArgonFile'; - -export class WindowManager { - get activeChromeAliveWindow(): ChromeAliveWindow { - return this.chromeAliveWindows[this.activeChromeAliveWindowIdx]; - } - - chromeAliveWindows: ChromeAliveWindow[] = []; - activeChromeAliveWindowIdx = 0; - readonly desktopWindow: DesktopWindow; - events = new EventSubscriber(); - - #chromeAliveWindowsBySessionId = new Map(); - - constructor(private menuBar: Menubar, private apiManager: ApiManager) { - this.events.on(apiManager, 'new-cloud-address', this.onNewCloudAddress.bind(this)); - this.events.on(apiManager, 'api-event', this.onApiEvent.bind(this)); - this.events.on(apiManager, 'argon-file-opened', this.onArgonFileOpened.bind(this)); - - this.bindIpcEvents(); - this.desktopWindow = new DesktopWindow(menuBar.staticServer, apiManager); - this.events.on(this.desktopWindow, 'close', this.checkOpenWindows.bind(this)); - this.events.on(this.desktopWindow, 'focus', this.setMenu.bind(this)); - this.events.on( - apiManager.privateDesktopApiHandler, - 'open-replay', - this.loadChromeAliveWindow.bind(this), - ); - } - - public async openDesktop(): Promise { - await app.dock?.show(); - this.setMenu(); - await this.desktopWindow.open(); - } - - public close(): void { - this.events.close(); - } - - public async loadChromeAliveWindow(data: { - cloudAddress: string; - heroSessionId: string; - dbPath: string; - }): Promise { - if (this.#chromeAliveWindowsBySessionId.has(data.heroSessionId)) { - this.#chromeAliveWindowsBySessionId.get(data.heroSessionId).window.focus(); - return; - } - await app.dock?.show(); - const chromeAliveWindow = new ChromeAliveWindow( - data, - this.menuBar.staticServer, - data.cloudAddress, - ); - - const { heroSessionId } = data; - this.chromeAliveWindows.push(chromeAliveWindow); - this.#chromeAliveWindowsBySessionId.set(heroSessionId, chromeAliveWindow); - await chromeAliveWindow - .load() - .catch(err => console.error('Error Loading ChromeAlive window', err)); - - const focusEvent = this.events.on( - chromeAliveWindow.window, - 'focus', - this.focusWindow.bind(this, heroSessionId), - ); - this.events.once( - chromeAliveWindow.window, - 'close', - this.closeWindow.bind(this, heroSessionId, focusEvent), - ); - this.setMenu(); - } - - public async pickHeroSession(): Promise { - const result = await dialog.showOpenDialog({ - properties: ['openFile', 'showHiddenFiles'], - defaultPath: Path.join(Os.tmpdir(), '.ulixee', 'hero-sessions'), - filters: [ - // { name: 'All Files', extensions: ['js', 'ts', 'db'] }, - { name: 'Session Database', extensions: ['db'] }, - // { name: 'Javascript', extensions: ['js'] }, - // { name: 'Typescript', extensions: ['ts'] }, - ], - }); - if (result.filePaths.length) { - const [filename] = result.filePaths; - if (filename.endsWith('.db')) { - return this.loadChromeAliveWindow({ - cloudAddress: this.apiManager.localCloudAddress, - dbPath: filename, - heroSessionId: Path.basename(filename).replace('.db', ''), - }); - } - // const sessionContainerDir = Path.dirname(filename); - // TODO: show relevant sessions - } - } - - private async onArgonFileOpened(file: IArgonFile): Promise { - await this.openDesktop(); - await this.apiManager.privateDesktopApiHandler.onArgonFileOpened(file); - } - - private setMenu(): void { - if (this.desktopWindow.isFocused) { - Menu.setApplicationMenu(generateAppMenu(null)); - } else { - Menu.setApplicationMenu(generateAppMenu(this.activeChromeAliveWindow)); - } - } - - private onApiEvent(event: ApiManager['EventTypes']['api-event']): void { - if (event.eventType === 'Session.opened') { - void this.loadChromeAliveWindow({ - ...(event.data as INewHeroSessionEvent), - cloudAddress: event.cloudAddress, - }); - } - } - - private async onNewCloudAddress( - event: ApiManager['EventTypes']['new-cloud-address'], - ): Promise { - const { oldAddress, address } = event; - if (!oldAddress) return; - - for (const window of this.chromeAliveWindows) { - if (window.api.address.startsWith(oldAddress)) { - await window.reconnect(address); - } - } - } - - private bindIpcEvents(): void { - ipcMain.on('open-file', this.pickHeroSession.bind(this)); - } - - private closeWindow( - heroSessionId: string, - ...eventsToUnregister: IRegisteredEventListener[] - ): void { - const chromeAliveWindow = this.#chromeAliveWindowsBySessionId.get(heroSessionId); - if (!chromeAliveWindow) return; - this.#chromeAliveWindowsBySessionId.delete(heroSessionId); - this.events.off(...eventsToUnregister); - const idx = this.chromeAliveWindows.indexOf(chromeAliveWindow); - if (idx === this.activeChromeAliveWindowIdx) { - this.activeChromeAliveWindowIdx = 0; - } - this.chromeAliveWindows.splice(idx, 1); - this.checkOpenWindows(); - this.setMenu(); - } - - private checkOpenWindows(): void { - if (this.chromeAliveWindows.length === 0 && !this.desktopWindow.isOpen) { - app.dock?.hide(); - } - } - - private focusWindow(heroSessionId: string): void { - const chromeAliveWindow = this.#chromeAliveWindowsBySessionId.get(heroSessionId); - if (chromeAliveWindow) - this.activeChromeAliveWindowIdx = this.chromeAliveWindows.indexOf(chromeAliveWindow); - this.setMenu(); - } -} diff --git a/desktop/main/app/lib/util/UlixeeLogger.ts b/desktop/main/app/lib/util/UlixeeLogger.ts deleted file mode 100644 index d99811838..000000000 --- a/desktop/main/app/lib/util/UlixeeLogger.ts +++ /dev/null @@ -1,50 +0,0 @@ -import log from 'electron-log'; -import { - ILogEntry, - injectLogger, - Log, - loggerSessionIdNames, - translateToPrintable, -} from '@ulixee/commons/lib/Logger'; -import { app } from 'electron'; -import * as Path from 'path'; - -Object.assign(console, log.functions); - -export default class UlixeeLogger extends Log { - constructor(module: NodeModule, boundContext?: any) { - super(module, boundContext); - this.useColors = !app.isPackaged; - } - - protected override logToConsole(level: ILogEntry['level'], entry: ILogEntry): void { - const printablePath = entry.module - .replace('.js', '') - .replace('.ts', '') - .replace(`build${Path.sep}`, '') - .replace(`desktop${Path.sep}packages`, ''); - - const { error, printData } = translateToPrintable(entry.data); - - if (level === 'warn' || level === 'error') { - printData.sessionId = entry.sessionId; - printData.sessionName = loggerSessionIdNames.get(entry.sessionId) ?? undefined; - } - - const params = Object.keys(printData).length ? [printData] : []; - if (error) params.push(error); - - const args = [`[${printablePath}] ${entry.action}`, ...params]; - if (level === 'stats') { - log.debug(...args); - } else { - log[level](...args); - } - } - - static register(): void { - injectLogger(module => { - return { log: new UlixeeLogger(module) }; - }); - } -} diff --git a/desktop/main/app/lib/util/defaultEnvVars.ts b/desktop/main/app/lib/util/defaultEnvVars.ts deleted file mode 100644 index 6b632c679..000000000 --- a/desktop/main/app/lib/util/defaultEnvVars.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { app } from 'electron'; - -if (app.isPackaged) { - process.env.DEBUG = [process.env.DEBUG ?? '', 'ulx:*'].filter(Boolean).join(','); - process.env.NODE_DISABLE_COLORS = 'true'; -} diff --git a/desktop/main/app/lib/util/installDefaultChrome.ts b/desktop/main/app/lib/util/installDefaultChrome.ts deleted file mode 100644 index 881b05ceb..000000000 --- a/desktop/main/app/lib/util/installDefaultChrome.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { defaultBrowserEngine } from '@ulixee/default-browser-emulator'; - -let hasUnpackedChrome = false; -export default async function installDefaultChrome(): Promise { - if (hasUnpackedChrome) return; - try { - // eslint-disable-next-line global-require,import/no-dynamic-require - let LatestChrome = require(`@ulixee/${defaultBrowserEngine.id}`); - if (LatestChrome.default) LatestChrome = LatestChrome.default; - const chromeApp = new LatestChrome(); - if (chromeApp.isInstalled) { - hasUnpackedChrome = true; - return; - } - await chromeApp.install(); - hasUnpackedChrome = true; - } catch (err) { - console.error('ERROR trying to install latest browser', err); - } -} diff --git a/desktop/main/app/lib/util/trayPositioner.ts b/desktop/main/app/lib/util/trayPositioner.ts deleted file mode 100644 index 2943b07d0..000000000 --- a/desktop/main/app/lib/util/trayPositioner.ts +++ /dev/null @@ -1,65 +0,0 @@ -import { BrowserWindow, Display, Rectangle, screen } from 'electron'; - -export default { - alignTrayMenu(trayWindow: BrowserWindow, trayBounds: Rectangle): void { - if (process.platform === 'linux') { - trayBounds = { width: 0, height: 0, ...screen.getCursorScreenPoint() }; - } - - const windowBounds = trayWindow.getBounds(); - const display = screen.getDisplayNearestPoint(trayBounds); - - let x: number; - let y: number; - if (display.workArea.y > display.bounds.y) { - // bar is top, - x = calculateXAlign(display, windowBounds, trayBounds); - y = display.workArea.y; - } else if (display.workArea.x > display.bounds.x) { - // bar is left - x = display.workArea.x; - y = calculateYAlign(display, windowBounds, trayBounds); - } else if (display.workArea.width === display.bounds.width) { - // bar is bottom - x = calculateXAlign(display, windowBounds, trayBounds); - y = display.workArea.height - windowBounds.height; - - // windows 11 can jump into the workarea - if (trayBounds.y < display.workArea.y + display.workArea.height) { - y = trayBounds.y - windowBounds.height; - } - } else { - // bar is right - x = display.workArea.width - windowBounds.width; - y = calculateYAlign(display, windowBounds, trayBounds); - } - y = Math.round(y); - x = Math.round(x); - - trayWindow.setPosition(x, y); - }, -}; - -function calculateXAlign(display: Display, windowBounds: Rectangle, trayBounds: Rectangle): number { - let x = Math.round(trayBounds.x + trayBounds.width / 2 - windowBounds.width / 2); - - // handle overflows - if (x + windowBounds.width > display.bounds.width + display.bounds.x) { - x = trayBounds.x + trayBounds.width - windowBounds.width; - } else if (x < display.bounds.x) { - x = trayBounds.x; - } - - return x; -} - -function calculateYAlign(display: Display, windowBounds: Rectangle, trayBounds: Rectangle): number { - let y = trayBounds.y; - - // handle overflows - if (y + windowBounds.height > display.bounds.height) { - y = trayBounds.y + trayBounds.height - windowBounds.height; - } - - return y; -} diff --git a/desktop/main/app/lib/util/windowStateKeeper.ts b/desktop/main/app/lib/util/windowStateKeeper.ts deleted file mode 100644 index 78c36a9e1..000000000 --- a/desktop/main/app/lib/util/windowStateKeeper.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { app, Rectangle, BrowserWindow } from 'electron'; -import * as Path from 'path'; -import * as Fs from 'fs'; -import EventSubscriber from '@ulixee/commons/lib/EventSubscriber'; - -export default class WindowStateKeeper { - public windowState: Rectangle & { isMaximized?: boolean } = { - x: undefined, - y: undefined, - width: 1400, - height: 800, - isMaximized: false, - }; - - private readonly configPath: string; - private events = new EventSubscriber(); - - constructor(private windowName: string) { - this.configPath = Path.join(app.getPath('userData'), `${windowName}.json`); - - if (Fs.existsSync(this.configPath)) { - try { - this.windowState = JSON.parse(Fs.readFileSync(this.configPath, 'utf8')); - } catch {} - } - } - - public track(window: BrowserWindow): void { - this.events.on(window, 'resize', this.save.bind(this, window)); - this.events.on(window, 'move', this.save.bind(this, window)); - this.events.once(window, 'close', this.save.bind(this, window)); - this.events.once(window, 'close', () => this.events.close()); - } - - save(window: BrowserWindow): void { - if (!this.windowState.isMaximized) { - this.windowState = window.getBounds(); - } - this.windowState.isMaximized = window.isMaximized(); - Fs.writeFileSync(this.configPath, JSON.stringify(this.windowState)); - } -} diff --git a/desktop/main/app/menus/generateAppMenu.ts b/desktop/main/app/menus/generateAppMenu.ts deleted file mode 100644 index 7dd88a973..000000000 --- a/desktop/main/app/menus/generateAppMenu.ts +++ /dev/null @@ -1,145 +0,0 @@ -import { app, BrowserWindow, ipcMain, Menu, MenuItem, shell } from 'electron'; -import ChromeAliveWindow from '../lib/ChromeAliveWindow'; -import MenuItemConstructorOptions = Electron.MenuItemConstructorOptions; - -const isMac = process.platform === 'darwin'; - -export default function generateAppMenu(loadedChromeAlive: ChromeAliveWindow): Menu { - const template: any = [ - ...(isMac - ? [ - { - label: app.name, - submenu: [ - { role: 'about' }, - { type: 'separator' }, - { role: 'services' }, - { type: 'separator' }, - { role: 'hide' }, - { role: 'hideothers' }, - { role: 'unhide' }, - { type: 'separator' }, - { role: 'quit' }, - ], - }, - ] - : []), - { - label: 'File', - submenu: [ - { - type: 'separator', - }, - ...createMenuItem( - ['CmdOrCtrl+Shift+O'], - () => { - ipcMain.emit('open-file'); - }, - 'Open Hero Session', - ), - { - type: 'separator', - }, - isMac ? { role: 'close' } : { role: 'quit' }, - { - type: 'separator', - }, - ], - }, - { - label: 'Edit', - submenu: [ - { role: 'undo' }, - { role: 'redo' }, - { type: 'separator' }, - { role: 'cut' }, - { role: 'copy' }, - { role: 'paste' }, - ...(isMac - ? [ - { role: 'pasteAndMatchStyle' }, - { role: 'delete' }, - { role: 'selectAll' }, - { type: 'separator' }, - { - label: 'Speech', - submenu: [{ role: 'startspeaking' }, { role: 'stopspeaking' }], - }, - ] - : [{ role: 'delete' }, { type: 'separator' }, { role: 'selectAll' }]), - ], - }, - { - label: 'View', - submenu: [ - !loadedChromeAlive ? { role: 'reload' } : undefined, - { role: 'toggleDevTools' }, - { type: 'separator' }, - { role: 'resetZoom' }, - { role: 'zoomIn' }, - { role: 'zoomOut' }, - { type: 'separator' }, - { role: 'togglefullscreen' }, - ].filter(Boolean), - }, - { - label: 'Window', - submenu: [ - { role: 'minimize' }, - { role: 'zoom' }, - ...(isMac - ? [{ type: 'separator' }, { role: 'front' }, { type: 'separator' }, { role: 'window' }] - : [{ role: 'close' }]), - { type: 'separator' }, - { - label: 'Always on top', - type: 'checkbox', - checked: false, - click(menuItem: MenuItem, browserWindow: BrowserWindow) { - browserWindow.setAlwaysOnTop(!browserWindow.isAlwaysOnTop()); - menuItem.checked = browserWindow.isAlwaysOnTop(); - }, - }, - ], - }, - ]; - if (loadedChromeAlive) { - template.splice(template.length - 1, 0, { - label: 'Replay', - submenu: [ - { - label: 'Open Database', - click: () => { - void shell.openPath(loadedChromeAlive.session.dbPath); - }, - }, - ...createMenuItem(['Left'], () => { - loadedChromeAlive.replayControl('back'); - }), - ...createMenuItem(['Right'], () => { - loadedChromeAlive.replayControl('forward'); - }), - ], - }); - } - - return Menu.buildFromTemplate(template); -} - -// HELPER FUNCTIONS ////// - -function createMenuItem( - shortcuts: string[], - action: (window: BrowserWindow, menuItem: MenuItem, shortcutIndex: number) => void, - label: string = null, - enabled = true, -): MenuItemConstructorOptions[] { - return shortcuts.map((shortcut, key) => ({ - accelerator: shortcut, - visible: label != null && key === 0, - label: label != null && key === 0 ? label : '', - enabled, - click: (menuItem: MenuItem, browserWindow: BrowserWindow) => - action(browserWindow, menuItem, key), - })); -} diff --git a/desktop/main/app/menus/generateContextMenu.ts b/desktop/main/app/menus/generateContextMenu.ts deleted file mode 100644 index 87e993aa4..000000000 --- a/desktop/main/app/menus/generateContextMenu.ts +++ /dev/null @@ -1,111 +0,0 @@ -import { clipboard, Menu, nativeImage } from 'electron'; - -export default function generateContextMenu( - params: Electron.ContextMenuParams, - webContents: Electron.WebContents, -): Menu { - let menuItems: Electron.MenuItemConstructorOptions[] = []; - - if (params.linkURL !== '') { - menuItems = menuItems.concat([ - { - label: 'Copy link address', - click: () => { - clipboard.clear(); - clipboard.writeText(params.linkURL); - }, - }, - { - type: 'separator', - }, - ]); - } - - if (params.hasImageContents) { - menuItems = menuItems.concat([ - { - label: 'Copy image', - click: () => { - const img = nativeImage.createFromDataURL(params.srcURL); - - clipboard.clear(); - clipboard.writeImage(img); - }, - }, - { - label: 'Copy image address', - click: () => { - clipboard.clear(); - clipboard.writeText(params.srcURL); - }, - }, - { - type: 'separator', - }, - ]); - } - - if (params.isEditable) { - menuItems = menuItems.concat([ - { - role: 'undo', - accelerator: 'CmdOrCtrl+Z', - }, - { - role: 'redo', - accelerator: 'CmdOrCtrl+Shift+Z', - }, - { - type: 'separator', - }, - { - role: 'cut', - accelerator: 'CmdOrCtrl+X', - }, - { - role: 'copy', - accelerator: 'CmdOrCtrl+C', - }, - { - role: 'pasteAndMatchStyle', - accelerator: 'CmdOrCtrl+V', - label: 'Paste', - }, - { - role: 'paste', - accelerator: 'CmdOrCtrl+Shift+V', - label: 'Paste as plain text', - }, - { - role: 'selectAll', - accelerator: 'CmdOrCtrl+A', - }, - { - type: 'separator', - }, - ]); - } - - if (!params.isEditable && params.selectionText !== '') { - menuItems = menuItems.concat([ - { - role: 'copy', - accelerator: 'CmdOrCtrl+C', - }, - { - type: 'separator', - }, - ]); - } - - menuItems.push({ - label: 'Inspect', - accelerator: 'CmdOrCtrl+Shift+I', - click: () => { - webContents.inspectElement(params.x, params.y); - if (!webContents.isDevToolsFocused()) webContents.devToolsWebContents?.focus(); - }, - }); - - return Menu.buildFromTemplate(menuItems); -} diff --git a/desktop/main/app/package.build.json b/desktop/main/app/package.build.json deleted file mode 100644 index 9efcdebd8..000000000 --- a/desktop/main/app/package.build.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "private": true, - "scripts": { - "copy:build": "node builder/copySources.js ./packages", - "start": "npx electron ." - }, - "workspaces": { - "packages": [ - "packages/*", - "packages/*/*", - "packages/datastore/plugins/hero-*", - "packages/hero/plugins/*" - ], - "nohoist": ["**/electron-**", "**/fs-extra", "@ulixee/**", "**/better-sqlite3"] - } -} diff --git a/desktop/main/app/package.dist.json b/desktop/main/app/package.dist.json deleted file mode 100644 index 7e91284a7..000000000 --- a/desktop/main/app/package.dist.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "private": true, - "workspaces": { - "packages": [ - "packages/*", - "packages/*/*", - "packages/datastore/plugins/hero-*", - "packages/hero/plugins/*" - ], - "nohoist": [ - "**/electron", - "**/@electron/**", - "**/electron-webpack", - "**/electron-webpack/**", - "electron-log", - "electron-positioner", - "electron-updater", - "better-sqlite3", - "electron-clipboard-ex" - ] - } -} diff --git a/desktop/main/app/package.json b/desktop/main/app/package.json deleted file mode 100644 index 7ab350ea3..000000000 --- a/desktop/main/app/package.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "name": "@ulixee/desktop-app", - "version": "2.0.0-alpha.29", - "private": true, - "main": "index.js", - "repository": "git@github.com:ulixee/platform.git", - "license": "MIT", - "dependencies": { - "@ulixee/cloud": "2.0.0-alpha.29", - "@ulixee/commons": "2.0.0-alpha.29", - "@ulixee/datastore": "2.0.0-alpha.29", - "@ulixee/datastore-core": "2.0.0-alpha.29", - "@ulixee/datastore-plugins-hero": "2.0.0-alpha.29", - "@ulixee/default-browser-emulator": "2.0.0-alpha.29", - "@ulixee/desktop-core": "2.0.0-alpha.29", - "@ulixee/desktop-interfaces": "2.0.0-alpha.29", - "@ulixee/hero-core": "2.0.0-alpha.29", - "@argonprotocol/localchain": "0.0.2", - "@ulixee/net": "2.0.0-alpha.29", - "@ulixee/platform-specification": "2.0.0-alpha.29", - "@ulixee/platform-utils": "2.0.0-alpha.29", - "better-sqlite3": "^11.1.2", - "electron-log": "^5.1.7", - "electron-updater": "^6.3.4", - "moment": "^2.29.4", - "nanoid": "^3.3.6", - "tslib": "^2.7.0", - "ws": "^8.18.0" - }, - "optionalDependencies": { - "electron-clipboard-ex": "^1.3.3" - } -} diff --git a/desktop/main/builder/copySources.ts b/desktop/main/builder/copySources.ts deleted file mode 100644 index 3c5740514..000000000 --- a/desktop/main/builder/copySources.ts +++ /dev/null @@ -1,108 +0,0 @@ -import * as Fs from 'fs'; -import * as Path from 'path'; - -const dest = Path.join(process.cwd(), process.argv[2]); - -const baseBuild = `${__dirname}/../../../..`; - -const dirsNotToInclude = new Set([ - 'node_modules', - 'packages', - 'playground', - 'end-to-end', - 'website', - 'chrome-extension', - 'databroker-admin', - 'docs', - 'desktop/main', - 'localchain/npm', - 'desktop/ui', - 'double-agent', - "browser-emulator-builder", - "browser-profiler", - 'double-agent-stacks', - 'testing', - 'desktop/chrome-extension', - 'examples', - 'test', - 'tools', - 'ui', - 'tsconfig.json', - '.rs', - '.go', - '.toml', - '.sh', - '.sql', - 'CHANGELOG.md', - 'yarn.lock', - '.config.js', - 'package.build.json', - 'package.dist.json', - '.config.js.map', - '.config.d.ts', - '__test__', -]); - -function copyDir(baseDir: string, outPath?: string): void { - if (!Fs.existsSync(baseDir)) return; - - const packageJson = Fs.existsSync(`${baseDir}/package.json`) - ? JSON.parse(Fs.readFileSync(`${baseDir}/package.json`, 'utf8')) - : { private: false, name: '' }; - - for (const dirOrFile of Fs.readdirSync(baseDir)) { - const dirPath = `${baseDir}/${dirOrFile}`; - if ( - (dirOrFile.startsWith('.') && !dirOrFile.startsWith('.env')) || - dirsNotToInclude.has(dirOrFile) || - [...dirsNotToInclude].some(x => dirPath.endsWith(x)) - ) - continue; - - const packageName = packageJson.name?.replace('@ulixee', ''); - - const packageDir = packageName ? `${dest}/${packageName}` : outPath; - if (Fs.statSync(dirPath).isDirectory()) { - copyDir(dirPath, `${packageDir}/${dirOrFile}`); - } else if ( - !packageJson.private || - !packageJson.workspaces || - packageJson.workspaces?.length === 0 - ) { - if (!Fs.existsSync(packageDir)) Fs.mkdirSync(packageDir, { recursive: true }); - if (dirOrFile === 'package.json') { - const finalPackageJson = { - name: packageJson.name, - version: packageJson.version, - dependencies: packageJson.dependencies, - }; - Fs.writeFileSync(`${packageDir}/${dirOrFile}`, JSON.stringify(finalPackageJson, null, 2)); - continue; - } - Fs.copyFileSync(dirPath, `${packageDir}/${dirOrFile}`); - } - } -} - -const buildDir = process.env.SOURCE_DIR ?? 'build'; - -copyDir(`${baseBuild}/${buildDir}`); -if (buildDir === 'build') { - copyDir(`${baseBuild}/hero/${buildDir}`); - copyDir(`${baseBuild}/../mainchain/localchain`); - copyDir( - `${baseBuild}/hero/browser-emulator-builder/data`, - `${dest}/default-browser-emulator/data`, - ); - if (Fs.existsSync(`${dest}/default-browser-emulator`)) { - Fs.writeFileSync( - `${dest}/default-browser-emulator/paths.json`, - JSON.stringify({ - 'emulator-data': './data', - }), - ); - } -} - -// eslint-disable-next-line no-console -console.log('Copied files to dest'); diff --git a/desktop/main/check.sh b/desktop/main/check.sh deleted file mode 100755 index 81e5289e8..000000000 --- a/desktop/main/check.sh +++ /dev/null @@ -1,2 +0,0 @@ -pkgutil --check-signature ./dist/mac/Ulixee.app -spctl -a -t exec -vvv ./dist/mac/Ulixee.app diff --git a/desktop/main/package.json b/desktop/main/package.json deleted file mode 100644 index 24638b169..000000000 --- a/desktop/main/package.json +++ /dev/null @@ -1,94 +0,0 @@ -{ - "name": "@ulixee/desktop", - "version": "2.0.0-alpha.29", - "description": "This is a builder project that uses the dual package.json approach (./app contains the app package.json).", - "private": true, - "scripts": { - "build": "yarn build:ui && yarn build:basic && yarn build:bundled-datastore", - "build:bundled-datastore": "cd ../../build && npx @ulixee/datastore build ./datastore/examples/ulixee-docs.js -o ./desktop/main/app/assets", - "build:deps": "cd ../../build/desktop/main && electron-builder install-app-deps", - "build:monorepo-ts": "cd ../.. && yarn run tsc", - "build:basic": "yarn build:monorepo-ts && yarn build:bundled-datastore && yarn copy:build && yarn build:deps", - "build:ui": "yarn workspace @ulixee/desktop-ui build && yarn workspace @ulixee/desktop-chrome-extension build", - "watch": "yarn copy:build --watch", - "copy:build": "cd ../../build/desktop/main && node builder/copySources.js ./app/packages/", - "copy:dist-ui": "shx cp -r ../../build/desktop/main/app/ui ../../build-dist/desktop/main/app/", - "copy:dist-dbx": "shx cp -r ../../build/desktop/main/app/assets/ulixee-docs.dbx.tgz ../../build-dist/desktop/main/app/assets", - "copy:dist": "yarn copy:dist-ui && yarn copy:dist-dbx && cd ../../build-dist/desktop/main && cross-env SOURCE_DIR=\"build-dist\" NODE_ENV=\"production\" node builder/copySources.js ./app/packages", - "dist:rm-workspace": "pwd && shx mv ../../build-dist/node_modules/@ulixee ../../build-dist/node_modules/@ulixee_tmp && shx mv ../../node_modules/@ulixee ../../node_modules/@ulixee_tmp", - "dist:restore-workspace": "pwd && shx mv ../../build-dist/node_modules/@ulixee_tmp ../../build-dist/node_modules/@ulixee && shx mv ../../node_modules/@ulixee_tmp ../../node_modules/@ulixee", - "dist": "yarn dist:rm-workspace && yarn copy:dist && cd ../../build-dist/desktop/main/app && yarn install --production && cd .. && electron-builder --publish onTagOrDraft && cd ../../../desktop/main && yarn dist:restore-workspace", - "dist:basic": "yarn copy:dist && cd ../../build-dist/desktop/main && cross-env CSC_IDENTITY_AUTO_DISCOVERY=false electron-builder -m", - "start": "yarn copy:build && cd ../../build/desktop/main && ULX_DATA_DIR=/tmp electron app" - }, - "repository": "git@github.com:ulixee/platform.git", - "license": "MIT", - "devDependencies": { - "@electron/notarize": "^2.3.2", - "cross-env": "^7.0.3", - "electron": "32.0.1", - "electron-builder": "^25.0.5", - "tslib": "^2.7.0" - }, - "build": { - "appId": "dev.ulixee.desktop", - "productName": "Ulixee", - "afterSign": "scripts/notarize.js", - "directories": { - "buildResources": "app/assets" - }, - "files": [ - "**/*", - "assets/*", - "!**/desktop/main/dist", - "!packages", - "!dist" - ], - "asarUnpack": [ - "ui" - ], - "mac": { - "files": [ - "!**/prebuilds/win32-*" - ], - "category": "public.app-category.developer-tools", - "target": { - "target": "default", - "arch": [ - "x64", - "arm64" - ] - }, - "hardenedRuntime": true, - "gatekeeperAssess": false, - "extendInfo": { - "LSUIElement": 1 - }, - "entitlements": "app/assets/entitlements.mac.plist", - "entitlementsInherit": "app/assets/entitlements.mac.plist" - }, - "win": { - "files": [ - "!**/prebuilds/darwin-*" - ], - "target": "NSIS" - }, - "linux": { - "category": "Development", - "target": "AppImage" - }, - "publish": { - "provider": "github", - "releaseType": "release" - }, - "fileAssociations": [ - { - "ext": "argon", - "name": "ARGON", - "description": "Argon Cash", - "icon": "arg", - "rank": "Owner" - } - ] - } -} diff --git a/desktop/main/scripts/notarize.ts b/desktop/main/scripts/notarize.ts deleted file mode 100644 index f6b60dc9a..000000000 --- a/desktop/main/scripts/notarize.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { notarize } from '@electron/notarize'; - -export default async function notarizing(context): Promise { - const { electronPlatformName, appOutDir } = context; - - if ( - electronPlatformName !== 'darwin' || - process.env.SKIP_NOTARIZE || - process.env.CSC_IDENTITY_AUTO_DISCOVERY === 'false' - ) { - return; - } - - const appName = context.packager.appInfo.productFilename; - - return await notarize({ - tool: 'notarytool', - appPath: `${appOutDir}/${appName}.app`, - appleApiKey: '~/.private_keys/AuthKey_5VH6PQ3585.p8', - appleApiKeyId: '5VH6PQ3585', - appleApiIssuer: 'a89474ed-637f-4cf0-8429-da45ef388882', - // teamId: 'DY8K483XWV', - }); -} diff --git a/desktop/main/sign.sh b/desktop/main/sign.sh deleted file mode 100644 index 0cd0e3f1a..000000000 --- a/desktop/main/sign.sh +++ /dev/null @@ -1 +0,0 @@ -sudo codesign --force --deep --sign - "dist/mac/Ulixee.app/" diff --git a/desktop/ui/.browserslistrc b/desktop/ui/.browserslistrc deleted file mode 100644 index 9042a64b0..000000000 --- a/desktop/ui/.browserslistrc +++ /dev/null @@ -1 +0,0 @@ -last 2 chrome versions diff --git a/desktop/ui/.env.development b/desktop/ui/.env.development deleted file mode 100644 index f85b88f73..000000000 --- a/desktop/ui/.env.development +++ /dev/null @@ -1,2 +0,0 @@ -VITE_BASE_URI= -__VUE_PROD_DEVTOOLS__=true diff --git a/desktop/ui/.eslintignore b/desktop/ui/.eslintignore deleted file mode 100644 index e69de29bb..000000000 diff --git a/desktop/ui/.eslintrc.js b/desktop/ui/.eslintrc.js deleted file mode 100644 index c86213a18..000000000 --- a/desktop/ui/.eslintrc.js +++ /dev/null @@ -1,52 +0,0 @@ -const Path = require('path'); - -module.exports = { - extends: ['../../.eslintrc.js', 'plugin:vue/vue3-recommended', '@vue/typescript/recommended'], - plugins: ['monorepo-cop'], - parser: 'vue-eslint-parser', - parserOptions: { - parser: '@typescript-eslint/parser', - project: Path.join(__dirname, 'tsconfig.json'), - sourceType: 'module', - ecmaVersion: 2021, - }, - env: { - node: true, - es2022: true, - }, - ignorePatterns: ['public/*.js'], - rules: { - 'no-console': 'off', - 'global-require': 'off', - 'import/extensions': 'off', - '@typescript-eslint/no-explicit-any': 'off', - '@typescript-eslint/ban-ts-comment': 'off', - 'vue/multi-word-component-names': 'off', - 'vue/max-attributes-per-line': [ - 'error', - { - singleline: { - max: 2, - }, - multiline: { - max: 1, - }, - }, - ], - }, - overrides: [ - { - files: ['**/shims-*.d.ts'], - rules: { - '@typescript-eslint/no-unused-vars': 'off', - '@typescript-eslint/ban-types': 'off', - }, - }, - { - files: ['src/**'], - rules: { - 'import/no-unresolved': 'off', - }, - }, - ], -}; diff --git a/desktop/ui/.gitignore b/desktop/ui/.gitignore deleted file mode 100644 index 11f5d7142..000000000 --- a/desktop/ui/.gitignore +++ /dev/null @@ -1,22 +0,0 @@ -.DS_Store -node_modules -/dist - -# local env files -.env.local -.env.*.local - -# Log files -npm-debug.log* -yarn-debug.log* -yarn-error.log* -pnpm-debug.log* - -# Editor directories and files -.idea -.vscode -*.suo -*.ntvs* -*.njsproj -*.sln -*.sw? diff --git a/desktop/ui/.prettierrc b/desktop/ui/.prettierrc deleted file mode 100644 index 6b4bb5d27..000000000 --- a/desktop/ui/.prettierrc +++ /dev/null @@ -1,7 +0,0 @@ -{ - "printWidth": 100, - "singleQuote": true, - "trailingComma": "all", - "tabWidth": 2, - "arrowParens": "avoid" -} diff --git a/desktop/ui/CHANGELOG.md b/desktop/ui/CHANGELOG.md deleted file mode 100644 index 122340b4b..000000000 --- a/desktop/ui/CHANGELOG.md +++ /dev/null @@ -1,285 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -# [2.0.0-alpha.29](https://github.com/ulixee/platform/compare/v2.0.0-alpha.28...v2.0.0-alpha.29) (2024-07-16) - - -### Features - -* **databroker:** new feature to delegate payment ([47900e3](https://github.com/ulixee/platform/commit/47900e314b8d9f59f88598b1d914e211e1ae5bdf)) -* **datastore:** integrate escrow payments ([b00fdd5](https://github.com/ulixee/platform/commit/b00fdd52e36bc9480297639a5584a6f71d6890dd)) -* **desktop:** accounts vs localchains ([2c63e7e](https://github.com/ulixee/platform/commit/2c63e7eb1d0d7261dc00a74b80fa9a30a48ebb42)) -* **desktop:** add qr code to wallet ([ca432da](https://github.com/ulixee/platform/commit/ca432da2847ba95fccfc25cf7c51f93638c12964)) -* **desktop:** update wallet ux ([3b9fbfb](https://github.com/ulixee/platform/commit/3b9fbfba9c91bec72b3dbc4b88b83eb39992d617)) -* integrate argon payments to desktop ([b8a7ffd](https://github.com/ulixee/platform/commit/b8a7ffd651d88160afbfe7906c09e2eac06a345d)) - - - - - -# [2.0.0-alpha.28](https://github.com/ulixee/platform/compare/v2.0.0-alpha.27...v2.0.0-alpha.28) (2024-03-11) - -**Note:** Version bump only for package @ulixee/desktop-ui - - - - - -# [2.0.0-alpha.27](https://github.com/ulixee/platform/compare/v2.0.0-alpha.26...v2.0.0-alpha.27) (2024-03-01) - -**Note:** Version bump only for package @ulixee/desktop-ui - - - - - -# [2.0.0-alpha.26](https://github.com/ulixee/platform/compare/v2.0.0-alpha.25...v2.0.0-alpha.26) (2024-02-02) - -**Note:** Version bump only for package @ulixee/desktop-ui - -# [2.0.0-alpha.25](https://github.com/ulixee/platform/compare/v2.0.0-alpha.24...v2.0.0-alpha.25) (2023-09-28) - -**Note:** Version bump only for package @ulixee/desktop-ui - -# [2.0.0-alpha.24](https://github.com/ulixee/platform/compare/v2.0.0-alpha.23...v2.0.0-alpha.24) (2023-08-09) - -**Note:** Version bump only for package @ulixee/desktop-ui - -# [2.0.0-alpha.23](https://github.com/ulixee/platform/compare/v2.0.0-alpha.22...v2.0.0-alpha.23) (2023-07-07) - -### Features - -- **datastore:** change urls to be id@version ([903e34b](https://github.com/ulixee/platform/commit/903e34b43d8fb2bca060dc6344453da885fef29a)) -- **datastore:** convert to id and semver ([1f5d524](https://github.com/ulixee/platform/commit/1f5d524eed5f7af42e271190994040c2d183f450)) - -# [2.0.0-alpha.22](https://github.com/ulixee/platform/compare/v2.0.0-alpha.21...v2.0.0-alpha.22) (2023-06-12) - -### Features - -- **cloud:** add peer network ([9b214de](https://github.com/ulixee/platform/commit/9b214de012f765df3a42aa45b6b92d95d7d68a22)) -- **cloud:** registry service configuration ([08e9f71](https://github.com/ulixee/platform/commit/08e9f719f0c242ffbbcc3f09aca334563c9b87b9)) -- **datastore:** add migrations ([04542bd](https://github.com/ulixee/platform/commit/04542bdb05bc4250839fdb7b30eb11a2ab20b290)) -- **datastore:** configure storage endpoint ([0fca691](https://github.com/ulixee/platform/commit/0fca6913eb63335c055e5b4c88760092f9c55694)) - -# [2.0.0-alpha.21](https://github.com/ulixee/platform/compare/v2.0.0-alpha.20...v2.0.0-alpha.21) (2023-04-24) - -### Bug Fixes - -- **desktop:** vm breaks in packaged electron app ([a5c9f4e](https://github.com/ulixee/platform/commit/a5c9f4ef62120a2807f7b5aa6e829460502ac72c)) - -# [2.0.0-alpha.20](https://github.com/ulixee/platform/compare/v2.0.0-alpha.19...v2.0.0-alpha.20) (2023-04-20) - -### Bug Fixes - -- **datastore:** output rebuilding ([8d10cc7](https://github.com/ulixee/platform/commit/8d10cc7e24cfd1ad65725a3e14dc4a3a2a3d5954)) -- **desktop:** event handling fixes ([841c031](https://github.com/ulixee/platform/commit/841c031a2ec5061ce201b21aeb58ea53c4ac64a8)) - -### chore - -- rename miner to cloud node ([a3c949e](https://github.com/ulixee/platform/commit/a3c949e4af806cc6a4acdd4b4b04305946add19b)) - -### Features - -- **datastore:** add docs ([da39923](https://github.com/ulixee/platform/commit/da39923c0ba5f21359e58a55fc205e82af708e65)) -- **desktop:** add datastore details page ([a6bce0b](https://github.com/ulixee/platform/commit/a6bce0b9f5ac1121d37c3029bd8fd20f147e9324)) -- **desktop:** getting started guide ([1e3fd87](https://github.com/ulixee/platform/commit/1e3fd87973807e8862a5696421aa768a6cd02bb6)) -- **desktop:** log user queries locally ([33fb721](https://github.com/ulixee/platform/commit/33fb7215afca7bde722217a827a82e4b89082a8c)) -- **desktop:** query ability on queries tab ([3960c7b](https://github.com/ulixee/platform/commit/3960c7b9fda1f9bea3a81850bb4fdadf9f54b2d4)) - -### BREAKING CHANGES - -- @ulixee/miner package is now @ulixee/cloud. - You must import {CloudNode} from @ulixee/cloud and use in place of Miner. - -# [2.0.0-alpha.19](https://github.com/ulixee/platform/compare/v2.0.0-alpha.17...v2.0.0-alpha.19) (2023-02-25) - -### Bug Fixes - -- **datastore:** error logging ([7ee3d02](https://github.com/ulixee/platform/commit/7ee3d02076c0ced0dda05c884b25a33236f73d12)) -- **desktop:** allow opening external sesison ([5f5e229](https://github.com/ulixee/platform/commit/5f5e229a45f2373f1c3f236aadd7e21b17dbda87)) - -### Features - -- **desktop:** add desktop home page ([d8f5611](https://github.com/ulixee/platform/commit/d8f56110c66a1d290bf28c9e227721716fbe1f7a)) -- **desktop:** add pages to home ([76ff239](https://github.com/ulixee/platform/commit/76ff239eeacdd3c03d44ed91781b900e352479a6)) -- **desktop:** playback of script ([521d21f](https://github.com/ulixee/platform/commit/521d21faaa769651ad485afee876f09a73dde18e)) - -# [2.0.0-alpha.18](https://github.com/ulixee/platform/compare/v2.0.0-alpha.17...v2.0.0-alpha.18) (2023-01-17) - -**Note:** Version bump only for package @ulixee/desktop-ui - -# [2.0.0-alpha.17](https://github.com/ulixee/platform/compare/v2.0.0-alpha.16...v2.0.0-alpha.17) (2022-12-15) - -**Note:** Version bump only for package @ulixee/desktop-ui - -# [2.0.0-alpha.16](https://github.com/ulixee/platform/compare/v2.0.0-alpha.15...v2.0.0-alpha.16) (2022-12-05) - -### Bug Fixes - -- node 18 fixes ([cba4510](https://github.com/ulixee/platform/commit/cba45107b038f0538429fa18bf87448140ace5c5)) - -# [2.0.0-alpha.15](https://github.com/ulixee/platform/compare/v2.0.0-alpha.14...v2.0.0-alpha.15) (2022-11-17) - -**Note:** Version bump only for package @ulixee/desktop-ui - -# [2.0.0-alpha.14](https://github.com/ulixee/ulixee/compare/v2.0.0-alpha.13...v2.0.0-alpha.14) (2022-11-02) - -**Note:** Version bump only for package @ulixee/desktop-ui - -# [2.0.0-alpha.13](https://github.com/ulixee/ulixee/compare/v2.0.0-alpha.12...v2.0.0-alpha.13) (2022-10-31) - -### Features - -- major simplification of Databox into a basic version with plugin capabilities ([22ad672](https://github.com/ulixee/ulixee/commit/22ad672e06135049ab82fc8b3af274d9e72c278a)) -- updated to reflect hero change from dataSnippets to just snippets ([a5fcd64](https://github.com/ulixee/ulixee/commit/a5fcd64b0e2fbd4fec77a539b65e4382bc259001)) -- updated to work with latest changes to Hero ([0152be1](https://github.com/ulixee/ulixee/commit/0152be1267af472767b7c31d98739f950ffc99e9)) - -# [2.0.0-alpha.12](https://github.com/ulixee/ulixee/compare/v2.0.0-alpha.11...v2.0.0-alpha.12) (2022-10-03) - -**Note:** Version bump only for package @ulixee/desktop-ui - -# [2.0.0-alpha.11](https://github.com/ulixee/ulixee/compare/v2.0.0-alpha.10...v2.0.0-alpha.11) (2022-08-31) - -**Note:** Version bump only for package @ulixee/desktop-ui - -# [2.0.0-alpha.10](https://github.com/ulixee/ulixee/compare/v2.0.0-alpha.9...v2.0.0-alpha.10) (2022-08-16) - -**Note:** Version bump only for package @ulixee/desktop-ui - -# [2.0.0-alpha.9](https://github.com/ulixee/ulixee/compare/v2.0.0-alpha.8...v2.0.0-alpha.9) (2022-07-26) - -**Note:** Version bump only for package @ulixee/desktop-ui - -# [2.0.0-alpha.8](https://github.com/ulixee/ulixee/compare/v2.0.0-alpha.7...v2.0.0-alpha.8) (2022-07-13) - -**Note:** Version bump only for package @ulixee/desktop-ui - -# [2.0.0-alpha.7](https://github.com/ulixee/ulixee/compare/v2.0.0-alpha.6...v2.0.0-alpha.7) (2022-06-28) - -### Bug Fixes - -- **apps:** page performance tweaks ([f1bc076](https://github.com/ulixee/ulixee/commit/f1bc076f8a31523521d46c49db9fdaf549276474)) -- **apps:** remove headers from output page ([a1ebe9a](https://github.com/ulixee/ulixee/commit/a1ebe9ae20df4032e341b49fc85dd258112c6389)) -- **chromealive:** pipe output ([e49113c](https://github.com/ulixee/ulixee/commit/e49113c25a92bcb274fcead17682d64ef67b9da9)) -- **databox:** convert run later to boolean ([8a79290](https://github.com/ulixee/ulixee/commit/8a79290e2b67fde0e10e80be44e8745755f2344b)) - -### Features - -- **chromealive:** restarting session mode ([34dee09](https://github.com/ulixee/ulixee/commit/34dee095b0e7e32b2988d604be7cef341332bd79)) - -# [2.0.0-alpha.6](https://github.com/ulixee/ulixee/compare/v2.0.0-alpha.5...v2.0.0-alpha.6) (2022-06-10) - -**Note:** Version bump only for package @ulixee/desktop-ui - -# [2.0.0-alpha.5](https://github.com/ulixee/ulixee/compare/v2.0.0-alpha.3...v2.0.0-alpha.5) (2022-06-10) - -### Bug Fixes - -- events for chromealive not working ([88ca517](https://github.com/ulixee/ulixee/commit/88ca517875062ef2975eb441e5f3aa9e6bf6b2e6)) - -### Features - -- added new website ([1b749d1](https://github.com/ulixee/ulixee/commit/1b749d1aa93c47032b7133678916648b6d8d7a43)) -- **databox:** add databox cores ([36e4fd8](https://github.com/ulixee/ulixee/commit/36e4fd802175985755394751dd09a8ceabc5bfa4)) - -# [2.0.0-alpha.4](https://github.com/ulixee/ulixee/compare/v2.0.0-alpha.3...v2.0.0-alpha.4) (2022-06-09) - -### Features - -- added new website ([1b749d1](https://github.com/ulixee/ulixee/commit/1b749d1aa93c47032b7133678916648b6d8d7a43)) -- **databox:** add databox cores ([36e4fd8](https://github.com/ulixee/ulixee/commit/36e4fd802175985755394751dd09a8ceabc5bfa4)) - -# [2.0.0-alpha.3](https://github.com/ulixee/ulixee/compare/v2.0.0-alpha.2...v2.0.0-alpha.3) (2022-05-19) - -**Note:** Version bump only for package @ulixee/desktop-ui - -# [2.0.0-alpha.2](https://github.com/ulixee/ulixee/compare/v2.0.0-alpha.1...v2.0.0-alpha.2) (2022-05-17) - -**Note:** Version bump only for package @ulixee/desktop-ui - -# 2.0.0-alpha.1 (2022-05-16) - -### Bug Fixes - -- **chromealive:** allow selecting a range on bar ([3daa0a1](https://github.com/ulixee/ulixee/commit/3daa0a1bb60ec06c996a7cc14f52cd7e93753aee)) -- **chromealive:** change output location for pkg ([e3b509a](https://github.com/ulixee/ulixee/commit/e3b509a86e61210a15279f2ee035ea942be4fcd7)) -- **chromealive:** child windows messing up hide ([1840ccc](https://github.com/ulixee/ulixee/commit/1840cccfbd9a27ac801949d222962ce36ee83695)) -- **chromealive:** finder focus and tabgroup ([cba583d](https://github.com/ulixee/ulixee/commit/cba583d875b713d3be22a856791c643988a46360)) -- **chromealive:** fix bar positioning and focus ([d47d805](https://github.com/ulixee/ulixee/commit/d47d80514f78f1f92c3bcdcdde6094c1eab28a50)) -- **chromealive:** hide toolbar when not in use ([7c961cf](https://github.com/ulixee/ulixee/commit/7c961cf0fde441d1871f1e0cb45df5e8408a781d)) -- **chromealive:** improve playbar dragging ([32def57](https://github.com/ulixee/ulixee/commit/32def57948b69dc28206070b2e49cb5f3499458b)) -- **chromealive:** output window not wiring up ([f29b486](https://github.com/ulixee/ulixee/commit/f29b4869d7d77b78c7413eb70706e25b3d04a57f)) -- **chromealive:** page state generate ticks "snap" ([d3dfdb6](https://github.com/ulixee/ulixee/commit/d3dfdb62e9a1e20bb3910d9779c980147a51694a)) -- **chromealive:** playbar jerkiness ([4e2817d](https://github.com/ulixee/ulixee/commit/4e2817d4187ac7adbb37b6ad7e7031c91b68849f)) -- **chromealive:** player infinite loops ([788d4bd](https://github.com/ulixee/ulixee/commit/788d4bd1d7a93c6eff442f01eb6574c50386d29e)) -- **chromealive:** support multiple page states ([2e98ef6](https://github.com/ulixee/ulixee/commit/2e98ef6f1bbc4de3962aec4022435d9e7e1e8500)) -- **chromealive:** tab switching/closing bugs ([fb937e9](https://github.com/ulixee/ulixee/commit/fb937e9879ba1ed20fe7d6edb440f8ae571bd184)) -- **chromealive:** timeout clicking active tabs ([6ed6359](https://github.com/ulixee/ulixee/commit/6ed63592cba9a3d153c1f307e493a2b8e3a2668c)) -- **chromealive:** various playbar bug fixes ([e521009](https://github.com/ulixee/ulixee/commit/e5210099fd98a2a0cd242c04324ee5d117f24c72)) -- **docs:** remove w3c for docs ([4234da1](https://github.com/ulixee/ulixee/commit/4234da1940c33a330c5d156a4c0caa78b666abb2)) -- fixes related to messaging between core and extension ([9010624](https://github.com/ulixee/ulixee/commit/90106247e48b86f0818f4512a7c57f7da13e4993)) -- focus lost for non-active tab ([78cf07c](https://github.com/ulixee/ulixee/commit/78cf07ccb677c2aa298a4582e77d3b07c3b68547)) -- input and output tabs now handle empty Session.active commands ([94e5a82](https://github.com/ulixee/ulixee/commit/94e5a82b1a35bf08c8dd1315fa669fbfc6a3c579)) -- **pagestate:** adjust dom changes to be aggregate ([4b1b3a6](https://github.com/ulixee/ulixee/commit/4b1b3a61eb6752a15d231db10bcddcd977c0f21f)) -- **pagestate:** allow importing state name ([51166f5](https://github.com/ulixee/ulixee/commit/51166f5105dccf07134a357c694b8babf74add5c)) -- **pagestate:** convert to panel view ([743d524](https://github.com/ulixee/ulixee/commit/743d524e0d3fb3cc3a20203b26c47ff57c93a844)) -- **pagestate:** fix select boxes ([d470d0f](https://github.com/ulixee/ulixee/commit/d470d0fdf8d1c9a762ecc116d6130e29f2bd4db2)) -- **pagestate:** service worker dying ([9611927](https://github.com/ulixee/ulixee/commit/9611927eedc6e70321ab0f02c083504a47d203bb)) -- removed console.log, added back Statics decorators + capitalized TODOs ([98298f5](https://github.com/ulixee/ulixee/commit/98298f5ddb01bf334b3efa5f01b2a5e3fb1615d6)) -- removed input from UI + removed old databox repo from boss/copySources ([7705e14](https://github.com/ulixee/ulixee/commit/7705e149d16fc485680b9dbcd9a68a44f6921325)) -- removed some unneeded comments ([0cc6e03](https://github.com/ulixee/ulixee/commit/0cc6e0388b21788d54b35318ff79f00d315820ca)) -- **timeline:** differentiate nav start vs receive ([dc3fd12](https://github.com/ulixee/ulixee/commit/dc3fd12b5cef8e06ed1f234585fe17c2f1718def)) -- update timeline recorder ([623d6c9](https://github.com/ulixee/ulixee/commit/623d6c9f3bdcafb52754acc10a368680f7c1ac1c)) -- updated packages to get latest electron working + small ui fixes to toolbar ([4ab5857](https://github.com/ulixee/ulixee/commit/4ab5857ee0e7ac498249665be4cbbea97f34cd91)) - -### Features - -- added basic UI structure and messaging architecture for selector-generator ([00bfab0](https://github.com/ulixee/ulixee/commit/00bfab0574086be3b090ddc20266ba9bcf7460f4)) -- added chromealive-ui structures for screens and menus ([19ee561](https://github.com/ulixee/ulixee/commit/19ee561092689628831a49ac583c3c40e9e57076)) -- **apps:** automatic server address ([6d60f5e](https://github.com/ulixee/ulixee/commit/6d60f5e4806384cc5255c42439d3946cc1910d6d)) -- changed chromealive ui bar to yello ([a3ed3cb](https://github.com/ulixee/ulixee/commit/a3ed3cbbdd839e9b10dc4e1c77467ae52a4c0232)) -- chromealive always has a gray dot and toolbar tabs open their screens ([03c5c33](https://github.com/ulixee/ulixee/commit/03c5c33215e7675ae08dc6f3c02cb5dc06129a76)) -- **chromealive:** about page for circuit ([1a96d37](https://github.com/ulixee/ulixee/commit/1a96d37df8a5a3cfdf15375e381b4b7616dd96d7)) -- **chromealive:** add a mode ([52b70f7](https://github.com/ulixee/ulixee/commit/52b70f7bbd94f1045a89a13d8933af15dcbbeaf2)) -- **chromealive:** add databox panel + loading ([d7c7813](https://github.com/ulixee/ulixee/commit/d7c7813ca1a22eef6d7b4b336174693b9fa15f13)) -- **chromealive:** add pagestate to ui ([d3b428d](https://github.com/ulixee/ulixee/commit/d3b428d5d1cf1711e396d9e9a1b34ffa537292dc)) -- **chromealive:** add step + runs to replay ([3f3247a](https://github.com/ulixee/ulixee/commit/3f3247aab78ed8a8a97f32c21f8debe3dc661841)) -- **chromealive:** collapse hidden nodes ([8b9112c](https://github.com/ulixee/ulixee/commit/8b9112c428481bfccebc7c986ff6e9cd94fe972a)) -- **chromealive:** connect to databox ([83555ec](https://github.com/ulixee/ulixee/commit/83555ece9a57f53630ca244f6e323486241fdd4e)) -- **chromealive:** elements panel ([503e4d3](https://github.com/ulixee/ulixee/commit/503e4d3e4047cea5a07feda5c56e545719d101ad)) -- **chromealive:** finder mode ([d0b1416](https://github.com/ulixee/ulixee/commit/d0b14160c2f38805d290064717c825cdc4c51a18)) -- **chromealive:** finder styling, resource search ([6b7f252](https://github.com/ulixee/ulixee/commit/6b7f252e939f53e049a2812cb3bfe050122f652a)) -- **chromealive:** fix focus of databox panel ([e67ddcf](https://github.com/ulixee/ulixee/commit/e67ddcf1fa2ad041fcd03cf4206d4c1660f1fdb3)) -- **chromealive:** fix mouse events (mac only) ([26c1029](https://github.com/ulixee/ulixee/commit/26c102965cb1e4f029914ea178ac49f33f46d031)) -- **chromealive:** hero script ([c3d093c](https://github.com/ulixee/ulixee/commit/c3d093cd6cb50919f4fe4a882e37b0784b418cf1)) -- **chromealive:** input and output screens ([27eabf8](https://github.com/ulixee/ulixee/commit/27eabf82cfe7690be1d4ec73aa6a03c04913e164)) -- **chromealive:** move timeline over chrome ([f7992ad](https://github.com/ulixee/ulixee/commit/f7992ade9004afc6a36af914d7851154869152b7)) -- **chromealive:** new menubar + features ([0131927](https://github.com/ulixee/ulixee/commit/01319278c4a1adf2cc022c6c86b05712fa0f55bc)) -- **chromealive:** page state apis ([7f73b0a](https://github.com/ulixee/ulixee/commit/7f73b0ad7bf888241437569051d3f7dbb2f53762)) -- **chromealive:** pause/resume script ([2d99aa1](https://github.com/ulixee/ulixee/commit/2d99aa12bb68d7cfd5e1949f696afc5805fb9b4b)) -- **chromealive:** separate unassigned worlds ([cfec823](https://github.com/ulixee/ulixee/commit/cfec823a8a5292009ccfe9009ad108905f59dec7)) -- **chromealive:** url navigation bar ([0748a4c](https://github.com/ulixee/ulixee/commit/0748a4cc640937863acb00522eadd146bc220095)) -- **commons:** source map + code loading support ([ec0bb70](https://github.com/ulixee/ulixee/commit/ec0bb70ff0656535cf4be37db9615d2987909e69)) -- **commons:** ulixee config ([b02d3ce](https://github.com/ulixee/ulixee/commit/b02d3ce4dfd04f12f7686711a9ab95c08f02e96b)) -- convert pagestate to domstate ([8c7facd](https://github.com/ulixee/ulixee/commit/8c7facdd87fc8f294ac6c16256df32ed3602c736)) -- convert secret-agent to browser only ([968208f](https://github.com/ulixee/ulixee/commit/968208f0690900dfc641ad4c8fd47b51eef6fa11)) -- **finder:** added infrastructure needed for the chromealive finder window ([068fae6](https://github.com/ulixee/ulixee/commit/068fae6f7eda4ebc936cd95caa28e33a29a46e39)) -- first stage of the new toolbar/timeline ([e69f133](https://github.com/ulixee/ulixee/commit/e69f13360349a06daa825ba97671911b98eb2cb0)) -- good looking but non-working toolbar ([e1c0050](https://github.com/ulixee/ulixee/commit/e1c0050c2d227db62db271d462640783e225dd9d)) -- **herobox:** convert collect to by async get ([8e52752](https://github.com/ulixee/ulixee/commit/8e52752c07156de91bf0fd9c676da55b135c9c88)) -- **herobox:** synchronous fragments ([2e46083](https://github.com/ulixee/ulixee/commit/2e46083432fd60dfef5f3c5b93e1ff1380329f39)) -- **hero:** update hero version ([0bd429a](https://github.com/ulixee/ulixee/commit/0bd429af703611c09c1c3648f6340169446b7006)) -- output panel ([3530228](https://github.com/ulixee/ulixee/commit/3530228385db555affb340ebab04145124e450ee)) -- **pagestate:** align timeline hovers to ticks ([b340db5](https://github.com/ulixee/ulixee/commit/b340db56bdd2db66525ae026310083b2b8dfa5a4)) -- **pagestate:** align timeline hovers to ticks ([a87ae68](https://github.com/ulixee/ulixee/commit/a87ae68e77b0a733a000d7b04c5d592572fbe828)) -- **pagestate:** storage tracking ([1abaf29](https://github.com/ulixee/ulixee/commit/1abaf29e8d88fe37dd956b2c0b1b2b858bb97368)) -- **replay:** add replay dragging to ca! ([ed6023c](https://github.com/ulixee/ulixee/commit/ed6023c0c860fc7082ae69b1577f528fa6da606c)) -- **screen-output:** allow re-running extract ([06ed565](https://github.com/ulixee/ulixee/commit/06ed565e7ff8b01b150a48305b566251c66e7e7b)) -- **server:** automatically track server host ([aa42f4d](https://github.com/ulixee/ulixee/commit/aa42f4df27414928f04c4bd6d074bb17fd23213c)) -- **toolbar:** fixed styling of input tab ([f14b046](https://github.com/ulixee/ulixee/commit/f14b046214b0ddc0807dc3fc5148daa2f401dce8)) -- **toolbar:** removed AddressField in favor of a more robust Player ([b6d3ea1](https://github.com/ulixee/ulixee/commit/b6d3ea191dac92895c72acd98228f90e42599d85)) -- **toolbar:** timetravel icon now toggles when user enters timetravel mode ([8f5b6ea](https://github.com/ulixee/ulixee/commit/8f5b6ea4d95db611c271adc504d012ef146327d9)) -- unify plugin structure ([ac6c30a](https://github.com/ulixee/ulixee/commit/ac6c30afd518c67b3230ff2109c90d381e21aaec)) -- unify typescript for ulixee project ([697dc2f](https://github.com/ulixee/ulixee/commit/697dc2fa5e4cc9a3064f7bb17253d7ec88f1793c)) diff --git a/desktop/ui/desktop.html b/desktop/ui/desktop.html deleted file mode 100644 index f44bc3bbc..000000000 --- a/desktop/ui/desktop.html +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - Ulixee Desktop - - - -

- - - diff --git a/desktop/ui/extension/hero-script.html b/desktop/ui/extension/hero-script.html deleted file mode 100644 index 0e2cfdac0..000000000 --- a/desktop/ui/extension/hero-script.html +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - Ulixee Desktop - - - -
- - - diff --git a/desktop/ui/extension/resources.html b/desktop/ui/extension/resources.html deleted file mode 100644 index 3e38046f5..000000000 --- a/desktop/ui/extension/resources.html +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - Ulixee Desktop - - - -
- - - diff --git a/desktop/ui/extension/state-generator.html b/desktop/ui/extension/state-generator.html deleted file mode 100644 index 2e0ddceac..000000000 --- a/desktop/ui/extension/state-generator.html +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - Ulixee Desktop - - - -
- - - diff --git a/desktop/ui/infobox-range.html b/desktop/ui/infobox-range.html deleted file mode 100644 index 666f29832..000000000 --- a/desktop/ui/infobox-range.html +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - Ulixee Desktop - - - -
- - - diff --git a/desktop/ui/menu-finder.html b/desktop/ui/menu-finder.html deleted file mode 100644 index 936aaba31..000000000 --- a/desktop/ui/menu-finder.html +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - Ulixee Desktop - - - -
- - - diff --git a/desktop/ui/menu-primary.html b/desktop/ui/menu-primary.html deleted file mode 100644 index f2b0801e1..000000000 --- a/desktop/ui/menu-primary.html +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - Ulixee Desktop - - - -
- - - diff --git a/desktop/ui/menu-timetravel.html b/desktop/ui/menu-timetravel.html deleted file mode 100644 index d901c4831..000000000 --- a/desktop/ui/menu-timetravel.html +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - Ulixee Desktop - - - -
- - - diff --git a/desktop/ui/menu-url.html b/desktop/ui/menu-url.html deleted file mode 100644 index 1c0aebff7..000000000 --- a/desktop/ui/menu-url.html +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - Ulixee Desktop - - - -
- - - diff --git a/desktop/ui/menubar.html b/desktop/ui/menubar.html deleted file mode 100644 index 4d7df9f6c..000000000 --- a/desktop/ui/menubar.html +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - Ulixee Desktop - - - -
- - - diff --git a/desktop/ui/package.build.json b/desktop/ui/package.build.json deleted file mode 100644 index 11696a478..000000000 --- a/desktop/ui/package.build.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "scripts": {}, - "devDependencies": {}, - "dependencies": {} -} diff --git a/desktop/ui/package.dist.json b/desktop/ui/package.dist.json deleted file mode 100644 index 11696a478..000000000 --- a/desktop/ui/package.dist.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "scripts": {}, - "devDependencies": {}, - "dependencies": {} -} diff --git a/desktop/ui/package.json b/desktop/ui/package.json deleted file mode 100644 index 13d6e23de..000000000 --- a/desktop/ui/package.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "name": "@ulixee/desktop-ui", - "version": "2.0.0-alpha.29", - "private": true, - "scripts": { - "dev": "vite", - "watch": "vite build -w", - "build": "vite build", - "serve": "vite preview", - "lint": "eslint --ext .ts,.vue --ignore-path .gitignore --fix src" - }, - "engines": { - "node": ">=18" - }, - "dependencies": { - "@headlessui/vue": "^1.7.17", - "@heroicons/vue": "^2.1.1", - "@tailwindcss/forms": "^0.5.7", - "@ulixee/commons": "2.0.0-alpha.29", - "@ulixee/desktop-interfaces": "2.0.0-alpha.29", - "@ulixee/hero-interfaces": "2.0.0-alpha.29", - "@ulixee/platform-specification": "2.0.0-alpha.29", - "@ulixee/platform-utils": "2.0.0-alpha.29", - "@ulixee/unblocked-specification": "2.0.0-alpha.29", - "@webcomponents/custom-elements": "^1.6.0", - "moment": "^2.29.4", - "pinia": "^2.1.7", - "prismjs": "^1.29.0", - "qrcode": "^1.5.3", - "tailwindcss": "^3.4.1", - "typescript": "^5.3.3", - "vue": "^3.4.15", - "vue-json-pretty": "^2.3.0", - "vue-router": "^4.2.5" - }, - "devDependencies": { - "@types/node": "^18.19.10", - "@typescript-eslint/eslint-plugin": "^6.20.0", - "@typescript-eslint/parser": "^6.20.0", - "@vitejs/plugin-vue": "^1.6.1", - "@vue/eslint-config-prettier": "^7.0.0", - "@vue/eslint-config-typescript": "^10.0.0 ", - "autoprefixer": "^10.4.17", - "eslint": "^8.56.0", - "eslint-plugin-prettier": "^5.1.3", - "eslint-plugin-vue": "^9.21.0", - "prettier": "^3.2.5", - "prettier-plugin-tailwindcss": "^0.5.11", - "vite": "^2.5.4", - "vite-plugin-checker": "^0.6.4", - "vite-plugin-prismjs": "^0.0.11", - "vite-svg-loader": "^5.1.0", - "vue-tsc": "^1.8.27" - }, - "nohoist": [ - "**/@typescript-eslint", - "**/@typescript-eslint/**", - "**/@vue/**", - "**/vite-svg-loader", - "**/vite-plugin-prismjs", - "**/vite/**", - "**/vite-*/**", - "**/@vitejs/**", - "**/@vue/**/**", - "**/eslint/**", - "**/vue", - "**/vue-class-component", - "**/vue-router", - "**/vue-*", - "**/postcss" - ] -} diff --git a/desktop/ui/postcss.config.js b/desktop/ui/postcss.config.js deleted file mode 100644 index 12a703d90..000000000 --- a/desktop/ui/postcss.config.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - plugins: { - tailwindcss: {}, - autoprefixer: {}, - }, -}; diff --git a/desktop/ui/prettier.config.js b/desktop/ui/prettier.config.js deleted file mode 100644 index c628a90ea..000000000 --- a/desktop/ui/prettier.config.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - plugins: [require('prettier-plugin-tailwindcss')], // eslint-disable-line import/no-extraneous-dependencies -}; diff --git a/desktop/ui/public/devtools-entrypoint.html b/desktop/ui/public/devtools-entrypoint.html deleted file mode 100644 index 17a8f79af..000000000 --- a/desktop/ui/public/devtools-entrypoint.html +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/desktop/ui/screen-about.html b/desktop/ui/screen-about.html deleted file mode 100644 index cb0a17345..000000000 --- a/desktop/ui/screen-about.html +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - Ulixee Desktop - - - -
- - - diff --git a/desktop/ui/screen-input.html b/desktop/ui/screen-input.html deleted file mode 100644 index 59f7e0997..000000000 --- a/desktop/ui/screen-input.html +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - Input Configuration - - - -
- - - diff --git a/desktop/ui/screen-output.html b/desktop/ui/screen-output.html deleted file mode 100644 index 159fd2aa3..000000000 --- a/desktop/ui/screen-output.html +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - Output - - - -
- - - diff --git a/desktop/ui/screen-reliability.html b/desktop/ui/screen-reliability.html deleted file mode 100644 index acffd7c0c..000000000 --- a/desktop/ui/screen-reliability.html +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - Reliability Testing - - - -
- - - diff --git a/desktop/ui/src/api/Client.ts b/desktop/ui/src/api/Client.ts deleted file mode 100644 index 76e2b0540..000000000 --- a/desktop/ui/src/api/Client.ts +++ /dev/null @@ -1,240 +0,0 @@ -import TypeSerializer from '@ulixee/commons/lib/TypeSerializer'; -import type { - IChromeAliveSessionApis, - IDesktopAppApis, - IDesktopAppPrivateApis, -} from '@ulixee/desktop-interfaces/apis'; -import IChromeAliveSessionEvents from '@ulixee/desktop-interfaces/events/IChromeAliveSessionEvents'; -import IDesktopAppEvents from '@ulixee/desktop-interfaces/events/IDesktopAppEvents'; -import IChromeAliveEvent from '@ulixee/desktop-interfaces/events/IChromeAliveEvent'; -import type ICoreResponsePayload from '@ulixee/net/interfaces/ICoreResponsePayload'; -import type ICoreRequestPayload from '@ulixee/net/interfaces/ICoreRequestPayload'; -import IDesktopAppPrivateEvents from '@ulixee/desktop-interfaces/events/IDesktopAppPrivateEvents'; - -declare global { - interface Window { - setCloudAddress(url: string): void; - cloudAddress: string | undefined; - defaultClient: Client; - } -} - -let clientId = 0; -export class Client { - public onConnect: () => any; - public address: string; - public autoReconnect = true; - - private connectedPromise: Promise; - private connection: WebSocket; - private pendingMessagesById = new Map< - string, - { resolve: (args: any) => any; reject: (err: Error) => any } - >(); - - private messageCounter = 0; - private eventHandlersByEventType: { - [event: string]: ((message: any) => any)[]; - } = {}; - - private lastEventByEventType: { [event: string]: any } = {}; - - private readonly id: number; - - constructor(address?: string) { - this.connect = this.connect.bind(this); - this.send = this.send.bind(this); - this.address ??= address; - this.id = clientId++; - } - - connect(): Promise { - if (this.connectedPromise) { - return this.connectedPromise; - } - if (!this.address) { - return Promise.resolve(); - } - this.connection = new WebSocket(this.address); - this.connection.onclose = this.onClose.bind(this); - this.connectedPromise = new Promise(resolve => { - this.connection.onopen = () => { - window.addEventListener('beforeunload', () => { - this.connection?.close(); - }); - resolve(); - }; - }); - this.connection.onmessage = this.emit.bind(this); - return this.connectedPromise.then(this.onConnect); - } - - on< - T extends keyof TEvents & string, - TEvents extends Type extends 'session' - ? IChromeAliveSessionEvents - : Type extends 'desktop' - ? IDesktopAppEvents - : IDesktopAppPrivateEvents = Type extends 'session' - ? IChromeAliveSessionEvents - : Type extends 'desktop' - ? IDesktopAppEvents - : IDesktopAppPrivateEvents, - >(event: T, handler: (message: TEvents[T]) => any): void { - this.eventHandlersByEventType[event] ??= []; - this.eventHandlersByEventType[event].push(handler); - const lastEvent = this.lastEventByEventType[event]; - if (lastEvent) handler(lastEvent); - } - - off< - T extends keyof TEvents & string, - TEvents extends Type extends 'session' - ? IChromeAliveSessionEvents - : Type extends 'desktop' - ? IDesktopAppEvents - : IDesktopAppPrivateEvents = Type extends 'session' - ? IChromeAliveSessionEvents - : Type extends 'desktop' - ? IDesktopAppEvents - : IDesktopAppPrivateEvents, - >(event: T, handler: (message: TEvents[T]) => any): void { - const handlers = this.eventHandlersByEventType[event]; - if (!handlers) return; - const idx = handlers.indexOf(handler); - if (idx >= 0) handlers.splice(idx, 1); - } - - removeEventListeners< - T extends keyof TEvents & string, - TEvents extends Type extends 'session' - ? IChromeAliveSessionEvents - : Type extends 'desktop' - ? IDesktopAppEvents - : IDesktopAppPrivateEvents = Type extends 'session' - ? IChromeAliveSessionEvents - : Type extends 'desktop' - ? IDesktopAppEvents - : IDesktopAppPrivateEvents, - >(event: T): void { - delete this.eventHandlersByEventType[event]; - } - - close() { - try { - this.connection?.close(); - } catch {} - this.connection = null; - } - - onClose() { - this.connectedPromise = null; - if (!this.autoReconnect) { - this.eventHandlersByEventType = {}; - return; - } - setTimeout(() => { - this.address ||= window.cloudAddress; - this.connect().catch(err => console.log('Client Connect Error', err)); - }, 1e3); - } - - async send< - T extends keyof TApis & string, - TApis extends Type extends 'session' - ? IChromeAliveSessionApis - : Type extends 'desktop' - ? IDesktopAppApis - : IDesktopAppPrivateApis = Type extends 'session' - ? IChromeAliveSessionApis - : Type extends 'desktop' - ? IDesktopAppApis - : IDesktopAppPrivateApis, - >( - command: T, - ...args: ICoreRequestPayload['args'] - ): Promise['data']> { - if (!this.connectedPromise) { - await new Promise(resolve => setTimeout(resolve, 500)); - return this.send(command, ...args); - } - await this.connectedPromise; - this.messageCounter += 1; - const messageId = String(this.messageCounter); - - const message = TypeSerializer.stringify(>{ - command, - messageId, - args, - }); - - document.dispatchEvent( - new CustomEvent('chromealive:api', { - detail: { command, messageId, args, clientId: this.id }, - }), - ); - return new Promise((resolve, reject) => { - this.pendingMessagesById.set(messageId, { resolve, reject }); - this.connection.send(message); - }); - } - - private emit< - TApis extends Type extends 'session' - ? IChromeAliveSessionApis - : IDesktopAppApis = Type extends 'session' ? IChromeAliveSessionApis : IDesktopAppApis, - >(message: { eventType?: string; data: string }): void { - const event: IChromeAliveEvent | ICoreResponsePayload = TypeSerializer.parse( - message.data, - ); - if ('eventType' in event) { - this.lastEventByEventType[event.eventType as string] = event.data; - for (const handler of this.eventHandlersByEventType[event.eventType as string] ?? []) { - handler(event.data); - } - document.dispatchEvent( - new CustomEvent('chromealive:event', { - detail: event, - }), - ); - } else { - const { responseId, data } = event; - const pending = this.pendingMessagesById.get(responseId); - this.pendingMessagesById.delete(responseId); - if (pending) { - if ((data as any) instanceof Error) { - pending.reject(data); - } else pending.resolve(data); - } - document.dispatchEvent( - new CustomEvent('chromealive:api:response', { - detail: { responseId, data, clientId: this.id }, - }), - ); - } - } -} - -window.cloudAddress ??= ''; - -// eslint-disable-next-line import/no-mutable-exports -let defaultClient: Client; -if (window.opener) { - defaultClient = window.opener.defaultClient; -} else { - defaultClient = new Client(); -} - -window.setCloudAddress = function setCloudAddress(url: string) { - window.cloudAddress = url; - defaultClient.address = url; - defaultClient.connect().catch(console.error); -}; - -// if already set, connect now -if (window.cloudAddress) { - window.setCloudAddress(window.cloudAddress); -} -window.defaultClient = defaultClient; - -export default defaultClient; diff --git a/desktop/ui/src/api/ICloudConnection.ts b/desktop/ui/src/api/ICloudConnection.ts deleted file mode 100644 index 804cac04b..000000000 --- a/desktop/ui/src/api/ICloudConnection.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { Client } from './Client'; - -export default interface ICloudConnection { - name: string; - type: 'local' | 'public' | 'private'; - adminIdentity?: string; - nodes: number; - datastores: number; - clientsByAddress: Map>; -} diff --git a/desktop/ui/src/assets/fonts/roboto-light.woff2 b/desktop/ui/src/assets/fonts/roboto-light.woff2 deleted file mode 100644 index 9a4d98c4624abdabfebcb17a09d153592f7b994b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49380 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 diff --git a/desktop/ui/src/assets/fonts/roboto-medium.woff2 b/desktop/ui/src/assets/fonts/roboto-medium.woff2 deleted file mode 100644 index d10a59261f0413aba05f86ba90b86e93090afa1a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 50224 zcmZ6xQ*bU!&@~#{d1BkPZQHi(WXHC#W81d9W81c!^M2p|pNn(W#Y|OSOm$WFTHQS} z9tz^jK)^u%VVDsJ;lB;|;lE{Q;s4nF$Nv8Xwj@qa3oC8}KZGHAv>{NAF--7-YjA@A zFgpk-Xn`PXf-w*nA$TMKzuh-RgFerLS%N4F&Uw(Vi!YfzM^rsB=ogHv% z&u%<=2%!2o$P!*! z1Eb;Ur;i8_p6zyU14Da0o4AMJ8m`EVb!G;AE0?8d#bmSJc8@B6mXrHN9@h>k`{>RN z5_62_wG4tm^Ci5+>(f%Bwx2ztUTSW09dp`#0TmIF1X%_#G#6(quW$y1^rpnDo}8FY zEb@s!Oa^0yHpE+%kXn{iRNk1}#?=ba^7ghAia;8@~Kq3&7KT~6kK?yNSji=!$t*!q zMpO<35thm0f5u`?`hvE5XZX3u*<*f^?BgOpr=F2Q9kCtJK=1ffFiD7~gohTm4ZZEm zWRuF(mpzQO-e(8-GW*i@lgjO!J|J(pJ%63}qvG84q$=^!8T*v9ldLHy4&$-S>XPTz zIlF;6?BoLtRiPfu%Ji~dh|gjWy)s#Ok(&$Z`!2+WW9Ud*6k%&?s@X6fDISlml~LBC zOXBh>85i&{PNuA*olK$T&Y*f`UY9^@EjW@d>c98+^1^|`0yo6CxjP+(>w-7obewew zL*=p@d(`b*QgX~GQ`=m8xI(Aon!Dhn(rM>ezbRmnmZY?TpjAb(f3u~z!j(=txq$Jj3T0UHvjLy3(*C!Tk70r=T zXRVF|&$1fU6!81lHz`11GvafznfnfOgvmHP$V6$ludEb+V&)2PV8~6YWc<0V(VC z&j7ohfP>`s>v#Tgont6w9tzC16$~}sFx>;KdeE&({%O}H;7>>T@8+(B{cLp-2yUcT z2YAkQ<7R^Z8X(Aj6W+2P)A+P#WZ?5xy?jA70M4V|E<)&)@IOk;?6Cw15y^ z<{ckZ8SMP>yOrw>_kH)(KA+W{=O4W8d2k1Iugo5W&?t<0Vg0*{ zfA8@w@&4Y6A%6jj#eR(Bp@akW+B3w^62e7FqQ94GjOsJ7;|ZtH;EuO9FSpdAP-2zh zY0-eEYH0I2iIo-_E=Av%X}cVJtLu}v$=U38tTDJEl`ykK9hHlE&4=i|OkrseKF%YT z{9cMXbD2@JU^1Bua9Ms|o4U1u1WJW>gE053XGy z2rb9{r%7s8CC>4Pnc4RB*};F$7Z3Af8tIpQAOwT%irOpH+O&osQJ6TvwMFtSGE}oZ z+h286C?Tz;lKF_auEtrYr*@LmUh1+-yL@*5|Ato!^qVKnzjU_m>E1osu zOH&K+J$pmgO{w#e47*t1_GCIB#yfw-*+YC}pc*^-X1!phzco7AUP!EOMU|BqYxn4v zuAHvZMn3{J7diiWI^*8oVfY9<|BTjDy3Ygo;u3x#De57D0U>Rr_4=KxhppXR+-&i^ z7VkQ5FZf$|V9|&R1n`0=LmX{=BLXJF?LPjr=)hpXqhHlq!8PQ!>{>iJsObHs6?UoY&Cs81+B-XcJltG$t84IrU#9@I z_R5YlY_6Hb@hs<9Ue?!q`InYngAg`3U*$wS2wQ*ac3Ly~n_D<|)Cbf9NdZqGkp=I8 z17T#$WUcFEqX%M91Q!d-bLI+9rdBUd-Jc~0t6grXy03;N>ii(Dr}r z*W2~8gP22Hq_c8=m$Lhv>T^xVsQ$Gn+SEG4%!g(tyrw-3WH*Kwj>$Uh3%eb)P_Ra3 z7e3p)DYgHQ;dU*+3_;p+v~-I{q~{0?Qm-d`HD}POb_RwuUqAXr{N0Uj`RYHEIwBZw zutegft9~1^^+>c%o0cvD2(wAyFy+Y?vI$4Yqisn-LM;l~-81^eQ0mDNpn|#Kgs>dz zsTA;|T|A;l-GKzEVuBC9QcPq@U{ui|nTznKoRd0heyxFM)(1Qbr2pGVNH>{-6DR&s zs5X{*(Uw8)l-iu`;-Ip-PRDBlku)3>bp%Rk z{;hms(fAOk+xl3;Tb2umlUwV~k5n=Qy24WfOsc?BKA&pWZEwx~mHN3te;1J^)D5jo zV7q{1e|1U6y_J2<@7LLRX!Wh^M-lQbh`PF{5-qFcEhGm829E6(x=MeA9#Y$$5`I)@{jIt`?mi%s`5P7RN-zCo=tG z;F7j1{j+Uj7|h_MqM&IaOA^BrO6j`4JDoSZOrW#3k%m?GXVssYP!t-;J1JfK!Ss|P zubILiI62ajOB#x(srrde1FJI0%7ebuGqzxpiT(FjEOgm68H)y&l49#KGeGbT)5UEq zJ1aF66gdzGS>oEiax{#99zD4Lc1Rx1`0Q;zU9-;rgK56O!-lex4iwaeJ(CU*^fJzU zgSD9}Jp+Zijw;P(O*?t=ImQ%z=A>V0Fi)Gfc3Xe;7ZYJ+T7Z%M!`{Qc;CV^R)` z&)^K>d&FOAck%Z6)ncvzcPuh5sUmBPNE&OH!OBWHyph^kEV-R}2YKt*Z;&9D+K%SB z5=5;Tr5wIeDz?h&oa%gbVHZ3GPGK|&ig~D66Hlv>Rz_W8MRG-#eePt9dDB>7&89Kk zj6%|L;R`jHdScPena)0nl|&+?Db1!5q7u@1S1sB%o8jT`2N66es1l@dFCPilSXiDC zMsA-EOTs)6Zvw=bts{?D_)j@h6z&N6$W#$|q zrl0J04}{c^JnGt-9LhRFu) zHO+NAy3UjWjY^e_jqoL(URJKetzkKHHI_&W)u_y<2OwTq36d2vR%mgKS2d!wfaDD8 ziTxu5T9$Y*;CyVW-_|gWQK4RvR!1GBD$y;GZR(@4rdV##eePumVQFURW&wXO*F) zkkCoyDyjY`#B@~3O^_o29||!W*EWe;8c}9;BFGdbQ-Phhi`Hjvg}9H}|B(ICzJ{}0 z^WjbzTMfFBNKF?_Rj$&U_trbs>$2+Gx{15mUd2FN!Arq&_xb0>q!^fu{+~xLPm3y@ z4$YExi}U)`HV0` zU^~}a!Au0`UX-Zh^5QS5byQ7f7*pw3+R1uh1fI_(fb0)J3JM-Erc;o zQFTeYy*4ismBVM>1By%1oxjCZVw`}}7Y&yb2@l!$C$YroBTi4DT)4|d&ctTRs`5)I zu{J6iC|Au~jz=c9V{C2C-9$xT&3o zv4Av$mQd-vC)rNB{04it8fY4KmA^Wp@>F{!S<1Xrt-Vw>aeNnpSm!Lw%|i9>7J2Hq zs!l_ArNWbQ4Sc^})P^`n-rVI7#n^OS?f>>VXiS1W;+YBVazuS$zKU|h;Pd4^nQfTf z>dzLN`6xNd9hu`d!bJ%m%DGB)ZGSY*Y1rECh?Zb_TrXh9D&5BbEzyYd3 ztQEuPRf*uQZJWT%btzh_=jvGW7XT?bu6Dozi*PvPAn{h2%8Az9{bB5=R24^0*0{(Z z5>2oqU3VJO)KjN9hS;Z^MK@c?O!f)oR2U7l6PxE`8%A_(^7HQf6>zCI$BY_FP&_HToDwMdAQ@@<_ zkUmr7>|;)}mF403j9b88r6h#wFYfG+k7Y_~sY+b^MkFN_-3;M6+nJ_zWfA0}=foM$ z=u3?G5&BwpYwG9~ zj9#j8*=dcf>VD2>4LsrnWuhw3VXSl6nA}h$?GKYC!ANy>s)rNO0&StReAe`Hv-!;$ zD|KE)_R}Ke@RYFx=4X(GQK?`V42LZclZ+@z5&8Hf5D7CA(8tn#rX$mygwdohM-52P zln@y+K1HO+V_wgzwDRCV`xcB_;PtebEHMG3#O0(CbMel>@vRZt)T8unM-niYjKE6p zj!%;6L74{@m|9#!_f3f@AzJPzF#vz{UL%SKs_p5qK5yD{iq|pCUr|DNs51N{u15#T z3i92QfaY~cg9a%9wHlOXKvjV%>T0L_-xT)_@25AD+=jy}zKyG#j0wg<8niF0ArC$@ z79;XOI9vddN#+A4I3v9*T=9}BW>F7_!c7R|VIGaek3=T*`YJ4CZ_c?JIc(lxrTm>Y z=74@3H@gDZdzdoeg)MXZeyJHdyVmHmHbC9DAu#w@QmKxRBtACNbT<@c_zV}B7mDgS-8##nK z+gzw*wkY8-`w4WQJA3vd0Ec}f$WA=*n=y-m*EN2R?0vwr8~kDK!Ut#sOv)f#jvP0n zPU5+?imqx2+_lGxF}LS}?FM(PiKjVM{)vl=Knm*LDK@1mwg+iFlO@cf)+gL;SqE=PczhNRKRD8klne5!~DWW(Gj8uH^Z_;u{fQ$XG z+f9SP>Vgipm_+Js$2$QdthqJ|lX$q`DH7m1!_gEVRf(aq@ROxL>iqI|g#K|91~j1sSdzvf`A81DNR!N_!^b>8+sNZ~sWk#xP^- zxTGXUi_ie?$XozbI#WuEnyM&LbKIlvE<)|IS>b5Ih%4A8{U6Io_g5rMJ1Ah2u;icC zi3`L%Af$Y12{v=vEr}SYG=f5pLZZ_yJ$}qMrK+w_OWHy?UUsBkGqDM6z9#hwnGGQihFFoR0>+8nUsi>JZ-cpun>%g3~Ig4J;Rk>^U^IYmT#A46meU= zJ0spz*ibU%W}VJbmN{hm{obaXIz$Qc=lB zxyfu$T2A`vsTGLLL7#FB1I`T=l@u|4LG0ONfMjbS_dO6&5OQ-Pk9rIM4gaESkE2ZXjeJ^4 zp$(`8w+h4rc?X%;Sd@yfv`VC1g*ZuKX-RCwkXwmDcyQ9oC3X_%Faoywc*IZ~=S9Y$ zJm-1J;tZ$F64$AoCcTqhVpVOX>rk@}zUNV-g}&!;3&+m;UNXZo&Sp2kpO5RhU$w?8 z6GMVjsIgAWIhA5ctO`q}%k9Et%B7g<7Io%k7^xy;IzDlq*RDSzQHmRz_#ebEVp@rs zX{?pmn&>T%LiQ0!Ke`^yjFpi){= z*m4p@q4a9W=yu$$seB?eesnGjLm4mK?!WM_Mr@@K%;)qEY=y%wX?ETEcO}iT>BsGG z4h(%W9$+jF)+4i%WGUimxTzw3)%(@=GACnOGuG1LE|9pYj%n}7cBBEKnvjQ^6&Gf7F( zQ@yHY>>Gd(qcH1FMV}h0YnTI6SzX~|X>CWCLWpuw6&zLhNFAm=InU0qa$niU96Xa4Uyw*KKk_U&84?3Bg|$o+n*wI0X_Bvn~qX>oa>2_#0U-}rsgg_%-_OwBdUc6z<^ zO(GPC4hCQ|H8(jsy>F1uMUy=tDSknG=_KhpLOXvjIMOj`=XtPL^iEYd?dJ12wHLUS z7q`x@7W8(6VNjLjKo2wX3~9MNiUiV*;;o{Ze7$oV=6(kYZ>ObH-}@SWwN6F)4c9a3 zr2UMbp0Lr9{6{`-Mx#+`DcI#&TP=KJ<-8tJ`)y-?mOefq`PWF=NI5 zyR_~fKTMprWW|mZ--#3FkGq+P$3CML!zwz6^p+Cgs9G;}D+!Ruux5@hr5Q?o!R5Tz ze)eHX$~Ddxq(PPGdVc1OUgLVVX!=%pcZ*6vQ5JbIno}IMUyC4#AHQspn zei$QaSSBjDpeEV>YzOWxkVNH$8_oDar#WJRAANwyJ}Ue`3L5ulp+sUg$u3tKwJwX< zWTsHty2bck=?2P%8isBgdt(>wj_*A<6bi9y2qlem=_DB|_Wp%?<`i4H z4$o9moXSXR9R2Xx4alyesQ;^SJD#V(|7n}$4x+&K%jz$+);kk;mzsp&fDjRl%l|n2 z|08EX&E;9^HO86PeJ2=FV#2+)IxnhACv#DLp;d<-=>H{ui7g)=6r}vX4WD30zA=h2 zvonlzSb)_2&KvXgsodGS3)2CS(Vnz5=s=;c_i0;@koiS;SnzH&Gf!$l0#K-MfkG@j zd3EVb3|F)@&cnK&0Lbv9?}{+M;5ig5N-XbReh7w2djz6NKa~IOXmKh>w2qzG*+I`g zKYaG2-aa_o3A#4nF*On#-UWaak9_#$M{V%6| zr$P3Bkcb%XQJtXOIUc=+>I}n)SMI4-EG#-q=|A0!7|IkBac_47?c znBb7e#t|-cTMHj2dc7O7;O10UNevktGOa_VetmX*8AAU6E+9;?*)^_2yh=6)&|6{_ z^?xxV{tj-YkHhkTsN(m$Xx`#$v~5{?v;P}*7h@e;tLt*%Y4O6yt%bI{GrI*?Yo5q( z2v_$~-V8nu>0qs7-2-E-bA|hz#@y%itzRYZ{R#?ny>A?cJi;R|QL|cH!U^=_=tD`(`X>DtpdNp>pL@Fc&j{v?5F0KGmCXc$+sU)hty*cE&;>ucV_NT zqyhF8Me~MrwI6F%?qKg&kGx;pIsrk0bi$T_IjK)!{KLGgm(q)4bI9?UhZCL%sB;L2 z6UppF6-a5k;P@+7+K7rTS&Ag>;tJI^|6N*RR-!Mtb4OEOQUiy9oLvv#y#%71i{rm~w3G ze~t)7&*ys4qV3{SJZ^R0RZee-NRJ(CWXK0dZcG^KmX)$Ms+7g*8NFTSulAxrI>oT) zc09^b4vIykl?f`LZEQ%U>>!_?o*;P{eNcv?vu;>(P3dNc*FDtJxie^4FI?D0 zntD0M0ZKwTldaOXlZzC!Ue;FX;KuWbjEBT=ou;A7vY9S?duE^JOceND7h<#=dS2&G zJIe(GYa^2AiVKm(0T?;shi8Z`&s&I^lu=hr64M`pC3I!?l9*!IiDo^?i};DaXxg@} zh4D|qpW%Q44BE%#jGTn2f#6a+#mBfIILdE=4EdFbou7sSf0P)ReIcGXLu5krqDk3(rnjR~U98?Nl zPsGKzg*tAe1|gB*uvpH63{-h8lcjgB#4GUxmjGW}$I=WmQvqEj;dP0z+XGSD^pigc zAf7x3wv-=oBjDx}#2C|#qVWf>F}5rEbV5vlr2osGc125*L-CXy?^Op$Wa-br&DX!i zE!C=kI(B2Vtli@)f`j?IdAiCo$nY&BvcFT86itVn$&kQ2lMvJZ^Z7|)^`?QGzpr3) zL(4Pc_C0^!?M-a~?l?J=JS?*CZ&kQ6aA_fN% z*ir552#kAVa^e3&(Ex7LxRL9_2T4ev`f$#>6Q66usdrB!QqUb}w0`RfT-hgQh9y`9 zLevgnFLfe2pg)*DJRwNl+#yK9P<&WK|7~Xp?SCD`T^qsC;~4;vW-|7LcHAo*SJ!u^oA5z^>77S(au1bC@K)UKwa??nft?c9|2yu43Q{G_PGP(FeSth!?)F*=@p|KH7oLq+7f}FHn5IdeN_coYACxLecGW(_nYz4Asc}7S|Ot!GJ z9aP5j@3e*Zn4_co3H3#ihmkoChk{rIUDw1SQ^0QSLNtk9EjwPP{Yysj*;v3fjpPZ3 zztM`M!ksXI9|Z~=90{uZW$|uhEI*n))Q(90cc6c2e*ECe*iU=^QKw=O>AKr$$4A#} zw*D#l_LXWHu30a=jGd`75sl3gcd%wN&N}2vck=(F5|Q_k*2jH-M+Q{&;oVq?qI5|5 zDb4^G9XFg6RyBKzPDFKpjHqsNuqT)(>CxoY|BOZZT2pbS#`YQz;Arr8BC<1sqlq%k zv76rhf8uj{(q1u)s)^x)C1Jf%=0{Us9toWdxxlY>M808!z(RtOF#k^*C!^3ru%TjhOVBKktt4uRFwyA1ufV#vG{Yi{2;^ zDB+&w;5kmKD!~tT(5NTa0Wqx^h5KsXD_6(x_q+F1it$R? z>jU}TH4(6KGy(^zk>lr+C)|0oV31UEkb~NSDNHM`>wYwX?%{GerEvYHOV>tv55&DXW}N}ZOLP?icIvD5kH$8D2$_4oOkJ)WIY2# z`;pide3g0qVl9dx>2WMLZZ(+|0j*vOMMEIKO#Ho;OW7N|U;wk%9acY>RtA0rLQ=QJ zweZP^Ej;y6lbnMdsRsL^bId8J9+|FcAaE151`wIRnKB%hKUtsFF~Y+^JPOG5UC zZcWo?ZE50VUAHe`C-Y_MjF(wwVFjP2ilgc3=dLmv_>ZG)O7`BcBvCeugh$#EUw4D$ z?pmCS#aJqROxNhB%Hbi~U(7rrcPHbpmFeNd8m*djWJ~)bR)Grbj27+e=T1HxHw*U5 zn_`Jq^C`gJTxH%I=Uh3mS&8vzD_^|})Vk8hOsoCpW+ooI?o9ff8T=hN1y6w!>ZY1zqZKwt?vb zjZ*UNo5er=0^q!=m2{ z)1G!KI=6n=@B=St-@mKG&|x09fh9;du6Pq@1{WOF#JZfRvQj$Ifh^s`8O(pxORI11 zZ4qjPAZ?FuA;RrBT>r=wO>M<)15iEORbHdCwA>pWXjk-yNB^#QWAL~%ygqtW?EX0B zm(#Ti)$)4Y(_h(Gw}UN26=o|MwXV*z6k9f`-9J^P-O4=LXx9+s@H}kjhxA3?1w)XC3jlJ%|@M^*k5hs!;K&N_J zRWDc`70Bcv)+^PcAxm zqyW>4xQbgd-w38a)2i5}MN~U#shBMqc(C?ki;m}(y13?8oCV!V1uIuO>8>AIle^g= zfHAAxFnjQI;J65tVt0;*kr$=dvT7DRjPYCquA{&b+1N~0m-ou--fGQFT?LlvXh9b9 zWR%N;zt3SJfO>gzh_%lb38XUirk~DiO5^WNJ>DG@?^T!Lp6o*gfqzLpGxW z0#fKGaY*n(3WUzX;&d32biQy{;{aK#?wk*vb8>qKg@%-;&X=K2dNZ*YW!d-- zlsSdomR?lg_3r_*7*5zDWv;3~X8A#sBxu6xf#}gr?;HmS1^>aRXeOIER*XQI;hZlgW6i-RW>NcJpGHrkWwK&6pkN-^@08 zD4rYdzKr+pYaOJ+gf$Fb0hULAYV?gs2@TscBFj;^5fV0E|Xb?sB z@fjsjMM62#Tz;8Y>5y#vI1m|b=C$%;y$*M^rqGsm0vhX163z6MU=ky>*qDovZqFfu zQ%OZ}*AY*iLy7Gf8}Yc<3Rn_i9Z(Z`g0U<2mK&(XyUbFXN)7OxH4_f#qNmiC1HO9n zfM@|*Wc2_R!=y4-WjuBmBD2DRT-V={lL|5GOzo1D3OShk2Y@Wmn?a~xf0%OIkYq>zXotd4gc}5Tcp#)9&*tadh;uY zAHW!jfjmOFAA~-O_Y|aw@Q2zk7o7{w+WXczA7wOCbM|V8PET9g!Rgu11es>5 z!2?|_szX~ia|ZytMHL;&4k^zK@(lIHodf8`>M;(6h>;t;n3=#va$`3JVm5SY3H_vT z;7B388Bx44GuxV(Kp^5a@@m)$UyBXQ@2xcW(k(DOW?#pur= zYNLxrE+bN`;a|_NAqhpO3AvaY;?Z`IyBi*;>^Dc1P?Lfclhi3?k`t@Xw;A0@xZ5MP})Nw!x3mc|{Uj)$c?NcDvuQ-xhTM-s)_ zJsO4PTfb(b7qr99z92PnClf+tt1p5M=n}pM(B3rj&0zrtyP7~eC5;rLfhb!SZQ#yt zJgr%;eMKQxG~~3aizDMNJ7af|Y@RQMj#A?j`J{*dZ^t;Z!&Y8&))d z7~_O zrYmVwE+ssk+@VngP4I|H4m=R#B^NHHoHrik@0}J3XKr9^%CqGXiAD-13cc&E@#Fba z%Atk0jx`A^zO+nLTTt$dYyFM%i8@@K(zdRtdEvgOuDW??*6{DGZR@=^1PTlLNss1P za}38mzdNa_>CM6Ka<#ww1@%BwU~nKX5b*ax!UPE&K$Zkx2aoJS!$k4uIuJza6jm2j zmKIc$)D+2(CRVU=2TyP}ap~e45CVWB7@epNZR?0+%w}s-urP(lp%AFvSU}XXWQoG^ zft)c%8NgDvP_;n+8|Q8bx1XqDIMiH~G3C05XyA)K@k2Zj&I=@na*3a}WEi@c51SZz zK_VO@#)?1BTC^OxpJ#jsg!lGEkP!`a^2LyerI39Bt`D%N5UM(q@#rAF^4;nqbp9N2 zH5|)+IaX#aCA#@OoFoibW#Ij!PYM_pP0@n%4&B8l?M)GOEVArKc_r+0J386CDJPVJ zh2x`|>kfnpLt_v%8bwK$#R!K|vt6)4Q?bD;ORpW5-oCq@N8>aFP(0BO{K+#ERNBuY zyhKBf2ky58()Hdg{Rb5A;a~l`H;g|9`C!!Rjsg5AqcHsUNP;l|GG&#LQ@|^~91qI- zGiiM#q=gtmvhup3A8`a#e%8#&shH zZJN*3&1>}hVU_!UAL~jcJ_WjinByUo9H6&=0;OCWI-pIyOUy+wF%|AarxcyPA_)Uc zgN?KBJcaU&pd<~X@PFZ#Lk^@4BUj>Xw~#cNG@MASvE-DV{Vp9~oy9o*{4v;rEHDuL zk-cgL6Nw@rQI*FB0Ho2VTPoR7#iP~3wHwx_Z$gIR76Yf` zwr|?-5xaBWfG!|!Kna5kg^}PzJdiP!IGI956M3KkQmj-lC3-x;WYHwytGq^4g2j@B zqASd1O~NJ8MdGX6CPf3q6NMuy>=r#kB~wLXZM{|SU~r)^qTJ|p@}#mQ)27_%b+iE5 z)N0jEbp{7k+mvefF-3f|f{dYnpAiVE9o$u+^DwsUb+dMvB77N6QY7a@Hh0OJm~;{i#`R zu+af>!$cJ_{I8U6svudR_UQAGSfsLYT4h*&vqc7$lRT8~E5KQW?Zn1%GV~9^Z{P9+ zCgaGt%)w<^m*Lw6^|@4M-5s&o9-lgH*Eqnx-+zdHIbMIAe}8uq-$yuqn!(V;1^O>; zMk#JzY(Mz%OHqdqk&|NCipO&fkOFqnWKGNLY?*rf^+=@}0Tr{HHpO&Ocv7)W{ITfV zVS`_wgkaH!m_w2I%NgctjB4x=M2A%XwMBUGWUR;%T-rlQP01@UNktJlk$)rog9DI7 z#3)?`fI>@BCgVef-W^W>bh#za2Nax;;L{WMmk_2fBM1dmm^qg|fK+Tnbvr=B2F1`& zIx0`Jp(SZbE<`2OH&ks+(Txoyf~K|^<+L(|c&Z%b_+ie8rmcwjvt*Ko82S0a zjsaiAIYdN`B1MhIebFF`R(Qwcdd9lDm`o~_|D1>r1`40Z0;4bmlqDsd#3X$Ov`}QoiWPQ@m|vf5c!eV zaWtW!V{ytITEe z)cq^E@44-H^5$c^3*(ifkP%+ll*)`dtT#qq`d2)!?AQFQu(2FQT0)Bw^0>gfoX$GF zv(Uu+2*D6WO)A^%U4HM{JJ>U3;}0D}clM9Kk!;I9mW zrkO_M`fmornS(0)zv4J%m8H>6oHz{e<==Jnzu-}DCa8y&Olty#BmA;_)aA1f-9-IW zpxwNCCBO^_o<{vmpt(3p89#6*^4>u4rjt7*7{$N8GPgVCJD_fEg)3Rq;BJw6z>FPQ z)%xFk4n1Z8k$G)?yS?YVaHW49?gYS4Ie>Nz-mz}~VR@Zw?((~wdIrpTXqtr<5NQj5 zOl{wN3G|okj&1hJkU3L@6HORcU7g*aF5WB2Q@I;DLfuxjM681PaU;jG`3E;J0Ock0 zu-wfBSOn==$9weY&U^CfQPkarEdTi&HF=x=0)6r7?}OYx&5(z8waPaD`%uaEH*J&l zw{QNVb_-pf+zZR8u~5iGuU1eE5#A!k5B{0@AmZs67TPq-Fk5FJN(ulX!i
MHQ7& zH#XL?jwv0*gmlbD38J1*E6?4uV`yxtf0k?mp14G|bvB)x;%c8MYP3OqL>$&3V4EEJ0f z4UKC;L-sLWQ40+a6&US9*@#s_-Suws=f{r5kfDsIM>a9Ee^xsF_y+k^X~!bjBy$Bv zAk32%Z&pi*<2#93m@7?BOq68j87O8j_VTdFyvcm4&DRmM3n7u9K8AT-Q8L&t%%AaB zYRi4{%ncM4%F7n3=Pxbfz7-Qt@u{9Mn(@9k84Z2!6@e}LHCfO{+`UnxVBPEVOpqlK zOGIMJ@x8YB_#B1C@sm%A_Ng)TZhq>b(!3NM4u2OAtQ2c;>VK6H{P(`|uG0JZDXy=b zz+X#$6CflK7A(^H3rVXfo5BfFnqYzZclg0cy;?eD7>jFn=lvVCC$htRI(G=l&_WIV(k4!gMStgYZiI=H^lWouTlXG(>G!V{&GD%f;JTU zS^|8{PFs0>SzWukjsGOwn3_<5Xs$qQZWt994Wy`>qg@-!Z}7JO;Pz<$uyHwI$KgiU z)Fo7zt`G;bpHD1FY?$Z@R4|2&Vo3&EigPERx%I!Cz zES%5CsRf$P{#m`ZN{kRAnxqMd5~f?Xu9OpJa6(0f!4k=yYqMmRp?qr0ga<8^tXJh) zi|P9Jx2nEUk_^!?1K1&LJ`Ly>(@CczQdq+cY=zi$Rq-N)`ck@={0v>7x*Bm zo(Vkwu+qeW5o3O9H}+@=2?(0s7zH*J0t#LaB?@zdvE^a`7+WU|@76rFVrYE%mTN-s z{NZWkVAJ@nJ~@TO))CNkRZSX-VIIg^;8xIuG|Wm2^Hew=Tvx?yMre|}*sHgtUNdtvP1;TaXk*D~YlT&f7n0sF5}hl^vcd7gE?#LrJVMWUm9EpBRr zv75wM8$U{qG%CMy@rXVh)qZfxBnj|pJjN8b#_?~RaSdrwaSh1EY!CtkdsNW;$YcbW zb2h-NI1|aIzF1RcLxG;(7~RYqO>P!C`;+$q?S-qWyi4A2@v>avsdEkUBWgzcC7A0$ zX5z1R&RMR^TiVcL^s#hB)PG-KSYGL|Vc}MGGKg$U4%7AZkU7NzlA_uaF;+~SH5tTO|^P-Q# z=!Hw%(3^8>sDn#5xZ$HiGpq>QuhaBx`91O;bXyXSa})WPcM5W2>aSz zTZT*DDr&Ry!_^97`wec(C_b>4JcuV*x;_UPpy4zZo*$KX{(0E?1FK?~d>k^=KVCrH zj&zA!+)D5SJFan5hcwTn<=bv3ENa>0njk>tn*njxa*BP6&3QNIw-TXFO->cypvg$L zxt`ah3KjK%mQ}0 z<(fqXOQ7CDb%~*w+Dd}Ey%tSqIzcfCU0-N`G!;}P8ewxtJ?*4l$iP3l_SE9qZ3OX# zy!l}|Egws-5#Zb`Gx;~X!Yo?yX^pwrFax#h!k7NlrA9WpX>uOlOcOU=QHv4aSLBk{ z&f75iu9Qd_Vw77aqjOr!XEsz>?3l_6^U9B}^-RHF#xRN)N(2U}TMJB9LI!zV6QBaw z^YK#hG?zYS;+N7=p=Q*%0ju7&Q<5!`765t% zJ(?Y2T0)MNs-XqK#KH~g{kE`WBS>Uptdnw5oUr@m%mUT zp2cn)1{F=ctB}-+rp*9Vlf!NaZ7~ib;-Sp~_fd1nVLx7i`|lOTnx?@(HsjTFbDcT} z^1y^-esO52j?EF=gB(W-ClJNW0EVFEu2(9dAN_A!25+cD)}d7-kZtfZf)%!n6>=<{ zsq)!kaRG;vw>>W&e#PVQ9^%kC$>mG)^!g*@Z7(WVNYixn>rwP9vTdKMmzr`ckx_2MGu3 zJ2FFQ5=a+w9v6S-dy-~e81}DRmWuwm<)c#}(@y#%rPCvUZ3?F(mNH%Uj|rpf8&y$1 zEpnQcLUy=6da7d8kcnXY1b47dhdJ~@5pgqva!^@~c_qIhQ?|6vEd!KbGDJhpL6|A7%u!Bz^iQ7A%SXQ%DgtIgWm>^l=^mxxqkV zU3Q#g;ljM+<2dypai{Pmuw!7?Js^goGZ>p?qCo#+Z3~K~2WWLtOP{?Nk zZOdgnuvurYbD2?vO%1VVXedGKYswQv*hRvEG8}@quCTd7c}CVD77ZD*L)p=wS3n%R zbVRnpK^y6zd=1>r%t1(Rc3@J@RB;;yCXQM^(`UN!FCBK*9zdS9N?^acc-TQjL zhO3IVuNOYhN&CjdG!Hk>_VGvH5nJTg-(i_cYZsy!g{$%5KR8nn`0|}N2qO?wreefj zhAD1G)yy=iS|l`>xf9q|I*WJ2`wrKZPVGN67yIY2Gs2NKgrIqHko7AFCwYukb= zj-kJmP8i*(`i6^gE=QvAm&kFZoVyM}?B!3)0gI3S}ByCb$Ad8rKFj6tpem=xpWGR!> zrzEmGldVgxBb6oP1oDM4e5`IYBYX2Rrx9 zzd5hc>H_ZvPnRh#_I1G$)UHMq;mjCK#9h(hA+8m_4fIJ>=w7^qj(Nb6j}|@<|?0V-Py^TzPX&37<>KcR&fLP6;|&`hv2GM}CVw z9|c`@O56&3y^{4s&@(zwvwO0Cwus&arB2QkE7xC-g`-VTe51aiz^#vbSvJ$?e7rjG zYRbnPR3b+Jg7X*f=T_>P?f4=$m?$zV?tW~VaV{m=We=5hPF@l{byq5nW1Twa&Yta9 zYU9>CcES8bj92|cMBwR~LB8otN z7y22}rt+UQ*%YRQxKIp(XA1-e(aFiw^l`9!7w9%E4F(8{PvaVQ~ z`>=+CWstOi#}4uQ$Zj9ernm%>Janh%lcSsuc-WSGt9>AD>7Hc4D&NSNgTCsaE%SCM zn|cwdu-2`1Q(J1>G1mO1Ezeh-F_3Pd{rOvfTfWu!>^S73&|y{N&Q+V!l_E?nH6Yck zd3J#=+Aohj6!%oP#Ang2!z=tf&Rkyj%R#S7irTbewZ;{+fuZvh&7WDNQuZPi%gde} zyA>S(xCSWTJM%LdlendeI22Ht*S*b{3_z`K9-547n_b7f6om4U9^?XB=)J&4ARwXa zzKOF+$OjV9XhsZU)}J$A{Qri*zR&_v$C#^;$7du%K}_fAEZ|UuJBxXIHt1^-oR}%| z$@4`_@zsZE*~y4?6BP4*rn00=)<~EB z%ZVf~Yfif398rO4vLBR&$L~lnPo%ahhvbT5>5}s3K*@w3i!RZ{uzXGl3ciEZ1#1`V zlAo98UxJ{cx*(f_=&@GCYtECreB@wlik<7^+t+LQ+%N`5ZUBp^tR8%g*b5E;cB_xE zDQmuqVwe|W{|l?275am^(lyX^}U@n13B66FwUUen8Wh*=Lo=SHiN-um-?pbMV5m8rOb^|t%P@+*v z_T_d#HhfFo)ZA?r5LYL}$-0528~)h0$U++?#?Z>;Uh=)IWTXLYP>a zNED5Y88@+KL+jZ~KSBZI!oMC98xn=(B7{zgnT3NBD<7WP{IIGP_Pu&ZkHlrY#_-P)`Bh~5R2hRw$X4e@K6Ipohq2mHEy|J zcl<&jmWy=5*Ucu+R3i}>D%P5nit|#>3}G( zi(Q+wY5iHRqaH1E)J0R4M?K>ep>`!%V-!XH+zN^ZfX1-c#zKmRgN>DR|L*z(b(OuG!W38K{%n15x5u6%OoQ)$X2k3JK874MQUr|C9oeRB0ah3@6% z0|gB47SD(5{kS1PEzQn;cdZ8Rbc=U|U2n;aw+q!F2=vKtA@CTZs7&0$GTV-j$Lozg zzNJd1INH{);6^f|O#uX*EREJBZAHcCH0C*6M6R?$8H=eu1U~77o=PuZ$)X7mTz(Vy zqR>&HQ0d9BSIY75@@FILSz$kDt?LgNz#RMDGI$aK~sL#Rc~F-p#VRvR(@sPm}6-aCP?(RoAV265MkT ztj^OleFWs1n%}3nZ~^iP=LpQgyC;e$ke$!Ka5Nv_1XAJyF~(#V|KnddAMshpc!!Yd zV4LOdFbm#4JH{=nmkmg+Wz;%`ipS6qS+i<)L?4?+Z9w40x*pbGTllI8R+3Nw1q7gk zi_sS&R`UEv@^~GFvwBX*;Y)YwWuVY-gn^SL&#^j`}(rPUUje zo`4%z3N&aH8wEjOS+9`}{)pLY<3QljBdvN~<1OO-yq&>d`lES^c}r_(6sgaYgV4kX zDwd$*C?p|6#dK(^Iw|cBl2IESU}!M*x=aPaq(z+2lTM<`Y4nMwunQ)3c;LPyNZBj> z+O*?glL&V1{9#9? zMywVTvzei`9&-3$4|!JPRU}gQ_7*~xIxdFLO}S8&ntk+0m9MWh6^T&L76~kNMJ-Uz zd;it3{0-`i96LTPfeY|AUXK2uVU{2kNdL`kS@91z@_zChA`EA~+whBWs1NCSY# z=hu35eot*hCFX6+xzL<2r1`BDRqW8vk`YFPkq}wC5`+jGOgxEAod-hB+{>W6*o6fu zYnir@TxxS{#>Q(MB#UAc&lJUx5Cn*#fvJV|4E5*bvGSOVYiy(NrEXpNo#M#OACFES z4D}rNp{C>+eQ@9;CxGs605S;_2!UDBd1e21G}1zbSF2MW20!TXJ)_8XTLOPChS-&h zl*gBV-(E)FTg7=WCY?f9FzIHsCwTi+cpJr1GED*C_Ql!S5UQuIM8u?o%`h*%Op{sl=5)i-t%;OE!NRXZ*3%#?7cWj zoqZ~i`kte3fg}$-e4651f?m>)=L_bp+w-M%x$LeLDfboAt~zee9$huQ#m4y2AIGU# zGPWmfmM1C&5F}D!7~mEZVpwtD$Z{H$%Z31AH#?b-=;L0+E6I021RkJE`rP-@<0ojX{b%Ber^9fQJ}wuD>jHxP-0Xvf1ik0K`;) zT5Jqi@%r4c7B`Vp**LM<8iS6_I;sDgR8*4)w(jD2t(68BfW_?!~UD_RNQ3G{pNcg_*b8AoMO9-EA%z@)lZkj-@t2kY~=g3 zXKPT~iuS>kw;#y)pHMD>S+1uKtM6gu3O#D01C0*4Ub+p=`$L{^L8C)T2T*?sv`vB+*cwDp|RftSs}%E{j`$Iiz6{ku(Nuiww@J8+kth4dF`X~_HS|L(PZx9vyJ zsZ!s+USGu@0#EnN;v>!jIqneN!90!dj&gc)QPkcNyGKCmc;4|cYD*cC5+F^Ft?oA& zQHulVB(;y0M(_+^3DADKhnSepK8d83uzGSajNY-tVQx(Obo&%Ry>4%MU9{+zxjOZDEH|UHTrp~MQv{P6VQ2y3U4)08{++&SLkXEd$}Avsm%;` z^Eyi8tt~k!vv4vPO43l3Y`Ixu!PEl!>P)$}CR2-=v}J|9%b@4*^qqg2`K4gxa6EyV zUmB%&-&|XF0j3J!?h-h=&~O{)i}E!%t=OXJ9!VG=lOi1yN|NliQ)81VwOjPSiHKG{ zVP5KgSm^&MIQEwt8sSAP=bnx|b&;Dr2_64y!9KBwVP5$3;Kvf44oF9zjj?)Vy5GaM z{3Xf%9~UOBnX4F*JsTQ)fO9s5i6`O5O@1SWCsM$z%S*AQ-0tJ%IF zz;fNE6Xq+sTmvwv^Y4S;;PfIdOtUm7?j{}DP0_7Zuc}FpYaC7#xFp*o{LECxaj}0AJ0Pnlht1gPAvnPCJG+@J}ULb*3(((+}dxWbKOV7T@`v8O~3;>ei?qM7ipfXw`@X@Ih%UR?$1 zsn=L&*+#VJSbfS0hgDsrW>=6?E~nU())0{e;X}DDmX%zrae1a%xkF4&;T)y7j5}E@ zce4z>K{BJy?x+>=(^F2ilfpj^uszyFr$=FOn16HKZs;37xJrGwv_#8|z zaC|&fWeyQEbFR&?*q0WHu41xs7N`Z4@KdiQe$YzJt}5bKC2WLNX6Gl3gQ|S2Q2g%_X%sS2^Pn^-Qx=82q$^2^@N-tv5YOm+YCIq*I)Uu?v5hLEl zDc-$+k}obeVoA?GPJ5G3?KYAHPu9l8+yKL4}j0jJ=s@-ol|$F?VH1r-T}s%2%t75V}1X2l@Y7D-g*>)zWF#JJA?KmNVY3dcz7EgPc=6Y4)_jXyvOx$tyU}FT~e2C$R z)s^I>)9ccUzf82-d|rJVV>Y?^ub>4V*GW`TlRvjTz>j4*ajs66DVLn5KgCCHd9G5v z?@P)@4gHrge+w#jWM6RlQw&ZpBi&k#s@Cg&@eL2{!+(R&G!`6s9|X8ZhWz0zR;=Z} zTcs~=WzrX4B7+F<>VRB&C$q2si?|X!Q|>)~i4WphXh-!&9h0po7im)B@Z*LKdBzXs z;mWevhH&b{AJXn(I; zJAQ0C_n#V!Qx2=j(VBQzNUXQ-eqBL0C*ZE=*yv# z(W5&R<;&UwomIdXjkeLj%d^4(6Tzjbk2siMG_LaQ>9QryilFsk?7C!v=Fj6R}<0-R&OF+HqyzS zq)W%2`E|}QR(+dr&>7{|P?6p3DL{#PcXQ_N%+y3NP~I81lN)tsH1|f}#`SLmZr>7q zCv<1yI^Mp@C-Rby{fMK6hepnJtC;NO`fkMsP4lM;Vc4CX41 zaOaP-`y3((!sWg^EuI(_a5*ILC!g>(MNv1vA}`;QE$^kNZpv8&x7QisAe zaom27F~#xY1fv6(m!|dtKJ3&?BXwU7R>Xk#6bxVeXJEf$xTQ=*eC_xuY$S^GC= z){~D+geMgqlXyUD#E*e0kh|ksfv&wXa0!2V*#* zjxSPIJl`4xrz|GdA4Xo50X@6H_$=+n6d}<$06TBzJ~CMgFNZ}VT<%~wrczuCfz>BC zp@(^xrM}jD6sE^W9+@$57`cEAUllS`@sr-U0#H30)R>wWIa#?Da9-C>>MaK0*LwzkwRf_nFmzU`AAr^iYA;4e zYlSEbo0G~>@hw)`Fhc|}oL{83c=ToTuJf57zjYrnjN4W^~iX&bLJT$b9#j@8e@l{PnKNhO`J|faYP2h zJPKBu9GQ%_{r}SghK8R_ow|kH<`Yn6DBz5mXz7(}Lu$b7TFRa=TavC7PbpGP)Glva z^*8o^_ka~Mk37|o+b)A|p4%evKh(sAj~Yqn27pYoH~#M*rCse?f6l&|9aAbX{B!P) zS1*qOKu@mPhNhUfJD;RKPTw|7B**Rq>*U|R!WzAM{gxMl=)H6;<7wID!fWczA>BGY zZ&*bWo_OOy{<)wjetX(u(W0<44=t%waE-u6fW!~mxV?L9|VkYYdvt4i+LUO#v4{%F4wX%Mvk`@K^Hf2+7PVVqkgfzCwwjg0@7NT7S1*k<`Hop;(?fQH6{mLD~Md|=?aKyS$c4fWvhH3PDf1Q2qtCj0&bCWw8 zaO*mgzaVZtA8b~!W*n@mk4KdLXrc;ZY##5t)vUIX2+s!j3v6a}hQ%Lejix{QTKJ}= z2hk!Y4M&UXx2{;-0??^cH0P#0$#nxlbHcl-50xEoMXN54a#%N&*kdE7OwD1G&jll6 z_!1YT9X|6#rtYW*Mti-&BwvuC5B5{WuV_=eU}h>~OhhzAL=&Z8HeN72C5<3N(-=ZT z6#(j?m+dBE_mf&pl*+uuJm(kAjB}lp&ZZ;J)wLmX?J{0A9$Q{`4Up$<#l&{&93Z)9 zUs0^Ir!8Ru6xv(%NrlCrA}^y6{Q^K{mI&32qgqQOXpqPke1&pvkmZmoXy=_-1%i%j zyroy?C{!T(iinb)Hu^=XXyFc{xDKBxk-J+)?R+N}ayVmuraN+RH@V#FCHbT(+C@0C zfZwjny+LDuU#BwZ@wd7>8>9}(>A+6>f+0(f`3~*Xpa5Qd6zu^+91aAL$PT(Noz=tsD+qF&e8#v(_eFa4~dTeT+4+g zlye3UV7{OCk&%@=QV0aL zaFFStaUIifIvqZ$WxEpJA`d8&3MLqfv3+!rzKm?vQPZ~DDA*9!`k14&dk{(j2Yi4i zJ?SZ605g=O<0=tp6fRQ}tYPGk-&BdiK3~m}ivHT__C^?#Y>nJN34Xo8EaZ8on2 zHnmScW?dVmqz8a4;*}a=ON!D=)u9$-%Mn`;oDC$qP;{X%1%O4KC+PXE5t`#A|2OJk z2Gs*+00(-?HURjAfQ0PgnM~?u{%<~Kh#a(+a&75iY%WvOKd$RCw4@Uxa(SA}FR=!5 zP;9lc*pl;yURy|8kj^(gel9P(j;sqywD4~LT6ae-j73^e)yp5;DAR7_-Y`*qvN7D< zy%f_0s8TtQJI@@0Jg53k5o8bo2BrSaZ5Zp)<#CavL!aWw#RsnSdX~u9PYG3+kDaYs z#pLRN8P0$=C3R71K4LUSyZS#-t}g6Jr?+u1YR|C@QL-GpE_)y>^o2}2s6rE^U-pfY z9Psk8&)+Y2x-dd}yje=5B|(J00my**x$r99(ro%PlMx@mrY5)@8Lz#*8{h9xwXv5$ zFq9>d>WPI`tFFBkdlF9*8awccLOfT#@(q6?WUDnjWkT>oCoD8VQZ2C%!tMv}{&K|0 zPC~Ljv#t|6T-OU|;tsZ*iV9Xvs`k1D!eo4=FOwPv>->|Soc?PPLAJZBppqzm!u*>K z5)Aq+3nbR$GVBAr-veg@W&03eGyB?X&CNi&I;<_l%k|b?8F~5^WRD* zrj}n*7PN&9x`e`8{^CU>OW6kQC8bhBOABQ+vl%bevvmg`09+`-3L(@p^-9;jiD_6F?0G^)u%RIt#R9 z0wP-3o%M>FNR{G-RMp>irwX+43O7wv(bbH$+-Dy-RTcmUN7T z{zYG3@PL-t^z?wJ83?Jtn{bgWQQt`%|!? z6(=Wvff}92{22nOrvSrw%i*oqqF+WgO+>vYaVv?uz|>38MXK7JAq27{h0MxTVn$lT zsYhGat=3sveDIq|meI_y5sxC-m@UI0GLX#)*xt&kyBR4BKcEB}z^og2T)^8aNeeTF z>xWiwwq=mEfFRVEyO7imPT*V5qMep@)TYP167dx_5ms!lgSI-%QkV7XRFKl~H`PP(5&OD*Sf;4aWgJfFH`C-r*{n zh6SuVo$DYR5vaU9HQy)Vb*7!Ln!u&`%zHUjxQO)aEa^&ipuxT)ueq)c6915$y9H;o zv^RFxWi8yg(92;&6mRPdzMf>)>m|Eq)4~x!a&x@Y;w2j)j6|3=Ijw$@rNv`e zC3)XKw8Ey~aaFtpaKy{7)Ra=w70|KmYEj9FBbxp}Ia3{wq)bS^tt%XY&xq`6;WzV- zoC{;IKDD{EU75Y!qah0>7r!~OgRm4^^Yiv;NcH-9%XC9?ee-p#ZMuhmc-!)cQ};A? z?mP#(tK$xE9sMlOpb}98FiM{sS>BAza)a`RzPkVwZ~4O*w(7^K5tl$fH;oE8Uxl5( zmeROA$=>U97NCrRODwbm&+=TWGb74DbC!jg#2xzmb&;Xrj`zN(?fm1n!uJ})`(NR3 z)Y)50%*;Qrr@#N0Qgak^*FlnyFwl<*;YJGV5_ z=4+WZh(l;lWTQO#0ocq5HwI3rq_^RvI>UEQ439(MADtT{=giS@R41L?s&iU4DCuyV zsj`!+ZJ7UA%n26z29qTjD!eah;o-J<<;4KGEtvPVuzH}+9(Y}-*AQm3 zQ=3WN$vrd^$nE9>sI-4{%&byA&E5nKW%%a-x%KiuOd4Rk`bM?*e!%uvdSrTZeTA^G z!bByGoe{@&^W}lh=AQ?&f#>Sf_<20k_nVvRQX;*R&m04KN8rV~!ctU@EI^vNSEX`! zUbS&Hcs5Y<(c;c>094HU%Ea6bZ#WjUAj>hXHypYhmbs~Kvo8z0>vwc0YEG7GeEVqa zov^G;gPVKb5F8s(lRr}qT#zeBjP*%uvsM_?W1B*j8lt@69108_ba8AWK%IgX9Xj;j zsg=zyS~0gP>!(PP9nyai-}Y;yiioJFT3Ffm!jRtLN+{$!=Wc-auCF6$`R%MLo7p89 z69G;IRpKnCs;ZcYDm#>N&svfugx>ph?I{|x#OY@o3nljHmm9k8k@K2AARnENSguM8 zOFC(&4re9(V&N-TmmohKdZed&)$a%Iy86?+mEWW)#wb@E&tkdGs8f0w*F^eFnvYUf z(Mgk(->Y$xVp=~Af*%R$Y-uu#6v;o)x@aCWqEf**TvmnDg8)>+D!Yd+E(?yOsm@at z*Px{3fufY4xj@B=%+0;~8MkkJ97)$p8yC5Hb{ynVM`?P$jC+V6W(53u0(z|+0dkjkvz%4KD zFS+1TXxEl^+Tl}NYTu^^(2m#M!@n|^(%WQzoOkGExU}|`E`I>No~~z79#2Spdf^_u zIDvb=zesA@WO0-jh<)vEE96fme2~eRu{rWYr(rsSU!XTS0f$L$wW%P{%*o#%Q$zls zW(mX2%;2*klA!8Kv(*x;9zlZ;P;+E%!F%-0v$s;xCEEC3Rzw*v)KSvP=Vo)Ux^Qbm z51LrMfXk0ag8;W@`AB@XJ)(l?rPg_f`|N?HY)|5)Q46^O6R=?UX`=~NY?ZD4$|;fy zJY24$$C~l=pxT-e2=sRDIe7iwS^?7=-#%rFd_ynNGU+gs0{QejaU+s*1jWelV6YB- zyJJf$0-qP2gjZ#g7jVO#3hLZR(dxf+4&OoGPJgsN3T2mg2tNbx&Nt}Bk7P_c0bm|kxMX%}PIP$~NPbEY2MZUfz9#TjoLIx|## z7~+s{3bKW<e0-~rhM7aVAVqJ%e0Y!JHLsQ;0GglS*GI#Z!3?Pc%i)as%D^KHCdHp>5Ci$}* z_-nZbRuSyLWux>2=V6{4AKjx%N^xOhmWf&-)?4;|niQzF=a5+`a?lB+mLSwgy09u3 zFTLAC4Up6A9$ zbQT=8F`Vf%u-~|BwZGsLRwnns3Z;R7DEpC@Q9%!5>cSbUUu1OLqU1YHP*UowrFBPu zBDsd`cX(* zzQ60(Qc~0IyYjhF(zXmwd0}F}0*IImV4j06V2)w|nvG#se7n?FaWpCHP%I4k?w0wT zY>$T->K_d8SnEZdOR2|p-;qycX-yFiL{N_p{U!fEbLjWcOW1!X0trzD&SpRGaw%SC zK$7YbP=pYZ1XF!c@sDuhKp)hOB(%z9#nmtah*BvAaAZGT@!<2r__-6r{({y%Ns-jd zRXLS;5?xUx^iSo{rm#yH5r;CEAJN1KeZ|6C@!1MYL`TGhP;PPtMM!fh1tD0nRI^^g9OL@O#SXVAnrVNI-7 ztEbxCSwN~>eQr71M{fhwxJ*8{cB}36V4dB;bdhkX?FZTVoTmR#Ef06jBmX#Vwc8Wu zLk3x)qd>7sTi5_Wn=fXde?e}KP-pa-fLIa%p>M)vcBil4XoNY?_JHLS>>Mfv>dZ9^Qg_3*Gxlx;q2g9b}Kf zOB+I0idd56j_m7jS^7UlmhRc>Zh7!gObKz`-n-1>A0)qO?|@7_CpmGj*|dn;YOQ(xc4xqmbaC0Z3ABVmVJ zXuR8U_CNkh_*AKd%zoloF@w6)IJ+^1vnq0MN{ABMz^)Lv;f;6FMLO7KJMi!O!uLam zl}0(6oOKX#@m)Ke-jny2&WFyYFLq>H50;_$mss1Ee{)G-AZKC@Z70QTLRb3#+}v;M z&)E-LYih2N>qYV0lLK#*+iarF`PYQ6@Wjhf+GD3qLji_IUIDao;yK@jc%?|hiI236 z_Ii*D6ZspoaVwQ{`5IH*4hTTidEo_#|1sgqam;|7c)GM#~4W) zUh}G`pij9x5;6u|1hUj+gm1`a>nD$K=ln9k=7au$B1oQxt@XWd*&T9oi`aa4GDT@Z zhvf}ND=P6dFa}Pe!sxL_PVimsO_OI3BL7wX&Mc5`;cr;$u0K5xo-KT;>xvCOX;DFa zDAktQp*^YnOPvwiUtyCFqOK)`k*1~#<1knJ>0v5CKSR)ZO3RbMW>diS2S=gsQ%GlX zVv@G&*N6X`oLgmZz0j2q&=u%qz7&wxP2M4pv z4oY}Qr;(RJ za~oH2mc^`nbo5FTuKz4>gth#y%kMX4C*IeQ7<&MC7Fesb=m&y>HU&W@!PmU*4bf24R<;|OnJX#%?D!@l%24rjP=q95*N$kon$Umec%cobfgK3Xr(&1cLu zGLc0^C63X2EIq_AAmtdTA64E4|EJ0IyV+ZM6J6Z~Pf3yVe)Uo;5{z50=>X3D?yWhX!zsj%74P+;tj=3>Gs#>Df*G#Dkl_9I1^WfC|=i~w#r*qD1K;#3dju!{YT26Te0FW!2 z{j(I@uC98_;X_<=1Sg~dZ?i4H!PJqSR%Lj~Gp(Q4H1Z@66r&6&-)6VxAyB z%+s$?K4eyo;OGQJ&u0JX$vFaTRL$u9CvhTZI0{eb8A^(Bxx~FKH#Iy1B1%e%5Ohk! zQ9*?bC36Qm=9FQo+^~sU!Sx_uYohH&=3-F#jUG^Z73>21Wj^_T3{9`(>qwF@!KrcV z1~yPqP)2vG`A(7pq27=gj<%qz;Fl263jhKR>)A$T-j2;h<$DOqU;LBYN#_@tohU&c zrYXh@Gx>uIzsGwtbKiP-XGqIpt#xK#OnL@i!Qtzz2oxWaD1>OjFJx>FRAS zVEwJxxL}i#z%%$zdw+Ycymt!-fML+uQ$%Kv;@0L|myL)k)F~5qK+tW-TGYZ6ewG>b zW0@^e2{SZIE!Ew2-01_Od9rCsJmIZQzVmGIm+k(_AL5Vxbh_p(q~Uo5+ZLMTG5J?} zUsV)o4BN$PIrSaPQ_=Ml%8&|RM(#9UQGb}`a8-X*r@Yg=*@0_J0Kt?u*cvuargEuS z;JQ>VILl;Cp4a;rbcU09LBTvTV;WhiRNlnxH_4i$G`u22>u1DUUr|urZ_K z*+Br-%fQyom@tz+#_WqmG6$xTX4nve4BdFnQ|@WSx@zlb0OPTqD=$@VqSGi#DsTiE zy1wO5+=pXbOQd2oxkU>#FpV{EqB-&1%zNN)&jqs@V2i3;_CJ-oxwSv0G+v1MqHt`a z8kqKkZ`e4omFapeSa1;~TAo6-B!L;A7Hb-B3}Jk+PPOkl)F`CZU65xri_UFjw!SIL z7T3Aou(kiM{i1`*sunEhlLjgSs^&?Nv)_V`RaX!m?~1A%`qrr4@Tbv;;Y-)_*Hy0? zFufpf*2UR>)e~}TOTtW^z(i&$foLWT{Hx#fDQ(@jPldG0qPq6*{gTH6!#NSf(Ym@j20P+A! z(nvTdOvTN!gvR8sqVC+fx}jUzL6?eDzmkqt1Y}{wyOR9sUT^Fz3i}3Bwjc2-b@{cH zl%tHw4JI`d^c&`JOoif0XPwt)HLcMT#zcWSMl9`t8av~{h6I(I9>I-$V(zt5mUnzv zOQe|f5e(m?p7`FAKjRzO*>jYYCjO}{uP=PiSn_GV?VZM}%gQ|SrF43TB|hJM&>+Dt zOpZ;=_i^2|O{onnw7FUDK*Ak9Uhz0kR}fL50P?G1(#aJcuT#U!b%?eQ4gC#%@_NR% zAUoUZYv#7gUEq(ky7?Z*(mg`mSv71^#u5CaqN~fQ=Sl5u`ootZU&Y1NlzYw}2Q;UELRDhz^x?L*h=433um;Jha`=wgxJexjwLF0Fb zdKj-@o}ICPTyn1mT^8ohpK0&8g#Y&TD*T;!eOl`N#YJv<4(kl ze^h1}eJD*hkk7+PFV*Pm<)v*dsbG7UfPp5imKf}?3gtVlcbWeF#+qsX*&~gK(7AQ) zT>UebJzM1t(TVwSshdnLJzJJwIta&uac6>J=0@l-r%-Xe#;;`tAAnS@!EB%W?!U@x3Ql#T>}$s<EwFL8rlA2X zYLUCV{P})0;w@jM(U*@Ol;IU zvmDVGK=vpybigA&rEkRH!1Efk-#tIA|7xOTzh@z<|Crn0E8%V;@4Uo5FxrXci2(u@ zzm$VV4EzCnMlbdz_ZdhEhMXkp!^~_csY>t0_}nTpeH3P>VpvHgfaz!Jnxa|gXz=Oj>mm;;nz*n@5MsL7e_77Yi;GN*l2mk%enW8fm^ z>{3L&IREAD6IZgr^Tm$1PZxZ0oHmK<66Z~Z_2``W{_`Mc+M8~-gxYsm2Q2+f$5#q< z@F3Caj+RZPcrswYlE;pK^=`3J5b@g2 zR`8S-KfYwTg6VN0BPSrPpQvlB422ESk> zvc?C*Qs9<8iN~qnI^E#G<>`?#S!+t=OJy$nYB@;qB(P>9;i}(mUy^S#StH7FF4CKI zlW%v)F~H@PQR0_)QsKy(MjqqnD5SXC=;4wgLI}4KIG4nFoJ-*nqr& zN#XLjx4Ra)T|?J%|Fdpt_n~5m)|tMilvXIr>iRD?(u+(j(ZneEMn_FhpDd~?@%C8P-M9>(=RIoWCHS}I3XZo$bUc?95vKCpUC|T~ zVMRXk!O66U+}>|`d!3u8p?AAj)oc^u7wGDkkqG#W@|FkHrQOJjo47^sr4QBhBisv< zdyC_IhNgv*^|i|aw>nh)Jmpz@Z=xwA46RIw|LA}2m|yY$s9?kKgdUt?K0 zERScKq(<6^)8>BM?ij0w4Tx*+_=`utY~4WNmgAu*UdEYWwrZ+}cZHdjz6e&9iPKdZ zE|#HhNLF;~FdH_dhUJm-N{&>Y0YvCR@snzBs`j#TOEbJs-P5HulU=+^7|BFp!f}^P-b81vMetuEiq0@lLyfBL0b~{UW1=NQw7bi-VI z9S~y~kTW4iNulR$@?xA6sLlc5sp8KzHtL`Em@pNN%3s*Z@!l3>x8JUJh)k!({7Pa|Z0P)!#KW+z|Dxbrj2mWD74lkwDa z)i>9u@tC4cHlk1&cBia-5K6D#bT-l{UuiryFSXbJWI&t0TMYYF=yU1YnO0(Z4u>^H z>PGa%q*|RdO@e(c?pJ|&z*NvHA$F6&lKSTD4m>v&(IrInM5_O{#CTc$orIri4{mQR zT#&hm`y5twjN~>V?fys=7?jgfw5A3^75rO8+RiY7LYn(x4gWYj>f)E$)6|ME0XnPZONGm0 z$#F7%a{P0&KDAY4YHM;gPJpt4e!Z>Il$z(pKhyCP@qzIi@Y+~oktmIt5C^$MED7_a zDeJ8dFp4Ii6E2}|y2?Y?Z?)5`1dlmLDf_$Ieb-;iBgh&gCRouo+t^xtCho4)wfWHL z;pJ4i5>5`1)C3x%>6&%&H3U(N+lc6`J|k+cLz!X6Xa`MQewQ@gcl`K~AY8j8(yzei zC@&*bWLU^0$?knNE1R`F>BdPhnFY~yzZua*XG~oF+e;BRzBz7+F~?8}D=!~_ zGAx^_2^C#$ny%Gd1!{HS&gVVa=`9LG`%u*|h>6_bPIDd0Y>#v6)<_uz{V8{xPra3CCUMxgyb`6}jJ41<+MI4Kkl^+4)MUZ!sjVy; zmJ5E}67jm?@I^5nh^||NKdzdN)Mg0BC@v)>igAX9`g(@y-LLG#NhzdxF4poV=!8_W z7L$14eoN~KK{kjFN4bq`y|XGsXTpc1FVYI8C)u~$ey#Ru>(??#nsVj$t`s>mW`YGe zR*upYIu+sE^Ddm4_S-Q|JnqmoguQ#Kr6y*dRCj%%7tfd)R_yID1HHWO^NVR*~zCA-5zsQVw zP*+8iAvJ8Wa@L^qxKfl^G9x?q_Vs|ik|^`kpff4nhgp$M;4GV_9D(bCfvK(TzqO-p;@ z$v$-Ti4LXAmf=R_4h;?PCcs|~8JE|`F3)v*?a6Ishk*|$Um z#};Za30NB3pQ8Z#(`s>EAmtf+i=0-F7Ct9>5|Mc0)<{G(N;+jviha6Owkr06?#S9so?ocn|pZ|7&PJiH!_skdc`ErBRCF`SHVChJ0Ba%>h12hQX5yjKg&@RI);*7yOVq`9sUn&A#`Qbcm# ztm0O4uTIT17FEYv%oDq`R>4x*k(0)6nD%WEuY z?M-doAaq@*UuwR-Sb70n{RmDYabwg`C?qOs6hX*+#|3y+SI(rrUbLDuMd4j@Ju z6g#_SDH3^@wvLXAZrwo(H;B~GYFQ{ru0^^n#nG-GJsC|#6KZT4n^fP&Qw z*?+%$klHL1gETEyjf0eF3LMB&4ym02i-2w$rXz)vW)Co=Arm{&F|D`=&RZHgE;o-1pk&ca(n14RqdeZ{9WM zy)z&NzWk)J6zy4AjfYkgv$`04A}Q15b+ z7f!(MQc%%SLZ=<_UG3BNUFFmBF&Cdm-|4;DtM9$atLI%aJ+nfp%a|}xar6E2=;2q81036)<@$I;NkdRqfkGUW zC|xM|*m0w6NJ9l$1XZGS;gIO<9dS!FT83UO=?l4mDjnVA&jOouLw=D5gscJe%=0^K zH7>Vg^}92ZJn<{dSHSSm@12Kz$s@K$o+j77_k`FANW^7#<(YZM{x5 zpa0dx`B!FQ%q0)sfAAMNV4vNo1!0y7zN0l_*)qco)ZGG}|9|^i!q?C7;v;`H4L@c zIdrglVgyS{=mz79K`EFM^9u{#NX|kHc^`x|j6^KvdWM>bjvjePDBNm2r&dJDCF(M$ z&V=`+i^uu^ZRP7XbnMFh8q*AF+d8NR-(Gzrud$!;Uh)%g6pSL#Os{-`!P)Qzx@Hi6 zzZ_mJgT9Bap)+eQFr{T^V0+Z3981Xwvk~|3v559de zG?M?f^*=c*&ef~}f!>jyE#k}rb=oK;I(G(_mJ;+7*5dPZX5}872YmLhtSBb5K}x(* zjSPRc{Xwx6C^@(1yjji9fMRn5r|ZN19TPb4lfQu;-z4dclBY#ejX%`@_ngJFv1TkZ zWKC#40oR;UneSm`?RC7wFR|(o+`}@@(!f$>y$uA=G#By~oqcJ}J9SU~ z&yc>`*ix=BYhb=^1z(km)xT5)#g;1YztqvmijZVbo=5d%a_f6LueD^bV2rgtT;@O!?_{t1% zpkU3@+HEJ;acm8OOP>XxRqI7_@~gQst6-a{0WQyzO-bje?5aX@E0U8g@CBG(x|WqU zxN86)%NOJCQ(#gP4aVI^){X0rC;(U|PE#KL@s2%5K57*QYYhi~Jav8AqMP_`bmC)R z_ibgwL~83(Sp3xVt;wXon*qfDaamnDTTXnfU+rxExCLaK%b6Ogv6~J^UG1m@T=x$P z0x!;HO>-Edqz=*2SN`qu`GI$4vu&;!j&LJu;M?RoYe!1#l%n>L_4=gJT#BXSjcuo{G#LUfA1B5?ZWk{7utqh~;Fni&rHqblwq zxBG`*UoHYyZ#X&8EJ-rI2G=JEp}u_&)8!aptvBm5A+9uqO^@&!!dhoXzD*Uwb*Lyp z)Kq6)Akd?e=;islZ9qM*~X8FJcGsnNmzf0FR?(pp^;huk! z9CWdf=;PTx=<1_`0kf7dXHwb2w1IROb+E>p69}Rw@flHN6)ljL3ks@P!qmLdS zP(7pic&gywx%*{QfTyftVbcOEtefqHFcG-*HGKpdn;ye*Q3$^pVS7i1z~Pfs zqf*IOvaLsrv5?)S(WuQT5n|D4G%z!OxiESpg#pt`+Yn9lEx zRWb_+8rYYn5GR!Xwsn7wUOjOA<5pN9t1iWfPk1G98B&>Q||LL+)gqfv(yYo=Dt%2?2+cvuEJ5?;rPw2Mf3Ei-f{m(U%O5Ix%pjpx>)L&YreZIdOoo-1L%2_v2Tt>>5l$}Jb>SI zs5IL zu`PK4-^s|=v&AEbtP&%FeVD8up%$T5+7@bgOLX?}CFfwyzihl92`6@Cg=FOSH8{H( zar#L_-nH>eFfQE7NqC-xCcrF0EX1s!KsKq+>j*JD?6N;Y`CIgKQN+h^Q~8!ERjEy5 zuIYCUlF`)v8yf!P_(8xRR(a(NGUQ|V9cg#;*D=(hy3%&mKSav|6&KUvkZ&~y@yl&kg_x%^ok z0S4aQI=!kZXS_q}20XkDj+u4>@0mZ(4R;Q9Uf2J9Xtg6CBB#b6S1 z10M)ALGYpJ%5l>K%^@Gy?q|$1S*U2=Pl(vV1FYAK4;Jgw*j`$Nmn+-cSG*8Z6d1v0 z`S^v}Olp7*$)WNp+Q#_9Q9&$Nc(G%r4(td}7ig@Q;(%8$&)#)~%0mvz<6nNfVyDnw z9j6?0Q(`*X;M!Ex?d-cWTs%qcqv@WvQsur+#m0hiZR2>~hTb)_X0YbE!^gUb*Jg>E zN|Vxt9$(VZJVc2lBqTTIB*&}Tb&b1PtS7p`Rz0*@Px{@HB`x>H-F`FqBktETXEFk0 zt8dU3yD!;=ls=5{6rt3k8;bts3T~?NzF2HRX?fzjS35jRG68bj%z(*dAoO8OjXl3nDDG z&P;K*-ph}kc~x)3J4+eV(w0y~ZHR*Y-MI(X2#S!JY4UrZ%a!^L)53KAgn_>6u$Cq> zLTAzIb$_c+l@G&>>rL53ng~+axM^y=Gm1?aks6G`W+m%g@CZ$iq18daxG7qerr_}T z=WlLj7EXy>p?(`AtQ0IW`^h<--N8n$FsP`DLgMgh6H+&uEt%3M_3F2$@u+dpuW1%y z4gjwo)57Ao*-1(NdVl@1RcHmPiAQ(0n$W&Gh&BSoPaY4WP^fB9po@Dd@0}l1zyElo zi@~bQI)Od^^9#5w0ICeQJBK3dT87dWOf(wsA;o3Hru5LGos6YrJL zJE>O}`~sQ>BW3-lXiXJb>BD*FIp4pm$P~pGDNyM^CQ85lgN0Uy(g6V@fBn1N6g`L)hFiaF$MOC zTS>}oj%^jCOB1TB_8o~cMnmh)E5se_@hPWj$O< zFec}+p?!n1d(GQgS^&9xI@w+4xV9XmYFY7hN}38=JFPlPTBomnOs(kql$u^$tpUo%ZE!OqB@zad&xb$t$pY0l>W@f2xQN~nd zn6}0wC^kr7C|j8Bk)?(yX#W5^tU7q)U?`hx$ee{V~jBlFMi8PoIq z1<9b(r_!~{;U%_{Y2KTl1Kco=q&IV~&!r&uI}a^H9w@)#7j2ZEyxZx`M0^xY0v&J& zk|&`m;RP~BkBPy(0EAPu>9K1!R(6#;)06O_0+mh7EAU6wGOCX`h1Zs3;x_*HY^Lmf zbJ=+WtLmPlVi3Djb9W+6fAXFu@p-bbI4C{y&L25(*S>J`$9(>M>luQlB-iP?5E!6_*UEhq>wQ@4EQ}FtJ4nOt!Dl?H9Y`C@%sX%x6*6p zB9e+n<(^1y-AiV;e*L^QeVDV5BgZ6!!2~A_iIz$~o_oIrV^kQrE>CZE0}y$2m;)93 zqwCRA%bwhR+aw$1>ozB=|6&e0q8hx*j3Xnkq}g8LvPy(5zR^%n+Eb^&_DphkF0mJV z%R_RS3OXU7J7*1&5$O2Uq-LAL`R!T#U;I~Tau0~30A7qt{BGjk4@OoM8RV_Vd5E|y)lokigrEMK4rjR*y*k;IFF^gzk z14PdI0_KW!vmlAY7xL|Aq_@Kg#Y^Mbz-m{b~2G- za@ajnk4b!Zfso`Fgah|ZzJwt~7D{gs_>#jA%}H^@E%b|4 zbxfh-kFGLMcYmdIluX)k%ak+9WeYKbe$ZBQu6>-rEeczmrtRi+SbNk+&Ie5B_ zUWwT<+|JJF-;*75phe<=_+T3L&KFsxO5E1pjWL+-@>;{5I?s5-5T|=x$QZjwEG2Na*-d`-a=^xQwdfx(TFw?8A_O%`IPQ5 zm1J+9b$zs%XfETXX2HvKPYAICVk;w-gzm%APYk_lPqhXrlCdB5Kj;~(xVhX% zm#rkreBJ!51@z z<~@{hgwmT!&~eYFxQG`Kzkfh(=Ee%ub5Yqn!Z8n0;dBt9x=2Y=V4B}^La5F_1ztV5 z0k&zC@~W(hehS@?ARuFY*TQYOA-*H)^jr8CMzX7qA^KNUuqTT9qe5?H+XgN56*^X3 z7r?F62sn$Q&)HV4kcn#jN)~Exo{K?c5o7TQEYV*TK$f&<6lMzuZZy-HBvjuu39H7M zn-;tL5)(Dt-s7lYfwQsOS6YU~3#C^dZZoDI0({LYQ?l33&mn5&=$qX9Ui|sT%8wd( z&3RuXrlHNNKrJEO%uJs9E=eEhzc#r!`Q|rk4Z58k{nhtRuD5TrpYA`M)be&m^E%i% zrG9^Px~soya(3qKUuh7%r?i;;<2Q`o+PLyp|6lU`CH5KO+7*y@8|5Z3j0O5RcWLy-;<4OrVgN`zusW`*lc3h=JDWuLVJAe91~6P$KEk+iK)*0 z-tRGKM}x%AWL2U+S_jb|AU7MNLBK|L21)(0CKL-j*EyjY`&@L6? z2(aC;4S**(21*IGPb7$qC4!r01jrraomZqbDXWouybLI^(}BJe@o3pXKO*3rRTrh5Wq=h0N1X@-Y){7vh|YRDTyoq?j6@ZdV8!r zPs5ReX)FYYmhsaQTQGKr7)kl+6VnFBc-AbLDwW!>~l<>n>IBR@JJ_V2vl9VfaiYkpe`T#Lq~JA3}>C`(%&` zSp|r9I4vH479Yekz@oH^)WW;C1!r@Bl#8&fpzc_5x{EbhC3D)PYrS1z|4HI> z!#*i>Ghs=JGRT=rB4|xGYoIp|DgORR5!0r*W-W1=)4=OYj+#h+9o&%ml1K)Td98I= z^%)0R$l@JeWLk-bL8M(1P8Q`TmUmKAD3Chg8t;TQ zMGkVVoNEPjs;g}K3ic>$qlQ zsB>G{}iwMq$<f?8xeI z4xsQpa%#2!(}@|dDyba22+yrTPsuQvPV4R~@H`k8S*L+aRnyoNsI_`gj%jlZ)^n9t|EZk!+lEBJ|01*egN5iuc(B zKWli59@UEoSh)u$vPljy04i})!&YUXXJl^9rNala@#aV74%YSE$+jap^vSi#sW9`) zl`Mk6K?IZ#AQGQ^1EU#D*L^4iQ^w#YGvcj?`C9^A)U8|CR7a_LpL35WQ=y(R=h6=peCoJj%2(3I@>wVg?Fm zL=!tFGT^hUbg|JyvaMvYR#4B2h0UwoiT;3ZU!#AeD&RTiQ8TY3mu)mpM56D2u4VPI z`-seF_L*&d`aVvyy_D)+(p>>@QL>p}|zBUdOkdz~t_sJJ>cILi5}Zm1f=exJCsn)MENH>;eQMn&0i z;C-bbrt)4{%!j8x8ZQ40px{0a zAiKQ#L4ZQv!HQgR#2O$Sbx?@s?@eP73L23u)yUTuN=3axMA}WH^0LQ zY>Rh9)`E5Y>az`ApSU$-mt)aoHZLcU#nnfT!TvTR(qIOsi-5@(65To;syC16Yhr#&?j&CPAE=jiqZ((qEqd~-nX}>F$$@IX&>vujh zlF^&{lABV)^7~B!W7y(`5t2Se7GQg>GuO^Mg``VMl91ci)7I#c8 z_-t9XD(^yP>_@nR-qyrA>dqBO4dawmJU^VxY|ac=6LSfFk5)pDM-Pn8^nu(=2H@W4 z%M|7O#bvo|5GwZnnf|tl`L>zml6Ne$~|^qviDcIUWgaP;mTfW?T{ zL=BgZDu3g|?v&Ha6y^q}cWj|vlW|qT-o>yxWTx}Ltl`8Kj@#oiNqVP&bBUAhjZ-Ng zc#ul7-+=(HV2r6S`W>iaJpPkF*Kldk3UFt&F+y^nor+zL%p~Q#Op&=8Shb9ZW z#VGAF%By|%HEX);HglXsxaFNnJ2<`6uf5F&{*Sow2s8;son}PT%E4*G;65IjKOp5{ z#)f%COpmX3+hzY9Kk(8#;CQhQu*#C<_~{Q#afstLK&5K&5S%#LQQMQe!u zLgb={-f8dnH9G6?^Y9TOuqNqya@*}^82O`_onwo`dp?#wnBhgpjPv7$Jf$5(ubBL z;qk}rx%X51g#CTbkDfIiyl%6ix(fm1aRt5HNqu!QwL*$5$B8Y=B?Ptf()N*!PRUft`(j90kHf&IshJJu${ePX>R0Q|t;57Gg^ntv4V{Kq$= zW($B!keoK0DF1EzVhh^YeKB9v3Od}}Vf~@jZcpDA$b2zWM$B+g=^9(DUOS@CL}8R>>WOfR zzh*bUegKoZ0Ovs8FRQ^3Kt>nf>h~k-pNG=w&R^x`_iV%>>fvkIEm*lp%7`czonGOe zNF&|sMM=%1D3EfV&la5;IHy8@D1nA^SUMB$-yE;~for#Akl=UHenE0ROJT(TLii36 ztUVucQAFTAxAcL7_aZGL856*cb~xJJEl@66x-aV-3S>)9284p7mN7EH=aqhzfR%2I zK_HiMx(i^HMt}g|ckv=0mcI*NOppaP0mQs02Y>DJWBdfg!;r-T81q4?iH-u-=XHw6(BM;5W}&9@Usfg^PZA--p|DhzK>9lsH5bS{?f&CUZDCjYet})eCdRy@3;1h-QQ=e zgwwuj*?>GVAz=4xUUzCZ5zD>8q&{~L$PS!U7uVaVJv$@oT579fjOEHN#^?~1QYdNzJc_k!bve;<+T42@2NKS{k>(Rcy8+N1)js~+} zQIur%Jv~b~xgV9qIw4~G#UdjaLpXD+1^SZ$ug{~Zci7vOj4v2i@fKMpl8a=m$@n$i z-}vvBZoMBed^d5x#C0sf%FeS=+xg6r%_*ed~T&7iqzz#1R%*f<@ zPYRfKw7poMD72$};mhbR*;RQjAn?SDk@3HX^-BjBVT<<~H;CTFFoUz_RRFhKA;`@l z?yPee2`=kg@~f>oAT)u#qw(X8K-u^6ndjHWJ2sd?fS&nPEqXpNtn;T~J-S8L1K z)bepQyiPMXd{Mp}smw(-c=WWk*zd2Ikh7sJZ7e183{^Uu_T(7ztVCCkUiT{N!<5N; zkih0mN|b-4?4kN-XDV+#=y3&iHpt>z7|BNVe+)0q}3z!5@F$ z{cxLZof(0nWu7*kyk|r2=_qJN*%!Gy< zZAhKHw6RX9hBxnV>lm&nvn&S90=E)-%lDQTeqLrk%_ZKRH=HG#5jTHw+LlQ<(>kF> zuIDU^R;G%Ym?Eu`p3IN5WnoetuNj5Mk!1o`$^#2fj^QEEcZOz$AEQBT_t##@5!z@~mw}?#8{>yUQbw9b_noPpgt?UUDXj@~bW{WjJNg zf%9AiDcTzsWHoPWkzY2y|GFY@YNn2U&-+qWIYyUSmu**KMO8s=K5g`M(RuJuS5{LA5If;He#AE(K5J$5pIiDqVzc(I;pZrm ztw5%5_Q;$m@=uL#t9>yORz&!37Px)ZIGM71ma#RH8i)GSa*<|&{rLGun3AVF8~AqA zSz<45C0BrtRglv z#kXVe01Gwx|07yLM`;^pBG(*RiBHzIG>!ART?cS`ssR!j7QRDv7WAvkGFjrL_NOgkX6BHMkMN}>HtUsIn4S~} zZ9B&{zLl+U&8_Xl$4>W#n>OC7s9W(9j%+2^TnH!W7D$o#hXnk;d9T=}voB(q+lGWq zTq{IVOS=tdQ8R*1*0;1Azw&nNe6sPlTjPc8cCnZCjGMSwRC0H3wVk#7v*KpLY4xA^ zjNQ(ug%XZKDb^=h;G@>`uMx7_rc9sQw{kjSTUMB#W6O^2BunN>r_IuHew^y%qv9*U zZp79kFUf8bQH^IFs5e4{#XnKdA}#)eUWGt7=}Jp%AR^!|?hwNZ@Nk=&7qPl+;{4c- zfcB9o6T0IWN)H&;MlTF`zJJ8sX|`Fy5%&PPixGNm%U@>J;~<t-Xv%7Tz!buXq~hw{n@swGY1SPbGe1&?~-wUS#yN|y+{lIii> z7Th$QO_U@Yg?LEVR2FH0MTATU7D=HTc=(hUy|*CWMW9k38*Q~LS-IH;PHM;}Vmqrf*;?Ng z&OTet-Fn~xloDEE=68#pf%JXQp;*A z^Rc=^Jr(lqh=gk^$|Tt4slIEKaN7BGuUzJAG3ToEv=@S^Nm}KhFP-&dO9Y#V!|(5Q@>Ht5 z%|!PP(P*H~Z_On@ef_20U>*E~k}HZjb%|8U0`6p>qskYNGS;c131hI4vrF0A(EOm? zTa0vICjzlkD`-AyDzyi$CrP5S7ceF2*?`N&Hd!iYrd#=EbW+*RH5Bf06~niI#7b9h zHXDYfB>{~%M1r%yvD7-BggdMC$5i+Itqvx=d}Y>bv5}8oHIVHdQS$ujHqPlPtuF9q zTJsj*B^n9v1QV_?lLnu9K`@rKfBg=$Hd!fzl*=JSeY)gvR5Pf&8mMPL?KCp)9u9X} zqyzFE56$yK-snq20`zOjs2g#bu8_?U-g2eGrpkLQS*Ch2)%JkqSqN)|0D453Q7gED znjnTHK;V3nG*8$kh<$Y#lWjT6q~9}~r`59ipK#i2Dela|8VG4WX0^CBL?IN=&;yy% zab*yXc^KsRK)i1~x&U4qoAk5}Phnc&Fry03DQ4$7^6BLriZ#*X7-=wN1xI#^_BGx4 zqpCfsZo95G8RBHYX<_IEmWh_kVX3Qf%8vk?noo*2po3|UOk@Vjnc9< zTUA8sVa@?NY)T}OO$JW@U1F$UPYS2c2`v%8M(7M3AkUu&O&r7q7*6;z?V9cd1^8sH zjWNj2^!)|BiTfOjU+-a!akljw5^Y~plRJYfq+^GO-6Kk<;yG|qC>4V0s=2zF`J|58 z@L;I06@J8iDAH6LnkBVekg`7VJdAnCgQi^+Sw|QJ+!+?65@5uI5u5qIi5XiehX@t&Bh-KW?(n+A5jxQ{)em{%|}>^^lKAmj<&x$`TKjNmF9gd%f=K}d+K zM8edqb4WKN$mJgFr7Zh&F_cU2j+TY0loHasQ#E*lM}Vz~s2(8cQw0x!88ZxK7FO()NEy}l9x)m) zYIc`83-Hl1yC9C9#3>Hahtq^wv12KK96>;=>WVsNmXtOi7ZJFc&aV;Br6){KCuzoQ8f*#(ZYRDPT^s7N2X;ucf=d10#n`d<-9< zzGXrfR{R6thYAn{m>J{3k6RPR#x8S zF}z0^_DvIJ-qx$M?3FJ0_H4%g@eK59P~b+2Fl=vJ9#Ct5QGqMrmn916Iw>dvK8o9m zc%-)|b)g4nPcy{{gap)ric^q_1G{Y*v{L{IhoDKfgU4mrlF--d3@H|vxmD=}roC?i~Tp!Q6ip`V9 zOy`s;MnXIR!pOhT0zf+IgaL3Ku~e0FpDUP^9Wze+M{TnNzruuJvUpUj^Ie&Nl9n(B zIataPsLIQPK^)6~YOQJh;A(`mfe1TT2b9&yx?m(R>w&(W4v+W>MjEhy!N~w%(^2`w zFhIftAp~L>7T711;XvcmF)1)OeFiVM!wBGbzAzaeA;wG=D7IrH;F!_OlpNw`>ptSKH7<^sVmX8$WD zfWwj~nFOzMJ_O_95VG?v2FFKZ5fVujOE5A<1F?#2Snn>yj`{h{gD$k=WFkjM7N-$< zeTi6ju}~`9Y(2Jo=eq<*YZ2;MmE?iqXh#+G&17^T2|Ey66%PPXv63;dd?pghW5M{0 znNSSI(Phj@8tBY`1-{40fi}P>sbXm$j90!byH6^0c<-1_pOb>m;o+ZG5irtl%fV#8{T%bnkT7x>d5i*l@xmjI zJ@MQF&mvP4hyP?$si9J*K@*J@ItCOItM;_9;bCBh_ksb#nloao4fnESB@DyB76w_^ z5R3_bUctbHLO?=6!@$D9BM1{NLZm1}(MV#%ibEEUA^{Z*{T7gjg)IrkxL-IG7Z0C6 zn)E#vF$t**nX+WdA(M-5Kih%|E2_AXN-L|piYlvW8PIR(Uo$gF$8+Fck7hH77Wmk;3YTPvwCL4CB>m6~_#cnj>uuF=Z zSKd?uE<59_Q%$?+mfP;Q>z?~n_n`IRUGmtIM4IgO#a<0s>{CZ*r{g{K%=1QjktZ{a zncRm9@zJLQhzJROSjf1LO54(R#P9T#WO88o3Dj0cUG>!0z=7oFp=pkp7Le%?D25Xe z0IJT(qhQk)pVBkU_AfcdP8sr1lJ3ayo!aD1!D~7~lPI!qHB$zes zh6$6d6L^^5bMOI)ujRHol6;gRSt=eb{zN2@F73PffF#7EGGxk@B}Xoqe0d5K`e>tP z?Il1ellO0+Q2NwD^rkud`1Ob31WBpX8m+D;;#vPhXtTv?vpd{SYk{DIq;5U`vZkAnQz%txjaH{O7)@qxS$1P{aCCAmyEvfSrQ2+C zZ5OOmZvpKVtUlK2wqV_8ibP22UuIO%y=xBa-? zjchQnLBu8k_M_kgNzn{j>r*c%`t>l~Fs*2x3a;k|Vg6`wl4f~PRvI=~*hcSQ|L2|N zW!(@s}-f;2tN243l z-EY(G`yami{1?Cc)vtf^+u!|uD?EQ3y_VDdL^sg-L9;fG;Dpm|Mj@UZrhYxI=%CO_rMfKdr%m!ZqC0z;PEB*8nwVPI*wD%TrK{w zJB2yfHq1}So|z{oIhR}}4E)mVoH%bK@nUAm&cpRAalwEDodq%Wqf89tpv2?TRW8J7 zhD}bJfV!BL2u#Ej7XnQ8Hwq;6H!>|W6t7oWIs&R??3jO~IWDvJ^)~!nE<)-(qG$s+=iNn2<`Fe%6A^ zEVNWanUKnO7Bad_U_vTwJPR&xUfvily%hwej0>q^LTtr?OJ=2rGHyHzE~BalOeo_* zX>b{>b+r+zUUIgEz>Ev2GDAIstKKp;nYAh=b9R8Oqs&%+SX}jo6G15BLMmb5D@`^8_R9Y{dU znA^?oxC%!P_q;#cNfhrt>DyE;6rteU>x4*)FWyE89*?uB=y}&}I8yIupBw}SPFLJi zV=qv~+vBfBaEt)XVJa~E{OR*&Z?3jKz}FwoUnqPfs_Sk5Sx~b2gZb$llf>2d81VJJ zboR1(hZ^j-?A7S-nBRB81qv#3C5moU7Z(OhV0^&B6$CaMxbWbEB0z`;F%ke$WXMs7 zGJ^uWN)YNj*9rI0{pErU#vn=hDz4%;(evc6jb3r#kOM9vlIXCB5>cCShi5t$v#z?^ zR@c7UTG#U~?D5!7rpG8=9wT2KqXcA(_6rN)oF|ZerL-99#r6_10lyL$@g@`kxkB!+ zfI`1Qz{g_GT&FoqVVu#`SM*S{a(-^A(Iz-a;=)q`*1uF>A3sk3M7n6_bG$uMv&fxl zFL0+6rF{9el&yTbkj`hN8CRlw<5P0Ltum{qFT`AW1i1KMF9RG15FY?X5&9UgCNbdh zz=MYyRXmq~aI0ihU8SpL_kz{xyIBDS=3A7YO`H?jr?=)6GqvH?!-88=U@eeW(k|$u zGP}c}w9N$4CR@)=C5riubJl*%El??KBEyYobX9A#EfA~X2j7jZM!$g zCHIVZ12Sq#x6qirRKP-Q40z_!C@c=@P-x5)$}3DwC}yl#($pdpWYD`y+G#a8+}0=D zT!~5J6tPmLTDQ=4XL9$}PYU}1+o9nI9X9A><@M_`=8Tf^Z@A;5?moD;=5 zc)Y`zb3;fd(V{dY@WthZl2fW9a6@lWrQ85e&=C_mAPEY*wrx;zg_?PO)lMyh24x+z zZCleE%gpVOn32US2oCn`X`bjD%K#In4hZ1J5;Si~4U8P;mQ0Hbh(;qz_#%W`!bf6H zL`)sf*(Hw{hRnDcyX1(CIU`r2ZxL-s=;Q10#E&fHnb6Twqi3VSh@w7%MBKzi)T~88<-4=DywpvcrQt31#I*j zc&+ocKf89rA2w5M1XHEGC~ai5N|a+#S3&t6Hej(wc>pcbnBZ76E^H7G%C&_~+I|TE zCZSPE(1SXtj1Z>5EoY!TOh{$l4!X)3{Ree-FS6O>n4`x&Q~P6o_a9V|=^n&N=6t@7FirLaMWV|DU~=EPi|Trlfkj1Q%s_il}YadO}721w9`0sx$%; xR~?YxqHIl(A5xW1$VY2LT}ZZS;w;M6)G^?A7kv=)ro;7L){QS2UWo(%001-?54QjS diff --git a/desktop/ui/src/assets/fonts/roboto-regular.woff2 b/desktop/ui/src/assets/fonts/roboto-regular.woff2 deleted file mode 100644 index b7082ef310e9159bc75fcdc0c35de4df22d76878..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49236 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

IzrzT?ijDYVI^ZDkHlQ<9n=p(c@aeaq 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 diff --git a/desktop/ui/src/assets/icons/add.svg b/desktop/ui/src/assets/icons/add.svg deleted file mode 100644 index 5b67feedc..000000000 --- a/desktop/ui/src/assets/icons/add.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/desktop/ui/src/assets/icons/apply-changes.svg b/desktop/ui/src/assets/icons/apply-changes.svg deleted file mode 100644 index 2016e5f4c..000000000 --- a/desktop/ui/src/assets/icons/apply-changes.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - copy - - - - - - - - \ No newline at end of file diff --git a/desktop/ui/src/assets/icons/argfile.svg b/desktop/ui/src/assets/icons/argfile.svg deleted file mode 100644 index 632150d3c..000000000 --- a/desktop/ui/src/assets/icons/argfile.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - argfile - - - - - - diff --git a/desktop/ui/src/assets/icons/argon.svg b/desktop/ui/src/assets/icons/argon.svg deleted file mode 100644 index 6069d9abd..000000000 --- a/desktop/ui/src/assets/icons/argon.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - argon - - - - diff --git a/desktop/ui/src/assets/icons/arrow-left.svg b/desktop/ui/src/assets/icons/arrow-left.svg deleted file mode 100644 index d657fe0cc..000000000 --- a/desktop/ui/src/assets/icons/arrow-left.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/desktop/ui/src/assets/icons/arrow-right.svg b/desktop/ui/src/assets/icons/arrow-right.svg deleted file mode 100644 index 0a6c7d207..000000000 --- a/desktop/ui/src/assets/icons/arrow-right.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/desktop/ui/src/assets/icons/back.svg b/desktop/ui/src/assets/icons/back.svg deleted file mode 100644 index 557c72a29..000000000 --- a/desktop/ui/src/assets/icons/back.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/desktop/ui/src/assets/icons/brackets.svg b/desktop/ui/src/assets/icons/brackets.svg deleted file mode 100644 index 7abb00ab5..000000000 --- a/desktop/ui/src/assets/icons/brackets.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/desktop/ui/src/assets/icons/caret.svg b/desktop/ui/src/assets/icons/caret.svg deleted file mode 100644 index dc280a211..000000000 --- a/desktop/ui/src/assets/icons/caret.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/desktop/ui/src/assets/icons/database.svg b/desktop/ui/src/assets/icons/database.svg deleted file mode 100644 index 2e3fe51bc..000000000 --- a/desktop/ui/src/assets/icons/database.svg +++ /dev/null @@ -1,8 +0,0 @@ - - output - - - - - - diff --git a/desktop/ui/src/assets/icons/domstate.svg b/desktop/ui/src/assets/icons/domstate.svg deleted file mode 100644 index 28047fa96..000000000 --- a/desktop/ui/src/assets/icons/domstate.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - fork - - - - - - - - \ No newline at end of file diff --git a/desktop/ui/src/assets/icons/dots.svg b/desktop/ui/src/assets/icons/dots.svg deleted file mode 100644 index dcc0448e7..000000000 --- a/desktop/ui/src/assets/icons/dots.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - Combined Shape - - - - - - diff --git a/desktop/ui/src/assets/icons/element.svg b/desktop/ui/src/assets/icons/element.svg deleted file mode 100644 index 6617b66ef..000000000 --- a/desktop/ui/src/assets/icons/element.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - Combined Shape - - - - - - diff --git a/desktop/ui/src/assets/icons/exit.svg b/desktop/ui/src/assets/icons/exit.svg deleted file mode 100644 index 442377fe8..000000000 --- a/desktop/ui/src/assets/icons/exit.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - exit - - - - - - - - diff --git a/desktop/ui/src/assets/icons/external.svg b/desktop/ui/src/assets/icons/external.svg deleted file mode 100644 index 695a0f7ae..000000000 --- a/desktop/ui/src/assets/icons/external.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - external - - - - - - - - \ No newline at end of file diff --git a/desktop/ui/src/assets/icons/extractor.svg b/desktop/ui/src/assets/icons/extractor.svg deleted file mode 100644 index 59d9404cc..000000000 --- a/desktop/ui/src/assets/icons/extractor.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/desktop/ui/src/assets/icons/heart.svg b/desktop/ui/src/assets/icons/heart.svg deleted file mode 100644 index 2984ba8ab..000000000 --- a/desktop/ui/src/assets/icons/heart.svg +++ /dev/null @@ -1,8 +0,0 @@ - - Shape - - - - - - diff --git a/desktop/ui/src/assets/icons/input.svg b/desktop/ui/src/assets/icons/input.svg deleted file mode 100644 index 3cc0ca57d..000000000 --- a/desktop/ui/src/assets/icons/input.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - Combined Shape - - - - - - diff --git a/desktop/ui/src/assets/icons/loading-bars.svg b/desktop/ui/src/assets/icons/loading-bars.svg deleted file mode 100644 index a1dbf9566..000000000 --- a/desktop/ui/src/assets/icons/loading-bars.svg +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/desktop/ui/src/assets/icons/location.svg b/desktop/ui/src/assets/icons/location.svg deleted file mode 100644 index 254f0fb24..000000000 --- a/desktop/ui/src/assets/icons/location.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/desktop/ui/src/assets/icons/logo.svg b/desktop/ui/src/assets/icons/logo.svg deleted file mode 100644 index 4e83d4d52..000000000 --- a/desktop/ui/src/assets/icons/logo.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - logo - - - - - - diff --git a/desktop/ui/src/assets/icons/menu-logo.svg b/desktop/ui/src/assets/icons/menu-logo.svg deleted file mode 100644 index f08ea1256..000000000 --- a/desktop/ui/src/assets/icons/menu-logo.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - logo - - - - diff --git a/desktop/ui/src/assets/icons/navigate.svg b/desktop/ui/src/assets/icons/navigate.svg deleted file mode 100644 index 30dd7b977..000000000 --- a/desktop/ui/src/assets/icons/navigate.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/desktop/ui/src/assets/icons/node_search_icon.svg b/desktop/ui/src/assets/icons/node_search_icon.svg deleted file mode 100644 index 37bdb1c2a..000000000 --- a/desktop/ui/src/assets/icons/node_search_icon.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/desktop/ui/src/assets/icons/pause.svg b/desktop/ui/src/assets/icons/pause.svg deleted file mode 100644 index 65549d62b..000000000 --- a/desktop/ui/src/assets/icons/pause.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/desktop/ui/src/assets/icons/play.svg b/desktop/ui/src/assets/icons/play.svg deleted file mode 100644 index 6d0bafff7..000000000 --- a/desktop/ui/src/assets/icons/play.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - Triangle - - - - - - - - diff --git a/desktop/ui/src/assets/icons/plus.svg b/desktop/ui/src/assets/icons/plus.svg deleted file mode 100644 index 6e548be75..000000000 --- a/desktop/ui/src/assets/icons/plus.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - + - - - - - - - - diff --git a/desktop/ui/src/assets/icons/refresh.svg b/desktop/ui/src/assets/icons/refresh.svg deleted file mode 100644 index 4d01486b8..000000000 --- a/desktop/ui/src/assets/icons/refresh.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/desktop/ui/src/assets/icons/resource.svg b/desktop/ui/src/assets/icons/resource.svg deleted file mode 100644 index 1d49ac0ce..000000000 --- a/desktop/ui/src/assets/icons/resource.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - Combined Shape - - - - - - diff --git a/desktop/ui/src/assets/icons/search.svg b/desktop/ui/src/assets/icons/search.svg deleted file mode 100644 index e44461bde..000000000 --- a/desktop/ui/src/assets/icons/search.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - finder - - - - - - diff --git a/desktop/ui/src/assets/icons/spider.svg b/desktop/ui/src/assets/icons/spider.svg deleted file mode 100644 index f7202d2c8..000000000 --- a/desktop/ui/src/assets/icons/spider.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/desktop/ui/src/assets/icons/table.svg b/desktop/ui/src/assets/icons/table.svg deleted file mode 100644 index f5beca62c..000000000 --- a/desktop/ui/src/assets/icons/table.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/desktop/ui/src/assets/icons/timetravel.svg b/desktop/ui/src/assets/icons/timetravel.svg deleted file mode 100644 index e80f0a0e2..000000000 --- a/desktop/ui/src/assets/icons/timetravel.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - timetravel - - - - - - diff --git a/desktop/ui/src/assets/icons/tmp.html b/desktop/ui/src/assets/icons/tmp.html deleted file mode 100644 index d785e5d4e..000000000 --- a/desktop/ui/src/assets/icons/tmp.html +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/desktop/ui/src/assets/style/code.scss b/desktop/ui/src/assets/style/code.scss deleted file mode 100644 index 595c0ba34..000000000 --- a/desktop/ui/src/assets/style/code.scss +++ /dev/null @@ -1,209 +0,0 @@ -:root { - --code-bg: #0e2233; -} - -pre[class*='language-'] { - padding: 1em; - margin: 0.5em 0; - overflow: auto; - margin-bottom: var(--space); - border-radius: 3px; - - code { - font-family: - Space Mono, - SFMono-Regular, - Menlo, - Monaco, - Consolas, - Liberation Mono, - Courier New, - monospace; - font-feature-settings: 'liga' 0; - line-height: 1.5; - font-size: 0.9em; - direction: ltr; - text-align: left; - word-spacing: normal; - word-break: normal; - tab-size: 2; - hyphens: none; - text-shadow: none; - } - &.ulixeeTheme { - background-color: var(--code-bg); - code { - color: #d8d8d8; - } - } -} - -pre[class*='language-'] { - &::-moz-selection, - & ::-moz-selection, - code::-moz-selection, - code ::-moz-selection { - text-shadow: none; - } - - &::selection, - & ::selection, - code::selection, - code ::selection { - text-shadow: none; - } -} - -// Inline code -:not(pre[class*='language-']) > code { - margin-left: 3px; - padding: 0.2rem 0.33rem; - vertical-align: 1%; - font-size: 0.78em; - &.ulixeeTheme { - color: var(--inline-code-text); - background-color: var(--inline-code-bg); - } -} - -// HTML code -.language-html { - font-variant-ligatures: none; -} - -.ulixeeTheme { - .token.prolog, - .token.doctype, - .token.cdata { - color: #585858; - } - - .token.comment { - color: #8aa1b4; - white-space: break-spaces; - } - - .token.punctuation { - color: #d8d8d8; - } - - .token.property { - color: #d839dd; - } - - .token.namespace { - opacity: 0.7; - } - - .token.operator { - background: none; - } - - .token.boolean, - .token.number { - color: #e2777a; - } - - .token.string { - color: #7ec699; - } - - .token.selector { - color: #ba8baf; - } - - .language-css { - color: #7ec699; - .token.punctuation { - color: #f8f8f8; - } - .token.property { - color: #d8d8d8; - } - } - - .token.entity, - .token.url, - .language-css .token.string, - .style .token.string { - color: #86c1b9; - } - - .token.control, - .token.directive, - .token.unit { - color: #7ec699; - } - - .token.keyword { - color: #cc99cd; - } - - .token.function { - color: #dd9a6d; - } - - .token.tag { - color: #e2777a; - .token.punctuation { - color: rgba(#e2777a, 0.85); - } - } - - .token.attr-name { - color: lighten(#e2777a, 7); - } - .token.attr-value { - color: #7ec699; - .token.punctuation { - color: #f8f8f8; - } - } - - .token.statement, - .token.regex, - .token.atrule { - color: #86c1b9; - } - - .token.placeholder, - .token.variable { - color: #7cafc2; - } - - .token.deleted { - text-decoration: line-through; - } - - .token.inserted { - border-bottom: 1px dotted #f8f8f8; - text-decoration: none; - } - - .token.italic { - font-style: italic; - } - - .token.important, - .token.bold { - font-weight: bold; - } - - .token.important { - color: #ab4642; - } - - .token.entity { - cursor: help; - } - - + div.toolbar { - > .toolbar-item > button { - color: white; - @apply px-1.5 py-1 mr-2; - &:hover { - @apply text-gray-200 ring-2 ring-inset ring-white ring-opacity-5; - } - } - } -} diff --git a/desktop/ui/src/assets/style/common-mixins.scss b/desktop/ui/src/assets/style/common-mixins.scss deleted file mode 100644 index 6b33345ee..000000000 --- a/desktop/ui/src/assets/style/common-mixins.scss +++ /dev/null @@ -1,55 +0,0 @@ -@mixin baseStyle { - body { - user-select: none; - cursor: default; - margin: 0; - padding: 0; - width: 100vw; - overflow: hidden; - font-family: system-ui, sans-serif; - } - - * { - box-sizing: border-box; - } - - button { - -webkit-filter: brightness(100%); - - &:hover { - -webkit-filter: brightness(90%); - -webkit-transition: all 0.3s ease; - } - } -} - -@mixin centerIcon($size: contain) { - @if $size == 'contain' { - background-size: $size; - } @else { - background-size: $size * 1px; - } - background-position: center; - background-repeat: no-repeat; -} - -@mixin noButtons($width: 6px, $color: rgba(0, 0, 0, 0.38), $hoverColor: rgba(0, 0, 0, 0.54)) { - &::-webkit-scrollbar { - width: $width; - } - &::-webkit-scrollbar-button { - width: 0px; - height: 0px; - } - &::-webkit-scrollbar-thumb { - background: $color; - border: 0px none #ffffff; - border-radius: 0px; - } - &::-webkit-scrollbar-thumb:hover { - background: $hoverColor; - } - &::-webkit-scrollbar-corner { - background: transparent; - } -} diff --git a/desktop/ui/src/assets/style/line-numbers.scss b/desktop/ui/src/assets/style/line-numbers.scss deleted file mode 100644 index fcaac1571..000000000 --- a/desktop/ui/src/assets/style/line-numbers.scss +++ /dev/null @@ -1,109 +0,0 @@ -pre[class*='language-'].line-numbers { - position: relative; - padding-left: 3.2em; - counter-reset: linenumber; -} - -pre[class*='language-'].line-numbers > code { - position: relative; - white-space: inherit; -} - -.line-numbers .line-numbers-rows { - position: absolute; - pointer-events: none; - top: -3px; - line-height: 1.667; - left: -3em; - width: 2em; /* works for line-numbers below 1000 lines */ - letter-spacing: -1px; - border-right: 1px solid #666; - - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -.line-numbers-rows > span { - display: block; - counter-increment: linenumber; -} - -.line-numbers-rows > span:before { - content: counter(linenumber); - color: #999; - display: block; - padding-right: 0.8em; - text-align: right; -} -pre[data-line] { - position: relative; - padding: 1em 0 1em 3em; -} - -.line-highlight { - position: absolute; - left: 0; - right: 0; - padding: 0; - margin-top: 0.75em; - - background: hsla(24, 20%, 50%, 0.58); - background: linear-gradient(to right, hsla(24, 20%, 85%, 0.1) 70%, hsla(24, 20%, 50%, 0)); - - pointer-events: none; - - line-height: inherit; - white-space: pre; -} - -@media print { - .line-highlight { - /* - * This will prevent browsers from replacing the background color with white. - * It's necessary because the element is layered on top of the displayed code. - */ - -webkit-print-color-adjust: exact; - print-color-adjust: exact; - } -} - -.line-highlight:before, -.line-highlight[data-end]:after { - content: attr(data-start); - position: absolute; - top: 0.4em; - left: 0.6em; - min-width: 1em; - padding: 0 0.5em; - background-color: hsla(24, 20%, 50%, 0.4); - color: hsl(24, 20%, 95%); - font: bold 65%/1.5 sans-serif; - text-align: center; - vertical-align: 0.3em; - border-radius: 999px; - text-shadow: none; - box-shadow: 0 1px white; -} - -.line-highlight[data-end]:after { - content: attr(data-end); - top: auto; - bottom: 0.4em; -} - -.line-numbers .line-highlight:before, -.line-numbers .line-highlight:after { - content: none; -} - -pre[id].linkable-line-numbers span.line-numbers-rows { - pointer-events: all; -} -pre[id].linkable-line-numbers span.line-numbers-rows > span:before { - cursor: pointer; -} -pre[id].linkable-line-numbers span.line-numbers-rows > span:hover:before { - background-color: rgba(128, 128, 128, 0.2); -} diff --git a/desktop/ui/src/assets/style/overlay-mixins.scss b/desktop/ui/src/assets/style/overlay-mixins.scss deleted file mode 100644 index 0f77f53ff..000000000 --- a/desktop/ui/src/assets/style/overlay-mixins.scss +++ /dev/null @@ -1,49 +0,0 @@ -@import 'common-mixins'; - -$DIALOG_TRANSITION: 0.2s opacity; -$DIALOG_BOX_SHADOW: - 0 12px 16px rgba(0, 0, 0, 0.12), - 0 8px 10px rgba(0, 0, 0, 0.16); -$DIALOG_BORDER_RADIUS: 4px; - -@mixin overlayBaseStyle() { - @include baseStyle(); -} - -@mixin overlayStyle() { - margin: 3px 16px 16px; - box-shadow: $DIALOG_BOX_SHADOW; - border-radius: $DIALOG_BORDER_RADIUS; - transition: $DIALOG_TRANSITION; - position: relative; - background-color: var(--dropdownBackgroundColor); - -webkit-app-region: no-drag; - - ul { - max-height: calc(100vh - 28px); - list-style: none; - margin-left: 0; - overflow-y: auto; - padding: 0; - li { - cursor: pointer; - &:hover { - background-color: var(--menuItemHoverBackgroundColor); - } - margin: 0; - padding: 5px 5px 5px 10px; - &.active { - font-weight: bold; - } - } - } - @keyframes fadeIn { - 0% { - opacity: 0; - } - 100% { - opacity: 1; - } - } - animation: 0.15s ease-out 0s 1 fadeIn; -} diff --git a/desktop/ui/src/assets/style/resets.scss b/desktop/ui/src/assets/style/resets.scss deleted file mode 100644 index f2b1cca51..000000000 --- a/desktop/ui/src/assets/style/resets.scss +++ /dev/null @@ -1,23 +0,0 @@ -@mixin reset-ol { - list-style-type: none; - list-style-position: outside; - text-indent: 0; - padding-left: 0; - margin: 0; - line-height: inherit; - & > li { - margin: 0; - } -} - -@mixin reset-ul { - list-style-type: none; - list-style-position: outside; - text-indent: 0; - padding-left: 0; - margin: 0; - line-height: inherit; - & > li { - margin: 0; - } -} diff --git a/desktop/ui/src/components/Json.vue b/desktop/ui/src/components/Json.vue deleted file mode 100644 index a21c030a4..000000000 --- a/desktop/ui/src/components/Json.vue +++ /dev/null @@ -1,125 +0,0 @@ - - - - - diff --git a/desktop/ui/src/pages/desktop/components/DatastoreCard.vue b/desktop/ui/src/pages/desktop/components/DatastoreCard.vue deleted file mode 100644 index 4a0f40455..000000000 --- a/desktop/ui/src/pages/desktop/components/DatastoreCard.vue +++ /dev/null @@ -1,138 +0,0 @@ - - - diff --git a/desktop/ui/src/pages/desktop/components/Modal.vue b/desktop/ui/src/pages/desktop/components/Modal.vue deleted file mode 100644 index a7bb26c12..000000000 --- a/desktop/ui/src/pages/desktop/components/Modal.vue +++ /dev/null @@ -1,99 +0,0 @@ - - - diff --git a/desktop/ui/src/pages/desktop/components/Prism.vue b/desktop/ui/src/pages/desktop/components/Prism.vue deleted file mode 100644 index 1a249a79f..000000000 --- a/desktop/ui/src/pages/desktop/components/Prism.vue +++ /dev/null @@ -1,82 +0,0 @@ - - - diff --git a/desktop/ui/src/pages/desktop/index.css b/desktop/ui/src/pages/desktop/index.css deleted file mode 100644 index b5c61c956..000000000 --- a/desktop/ui/src/pages/desktop/index.css +++ /dev/null @@ -1,3 +0,0 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; diff --git a/desktop/ui/src/pages/desktop/index.ts b/desktop/ui/src/pages/desktop/index.ts deleted file mode 100644 index 6e89a9aeb..000000000 --- a/desktop/ui/src/pages/desktop/index.ts +++ /dev/null @@ -1,163 +0,0 @@ -import IArgonFile from '@ulixee/platform-specification/types/IArgonFile'; -import { createPinia } from 'pinia'; -import { createApp } from 'vue'; -import * as VueRouter from 'vue-router'; -import { Client } from '@/api/Client'; -import AccountDetails from '@/pages/desktop/views/accounts/AccountDetails.vue'; -import AccountTransactions from '@/pages/desktop/views/accounts/Transactions.vue'; -import AccountOverview from '@/pages/desktop/views/accounts/Overview.vue'; -import App from './index.vue'; -import CloudDetails from './views/cloud-details/CloudDetails.vue'; -import CloudConfigure from './views/cloud-details/Configure.vue'; -import CloudConnections from './views/cloud-details/Connections.vue'; -import CloudDatastores from './views/cloud-details/Datastores.vue'; -import Clouds from './views/Clouds.vue'; -import DatastoreDetails from './views/datastore-details/DatastoreDetails.vue'; -import Entities from './views/datastore-details/Entities.vue'; -import Overview from './views/datastore-details/Overview.vue'; -import Queries from './views/datastore-details/Queries.vue'; -import Reliability from './views/datastore-details/Reliability.vue'; -import Versions from './views/datastore-details/Versions.vue'; -import Datastores from './views/Datastores.vue'; -import GettingStartedChromeAlive from './views/getting-started/ChromeAlive.vue'; -import GettingStartedClone from './views/getting-started/Clone.vue'; -import GettingStartedCredit from './views/getting-started/Credit.vue'; -import GettingStartedDatastore from './views/getting-started/Datastore.vue'; -import GettingStartedDeploy from './views/getting-started/Deploy.vue'; -import GettingStartedHero from './views/getting-started/Hero.vue'; -import GettingStartedPayment from './views/getting-started/Payment.vue'; -import GettingStartedQuery from './views/getting-started/Query.vue'; -import GettingStarted from './views/GettingStarted.vue'; -import Replays from './views/Replays.vue'; -import Wallet from './views/Wallet.vue'; -import './index.css'; - -declare global { - interface Window { - desktopPrivateApiHost: string; - desktopApi: Client<'internal'>; - openedArgonFile: IArgonFile; - appBridge: { - send(api: string, args: any): Promise; - getPrivateApiHost(): string; - }; - load(url: string): void; - } -} - -window.load = function load(host: string) { - const pinia = createPinia(); - const app = createApp(App); - window.desktopApi = new Client(host); - window.desktopApi.connect().catch(console.error); - window.desktopApi.on('Argon.opened', data => { - window.openedArgonFile = data; - }); - - const router = VueRouter.createRouter({ - history: VueRouter.createWebHashHistory(), - routes: [ - { - path: '/getting-started', - component: GettingStarted, - alias: '/', - children: [ - { path: 'hero', alias: '', component: GettingStartedHero }, - { path: 'chromealive', component: GettingStartedChromeAlive }, - { path: 'deploy', component: GettingStartedDeploy }, - { path: 'payment', component: GettingStartedPayment }, - { path: 'query', component: GettingStartedQuery }, - { path: 'credit', component: GettingStartedCredit }, - { path: 'datastore', component: GettingStartedDatastore }, - { path: 'clone', component: GettingStartedClone }, - ], - }, - { path: '/datastores', component: Datastores }, - { - path: '/datastore/:datastoreId@v:version', - component: DatastoreDetails, - children: [ - { - path: 'overview', - alias: '', - name: 'Overview', - component: Overview, - }, - { - path: 'queries', - name: 'Queries', - component: Queries, - }, - { - path: 'entities', - name: 'Entities', - component: Entities, - }, - { - path: 'reliability', - name: 'Reliability', - component: Reliability, - }, - { - path: 'versions', - name: 'Versions', - component: Versions, - }, - ], - }, - { path: '/replays', component: Replays }, - { path: '/clouds', component: Clouds }, - { - path: '/cloud/:name', - component: CloudDetails, - children: [ - { - path: 'datastores', - alias: '', - name: 'Datastores', - component: CloudDatastores, - }, - { - path: 'connections', - name: 'Connections', - component: CloudConnections, - }, - { - path: 'configure', - name: 'Configure', - component: CloudConfigure, - }, - ], - }, - { path: '/wallet', component: Wallet }, - { - path: '/wallet/:address', - component: AccountDetails, - children: [ - { - path: 'overview', - alias: '', - name: 'Account Overview', - component: AccountOverview, - }, - { - path: 'transactions', - name: 'Transactions', - component: AccountTransactions, - }, - ], - }, - ], - }); - app.use(pinia); - app.use(router); - app.directive('focus', { - mounted(el) { - el.focus(); - }, - }); - - app.mount('#app'); -}; - -window.load(window.appBridge.getPrivateApiHost()); diff --git a/desktop/ui/src/pages/desktop/index.vue b/desktop/ui/src/pages/desktop/index.vue deleted file mode 100644 index 90594e3b0..000000000 --- a/desktop/ui/src/pages/desktop/index.vue +++ /dev/null @@ -1,60 +0,0 @@ - - - - - diff --git a/desktop/ui/src/pages/desktop/lib/utils.ts b/desktop/ui/src/pages/desktop/lib/utils.ts deleted file mode 100644 index 153ba0c91..000000000 --- a/desktop/ui/src/pages/desktop/lib/utils.ts +++ /dev/null @@ -1,43 +0,0 @@ -import ArgonUtils from '@ulixee/platform-utils/lib/ArgonUtils'; -import { isRef, unref } from 'vue'; - -export function toArgons(amount: number | bigint, isMicrogons = false): string { - if (amount === null || amount === undefined) return `${ArgonUtils.ArgonSymbol}0`; - return ArgonUtils.format(amount, isMicrogons ? 'microgons' : 'milligons', 'argons'); -} - -export function titleCase(text: string): string { - if (!text) return text; - return text.charAt(0).toUpperCase() + text.slice(1); -} - -export function formatDate(date: Date | number): string { - if (!date) return 'now'; - if (typeof date === 'number') date = new Date(date); - return date.toLocaleString(undefined, { - month: 'short', - day: 'numeric', - hour: 'numeric', - minute: 'numeric', - }); -} - -export function deepUnref(obj: T): T { - if (isRef(obj)) { - return deepUnref(unref(obj)) as T; - } - if (Array.isArray(obj)) { - return obj.map(deepUnref) as T; - } - if (obj instanceof Uint8Array) { - return Uint8Array.from(obj) as T; - } - if (obj && typeof obj === 'object') { - const result = {}; - for (const [key, value] of Object.entries(obj)) { - result[key] = deepUnref(value); - } - return result as T; - } - return obj; -} diff --git a/desktop/ui/src/pages/desktop/stores/CloudsStore.ts b/desktop/ui/src/pages/desktop/stores/CloudsStore.ts deleted file mode 100644 index 1ab5e4374..000000000 --- a/desktop/ui/src/pages/desktop/stores/CloudsStore.ts +++ /dev/null @@ -1,131 +0,0 @@ -import { defineStore } from 'pinia'; -import { ref } from 'vue'; -import { ICloudConnected } from '@ulixee/desktop-interfaces/apis/IDesktopApis'; -import { Client } from '@/api/Client'; -import ICloudConnection from '@/api/ICloudConnection'; -import { useDatastoreStore } from '@/pages/desktop/stores/DatastoresStore'; -import { useReplaysStore } from '@/pages/desktop/stores/ReplaysStore'; - -export const useCloudsStore = defineStore('cloudsStore', () => { - const clouds = ref([ - { name: 'public', type: 'public', nodes: 0, datastores: 0, clientsByAddress: new Map() }, - { name: 'local', type: 'local', nodes: 0, datastores: 0, clientsByAddress: new Map() }, - ]); - - function getCloudName(name: string): string { - if (name === 'public') return 'Public Cloud'; - if (name === 'local') return 'Local Development Cloud'; - return name; - } - - function getPublicCloudUrl(): string { - return 'ulx://cloud.ulixee.org'; - } - - function connectedToHost(host: string): boolean { - for (const cloud of clouds.value) { - for (const address of cloud.clientsByAddress.keys()) { - if (address.includes(host)) return true; - } - } - } - - function getCloudWithAddress(cloudAddress: string): string { - for (const cloud of clouds.value) { - if (cloud.clientsByAddress.has(cloudAddress)) return cloud.name; - for (const address of cloud.clientsByAddress.keys()) { - if (address.includes(cloudAddress)) return cloud.name; - } - } - } - - function getAdmin(name: string): string { - return clouds.value.find(x => x.name === name)?.adminIdentity; - } - - function getCloudHost(cloudName: string): string { - return clouds.value - .find(x => x.name === cloudName) - .clientsByAddress.keys() - .next().value; - } - - function getCloudClient(cloudName: string): Client<'desktop'> { - return clouds.value - .find(x => x.name === cloudName) - .clientsByAddress.values() - .next().value; - } - - async function attachIdentity(cloud: ICloudConnection) { - const identity = await window.desktopApi.send('Cloud.findAdminIdentity', cloud.name); - if (identity) cloud.adminIdentity = identity; - } - - async function connectToCloud(address: string, name: string): Promise { - await window.desktopApi.send('Desktop.connectToPrivateCloud', { - address, - name, - }); - } - - window.desktopApi.on('Cloud.onConnected', data => { - onConnection(data).catch(console.error); - }); - - async function load() { - const list = await window.desktopApi.send('Desktop.getCloudConnections'); - for (const cloud of list) await onConnection(cloud); - } - - async function onConnection(event: ICloudConnected): Promise { - const { name, address, oldAddress, type, cloudNodes } = event; - - let cloud = clouds.value.find(x => x.name === name); - if (!cloud) { - cloud = { name, type, datastores: 0, nodes: 0, clientsByAddress: new Map() }; - clouds.value.push(cloud); - clouds.value.sort((a, b) => { - if (a.type === b.type) return a.name.localeCompare(b.name); - if (a.type === 'public') return -1; - if (b.type === 'public') return 1; - if (a.type === 'local') return 1; - if (b.type === 'local') return -1; - return 0; - }); - } - if (event.oldAddress) { - cloud.clientsByAddress.get(oldAddress)?.close(); - cloud.clientsByAddress.delete(oldAddress); - } - cloud.nodes = cloudNodes ?? 0; - cloud.adminIdentity = event.adminIdentity; - const client = new Client<'desktop'>(); - client.autoReconnect = false; - client.address = address; - cloud.clientsByAddress.set(address, client); - await client.connect(); - await useReplaysStore().onClient(cloud as ICloudConnection, client); - await useDatastoreStore().onClient(cloud as ICloudConnection, client); - } - void load(); - - return { - clouds, - getCloudName, - getCloudClient, - getCloudWithAddress, - attachIdentity, - connectToCloud, - connectedToHost, - getCloudHost, - load, - getPublicCloudUrl, - getAdmin, - disconnect() { - for (const cloud of clouds.value) { - for (const connection of cloud.clientsByAddress.values()) connection.close(); - } - }, - }; -}); diff --git a/desktop/ui/src/pages/desktop/stores/DatastoresStore.ts b/desktop/ui/src/pages/desktop/stores/DatastoresStore.ts deleted file mode 100644 index 1e6227bfa..000000000 --- a/desktop/ui/src/pages/desktop/stores/DatastoresStore.ts +++ /dev/null @@ -1,406 +0,0 @@ -import { defineStore, storeToRefs } from 'pinia'; -import { computed, Ref, ref } from 'vue'; -import type IDatastoreDeployLogEntry from '@ulixee/datastore-core/interfaces/IDatastoreDeployLogEntry'; -import type IQueryLogEntry from '@ulixee/datastore/interfaces/IQueryLogEntry'; -import { IDatastoreApiTypes } from '@ulixee/platform-specification/datastore'; -import type IArgonFile from '@ulixee/platform-specification/types/IArgonFile'; -import { Client } from '@/api/Client'; -import ICloudConnection from '@/api/ICloudConnection'; -import { useCloudsStore } from '@/pages/desktop/stores/CloudsStore'; -import { useWalletStore } from '@/pages/desktop/stores/WalletStore'; - -export type IDatastoreSummary = IDatastoreApiTypes['Datastores.list']['result']['datastores'][0]; -export type IDatastoreMeta = IDatastoreApiTypes['Datastore.meta']['result'] & { - examplesByEntityName: { [name: string]: { formatted: string; args: Record } }; -}; -export type IDatastoreVersions = IDatastoreApiTypes['Datastore.versions']['result']['versions']; -export type TCredit = IArgonFile['credit']; - -export type IDatastoresById = { - [datastoreId: string]: { - summary: IDatastoreSummary & { cloudName: string }; // aggregated stats - details: IDatastoreMeta; - createdCredits: { credit: TCredit; name: string; cloud: string }[]; - adminIdentity: string; - versions?: IDatastoreVersions; - cloudsByVersion: { - [version: string]: string[]; - }; - isInstalled: boolean; - }; -}; - -export const useDatastoreStore = defineStore('datastoreStore', () => { - const cloudsStore = useCloudsStore(); - const { clouds } = storeToRefs(cloudsStore); - - const installedDatastoreVersions = new Set(); - const datastoreAdminIdentities = ref<{ [datastoreId: string]: string }>({}); - const userQueriesByDatastore = ref<{ - [datastoreId: string]: { [queryId: string]: IQueryLogEntry }; - }>({}); - - const datastoresById = ref({}); - - function onDeployed(event: IDatastoreDeployLogEntry) { - const { datastoreId, version, cloudHost, adminIdentity } = event; - const entry = datastoresById.value[datastoreId]; - const cloud = cloudsStore.getCloudWithAddress(cloudHost); - void refreshMetadata(datastoreId, version, cloud).then(() => { - // eslint-disable-next-line promise/always-return - datastoresById.value[datastoreId].adminIdentity ??= adminIdentity; - }); - if (entry) { - entry.adminIdentity ??= adminIdentity; - } - } - - window.desktopApi.on('Datastore.onDeployed', data => { - onDeployed(data); - }); - window.desktopApi.on('User.onQuery', query => { - userQueriesByDatastore.value[query.datastoreId] ??= {}; - userQueriesByDatastore.value[query.datastoreId][query.queryId] = query; - }); - - function get(datastoreId: string): IDatastoreSummary { - return datastoresById.value[datastoreId]?.summary; - } - - function getHostedClouds(summary: IDatastoreSummary): string[] { - return datastoresById.value[summary.id]?.cloudsByVersion[summary.version] ?? []; - } - - function getCloud(id: string, version: string): string { - const versionClouds = datastoresById.value[id]?.cloudsByVersion[version] ?? []; - if (versionClouds.length > 1) return versionClouds.find(x => x !== 'local'); - return versionClouds[0]; - } - - function refreshMetadata(id: string, version: string, cloudName = 'local'): Promise { - const cloud = clouds.value.find(x => x.name === cloudName); - const client = cloud.clientsByAddress.values().next().value; - return client.send('Datastore.meta', { id, version, includeSchemasAsJson: true }).then(x => { - const value = x as IDatastoreMeta; - value.examplesByEntityName ??= {}; - return onDatastoreMeta(value, cloud as ICloudConnection); - }); - } - - function getStats( - id: string, - version: string, - cloudName = 'local', - ): Promise { - const cloud = clouds.value.find(x => x.name === cloudName); - const client = cloud.clientsByAddress.values().next().value; - return client.send('Datastore.stats', { id }); - } - - async function getVersions( - id: string, - cloudName = 'local', - refresh = false, - ): Promise<{ version: string; timestamp: number }[]> { - const cloud = clouds.value.find(x => x.name === cloudName); - const client = cloud.clientsByAddress.values().next().value; - if (!client) return []; - const entry = datastoresById.value[id]; - if (!entry.versions || refresh) { - const versions = await client.send('Datastore.versions', { id }); - entry.versions = versions.versions; - } - return entry.versions as any; - } - - function findAdminIdentity(datastoreId: string) { - void window.desktopApi - .send('Datastore.findAdminIdentity', datastoreId) - .then(x => (datastoresById.value[datastoreId].adminIdentity = x)); - } - - function getCloudAddress(id: string, version: string, cloudName: string): URL { - const cloudHost = cloudsStore.getCloudHost(cloudName); - const cloudAddress = new URL(`/${id}@v${version}`, cloudHost); - cloudAddress.protocol = 'ulx:'; - return cloudAddress; - } - - async function runQuery(id: string, version: string, query: string): Promise { - const datastore = datastoresById.value[id]; - const cloudName = datastore.cloudsByVersion[version][0]; - const cloudHost = cloudsStore.getCloudHost(cloudName); - - const queryStart = await window.desktopApi.send('Datastore.query', { - id, - version, - cloudHost, - query, - }); - userQueriesByDatastore.value[id] ??= {}; - userQueriesByDatastore.value[id][queryStart.queryId] = queryStart; - } - - function openDocs(id: string, version: string, cloudName: string) { - const cloudHost = cloudsStore.getCloudHost(cloudName); - const docsUrl = new URL(`/${id}@v${version}/`, cloudHost); - docsUrl.protocol = 'http:'; - - const credits = useWalletStore().wallet.credits.filter( - x => x.datastoreId === id && x.datastoreVersion === version, - ); - const credit = credits.find(x => x.remaining > 0) ?? credits[0]; - if (credit) { - docsUrl.search = `?${credit.creditsId}`; - } - - window.open(docsUrl.href, `Docs${version}`); - } - - function getDocsUrl(datastoreUrl: string): string { - const creditUrl = new URL(datastoreUrl.replace('ulx:', 'http:')); - const creditId = creditUrl.username; - const secret = creditUrl.password; - creditUrl.username = ''; - creditUrl.password = ''; - creditUrl.search = `?${creditId}:${secret}`; - creditUrl.pathname = `${creditUrl.pathname}/free-credit`; - return creditUrl.href; - } - - function getAdminDetails(datastoreId: string, cloudName: string): Ref { - const datastore = datastoresById.value[datastoreId]; - - const adminIdentity = computed(() => datastore.adminIdentity); - datastore.adminIdentity ??= getDatastoreAdminIdentity(datastoreId, cloudName); - - return adminIdentity; - } - - async function deploy(id: string, version: string, cloudName: string): Promise { - const cloudHost = cloudsStore.getCloudHost(cloudName); - await window.desktopApi.send('Datastore.deploy', { - id, - version, - cloudName, - cloudHost, - }); - } - - async function installDatastore(id: string, version: string, cloud = 'local'): Promise { - const entry = datastoresById.value[id]; - const cloudHost = cloudsStore.getCloudHost(cloud); - - await window.desktopApi.send('Datastore.install', { - cloudHost, - id, - version, - }); - installedDatastoreVersions.add(`${id}_${version}`); - entry.isInstalled = true; - } - - async function uninstallDatastore(id: string, version: string, cloud = 'local'): Promise { - const entry = datastoresById.value[id]; - const cloudHost = cloudsStore.getCloudHost(cloud); - - await window.desktopApi.send('Datastore.uninstall', { - cloudHost, - id, - version, - }); - installedDatastoreVersions.delete(`${id}_${version}`); - entry.isInstalled = false; - } - - async function installDatastoreByUrl(datastore: IDatastoreSummary, url: string): Promise { - const datastoreUrl = new URL(url); - datastoreUrl.protocol = 'ws:'; - const { id, version } = datastore; - const entry = datastoresById.value[id]; - - await window.desktopApi.send('Datastore.install', { - cloudHost: datastoreUrl.host, - id, - version, - }); - installedDatastoreVersions.add(`${id}_${version}`); - entry.isInstalled = true; - } - - async function getByUrl(url: string): Promise { - if (!url.includes('://')) url = `ws://${url}`; - const datastoreUrl = new URL(url); - datastoreUrl.protocol = 'ws:'; - const [datastoreId] = datastoreUrl.pathname.slice(1).split('@v'); - - if (datastoresById.value[datastoreId]?.summary) - return datastoresById.value[datastoreId].summary; - - await cloudsStore.connectToCloud(datastoreUrl.host, `${datastoreUrl.host}`); - console.log(datastoreUrl.pathname, datastoreId); - - const endDate = Date.now() + 5e3; - while (Date.now() < endDate) { - const datastore = datastoresById.value[datastoreId]?.summary; - if (datastore) return datastore; - await new Promise(requestAnimationFrame); - } - } - - async function onClient(cloud: ICloudConnection, client: Client<'desktop'>): Promise { - client.removeEventListeners('Datastore.new'); - client.on('Datastore.new', x => onDatastoreMeta(x.datastore, cloud)); - client.removeEventListeners('Datastore.stats'); - client.on('Datastore.stats', x => updateStats(x.id, x.version, cloud.name, x.stats)); - client.removeEventListeners('Datastore.stopped'); - client.on('Datastore.stopped', x => onDatastoreStopped(x.id)); - - const results = await client.send('Datastores.list', {}); - if (!results) return; - const { datastores, total } = results; - for (const datastore of datastores) { - onDatastoreSummary(datastore, cloud); - } - cloud.datastores = total; - } - - function onDatastoreStopped(id: string) { - if (datastoresById.value[id]?.summary) { - datastoresById.value[id].summary.isStarted = false; - } - if (datastoresById.value[id]?.details) { - datastoresById.value[id].details.isStarted = false; - } - } - - function onDatastoreMeta(meta: IDatastoreMeta, cloud: ICloudConnection) { - onDatastoreSummary(meta, cloud); - datastoresById.value[meta.id].details = meta; - updateStats(meta.id, meta.version, cloud.name, meta.stats); - let totalByCloud = 0; - for (const entry of Object.values(datastoresById.value)) { - if (entry.cloudsByVersion[meta.version]?.includes(cloud.name)) totalByCloud += 1; - } - if (totalByCloud > cloud.datastores) cloud.datastores = totalByCloud; - } - - function updateStats( - id: string, - version: string, - cloudName: string, - stats: IDatastoreMeta['stats'], - ) { - if (datastoresById.value[id]) { - datastoresById.value[id].summary.stats = stats; - } - } - - async function createCredit(datastore: IDatastoreSummary, argons: number, cloud: string) { - const data = { - argons, - datastore: { - id: datastore.id, - version: datastore.version, - name: datastore.name, - scriptEntrypoint: datastore.scriptEntrypoint, - }, - cloud, - }; - const { - rawJson, - file: { credit }, - name, - } = await window.desktopApi.send('Credit.create', data); - datastoresById.value[datastore.id].createdCredits.push({ - credit, - name, - cloud, - }); - void refreshMetadata(datastore.id, datastore.version, cloud); - return { name, credit, rawJson }; - } - - function getDatastoreAdminIdentity(datastoreId: string, cloudName: string) { - return ( - datastoreAdminIdentities.value[datastoreId] ?? - clouds.value.find(x => x.name === cloudName)?.adminIdentity - ); - } - - function onDatastoreSummary(datastore: IDatastoreSummary, cloud: ICloudConnection) { - const datastoreId = datastore.id; - const cloudName = cloud.name; - datastoresById.value[datastoreId] ??= { - details: null, - summary: { ...datastore, cloudName }, - cloudsByVersion: {}, - versions: [], - createdCredits: [], - isInstalled: false, - adminIdentity: null, - }; - userQueriesByDatastore.value[datastoreId] ??= {}; - - const entry = datastoresById.value[datastoreId]; - entry.adminIdentity ??= getDatastoreAdminIdentity(datastoreId, cloudName); - entry.cloudsByVersion[datastore.version] ??= []; - if (!entry.cloudsByVersion[datastore.version].includes(cloud.name)) - entry.cloudsByVersion[datastore.version].push(cloud.name); - entry.isInstalled = installedDatastoreVersions.has(`${datastore.id}_${datastore.version}`); - - entry.summary = { ...datastore, cloudName }; - } - - async function load() { - const datastores = await window.desktopApi.send('Datastore.getInstalled'); - for (const { datastoreId, cloudHost, datastoreVersion } of datastores) { - installedDatastoreVersions.add(`${datastoreId}_${datastoreVersion}`); - if (!cloudsStore.connectedToHost(cloudHost) && !cloudHost.includes('localhost:1818')) { - await cloudsStore.connectToCloud(cloudHost, `Installed from ${cloudHost}`); - } - } - - const adminIdentities = await window.desktopApi.send('Desktop.getAdminIdentities'); - datastoreAdminIdentities.value = adminIdentities.datastoresById; - - const userQueries = await window.desktopApi.send('User.getQueries'); - for (const query of userQueries) { - userQueriesByDatastore.value[query.datastoreId] ??= {}; - userQueriesByDatastore.value[query.datastoreId][query.queryId] = query; - } - } - - void load(); - - return { - datastoresById, - userQueriesByDatastore, - getAdminDetails, - getByUrl, - getHostedClouds, - getCloud, - createCredit, - deploy, - getCloudAddress, - getDocsUrl, - runQuery, - getVersions, - get, - getStats, - installDatastore, - installDatastoreByUrl, - uninstallDatastore, - onClient, - load, - refreshMetadata, - findAdminIdentity, - openDocs, - async refresh() { - for (const cloud of clouds.value) { - const client = cloud.clientsByAddress.values().next().value as any; - if (client) await onClient(cloud as ICloudConnection, client); - } - }, - }; -}); diff --git a/desktop/ui/src/pages/desktop/stores/GettingStartedStore.ts b/desktop/ui/src/pages/desktop/stores/GettingStartedStore.ts deleted file mode 100644 index 84f0c6425..000000000 --- a/desktop/ui/src/pages/desktop/stores/GettingStartedStore.ts +++ /dev/null @@ -1,212 +0,0 @@ -import { defineStore, storeToRefs } from 'pinia'; -import { computed, ref, watch } from 'vue'; -import { useRouter } from 'vue-router'; -import { useReplaysStore } from '@/pages/desktop/stores/ReplaysStore'; -import { useDatastoreStore } from '@/pages/desktop/stores/DatastoresStore'; - -export const useGettingStartedStore = defineStore('gettingStartedStore', () => { - const completedSteps = ref(new Set()); - - const steps = ref<{ name: string; description: string; href: string; isComplete: boolean }[]>([ - { - name: 'Create a Hero Script', - description: 'Hero is a dead simple way to automate the web.', - href: 'hero', - }, - { - name: 'Debug your Hero script with ChromeAlive', - description: "See how easy we've made it to troubleshoot scraping bugs.", - href: 'chromealive', - }, - { - name: 'Convert your Hero script to a Datastore', - description: 'Datastores add structure and sql querying to your Hero scripts.', - href: 'datastore', - }, - { - name: 'Query your Datastore with SQL', - description: 'Datastores let you query them with the SQL you already know!', - href: 'query', - }, - { - name: 'Add payment to your Datastore', - description: 'Datastores support payment out of the box.', - href: 'payment', - }, - { - name: 'Deploy your Datastore', - description: 'You can deploy in one step to our public cloud, or to your own server.', - href: 'deploy', - }, - { - name: 'Create a Shareable Credit', - description: 'Create a credit - you can send it to a friend or test yourself.', - href: 'credit', - }, - { - name: 'Clone a Datastore', - description: 'Datastores can be cloned and extended without exposing the code.', - href: 'clone', - }, - ] as any); - - for (const step of steps.value) { - (step as any).isComplete = computed(() => completedSteps.value.has(step.href)); - } - - const router = useRouter(); - function gotoNextIncompleteStep() { - let nextStep = 0; - for (let i = 0; i < steps.value.length; i += 1) { - if (completedSteps.value.has(steps.value[i].href)) { - nextStep += 1; - } - } - void router.push(`/getting-started/${steps.value[nextStep].href}`); - } - - function markStepComplete(step: string) { - completedSteps.value.add(step); - void window.desktopApi.send('GettingStarted.completeStep', step); - } - - function gotoNextStep(name: string) { - let didMatch = false; - for (const step of steps.value) { - if (didMatch) { - void router.push(`/getting-started/${step.href}`); - return; - } - if (step.href === name) { - didMatch = true; - } - } - } - - const stepCompletion: { [key: string]: (done: () => void) => any } = { - hero(done) { - const ReplaysStore = useReplaysStore(); - const { sessions } = storeToRefs(ReplaysStore); - const hasCreatedSession = watch(sessions.value, value => { - if (value.some(x => x.scriptEntrypoint.includes('ulixee.org.'))) { - hasCreatedSession(); - done(); - } - }); - }, - chromealive(done) { - const ReplaysStore = useReplaysStore(); - - const { lastOpenReplay } = storeToRefs(ReplaysStore); - const stopWatch = watch(lastOpenReplay, value => { - if (value.scriptEntrypoint.includes('ulixee.org.')) { - stopWatch(); - done(); - } - }); - }, - datastore(done) { - const datastoreStore = useDatastoreStore(); - const { datastoresById } = storeToRefs(datastoreStore); - const stopWatch = watch(datastoresById.value, value => { - if (Object.values(value).some(x => x.summary.scriptEntrypoint.includes('ulixee.org.'))) { - stopWatch(); - done(); - } - }); - }, - query(done) { - const datastoreStore = useDatastoreStore(); - const { datastoresById } = storeToRefs(datastoreStore); - const stopWatch = watch(datastoresById.value, value => { - for (const entry of Object.values(value)) { - if ( - entry.summary.scriptEntrypoint.includes('ulixee.org.') && - entry.summary.stats.queries > 0 - ) { - stopWatch(); - done(); - } - } - }); - }, - payment(done) { - const datastoreStore = useDatastoreStore(); - const { datastoresById } = storeToRefs(datastoreStore); - const stopWatch = watch(datastoresById.value, value => { - for (const entry of Object.values(value)) { - if ( - entry.summary.scriptEntrypoint.includes('ulixee.org.') && - entry.details && - Object.values(entry.details.extractorsByName).some(x => x.netBasePrice > 0) - ) { - stopWatch(); - done(); - } - } - }); - }, - deploy(done) { - const datastoreStore = useDatastoreStore(); - const { datastoresById } = storeToRefs(datastoreStore); - const stopWatch = watch(datastoresById.value, value => { - for (const entry of Object.values(value)) { - if ( - entry.summary.scriptEntrypoint.includes('ulixee.org.') && - Object.values(entry.cloudsByVersion).some(x => !x.includes('local')) - ) { - stopWatch(); - done(); - } - } - }); - }, - credit(done) { - const datastoreStore = useDatastoreStore(); - const { datastoresById } = storeToRefs(datastoreStore); - const stopWatch = watch(datastoresById.value, value => { - for (const entry of Object.values(value)) { - if ( - entry.summary.scriptEntrypoint.includes('ulixee.org.') && - entry.createdCredits.length - ) { - stopWatch(); - done(); - } - } - }); - }, - clone(done) { - const datastoreStore = useDatastoreStore(); - const { datastoresById } = storeToRefs(datastoreStore); - const stopWatch = watch(datastoresById.value, value => { - for (const entry of Object.values(value)) { - if ( - entry.summary.name === 'Ulixee Docs v2' && - Object.values(entry.cloudsByVersion).some(x => x.includes('local')) - ) { - stopWatch(); - done(); - } - } - }); - }, - }; - - (async () => { - const userCompletedSteps = await window.desktopApi.send('GettingStarted.getCompletedSteps'); - for (const step of userCompletedSteps) completedSteps.value.add(step); - for (const [key, callback] of Object.entries(stepCompletion)) { - if (!completedSteps.value.has(key)) { - callback(() => markStepComplete(key)); - } - } - gotoNextIncompleteStep(); - })().catch(console.error); - - return { - gotoNextStep, - gotoNextIncompleteStep, - steps, - }; -}); diff --git a/desktop/ui/src/pages/desktop/stores/ReplaysStore.ts b/desktop/ui/src/pages/desktop/stores/ReplaysStore.ts deleted file mode 100644 index 9862b4a8c..000000000 --- a/desktop/ui/src/pages/desktop/stores/ReplaysStore.ts +++ /dev/null @@ -1,80 +0,0 @@ -import { defineStore } from 'pinia'; -import * as Vue from 'vue'; -import { - IHeroSessionsListResult, - IHeroSessionsSearchResult, -} from '@ulixee/desktop-interfaces/apis/IHeroSessionsApi'; -import { Client } from '@/api/Client'; -import ICloudConnection from '@/api/ICloudConnection'; -import { useCloudsStore } from '@/pages/desktop/stores/CloudsStore'; - -export interface ICloudSessionResult extends IHeroSessionsListResult { - cloudAddress: string; - cloudName: string; -} - -export const useReplaysStore = defineStore('replaysStore', () => { - const existingSessionIds = new Set(); - const sessionIdsMatchingSearchToMatches = Vue.ref(new Map()); - const sessions = Vue.ref([]); - - const lastOpenReplay = Vue.ref(null); - - async function onClient(cloud: ICloudConnection, client: Client<'desktop'>): Promise { - if (cloud.type !== 'local') return; - client.removeEventListeners('Sessions.listUpdated'); - client.on('Sessions.listUpdated', x => onSessionList(cloud, client.address, x)); - const list = await client.send('Sessions.list'); - onSessionList(cloud, client.address, list); - } - - function onSessionList( - cloud: ICloudConnection, - cloudAddress: string, - list: IHeroSessionsListResult[], - ): void { - for (const result of list) { - if (existingSessionIds.has(result.heroSessionId)) { - const existing = sessions.value.find(x => x.heroSessionId === result.heroSessionId); - Object.assign(existing, result); - } else { - existingSessionIds.add(result.heroSessionId); - sessions.value.push({ ...result, cloudAddress, cloudName: cloud.name }); - } - } - sessions.value.sort((a, b) => { - return b.startTime.getTime() - a.startTime.getTime(); - }); - } - - async function search(query: string, selectedCloud: string) { - const { clouds } = useCloudsStore(); - for (const cloud of clouds) { - if (cloud.name !== selectedCloud) continue; - for (const client of cloud.clientsByAddress.values()) { - const searchResults = await client.send('Sessions.search', query); - for (const result of searchResults) { - sessionIdsMatchingSearchToMatches.value.set(result.heroSessionId, result); - } - } - } - } - - function openReplay(session: IHeroSessionsListResult & { cloudAddress: string }): void { - lastOpenReplay.value = session; - void window.desktopApi.send('Session.openReplay', { - heroSessionId: session.heroSessionId, - cloudAddress: session.cloudAddress, - dbPath: session.dbPath, - }); - } - - return { - sessionIdsMatchingSearchToMatches, - sessions, - lastOpenReplay, - openReplay, - search, - onClient, - }; -}); diff --git a/desktop/ui/src/pages/desktop/stores/WalletStore.ts b/desktop/ui/src/pages/desktop/stores/WalletStore.ts deleted file mode 100644 index 855a9ce0c..000000000 --- a/desktop/ui/src/pages/desktop/stores/WalletStore.ts +++ /dev/null @@ -1,102 +0,0 @@ -import type { IWallet } from '@ulixee/datastore/interfaces/IPaymentService'; -import IArgonFile from '@ulixee/platform-specification/types/IArgonFile'; -import { defineStore } from 'pinia'; -import { ref } from 'vue'; -import { deepUnref } from '@/pages/desktop/lib/utils'; - -export { IWallet }; - -export const useWalletStore = defineStore('walletStore', () => { - const wallet = ref({ - accounts: [], - credits: [], - brokerAccounts: [], - formattedBalance: '0', - } as IWallet); - - window.desktopApi.on('Wallet.updated', data => { - wallet.value = data.wallet; - }); - - async function load() { - wallet.value = await window.desktopApi.send('User.getWallet'); - } - void load(); - - async function createAccount(name: string, suri?: string, password?: string) { - const account = await window.desktopApi.send('User.createAccount', { name, suri, password }); - wallet.value.accounts.push(account); - return account; - } - - async function addBrokerAccount(host: string, userIdentity: string, name?: string) { - const account = await window.desktopApi.send('User.addBrokerAccount', { - name, - host, - userIdentity, - }); - wallet.value.brokerAccounts.push(account); - return account; - } - - async function transferFromMainchain(milligons: bigint, address?: string) { - await window.desktopApi.send('Argon.transferFromMainchain', { milligons, address }); - await load(); - } - - async function transferToMainchain(milligons: bigint, address?: string) { - await window.desktopApi.send('Argon.transferToMainchain', { milligons, address }); - await load(); - } - - async function saveCredits(credit: IArgonFile['credit']) { - await window.desktopApi.send('Credit.save', { credit }); - await load(); - } - - async function saveSentArgons(argonFile: IArgonFile) { - await window.desktopApi.send('Argon.importSend', { argonFile: deepUnref(argonFile) }); - await load(); - } - - async function approveRequestedArgons(argonFile: IArgonFile, fundWithAddress: string) { - await window.desktopApi.send('Argon.acceptRequest', { - argonFile: deepUnref(argonFile), - fundWithAddress, - }); - await load(); - } - - async function createSendArgonsFile(milligons: bigint, toAddress?: string, fromAddress?: string) { - const argons = await window.desktopApi.send('Argon.send', { - milligons, - toAddress, - fromAddress, - }); - await load(); - return argons; - } - - async function createRequestArgonsFile(milligons: bigint, sendToMyAddress?: string) { - const argons = await window.desktopApi.send('Argon.request', { - milligons, - sendToMyAddress, - }); - await load(); - return argons; - } - - return { - load, - saveCredits, - approveRequestedArgons, - saveSentArgons, - createSendArgonsFile, - createRequestArgonsFile, - createAccount, - addBrokerAccount, - transferFromMainchain, - transferToMainchain, - wallet, - }; -}); diff --git a/desktop/ui/src/pages/desktop/views/CloudAddModal.vue b/desktop/ui/src/pages/desktop/views/CloudAddModal.vue deleted file mode 100644 index 04a04b46f..000000000 --- a/desktop/ui/src/pages/desktop/views/CloudAddModal.vue +++ /dev/null @@ -1,211 +0,0 @@ - - - diff --git a/desktop/ui/src/pages/desktop/views/Clouds.vue b/desktop/ui/src/pages/desktop/views/Clouds.vue deleted file mode 100644 index 0a82d8a69..000000000 --- a/desktop/ui/src/pages/desktop/views/Clouds.vue +++ /dev/null @@ -1,111 +0,0 @@ - - - diff --git a/desktop/ui/src/pages/desktop/views/Datastores.vue b/desktop/ui/src/pages/desktop/views/Datastores.vue deleted file mode 100644 index 872ed7605..000000000 --- a/desktop/ui/src/pages/desktop/views/Datastores.vue +++ /dev/null @@ -1,176 +0,0 @@ -[ - - - - - diff --git a/desktop/ui/src/pages/desktop/views/DropModal.vue b/desktop/ui/src/pages/desktop/views/DropModal.vue deleted file mode 100644 index b8111a091..000000000 --- a/desktop/ui/src/pages/desktop/views/DropModal.vue +++ /dev/null @@ -1,39 +0,0 @@ - - - diff --git a/desktop/ui/src/pages/desktop/views/GettingStarted.vue b/desktop/ui/src/pages/desktop/views/GettingStarted.vue deleted file mode 100644 index 03f08498a..000000000 --- a/desktop/ui/src/pages/desktop/views/GettingStarted.vue +++ /dev/null @@ -1,117 +0,0 @@ - - - diff --git a/desktop/ui/src/pages/desktop/views/Overview.vue b/desktop/ui/src/pages/desktop/views/Overview.vue deleted file mode 100644 index 617ec97da..000000000 --- a/desktop/ui/src/pages/desktop/views/Overview.vue +++ /dev/null @@ -1,54 +0,0 @@ - - - - - diff --git a/desktop/ui/src/pages/desktop/views/ReceiveArgonsModal.vue b/desktop/ui/src/pages/desktop/views/ReceiveArgonsModal.vue deleted file mode 100644 index c9fab8c58..000000000 --- a/desktop/ui/src/pages/desktop/views/ReceiveArgonsModal.vue +++ /dev/null @@ -1,427 +0,0 @@ - - - diff --git a/desktop/ui/src/pages/desktop/views/Replays.vue b/desktop/ui/src/pages/desktop/views/Replays.vue deleted file mode 100644 index c7520fd6b..000000000 --- a/desktop/ui/src/pages/desktop/views/Replays.vue +++ /dev/null @@ -1,303 +0,0 @@ - - - - - diff --git a/desktop/ui/src/pages/desktop/views/Sidebar.vue b/desktop/ui/src/pages/desktop/views/Sidebar.vue deleted file mode 100644 index d53fa8fac..000000000 --- a/desktop/ui/src/pages/desktop/views/Sidebar.vue +++ /dev/null @@ -1,234 +0,0 @@ - - - - - diff --git a/desktop/ui/src/pages/desktop/views/Wallet.vue b/desktop/ui/src/pages/desktop/views/Wallet.vue deleted file mode 100644 index 66122f268..000000000 --- a/desktop/ui/src/pages/desktop/views/Wallet.vue +++ /dev/null @@ -1,210 +0,0 @@ - - - diff --git a/desktop/ui/src/pages/desktop/views/accounts/AccountDetails.vue b/desktop/ui/src/pages/desktop/views/accounts/AccountDetails.vue deleted file mode 100644 index 568bd4b56..000000000 --- a/desktop/ui/src/pages/desktop/views/accounts/AccountDetails.vue +++ /dev/null @@ -1,129 +0,0 @@ - - - diff --git a/desktop/ui/src/pages/desktop/views/accounts/ChainTransferModal.vue b/desktop/ui/src/pages/desktop/views/accounts/ChainTransferModal.vue deleted file mode 100644 index 3e9a091e4..000000000 --- a/desktop/ui/src/pages/desktop/views/accounts/ChainTransferModal.vue +++ /dev/null @@ -1,170 +0,0 @@ - - - diff --git a/desktop/ui/src/pages/desktop/views/accounts/NewAccountModal.vue b/desktop/ui/src/pages/desktop/views/accounts/NewAccountModal.vue deleted file mode 100644 index 241454fbf..000000000 --- a/desktop/ui/src/pages/desktop/views/accounts/NewAccountModal.vue +++ /dev/null @@ -1,125 +0,0 @@ - - - diff --git a/desktop/ui/src/pages/desktop/views/accounts/NewBrokerAccountModal.vue b/desktop/ui/src/pages/desktop/views/accounts/NewBrokerAccountModal.vue deleted file mode 100644 index 789899c58..000000000 --- a/desktop/ui/src/pages/desktop/views/accounts/NewBrokerAccountModal.vue +++ /dev/null @@ -1,129 +0,0 @@ - - - diff --git a/desktop/ui/src/pages/desktop/views/accounts/Overview.vue b/desktop/ui/src/pages/desktop/views/accounts/Overview.vue deleted file mode 100644 index 0c5205157..000000000 --- a/desktop/ui/src/pages/desktop/views/accounts/Overview.vue +++ /dev/null @@ -1,383 +0,0 @@ - - - diff --git a/desktop/ui/src/pages/desktop/views/accounts/Transactions.vue b/desktop/ui/src/pages/desktop/views/accounts/Transactions.vue deleted file mode 100644 index 739daa26f..000000000 --- a/desktop/ui/src/pages/desktop/views/accounts/Transactions.vue +++ /dev/null @@ -1,124 +0,0 @@ - - - diff --git a/desktop/ui/src/pages/desktop/views/cloud-details/CloudDetails.vue b/desktop/ui/src/pages/desktop/views/cloud-details/CloudDetails.vue deleted file mode 100644 index b43475ad6..000000000 --- a/desktop/ui/src/pages/desktop/views/cloud-details/CloudDetails.vue +++ /dev/null @@ -1,114 +0,0 @@ - - - diff --git a/desktop/ui/src/pages/desktop/views/cloud-details/Configure.vue b/desktop/ui/src/pages/desktop/views/cloud-details/Configure.vue deleted file mode 100644 index f0729cc33..000000000 --- a/desktop/ui/src/pages/desktop/views/cloud-details/Configure.vue +++ /dev/null @@ -1,103 +0,0 @@ - - - - - diff --git a/desktop/ui/src/pages/desktop/views/cloud-details/Connections.vue b/desktop/ui/src/pages/desktop/views/cloud-details/Connections.vue deleted file mode 100644 index e307fc8f7..000000000 --- a/desktop/ui/src/pages/desktop/views/cloud-details/Connections.vue +++ /dev/null @@ -1,56 +0,0 @@ - - - diff --git a/desktop/ui/src/pages/desktop/views/cloud-details/Datastores.vue b/desktop/ui/src/pages/desktop/views/cloud-details/Datastores.vue deleted file mode 100644 index 5884bffac..000000000 --- a/desktop/ui/src/pages/desktop/views/cloud-details/Datastores.vue +++ /dev/null @@ -1,66 +0,0 @@ - - - diff --git a/desktop/ui/src/pages/desktop/views/datastore-details/CloneModal.vue b/desktop/ui/src/pages/desktop/views/datastore-details/CloneModal.vue deleted file mode 100644 index 23663f818..000000000 --- a/desktop/ui/src/pages/desktop/views/datastore-details/CloneModal.vue +++ /dev/null @@ -1,80 +0,0 @@ - - - diff --git a/desktop/ui/src/pages/desktop/views/datastore-details/CreditsModal.vue b/desktop/ui/src/pages/desktop/views/datastore-details/CreditsModal.vue deleted file mode 100644 index 06cc594f1..000000000 --- a/desktop/ui/src/pages/desktop/views/datastore-details/CreditsModal.vue +++ /dev/null @@ -1,173 +0,0 @@ - - - - - diff --git a/desktop/ui/src/pages/desktop/views/datastore-details/DatastoreDetails.vue b/desktop/ui/src/pages/desktop/views/datastore-details/DatastoreDetails.vue deleted file mode 100644 index 151ae501d..000000000 --- a/desktop/ui/src/pages/desktop/views/datastore-details/DatastoreDetails.vue +++ /dev/null @@ -1,172 +0,0 @@ - - - diff --git a/desktop/ui/src/pages/desktop/views/datastore-details/Entities.vue b/desktop/ui/src/pages/desktop/views/datastore-details/Entities.vue deleted file mode 100644 index 4c51b598f..000000000 --- a/desktop/ui/src/pages/desktop/views/datastore-details/Entities.vue +++ /dev/null @@ -1,132 +0,0 @@ - - - diff --git a/desktop/ui/src/pages/desktop/views/datastore-details/Overview.vue b/desktop/ui/src/pages/desktop/views/datastore-details/Overview.vue deleted file mode 100644 index b9e906f63..000000000 --- a/desktop/ui/src/pages/desktop/views/datastore-details/Overview.vue +++ /dev/null @@ -1,344 +0,0 @@ - - - diff --git a/desktop/ui/src/pages/desktop/views/datastore-details/Queries.vue b/desktop/ui/src/pages/desktop/views/datastore-details/Queries.vue deleted file mode 100644 index ee92e7635..000000000 --- a/desktop/ui/src/pages/desktop/views/datastore-details/Queries.vue +++ /dev/null @@ -1,233 +0,0 @@ -