@omega.js/extension 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (684) hide show
  1. package/LICENSE +98 -0
  2. package/README.md +194 -0
  3. package/bin/omega +2 -0
  4. package/bin/omega-extension +2 -0
  5. package/bin/omg +2 -0
  6. package/dist/assets/css/bundles/.gitkeep +0 -0
  7. package/dist/assets/css/components/content/index.scss +5 -0
  8. package/dist/assets/css/components/options/index.scss +9 -0
  9. package/dist/assets/css/components/pages/index.scss +5 -0
  10. package/dist/assets/css/components/popup/index.scss +9 -0
  11. package/dist/assets/css/core/_animations.scss +64 -0
  12. package/dist/assets/css/core/_fontawesome.scss +146 -0
  13. package/dist/assets/css/core/_initialize.scss +23 -0
  14. package/dist/assets/css/core/_utilities.scss +80 -0
  15. package/dist/assets/css/omega-extension.scss +43 -0
  16. package/dist/assets/css/shell/_index.scss +207 -0
  17. package/dist/assets/css/tokens/_index.scss +166 -0
  18. package/dist/assets/js/core/app-shell.js +136 -0
  19. package/dist/assets/js/libs/initialize-tooltips.js +31 -0
  20. package/dist/assets/js/libs/recaptcha.js +94 -0
  21. package/dist/assets/js/main.js +4 -0
  22. package/dist/assets/themes/_template/README.md +115 -0
  23. package/dist/assets/themes/_template/_config.scss +60 -0
  24. package/dist/assets/themes/_template/_theme.js +14 -0
  25. package/dist/assets/themes/_template/_theme.scss +28 -0
  26. package/dist/assets/themes/_template/css/base/_root.scss +19 -0
  27. package/dist/assets/themes/_template/css/components/_components.scss +23 -0
  28. package/dist/assets/themes/base/README.md +5 -0
  29. package/dist/assets/themes/base/_components/data/org-chart/component.html +33 -0
  30. package/dist/assets/themes/base/_components/data/org-chart/component.json5 +33 -0
  31. package/dist/assets/themes/base/_components/data/org-chart/component.scss +183 -0
  32. package/dist/assets/themes/base/_components/heading/masthead/component.html +22 -0
  33. package/dist/assets/themes/base/_components/heading/masthead/component.json5 +30 -0
  34. package/dist/assets/themes/base/_components/heading/section-head/component.html +18 -0
  35. package/dist/assets/themes/base/_components/heading/section-head/component.json5 +27 -0
  36. package/dist/assets/themes/base/_components/pricing/features/component.html +29 -0
  37. package/dist/assets/themes/base/_components/pricing/features/component.json5 +30 -0
  38. package/dist/assets/themes/base/_hero/orbit/index.html +30 -0
  39. package/dist/assets/themes/base/_hero/orbit/script.js +33 -0
  40. package/dist/assets/themes/base/_hero/orbit/style.scss +133 -0
  41. package/dist/assets/themes/base/_includes/admin/sections/sidebar.html +3 -0
  42. package/dist/assets/themes/base/_includes/admin/sections/topbar.html +3 -0
  43. package/dist/assets/themes/base/_includes/backend/sections/sidebar.html +3 -0
  44. package/dist/assets/themes/base/_includes/backend/sections/topbar.html +3 -0
  45. package/dist/assets/themes/base/_includes/frontend/components/connection-card.html +49 -0
  46. package/dist/assets/themes/base/_includes/frontend/components/post-card.html +54 -0
  47. package/dist/assets/themes/base/_includes/frontend/sections/account-connections.html +42 -0
  48. package/dist/assets/themes/base/_includes/frontend/sections/account-section-header.html +11 -0
  49. package/dist/assets/themes/base/_includes/frontend/sections/footer.html +154 -0
  50. package/dist/assets/themes/base/_includes/frontend/sections/nav.html +276 -0
  51. package/dist/assets/themes/base/_includes/global/sections/account.html +72 -0
  52. package/dist/assets/themes/base/_includes/global/sections/app-sidebar.html +248 -0
  53. package/dist/assets/themes/base/_includes/global/sections/app-topbar.html +228 -0
  54. package/dist/assets/themes/base/_includes/global/sections/page-header.html +99 -0
  55. package/dist/assets/themes/base/_layouts/admin/core/minimal-viewport-locked.html +22 -0
  56. package/dist/assets/themes/base/_layouts/admin/core/minimal.html +23 -0
  57. package/dist/assets/themes/base/_layouts/backend/core/base.html +57 -0
  58. package/dist/assets/themes/base/_layouts/backend/core/minimal-viewport-locked.html +32 -0
  59. package/dist/assets/themes/base/_layouts/backend/core/minimal.html +32 -0
  60. package/dist/assets/themes/base/_layouts/backend/pages/dashboard/index.html +230 -0
  61. package/dist/assets/themes/base/_layouts/frontend/core/base.html +31 -0
  62. package/dist/assets/themes/base/_layouts/frontend/core/cover.html +40 -0
  63. package/dist/assets/themes/base/_layouts/frontend/core/minimal.html +47 -0
  64. package/dist/assets/themes/base/_layouts/frontend/pages/404.html +54 -0
  65. package/dist/assets/themes/base/_layouts/frontend/pages/about.html +144 -0
  66. package/dist/assets/themes/base/_layouts/frontend/pages/account/index.html +2104 -0
  67. package/dist/assets/themes/base/_layouts/frontend/pages/alternatives/alternative.html +319 -0
  68. package/dist/assets/themes/base/_layouts/frontend/pages/alternatives/index.html +186 -0
  69. package/dist/assets/themes/base/_layouts/frontend/pages/app.html +142 -0
  70. package/dist/assets/themes/base/_layouts/frontend/pages/auth/reset.html +53 -0
  71. package/dist/assets/themes/base/_layouts/frontend/pages/auth/signin.html +90 -0
  72. package/dist/assets/themes/base/_layouts/frontend/pages/auth/signup.html +141 -0
  73. package/dist/assets/themes/base/_layouts/frontend/pages/auth/token.html +44 -0
  74. package/dist/assets/themes/base/_layouts/frontend/pages/blog/categories/category.html +88 -0
  75. package/dist/assets/themes/base/_layouts/frontend/pages/blog/categories/index.html +88 -0
  76. package/dist/assets/themes/base/_layouts/frontend/pages/blog/index.html +255 -0
  77. package/dist/assets/themes/base/_layouts/frontend/pages/blog/post.html +261 -0
  78. package/dist/assets/themes/base/_layouts/frontend/pages/blog/tags/index.html +84 -0
  79. package/dist/assets/themes/base/_layouts/frontend/pages/blog/tags/tag.html +88 -0
  80. package/dist/assets/themes/base/_layouts/frontend/pages/collection/category.html +72 -0
  81. package/dist/assets/themes/base/_layouts/frontend/pages/collection/document.html +54 -0
  82. package/dist/assets/themes/base/_layouts/frontend/pages/collection/index.html +84 -0
  83. package/dist/assets/themes/base/_layouts/frontend/pages/connections/callback.html +55 -0
  84. package/dist/assets/themes/base/_layouts/frontend/pages/contact.html +214 -0
  85. package/dist/assets/themes/base/_layouts/frontend/pages/download.html +793 -0
  86. package/dist/assets/themes/base/_layouts/frontend/pages/extension/index.html +253 -0
  87. package/dist/assets/themes/base/_layouts/frontend/pages/extension/installed.html +198 -0
  88. package/dist/assets/themes/base/_layouts/frontend/pages/feedback.html +171 -0
  89. package/dist/assets/themes/base/_layouts/frontend/pages/index.html +66 -0
  90. package/dist/assets/themes/base/_layouts/frontend/pages/legal/document.html +78 -0
  91. package/dist/assets/themes/base/_layouts/frontend/pages/payment/checkout.html +459 -0
  92. package/dist/assets/themes/base/_layouts/frontend/pages/payment/confirmation.html +131 -0
  93. package/dist/assets/themes/base/_layouts/frontend/pages/portal/email-preferences.html +104 -0
  94. package/dist/assets/themes/base/_layouts/frontend/pages/pricing.html +596 -0
  95. package/dist/assets/themes/base/_layouts/frontend/pages/status.html +361 -0
  96. package/dist/assets/themes/base/_layouts/frontend/pages/team/index.html +210 -0
  97. package/dist/assets/themes/base/_layouts/frontend/pages/team/member.html +125 -0
  98. package/dist/assets/themes/base/_layouts/frontend/pages/updates/index.html +119 -0
  99. package/dist/assets/themes/base/_layouts/frontend/pages/updates/update.html +118 -0
  100. package/dist/assets/themes/base/_sections/about/hero/section.html +68 -0
  101. package/dist/assets/themes/base/_sections/about/hero/section.json5 +58 -0
  102. package/dist/assets/themes/base/_sections/about/letter/section.html +60 -0
  103. package/dist/assets/themes/base/_sections/about/letter/section.json5 +56 -0
  104. package/dist/assets/themes/base/_sections/about/photo-band/section.html +24 -0
  105. package/dist/assets/themes/base/_sections/about/photo-band/section.json5 +23 -0
  106. package/dist/assets/themes/base/_sections/about/principles/section.html +17 -0
  107. package/dist/assets/themes/base/_sections/about/principles/section.json5 +34 -0
  108. package/dist/assets/themes/base/_sections/about/timeline/section.html +20 -0
  109. package/dist/assets/themes/base/_sections/about/timeline/section.json5 +34 -0
  110. package/dist/assets/themes/base/_sections/marketing/bento/section.html +91 -0
  111. package/dist/assets/themes/base/_sections/marketing/bento/section.json5 +152 -0
  112. package/dist/assets/themes/base/_sections/marketing/cta/section.html +44 -0
  113. package/dist/assets/themes/base/_sections/marketing/cta/section.json5 +47 -0
  114. package/dist/assets/themes/base/_sections/marketing/faq/section.html +52 -0
  115. package/dist/assets/themes/base/_sections/marketing/faq/section.json5 +68 -0
  116. package/dist/assets/themes/base/_sections/marketing/hero/section.html +349 -0
  117. package/dist/assets/themes/base/_sections/marketing/hero/section.json5 +335 -0
  118. package/dist/assets/themes/base/_sections/marketing/newsletter-cta/section.html +38 -0
  119. package/dist/assets/themes/base/_sections/marketing/newsletter-cta/section.js +86 -0
  120. package/dist/assets/themes/base/_sections/marketing/newsletter-cta/section.json5 +29 -0
  121. package/dist/assets/themes/base/_sections/marketing/pricing-cards/section.html +115 -0
  122. package/dist/assets/themes/base/_sections/marketing/pricing-cards/section.json5 +72 -0
  123. package/dist/assets/themes/base/_sections/marketing/product-demo/section.html +62 -0
  124. package/dist/assets/themes/base/_sections/marketing/product-demo/section.js +44 -0
  125. package/dist/assets/themes/base/_sections/marketing/product-demo/section.json5 +52 -0
  126. package/dist/assets/themes/base/_sections/marketing/prose/section.html +22 -0
  127. package/dist/assets/themes/base/_sections/marketing/prose/section.json5 +41 -0
  128. package/dist/assets/themes/base/_sections/marketing/showcase/section.html +35 -0
  129. package/dist/assets/themes/base/_sections/marketing/showcase/section.json5 +52 -0
  130. package/dist/assets/themes/base/_sections/marketing/stats/section.html +32 -0
  131. package/dist/assets/themes/base/_sections/marketing/stats/section.json5 +44 -0
  132. package/dist/assets/themes/base/_sections/marketing/testimonials/section.html +54 -0
  133. package/dist/assets/themes/base/_sections/marketing/testimonials/section.json5 +70 -0
  134. package/dist/assets/themes/base/_sections/marketing/trusted-by/section.html +30 -0
  135. package/dist/assets/themes/base/_sections/marketing/trusted-by/section.json5 +38 -0
  136. package/dist/assets/themes/base/_sections/verts/unit/section.html +7 -0
  137. package/dist/assets/themes/base/_sections/verts/unit/section.js +22 -0
  138. package/dist/assets/themes/base/_sections/verts/unit/section.json5 +24 -0
  139. package/dist/assets/themes/base/_sections/verts/unit/section.scss +24 -0
  140. package/dist/assets/themes/base/_theme.js +13 -0
  141. package/dist/assets/themes/base/_theme.scss +4 -0
  142. package/dist/assets/themes/bootstrap/_theme.js +16 -0
  143. package/dist/assets/themes/bootstrap/_theme.scss +11 -0
  144. package/dist/assets/themes/bootstrap/js/index.esm.js +19 -0
  145. package/dist/assets/themes/bootstrap/js/index.umd.js +34 -0
  146. package/dist/assets/themes/bootstrap/js/src/alert.js +87 -0
  147. package/dist/assets/themes/bootstrap/js/src/base-component.js +86 -0
  148. package/dist/assets/themes/bootstrap/js/src/button.js +72 -0
  149. package/dist/assets/themes/bootstrap/js/src/carousel.js +474 -0
  150. package/dist/assets/themes/bootstrap/js/src/collapse.js +297 -0
  151. package/dist/assets/themes/bootstrap/js/src/dom/data.js +55 -0
  152. package/dist/assets/themes/bootstrap/js/src/dom/event-handler.js +317 -0
  153. package/dist/assets/themes/bootstrap/js/src/dom/manipulator.js +71 -0
  154. package/dist/assets/themes/bootstrap/js/src/dom/selector-engine.js +126 -0
  155. package/dist/assets/themes/bootstrap/js/src/dropdown.js +458 -0
  156. package/dist/assets/themes/bootstrap/js/src/modal.js +378 -0
  157. package/dist/assets/themes/bootstrap/js/src/offcanvas.js +282 -0
  158. package/dist/assets/themes/bootstrap/js/src/popover.js +97 -0
  159. package/dist/assets/themes/bootstrap/js/src/scrollspy.js +296 -0
  160. package/dist/assets/themes/bootstrap/js/src/tab.js +315 -0
  161. package/dist/assets/themes/bootstrap/js/src/toast.js +224 -0
  162. package/dist/assets/themes/bootstrap/js/src/tooltip.js +632 -0
  163. package/dist/assets/themes/bootstrap/js/src/util/backdrop.js +151 -0
  164. package/dist/assets/themes/bootstrap/js/src/util/component-functions.js +35 -0
  165. package/dist/assets/themes/bootstrap/js/src/util/config.js +65 -0
  166. package/dist/assets/themes/bootstrap/js/src/util/focustrap.js +115 -0
  167. package/dist/assets/themes/bootstrap/js/src/util/index.js +306 -0
  168. package/dist/assets/themes/bootstrap/js/src/util/sanitizer.js +117 -0
  169. package/dist/assets/themes/bootstrap/js/src/util/scrollbar.js +114 -0
  170. package/dist/assets/themes/bootstrap/js/src/util/swipe.js +146 -0
  171. package/dist/assets/themes/bootstrap/js/src/util/template-factory.js +160 -0
  172. package/dist/assets/themes/bootstrap/overrides/_accordion.scss +21 -0
  173. package/dist/assets/themes/bootstrap/overrides/_avatars.scss +51 -0
  174. package/dist/assets/themes/bootstrap/overrides/_blog-images.scss +45 -0
  175. package/dist/assets/themes/bootstrap/overrides/_buttons-adaptive.scss +141 -0
  176. package/dist/assets/themes/bootstrap/overrides/_color-shades.scss +25 -0
  177. package/dist/assets/themes/bootstrap/overrides/_cursor-utilities.scss +13 -0
  178. package/dist/assets/themes/bootstrap/overrides/_index.scss +30 -0
  179. package/dist/assets/themes/bootstrap/overrides/_links.scss +26 -0
  180. package/dist/assets/themes/bootstrap/overrides/_soft-colors.scss +99 -0
  181. package/dist/assets/themes/bootstrap/overrides/_spacing-extended.scss +74 -0
  182. package/dist/assets/themes/bootstrap/overrides/_spinners.scss +22 -0
  183. package/dist/assets/themes/bootstrap/overrides/_typography-utilities.scss +40 -0
  184. package/dist/assets/themes/bootstrap/scss/_accordion.scss +153 -0
  185. package/dist/assets/themes/bootstrap/scss/_alert.scss +68 -0
  186. package/dist/assets/themes/bootstrap/scss/_badge.scss +38 -0
  187. package/dist/assets/themes/bootstrap/scss/_breadcrumb.scss +40 -0
  188. package/dist/assets/themes/bootstrap/scss/_button-group.scss +147 -0
  189. package/dist/assets/themes/bootstrap/scss/_buttons.scss +216 -0
  190. package/dist/assets/themes/bootstrap/scss/_card.scss +238 -0
  191. package/dist/assets/themes/bootstrap/scss/_carousel.scss +226 -0
  192. package/dist/assets/themes/bootstrap/scss/_close.scss +66 -0
  193. package/dist/assets/themes/bootstrap/scss/_containers.scss +41 -0
  194. package/dist/assets/themes/bootstrap/scss/_dropdown.scss +250 -0
  195. package/dist/assets/themes/bootstrap/scss/_forms.scss +9 -0
  196. package/dist/assets/themes/bootstrap/scss/_functions.scss +302 -0
  197. package/dist/assets/themes/bootstrap/scss/_grid.scss +39 -0
  198. package/dist/assets/themes/bootstrap/scss/_helpers.scss +12 -0
  199. package/dist/assets/themes/bootstrap/scss/_images.scss +42 -0
  200. package/dist/assets/themes/bootstrap/scss/_list-group.scss +199 -0
  201. package/dist/assets/themes/bootstrap/scss/_maps.scss +174 -0
  202. package/dist/assets/themes/bootstrap/scss/_mixins.scss +42 -0
  203. package/dist/assets/themes/bootstrap/scss/_modal.scss +240 -0
  204. package/dist/assets/themes/bootstrap/scss/_nav.scss +197 -0
  205. package/dist/assets/themes/bootstrap/scss/_navbar.scss +289 -0
  206. package/dist/assets/themes/bootstrap/scss/_offcanvas.scss +147 -0
  207. package/dist/assets/themes/bootstrap/scss/_pagination.scss +109 -0
  208. package/dist/assets/themes/bootstrap/scss/_placeholders.scss +51 -0
  209. package/dist/assets/themes/bootstrap/scss/_popover.scss +196 -0
  210. package/dist/assets/themes/bootstrap/scss/_progress.scss +68 -0
  211. package/dist/assets/themes/bootstrap/scss/_reboot.scss +611 -0
  212. package/dist/assets/themes/bootstrap/scss/_root.scss +187 -0
  213. package/dist/assets/themes/bootstrap/scss/_spinners.scss +85 -0
  214. package/dist/assets/themes/bootstrap/scss/_tables.scss +171 -0
  215. package/dist/assets/themes/bootstrap/scss/_toasts.scss +73 -0
  216. package/dist/assets/themes/bootstrap/scss/_tooltip.scss +119 -0
  217. package/dist/assets/themes/bootstrap/scss/_transitions.scss +27 -0
  218. package/dist/assets/themes/bootstrap/scss/_type.scss +106 -0
  219. package/dist/assets/themes/bootstrap/scss/_utilities.scss +806 -0
  220. package/dist/assets/themes/bootstrap/scss/_variables-dark.scss +102 -0
  221. package/dist/assets/themes/bootstrap/scss/_variables.scss +1753 -0
  222. package/dist/assets/themes/bootstrap/scss/bootstrap-grid.scss +62 -0
  223. package/dist/assets/themes/bootstrap/scss/bootstrap-reboot.scss +10 -0
  224. package/dist/assets/themes/bootstrap/scss/bootstrap-utilities.scss +19 -0
  225. package/dist/assets/themes/bootstrap/scss/bootstrap.scss +52 -0
  226. package/dist/assets/themes/bootstrap/scss/forms/_floating-labels.scss +97 -0
  227. package/dist/assets/themes/bootstrap/scss/forms/_form-check.scss +189 -0
  228. package/dist/assets/themes/bootstrap/scss/forms/_form-control.scss +214 -0
  229. package/dist/assets/themes/bootstrap/scss/forms/_form-range.scss +91 -0
  230. package/dist/assets/themes/bootstrap/scss/forms/_form-select.scss +80 -0
  231. package/dist/assets/themes/bootstrap/scss/forms/_form-text.scss +11 -0
  232. package/dist/assets/themes/bootstrap/scss/forms/_input-group.scss +132 -0
  233. package/dist/assets/themes/bootstrap/scss/forms/_labels.scss +36 -0
  234. package/dist/assets/themes/bootstrap/scss/forms/_validation.scss +12 -0
  235. package/dist/assets/themes/bootstrap/scss/helpers/_clearfix.scss +3 -0
  236. package/dist/assets/themes/bootstrap/scss/helpers/_color-bg.scss +7 -0
  237. package/dist/assets/themes/bootstrap/scss/helpers/_colored-links.scss +30 -0
  238. package/dist/assets/themes/bootstrap/scss/helpers/_focus-ring.scss +5 -0
  239. package/dist/assets/themes/bootstrap/scss/helpers/_icon-link.scss +25 -0
  240. package/dist/assets/themes/bootstrap/scss/helpers/_position.scss +36 -0
  241. package/dist/assets/themes/bootstrap/scss/helpers/_ratio.scss +26 -0
  242. package/dist/assets/themes/bootstrap/scss/helpers/_stacks.scss +15 -0
  243. package/dist/assets/themes/bootstrap/scss/helpers/_stretched-link.scss +15 -0
  244. package/dist/assets/themes/bootstrap/scss/helpers/_text-truncation.scss +7 -0
  245. package/dist/assets/themes/bootstrap/scss/helpers/_visually-hidden.scss +8 -0
  246. package/dist/assets/themes/bootstrap/scss/helpers/_vr.scss +8 -0
  247. package/dist/assets/themes/bootstrap/scss/mixins/_alert.scss +18 -0
  248. package/dist/assets/themes/bootstrap/scss/mixins/_backdrop.scss +14 -0
  249. package/dist/assets/themes/bootstrap/scss/mixins/_banner.scss +7 -0
  250. package/dist/assets/themes/bootstrap/scss/mixins/_border-radius.scss +78 -0
  251. package/dist/assets/themes/bootstrap/scss/mixins/_box-shadow.scss +18 -0
  252. package/dist/assets/themes/bootstrap/scss/mixins/_breakpoints.scss +127 -0
  253. package/dist/assets/themes/bootstrap/scss/mixins/_buttons.scss +70 -0
  254. package/dist/assets/themes/bootstrap/scss/mixins/_caret.scss +69 -0
  255. package/dist/assets/themes/bootstrap/scss/mixins/_clearfix.scss +9 -0
  256. package/dist/assets/themes/bootstrap/scss/mixins/_color-mode.scss +21 -0
  257. package/dist/assets/themes/bootstrap/scss/mixins/_color-scheme.scss +7 -0
  258. package/dist/assets/themes/bootstrap/scss/mixins/_container.scss +11 -0
  259. package/dist/assets/themes/bootstrap/scss/mixins/_deprecate.scss +10 -0
  260. package/dist/assets/themes/bootstrap/scss/mixins/_forms.scss +163 -0
  261. package/dist/assets/themes/bootstrap/scss/mixins/_gradients.scss +47 -0
  262. package/dist/assets/themes/bootstrap/scss/mixins/_grid.scss +151 -0
  263. package/dist/assets/themes/bootstrap/scss/mixins/_image.scss +16 -0
  264. package/dist/assets/themes/bootstrap/scss/mixins/_list-group.scss +26 -0
  265. package/dist/assets/themes/bootstrap/scss/mixins/_lists.scss +7 -0
  266. package/dist/assets/themes/bootstrap/scss/mixins/_pagination.scss +10 -0
  267. package/dist/assets/themes/bootstrap/scss/mixins/_reset-text.scss +17 -0
  268. package/dist/assets/themes/bootstrap/scss/mixins/_resize.scss +6 -0
  269. package/dist/assets/themes/bootstrap/scss/mixins/_table-variants.scss +24 -0
  270. package/dist/assets/themes/bootstrap/scss/mixins/_text-truncate.scss +8 -0
  271. package/dist/assets/themes/bootstrap/scss/mixins/_transition.scss +26 -0
  272. package/dist/assets/themes/bootstrap/scss/mixins/_utilities.scss +97 -0
  273. package/dist/assets/themes/bootstrap/scss/mixins/_visually-hidden.scss +38 -0
  274. package/dist/assets/themes/bootstrap/scss/tests/jasmine.js +16 -0
  275. package/dist/assets/themes/bootstrap/scss/tests/mixins/_auto-import-of-variables-dark.test.scss +7 -0
  276. package/dist/assets/themes/bootstrap/scss/tests/mixins/_color-modes.test.scss +69 -0
  277. package/dist/assets/themes/bootstrap/scss/tests/mixins/_media-query-color-mode-full.test.scss +8 -0
  278. package/dist/assets/themes/bootstrap/scss/tests/mixins/_utilities.test.scss +393 -0
  279. package/dist/assets/themes/bootstrap/scss/tests/sass-true/register.js +14 -0
  280. package/dist/assets/themes/bootstrap/scss/tests/sass-true/runner.js +17 -0
  281. package/dist/assets/themes/bootstrap/scss/tests/utilities/_api.test.scss +75 -0
  282. package/dist/assets/themes/bootstrap/scss/utilities/_api.scss +47 -0
  283. package/dist/assets/themes/bootstrap/scss/vendor/_rfs.scss +348 -0
  284. package/dist/assets/themes/classy/README.md +89 -0
  285. package/dist/assets/themes/classy/_config.scss +245 -0
  286. package/dist/assets/themes/classy/_theme.js +31 -0
  287. package/dist/assets/themes/classy/_theme.scss +57 -0
  288. package/dist/assets/themes/classy/css/app/_panels.scss +183 -0
  289. package/dist/assets/themes/classy/css/base/_fonts.scss +79 -0
  290. package/dist/assets/themes/classy/css/base/_no-raise.scss +49 -0
  291. package/dist/assets/themes/classy/css/base/_root.scss +113 -0
  292. package/dist/assets/themes/classy/css/base/_typography.scss +154 -0
  293. package/dist/assets/themes/classy/css/base/_utilities.scss +284 -0
  294. package/dist/assets/themes/classy/css/components/_alerts.scss +51 -0
  295. package/dist/assets/themes/classy/css/components/_badges.scss +46 -0
  296. package/dist/assets/themes/classy/css/components/_buttons.scss +175 -0
  297. package/dist/assets/themes/classy/css/components/_cards.scss +41 -0
  298. package/dist/assets/themes/classy/css/components/_dropdowns.scss +48 -0
  299. package/dist/assets/themes/classy/css/components/_forms.scss +171 -0
  300. package/dist/assets/themes/classy/css/components/_receipt.scss +45 -0
  301. package/dist/assets/themes/classy/css/layout/_footer.scss +298 -0
  302. package/dist/assets/themes/classy/css/layout/_general.scss +209 -0
  303. package/dist/assets/themes/classy/css/layout/_nav.scss +154 -0
  304. package/dist/assets/themes/classy/css/layout/_shell.scss +458 -0
  305. package/dist/assets/themes/classy/css/marketing/_bento.scss +238 -0
  306. package/dist/assets/themes/classy/css/marketing/_content.scss +1328 -0
  307. package/dist/assets/themes/classy/css/marketing/_downloads.scss +246 -0
  308. package/dist/assets/themes/classy/css/marketing/_hero.scss +311 -0
  309. package/dist/assets/themes/classy/css/marketing/_sections.scss +649 -0
  310. package/dist/assets/themes/classy/css/pages/404/index.scss +67 -0
  311. package/dist/assets/themes/classy/css/pages/_auth.scss +235 -0
  312. package/dist/assets/themes/classy/css/pages/admin/firebase/index.scss +22 -0
  313. package/dist/assets/themes/classy/css/pages/blog/[slug].scss +56 -0
  314. package/dist/assets/themes/classy/css/pages/cookies.scss +2 -0
  315. package/dist/assets/themes/classy/css/pages/dashboard/account/index.scss +31 -0
  316. package/dist/assets/themes/classy/css/pages/feedback/index.scss +39 -0
  317. package/dist/assets/themes/classy/css/pages/legal/_document.scss +192 -0
  318. package/dist/assets/themes/classy/css/pages/payment/checkout/index.scss +585 -0
  319. package/dist/assets/themes/classy/css/pages/payment/confirmation/index.scss +9 -0
  320. package/dist/assets/themes/classy/css/pages/privacy.scss +2 -0
  321. package/dist/assets/themes/classy/css/pages/status/index.scss +164 -0
  322. package/dist/assets/themes/classy/css/pages/terms.scss +2 -0
  323. package/dist/assets/themes/classy/css/pages/updates/index.scss +128 -0
  324. package/dist/assets/themes/classy/fonts/inter-italic-latin-ext.woff2 +0 -0
  325. package/dist/assets/themes/classy/fonts/inter-italic-latin.woff2 +0 -0
  326. package/dist/assets/themes/classy/fonts/inter-normal-latin-ext.woff2 +0 -0
  327. package/dist/assets/themes/classy/fonts/inter-normal-latin.woff2 +0 -0
  328. package/dist/assets/themes/classy/fonts/newsreader-italic-latin-ext.woff2 +0 -0
  329. package/dist/assets/themes/classy/fonts/newsreader-italic-latin.woff2 +0 -0
  330. package/dist/assets/themes/classy/fonts/newsreader-normal-latin-ext.woff2 +0 -0
  331. package/dist/assets/themes/classy/fonts/newsreader-normal-latin.woff2 +0 -0
  332. package/dist/assets/themes/classy/js/hero-demo-form.js +56 -0
  333. package/dist/assets/themes/neobrutalism/README.md +118 -0
  334. package/dist/assets/themes/neobrutalism/_config.scss +139 -0
  335. package/dist/assets/themes/neobrutalism/_layouts/frontend/core/base.html +30 -0
  336. package/dist/assets/themes/neobrutalism/_layouts/frontend/pages/index.html +275 -0
  337. package/dist/assets/themes/neobrutalism/_theme.js +24 -0
  338. package/dist/assets/themes/neobrutalism/_theme.scss +61 -0
  339. package/dist/assets/themes/neobrutalism/css/base/_mixins.scss +46 -0
  340. package/dist/assets/themes/neobrutalism/css/base/_root.scss +169 -0
  341. package/dist/assets/themes/neobrutalism/css/base/_typography.scss +61 -0
  342. package/dist/assets/themes/neobrutalism/css/base/_utilities.scss +89 -0
  343. package/dist/assets/themes/neobrutalism/css/components/_billing-toggle.scss +74 -0
  344. package/dist/assets/themes/neobrutalism/css/components/_buttons.scss +148 -0
  345. package/dist/assets/themes/neobrutalism/css/components/_cards.scss +47 -0
  346. package/dist/assets/themes/neobrutalism/css/components/_forms.scss +88 -0
  347. package/dist/assets/themes/neobrutalism/css/components/_marketing.scss +244 -0
  348. package/dist/assets/themes/neobrutalism/css/layout/_general.scss +213 -0
  349. package/dist/assets/themes/neobrutalism/css/layout/_navigation.scss +171 -0
  350. package/dist/assets/themes/neobrutalism/css/pages/index.scss +203 -0
  351. package/dist/assets/themes/neobrutalism/css/pages/pricing/index.scss +58 -0
  352. package/dist/assets/themes/neobrutalism/css/pages/test/libraries/layers/index.scss +7 -0
  353. package/dist/assets/themes/neobrutalism/js/pages/test/libraries/layers/index.js +9 -0
  354. package/dist/assets/themes/newsflash/README.md +117 -0
  355. package/dist/assets/themes/newsflash/_components/heading/lede/component.html +14 -0
  356. package/dist/assets/themes/newsflash/_components/heading/lede/component.json5 +23 -0
  357. package/dist/assets/themes/newsflash/_components/heading/rule-head/component.html +17 -0
  358. package/dist/assets/themes/newsflash/_components/heading/rule-head/component.json5 +23 -0
  359. package/dist/assets/themes/newsflash/_components/news/byline/component.html +12 -0
  360. package/dist/assets/themes/newsflash/_components/news/byline/component.json5 +18 -0
  361. package/dist/assets/themes/newsflash/_components/news/story-card/component.html +25 -0
  362. package/dist/assets/themes/newsflash/_components/news/story-card/component.json5 +21 -0
  363. package/dist/assets/themes/newsflash/_config.scss +147 -0
  364. package/dist/assets/themes/newsflash/_layouts/frontend/core/base.html +51 -0
  365. package/dist/assets/themes/newsflash/_layouts/frontend/pages/blog/index.html +299 -0
  366. package/dist/assets/themes/newsflash/_layouts/frontend/pages/blog/post.html +235 -0
  367. package/dist/assets/themes/newsflash/_layouts/frontend/pages/index.html +328 -0
  368. package/dist/assets/themes/newsflash/_sections/marketing/desks/section.html +39 -0
  369. package/dist/assets/themes/newsflash/_sections/marketing/desks/section.json5 +49 -0
  370. package/dist/assets/themes/newsflash/_sections/marketing/newsletter-cta/section.html +103 -0
  371. package/dist/assets/themes/newsflash/_sections/marketing/newsletter-cta/section.json5 +50 -0
  372. package/dist/assets/themes/newsflash/_sections/marketing/rundown/section.html +28 -0
  373. package/dist/assets/themes/newsflash/_sections/marketing/rundown/section.json5 +40 -0
  374. package/dist/assets/themes/newsflash/_theme.js +24 -0
  375. package/dist/assets/themes/newsflash/_theme.scss +70 -0
  376. package/dist/assets/themes/newsflash/css/base/_fonts.scss +80 -0
  377. package/dist/assets/themes/newsflash/css/base/_mixins.scss +51 -0
  378. package/dist/assets/themes/newsflash/css/base/_root.scss +257 -0
  379. package/dist/assets/themes/newsflash/css/base/_typography.scss +49 -0
  380. package/dist/assets/themes/newsflash/css/base/_utilities.scss +122 -0
  381. package/dist/assets/themes/newsflash/css/components/_badges.scss +65 -0
  382. package/dist/assets/themes/newsflash/css/components/_billing-toggle.scss +61 -0
  383. package/dist/assets/themes/newsflash/css/components/_buttons.scss +139 -0
  384. package/dist/assets/themes/newsflash/css/components/_cards.scss +47 -0
  385. package/dist/assets/themes/newsflash/css/components/_editorial.scss +173 -0
  386. package/dist/assets/themes/newsflash/css/components/_forms.scss +75 -0
  387. package/dist/assets/themes/newsflash/css/components/_infinite-scroll.scss +102 -0
  388. package/dist/assets/themes/newsflash/css/components/_panels.scss +156 -0
  389. package/dist/assets/themes/newsflash/css/components/_ticker.scss +67 -0
  390. package/dist/assets/themes/newsflash/css/layout/_general.scss +330 -0
  391. package/dist/assets/themes/newsflash/css/layout/_navigation.scss +168 -0
  392. package/dist/assets/themes/newsflash/css/pages/404/index.scss +79 -0
  393. package/dist/assets/themes/newsflash/css/pages/blog/[slug].scss +186 -0
  394. package/dist/assets/themes/newsflash/css/pages/blog/index.scss +17 -0
  395. package/dist/assets/themes/newsflash/css/pages/index.scss +157 -0
  396. package/dist/assets/themes/newsflash/css/pages/pricing/index.scss +55 -0
  397. package/dist/assets/themes/newsflash/css/pages/test/libraries/layers/index.scss +7 -0
  398. package/dist/assets/themes/newsflash/fonts/fraunces-italic-latin-ext.woff2 +0 -0
  399. package/dist/assets/themes/newsflash/fonts/fraunces-italic-latin.woff2 +0 -0
  400. package/dist/assets/themes/newsflash/fonts/fraunces-normal-latin-ext.woff2 +0 -0
  401. package/dist/assets/themes/newsflash/fonts/fraunces-normal-latin.woff2 +0 -0
  402. package/dist/assets/themes/newsflash/fonts/schibsted-grotesk-italic-latin-ext.woff2 +0 -0
  403. package/dist/assets/themes/newsflash/fonts/schibsted-grotesk-italic-latin.woff2 +0 -0
  404. package/dist/assets/themes/newsflash/fonts/schibsted-grotesk-normal-latin-ext.woff2 +0 -0
  405. package/dist/assets/themes/newsflash/fonts/schibsted-grotesk-normal-latin.woff2 +0 -0
  406. package/dist/assets/themes/newsflash/js/pages/blog/[slug].js +29 -0
  407. package/dist/assets/themes/newsflash/js/pages/test/libraries/layers/index.js +9 -0
  408. package/dist/background.js +684 -0
  409. package/dist/build.js +268 -0
  410. package/dist/cli-run.js +25 -0
  411. package/dist/cli.js +30 -0
  412. package/dist/commands/build.js +67 -0
  413. package/dist/commands/clean.js +29 -0
  414. package/dist/commands/deploy.js +97 -0
  415. package/dist/commands/install.js +58 -0
  416. package/dist/commands/lib/dependencies.js +33 -0
  417. package/dist/commands/lib/deploy-precheck.js +57 -0
  418. package/dist/commands/lib/ensure-target.js +151 -0
  419. package/dist/commands/lib/push-secrets.js +60 -0
  420. package/dist/commands/migrate.js +77 -0
  421. package/dist/commands/test.js +110 -0
  422. package/dist/commands/update.js +21 -0
  423. package/dist/commands/version.js +12 -0
  424. package/dist/config/manifest.json +117 -0
  425. package/dist/config/page-template.html +21 -0
  426. package/dist/content.js +37 -0
  427. package/dist/defaults/.github/workflows/publish.yml +86 -0
  428. package/dist/defaults/.nvmrc +1 -0
  429. package/dist/defaults/.vscode/settings.json +8 -0
  430. package/dist/defaults/AGENTS.md +113 -0
  431. package/dist/defaults/CHANGELOG.md +15 -0
  432. package/dist/defaults/CLAUDE.md +1 -0
  433. package/dist/defaults/_.gitignore +75 -0
  434. package/dist/defaults/config/description.md +46 -0
  435. package/dist/defaults/config/messages.json +20 -0
  436. package/dist/defaults/config/omega.json5 +64 -0
  437. package/dist/defaults/docs/README.md +17 -0
  438. package/dist/defaults/gulpfile.js +6 -0
  439. package/dist/defaults/hooks/build/post.js +8 -0
  440. package/dist/defaults/hooks/build/pre.js +8 -0
  441. package/dist/defaults/src/assets/css/bundles/.gitkeep +0 -0
  442. package/dist/defaults/src/assets/css/components/content/index.scss +11 -0
  443. package/dist/defaults/src/assets/css/components/offscreen/index.scss +4 -0
  444. package/dist/defaults/src/assets/css/components/options/index.scss +14 -0
  445. package/dist/defaults/src/assets/css/components/pages/index.scss +10 -0
  446. package/dist/defaults/src/assets/css/components/popup/index.scss +10 -0
  447. package/dist/defaults/src/assets/css/components/sidepanel/index.scss +6 -0
  448. package/dist/defaults/src/assets/css/main.scss +32 -0
  449. package/dist/defaults/src/assets/images/.gitkeep +0 -0
  450. package/dist/defaults/src/assets/js/components/background/index.js +25 -0
  451. package/dist/defaults/src/assets/js/components/content/index.js +22 -0
  452. package/dist/defaults/src/assets/js/components/offscreen/index.js +25 -0
  453. package/dist/defaults/src/assets/js/components/options/index.js +22 -0
  454. package/dist/defaults/src/assets/js/components/pages/index.js +22 -0
  455. package/dist/defaults/src/assets/js/components/popup/index.js +22 -0
  456. package/dist/defaults/src/assets/js/components/sidepanel/index.js +20 -0
  457. package/dist/defaults/src/assets/vendor/.gitkeep +0 -0
  458. package/dist/defaults/src/manifest.json +131 -0
  459. package/dist/defaults/src/views/offscreen/index.html +3 -0
  460. package/dist/defaults/src/views/options/index.html +8 -0
  461. package/dist/defaults/src/views/pages/index.html +10 -0
  462. package/dist/defaults/src/views/popup/index.html +4 -0
  463. package/dist/defaults/src/views/sidepanel/index.html +4 -0
  464. package/dist/defaults/test/README.md +41 -0
  465. package/dist/defaults/test/_init.js +10 -0
  466. package/dist/defaults/test/boot/externally-connectable.test.js +28 -0
  467. package/dist/gulp/config/locales.js +12 -0
  468. package/dist/gulp/main.js +78 -0
  469. package/dist/gulp/tasks/_.js +18 -0
  470. package/dist/gulp/tasks/audit.js +222 -0
  471. package/dist/gulp/tasks/bundle.js +687 -0
  472. package/dist/gulp/tasks/defaults.js +281 -0
  473. package/dist/gulp/tasks/distribute.js +172 -0
  474. package/dist/gulp/tasks/fontawesome.js +25 -0
  475. package/dist/gulp/tasks/html.js +163 -0
  476. package/dist/gulp/tasks/icons.js +126 -0
  477. package/dist/gulp/tasks/package.js +742 -0
  478. package/dist/gulp/tasks/publish.js +417 -0
  479. package/dist/gulp/tasks/sass.js +252 -0
  480. package/dist/gulp/tasks/serve.js +103 -0
  481. package/dist/gulp/tasks/translate.js +252 -0
  482. package/dist/gulp/tasks/utils/build-json.js +43 -0
  483. package/dist/gulp/tasks/utils/template-transform.js +50 -0
  484. package/dist/gulp/templates/BUILD_INSTRUCTIONS.md +69 -0
  485. package/dist/index.js +46 -0
  486. package/dist/lib/affiliatizer.js +224 -0
  487. package/dist/lib/analytics.js +26 -0
  488. package/dist/lib/auth-helpers.js +213 -0
  489. package/dist/lib/extension.js +116 -0
  490. package/dist/lib/icons.js +36 -0
  491. package/dist/lib/logger-lite.js +35 -0
  492. package/dist/lib/logger.js +4 -0
  493. package/dist/lib/messaging.js +48 -0
  494. package/dist/lib/safe-install.js +4 -0
  495. package/dist/lib/theme.js +73 -0
  496. package/dist/lib/verts.js +68 -0
  497. package/dist/offscreen.js +31 -0
  498. package/dist/omega-bin.js +6 -0
  499. package/dist/options.js +80 -0
  500. package/dist/page.js +80 -0
  501. package/dist/popup.js +80 -0
  502. package/dist/sidepanel.js +80 -0
  503. package/dist/test/assert.js +4 -0
  504. package/dist/test/fixtures/consumer-extension/dist/background.js +23 -0
  505. package/dist/test/fixtures/consumer-extension/dist/manifest.json +20 -0
  506. package/dist/test/fixtures/consumer-extension/dist/options.html +10 -0
  507. package/dist/test/fixtures/consumer-extension/dist/popup.bundle.js +5 -0
  508. package/dist/test/fixtures/consumer-extension/dist/popup.html +12 -0
  509. package/dist/test/harness/extension/background.js +26 -0
  510. package/dist/test/harness/extension/manifest.json +27 -0
  511. package/dist/test/harness/extension/options.html +12 -0
  512. package/dist/test/harness/extension/popup.html +12 -0
  513. package/dist/test/harness/extension/sidepanel.html +12 -0
  514. package/dist/test/index.js +63 -0
  515. package/dist/test/runner.js +99 -0
  516. package/dist/test/runners/boot.js +221 -0
  517. package/dist/test/runners/chromium.js +391 -0
  518. package/dist/test/runners/helpers.js +24 -0
  519. package/dist/test/suites/background/messaging.test.js +44 -0
  520. package/dist/test/suites/background/storage.test.js +46 -0
  521. package/dist/test/suites/background/sw-context.test.js +49 -0
  522. package/dist/test/suites/boot/build-json-bake.test.js +80 -0
  523. package/dist/test/suites/boot/extension-loads.test.js +58 -0
  524. package/dist/test/suites/build/affiliatizer.test.js +64 -0
  525. package/dist/test/suites/build/app-launch.test.js +65 -0
  526. package/dist/test/suites/build/attach-log-file.test.js +99 -0
  527. package/dist/test/suites/build/auth-emulator-gate.test.js +118 -0
  528. package/dist/test/suites/build/auth-triggers.test.js +71 -0
  529. package/dist/test/suites/build/boot-discovery.test.js +134 -0
  530. package/dist/test/suites/build/boot-timeout.test.js +92 -0
  531. package/dist/test/suites/build/build-error-notification.test.js +122 -0
  532. package/dist/test/suites/build/build-json-bake.test.js +302 -0
  533. package/dist/test/suites/build/build-verb.test.js +138 -0
  534. package/dist/test/suites/build/bundle-targets.test.js +66 -0
  535. package/dist/test/suites/build/cache-warming.test.js +44 -0
  536. package/dist/test/suites/build/cli.test.js +150 -0
  537. package/dist/test/suites/build/default-boot-test.test.js +100 -0
  538. package/dist/test/suites/build/defaults-scaffold.test.js +287 -0
  539. package/dist/test/suites/build/deploy-dispatch.test.js +76 -0
  540. package/dist/test/suites/build/distribute-task.test.js +111 -0
  541. package/dist/test/suites/build/ensure-target.test.js +141 -0
  542. package/dist/test/suites/build/env-delivery.test.js +239 -0
  543. package/dist/test/suites/build/env-watch.test.js +86 -0
  544. package/dist/test/suites/build/expect.test.js +48 -0
  545. package/dist/test/suites/build/exports.test.js +53 -0
  546. package/dist/test/suites/build/extension-fallback.test.js +82 -0
  547. package/dist/test/suites/build/framework-deps.test.js +176 -0
  548. package/dist/test/suites/build/global-handlers.test.js +70 -0
  549. package/dist/test/suites/build/icon-sheet.test.js +74 -0
  550. package/dist/test/suites/build/logger-lite.test.js +61 -0
  551. package/dist/test/suites/build/manager.test.js +249 -0
  552. package/dist/test/suites/build/mode-helpers.test.js +136 -0
  553. package/dist/test/suites/build/omega-shell.test.js +103 -0
  554. package/dist/test/suites/build/omega-tokens.test.js +76 -0
  555. package/dist/test/suites/build/package-task.test.js +831 -0
  556. package/dist/test/suites/build/setup-scripts.test.js +172 -0
  557. package/dist/test/suites/build/strip-dev-blocks.test.js +122 -0
  558. package/dist/test/suites/build/template-replace.test.js +116 -0
  559. package/dist/test/suites/build/test-discovery.test.js +64 -0
  560. package/dist/test/suites/build/test-target-no-match.test.js +119 -0
  561. package/dist/test/suites/build/theme-resolve.test.js +115 -0
  562. package/dist/test/suites/build/translate.test.js +85 -0
  563. package/dist/test/suites/build/url-helpers.test.js +119 -0
  564. package/dist/test/suites/build/verb-logs.test.js +43 -0
  565. package/dist/test/suites/build/verts-binding.test.js +67 -0
  566. package/dist/test/suites/build/wakeup-ping.test.js +90 -0
  567. package/dist/test/suites/build/wave5-messenger.test.js +80 -0
  568. package/dist/test/suites/view/options-and-sidepanel.test.js +16 -0
  569. package/dist/test/suites/view/popup-context.test.js +53 -0
  570. package/dist/test/suites/view/sidepanel.test.js +16 -0
  571. package/dist/test/utils/extended-mode-warning.js +13 -0
  572. package/dist/utils/attach-log-file.js +4 -0
  573. package/dist/utils/mode-helpers.js +117 -0
  574. package/dist/utils/url-helpers.js +69 -0
  575. package/dist/vendor/account/engine.js +182 -0
  576. package/dist/vendor/account/features.js +220 -0
  577. package/dist/vendor/account/index.js +53 -0
  578. package/dist/vendor/account/schema.js +272 -0
  579. package/dist/vendor/account/subscription.js +38 -0
  580. package/dist/vendor/config/company.js +31 -0
  581. package/dist/vendor/config/defaults.js +173 -0
  582. package/dist/vendor/config/demo.js +18 -0
  583. package/dist/vendor/config/desktop-artifacts.js +110 -0
  584. package/dist/vendor/config/edit.js +769 -0
  585. package/dist/vendor/config/env-delivery.js +145 -0
  586. package/dist/vendor/config/env-rules.js +93 -0
  587. package/dist/vendor/config/env-schema.js +1078 -0
  588. package/dist/vendor/config/env.js +445 -0
  589. package/dist/vendor/config/hooks.js +97 -0
  590. package/dist/vendor/config/index.js +237 -0
  591. package/dist/vendor/config/instances.js +208 -0
  592. package/dist/vendor/config/load.js +490 -0
  593. package/dist/vendor/config/merge.js +68 -0
  594. package/dist/vendor/config/order.js +139 -0
  595. package/dist/vendor/config/ports.js +374 -0
  596. package/dist/vendor/config/providers.js +32 -0
  597. package/dist/vendor/config/repo.js +142 -0
  598. package/dist/vendor/config/retired-keys.js +430 -0
  599. package/dist/vendor/config/schema.js +1610 -0
  600. package/dist/vendor/config/secrets.js +50 -0
  601. package/dist/vendor/config/seed.js +34 -0
  602. package/dist/vendor/config/site-global.js +205 -0
  603. package/dist/vendor/config/validate.js +554 -0
  604. package/dist/vendor/config/winback.js +61 -0
  605. package/dist/vendor/devkit/actions-secrets.js +145 -0
  606. package/dist/vendor/devkit/attach-log-file.js +262 -0
  607. package/dist/vendor/devkit/bundle.js +292 -0
  608. package/dist/vendor/devkit/ci-workflows.js +520 -0
  609. package/dist/vendor/devkit/clean-dirs.js +28 -0
  610. package/dist/vendor/devkit/cli-router.js +156 -0
  611. package/dist/vendor/devkit/defaults-engine.js +372 -0
  612. package/dist/vendor/devkit/deploy-precheck.js +54 -0
  613. package/dist/vendor/devkit/deploy-record.js +180 -0
  614. package/dist/vendor/devkit/deploy.js +286 -0
  615. package/dist/vendor/devkit/empty-modules-plugin.js +64 -0
  616. package/dist/vendor/devkit/env-watch.js +132 -0
  617. package/dist/vendor/devkit/framework-deps.js +46 -0
  618. package/dist/vendor/devkit/icons.js +178 -0
  619. package/dist/vendor/devkit/license.js +155 -0
  620. package/dist/vendor/devkit/local.js +1905 -0
  621. package/dist/vendor/devkit/logger.js +128 -0
  622. package/dist/vendor/devkit/merge-line-files.js +296 -0
  623. package/dist/vendor/devkit/npm-registry.js +52 -0
  624. package/dist/vendor/devkit/omega-bin.js +345 -0
  625. package/dist/vendor/devkit/safe-install.js +18 -0
  626. package/dist/vendor/devkit/scaffold-guard.js +96 -0
  627. package/dist/vendor/devkit/strip-dev-blocks-plugin.js +29 -0
  628. package/dist/vendor/devkit/strip-dev-blocks.js +32 -0
  629. package/dist/vendor/devkit/target-dependencies.js +137 -0
  630. package/dist/vendor/devkit/target-secrets.js +165 -0
  631. package/dist/vendor/devkit/test/assert.js +120 -0
  632. package/dist/vendor/devkit/test/define-cases.js +104 -0
  633. package/dist/vendor/devkit/test/extended-mode-warning.js +22 -0
  634. package/dist/vendor/devkit/test/runner-core.js +554 -0
  635. package/dist/vendor/devkit/test/scope.js +162 -0
  636. package/dist/vendor/devkit/translate/cache.js +84 -0
  637. package/dist/vendor/devkit/translate/engine.js +243 -0
  638. package/dist/vendor/devkit/translate/index.js +49 -0
  639. package/dist/vendor/devkit/translate/languages.js +134 -0
  640. package/dist/vendor/devkit/translate/providers.js +188 -0
  641. package/dist/vendor/devkit/update.js +569 -0
  642. package/docs/affiliatizer.md +81 -0
  643. package/docs/audit.md +67 -0
  644. package/docs/auth.md +149 -0
  645. package/docs/build-system.md +176 -0
  646. package/docs/cdp-debugging.md +42 -0
  647. package/docs/cli.md +73 -0
  648. package/docs/common-mistakes.md +10 -0
  649. package/docs/components.md +87 -0
  650. package/docs/css.md +133 -0
  651. package/docs/defaults.md +72 -0
  652. package/docs/environment-detection.md +79 -0
  653. package/docs/extension.md +93 -0
  654. package/docs/hooks.md +111 -0
  655. package/docs/icons.md +47 -0
  656. package/docs/index.md +291 -0
  657. package/docs/logging.md +33 -0
  658. package/docs/managers.md +100 -0
  659. package/docs/offscreen.md +57 -0
  660. package/docs/publishing.md +182 -0
  661. package/docs/shared/agent-docs.md +89 -0
  662. package/docs/shared/analytics.md +612 -0
  663. package/docs/shared/brands.md +51 -0
  664. package/docs/shared/breaking-changes.md +497 -0
  665. package/docs/shared/config.md +1387 -0
  666. package/docs/shared/deploys.md +215 -0
  667. package/docs/shared/icons.md +201 -0
  668. package/docs/shared/local-dev.md +147 -0
  669. package/docs/shared/logging.md +202 -0
  670. package/docs/shared/monitoring.md +153 -0
  671. package/docs/shared/publishing.md +183 -0
  672. package/docs/shared/rulings.md +34 -0
  673. package/docs/shared/testing.md +147 -0
  674. package/docs/shared/theming.md +604 -0
  675. package/docs/shared/translation.md +291 -0
  676. package/docs/shared/updates.md +61 -0
  677. package/docs/templating.md +66 -0
  678. package/docs/test-boot-layer.md +143 -0
  679. package/docs/test-framework.md +411 -0
  680. package/docs/themes.md +89 -0
  681. package/docs/translations.md +73 -0
  682. package/docs/verts.md +67 -0
  683. package/docs/xss-prevention.md +95 -0
  684. package/package.json +159 -0
@@ -0,0 +1,684 @@
1
+ // Libraries
2
+ import extension from './lib/extension.js';
3
+ import LoggerLite from './lib/logger-lite.js';
4
+ import { attachTo as attachModeHelpers } from './utils/mode-helpers.js';
5
+ import { attachTo as attachUrlHelpers } from './utils/url-helpers.js';
6
+ import { createRequest } from '@omega.js/client/modules/request.js';
7
+
8
+ // Firebase (static imports - a service worker cannot fetch code at runtime under MV3, so dynamic import() is not an option)
9
+ import { initializeApp, getApp } from 'firebase/app';
10
+ import { getAuth, signInWithCustomToken, onAuthStateChanged, connectAuthEmulator } from 'firebase/auth';
11
+
12
+ // Variables
13
+ const serviceWorker = self;
14
+
15
+ // Install-lane logger. MODULE level, not an instance property: the install
16
+ // listener is registered by setupGlobalHandlers(), which runs bare at top
17
+ // level before any Manager exists — `this` is undefined in there.
18
+ const installLogger = new LoggerLite('install');
19
+
20
+ // Cache warming is DISABLED (same call as the web SW — page speed wins,
21
+ // nothing reads it): this cache is write-only — one caches.open, zero reads
22
+ // anywhere in the extension, and no context even sends 'update-cache' today.
23
+ // The machinery stays wired (updateCache + the message command) so this
24
+ // single flag re-enables it if an offline lane ever lands.
25
+ const CACHE_WARMING_ENABLED = false;
26
+
27
+ // Auth emulator port for TESTING builds. An extension context has no
28
+ // `process.env`, so the resolved map arrives BAKED in OMEGA_BUILD_JSON's
29
+ // `config.dev.ports` ([#300](https://github.com/Omega-JS-Stack/omega/issues/300));
30
+ // the classic default is the fallback for a build made with no stack up (mirrors
31
+ // url-helpers' classic-5002 hosting note).
32
+ const AUTH_EMULATOR_PORT = 9099;
33
+
34
+ // ⚠️⚠️⚠️ CRITICAL: Setup global listeners BEFORE any async operations ⚠️⚠️⚠️
35
+ // https://stackoverflow.com/questions/78270541/cant-catch-fcm-notificationclick-event-in-service-worker-using-firebase-messa
36
+ // Note: ES6 static imports above are fine - they're hoisted and bundled by the build.
37
+ setupGlobalHandlers();
38
+
39
+ // Class
40
+ class Manager {
41
+ constructor() {
42
+ // Properties
43
+ this.extension = null;
44
+ this.logger = null;
45
+ this.authLogger = null;
46
+ this.serviceWorker = null;
47
+
48
+ // Load the snapshot the bundle baked in (#743 — the banner assigns it onto
49
+ // self/globalThis ahead of this file's own code, so it is always already there).
50
+ this.config = serviceWorker.OMEGA_BUILD_JSON?.config || {};
51
+
52
+ // Defaults
53
+ this.version = this.config?.version || 'unknown';
54
+ this.brand = this.config?.brand || { name: 'unknown' };
55
+ this.brand.id = this.config?.brand?.id || 'extension';
56
+ this.environment = this.config?.omega?.environment || 'production';
57
+ this.libraries = {
58
+ firebase: null,
59
+ firebaseAuth: null,
60
+ messaging: false,
61
+ promoServer: false,
62
+ };
63
+ this.cache = {
64
+ breaker: this.config?.omega?.cache_breaker || new Date().getTime(),
65
+ name: ''
66
+ };
67
+ }
68
+
69
+ // Initialize
70
+ async initialize() {
71
+ // Set properties
72
+ this.extension = extension;
73
+ this.logger = new LoggerLite('background');
74
+ this.authLogger = new LoggerLite('auth');
75
+ this.serviceWorker = serviceWorker;
76
+
77
+ // Parse config file
78
+ this.parseConfiguration();
79
+
80
+ // Setup instance-specific message handlers
81
+ this.setupInstanceHandlers();
82
+
83
+ // Initialize Firebase
84
+ this.initializeFirebase();
85
+
86
+ // Setup auth token listener (for cross-runtime auth)
87
+ this.setupAuthTokenListener();
88
+
89
+ // Initialize Firebase auth on startup (restores persisted session if any)
90
+ this.initializeAuth();
91
+
92
+ // Setup livereload
93
+ this.setupLiveReload();
94
+
95
+ // Log
96
+ this.logger.log('Initialized!', this.version, this.cache.name, this);
97
+ this.logger.log('Config loaded from OMEGA_BUILD_JSON:', this.config);
98
+
99
+ // Return manager instance
100
+ return this;
101
+ }
102
+
103
+ // Parse configuration
104
+ parseConfiguration() {
105
+ try {
106
+ // Set cache name
107
+ this.cache.name = `${this.brand.id}-${this.cache.breaker}`;
108
+ } catch (e) {
109
+ this.logger.error('Error parsing configuration', e);
110
+ }
111
+ }
112
+
113
+ // Setup instance-specific message handlers
114
+ setupInstanceHandlers() {
115
+ // Send messages: https://stackoverflow.com/questions/35725594/how-do-i-pass-data-like-a-user-id-to-a-web-worker-for-fetching-additional-push
116
+ // more messaging: http://craig-russell.co.uk/2016/01/29/background-messaging.html#.XSKpRZNKiL8
117
+ serviceWorker.addEventListener('message', (event) => {
118
+ // Get the data
119
+ const data = event.data || {};
120
+
121
+ // Parse the data
122
+ const command = data.command || '';
123
+ const payload = data.payload || {};
124
+
125
+ // Quit if no command
126
+ if (!command) return;
127
+
128
+ // Log
129
+ this.logger.log('message', command, payload, event);
130
+
131
+ // Handle commands
132
+ if (command === 'update-cache') {
133
+ const pages = payload.pages || [];
134
+ this.updateCache(pages)
135
+ .then(() => {
136
+ event.ports[0]?.postMessage({ status: 'success' });
137
+ })
138
+ .catch(error => {
139
+ event.ports[0]?.postMessage({ status: 'error', error: error.message });
140
+ });
141
+ }
142
+ });
143
+
144
+ // Listen for runtime messages (from popup, options, pages, etc.)
145
+ this.extension.runtime.onMessage.addListener((message, _sender, sendResponse) => {
146
+ // Handle auth sync requests - contexts ask background for auth state on load
147
+ if (message.command === 'omega:syncAuth') {
148
+ this.handleSyncAuth(message, sendResponse);
149
+ return true; // Keep channel open for async response
150
+ }
151
+
152
+ // Handle sign-out requests from contexts
153
+ if (message.command === 'omega:signOut') {
154
+ this.handleSignOut(sendResponse);
155
+ return true; // Keep channel open for async response
156
+ }
157
+ });
158
+
159
+ // Log
160
+ this.logger.log('Set up message handlers');
161
+ }
162
+
163
+ // Handle auth sync request from other contexts (popup, page, options, sidepanel)
164
+ // Compares context's UID with background's UID and provides fresh token only if different
165
+ async handleSyncAuth(message, sendResponse) {
166
+ try {
167
+ const contextUid = message.contextUid || null; // UID from asking context (or null)
168
+
169
+ // Get or initialize Firebase auth
170
+ const auth = this.getFirebaseAuth();
171
+ const bgUser = auth.currentUser;
172
+ const bgUid = bgUser?.uid || null;
173
+
174
+ this.authLogger.log('syncAuth: Comparing UIDs - context:', contextUid, 'background:', bgUid);
175
+
176
+ // Already in sync (both null, or same UID)
177
+ if (contextUid === bgUid) {
178
+ this.authLogger.log('syncAuth: Already in sync');
179
+ sendResponse({ needsSync: false });
180
+ return;
181
+ }
182
+
183
+ // Context is signed in but background is not → context should sign out
184
+ if (!bgUser && contextUid) {
185
+ this.authLogger.log('syncAuth: Background signed out, telling context to sign out');
186
+ sendResponse({ needsSync: true, signOut: true });
187
+ return;
188
+ }
189
+
190
+ // Background is signed in, context is not (or different user) → provide token
191
+ this.authLogger.log('syncAuth: Fetching fresh custom token for context...', bgUser.email);
192
+
193
+ // Fetch a fresh custom token from the /user/token route via the shared
194
+ // request layer (uid defaults server-side to the authenticated caller).
195
+ // getApiUrl() throws when brand.url is missing — a misconfigured
196
+ // brand should fail loudly, never call a foreign host.
197
+ const request = createRequest({
198
+ getApiUrl: () => this.getApiUrl(),
199
+ getIdToken: (force) => bgUser.getIdToken(force),
200
+ });
201
+ const data = await request('/omega/user/token', { method: 'POST', body: {} });
202
+
203
+ // Check for token in response ({ token } at the top level)
204
+ if (!data.token) {
205
+ throw new Error('No token in server response');
206
+ }
207
+
208
+ this.authLogger.log('syncAuth: Got fresh custom token, sending to context');
209
+
210
+ // Send user info and fresh custom token
211
+ sendResponse({
212
+ needsSync: true,
213
+ customToken: data.token,
214
+ user: {
215
+ uid: bgUser.uid,
216
+ email: bgUser.email,
217
+ displayName: bgUser.displayName,
218
+ photoURL: bgUser.photoURL,
219
+ emailVerified: bgUser.emailVerified,
220
+ },
221
+ });
222
+
223
+ } catch (error) {
224
+ this.authLogger.error('syncAuth error:', error.message);
225
+ sendResponse({ needsSync: false, error: error.message });
226
+ }
227
+ }
228
+
229
+ // Handle sign-out request from a context
230
+ // Signs out background's Firebase and broadcasts to all other contexts
231
+ async handleSignOut(sendResponse) {
232
+ try {
233
+ this.authLogger.log('handleSignOut: Signing out background Firebase...');
234
+
235
+ // Sign out background's Firebase
236
+ if (this.libraries.firebaseAuth?.currentUser) {
237
+ await this.libraries.firebaseAuth.signOut();
238
+ }
239
+
240
+ // Broadcast to all contexts
241
+ await this.broadcastSignOut();
242
+
243
+ this.authLogger.log('handleSignOut: Complete');
244
+ sendResponse({ success: true });
245
+ } catch (error) {
246
+ this.authLogger.error('handleSignOut error:', error.message);
247
+ sendResponse({ success: false, error: error.message });
248
+ }
249
+ }
250
+
251
+ // Broadcast sign-out to all open extension contexts
252
+ async broadcastSignOut() {
253
+ try {
254
+ const clients = await self.clients.matchAll({ type: 'all' });
255
+
256
+ this.authLogger.log(`Broadcasting sign-out to ${clients.length} clients...`);
257
+
258
+ for (const client of clients) {
259
+ client.postMessage({ command: 'omega:signOut' });
260
+ }
261
+
262
+ this.authLogger.log('Sign-out broadcast complete');
263
+ } catch (error) {
264
+ this.authLogger.error('Error broadcasting sign-out:', error.message);
265
+ }
266
+ }
267
+
268
+ // Initialize Firebase
269
+ initializeFirebase() {
270
+ // Get Firebase config
271
+ const firebaseConfig = this.config?.cloud?.config;
272
+
273
+ // Check if Firebase config is available
274
+ if (!firebaseConfig) {
275
+ this.logger.log('Firebase config not available yet, skipping Firebase initialization');
276
+ return;
277
+ }
278
+
279
+ // Check if already initialized
280
+ if (this.libraries.firebase) {
281
+ this.logger.log('Firebase already initialized');
282
+ return;
283
+ }
284
+
285
+ // Log
286
+ this.logger.log('Initializing Firebase');
287
+
288
+ // Initialize app (libraries were already imported at the top if uncommented)
289
+ // firebase.initializeApp(firebaseConfig);
290
+
291
+ // Initialize messaging
292
+ // this.libraries.messaging = firebase.messaging();
293
+
294
+ // Attach firebase to Manager
295
+ // this.libraries.firebase = firebase;
296
+ }
297
+
298
+ // Update cache — disabled by CACHE_WARMING_ENABLED (see top of file)
299
+ updateCache(pages) {
300
+ if (!CACHE_WARMING_ENABLED) {
301
+ return Promise.resolve();
302
+ }
303
+
304
+ // Set default pages to cache
305
+ const defaults = [
306
+ '/',
307
+ '/assets/css/main.bundle.css',
308
+ '/assets/js/main.bundle.js',
309
+ ];
310
+
311
+ // Ensure pages is an array
312
+ pages = pages || [];
313
+
314
+ // Merge with additional pages
315
+ const pagesToCache = [...new Set([...defaults, ...pages])];
316
+
317
+ // Open cache and add pages
318
+ return caches.open(this.cache.name)
319
+ .then(cache => cache.addAll(pagesToCache))
320
+ .then(() => this.logger.log('Cached resources:', pagesToCache))
321
+ .catch(error => this.logger.error('Failed to cache resources:', error));
322
+ }
323
+
324
+ // Setup auth token listener (monitors tabs for auth tokens from website)
325
+ setupAuthTokenListener() {
326
+ // DEBUG: Log the full config to see what we have
327
+ this.authLogger.log('setupAuthTokenListener called');
328
+ this.authLogger.log('this.config:', this.config);
329
+ this.authLogger.log('OMEGA_BUILD_JSON:', serviceWorker.OMEGA_BUILD_JSON);
330
+
331
+ // The sign-in round trip lands on the BRAND site (/token redirects with
332
+ // ?authToken=…), so match the brand.url host — never authDomain, which
333
+ // is an auth concern that must stay free to change independently.
334
+ const brandUrl = this.config?.brand?.url;
335
+
336
+ // Skip if no brand url configured
337
+ if (!brandUrl) {
338
+ this.authLogger.log('No brand.url configured, skipping auth token listener');
339
+ return;
340
+ }
341
+
342
+ const brandHost = new URL(brandUrl).hostname;
343
+
344
+ // Log
345
+ this.authLogger.log(`Setting up auth token listener for domain: ${brandHost}`);
346
+
347
+ // Listen for tab URL changes
348
+ this.extension.tabs.onUpdated.addListener((tabId, changeInfo, tab) => {
349
+ // Only process when URL changes and is complete
350
+ if (changeInfo.status !== 'complete' || !tab.url) {
351
+ return;
352
+ }
353
+
354
+ // Parse the URL
355
+ let tabUrl;
356
+ try {
357
+ tabUrl = new URL(tab.url);
358
+ } catch (e) {
359
+ return;
360
+ }
361
+
362
+ // Log every tab update for auth domain matching
363
+ this.authLogger.log(`Tab updated: ${tabUrl.hostname} (looking for: ${brandHost})`);
364
+
365
+ // Check if this is our brand site
366
+ if (tabUrl.hostname !== brandHost) {
367
+ return;
368
+ }
369
+
370
+ // Log - we found our domain
371
+ this.authLogger.log(`Auth domain matched! Checking for authToken param...`);
372
+
373
+ // Check for authToken param
374
+ const authToken = tabUrl.searchParams.get('authToken');
375
+ if (!authToken) {
376
+ this.authLogger.log(`No authToken param found in URL: ${tabUrl.href}`);
377
+ return;
378
+ }
379
+
380
+ // Get source tab ID to restore after auth
381
+ const authSourceTabId = tabUrl.searchParams.get('authSourceTabId');
382
+
383
+ // Log
384
+ this.authLogger.log('Auth token detected in tab:', tabId);
385
+
386
+ // Handle the auth token
387
+ this.handleAuthToken(authToken, tabId, authSourceTabId ? parseInt(authSourceTabId, 10) : null);
388
+ });
389
+ }
390
+
391
+ // Initialize Firebase auth on startup
392
+ // Firebase Auth persists sessions in IndexedDB - we just need to initialize it
393
+ initializeAuth() {
394
+ // Get Firebase config
395
+ const firebaseConfig = this.config?.cloud?.config;
396
+ if (!firebaseConfig) {
397
+ this.authLogger.log('Firebase config not available, skipping auth initialization');
398
+ return;
399
+ }
400
+
401
+ // Initialize Firebase auth - it will auto-restore from IndexedDB if session exists
402
+ this.authLogger.log('Initializing Firebase Auth (will restore persisted session if any)...');
403
+ const auth = this.getFirebaseAuth();
404
+
405
+ // Check if already signed in (Firebase restored from IndexedDB)
406
+ if (auth.currentUser) {
407
+ this.authLogger.log('Firebase restored session from persistence:', auth.currentUser.email);
408
+ } else {
409
+ this.authLogger.log('No persisted Firebase session found');
410
+ }
411
+ }
412
+
413
+ // Get or initialize Firebase auth (reuse existing instance)
414
+ getFirebaseAuth() {
415
+ // Return existing instance if available
416
+ if (this.libraries.firebaseAuth) {
417
+ return this.libraries.firebaseAuth;
418
+ }
419
+
420
+ // Get Firebase config
421
+ const firebaseConfig = this.config?.cloud?.config;
422
+ if (!firebaseConfig) {
423
+ throw new Error('Firebase config not available');
424
+ }
425
+
426
+ // Try to get existing app or create new one
427
+ try {
428
+ this.libraries.firebase = getApp('omega-auth');
429
+ } catch (e) {
430
+ this.libraries.firebase = initializeApp(firebaseConfig, 'omega-auth');
431
+ }
432
+
433
+ // Get auth and set up state listener (only once)
434
+ this.libraries.firebaseAuth = getAuth(this.libraries.firebase);
435
+
436
+ // A TESTING build talks to the LOCAL stack, never real auth — the same
437
+ // call getApiUrl() makes when it maps testing to localhost, and the same
438
+ // move @omega.js/client makes for emulator runs. Only a build baked with
439
+ // OMEGA_TEST_MODE=true reaches here; dev and production are untouched.
440
+ if (this.isTesting()) {
441
+ const port = this.config?.dev?.ports?.auth || AUTH_EMULATOR_PORT;
442
+ this.authLogger.log(`Testing build — connecting auth to the emulator on :${port}`);
443
+ connectAuthEmulator(this.libraries.firebaseAuth, `http://localhost:${port}`, { disableWarnings: true });
444
+ }
445
+
446
+ // Set up auth state change listener (background is source of truth)
447
+ onAuthStateChanged(this.libraries.firebaseAuth, (user) => {
448
+ this.handleAuthStateChange(user);
449
+ });
450
+
451
+ return this.libraries.firebaseAuth;
452
+ }
453
+
454
+ // Handle Firebase auth state changes (source of truth for all contexts)
455
+ // No storage operations - Web Manager handles auth state internally
456
+ handleAuthStateChange(user) {
457
+ this.authLogger.log('Auth state changed:', user?.email || 'signed out');
458
+ // Nothing else to do - contexts sync via messages, @omega.js/client handles UI
459
+ }
460
+
461
+ // Handle auth token from website (custom token from /token page)
462
+ async handleAuthToken(token, tabId, authSourceTabId = null) {
463
+ try {
464
+ // Log
465
+ this.authLogger.log('Processing auth token...');
466
+
467
+ // Get or initialize Firebase auth
468
+ const auth = this.getFirebaseAuth();
469
+
470
+ // Sign in with custom token
471
+ this.authLogger.log('Calling signInWithCustomToken...');
472
+ const userCredential = await signInWithCustomToken(auth, token);
473
+ const user = userCredential.user;
474
+
475
+ // Log
476
+ this.authLogger.log('Signed in successfully:', user.email);
477
+
478
+ // Broadcast token to all open extension contexts so they can sign in immediately
479
+ // Token is NOT stored - it expires in 1 hour and is only needed for initial sign-in
480
+ this.broadcastAuthToken(token);
481
+
482
+ // Note: onAuthStateChanged will fire and store user info (without token) in storage
483
+ // This allows UI to show auth state, but token is never persisted
484
+
485
+ // Close the auth tab
486
+ await this.extension.tabs.remove(tabId);
487
+ this.authLogger.log('Auth tab closed');
488
+
489
+ // Reactivate the source tab if provided
490
+ if (authSourceTabId) {
491
+ try {
492
+ await this.extension.tabs.update(authSourceTabId, { active: true });
493
+ this.authLogger.log('Restored source tab:', authSourceTabId);
494
+ } catch (e) {
495
+ // Tab may have been closed, ignore
496
+ this.authLogger.log('Could not restore source tab (may be closed):', authSourceTabId);
497
+ }
498
+ }
499
+
500
+ } catch (error) {
501
+ this.authLogger.error('Error handling auth token:', error);
502
+ }
503
+ }
504
+
505
+ // Broadcast auth token to all open extension contexts
506
+ // Used during initial sign-in to immediately sync all open popups, pages, etc.
507
+ async broadcastAuthToken(token) {
508
+ try {
509
+ // Get all clients (extension pages, popups, etc.)
510
+ const clients = await self.clients.matchAll({ type: 'all' });
511
+
512
+ this.authLogger.log(`Broadcasting token to ${clients.length} clients...`);
513
+
514
+ // Send token to each client
515
+ for (const client of clients) {
516
+ client.postMessage({
517
+ command: 'omega:signInWithToken',
518
+ token: token,
519
+ });
520
+ }
521
+
522
+ this.authLogger.log('Token broadcast complete');
523
+ } catch (error) {
524
+ this.authLogger.error('Error broadcasting token:', error.message);
525
+ }
526
+ }
527
+
528
+ // Setup livereload
529
+ setupLiveReload() {
530
+ // Dev-only feature — skip in testing and production (environment is one of
531
+ // 'development' | 'testing' | 'production').
532
+ if (this.environment !== 'development') return;
533
+
534
+ // Get port from config or use default
535
+ const port = this.config?.omega?.liveReloadPort || 35729;
536
+
537
+ // Setup livereload
538
+ const address = `ws://localhost:${port}/livereload`;
539
+ let connection;
540
+ let isReconnecting = false; // Flag to track reconnections
541
+
542
+ // Log
543
+ this.logger.log(`Setting up live reload on ${address}...`);
544
+
545
+ // Function to establish a connection
546
+ const connect = () => {
547
+ connection = new WebSocket(address);
548
+
549
+ // Log connection
550
+ this.logger.log(`Reload connecting to ${address}...`);
551
+
552
+ // Log connection errors
553
+ connection.onerror = (e) => {
554
+ this.logger.error('Reload connection got error:', e);
555
+ };
556
+
557
+ // Log when set up correctly
558
+ connection.onopen = () => {
559
+ this.logger.log('Reload connection set up!');
560
+
561
+ // Reload the extension only on reconnections
562
+ if (isReconnecting) {
563
+ // reload();
564
+ }
565
+
566
+ // Reset the reconnection flag
567
+ isReconnecting = false;
568
+ };
569
+
570
+ // Handle connection close and attempt to reconnect
571
+ connection.onclose = () => {
572
+ // Set time
573
+ const seconds = 1;
574
+
575
+ // Log
576
+ this.logger.log(`Reload connection closed. Attempting to reconnect in ${seconds} second(s)...`);
577
+
578
+ // Set the reconnection flag
579
+ isReconnecting = true;
580
+
581
+ // Reconnect
582
+ setTimeout(connect, seconds * 1000); // Retry
583
+ };
584
+
585
+ // Handle incoming messages
586
+ connection.onmessage = (event) => {
587
+ if (!event.data) {
588
+ return;
589
+ }
590
+
591
+ // Get data
592
+ const data = JSON.parse(event.data);
593
+
594
+ // Log
595
+ this.logger.log('Reload connection got message:', data);
596
+
597
+ // Handle reload command
598
+ if (data && data.command === 'reload') {
599
+ reload();
600
+ }
601
+ };
602
+ };
603
+
604
+ const reload = () => {
605
+ this.logger.log('Reloading extension...');
606
+ setTimeout(() => {
607
+ this.extension.runtime.reload();
608
+ }, 1000);
609
+ };
610
+
611
+ // Start the initial connection
612
+ connect();
613
+ }
614
+ }
615
+
616
+ // Helper: Setup global listeners
617
+ // This is called at top-level before any async operations to ensure listeners are registered first
618
+ function setupGlobalHandlers() {
619
+ // Force service worker to use the latest version
620
+ serviceWorker.addEventListener('install', (event) => {
621
+ serviceWorker.skipWaiting();
622
+ });
623
+
624
+ // Handle extension install/update
625
+ extension.runtime.onInstalled.addListener((details) => {
626
+ // Only open tab on fresh install (not updates)
627
+ if (details.reason !== 'install') {
628
+ return;
629
+ }
630
+
631
+ // Get website URL from config
632
+ const config = serviceWorker.OMEGA_BUILD_JSON?.config || {};
633
+ const website = config?.brand?.url;
634
+
635
+ // Skip if no website configured
636
+ if (!website) {
637
+ installLogger.log('No website configured, skipping install page');
638
+ return;
639
+ }
640
+
641
+ // Open the installed page
642
+ const installedUrl = `${website}/extension/installed`;
643
+ installLogger.log('Opening install page:', installedUrl);
644
+
645
+ extension.tabs.create({ url: installedUrl });
646
+ });
647
+
648
+ serviceWorker.addEventListener('activate', (event) => {
649
+ event.waitUntil(serviceWorker.clients.claim());
650
+ });
651
+
652
+ // Handle clicks on notifications
653
+ // ⚠️ MUST be registered before any async operations
654
+ serviceWorker.addEventListener('notificationclick', (event) => {
655
+ // Get the properties of the notification
656
+ const notification = event.notification;
657
+ const data = (notification.data && notification.data.FCM_MSG ? notification.data.FCM_MSG.data : null) || {};
658
+ const payload = (notification.data && notification.data.FCM_MSG ? notification.data.FCM_MSG.notification : null) || {};
659
+
660
+ // Get the click action
661
+ const clickAction = payload.click_action || data.click_action || '/';
662
+
663
+ // Log
664
+ console.log('notificationclick event', event);
665
+ console.log('notificationclick data', data);
666
+ console.log('notificationclick payload', payload);
667
+ console.log('notificationclick clickAction', clickAction);
668
+
669
+ // Handle the click
670
+ event.waitUntil(
671
+ clients.openWindow(clickAction)
672
+ );
673
+
674
+ // Close the notification
675
+ notification.close();
676
+ });
677
+ }
678
+
679
+ // Cross-context helpers — Manager.isTesting() / isDevelopment() / getApiUrl() / etc.
680
+ attachModeHelpers(Manager);
681
+ attachUrlHelpers(Manager);
682
+
683
+ // Export
684
+ export default Manager;