diff --git a/.yarn/cache/@babel-runtime-npm-7.20.13-45eeb6d8ad-09b7a97a05.zip b/.yarn/cache/@babel-runtime-npm-7.20.13-45eeb6d8ad-09b7a97a05.zip
new file mode 100644
index 000000000..1f68f79f5
Binary files /dev/null and b/.yarn/cache/@babel-runtime-npm-7.20.13-45eeb6d8ad-09b7a97a05.zip differ
diff --git a/.yarn/cache/@devicefarmer-adbkit-logcat-npm-2.1.2-7716683e3d-4defd49b2a.zip b/.yarn/cache/@devicefarmer-adbkit-logcat-npm-2.1.2-7716683e3d-4defd49b2a.zip
new file mode 100644
index 000000000..4a7a72d07
Binary files /dev/null and b/.yarn/cache/@devicefarmer-adbkit-logcat-npm-2.1.2-7716683e3d-4defd49b2a.zip differ
diff --git a/.yarn/cache/@devicefarmer-adbkit-monkey-npm-1.2.1-c3c2cdec90-6eab557f14.zip b/.yarn/cache/@devicefarmer-adbkit-monkey-npm-1.2.1-c3c2cdec90-6eab557f14.zip
new file mode 100644
index 000000000..03f52b69d
Binary files /dev/null and b/.yarn/cache/@devicefarmer-adbkit-monkey-npm-1.2.1-c3c2cdec90-6eab557f14.zip differ
diff --git a/.yarn/cache/@devicefarmer-adbkit-npm-3.2.3-0d22e0d679-9298d59ca6.zip b/.yarn/cache/@devicefarmer-adbkit-npm-3.2.3-0d22e0d679-9298d59ca6.zip
new file mode 100644
index 000000000..d62e2b4c4
Binary files /dev/null and b/.yarn/cache/@devicefarmer-adbkit-npm-3.2.3-0d22e0d679-9298d59ca6.zip differ
diff --git a/.yarn/cache/@eslint-eslintrc-npm-1.4.1-007f670de2-cd3e5a8683.zip b/.yarn/cache/@eslint-eslintrc-npm-1.4.1-007f670de2-cd3e5a8683.zip
new file mode 100644
index 000000000..b51019b7a
Binary files /dev/null and b/.yarn/cache/@eslint-eslintrc-npm-1.4.1-007f670de2-cd3e5a8683.zip differ
diff --git a/.yarn/cache/@humanwhocodes-config-array-npm-0.11.8-7955bfecc2-0fd6b3c54f.zip b/.yarn/cache/@humanwhocodes-config-array-npm-0.11.8-7955bfecc2-0fd6b3c54f.zip
new file mode 100644
index 000000000..dc21af1cb
Binary files /dev/null and b/.yarn/cache/@humanwhocodes-config-array-npm-0.11.8-7955bfecc2-0fd6b3c54f.zip differ
diff --git a/.yarn/cache/@mdn-browser-compat-data-npm-5.2.29-c03d819b23-2f93497fe8.zip b/.yarn/cache/@mdn-browser-compat-data-npm-5.2.29-c03d819b23-2f93497fe8.zip
new file mode 100644
index 000000000..adfe90d26
Binary files /dev/null and b/.yarn/cache/@mdn-browser-compat-data-npm-5.2.29-c03d819b23-2f93497fe8.zip differ
diff --git a/.yarn/cache/@mozilla-readability-npm-0.4.2-9e722855e1-daeeb1d68e.zip b/.yarn/cache/@mozilla-readability-npm-0.4.2-9e722855e1-daeeb1d68e.zip
new file mode 100644
index 000000000..b48d295e4
Binary files /dev/null and b/.yarn/cache/@mozilla-readability-npm-0.4.2-9e722855e1-daeeb1d68e.zip differ
diff --git a/.yarn/cache/@types-webextension-polyfill-npm-0.10.0-bd8dcf3edd-1c6d0b3f6f.zip b/.yarn/cache/@types-webextension-polyfill-npm-0.10.0-bd8dcf3edd-1c6d0b3f6f.zip
new file mode 100644
index 000000000..e5dc96829
Binary files /dev/null and b/.yarn/cache/@types-webextension-polyfill-npm-0.10.0-bd8dcf3edd-1c6d0b3f6f.zip differ
diff --git a/.yarn/cache/addons-linter-npm-5.27.0-c7da0a69ee-cf92f54ce9.zip b/.yarn/cache/addons-linter-npm-5.27.0-c7da0a69ee-cf92f54ce9.zip
new file mode 100644
index 000000000..d8d8f7ec7
Binary files /dev/null and b/.yarn/cache/addons-linter-npm-5.27.0-c7da0a69ee-cf92f54ce9.zip differ
diff --git a/.yarn/cache/addons-moz-compare-npm-1.3.0-4b932e6d73-f3464dfe19.zip b/.yarn/cache/addons-moz-compare-npm-1.3.0-4b932e6d73-f3464dfe19.zip
new file mode 100644
index 000000000..85cf58e33
Binary files /dev/null and b/.yarn/cache/addons-moz-compare-npm-1.3.0-4b932e6d73-f3464dfe19.zip differ
diff --git a/.yarn/cache/addons-scanner-utils-npm-8.3.0-19bb6b25f1-913d84900b.zip b/.yarn/cache/addons-scanner-utils-npm-8.3.0-19bb6b25f1-913d84900b.zip
new file mode 100644
index 000000000..6a7f4a64f
Binary files /dev/null and b/.yarn/cache/addons-scanner-utils-npm-8.3.0-19bb6b25f1-913d84900b.zip differ
diff --git a/.yarn/cache/adm-zip-npm-0.5.10-17a872f2fd-07ed91cf64.zip b/.yarn/cache/adm-zip-npm-0.5.10-17a872f2fd-07ed91cf64.zip
new file mode 100644
index 000000000..c1fad7888
Binary files /dev/null and b/.yarn/cache/adm-zip-npm-0.5.10-17a872f2fd-07ed91cf64.zip differ
diff --git a/.yarn/cache/ajv-npm-8.12.0-3bf6e30741-4dc13714e3.zip b/.yarn/cache/ajv-npm-8.12.0-3bf6e30741-4dc13714e3.zip
new file mode 100644
index 000000000..9e66b6f2f
Binary files /dev/null and b/.yarn/cache/ajv-npm-8.12.0-3bf6e30741-4dc13714e3.zip differ
diff --git a/.yarn/cache/any-promise-npm-1.3.0-f34eeaa7e7-0ee8a9bdbe.zip b/.yarn/cache/any-promise-npm-1.3.0-f34eeaa7e7-0ee8a9bdbe.zip
new file mode 100644
index 000000000..2f709d5ca
Binary files /dev/null and b/.yarn/cache/any-promise-npm-1.3.0-f34eeaa7e7-0ee8a9bdbe.zip differ
diff --git a/.yarn/cache/array-differ-npm-4.0.0-90d42db74d-1de99a06bc.zip b/.yarn/cache/array-differ-npm-4.0.0-90d42db74d-1de99a06bc.zip
new file mode 100644
index 000000000..17b551f18
Binary files /dev/null and b/.yarn/cache/array-differ-npm-4.0.0-90d42db74d-1de99a06bc.zip differ
diff --git a/.yarn/cache/array-union-npm-3.0.1-3ee2eb5947-47b29f8825.zip b/.yarn/cache/array-union-npm-3.0.1-3ee2eb5947-47b29f8825.zip
new file mode 100644
index 000000000..e4f6918ff
Binary files /dev/null and b/.yarn/cache/array-union-npm-3.0.1-3ee2eb5947-47b29f8825.zip differ
diff --git a/.yarn/cache/asn1-npm-0.2.6-bdd07356c4-39f2ae343b.zip b/.yarn/cache/asn1-npm-0.2.6-bdd07356c4-39f2ae343b.zip
new file mode 100644
index 000000000..a6463962d
Binary files /dev/null and b/.yarn/cache/asn1-npm-0.2.6-bdd07356c4-39f2ae343b.zip differ
diff --git a/.yarn/cache/atomic-sleep-npm-1.0.0-17d8a762a3-b95275afb2.zip b/.yarn/cache/atomic-sleep-npm-1.0.0-17d8a762a3-b95275afb2.zip
new file mode 100644
index 000000000..d172f9448
Binary files /dev/null and b/.yarn/cache/atomic-sleep-npm-1.0.0-17d8a762a3-b95275afb2.zip differ
diff --git a/.yarn/cache/aws-sign2-npm-0.7.0-656c6cb84d-b148b0bb07.zip b/.yarn/cache/aws-sign2-npm-0.7.0-656c6cb84d-b148b0bb07.zip
new file mode 100644
index 000000000..6d4194785
Binary files /dev/null and b/.yarn/cache/aws-sign2-npm-0.7.0-656c6cb84d-b148b0bb07.zip differ
diff --git a/.yarn/cache/aws4-npm-1.12.0-af8e48a2ab-68f79708ac.zip b/.yarn/cache/aws4-npm-1.12.0-af8e48a2ab-68f79708ac.zip
new file mode 100644
index 000000000..c730171b5
Binary files /dev/null and b/.yarn/cache/aws4-npm-1.12.0-af8e48a2ab-68f79708ac.zip differ
diff --git a/.yarn/cache/bcrypt-pbkdf-npm-1.0.2-80db8b16ed-4edfc9fe7d.zip b/.yarn/cache/bcrypt-pbkdf-npm-1.0.2-80db8b16ed-4edfc9fe7d.zip
new file mode 100644
index 000000000..75152520d
Binary files /dev/null and b/.yarn/cache/bcrypt-pbkdf-npm-1.0.2-80db8b16ed-4edfc9fe7d.zip differ
diff --git a/.yarn/cache/camelcase-npm-7.0.1-d41d97bb0d-86ab8f3ebf.zip b/.yarn/cache/camelcase-npm-7.0.1-d41d97bb0d-86ab8f3ebf.zip
new file mode 100644
index 000000000..1f5e860ed
Binary files /dev/null and b/.yarn/cache/camelcase-npm-7.0.1-d41d97bb0d-86ab8f3ebf.zip differ
diff --git a/.yarn/cache/caseless-npm-0.12.0-e83bc5df83-b43bd4c440.zip b/.yarn/cache/caseless-npm-0.12.0-e83bc5df83-b43bd4c440.zip
new file mode 100644
index 000000000..a12be75cd
Binary files /dev/null and b/.yarn/cache/caseless-npm-0.12.0-e83bc5df83-b43bd4c440.zip differ
diff --git a/.yarn/cache/cheerio-npm-1.0.0-rc.12-6785a97c2a-5d4c1b7a53.zip b/.yarn/cache/cheerio-npm-1.0.0-rc.12-6785a97c2a-5d4c1b7a53.zip
new file mode 100644
index 000000000..52387ebf2
Binary files /dev/null and b/.yarn/cache/cheerio-npm-1.0.0-rc.12-6785a97c2a-5d4c1b7a53.zip differ
diff --git a/.yarn/cache/cheerio-select-npm-2.1.0-e92bc2f296-843d6d4799.zip b/.yarn/cache/cheerio-select-npm-2.1.0-e92bc2f296-843d6d4799.zip
new file mode 100644
index 000000000..e6e7bc629
Binary files /dev/null and b/.yarn/cache/cheerio-select-npm-2.1.0-e92bc2f296-843d6d4799.zip differ
diff --git a/.yarn/cache/chrome-launcher-npm-0.15.1-93903cae0a-b534221b83.zip b/.yarn/cache/chrome-launcher-npm-0.15.1-93903cae0a-b534221b83.zip
new file mode 100644
index 000000000..dfd4ef1b2
Binary files /dev/null and b/.yarn/cache/chrome-launcher-npm-0.15.1-93903cae0a-b534221b83.zip differ
diff --git a/.yarn/cache/commander-npm-9.5.0-993b3f2434-c7a3e27aa5.zip b/.yarn/cache/commander-npm-9.5.0-993b3f2434-c7a3e27aa5.zip
new file mode 100644
index 000000000..a254243be
Binary files /dev/null and b/.yarn/cache/commander-npm-9.5.0-993b3f2434-c7a3e27aa5.zip differ
diff --git a/.yarn/cache/common-tags-npm-1.8.2-2c30ba69b3-767a6255a8.zip b/.yarn/cache/common-tags-npm-1.8.2-2c30ba69b3-767a6255a8.zip
new file mode 100644
index 000000000..3b1eefb4c
Binary files /dev/null and b/.yarn/cache/common-tags-npm-1.8.2-2c30ba69b3-767a6255a8.zip differ
diff --git a/.yarn/cache/concat-stream-npm-1.6.2-2bee337060-1ef77032cb.zip b/.yarn/cache/concat-stream-npm-1.6.2-2bee337060-1ef77032cb.zip
new file mode 100644
index 000000000..2adcea761
Binary files /dev/null and b/.yarn/cache/concat-stream-npm-1.6.2-2bee337060-1ef77032cb.zip differ
diff --git a/.yarn/cache/core-js-npm-3.27.1-7b0086b1f4-d50b5f88ae.zip b/.yarn/cache/core-js-npm-3.27.1-7b0086b1f4-d50b5f88ae.zip
new file mode 100644
index 000000000..bcdf10130
Binary files /dev/null and b/.yarn/cache/core-js-npm-3.27.1-7b0086b1f4-d50b5f88ae.zip differ
diff --git a/.yarn/cache/css-select-npm-5.1.0-9365a79de5-2772c049b1.zip b/.yarn/cache/css-select-npm-5.1.0-9365a79de5-2772c049b1.zip
new file mode 100644
index 000000000..5c72f05f5
Binary files /dev/null and b/.yarn/cache/css-select-npm-5.1.0-9365a79de5-2772c049b1.zip differ
diff --git a/.yarn/cache/dashdash-npm-1.14.1-be8f10a286-3634c24957.zip b/.yarn/cache/dashdash-npm-1.14.1-be8f10a286-3634c24957.zip
new file mode 100644
index 000000000..108f90531
Binary files /dev/null and b/.yarn/cache/dashdash-npm-1.14.1-be8f10a286-3634c24957.zip differ
diff --git a/.yarn/cache/data-uri-to-buffer-npm-4.0.1-5c66a78beb-0d0790b67f.zip b/.yarn/cache/data-uri-to-buffer-npm-4.0.1-5c66a78beb-0d0790b67f.zip
new file mode 100644
index 000000000..dc18c8811
Binary files /dev/null and b/.yarn/cache/data-uri-to-buffer-npm-4.0.1-5c66a78beb-0d0790b67f.zip differ
diff --git a/.yarn/cache/debounce-npm-1.2.1-b09266a260-682a89506d.zip b/.yarn/cache/debounce-npm-1.2.1-b09266a260-682a89506d.zip
new file mode 100644
index 000000000..68307da56
Binary files /dev/null and b/.yarn/cache/debounce-npm-1.2.1-b09266a260-682a89506d.zip differ
diff --git a/.yarn/cache/decamelize-npm-6.0.0-109b08ac0a-0066bc3079.zip b/.yarn/cache/decamelize-npm-6.0.0-109b08ac0a-0066bc3079.zip
new file mode 100644
index 000000000..f829d061d
Binary files /dev/null and b/.yarn/cache/decamelize-npm-6.0.0-109b08ac0a-0066bc3079.zip differ
diff --git a/.yarn/cache/deepcopy-npm-2.1.0-cce3dcae61-7890ccaa8a.zip b/.yarn/cache/deepcopy-npm-2.1.0-cce3dcae61-7890ccaa8a.zip
new file mode 100644
index 000000000..01c6f28c9
Binary files /dev/null and b/.yarn/cache/deepcopy-npm-2.1.0-cce3dcae61-7890ccaa8a.zip differ
diff --git a/.yarn/cache/dom-serializer-npm-2.0.0-378ebc7200-cd1810544f.zip b/.yarn/cache/dom-serializer-npm-2.0.0-378ebc7200-cd1810544f.zip
new file mode 100644
index 000000000..0c9bd35a4
Binary files /dev/null and b/.yarn/cache/dom-serializer-npm-2.0.0-378ebc7200-cd1810544f.zip differ
diff --git a/.yarn/cache/domhandler-npm-5.0.3-3ede73dc10-0f58f4a6af.zip b/.yarn/cache/domhandler-npm-5.0.3-3ede73dc10-0f58f4a6af.zip
new file mode 100644
index 000000000..fd6d19e9e
Binary files /dev/null and b/.yarn/cache/domhandler-npm-5.0.3-3ede73dc10-0f58f4a6af.zip differ
diff --git a/.yarn/cache/domutils-npm-3.0.1-7937818218-23aa7a8405.zip b/.yarn/cache/domutils-npm-3.0.1-7937818218-23aa7a8405.zip
new file mode 100644
index 000000000..9c750d6fe
Binary files /dev/null and b/.yarn/cache/domutils-npm-3.0.1-7937818218-23aa7a8405.zip differ
diff --git a/.yarn/cache/ecc-jsbn-npm-0.1.2-85b7a7be89-22fef4b620.zip b/.yarn/cache/ecc-jsbn-npm-0.1.2-85b7a7be89-22fef4b620.zip
new file mode 100644
index 000000000..80e362ad7
Binary files /dev/null and b/.yarn/cache/ecc-jsbn-npm-0.1.2-85b7a7be89-22fef4b620.zip differ
diff --git a/.yarn/cache/es6-promisify-npm-7.0.0-65cfae362d-461305147b.zip b/.yarn/cache/es6-promisify-npm-7.0.0-65cfae362d-461305147b.zip
new file mode 100644
index 000000000..a9d04887f
Binary files /dev/null and b/.yarn/cache/es6-promisify-npm-7.0.0-65cfae362d-461305147b.zip differ
diff --git a/.yarn/cache/eslint-npm-8.32.0-ce390f6a3f-23c8fb3c57.zip b/.yarn/cache/eslint-npm-8.32.0-ce390f6a3f-23c8fb3c57.zip
new file mode 100644
index 000000000..3a802878b
Binary files /dev/null and b/.yarn/cache/eslint-npm-8.32.0-ce390f6a3f-23c8fb3c57.zip differ
diff --git a/.yarn/cache/eslint-plugin-no-unsanitized-npm-4.0.2-51422091a6-c3b171c31a.zip b/.yarn/cache/eslint-plugin-no-unsanitized-npm-4.0.2-51422091a6-c3b171c31a.zip
new file mode 100644
index 000000000..38a204bf8
Binary files /dev/null and b/.yarn/cache/eslint-plugin-no-unsanitized-npm-4.0.2-51422091a6-c3b171c31a.zip differ
diff --git a/.yarn/cache/espree-npm-9.4.1-b88faf10bc-4d266b0cf8.zip b/.yarn/cache/espree-npm-9.4.1-b88faf10bc-4d266b0cf8.zip
new file mode 100644
index 000000000..557f3c35d
Binary files /dev/null and b/.yarn/cache/espree-npm-9.4.1-b88faf10bc-4d266b0cf8.zip differ
diff --git a/.yarn/cache/execa-npm-4.1.0-cc675b4189-e30d298934.zip b/.yarn/cache/execa-npm-4.1.0-cc675b4189-e30d298934.zip
new file mode 100644
index 000000000..bffd89818
Binary files /dev/null and b/.yarn/cache/execa-npm-4.1.0-cc675b4189-e30d298934.zip differ
diff --git a/.yarn/cache/extend-npm-3.0.2-e1ca07ac54-a50a8309ca.zip b/.yarn/cache/extend-npm-3.0.2-e1ca07ac54-a50a8309ca.zip
new file mode 100644
index 000000000..a33fb285f
Binary files /dev/null and b/.yarn/cache/extend-npm-3.0.2-e1ca07ac54-a50a8309ca.zip differ
diff --git a/.yarn/cache/extsprintf-npm-1.3.0-61a92b324c-cee7a4a1e3.zip b/.yarn/cache/extsprintf-npm-1.3.0-61a92b324c-cee7a4a1e3.zip
new file mode 100644
index 000000000..e72ea1cf4
Binary files /dev/null and b/.yarn/cache/extsprintf-npm-1.3.0-61a92b324c-cee7a4a1e3.zip differ
diff --git a/.yarn/cache/fast-json-patch-npm-3.1.1-7e8bb70a45-c4525b61b2.zip b/.yarn/cache/fast-json-patch-npm-3.1.1-7e8bb70a45-c4525b61b2.zip
new file mode 100644
index 000000000..4a423f705
Binary files /dev/null and b/.yarn/cache/fast-json-patch-npm-3.1.1-7e8bb70a45-c4525b61b2.zip differ
diff --git a/.yarn/cache/fast-redact-npm-3.1.2-e090ce0184-a30eb6b683.zip b/.yarn/cache/fast-redact-npm-3.1.2-e090ce0184-a30eb6b683.zip
new file mode 100644
index 000000000..a8f46bce9
Binary files /dev/null and b/.yarn/cache/fast-redact-npm-3.1.2-e090ce0184-a30eb6b683.zip differ
diff --git a/.yarn/cache/fetch-blob-npm-3.2.0-28e01becfc-f19bc28a2a.zip b/.yarn/cache/fetch-blob-npm-3.2.0-28e01becfc-f19bc28a2a.zip
new file mode 100644
index 000000000..e90e7e285
Binary files /dev/null and b/.yarn/cache/fetch-blob-npm-3.2.0-28e01becfc-f19bc28a2a.zip differ
diff --git a/.yarn/cache/firefox-profile-npm-4.2.2-41ba0ada9c-21f338accb.zip b/.yarn/cache/firefox-profile-npm-4.2.2-41ba0ada9c-21f338accb.zip
new file mode 100644
index 000000000..15b67c71e
Binary files /dev/null and b/.yarn/cache/firefox-profile-npm-4.2.2-41ba0ada9c-21f338accb.zip differ
diff --git a/.yarn/cache/first-chunk-stream-npm-3.0.0-8ea4099b38-85fe6ef654.zip b/.yarn/cache/first-chunk-stream-npm-3.0.0-8ea4099b38-85fe6ef654.zip
new file mode 100644
index 000000000..42562a883
Binary files /dev/null and b/.yarn/cache/first-chunk-stream-npm-3.0.0-8ea4099b38-85fe6ef654.zip differ
diff --git a/.yarn/cache/fluent-syntax-npm-0.14.0-13b7cb1b7b-3d27eaa39d.zip b/.yarn/cache/fluent-syntax-npm-0.14.0-13b7cb1b7b-3d27eaa39d.zip
new file mode 100644
index 000000000..473b98647
Binary files /dev/null and b/.yarn/cache/fluent-syntax-npm-0.14.0-13b7cb1b7b-3d27eaa39d.zip differ
diff --git a/.yarn/cache/forever-agent-npm-0.6.1-01dae53bf9-766ae6e220.zip b/.yarn/cache/forever-agent-npm-0.6.1-01dae53bf9-766ae6e220.zip
new file mode 100644
index 000000000..8250de6b4
Binary files /dev/null and b/.yarn/cache/forever-agent-npm-0.6.1-01dae53bf9-766ae6e220.zip differ
diff --git a/.yarn/cache/form-data-npm-2.3.3-c016cc11c0-10c1780fa1.zip b/.yarn/cache/form-data-npm-2.3.3-c016cc11c0-10c1780fa1.zip
new file mode 100644
index 000000000..9e2c84d84
Binary files /dev/null and b/.yarn/cache/form-data-npm-2.3.3-c016cc11c0-10c1780fa1.zip differ
diff --git a/.yarn/cache/formdata-polyfill-npm-4.0.10-e03013c013-82a34df292.zip b/.yarn/cache/formdata-polyfill-npm-4.0.10-e03013c013-82a34df292.zip
new file mode 100644
index 000000000..118da5ce6
Binary files /dev/null and b/.yarn/cache/formdata-polyfill-npm-4.0.10-e03013c013-82a34df292.zip differ
diff --git a/.yarn/cache/fs-extra-npm-11.1.0-2cd157426f-5ca476103f.zip b/.yarn/cache/fs-extra-npm-11.1.0-2cd157426f-5ca476103f.zip
new file mode 100644
index 000000000..81fe0f976
Binary files /dev/null and b/.yarn/cache/fs-extra-npm-11.1.0-2cd157426f-5ca476103f.zip differ
diff --git a/.yarn/cache/fs-extra-npm-9.0.1-2925889105-0110da06b4.zip b/.yarn/cache/fs-extra-npm-9.0.1-2925889105-0110da06b4.zip
new file mode 100644
index 000000000..f6f686c24
Binary files /dev/null and b/.yarn/cache/fs-extra-npm-9.0.1-2925889105-0110da06b4.zip differ
diff --git a/.yarn/cache/fx-runner-npm-1.3.0-f14542922d-cb74f06c8b.zip b/.yarn/cache/fx-runner-npm-1.3.0-f14542922d-cb74f06c8b.zip
new file mode 100644
index 000000000..aa94a0bae
Binary files /dev/null and b/.yarn/cache/fx-runner-npm-1.3.0-f14542922d-cb74f06c8b.zip differ
diff --git a/.yarn/cache/getpass-npm-0.1.7-519164a3be-ab18d55661.zip b/.yarn/cache/getpass-npm-0.1.7-519164a3be-ab18d55661.zip
new file mode 100644
index 000000000..c0a0abf62
Binary files /dev/null and b/.yarn/cache/getpass-npm-0.1.7-519164a3be-ab18d55661.zip differ
diff --git a/.yarn/cache/glob-npm-8.1.0-65f64af8b1-92fbea3221.zip b/.yarn/cache/glob-npm-8.1.0-65f64af8b1-92fbea3221.zip
new file mode 100644
index 000000000..3fc76b578
Binary files /dev/null and b/.yarn/cache/glob-npm-8.1.0-65f64af8b1-92fbea3221.zip differ
diff --git a/.yarn/cache/globals-npm-13.20.0-4565a722e7-ad1ecf914b.zip b/.yarn/cache/globals-npm-13.20.0-4565a722e7-ad1ecf914b.zip
new file mode 100644
index 000000000..e8add5b6b
Binary files /dev/null and b/.yarn/cache/globals-npm-13.20.0-4565a722e7-ad1ecf914b.zip differ
diff --git a/.yarn/cache/growly-npm-1.3.0-b3a02d4d2a-53cdecd4c1.zip b/.yarn/cache/growly-npm-1.3.0-b3a02d4d2a-53cdecd4c1.zip
new file mode 100644
index 000000000..559ccedda
Binary files /dev/null and b/.yarn/cache/growly-npm-1.3.0-b3a02d4d2a-53cdecd4c1.zip differ
diff --git a/.yarn/cache/har-schema-npm-2.0.0-3a318c0ca5-d8946348f3.zip b/.yarn/cache/har-schema-npm-2.0.0-3a318c0ca5-d8946348f3.zip
new file mode 100644
index 000000000..e9ea17573
Binary files /dev/null and b/.yarn/cache/har-schema-npm-2.0.0-3a318c0ca5-d8946348f3.zip differ
diff --git a/.yarn/cache/har-validator-npm-5.1.5-bd9ac162f5-b998a7269c.zip b/.yarn/cache/har-validator-npm-5.1.5-bd9ac162f5-b998a7269c.zip
new file mode 100644
index 000000000..5ae256de3
Binary files /dev/null and b/.yarn/cache/har-validator-npm-5.1.5-bd9ac162f5-b998a7269c.zip differ
diff --git a/.yarn/cache/htmlparser2-npm-8.0.1-b432299617-06d5c71e83.zip b/.yarn/cache/htmlparser2-npm-8.0.1-b432299617-06d5c71e83.zip
new file mode 100644
index 000000000..51e8d38be
Binary files /dev/null and b/.yarn/cache/htmlparser2-npm-8.0.1-b432299617-06d5c71e83.zip differ
diff --git a/.yarn/cache/http-signature-npm-1.2.0-ee92426f34-3324598712.zip b/.yarn/cache/http-signature-npm-1.2.0-ee92426f34-3324598712.zip
new file mode 100644
index 000000000..06ea3b244
Binary files /dev/null and b/.yarn/cache/http-signature-npm-1.2.0-ee92426f34-3324598712.zip differ
diff --git a/.yarn/cache/human-signals-npm-1.1.1-616b2586c2-d587647c9e.zip b/.yarn/cache/human-signals-npm-1.1.1-616b2586c2-d587647c9e.zip
new file mode 100644
index 000000000..1dcc5877f
Binary files /dev/null and b/.yarn/cache/human-signals-npm-1.1.1-616b2586c2-d587647c9e.zip differ
diff --git a/.yarn/cache/image-size-npm-1.0.2-ed5424d843-01745fdb47.zip b/.yarn/cache/image-size-npm-1.0.2-ed5424d843-01745fdb47.zip
new file mode 100644
index 000000000..a50468605
Binary files /dev/null and b/.yarn/cache/image-size-npm-1.0.2-ed5424d843-01745fdb47.zip differ
diff --git a/.yarn/cache/immediate-npm-3.0.6-c27588a2d3-f9b3486477.zip b/.yarn/cache/immediate-npm-3.0.6-c27588a2d3-f9b3486477.zip
new file mode 100644
index 000000000..d3f74981e
Binary files /dev/null and b/.yarn/cache/immediate-npm-3.0.6-c27588a2d3-f9b3486477.zip differ
diff --git a/.yarn/cache/invert-kv-npm-3.0.1-727c460352-782c44c97f.zip b/.yarn/cache/invert-kv-npm-3.0.1-727c460352-782c44c97f.zip
new file mode 100644
index 000000000..9b2a222ab
Binary files /dev/null and b/.yarn/cache/invert-kv-npm-3.0.1-727c460352-782c44c97f.zip differ
diff --git a/.yarn/cache/is-absolute-npm-0.1.7-650ff7ee16-5f26dc3616.zip b/.yarn/cache/is-absolute-npm-0.1.7-650ff7ee16-5f26dc3616.zip
new file mode 100644
index 000000000..aee9f91b8
Binary files /dev/null and b/.yarn/cache/is-absolute-npm-0.1.7-650ff7ee16-5f26dc3616.zip differ
diff --git a/.yarn/cache/is-mergeable-object-npm-1.1.1-4e4fe8efd7-19a29bc618.zip b/.yarn/cache/is-mergeable-object-npm-1.1.1-4e4fe8efd7-19a29bc618.zip
new file mode 100644
index 000000000..949eea016
Binary files /dev/null and b/.yarn/cache/is-mergeable-object-npm-1.1.1-4e4fe8efd7-19a29bc618.zip differ
diff --git a/.yarn/cache/is-relative-npm-0.1.3-29185bb139-bfe53d31d2.zip b/.yarn/cache/is-relative-npm-0.1.3-29185bb139-bfe53d31d2.zip
new file mode 100644
index 000000000..6466fbb4f
Binary files /dev/null and b/.yarn/cache/is-relative-npm-0.1.3-29185bb139-bfe53d31d2.zip differ
diff --git a/.yarn/cache/is-utf8-npm-0.2.1-46ab364e2f-167ccd2be8.zip b/.yarn/cache/is-utf8-npm-0.2.1-46ab364e2f-167ccd2be8.zip
new file mode 100644
index 000000000..952563a49
Binary files /dev/null and b/.yarn/cache/is-utf8-npm-0.2.1-46ab364e2f-167ccd2be8.zip differ
diff --git a/.yarn/cache/isexe-npm-1.1.2-a52e8e0453-a35523bc88.zip b/.yarn/cache/isexe-npm-1.1.2-a52e8e0453-a35523bc88.zip
new file mode 100644
index 000000000..b8ba9767d
Binary files /dev/null and b/.yarn/cache/isexe-npm-1.1.2-a52e8e0453-a35523bc88.zip differ
diff --git a/.yarn/cache/isstream-npm-0.1.2-8581c75385-1eb2fe63a7.zip b/.yarn/cache/isstream-npm-0.1.2-8581c75385-1eb2fe63a7.zip
new file mode 100644
index 000000000..7c1a1e171
Binary files /dev/null and b/.yarn/cache/isstream-npm-0.1.2-8581c75385-1eb2fe63a7.zip differ
diff --git a/.yarn/cache/jed-npm-1.1.1-00d623c2ff-657949a281.zip b/.yarn/cache/jed-npm-1.1.1-00d623c2ff-657949a281.zip
new file mode 100644
index 000000000..111f9888b
Binary files /dev/null and b/.yarn/cache/jed-npm-1.1.1-00d623c2ff-657949a281.zip differ
diff --git a/.yarn/cache/jose-npm-4.11.2-f3f8bb7bbb-bc9b2271c3.zip b/.yarn/cache/jose-npm-4.11.2-f3f8bb7bbb-bc9b2271c3.zip
new file mode 100644
index 000000000..fde820d72
Binary files /dev/null and b/.yarn/cache/jose-npm-4.11.2-f3f8bb7bbb-bc9b2271c3.zip differ
diff --git a/.yarn/cache/jsbn-npm-0.1.1-0eb7132404-e5ff29c1b8.zip b/.yarn/cache/jsbn-npm-0.1.1-0eb7132404-e5ff29c1b8.zip
new file mode 100644
index 000000000..8ec54a26c
Binary files /dev/null and b/.yarn/cache/jsbn-npm-0.1.1-0eb7132404-e5ff29c1b8.zip differ
diff --git a/.yarn/cache/json-merge-patch-npm-1.0.2-c39aa8231c-06867dbb93.zip b/.yarn/cache/json-merge-patch-npm-1.0.2-c39aa8231c-06867dbb93.zip
new file mode 100644
index 000000000..14a0bb8ec
Binary files /dev/null and b/.yarn/cache/json-merge-patch-npm-1.0.2-c39aa8231c-06867dbb93.zip differ
diff --git a/.yarn/cache/json-schema-npm-0.4.0-e776313070-66389434c3.zip b/.yarn/cache/json-schema-npm-0.4.0-e776313070-66389434c3.zip
new file mode 100644
index 000000000..1946e3075
Binary files /dev/null and b/.yarn/cache/json-schema-npm-0.4.0-e776313070-66389434c3.zip differ
diff --git a/.yarn/cache/jsprim-npm-1.4.2-1ae6cade9a-2ad1b9fdcc.zip b/.yarn/cache/jsprim-npm-1.4.2-1ae6cade9a-2ad1b9fdcc.zip
new file mode 100644
index 000000000..955098325
Binary files /dev/null and b/.yarn/cache/jsprim-npm-1.4.2-1ae6cade9a-2ad1b9fdcc.zip differ
diff --git a/.yarn/cache/jszip-npm-3.10.1-2862546cfb-abc77bfbe3.zip b/.yarn/cache/jszip-npm-3.10.1-2862546cfb-abc77bfbe3.zip
new file mode 100644
index 000000000..aa825dede
Binary files /dev/null and b/.yarn/cache/jszip-npm-3.10.1-2862546cfb-abc77bfbe3.zip differ
diff --git a/.yarn/cache/lcid-npm-3.1.1-d480bf5066-7ebab7a269.zip b/.yarn/cache/lcid-npm-3.1.1-d480bf5066-7ebab7a269.zip
new file mode 100644
index 000000000..c7cf9b889
Binary files /dev/null and b/.yarn/cache/lcid-npm-3.1.1-d480bf5066-7ebab7a269.zip differ
diff --git a/.yarn/cache/lie-npm-3.3.0-35ddd11a4d-33102302cf.zip b/.yarn/cache/lie-npm-3.3.0-35ddd11a4d-33102302cf.zip
new file mode 100644
index 000000000..bc2fb940f
Binary files /dev/null and b/.yarn/cache/lie-npm-3.3.0-35ddd11a4d-33102302cf.zip differ
diff --git a/.yarn/cache/lighthouse-logger-npm-1.3.0-3f60201e4a-82655f1862.zip b/.yarn/cache/lighthouse-logger-npm-1.3.0-3f60201e4a-82655f1862.zip
new file mode 100644
index 000000000..1fecbf143
Binary files /dev/null and b/.yarn/cache/lighthouse-logger-npm-1.3.0-3f60201e4a-82655f1862.zip differ
diff --git a/.yarn/cache/lines-and-columns-npm-2.0.3-68ede50723-5955363dfd.zip b/.yarn/cache/lines-and-columns-npm-2.0.3-68ede50723-5955363dfd.zip
new file mode 100644
index 000000000..20fccc1c4
Binary files /dev/null and b/.yarn/cache/lines-and-columns-npm-2.0.3-68ede50723-5955363dfd.zip differ
diff --git a/.yarn/cache/marky-npm-1.2.5-007e6cc885-823b946677.zip b/.yarn/cache/marky-npm-1.2.5-007e6cc885-823b946677.zip
new file mode 100644
index 000000000..886d0928f
Binary files /dev/null and b/.yarn/cache/marky-npm-1.2.5-007e6cc885-823b946677.zip differ
diff --git a/.yarn/cache/mem-npm-5.1.1-2d4979148e-134ec3af9a.zip b/.yarn/cache/mem-npm-5.1.1-2d4979148e-134ec3af9a.zip
new file mode 100644
index 000000000..03e47f19b
Binary files /dev/null and b/.yarn/cache/mem-npm-5.1.1-2d4979148e-134ec3af9a.zip differ
diff --git a/.yarn/cache/multimatch-npm-6.0.0-04c984409d-c04233765f.zip b/.yarn/cache/multimatch-npm-6.0.0-04c984409d-c04233765f.zip
new file mode 100644
index 000000000..300ca357f
Binary files /dev/null and b/.yarn/cache/multimatch-npm-6.0.0-04c984409d-c04233765f.zip differ
diff --git a/.yarn/cache/mz-npm-2.7.0-ec3cef4ec2-8427de0ece.zip b/.yarn/cache/mz-npm-2.7.0-ec3cef4ec2-8427de0ece.zip
new file mode 100644
index 000000000..faf79cab2
Binary files /dev/null and b/.yarn/cache/mz-npm-2.7.0-ec3cef4ec2-8427de0ece.zip differ
diff --git a/.yarn/cache/node-domexception-npm-1.0.0-e1e813b76f-ee1d37dd2a.zip b/.yarn/cache/node-domexception-npm-1.0.0-e1e813b76f-ee1d37dd2a.zip
new file mode 100644
index 000000000..d58ba924f
Binary files /dev/null and b/.yarn/cache/node-domexception-npm-1.0.0-e1e813b76f-ee1d37dd2a.zip differ
diff --git a/.yarn/cache/node-fetch-npm-3.3.0-45d971325c-e9936908d2.zip b/.yarn/cache/node-fetch-npm-3.3.0-45d971325c-e9936908d2.zip
new file mode 100644
index 000000000..bc7fe4719
Binary files /dev/null and b/.yarn/cache/node-fetch-npm-3.3.0-45d971325c-e9936908d2.zip differ
diff --git a/.yarn/cache/node-notifier-npm-10.0.1-7a3f9a97c4-ac09456152.zip b/.yarn/cache/node-notifier-npm-10.0.1-7a3f9a97c4-ac09456152.zip
new file mode 100644
index 000000000..b419c3ffb
Binary files /dev/null and b/.yarn/cache/node-notifier-npm-10.0.1-7a3f9a97c4-ac09456152.zip differ
diff --git a/.yarn/cache/oauth-sign-npm-0.9.0-7aa9422221-8f5497a127.zip b/.yarn/cache/oauth-sign-npm-0.9.0-7aa9422221-8f5497a127.zip
new file mode 100644
index 000000000..04d5896f7
Binary files /dev/null and b/.yarn/cache/oauth-sign-npm-0.9.0-7aa9422221-8f5497a127.zip differ
diff --git a/.yarn/cache/on-exit-leak-free-npm-2.1.0-b522202aa1-7334d98b87.zip b/.yarn/cache/on-exit-leak-free-npm-2.1.0-b522202aa1-7334d98b87.zip
new file mode 100644
index 000000000..2644e65a5
Binary files /dev/null and b/.yarn/cache/on-exit-leak-free-npm-2.1.0-b522202aa1-7334d98b87.zip differ
diff --git a/.yarn/cache/os-locale-npm-5.0.0-8dc4f13073-294bbb412f.zip b/.yarn/cache/os-locale-npm-5.0.0-8dc4f13073-294bbb412f.zip
new file mode 100644
index 000000000..41eeed2de
Binary files /dev/null and b/.yarn/cache/os-locale-npm-5.0.0-8dc4f13073-294bbb412f.zip differ
diff --git a/.yarn/cache/os-shim-npm-0.1.3-03d492dbf1-2172be6da7.zip b/.yarn/cache/os-shim-npm-0.1.3-03d492dbf1-2172be6da7.zip
new file mode 100644
index 000000000..03bf02aa2
Binary files /dev/null and b/.yarn/cache/os-shim-npm-0.1.3-03d492dbf1-2172be6da7.zip differ
diff --git a/.yarn/cache/p-is-promise-npm-2.1.0-47a48ac6a0-c9a8248c8b.zip b/.yarn/cache/p-is-promise-npm-2.1.0-47a48ac6a0-c9a8248c8b.zip
new file mode 100644
index 000000000..6a596900b
Binary files /dev/null and b/.yarn/cache/p-is-promise-npm-2.1.0-47a48ac6a0-c9a8248c8b.zip differ
diff --git a/.yarn/cache/pako-npm-1.0.11-b8f1b69d3e-1be2bfa1f8.zip b/.yarn/cache/pako-npm-1.0.11-b8f1b69d3e-1be2bfa1f8.zip
new file mode 100644
index 000000000..4a6767ba8
Binary files /dev/null and b/.yarn/cache/pako-npm-1.0.11-b8f1b69d3e-1be2bfa1f8.zip differ
diff --git a/.yarn/cache/parse-json-npm-6.0.2-31d0bf29b6-b33d93abf8.zip b/.yarn/cache/parse-json-npm-6.0.2-31d0bf29b6-b33d93abf8.zip
new file mode 100644
index 000000000..95fd095f9
Binary files /dev/null and b/.yarn/cache/parse-json-npm-6.0.2-31d0bf29b6-b33d93abf8.zip differ
diff --git a/.yarn/cache/parse5-htmlparser2-tree-adapter-npm-7.0.0-38e1b3a974-fc5d01e077.zip b/.yarn/cache/parse5-htmlparser2-tree-adapter-npm-7.0.0-38e1b3a974-fc5d01e077.zip
new file mode 100644
index 000000000..4bbb84fec
Binary files /dev/null and b/.yarn/cache/parse5-htmlparser2-tree-adapter-npm-7.0.0-38e1b3a974-fc5d01e077.zip differ
diff --git a/.yarn/cache/performance-now-npm-2.1.0-45e3ce7e49-534e641aa8.zip b/.yarn/cache/performance-now-npm-2.1.0-45e3ce7e49-534e641aa8.zip
new file mode 100644
index 000000000..fa9ee04fe
Binary files /dev/null and b/.yarn/cache/performance-now-npm-2.1.0-45e3ce7e49-534e641aa8.zip differ
diff --git a/.yarn/cache/pino-abstract-transport-npm-1.0.0-a566611547-05dd0eda52.zip b/.yarn/cache/pino-abstract-transport-npm-1.0.0-a566611547-05dd0eda52.zip
new file mode 100644
index 000000000..2f1379fb5
Binary files /dev/null and b/.yarn/cache/pino-abstract-transport-npm-1.0.0-a566611547-05dd0eda52.zip differ
diff --git a/.yarn/cache/pino-npm-8.8.0-827ae46607-6925646922.zip b/.yarn/cache/pino-npm-8.8.0-827ae46607-6925646922.zip
new file mode 100644
index 000000000..f65cda349
Binary files /dev/null and b/.yarn/cache/pino-npm-8.8.0-827ae46607-6925646922.zip differ
diff --git a/.yarn/cache/pino-std-serializers-npm-6.1.0-849611aa5b-5e42327c24.zip b/.yarn/cache/pino-std-serializers-npm-6.1.0-849611aa5b-5e42327c24.zip
new file mode 100644
index 000000000..77fe020ac
Binary files /dev/null and b/.yarn/cache/pino-std-serializers-npm-6.1.0-849611aa5b-5e42327c24.zip differ
diff --git a/.yarn/cache/process-warning-npm-2.1.0-9e82ce3778-2f22a3b8ec.zip b/.yarn/cache/process-warning-npm-2.1.0-9e82ce3778-2f22a3b8ec.zip
new file mode 100644
index 000000000..7276e605e
Binary files /dev/null and b/.yarn/cache/process-warning-npm-2.1.0-9e82ce3778-2f22a3b8ec.zip differ
diff --git a/.yarn/cache/promise-toolbox-npm-0.21.0-2d31e797e6-549ad21b64.zip b/.yarn/cache/promise-toolbox-npm-0.21.0-2d31e797e6-549ad21b64.zip
new file mode 100644
index 000000000..e08d92182
Binary files /dev/null and b/.yarn/cache/promise-toolbox-npm-0.21.0-2d31e797e6-549ad21b64.zip differ
diff --git a/.yarn/cache/qs-npm-6.5.3-90b2635484-6f20bf08ca.zip b/.yarn/cache/qs-npm-6.5.3-90b2635484-6f20bf08ca.zip
new file mode 100644
index 000000000..6714c3cff
Binary files /dev/null and b/.yarn/cache/qs-npm-6.5.3-90b2635484-6f20bf08ca.zip differ
diff --git a/.yarn/cache/queue-npm-6.0.2-ebbcf599cf-ebc2363924.zip b/.yarn/cache/queue-npm-6.0.2-ebbcf599cf-ebc2363924.zip
new file mode 100644
index 000000000..df189658c
Binary files /dev/null and b/.yarn/cache/queue-npm-6.0.2-ebbcf599cf-ebc2363924.zip differ
diff --git a/.yarn/cache/quick-format-unescaped-npm-4.0.4-7e22c9b7dc-7bc32b9935.zip b/.yarn/cache/quick-format-unescaped-npm-4.0.4-7e22c9b7dc-7bc32b9935.zip
new file mode 100644
index 000000000..8ce3d464d
Binary files /dev/null and b/.yarn/cache/quick-format-unescaped-npm-4.0.4-7e22c9b7dc-7bc32b9935.zip differ
diff --git a/.yarn/cache/readable-stream-npm-2.3.8-67a94c2cb1-6564546703.zip b/.yarn/cache/readable-stream-npm-2.3.8-67a94c2cb1-6564546703.zip
new file mode 100644
index 000000000..e52c545b6
Binary files /dev/null and b/.yarn/cache/readable-stream-npm-2.3.8-67a94c2cb1-6564546703.zip differ
diff --git a/.yarn/cache/readable-stream-npm-4.3.0-11c60fc281-5f8d5fc1eb.zip b/.yarn/cache/readable-stream-npm-4.3.0-11c60fc281-5f8d5fc1eb.zip
new file mode 100644
index 000000000..22e4f11ee
Binary files /dev/null and b/.yarn/cache/readable-stream-npm-4.3.0-11c60fc281-5f8d5fc1eb.zip differ
diff --git a/.yarn/cache/real-require-npm-0.2.0-7f69dbc7b6-fa060f19f2.zip b/.yarn/cache/real-require-npm-0.2.0-7f69dbc7b6-fa060f19f2.zip
new file mode 100644
index 000000000..49f436546
Binary files /dev/null and b/.yarn/cache/real-require-npm-0.2.0-7f69dbc7b6-fa060f19f2.zip differ
diff --git a/.yarn/cache/relaxed-json-npm-1.0.3-3e2d5087af-339d119f3c.zip b/.yarn/cache/relaxed-json-npm-1.0.3-3e2d5087af-339d119f3c.zip
new file mode 100644
index 000000000..613488b57
Binary files /dev/null and b/.yarn/cache/relaxed-json-npm-1.0.3-3e2d5087af-339d119f3c.zip differ
diff --git a/.yarn/cache/request-npm-2.88.2-f4a57c72c4-4e112c087f.zip b/.yarn/cache/request-npm-2.88.2-f4a57c72c4-4e112c087f.zip
new file mode 100644
index 000000000..9e727dd45
Binary files /dev/null and b/.yarn/cache/request-npm-2.88.2-f4a57c72c4-4e112c087f.zip differ
diff --git a/.yarn/cache/safe-stable-stringify-npm-2.4.2-26d12f7937-0324ba2e40.zip b/.yarn/cache/safe-stable-stringify-npm-2.4.2-26d12f7937-0324ba2e40.zip
new file mode 100644
index 000000000..c7b65f5a3
Binary files /dev/null and b/.yarn/cache/safe-stable-stringify-npm-2.4.2-26d12f7937-0324ba2e40.zip differ
diff --git a/.yarn/cache/setimmediate-npm-1.0.5-54587459b6-c9a6f2c5b5.zip b/.yarn/cache/setimmediate-npm-1.0.5-54587459b6-c9a6f2c5b5.zip
new file mode 100644
index 000000000..ec2aee7ef
Binary files /dev/null and b/.yarn/cache/setimmediate-npm-1.0.5-54587459b6-c9a6f2c5b5.zip differ
diff --git a/.yarn/cache/sha.js-npm-2.4.11-14868df4ca-ebd3f59d4b.zip b/.yarn/cache/sha.js-npm-2.4.11-14868df4ca-ebd3f59d4b.zip
new file mode 100644
index 000000000..6d55cc05a
Binary files /dev/null and b/.yarn/cache/sha.js-npm-2.4.11-14868df4ca-ebd3f59d4b.zip differ
diff --git a/.yarn/cache/shell-quote-npm-1.7.3-76a78a6d77-aca58e73a3.zip b/.yarn/cache/shell-quote-npm-1.7.3-76a78a6d77-aca58e73a3.zip
new file mode 100644
index 000000000..ab19bd91e
Binary files /dev/null and b/.yarn/cache/shell-quote-npm-1.7.3-76a78a6d77-aca58e73a3.zip differ
diff --git a/.yarn/cache/shellwords-npm-0.1.1-a091a78197-8d73a5e986.zip b/.yarn/cache/shellwords-npm-0.1.1-a091a78197-8d73a5e986.zip
new file mode 100644
index 000000000..bfef172bb
Binary files /dev/null and b/.yarn/cache/shellwords-npm-0.1.1-a091a78197-8d73a5e986.zip differ
diff --git a/.yarn/cache/sign-addon-npm-5.2.0-ec719c0ded-ef66bfc1e5.zip b/.yarn/cache/sign-addon-npm-5.2.0-ec719c0ded-ef66bfc1e5.zip
new file mode 100644
index 000000000..db5d4cb16
Binary files /dev/null and b/.yarn/cache/sign-addon-npm-5.2.0-ec719c0ded-ef66bfc1e5.zip differ
diff --git a/.yarn/cache/sonic-boom-npm-3.2.1-ddac56c4bc-674d0af31c.zip b/.yarn/cache/sonic-boom-npm-3.2.1-ddac56c4bc-674d0af31c.zip
new file mode 100644
index 000000000..3aefc17c7
Binary files /dev/null and b/.yarn/cache/sonic-boom-npm-3.2.1-ddac56c4bc-674d0af31c.zip differ
diff --git a/.yarn/cache/spawn-sync-npm-1.0.15-ae144228c0-a280ff895b.zip b/.yarn/cache/spawn-sync-npm-1.0.15-ae144228c0-a280ff895b.zip
new file mode 100644
index 000000000..5ced32c3d
Binary files /dev/null and b/.yarn/cache/spawn-sync-npm-1.0.15-ae144228c0-a280ff895b.zip differ
diff --git a/.yarn/cache/split2-npm-4.1.0-1c1a4bd984-ec581597cb.zip b/.yarn/cache/split2-npm-4.1.0-1c1a4bd984-ec581597cb.zip
new file mode 100644
index 000000000..fd70b1d46
Binary files /dev/null and b/.yarn/cache/split2-npm-4.1.0-1c1a4bd984-ec581597cb.zip differ
diff --git a/.yarn/cache/sshpk-npm-1.17.0-95f17f597f-ba109f65c8.zip b/.yarn/cache/sshpk-npm-1.17.0-95f17f597f-ba109f65c8.zip
new file mode 100644
index 000000000..f3b155f79
Binary files /dev/null and b/.yarn/cache/sshpk-npm-1.17.0-95f17f597f-ba109f65c8.zip differ
diff --git a/.yarn/cache/stream-to-array-npm-2.3.0-eaa32c31d8-7feaf63b38.zip b/.yarn/cache/stream-to-array-npm-2.3.0-eaa32c31d8-7feaf63b38.zip
new file mode 100644
index 000000000..b8434b32b
Binary files /dev/null and b/.yarn/cache/stream-to-array-npm-2.3.0-eaa32c31d8-7feaf63b38.zip differ
diff --git a/.yarn/cache/stream-to-promise-npm-3.0.0-93b8af42c6-206905dc40.zip b/.yarn/cache/stream-to-promise-npm-3.0.0-93b8af42c6-206905dc40.zip
new file mode 100644
index 000000000..c117cd7a5
Binary files /dev/null and b/.yarn/cache/stream-to-promise-npm-3.0.0-93b8af42c6-206905dc40.zip differ
diff --git a/.yarn/cache/strip-bom-buf-npm-2.0.0-c9cdc07889-f2cd19e336.zip b/.yarn/cache/strip-bom-buf-npm-2.0.0-c9cdc07889-f2cd19e336.zip
new file mode 100644
index 000000000..8da937e85
Binary files /dev/null and b/.yarn/cache/strip-bom-buf-npm-2.0.0-c9cdc07889-f2cd19e336.zip differ
diff --git a/.yarn/cache/strip-bom-npm-5.0.0-b3bef6eb04-60a38bb756.zip b/.yarn/cache/strip-bom-npm-5.0.0-b3bef6eb04-60a38bb756.zip
new file mode 100644
index 000000000..ba8856e7a
Binary files /dev/null and b/.yarn/cache/strip-bom-npm-5.0.0-b3bef6eb04-60a38bb756.zip differ
diff --git a/.yarn/cache/strip-bom-stream-npm-4.0.0-a8b84a835b-376717a110.zip b/.yarn/cache/strip-bom-stream-npm-4.0.0-a8b84a835b-376717a110.zip
new file mode 100644
index 000000000..f309d1ddf
Binary files /dev/null and b/.yarn/cache/strip-bom-stream-npm-4.0.0-a8b84a835b-376717a110.zip differ
diff --git a/.yarn/cache/strip-json-comments-npm-5.0.0-8c82f56132-99cad07ccc.zip b/.yarn/cache/strip-json-comments-npm-5.0.0-8c82f56132-99cad07ccc.zip
new file mode 100644
index 000000000..ea0392fb0
Binary files /dev/null and b/.yarn/cache/strip-json-comments-npm-5.0.0-8c82f56132-99cad07ccc.zip differ
diff --git a/.yarn/cache/thenify-all-npm-1.6.0-96309bbc8b-dba7cc8a23.zip b/.yarn/cache/thenify-all-npm-1.6.0-96309bbc8b-dba7cc8a23.zip
new file mode 100644
index 000000000..59a2bc6ce
Binary files /dev/null and b/.yarn/cache/thenify-all-npm-1.6.0-96309bbc8b-dba7cc8a23.zip differ
diff --git a/.yarn/cache/thenify-npm-3.3.1-030bedb22c-84e1b804bf.zip b/.yarn/cache/thenify-npm-3.3.1-030bedb22c-84e1b804bf.zip
new file mode 100644
index 000000000..4710c403b
Binary files /dev/null and b/.yarn/cache/thenify-npm-3.3.1-030bedb22c-84e1b804bf.zip differ
diff --git a/.yarn/cache/thread-stream-npm-2.3.0-77ee67ae69-e9ea58f9f3.zip b/.yarn/cache/thread-stream-npm-2.3.0-77ee67ae69-e9ea58f9f3.zip
new file mode 100644
index 000000000..c63c104a3
Binary files /dev/null and b/.yarn/cache/thread-stream-npm-2.3.0-77ee67ae69-e9ea58f9f3.zip differ
diff --git a/.yarn/cache/tosource-npm-1.0.0-718e0580f4-683fc64700.zip b/.yarn/cache/tosource-npm-1.0.0-718e0580f4-683fc64700.zip
new file mode 100644
index 000000000..798d03020
Binary files /dev/null and b/.yarn/cache/tosource-npm-1.0.0-718e0580f4-683fc64700.zip differ
diff --git a/.yarn/cache/tough-cookie-npm-2.5.0-79a2fe43fe-16a8cd0902.zip b/.yarn/cache/tough-cookie-npm-2.5.0-79a2fe43fe-16a8cd0902.zip
new file mode 100644
index 000000000..74e27e746
Binary files /dev/null and b/.yarn/cache/tough-cookie-npm-2.5.0-79a2fe43fe-16a8cd0902.zip differ
diff --git a/.yarn/cache/tweetnacl-npm-0.14.5-a3f766c0d1-6061daba17.zip b/.yarn/cache/tweetnacl-npm-0.14.5-a3f766c0d1-6061daba17.zip
new file mode 100644
index 000000000..2811987db
Binary files /dev/null and b/.yarn/cache/tweetnacl-npm-0.14.5-a3f766c0d1-6061daba17.zip differ
diff --git a/.yarn/cache/universalify-npm-1.0.0-eff81409f3-095a808f2b.zip b/.yarn/cache/universalify-npm-1.0.0-eff81409f3-095a808f2b.zip
new file mode 100644
index 000000000..8b929f6b3
Binary files /dev/null and b/.yarn/cache/universalify-npm-1.0.0-eff81409f3-095a808f2b.zip differ
diff --git a/.yarn/cache/verror-npm-1.10.0-c3f839c579-c431df0bed.zip b/.yarn/cache/verror-npm-1.10.0-c3f839c579-c431df0bed.zip
new file mode 100644
index 000000000..e81972bde
Binary files /dev/null and b/.yarn/cache/verror-npm-1.10.0-c3f839c579-c431df0bed.zip differ
diff --git a/.yarn/cache/web-ext-npm-7.5.0-a87ab1a9cc-bac491442d.zip b/.yarn/cache/web-ext-npm-7.5.0-a87ab1a9cc-bac491442d.zip
new file mode 100644
index 000000000..4088acfed
Binary files /dev/null and b/.yarn/cache/web-ext-npm-7.5.0-a87ab1a9cc-bac491442d.zip differ
diff --git a/.yarn/cache/web-streams-polyfill-npm-3.2.1-835bd3857e-b119c78574.zip b/.yarn/cache/web-streams-polyfill-npm-3.2.1-835bd3857e-b119c78574.zip
new file mode 100644
index 000000000..847691560
Binary files /dev/null and b/.yarn/cache/web-streams-polyfill-npm-3.2.1-835bd3857e-b119c78574.zip differ
diff --git a/.yarn/cache/webextension-polyfill-npm-0.10.0-3b4d48beb6-4a59036bda.zip b/.yarn/cache/webextension-polyfill-npm-0.10.0-3b4d48beb6-4a59036bda.zip
new file mode 100644
index 000000000..523cff94b
Binary files /dev/null and b/.yarn/cache/webextension-polyfill-npm-0.10.0-3b4d48beb6-4a59036bda.zip differ
diff --git a/.yarn/cache/when-npm-3.7.7-311c8cc73d-e8cf81790c.zip b/.yarn/cache/when-npm-3.7.7-311c8cc73d-e8cf81790c.zip
new file mode 100644
index 000000000..aaca31674
Binary files /dev/null and b/.yarn/cache/when-npm-3.7.7-311c8cc73d-e8cf81790c.zip differ
diff --git a/.yarn/cache/which-npm-1.2.4-49f14c792e-988abcbf80.zip b/.yarn/cache/which-npm-1.2.4-49f14c792e-988abcbf80.zip
new file mode 100644
index 000000000..31f067927
Binary files /dev/null and b/.yarn/cache/which-npm-1.2.4-49f14c792e-988abcbf80.zip differ
diff --git a/.yarn/cache/winreg-npm-0.0.12-eb734971cc-633109ab71.zip b/.yarn/cache/winreg-npm-0.0.12-eb734971cc-633109ab71.zip
new file mode 100644
index 000000000..8f2e145bb
Binary files /dev/null and b/.yarn/cache/winreg-npm-0.0.12-eb734971cc-633109ab71.zip differ
diff --git a/.yarn/cache/ws-npm-8.12.0-4e21348613-818ff3f874.zip b/.yarn/cache/ws-npm-8.12.0-4e21348613-818ff3f874.zip
new file mode 100644
index 000000000..82f80c611
Binary files /dev/null and b/.yarn/cache/ws-npm-8.12.0-4e21348613-818ff3f874.zip differ
diff --git a/.yarn/cache/zip-dir-npm-2.0.0-f7824a7a83-bfcfdefe41.zip b/.yarn/cache/zip-dir-npm-2.0.0-f7824a7a83-bfcfdefe41.zip
new file mode 100644
index 000000000..5231b5a91
Binary files /dev/null and b/.yarn/cache/zip-dir-npm-2.0.0-f7824a7a83-bfcfdefe41.zip differ
diff --git a/packages/clipper/.eslintrc.js b/packages/clipper/.eslintrc.js
new file mode 100644
index 000000000..7403da73e
--- /dev/null
+++ b/packages/clipper/.eslintrc.js
@@ -0,0 +1,16 @@
+module.exports = {
+ root: true,
+ extends: ['../../common.eslintrc.js'],
+ parserOptions: {
+ project: './tsconfig.json',
+ tsconfigRootDir: __dirname,
+ },
+ ignorePatterns: ['**/*.spec.ts', '__mocks__'],
+ plugins: ['@typescript-eslint', 'prettier'],
+ env: {
+ browser: true,
+ },
+ globals: {
+ __WEB_VERSION__: true,
+ },
+}
diff --git a/packages/clipper/.gitignore b/packages/clipper/.gitignore
new file mode 100644
index 000000000..21e375427
--- /dev/null
+++ b/packages/clipper/.gitignore
@@ -0,0 +1,2 @@
+dist
+web-ext-artifacts
diff --git a/packages/clipper/README.md b/packages/clipper/README.md
new file mode 100644
index 000000000..2ab99a366
--- /dev/null
+++ b/packages/clipper/README.md
@@ -0,0 +1,53 @@
+# @standardnotes/clipper
+
+## Development flow
+
+- Run `yarn watch:web` in a terminal to watch changes in the `@standardnotes/web` package
+
+### Chromium
+
+- Run `yarn watch-mv3` in another terminal to watch changes in the extension source
+
+#### "Load unpacked" method
+
+- Go to `chrome://extensions`
+- Enable `Developer mode`
+- Click "Load unpacked" and select the `dist` folder in the current package
+
+You might need to manually press the reload button when you make changers
+
+#### CLI method
+
+```console
+yarn run-chromium --chromium-profile=PATH/TO/PROFILE
+```
+
+- You might need to specify the Chromium binary using the `--chromium-binary` argument
+- Running `yarn run-chromium` without the `--chromium-profile` argument will create a new temporary profile every time
+
+This method will automatically reload the extension when you make changes
+
+### Firefox
+
+- Run `yarn watch` in another terminal to watch changes in the extension source
+
+```console
+yarn run-firefox --firefox-profile=PATH/TO/PROFILE
+```
+
+- You might need to specify the Firefox binary using the `--firefox` or `-f` argument
+- Running `yarn run-firefox` without the `--firefox-profile` argument will create a new temporary profile every time
+
+## Build
+
+## Firefox
+
+```console
+yarn build-firefox
+```
+
+## Chromium
+
+```console
+yarn build-chromium
+```
diff --git a/packages/clipper/images/icon128.png b/packages/clipper/images/icon128.png
new file mode 100644
index 000000000..1a4a9a778
Binary files /dev/null and b/packages/clipper/images/icon128.png differ
diff --git a/packages/clipper/images/icon16.png b/packages/clipper/images/icon16.png
new file mode 100644
index 000000000..769f04756
Binary files /dev/null and b/packages/clipper/images/icon16.png differ
diff --git a/packages/clipper/images/icon32.png b/packages/clipper/images/icon32.png
new file mode 100644
index 000000000..a0304c438
Binary files /dev/null and b/packages/clipper/images/icon32.png differ
diff --git a/packages/clipper/images/icon48.png b/packages/clipper/images/icon48.png
new file mode 100644
index 000000000..0787ba87a
Binary files /dev/null and b/packages/clipper/images/icon48.png differ
diff --git a/packages/clipper/images/icon96.png b/packages/clipper/images/icon96.png
new file mode 100644
index 000000000..ae94aa534
Binary files /dev/null and b/packages/clipper/images/icon96.png differ
diff --git a/packages/clipper/package.json b/packages/clipper/package.json
new file mode 100644
index 000000000..6b3678763
--- /dev/null
+++ b/packages/clipper/package.json
@@ -0,0 +1,35 @@
+{
+ "name": "@standardnotes/clipper",
+ "description": "Web clipper browser extension for Standard Notes",
+ "version": "1.0.1",
+ "scripts": {
+ "build-mv2": "yarn clean && webpack --config ./webpack.config.prod.js",
+ "build-mv3": "yarn clean && MANIFEST_VERSION=3 webpack --config ./webpack.config.prod.js",
+ "watch:web": "BUILD_TARGET=clipper yarn workspace @standardnotes/web run watch",
+ "watch-mv2": "webpack --config ./webpack.config.dev.js --watch",
+ "watch-mv3": "MANIFEST_VERSION=3 webpack --config ./webpack.config.dev.js --watch",
+ "build-firefox": "BUILD_TARGET=clipper yarn build:web && EXT_TARGET=firefox yarn build-mv2 && web-ext build --source-dir ./dist --overwrite-dest",
+ "build-chromium": "BUILD_TARGET=clipper yarn build:web && EXT_TARGET=chromium yarn build-mv3 && web-ext build --source-dir ./dist --overwrite-dest",
+ "run-firefox": "web-ext run -t firefox-desktop --keep-profile-changes -s ./dist",
+ "run-chromium": "web-ext run -t chromium --keep-profile-changes -s ./dist",
+ "lint": "eslint src/ && yarn tsc",
+ "lint:fix": "eslint src/ --fix",
+ "tsc": "tsc --project tsconfig.json",
+ "clean": "rm -rf dist"
+ },
+ "devDependencies": {
+ "@types/webextension-polyfill": "^0.10.0",
+ "babel-loader": "^9.1.0",
+ "copy-webpack-plugin": "11.0.0",
+ "eslint": "^8.29.0",
+ "eslint-config-prettier": "^8.5.0",
+ "ts-loader": "^9.4.2",
+ "typescript": "*",
+ "web-ext": "^7.5.0",
+ "webextension-polyfill": "^0.10.0",
+ "webpack": "*"
+ },
+ "dependencies": {
+ "@mozilla/readability": "^0.4.2"
+ }
+}
diff --git a/packages/clipper/src/background/background.ts b/packages/clipper/src/background/background.ts
new file mode 100644
index 000000000..0ada6e1c7
--- /dev/null
+++ b/packages/clipper/src/background/background.ts
@@ -0,0 +1,32 @@
+import { runtime, action, browserAction, windows, storage } from 'webextension-polyfill'
+import { RuntimeMessage, RuntimeMessageTypes } from '../types/message'
+
+const isFirefox = navigator.userAgent.indexOf('Firefox/') !== -1
+
+const openPopupAndClipSelection = async (payload: { title: string; content: string }) => {
+ await storage.local.set({ clip: payload })
+
+ if (isFirefox) {
+ const popupURL = await browserAction.getPopup({})
+ await windows.create({
+ type: 'detached_panel',
+ url: popupURL,
+ width: 350,
+ height: 450,
+ })
+ return
+ }
+
+ const openPopup = runtime.getManifest().manifest_version === 3 ? action.openPopup : browserAction.openPopup
+
+ void openPopup()
+}
+
+runtime.onMessage.addListener((message: RuntimeMessage) => {
+ if (message.type === RuntimeMessageTypes.OpenPopupWithSelection) {
+ if (!message.payload) {
+ return
+ }
+ void openPopupAndClipSelection(message.payload)
+ }
+})
diff --git a/packages/clipper/src/content/content.ts b/packages/clipper/src/content/content.ts
new file mode 100644
index 000000000..3b4fe1e09
--- /dev/null
+++ b/packages/clipper/src/content/content.ts
@@ -0,0 +1,119 @@
+import { runtime } from 'webextension-polyfill'
+import { Readability } from '@mozilla/readability'
+import { RuntimeMessage, RuntimeMessageTypes } from '../types/message'
+
+let isSelectingNodeForClipping = false
+
+runtime.onMessage.addListener(async (message: RuntimeMessage) => {
+ switch (message.type) {
+ case RuntimeMessageTypes.StartNodeSelection: {
+ isSelectingNodeForClipping = true
+ return
+ }
+ case RuntimeMessageTypes.HasSelection: {
+ const selection = window.getSelection()
+
+ if (!selection) {
+ return false
+ }
+
+ if (selection.rangeCount < 1) {
+ return false
+ }
+
+ const range = selection.getRangeAt(0)
+
+ return !range.collapsed
+ }
+ case RuntimeMessageTypes.GetSelection: {
+ const selection = window.getSelection()
+
+ if (!selection || selection.rangeCount < 1) {
+ return
+ }
+
+ const range = selection.getRangeAt(0)
+
+ const result = document.createElement('div')
+ result.appendChild(range.cloneContents())
+
+ return { title: document.title, content: result.innerHTML, url: window.location.href }
+ }
+ case RuntimeMessageTypes.GetFullPage: {
+ return { title: document.title, content: document.body.innerHTML, url: window.location.href }
+ }
+ case RuntimeMessageTypes.GetArticle: {
+ const documentClone = document.cloneNode(true) as Document
+ const article = new Readability(documentClone).parse()
+ if (!article) {
+ return
+ }
+ return { title: article.title, content: article.content, url: window.location.href }
+ }
+ default:
+ return
+ }
+})
+
+const nodeOverlayElement = document.createElement('div')
+nodeOverlayElement.style.border = '2px solid #086dd6'
+nodeOverlayElement.style.position = 'fixed'
+nodeOverlayElement.style.top = '0'
+nodeOverlayElement.style.left = '0'
+nodeOverlayElement.style.zIndex = '69420'
+nodeOverlayElement.style.width = window.innerWidth + 'px'
+nodeOverlayElement.style.height = window.innerHeight - 4 + 'px'
+nodeOverlayElement.style.pointerEvents = 'none'
+nodeOverlayElement.style.visibility = 'hidden'
+nodeOverlayElement.id = 'sn-clipper-node-overlay'
+
+document.body.appendChild(nodeOverlayElement)
+
+window.addEventListener('mousemove', (event) => {
+ if (!isSelectingNodeForClipping) {
+ nodeOverlayElement.style.visibility = 'hidden'
+ return
+ }
+ nodeOverlayElement.style.visibility = ''
+ const { target } = event
+ if (!target || !(target instanceof HTMLElement)) {
+ return
+ }
+ const targetRect = target.getBoundingClientRect()
+ nodeOverlayElement.style.width = targetRect.width + 'px'
+ nodeOverlayElement.style.height = targetRect.height + 'px'
+ nodeOverlayElement.style.transform = `translate3d(${targetRect.x}px, ${targetRect.y}px, 0)`
+})
+
+const disableNodeSelection = () => {
+ isSelectingNodeForClipping = false
+ nodeOverlayElement.style.visibility = 'hidden'
+}
+
+window.addEventListener('click', (event) => {
+ if (!isSelectingNodeForClipping) {
+ return
+ }
+ disableNodeSelection()
+ event.preventDefault()
+ event.stopPropagation()
+ const { target } = event
+ if (!target || !(target instanceof HTMLElement)) {
+ return
+ }
+ const title = document.title
+ const content = target.outerHTML
+ void runtime.sendMessage({
+ type: RuntimeMessageTypes.OpenPopupWithSelection,
+ payload: { title, content, url: window.location.href },
+ } as RuntimeMessage)
+})
+
+window.addEventListener('keydown', (event) => {
+ if (!isSelectingNodeForClipping) {
+ return
+ }
+ if (event.key === 'Escape') {
+ disableNodeSelection()
+ }
+})
diff --git a/packages/clipper/src/manifest.v2.json b/packages/clipper/src/manifest.v2.json
new file mode 100644
index 000000000..61c929017
--- /dev/null
+++ b/packages/clipper/src/manifest.v2.json
@@ -0,0 +1,33 @@
+{
+ "manifest_version": 2,
+ "name": "Standard Notes Clipper",
+ "description": "Web clipper for Standard Notes",
+ "permissions": ["activeTab", "storage"],
+ "browser_action": {
+ "default_popup": "popup/index.html?route=extension"
+ },
+ "background": {
+ "scripts": ["background.js"],
+ "persistent": false
+ },
+ "content_scripts": [
+ {
+ "matches": ["http://*/*", "https://*/*"],
+ "js": ["content.js"]
+ }
+ ],
+ "content_security_policy": "default-src 'self'; script-src 'self' 'wasm-eval' 'wasm-unsafe-eval'; worker-src blob:; connect-src * data: blob:; style-src 'unsafe-inline' 'self'; frame-src * blob:; img-src * data: blob:;",
+ "icons": {
+ "16": "images/icon16.png",
+ "32": "images/icon32.png",
+ "48": "images/icon48.png",
+ "96": "images/icon96.png",
+ "128": "images/icon128.png"
+ },
+ "browser_specific_settings": {
+ "gecko": {
+ "id": "{9f917dfe-accd-4d3a-9685-33c3ac0ca643}",
+ "strict_min_version": "48.0"
+ }
+ }
+}
diff --git a/packages/clipper/src/manifest.v3.json b/packages/clipper/src/manifest.v3.json
new file mode 100644
index 000000000..3fcedeb0b
--- /dev/null
+++ b/packages/clipper/src/manifest.v3.json
@@ -0,0 +1,34 @@
+{
+ "manifest_version": 3,
+ "name": "Standard Notes Clipper",
+ "description": "Web clipper for Standard Notes",
+ "permissions": ["activeTab", "storage"],
+ "action": {
+ "default_popup": "popup/index.html?route=extension"
+ },
+ "background": {
+ "service_worker": "background.js"
+ },
+ "content_scripts": [
+ {
+ "matches": ["http://*/*", "https://*/*"],
+ "js": ["content.js"]
+ }
+ ],
+ "icons": {
+ "16": "images/icon16.png",
+ "32": "images/icon32.png",
+ "48": "images/icon48.png",
+ "96": "images/icon96.png",
+ "128": "images/icon128.png"
+ },
+ "content_security_policy": {
+ "extension_pages": "default-src 'self'; script-src 'self' 'wasm-unsafe-eval'; connect-src * data: blob:; style-src 'unsafe-inline' 'self'; frame-src * blob:; img-src * data: blob:;"
+ },
+ "browser_specific_settings": {
+ "gecko": {
+ "id": "{9f917dfe-accd-4d3a-9685-33c3ac0ca643}",
+ "strict_min_version": "48.0"
+ }
+ }
+}
diff --git a/packages/clipper/src/popup/globals.js b/packages/clipper/src/popup/globals.js
new file mode 100644
index 000000000..a53b73828
--- /dev/null
+++ b/packages/clipper/src/popup/globals.js
@@ -0,0 +1,7 @@
+window.defaultSyncServer = 'https://api.standardnotes.com'
+window.defaultFilesHost = 'https://files.standardnotes.com'
+window.enabledUnfinishedFeatures = false
+window.websocketUrl = 'wss://sockets.standardnotes.com'
+window.purchaseUrl = 'https://standardnotes.com/purchase'
+window.plansUrl = 'https://standardnotes.com/plans'
+window.dashboardUrl = 'https://standardnotes.com/dashboard'
diff --git a/packages/clipper/src/popup/index.html b/packages/clipper/src/popup/index.html
new file mode 100644
index 000000000..2d0753c6e
--- /dev/null
+++ b/packages/clipper/src/popup/index.html
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+ Standard Notes
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/clipper/src/types/message.ts b/packages/clipper/src/types/message.ts
new file mode 100644
index 000000000..881f27870
--- /dev/null
+++ b/packages/clipper/src/types/message.ts
@@ -0,0 +1,36 @@
+export const RuntimeMessageTypes = {
+ GetArticle: 'get-article',
+ GetSelection: 'get-selection',
+ HasSelection: 'has-selection',
+ GetFullPage: 'get-full-page',
+ OpenPopupWithSelection: 'open-popup-with-selection',
+ StartNodeSelection: 'start-node-selection',
+} as const
+
+export type RuntimeMessageType = typeof RuntimeMessageTypes[keyof typeof RuntimeMessageTypes]
+
+type MessagesWithClipPayload = typeof RuntimeMessageTypes.OpenPopupWithSelection
+
+export type ClipPayload = {
+ title: string
+ content: string
+ url: string
+}
+
+export type RuntimeMessageReturnTypes = {
+ [RuntimeMessageTypes.GetArticle]: ClipPayload
+ [RuntimeMessageTypes.GetSelection]: ClipPayload
+ [RuntimeMessageTypes.HasSelection]: boolean
+ [RuntimeMessageTypes.GetFullPage]: ClipPayload
+ [RuntimeMessageTypes.OpenPopupWithSelection]: void
+ [RuntimeMessageTypes.StartNodeSelection]: void
+}
+
+export type RuntimeMessage =
+ | {
+ type: MessagesWithClipPayload
+ payload: ClipPayload
+ }
+ | {
+ type: Exclude
+ }
diff --git a/packages/clipper/src/utils/sendMessageToActiveTab.ts b/packages/clipper/src/utils/sendMessageToActiveTab.ts
new file mode 100644
index 000000000..b4c94d11b
--- /dev/null
+++ b/packages/clipper/src/utils/sendMessageToActiveTab.ts
@@ -0,0 +1,14 @@
+import { tabs } from 'webextension-polyfill'
+import { RuntimeMessageReturnTypes, RuntimeMessageType } from '../types/message'
+
+export default async function sendMessageToActiveTab(
+ type: T,
+): Promise {
+ const [activeTab] = await tabs.query({ active: true, currentWindow: true, windowType: 'normal' })
+
+ if (!activeTab || !activeTab.id) {
+ return
+ }
+
+ return await tabs.sendMessage(activeTab.id, { type })
+}
diff --git a/packages/clipper/tsconfig.json b/packages/clipper/tsconfig.json
new file mode 100644
index 000000000..f4532a3fa
--- /dev/null
+++ b/packages/clipper/tsconfig.json
@@ -0,0 +1,28 @@
+{
+ "compilerOptions": {
+ "skipLibCheck": true,
+ "lib": [
+ "ES2022"
+ ],
+ "target": "ES2019",
+ "module": "commonjs",
+ "moduleResolution": "node",
+ "allowJs": true,
+ "noEmit": true,
+ "strict": true,
+ "isolatedModules": false,
+ "esModuleInterop": true,
+ "resolveJsonModule": true,
+ "declaration": true,
+ "newLine": "lf",
+ "declarationDir": "dist/@types",
+ "baseUrl": ".",
+ "typeRoots": [
+ "../../node_modules/@types",
+ "node_modules/@types"
+ ],
+ },
+ "include": [
+ "src/**/*"
+ ]
+}
\ No newline at end of file
diff --git a/packages/clipper/webpack.config.dev.js b/packages/clipper/webpack.config.dev.js
new file mode 100644
index 000000000..ed0895dd6
--- /dev/null
+++ b/packages/clipper/webpack.config.dev.js
@@ -0,0 +1,9 @@
+const { merge } = require('webpack-merge')
+const config = require('./webpack.config.js')
+
+module.exports = (env, argv) => {
+ return merge(config(env, argv), {
+ mode: 'development',
+ devtool: 'cheap-module-source-map',
+ })
+}
diff --git a/packages/clipper/webpack.config.js b/packages/clipper/webpack.config.js
new file mode 100644
index 000000000..5aa33dbf4
--- /dev/null
+++ b/packages/clipper/webpack.config.js
@@ -0,0 +1,69 @@
+const CopyPlugin = require('copy-webpack-plugin')
+const package = require('./package.json')
+
+module.exports = (env, argv) => {
+ const isProd = !argv.watch
+
+ return {
+ entry: {
+ background: './src/background/background.ts',
+ content: './src/content/content.ts',
+ },
+ output: {
+ filename: '[name].js',
+ },
+ plugins: [
+ new CopyPlugin({
+ patterns: [
+ {
+ from: '../web/dist',
+ to: './web',
+ globOptions: {
+ ignore: isProd ? ['**/app.js.map'] : [],
+ },
+ },
+ {
+ from: `./src/manifest.v${process.env.MANIFEST_VERSION || 2}.json`,
+ to: './manifest.json',
+ transform: (content) => {
+ const manifest = JSON.parse(content.toString())
+ manifest.version = package.version
+ if (process.env.EXT_TARGET === 'chromium') {
+ delete manifest.browser_specific_settings
+ }
+ return JSON.stringify(manifest, null, 2)
+ },
+ },
+ {
+ from: './src/popup',
+ to: './popup',
+ },
+ {
+ from: './images',
+ to: './images',
+ },
+ ],
+ }),
+ ],
+ resolve: {
+ extensions: ['.ts', '.js'],
+ },
+ module: {
+ rules: [
+ {
+ test: /\.(js|ts)$/,
+ exclude: /node_modules/,
+ use: [
+ 'babel-loader',
+ {
+ loader: 'ts-loader',
+ options: {
+ transpileOnly: true,
+ },
+ },
+ ],
+ },
+ ],
+ },
+ }
+}
diff --git a/packages/clipper/webpack.config.prod.js b/packages/clipper/webpack.config.prod.js
new file mode 100644
index 000000000..e5ef3c428
--- /dev/null
+++ b/packages/clipper/webpack.config.prod.js
@@ -0,0 +1,9 @@
+const { merge } = require('webpack-merge')
+const config = require('./webpack.config.js')
+
+module.exports = (env, argv) => {
+ return merge(config(env, argv), {
+ mode: 'production',
+ devtool: 'source-map',
+ })
+}
diff --git a/packages/features/src/Domain/Feature/FeatureIdentifier.ts b/packages/features/src/Domain/Feature/FeatureIdentifier.ts
index c2c489e38..51a5fcae1 100644
--- a/packages/features/src/Domain/Feature/FeatureIdentifier.ts
+++ b/packages/features/src/Domain/Feature/FeatureIdentifier.ts
@@ -36,6 +36,8 @@ export enum FeatureIdentifier {
TaskEditor = 'org.standardnotes.simple-task-editor',
TokenVaultEditor = 'org.standardnotes.token-vault',
+ Extension = 'org.standardnotes.extension',
+
DeprecatedMarkdownVisualEditor = 'org.standardnotes.markdown-visual-editor',
DeprecatedBoldEditor = 'org.standardnotes.bold-editor',
DeprecatedMarkdownBasicEditor = 'org.standardnotes.simple-markdown-editor',
diff --git a/packages/features/src/Domain/Lists/ClientFeatures.ts b/packages/features/src/Domain/Lists/ClientFeatures.ts
index 1cee8a03b..f42576a72 100644
--- a/packages/features/src/Domain/Lists/ClientFeatures.ts
+++ b/packages/features/src/Domain/Lists/ClientFeatures.ts
@@ -43,5 +43,13 @@ export function clientFeatures(): FeatureDescription[] {
permission_name: PermissionName.Files,
description: '',
},
+ {
+ name: 'Extension',
+ availableInSubscriptions: [SubscriptionName.PlusPlan, SubscriptionName.ProPlan],
+ availableInRoles: [RoleName.NAMES.PlusUser, RoleName.NAMES.ProUser],
+ identifier: FeatureIdentifier.Extension,
+ permission_name: PermissionName.Extension,
+ description: '',
+ },
]
}
diff --git a/packages/features/src/Domain/Permission/PermissionName.ts b/packages/features/src/Domain/Permission/PermissionName.ts
index c690dc4cf..b278a16a9 100644
--- a/packages/features/src/Domain/Permission/PermissionName.ts
+++ b/packages/features/src/Domain/Permission/PermissionName.ts
@@ -40,4 +40,5 @@ export enum PermissionName {
UniversalSecondFactor = 'server:universal-second-factor',
SubscriptionSharing = 'server:subscription-sharing',
SuperEditor = 'editor:super-editor',
+ Extension = 'app:extension',
}
diff --git a/packages/icons/src/Icons/ic-sn-logo-full.svg b/packages/icons/src/Icons/ic-sn-logo-full.svg
index f1e356972..f86390de8 100644
--- a/packages/icons/src/Icons/ic-sn-logo-full.svg
+++ b/packages/icons/src/Icons/ic-sn-logo-full.svg
@@ -1,4 +1,4 @@
-