@omega.js/desktop 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.
- package/LICENSE +98 -0
- package/README.md +166 -0
- package/bin/omega +2 -0
- package/bin/omega-desktop +2 -0
- package/bin/omg +2 -0
- package/dist/assets/css/core/_fontawesome.scss +146 -0
- package/dist/assets/css/core/_initialize.scss +38 -0
- package/dist/assets/css/omega-desktop.scss +39 -0
- package/dist/assets/css/shell/_index.scss +207 -0
- package/dist/assets/css/tokens/_index.scss +166 -0
- package/dist/assets/js/bootstrap.bundle.js +1 -0
- package/dist/assets/js/core/app-shell.js +136 -0
- package/dist/assets/themes/_template/README.md +115 -0
- package/dist/assets/themes/_template/_config.scss +60 -0
- package/dist/assets/themes/_template/_theme.js +14 -0
- package/dist/assets/themes/_template/_theme.scss +28 -0
- package/dist/assets/themes/_template/css/base/_root.scss +19 -0
- package/dist/assets/themes/_template/css/components/_components.scss +23 -0
- package/dist/assets/themes/base/README.md +5 -0
- package/dist/assets/themes/base/_components/data/org-chart/component.html +33 -0
- package/dist/assets/themes/base/_components/data/org-chart/component.json5 +33 -0
- package/dist/assets/themes/base/_components/data/org-chart/component.scss +183 -0
- package/dist/assets/themes/base/_components/heading/masthead/component.html +22 -0
- package/dist/assets/themes/base/_components/heading/masthead/component.json5 +30 -0
- package/dist/assets/themes/base/_components/heading/section-head/component.html +18 -0
- package/dist/assets/themes/base/_components/heading/section-head/component.json5 +27 -0
- package/dist/assets/themes/base/_components/pricing/features/component.html +29 -0
- package/dist/assets/themes/base/_components/pricing/features/component.json5 +30 -0
- package/dist/assets/themes/base/_hero/orbit/index.html +30 -0
- package/dist/assets/themes/base/_hero/orbit/script.js +33 -0
- package/dist/assets/themes/base/_hero/orbit/style.scss +133 -0
- package/dist/assets/themes/base/_includes/admin/sections/sidebar.html +3 -0
- package/dist/assets/themes/base/_includes/admin/sections/topbar.html +3 -0
- package/dist/assets/themes/base/_includes/backend/sections/sidebar.html +3 -0
- package/dist/assets/themes/base/_includes/backend/sections/topbar.html +3 -0
- package/dist/assets/themes/base/_includes/frontend/components/connection-card.html +49 -0
- package/dist/assets/themes/base/_includes/frontend/components/post-card.html +54 -0
- package/dist/assets/themes/base/_includes/frontend/sections/account-connections.html +42 -0
- package/dist/assets/themes/base/_includes/frontend/sections/account-section-header.html +11 -0
- package/dist/assets/themes/base/_includes/frontend/sections/footer.html +154 -0
- package/dist/assets/themes/base/_includes/frontend/sections/nav.html +276 -0
- package/dist/assets/themes/base/_includes/global/sections/account.html +72 -0
- package/dist/assets/themes/base/_includes/global/sections/app-sidebar.html +248 -0
- package/dist/assets/themes/base/_includes/global/sections/app-topbar.html +228 -0
- package/dist/assets/themes/base/_includes/global/sections/page-header.html +99 -0
- package/dist/assets/themes/base/_layouts/admin/core/minimal-viewport-locked.html +22 -0
- package/dist/assets/themes/base/_layouts/admin/core/minimal.html +23 -0
- package/dist/assets/themes/base/_layouts/backend/core/base.html +57 -0
- package/dist/assets/themes/base/_layouts/backend/core/minimal-viewport-locked.html +32 -0
- package/dist/assets/themes/base/_layouts/backend/core/minimal.html +32 -0
- package/dist/assets/themes/base/_layouts/backend/pages/dashboard/index.html +230 -0
- package/dist/assets/themes/base/_layouts/frontend/core/base.html +31 -0
- package/dist/assets/themes/base/_layouts/frontend/core/cover.html +40 -0
- package/dist/assets/themes/base/_layouts/frontend/core/minimal.html +47 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/404.html +54 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/about.html +144 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/account/index.html +2104 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/alternatives/alternative.html +319 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/alternatives/index.html +186 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/app.html +142 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/auth/reset.html +53 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/auth/signin.html +90 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/auth/signup.html +141 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/auth/token.html +44 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/blog/categories/category.html +88 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/blog/categories/index.html +88 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/blog/index.html +255 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/blog/post.html +261 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/blog/tags/index.html +84 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/blog/tags/tag.html +88 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/collection/category.html +72 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/collection/document.html +54 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/collection/index.html +84 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/connections/callback.html +55 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/contact.html +214 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/download.html +793 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/extension/index.html +253 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/extension/installed.html +198 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/feedback.html +171 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/index.html +66 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/legal/document.html +78 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/payment/checkout.html +459 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/payment/confirmation.html +131 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/portal/email-preferences.html +104 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/pricing.html +596 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/status.html +361 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/team/index.html +210 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/team/member.html +125 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/updates/index.html +119 -0
- package/dist/assets/themes/base/_layouts/frontend/pages/updates/update.html +118 -0
- package/dist/assets/themes/base/_sections/about/hero/section.html +68 -0
- package/dist/assets/themes/base/_sections/about/hero/section.json5 +58 -0
- package/dist/assets/themes/base/_sections/about/letter/section.html +60 -0
- package/dist/assets/themes/base/_sections/about/letter/section.json5 +56 -0
- package/dist/assets/themes/base/_sections/about/photo-band/section.html +24 -0
- package/dist/assets/themes/base/_sections/about/photo-band/section.json5 +23 -0
- package/dist/assets/themes/base/_sections/about/principles/section.html +17 -0
- package/dist/assets/themes/base/_sections/about/principles/section.json5 +34 -0
- package/dist/assets/themes/base/_sections/about/timeline/section.html +20 -0
- package/dist/assets/themes/base/_sections/about/timeline/section.json5 +34 -0
- package/dist/assets/themes/base/_sections/marketing/bento/section.html +91 -0
- package/dist/assets/themes/base/_sections/marketing/bento/section.json5 +152 -0
- package/dist/assets/themes/base/_sections/marketing/cta/section.html +44 -0
- package/dist/assets/themes/base/_sections/marketing/cta/section.json5 +47 -0
- package/dist/assets/themes/base/_sections/marketing/faq/section.html +52 -0
- package/dist/assets/themes/base/_sections/marketing/faq/section.json5 +68 -0
- package/dist/assets/themes/base/_sections/marketing/hero/section.html +349 -0
- package/dist/assets/themes/base/_sections/marketing/hero/section.json5 +335 -0
- package/dist/assets/themes/base/_sections/marketing/newsletter-cta/section.html +38 -0
- package/dist/assets/themes/base/_sections/marketing/newsletter-cta/section.js +86 -0
- package/dist/assets/themes/base/_sections/marketing/newsletter-cta/section.json5 +29 -0
- package/dist/assets/themes/base/_sections/marketing/pricing-cards/section.html +115 -0
- package/dist/assets/themes/base/_sections/marketing/pricing-cards/section.json5 +72 -0
- package/dist/assets/themes/base/_sections/marketing/product-demo/section.html +62 -0
- package/dist/assets/themes/base/_sections/marketing/product-demo/section.js +44 -0
- package/dist/assets/themes/base/_sections/marketing/product-demo/section.json5 +52 -0
- package/dist/assets/themes/base/_sections/marketing/prose/section.html +22 -0
- package/dist/assets/themes/base/_sections/marketing/prose/section.json5 +41 -0
- package/dist/assets/themes/base/_sections/marketing/showcase/section.html +35 -0
- package/dist/assets/themes/base/_sections/marketing/showcase/section.json5 +52 -0
- package/dist/assets/themes/base/_sections/marketing/stats/section.html +32 -0
- package/dist/assets/themes/base/_sections/marketing/stats/section.json5 +44 -0
- package/dist/assets/themes/base/_sections/marketing/testimonials/section.html +54 -0
- package/dist/assets/themes/base/_sections/marketing/testimonials/section.json5 +70 -0
- package/dist/assets/themes/base/_sections/marketing/trusted-by/section.html +30 -0
- package/dist/assets/themes/base/_sections/marketing/trusted-by/section.json5 +38 -0
- package/dist/assets/themes/base/_sections/verts/unit/section.html +7 -0
- package/dist/assets/themes/base/_sections/verts/unit/section.js +22 -0
- package/dist/assets/themes/base/_sections/verts/unit/section.json5 +24 -0
- package/dist/assets/themes/base/_sections/verts/unit/section.scss +24 -0
- package/dist/assets/themes/base/_theme.js +13 -0
- package/dist/assets/themes/base/_theme.scss +4 -0
- package/dist/assets/themes/bootstrap/_theme.js +16 -0
- package/dist/assets/themes/bootstrap/_theme.scss +11 -0
- package/dist/assets/themes/bootstrap/js/index.esm.js +19 -0
- package/dist/assets/themes/bootstrap/js/index.umd.js +34 -0
- package/dist/assets/themes/bootstrap/js/src/alert.js +87 -0
- package/dist/assets/themes/bootstrap/js/src/base-component.js +86 -0
- package/dist/assets/themes/bootstrap/js/src/button.js +72 -0
- package/dist/assets/themes/bootstrap/js/src/carousel.js +474 -0
- package/dist/assets/themes/bootstrap/js/src/collapse.js +297 -0
- package/dist/assets/themes/bootstrap/js/src/dom/data.js +55 -0
- package/dist/assets/themes/bootstrap/js/src/dom/event-handler.js +317 -0
- package/dist/assets/themes/bootstrap/js/src/dom/manipulator.js +71 -0
- package/dist/assets/themes/bootstrap/js/src/dom/selector-engine.js +126 -0
- package/dist/assets/themes/bootstrap/js/src/dropdown.js +458 -0
- package/dist/assets/themes/bootstrap/js/src/modal.js +378 -0
- package/dist/assets/themes/bootstrap/js/src/offcanvas.js +282 -0
- package/dist/assets/themes/bootstrap/js/src/popover.js +97 -0
- package/dist/assets/themes/bootstrap/js/src/scrollspy.js +296 -0
- package/dist/assets/themes/bootstrap/js/src/tab.js +315 -0
- package/dist/assets/themes/bootstrap/js/src/toast.js +224 -0
- package/dist/assets/themes/bootstrap/js/src/tooltip.js +632 -0
- package/dist/assets/themes/bootstrap/js/src/util/backdrop.js +151 -0
- package/dist/assets/themes/bootstrap/js/src/util/component-functions.js +35 -0
- package/dist/assets/themes/bootstrap/js/src/util/config.js +65 -0
- package/dist/assets/themes/bootstrap/js/src/util/focustrap.js +115 -0
- package/dist/assets/themes/bootstrap/js/src/util/index.js +306 -0
- package/dist/assets/themes/bootstrap/js/src/util/sanitizer.js +117 -0
- package/dist/assets/themes/bootstrap/js/src/util/scrollbar.js +114 -0
- package/dist/assets/themes/bootstrap/js/src/util/swipe.js +146 -0
- package/dist/assets/themes/bootstrap/js/src/util/template-factory.js +160 -0
- package/dist/assets/themes/bootstrap/overrides/_accordion.scss +21 -0
- package/dist/assets/themes/bootstrap/overrides/_avatars.scss +51 -0
- package/dist/assets/themes/bootstrap/overrides/_blog-images.scss +45 -0
- package/dist/assets/themes/bootstrap/overrides/_buttons-adaptive.scss +141 -0
- package/dist/assets/themes/bootstrap/overrides/_color-shades.scss +25 -0
- package/dist/assets/themes/bootstrap/overrides/_cursor-utilities.scss +13 -0
- package/dist/assets/themes/bootstrap/overrides/_index.scss +30 -0
- package/dist/assets/themes/bootstrap/overrides/_links.scss +26 -0
- package/dist/assets/themes/bootstrap/overrides/_soft-colors.scss +99 -0
- package/dist/assets/themes/bootstrap/overrides/_spacing-extended.scss +74 -0
- package/dist/assets/themes/bootstrap/overrides/_spinners.scss +22 -0
- package/dist/assets/themes/bootstrap/overrides/_typography-utilities.scss +40 -0
- package/dist/assets/themes/bootstrap/scss/_accordion.scss +153 -0
- package/dist/assets/themes/bootstrap/scss/_alert.scss +68 -0
- package/dist/assets/themes/bootstrap/scss/_badge.scss +38 -0
- package/dist/assets/themes/bootstrap/scss/_breadcrumb.scss +40 -0
- package/dist/assets/themes/bootstrap/scss/_button-group.scss +147 -0
- package/dist/assets/themes/bootstrap/scss/_buttons.scss +216 -0
- package/dist/assets/themes/bootstrap/scss/_card.scss +238 -0
- package/dist/assets/themes/bootstrap/scss/_carousel.scss +226 -0
- package/dist/assets/themes/bootstrap/scss/_close.scss +66 -0
- package/dist/assets/themes/bootstrap/scss/_containers.scss +41 -0
- package/dist/assets/themes/bootstrap/scss/_dropdown.scss +250 -0
- package/dist/assets/themes/bootstrap/scss/_forms.scss +9 -0
- package/dist/assets/themes/bootstrap/scss/_functions.scss +302 -0
- package/dist/assets/themes/bootstrap/scss/_grid.scss +39 -0
- package/dist/assets/themes/bootstrap/scss/_helpers.scss +12 -0
- package/dist/assets/themes/bootstrap/scss/_images.scss +42 -0
- package/dist/assets/themes/bootstrap/scss/_list-group.scss +199 -0
- package/dist/assets/themes/bootstrap/scss/_maps.scss +174 -0
- package/dist/assets/themes/bootstrap/scss/_mixins.scss +42 -0
- package/dist/assets/themes/bootstrap/scss/_modal.scss +240 -0
- package/dist/assets/themes/bootstrap/scss/_nav.scss +197 -0
- package/dist/assets/themes/bootstrap/scss/_navbar.scss +289 -0
- package/dist/assets/themes/bootstrap/scss/_offcanvas.scss +147 -0
- package/dist/assets/themes/bootstrap/scss/_pagination.scss +109 -0
- package/dist/assets/themes/bootstrap/scss/_placeholders.scss +51 -0
- package/dist/assets/themes/bootstrap/scss/_popover.scss +196 -0
- package/dist/assets/themes/bootstrap/scss/_progress.scss +68 -0
- package/dist/assets/themes/bootstrap/scss/_reboot.scss +611 -0
- package/dist/assets/themes/bootstrap/scss/_root.scss +187 -0
- package/dist/assets/themes/bootstrap/scss/_spinners.scss +85 -0
- package/dist/assets/themes/bootstrap/scss/_tables.scss +171 -0
- package/dist/assets/themes/bootstrap/scss/_toasts.scss +73 -0
- package/dist/assets/themes/bootstrap/scss/_tooltip.scss +119 -0
- package/dist/assets/themes/bootstrap/scss/_transitions.scss +27 -0
- package/dist/assets/themes/bootstrap/scss/_type.scss +106 -0
- package/dist/assets/themes/bootstrap/scss/_utilities.scss +806 -0
- package/dist/assets/themes/bootstrap/scss/_variables-dark.scss +102 -0
- package/dist/assets/themes/bootstrap/scss/_variables.scss +1753 -0
- package/dist/assets/themes/bootstrap/scss/bootstrap-grid.scss +62 -0
- package/dist/assets/themes/bootstrap/scss/bootstrap-reboot.scss +10 -0
- package/dist/assets/themes/bootstrap/scss/bootstrap-utilities.scss +19 -0
- package/dist/assets/themes/bootstrap/scss/bootstrap.scss +52 -0
- package/dist/assets/themes/bootstrap/scss/forms/_floating-labels.scss +97 -0
- package/dist/assets/themes/bootstrap/scss/forms/_form-check.scss +189 -0
- package/dist/assets/themes/bootstrap/scss/forms/_form-control.scss +214 -0
- package/dist/assets/themes/bootstrap/scss/forms/_form-range.scss +91 -0
- package/dist/assets/themes/bootstrap/scss/forms/_form-select.scss +80 -0
- package/dist/assets/themes/bootstrap/scss/forms/_form-text.scss +11 -0
- package/dist/assets/themes/bootstrap/scss/forms/_input-group.scss +132 -0
- package/dist/assets/themes/bootstrap/scss/forms/_labels.scss +36 -0
- package/dist/assets/themes/bootstrap/scss/forms/_validation.scss +12 -0
- package/dist/assets/themes/bootstrap/scss/helpers/_clearfix.scss +3 -0
- package/dist/assets/themes/bootstrap/scss/helpers/_color-bg.scss +7 -0
- package/dist/assets/themes/bootstrap/scss/helpers/_colored-links.scss +30 -0
- package/dist/assets/themes/bootstrap/scss/helpers/_focus-ring.scss +5 -0
- package/dist/assets/themes/bootstrap/scss/helpers/_icon-link.scss +25 -0
- package/dist/assets/themes/bootstrap/scss/helpers/_position.scss +36 -0
- package/dist/assets/themes/bootstrap/scss/helpers/_ratio.scss +26 -0
- package/dist/assets/themes/bootstrap/scss/helpers/_stacks.scss +15 -0
- package/dist/assets/themes/bootstrap/scss/helpers/_stretched-link.scss +15 -0
- package/dist/assets/themes/bootstrap/scss/helpers/_text-truncation.scss +7 -0
- package/dist/assets/themes/bootstrap/scss/helpers/_visually-hidden.scss +8 -0
- package/dist/assets/themes/bootstrap/scss/helpers/_vr.scss +8 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_alert.scss +18 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_backdrop.scss +14 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_banner.scss +7 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_border-radius.scss +78 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_box-shadow.scss +18 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_breakpoints.scss +127 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_buttons.scss +70 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_caret.scss +69 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_clearfix.scss +9 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_color-mode.scss +21 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_color-scheme.scss +7 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_container.scss +11 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_deprecate.scss +10 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_forms.scss +163 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_gradients.scss +47 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_grid.scss +151 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_image.scss +16 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_list-group.scss +26 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_lists.scss +7 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_pagination.scss +10 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_reset-text.scss +17 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_resize.scss +6 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_table-variants.scss +24 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_text-truncate.scss +8 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_transition.scss +26 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_utilities.scss +97 -0
- package/dist/assets/themes/bootstrap/scss/mixins/_visually-hidden.scss +38 -0
- package/dist/assets/themes/bootstrap/scss/tests/jasmine.js +16 -0
- package/dist/assets/themes/bootstrap/scss/tests/mixins/_auto-import-of-variables-dark.test.scss +7 -0
- package/dist/assets/themes/bootstrap/scss/tests/mixins/_color-modes.test.scss +69 -0
- package/dist/assets/themes/bootstrap/scss/tests/mixins/_media-query-color-mode-full.test.scss +8 -0
- package/dist/assets/themes/bootstrap/scss/tests/mixins/_utilities.test.scss +393 -0
- package/dist/assets/themes/bootstrap/scss/tests/sass-true/register.js +14 -0
- package/dist/assets/themes/bootstrap/scss/tests/sass-true/runner.js +17 -0
- package/dist/assets/themes/bootstrap/scss/tests/utilities/_api.test.scss +75 -0
- package/dist/assets/themes/bootstrap/scss/utilities/_api.scss +47 -0
- package/dist/assets/themes/bootstrap/scss/vendor/_rfs.scss +348 -0
- package/dist/assets/themes/classy/README.md +89 -0
- package/dist/assets/themes/classy/_config.scss +245 -0
- package/dist/assets/themes/classy/_theme.js +31 -0
- package/dist/assets/themes/classy/_theme.scss +57 -0
- package/dist/assets/themes/classy/css/app/_panels.scss +183 -0
- package/dist/assets/themes/classy/css/base/_fonts.scss +79 -0
- package/dist/assets/themes/classy/css/base/_no-raise.scss +49 -0
- package/dist/assets/themes/classy/css/base/_root.scss +113 -0
- package/dist/assets/themes/classy/css/base/_typography.scss +154 -0
- package/dist/assets/themes/classy/css/base/_utilities.scss +284 -0
- package/dist/assets/themes/classy/css/components/_alerts.scss +51 -0
- package/dist/assets/themes/classy/css/components/_badges.scss +46 -0
- package/dist/assets/themes/classy/css/components/_buttons.scss +175 -0
- package/dist/assets/themes/classy/css/components/_cards.scss +41 -0
- package/dist/assets/themes/classy/css/components/_dropdowns.scss +48 -0
- package/dist/assets/themes/classy/css/components/_forms.scss +171 -0
- package/dist/assets/themes/classy/css/components/_receipt.scss +45 -0
- package/dist/assets/themes/classy/css/layout/_footer.scss +298 -0
- package/dist/assets/themes/classy/css/layout/_general.scss +209 -0
- package/dist/assets/themes/classy/css/layout/_nav.scss +154 -0
- package/dist/assets/themes/classy/css/layout/_shell.scss +458 -0
- package/dist/assets/themes/classy/css/marketing/_bento.scss +238 -0
- package/dist/assets/themes/classy/css/marketing/_content.scss +1328 -0
- package/dist/assets/themes/classy/css/marketing/_downloads.scss +246 -0
- package/dist/assets/themes/classy/css/marketing/_hero.scss +311 -0
- package/dist/assets/themes/classy/css/marketing/_sections.scss +649 -0
- package/dist/assets/themes/classy/css/pages/404/index.scss +67 -0
- package/dist/assets/themes/classy/css/pages/_auth.scss +235 -0
- package/dist/assets/themes/classy/css/pages/admin/firebase/index.scss +22 -0
- package/dist/assets/themes/classy/css/pages/blog/[slug].scss +56 -0
- package/dist/assets/themes/classy/css/pages/cookies.scss +2 -0
- package/dist/assets/themes/classy/css/pages/dashboard/account/index.scss +31 -0
- package/dist/assets/themes/classy/css/pages/feedback/index.scss +39 -0
- package/dist/assets/themes/classy/css/pages/legal/_document.scss +192 -0
- package/dist/assets/themes/classy/css/pages/payment/checkout/index.scss +585 -0
- package/dist/assets/themes/classy/css/pages/payment/confirmation/index.scss +9 -0
- package/dist/assets/themes/classy/css/pages/privacy.scss +2 -0
- package/dist/assets/themes/classy/css/pages/status/index.scss +164 -0
- package/dist/assets/themes/classy/css/pages/terms.scss +2 -0
- package/dist/assets/themes/classy/css/pages/updates/index.scss +128 -0
- package/dist/assets/themes/classy/fonts/inter-italic-latin-ext.woff2 +0 -0
- package/dist/assets/themes/classy/fonts/inter-italic-latin.woff2 +0 -0
- package/dist/assets/themes/classy/fonts/inter-normal-latin-ext.woff2 +0 -0
- package/dist/assets/themes/classy/fonts/inter-normal-latin.woff2 +0 -0
- package/dist/assets/themes/classy/fonts/newsreader-italic-latin-ext.woff2 +0 -0
- package/dist/assets/themes/classy/fonts/newsreader-italic-latin.woff2 +0 -0
- package/dist/assets/themes/classy/fonts/newsreader-normal-latin-ext.woff2 +0 -0
- package/dist/assets/themes/classy/fonts/newsreader-normal-latin.woff2 +0 -0
- package/dist/assets/themes/classy/js/hero-demo-form.js +56 -0
- package/dist/assets/themes/neobrutalism/README.md +118 -0
- package/dist/assets/themes/neobrutalism/_config.scss +139 -0
- package/dist/assets/themes/neobrutalism/_layouts/frontend/core/base.html +30 -0
- package/dist/assets/themes/neobrutalism/_layouts/frontend/pages/index.html +275 -0
- package/dist/assets/themes/neobrutalism/_theme.js +24 -0
- package/dist/assets/themes/neobrutalism/_theme.scss +61 -0
- package/dist/assets/themes/neobrutalism/css/base/_mixins.scss +46 -0
- package/dist/assets/themes/neobrutalism/css/base/_root.scss +169 -0
- package/dist/assets/themes/neobrutalism/css/base/_typography.scss +61 -0
- package/dist/assets/themes/neobrutalism/css/base/_utilities.scss +89 -0
- package/dist/assets/themes/neobrutalism/css/components/_billing-toggle.scss +74 -0
- package/dist/assets/themes/neobrutalism/css/components/_buttons.scss +148 -0
- package/dist/assets/themes/neobrutalism/css/components/_cards.scss +47 -0
- package/dist/assets/themes/neobrutalism/css/components/_forms.scss +88 -0
- package/dist/assets/themes/neobrutalism/css/components/_marketing.scss +244 -0
- package/dist/assets/themes/neobrutalism/css/layout/_general.scss +213 -0
- package/dist/assets/themes/neobrutalism/css/layout/_navigation.scss +171 -0
- package/dist/assets/themes/neobrutalism/css/pages/index.scss +203 -0
- package/dist/assets/themes/neobrutalism/css/pages/pricing/index.scss +58 -0
- package/dist/assets/themes/neobrutalism/css/pages/test/libraries/layers/index.scss +7 -0
- package/dist/assets/themes/neobrutalism/js/pages/test/libraries/layers/index.js +9 -0
- package/dist/assets/themes/newsflash/README.md +117 -0
- package/dist/assets/themes/newsflash/_components/heading/lede/component.html +14 -0
- package/dist/assets/themes/newsflash/_components/heading/lede/component.json5 +23 -0
- package/dist/assets/themes/newsflash/_components/heading/rule-head/component.html +17 -0
- package/dist/assets/themes/newsflash/_components/heading/rule-head/component.json5 +23 -0
- package/dist/assets/themes/newsflash/_components/news/byline/component.html +12 -0
- package/dist/assets/themes/newsflash/_components/news/byline/component.json5 +18 -0
- package/dist/assets/themes/newsflash/_components/news/story-card/component.html +25 -0
- package/dist/assets/themes/newsflash/_components/news/story-card/component.json5 +21 -0
- package/dist/assets/themes/newsflash/_config.scss +147 -0
- package/dist/assets/themes/newsflash/_layouts/frontend/core/base.html +51 -0
- package/dist/assets/themes/newsflash/_layouts/frontend/pages/blog/index.html +299 -0
- package/dist/assets/themes/newsflash/_layouts/frontend/pages/blog/post.html +235 -0
- package/dist/assets/themes/newsflash/_layouts/frontend/pages/index.html +328 -0
- package/dist/assets/themes/newsflash/_sections/marketing/desks/section.html +39 -0
- package/dist/assets/themes/newsflash/_sections/marketing/desks/section.json5 +49 -0
- package/dist/assets/themes/newsflash/_sections/marketing/newsletter-cta/section.html +103 -0
- package/dist/assets/themes/newsflash/_sections/marketing/newsletter-cta/section.json5 +50 -0
- package/dist/assets/themes/newsflash/_sections/marketing/rundown/section.html +28 -0
- package/dist/assets/themes/newsflash/_sections/marketing/rundown/section.json5 +40 -0
- package/dist/assets/themes/newsflash/_theme.js +24 -0
- package/dist/assets/themes/newsflash/_theme.scss +70 -0
- package/dist/assets/themes/newsflash/css/base/_fonts.scss +80 -0
- package/dist/assets/themes/newsflash/css/base/_mixins.scss +51 -0
- package/dist/assets/themes/newsflash/css/base/_root.scss +257 -0
- package/dist/assets/themes/newsflash/css/base/_typography.scss +49 -0
- package/dist/assets/themes/newsflash/css/base/_utilities.scss +122 -0
- package/dist/assets/themes/newsflash/css/components/_badges.scss +65 -0
- package/dist/assets/themes/newsflash/css/components/_billing-toggle.scss +61 -0
- package/dist/assets/themes/newsflash/css/components/_buttons.scss +139 -0
- package/dist/assets/themes/newsflash/css/components/_cards.scss +47 -0
- package/dist/assets/themes/newsflash/css/components/_editorial.scss +173 -0
- package/dist/assets/themes/newsflash/css/components/_forms.scss +75 -0
- package/dist/assets/themes/newsflash/css/components/_infinite-scroll.scss +102 -0
- package/dist/assets/themes/newsflash/css/components/_panels.scss +156 -0
- package/dist/assets/themes/newsflash/css/components/_ticker.scss +67 -0
- package/dist/assets/themes/newsflash/css/layout/_general.scss +330 -0
- package/dist/assets/themes/newsflash/css/layout/_navigation.scss +168 -0
- package/dist/assets/themes/newsflash/css/pages/404/index.scss +79 -0
- package/dist/assets/themes/newsflash/css/pages/blog/[slug].scss +186 -0
- package/dist/assets/themes/newsflash/css/pages/blog/index.scss +17 -0
- package/dist/assets/themes/newsflash/css/pages/index.scss +157 -0
- package/dist/assets/themes/newsflash/css/pages/pricing/index.scss +55 -0
- package/dist/assets/themes/newsflash/css/pages/test/libraries/layers/index.scss +7 -0
- package/dist/assets/themes/newsflash/fonts/fraunces-italic-latin-ext.woff2 +0 -0
- package/dist/assets/themes/newsflash/fonts/fraunces-italic-latin.woff2 +0 -0
- package/dist/assets/themes/newsflash/fonts/fraunces-normal-latin-ext.woff2 +0 -0
- package/dist/assets/themes/newsflash/fonts/fraunces-normal-latin.woff2 +0 -0
- package/dist/assets/themes/newsflash/fonts/schibsted-grotesk-italic-latin-ext.woff2 +0 -0
- package/dist/assets/themes/newsflash/fonts/schibsted-grotesk-italic-latin.woff2 +0 -0
- package/dist/assets/themes/newsflash/fonts/schibsted-grotesk-normal-latin-ext.woff2 +0 -0
- package/dist/assets/themes/newsflash/fonts/schibsted-grotesk-normal-latin.woff2 +0 -0
- package/dist/assets/themes/newsflash/js/pages/blog/[slug].js +29 -0
- package/dist/assets/themes/newsflash/js/pages/test/libraries/layers/index.js +9 -0
- package/dist/build.js +249 -0
- package/dist/cli-run.js +34 -0
- package/dist/cli.js +49 -0
- package/dist/commands/build.js +32 -0
- package/dist/commands/cdp/capture.js +91 -0
- package/dist/commands/cdp/client.js +140 -0
- package/dist/commands/cdp/eval.js +20 -0
- package/dist/commands/cdp/quit.js +84 -0
- package/dist/commands/cdp/relaunch.js +62 -0
- package/dist/commands/cdp/shot.js +20 -0
- package/dist/commands/cdp/status.js +38 -0
- package/dist/commands/cdp/theme.js +21 -0
- package/dist/commands/cdp.js +53 -0
- package/dist/commands/clean.js +34 -0
- package/dist/commands/deploy.js +75 -0
- package/dist/commands/finalize-release.js +238 -0
- package/dist/commands/install.js +37 -0
- package/dist/commands/launch.js +150 -0
- package/dist/commands/lib/dependencies.js +35 -0
- package/dist/commands/lib/deploy-precheck.js +117 -0
- package/dist/commands/lib/ensure-target.js +300 -0
- package/dist/commands/logs.js +185 -0
- package/dist/commands/package.js +31 -0
- package/dist/commands/publish.js +34 -0
- package/dist/commands/push-secrets.js +141 -0
- package/dist/commands/release.js +286 -0
- package/dist/commands/runner.js +1874 -0
- package/dist/commands/sign-windows.js +563 -0
- package/dist/commands/test.js +121 -0
- package/dist/commands/update.js +21 -0
- package/dist/commands/validate-certs.js +238 -0
- package/dist/commands/version.js +9 -0
- package/dist/config/page-template.html +35 -0
- package/dist/defaults/.github/workflows/build.yml +276 -0
- package/dist/defaults/AGENTS.md +109 -0
- package/dist/defaults/CHANGELOG.md +15 -0
- package/dist/defaults/CLAUDE.md +1 -0
- package/dist/defaults/_.gitignore +24 -0
- package/dist/defaults/_mas/README.md +49 -0
- package/dist/defaults/_mas/entitlements.mas.inherit.plist +12 -0
- package/dist/defaults/_mas/entitlements.mas.loginhelper.plist +8 -0
- package/dist/defaults/_mas/entitlements.mas.plist +33 -0
- package/dist/defaults/config/certs/.gitkeep +0 -0
- package/dist/defaults/config/certs/README.md +60 -0
- package/dist/defaults/config/icons/macos/dmg.png +0 -0
- package/dist/defaults/config/icons/macos/icon.png +0 -0
- package/dist/defaults/config/icons/macos/tray.png +0 -0
- package/dist/defaults/config/icons/windows/icon.png +0 -0
- package/dist/defaults/config/omega.json5 +279 -0
- package/dist/defaults/docs/README.md +17 -0
- package/dist/defaults/gulpfile.js +6 -0
- package/dist/defaults/hooks/build/post.js +9 -0
- package/dist/defaults/hooks/build/pre.js +9 -0
- package/dist/defaults/hooks/notarize/post.js +16 -0
- package/dist/defaults/hooks/release/post.js +9 -0
- package/dist/defaults/hooks/release/pre.js +9 -0
- package/dist/defaults/src/assets/js/components/about/index.js +10 -0
- package/dist/defaults/src/assets/js/components/main/index.js +14 -0
- package/dist/defaults/src/assets/js/components/settings/index.js +10 -0
- package/dist/defaults/src/assets/scss/main.scss +34 -0
- package/dist/defaults/src/assets/scss/pages/about.scss +3 -0
- package/dist/defaults/src/assets/scss/pages/main.scss +4 -0
- package/dist/defaults/src/assets/scss/pages/settings.scss +3 -0
- package/dist/defaults/src/integrations/context-menu/index.js +60 -0
- package/dist/defaults/src/integrations/menu/index.js +58 -0
- package/dist/defaults/src/integrations/tray/index.js +60 -0
- package/dist/defaults/src/main.js +78 -0
- package/dist/defaults/src/preload.js +15 -0
- package/dist/defaults/src/views/about/index.html +3 -0
- package/dist/defaults/src/views/main/index.html +8 -0
- package/dist/defaults/src/views/settings/index.html +3 -0
- package/dist/defaults/test/README.md +41 -0
- package/dist/defaults/test/_init.js +10 -0
- package/dist/gulp/main.js +144 -0
- package/dist/gulp/tasks/audit.js +82 -0
- package/dist/gulp/tasks/build-config.js +445 -0
- package/dist/gulp/tasks/bundle.js +451 -0
- package/dist/gulp/tasks/defaults.js +20 -0
- package/dist/gulp/tasks/distribute.js +8 -0
- package/dist/gulp/tasks/html.js +95 -0
- package/dist/gulp/tasks/package-quick.js +102 -0
- package/dist/gulp/tasks/package.js +53 -0
- package/dist/gulp/tasks/release.js +57 -0
- package/dist/gulp/tasks/sass.js +82 -0
- package/dist/gulp/tasks/serve.js +191 -0
- package/dist/hooks/notarize.js +70 -0
- package/dist/index.js +14 -0
- package/dist/lib/_menu-mixin.js +199 -0
- package/dist/lib/analytics.js +360 -0
- package/dist/lib/app-state.js +220 -0
- package/dist/lib/auth-flow.js +160 -0
- package/dist/lib/auth-persistence.js +207 -0
- package/dist/lib/auto-updater.js +752 -0
- package/dist/lib/client-bridge.js +371 -0
- package/dist/lib/context-menu.js +302 -0
- package/dist/lib/context.js +162 -0
- package/dist/lib/deep-link.js +370 -0
- package/dist/lib/fontawesome.js +203 -0
- package/dist/lib/ipc.js +169 -0
- package/dist/lib/logger-lite.js +259 -0
- package/dist/lib/logger.js +4 -0
- package/dist/lib/menu.js +521 -0
- package/dist/lib/protocol.js +85 -0
- package/dist/lib/remote-config.js +224 -0
- package/dist/lib/remote-scripts.js +158 -0
- package/dist/lib/restart-manager/index.js +550 -0
- package/dist/lib/restart-manager/install.js +353 -0
- package/dist/lib/restart-manager/protocol.js +274 -0
- package/dist/lib/sign-helpers/auto-unlock.js +95 -0
- package/dist/lib/sign-helpers/entitlements.js +98 -0
- package/dist/lib/sign-helpers/resolve-icons.js +171 -0
- package/dist/lib/sign-helpers/sign-events.js +75 -0
- package/dist/lib/sign-helpers/update-info.js +186 -0
- package/dist/lib/startup.js +214 -0
- package/dist/lib/storage.js +193 -0
- package/dist/lib/templating.js +85 -0
- package/dist/lib/theme.js +173 -0
- package/dist/lib/tray.js +414 -0
- package/dist/lib/usage.js +141 -0
- package/dist/lib/window-manager.js +509 -0
- package/dist/main.js +542 -0
- package/dist/omega-bin.js +6 -0
- package/dist/preload.js +241 -0
- package/dist/renderer.js +456 -0
- package/dist/test/assert.js +4 -0
- package/dist/test/fixtures/consumer-app/config/omega.json5 +39 -0
- package/dist/test/fixtures/consumer-app/package.json +13 -0
- package/dist/test/fixtures/consumer-app/src/assets/js/components/main/index.js +11 -0
- package/dist/test/fixtures/consumer-app/src/assets/scss/main.scss +3 -0
- package/dist/test/fixtures/consumer-app/src/main.js +17 -0
- package/dist/test/fixtures/consumer-app/src/preload.js +4 -0
- package/dist/test/fixtures/consumer-app/src/views/main/index.html +4 -0
- package/dist/test/harness/boot-entry.js +237 -0
- package/dist/test/harness/main-entry.js +494 -0
- package/dist/test/harness/package.json +6 -0
- package/dist/test/harness/renderer-entry.js +173 -0
- package/dist/test/harness/renderer-preload.js +310 -0
- package/dist/test/harness/renderer.html +12 -0
- package/dist/test/index.js +65 -0
- package/dist/test/runner.js +99 -0
- package/dist/test/runners/boot.js +414 -0
- package/dist/test/runners/electron.js +92 -0
- package/dist/test/runners/render-event.js +46 -0
- package/dist/test/suites/boot/build-isolation.test.js +54 -0
- package/dist/test/suites/boot/consumer-app-boots.test.js +99 -0
- package/dist/test/suites/boot/restart-manager.test.js +38 -0
- package/dist/test/suites/boot/storage-bundled.test.js +59 -0
- package/dist/test/suites/boot/theme.test.js +68 -0
- package/dist/test/suites/boot/view-suite.test.js +47 -0
- package/dist/test/suites/build/attach-log-file.test.js +99 -0
- package/dist/test/suites/build/audit.test.js +271 -0
- package/dist/test/suites/build/boot-fixture.test.js +48 -0
- package/dist/test/suites/build/build-config.test.js +457 -0
- package/dist/test/suites/build/build-verbs.test.js +156 -0
- package/dist/test/suites/build/build-workflow-jobs.test.js +55 -0
- package/dist/test/suites/build/cdp.test.js +89 -0
- package/dist/test/suites/build/cli.test.js +135 -0
- package/dist/test/suites/build/config-schema.test.js +133 -0
- package/dist/test/suites/build/defaults-scaffold.test.js +192 -0
- package/dist/test/suites/build/deliver-certs.test.js +95 -0
- package/dist/test/suites/build/derive-signing-env.test.js +122 -0
- package/dist/test/suites/build/electron-node-version.test.js +49 -0
- package/dist/test/suites/build/electron-targets.test.js +92 -0
- package/dist/test/suites/build/ensure-target.test.js +131 -0
- package/dist/test/suites/build/entitlements.test.js +107 -0
- package/dist/test/suites/build/env-delivery.test.js +166 -0
- package/dist/test/suites/build/env-watch.test.js +86 -0
- package/dist/test/suites/build/exports.test.js +63 -0
- package/dist/test/suites/build/finalize-release.test.js +152 -0
- package/dist/test/suites/build/format-fetch-error.test.js +85 -0
- package/dist/test/suites/build/framework-deps.test.js +173 -0
- package/dist/test/suites/build/get-config.test.js +137 -0
- package/dist/test/suites/build/github-utils.test.js +54 -0
- package/dist/test/suites/build/icon-sheet.test.js +62 -0
- package/dist/test/suites/build/license-stamp.test.js +63 -0
- package/dist/test/suites/build/logger-lite.test.js +148 -0
- package/dist/test/suites/build/logs-command.test.js +226 -0
- package/dist/test/suites/build/manager.test.js +193 -0
- package/dist/test/suites/build/menu-mixin.test.js +130 -0
- package/dist/test/suites/build/merge-line-files.test.js +230 -0
- package/dist/test/suites/build/omega-shell.test.js +94 -0
- package/dist/test/suites/build/omega-tokens.test.js +64 -0
- package/dist/test/suites/build/project-scripts-deps.test.js +90 -0
- package/dist/test/suites/build/push-secrets.test.js +226 -0
- package/dist/test/suites/build/release-pipeline.test.js +365 -0
- package/dist/test/suites/build/renderer-auth-bridge.test.js +158 -0
- package/dist/test/suites/build/renderer-entry-key.test.js +37 -0
- package/dist/test/suites/build/renderer-node-shims.test.js +125 -0
- package/dist/test/suites/build/resolve-icons.test.js +296 -0
- package/dist/test/suites/build/resolve-signing-cert.test.js +342 -0
- package/dist/test/suites/build/restart-manager-install.test.js +178 -0
- package/dist/test/suites/build/restart-manager-protocol.test.js +158 -0
- package/dist/test/suites/build/run-consumer-hook.test.js +137 -0
- package/dist/test/suites/build/runner.test.js +2599 -0
- package/dist/test/suites/build/sanitize-signing-env.test.js +98 -0
- package/dist/test/suites/build/sanitize-url.test.js +78 -0
- package/dist/test/suites/build/secure-remote-url.test.js +42 -0
- package/dist/test/suites/build/sentry.test.js +89 -0
- package/dist/test/suites/build/serve-resolve-electron.test.js +58 -0
- package/dist/test/suites/build/setup-scripts.test.js +172 -0
- package/dist/test/suites/build/sign-events.test.js +90 -0
- package/dist/test/suites/build/sign-windows-e2e.test.js +302 -0
- package/dist/test/suites/build/sign-windows.test.js +313 -0
- package/dist/test/suites/build/strip-dev-blocks.test.js +116 -0
- package/dist/test/suites/build/templating.test.js +95 -0
- package/dist/test/suites/build/test-discovery.test.js +64 -0
- package/dist/test/suites/build/test-stealth.test.js +83 -0
- package/dist/test/suites/build/test-target-no-match.test.js +119 -0
- package/dist/test/suites/build/update-info.test.js +224 -0
- package/dist/test/suites/build/url-helpers.test.js +289 -0
- package/dist/test/suites/build/validate-certs.test.js +103 -0
- package/dist/test/suites/build/validate-config.test.js +90 -0
- package/dist/test/suites/build/verb-logs.test.js +43 -0
- package/dist/test/suites/build/wave5-pins.test.js +35 -0
- package/dist/test/suites/main/analytics.test.js +364 -0
- package/dist/test/suites/main/app-state.test.js +197 -0
- package/dist/test/suites/main/auth-flow.test.js +196 -0
- package/dist/test/suites/main/auth-persistence.test.js +167 -0
- package/dist/test/suites/main/auto-updater.test.js +1138 -0
- package/dist/test/suites/main/boot-sequence.test.js +77 -0
- package/dist/test/suites/main/client-bridge.integration.test.js +134 -0
- package/dist/test/suites/main/client-bridge.test.js +249 -0
- package/dist/test/suites/main/context-menu.test.js +365 -0
- package/dist/test/suites/main/context.test.js +155 -0
- package/dist/test/suites/main/deep-link.test.js +288 -0
- package/dist/test/suites/main/epipe-handler.test.js +40 -0
- package/dist/test/suites/main/fontawesome.test.js +147 -0
- package/dist/test/suites/main/harness-cdp.test.js +49 -0
- package/dist/test/suites/main/ipc.test.js +165 -0
- package/dist/test/suites/main/menu.test.js +419 -0
- package/dist/test/suites/main/protocol.test.js +77 -0
- package/dist/test/suites/main/remote-config.test.js +189 -0
- package/dist/test/suites/main/remote-scripts.test.js +276 -0
- package/dist/test/suites/main/restart-manager.test.js +328 -0
- package/dist/test/suites/main/startup-paths-and-ua.test.js +99 -0
- package/dist/test/suites/main/startup.test.js +129 -0
- package/dist/test/suites/main/stealth-window.test.js +74 -0
- package/dist/test/suites/main/storage.test.js +89 -0
- package/dist/test/suites/main/theme.test.js +137 -0
- package/dist/test/suites/main/tray.test.js +322 -0
- package/dist/test/suites/main/truncate-on-boot.test.js +22 -0
- package/dist/test/suites/main/url-helpers.test.js +429 -0
- package/dist/test/suites/main/usage.test.js +127 -0
- package/dist/test/suites/main/window-bounds.test.js +169 -0
- package/dist/test/suites/main/window-manager.test.js +233 -0
- package/dist/test/suites/renderer/analytics-bridge.test.js +128 -0
- package/dist/test/suites/renderer/cross-context-helpers.test.js +131 -0
- package/dist/test/suites/renderer/fontawesome.test.js +190 -0
- package/dist/test/suites/renderer/round-trip.test.js +107 -0
- package/dist/test/suites/renderer/theme.test.js +118 -0
- package/dist/test/suites/renderer/tooltips.test.js +166 -0
- package/dist/test/suites/renderer/verts.test.js +100 -0
- package/dist/test/suites/renderer/window-em-surface.test.js +107 -0
- package/dist/test/utils/dist-snapshot.js +36 -0
- package/dist/test/utils/extended-mode-warning.js +13 -0
- package/dist/utils/app-root.js +28 -0
- package/dist/utils/attach-log-file.js +4 -0
- package/dist/utils/build-pipeline.js +58 -0
- package/dist/utils/deliver-certs.js +69 -0
- package/dist/utils/derive-signing-env.js +56 -0
- package/dist/utils/dist-root.js +21 -0
- package/dist/utils/electron-node-version.js +48 -0
- package/dist/utils/electron-targets.js +72 -0
- package/dist/utils/format-fetch-error.js +38 -0
- package/dist/utils/github.js +73 -0
- package/dist/utils/load-consumer-file.js +26 -0
- package/dist/utils/merge-line-files.js +5 -0
- package/dist/utils/mode-helpers.js +147 -0
- package/dist/utils/resolve-signing-cert.js +175 -0
- package/dist/utils/run-consumer-hook.js +38 -0
- package/dist/utils/runner-env.js +687 -0
- package/dist/utils/safe-install.js +4 -0
- package/dist/utils/sanitize-signing-env.js +45 -0
- package/dist/utils/sanitize-url.js +28 -0
- package/dist/utils/secure-remote-url.js +25 -0
- package/dist/utils/stealth-window.js +37 -0
- package/dist/utils/test-stealth.js +29 -0
- package/dist/utils/url-helpers.js +169 -0
- package/dist/vendor/account/engine.js +182 -0
- package/dist/vendor/account/features.js +220 -0
- package/dist/vendor/account/index.js +53 -0
- package/dist/vendor/account/schema.js +272 -0
- package/dist/vendor/account/subscription.js +38 -0
- package/dist/vendor/analytics/adapters/ga4.js +26 -0
- package/dist/vendor/analytics/adapters/meta.js +26 -0
- package/dist/vendor/analytics/adapters/resolve.js +130 -0
- package/dist/vendor/analytics/adapters/tiktok.js +27 -0
- package/dist/vendor/analytics/catalog.js +908 -0
- package/dist/vendor/analytics/consent.js +49 -0
- package/dist/vendor/analytics/core.js +141 -0
- package/dist/vendor/analytics/identity.js +136 -0
- package/dist/vendor/analytics/index.js +170 -0
- package/dist/vendor/analytics/logger.js +40 -0
- package/dist/vendor/analytics/transports/browser.js +110 -0
- package/dist/vendor/config/company.js +31 -0
- package/dist/vendor/config/defaults.js +173 -0
- package/dist/vendor/config/demo.js +18 -0
- package/dist/vendor/config/desktop-artifacts.js +110 -0
- package/dist/vendor/config/edit.js +769 -0
- package/dist/vendor/config/env-delivery.js +145 -0
- package/dist/vendor/config/env-rules.js +93 -0
- package/dist/vendor/config/env-schema.js +1078 -0
- package/dist/vendor/config/env.js +445 -0
- package/dist/vendor/config/hooks.js +97 -0
- package/dist/vendor/config/index.js +237 -0
- package/dist/vendor/config/instances.js +208 -0
- package/dist/vendor/config/load.js +490 -0
- package/dist/vendor/config/merge.js +68 -0
- package/dist/vendor/config/order.js +139 -0
- package/dist/vendor/config/ports.js +374 -0
- package/dist/vendor/config/providers.js +32 -0
- package/dist/vendor/config/repo.js +142 -0
- package/dist/vendor/config/retired-keys.js +430 -0
- package/dist/vendor/config/schema.js +1610 -0
- package/dist/vendor/config/secrets.js +50 -0
- package/dist/vendor/config/seed.js +34 -0
- package/dist/vendor/config/site-global.js +205 -0
- package/dist/vendor/config/validate.js +554 -0
- package/dist/vendor/config/winback.js +61 -0
- package/dist/vendor/devkit/actions-secrets.js +145 -0
- package/dist/vendor/devkit/attach-log-file.js +262 -0
- package/dist/vendor/devkit/bundle.js +292 -0
- package/dist/vendor/devkit/certs.js +199 -0
- package/dist/vendor/devkit/ci-workflows.js +520 -0
- package/dist/vendor/devkit/clean-dirs.js +28 -0
- package/dist/vendor/devkit/cli-router.js +156 -0
- package/dist/vendor/devkit/defaults-engine.js +372 -0
- package/dist/vendor/devkit/deploy-precheck.js +54 -0
- package/dist/vendor/devkit/deploy-record.js +180 -0
- package/dist/vendor/devkit/deploy.js +286 -0
- package/dist/vendor/devkit/empty-modules-plugin.js +64 -0
- package/dist/vendor/devkit/env-watch.js +132 -0
- package/dist/vendor/devkit/framework-deps.js +46 -0
- package/dist/vendor/devkit/license.js +155 -0
- package/dist/vendor/devkit/local.js +1905 -0
- package/dist/vendor/devkit/logger.js +128 -0
- package/dist/vendor/devkit/merge-line-files.js +296 -0
- package/dist/vendor/devkit/npm-registry.js +52 -0
- package/dist/vendor/devkit/omega-bin.js +345 -0
- package/dist/vendor/devkit/prompt.js +187 -0
- package/dist/vendor/devkit/safe-install.js +18 -0
- package/dist/vendor/devkit/scaffold-guard.js +96 -0
- package/dist/vendor/devkit/stop-signals.js +28 -0
- package/dist/vendor/devkit/strip-dev-blocks-plugin.js +29 -0
- package/dist/vendor/devkit/strip-dev-blocks.js +32 -0
- package/dist/vendor/devkit/target-dependencies.js +137 -0
- package/dist/vendor/devkit/target-secrets.js +165 -0
- package/dist/vendor/devkit/test/assert.js +120 -0
- package/dist/vendor/devkit/test/define-cases.js +104 -0
- package/dist/vendor/devkit/test/extended-mode-warning.js +22 -0
- package/dist/vendor/devkit/test/runner-core.js +554 -0
- package/dist/vendor/devkit/test/scope.js +162 -0
- package/dist/vendor/devkit/update.js +569 -0
- package/dist/vendor/monitoring/core.js +180 -0
- package/dist/vendor/monitoring/env.js +49 -0
- package/dist/vendor/monitoring/index.js +28 -0
- package/dist/vendor/monitoring/logger.js +39 -0
- package/dist/vendor/monitoring/main.js +99 -0
- package/dist/vendor/monitoring/preload.js +45 -0
- package/dist/vendor/monitoring/renderer.js +87 -0
- package/docs/analytics.md +140 -0
- package/docs/app-state.md +92 -0
- package/docs/audit.md +69 -0
- package/docs/auto-updater.md +243 -0
- package/docs/boot-sequence.md +39 -0
- package/docs/build-system.md +161 -0
- package/docs/cdp-debugging.md +169 -0
- package/docs/client-bridge.md +267 -0
- package/docs/common-mistakes.md +21 -0
- package/docs/config-schema.md +120 -0
- package/docs/context-menu.md +112 -0
- package/docs/context.md +81 -0
- package/docs/css.md +84 -0
- package/docs/deep-link.md +178 -0
- package/docs/environment-detection.md +104 -0
- package/docs/fontawesome.md +107 -0
- package/docs/hooks.md +87 -0
- package/docs/icons.md +79 -0
- package/docs/index.md +279 -0
- package/docs/installer-options.md +162 -0
- package/docs/ipc.md +61 -0
- package/docs/lib-modules.md +53 -0
- package/docs/logging.md +229 -0
- package/docs/menu.md +160 -0
- package/docs/releasing.md +229 -0
- package/docs/remote-config.md +118 -0
- package/docs/remote-scripts.md +144 -0
- package/docs/restart-manager.md +144 -0
- package/docs/runner.md +253 -0
- package/docs/sentry.md +97 -0
- package/docs/shared/agent-docs.md +89 -0
- package/docs/shared/analytics.md +612 -0
- package/docs/shared/brands.md +51 -0
- package/docs/shared/breaking-changes.md +497 -0
- package/docs/shared/config.md +1387 -0
- package/docs/shared/deploys.md +215 -0
- package/docs/shared/icons.md +201 -0
- package/docs/shared/local-dev.md +147 -0
- package/docs/shared/logging.md +202 -0
- package/docs/shared/monitoring.md +153 -0
- package/docs/shared/publishing.md +183 -0
- package/docs/shared/rulings.md +34 -0
- package/docs/shared/testing.md +147 -0
- package/docs/shared/theming.md +604 -0
- package/docs/shared/translation.md +291 -0
- package/docs/shared/updates.md +61 -0
- package/docs/signing.md +267 -0
- package/docs/startup.md +142 -0
- package/docs/storage.md +59 -0
- package/docs/templating.md +101 -0
- package/docs/test-boot-layer.md +157 -0
- package/docs/test-framework.md +357 -0
- package/docs/themes.md +135 -0
- package/docs/tooltips.md +99 -0
- package/docs/tray.md +164 -0
- package/docs/usage.md +58 -0
- package/docs/verts.md +62 -0
- package/docs/windows.md +149 -0
- package/package.json +184 -0
- package/scripts/sync-nvmrc.js +100 -0
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
// Shared devkit module — vendored into dist/vendor/devkit at prepare time by the
|
|
2
|
+
// preparePackage `after` hook. This shim keeps the framework's internal require
|
|
3
|
+
// paths stable while the implementation lives in @omega.js/devkit.
|
|
4
|
+
module.exports = require('../vendor/devkit/safe-install.js');
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
// Empty-string signing env vars are WORSE than unset ones: the consumer .env
|
|
2
|
+
// template ships placeholders like CSC_LINK="" so dotenv injects them as
|
|
3
|
+
// set-but-empty, and app-builder-lib only null-checks — it then calls
|
|
4
|
+
// importCertificate('') whose path.resolve('') lands on the PROJECT ROOT and
|
|
5
|
+
// dies with "<projectRoot> not a file". Same hazard for the notarization and
|
|
6
|
+
// Windows signing placeholders.
|
|
7
|
+
//
|
|
8
|
+
// Rule: an empty (or whitespace-only) value on any of these keys means "not
|
|
9
|
+
// configured" — delete it so electron-builder's own auto-discovery/skip logic
|
|
10
|
+
// applies. Returns the list of removed keys (for logging).
|
|
11
|
+
|
|
12
|
+
const SIGNING_ENV_KEYS = [
|
|
13
|
+
'CSC_LINK',
|
|
14
|
+
'CSC_KEY_PASSWORD',
|
|
15
|
+
'CSC_NAME',
|
|
16
|
+
// electron-builder's OWN Windows cert name — @omega.js/desktop's signer reads
|
|
17
|
+
// WIN_EV_TOKEN_PATH ([#337](https://github.com/Omega-JS-Stack/omega/issues/337)).
|
|
18
|
+
'WIN_CSC_LINK',
|
|
19
|
+
'WIN_CSC_KEY_PASSWORD',
|
|
20
|
+
'WIN_EV_TOKEN_PATH',
|
|
21
|
+
'WIN_TIMESTAMP_URL',
|
|
22
|
+
'SIGNTOOL_PATH',
|
|
23
|
+
'APPLE_API_KEY',
|
|
24
|
+
'APPLE_API_KEY_ID',
|
|
25
|
+
'APPLE_API_ISSUER',
|
|
26
|
+
'APPLE_ID',
|
|
27
|
+
'APPLE_APP_SPECIFIC_PASSWORD',
|
|
28
|
+
'APPLE_TEAM_ID',
|
|
29
|
+
];
|
|
30
|
+
|
|
31
|
+
function sanitizeSigningEnv(env) {
|
|
32
|
+
const removed = [];
|
|
33
|
+
|
|
34
|
+
for (const key of SIGNING_ENV_KEYS) {
|
|
35
|
+
if (typeof env[key] === 'string' && env[key].trim() === '') {
|
|
36
|
+
delete env[key];
|
|
37
|
+
removed.push(key);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
return removed;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
module.exports = sanitizeSigningEnv;
|
|
45
|
+
module.exports.SIGNING_ENV_KEYS = SIGNING_ENV_KEYS;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
// sanitize-url — zero-trust URL gate for any string passed to `shell.openExternal`,
|
|
2
|
+
// `BrowserWindow.loadURL`, or any other API that resolves a URL protocol.
|
|
3
|
+
//
|
|
4
|
+
// Returns the URL unchanged when its protocol is `http:` or `https:`; returns `''`
|
|
5
|
+
// for anything else (`javascript:`, `file:`, `data:`, `vbscript:`, `chrome:`, etc.).
|
|
6
|
+
// Empty string is preferred over throwing because callers can no-op cleanly without
|
|
7
|
+
// try/catch noise. shell.openExternal('') is a documented no-op on all platforms.
|
|
8
|
+
//
|
|
9
|
+
// This is for HTTP(S) URLs only. Custom schemes like `restart-manager://` or `mailto:`
|
|
10
|
+
// must be passed through directly — do NOT route them through this helper.
|
|
11
|
+
//
|
|
12
|
+
// Usage:
|
|
13
|
+
// const sanitizeURL = require('./utils/sanitize-url.js');
|
|
14
|
+
// const safe = sanitizeURL(maybeHostileUrl);
|
|
15
|
+
// if (safe) shell.openExternal(safe);
|
|
16
|
+
|
|
17
|
+
function sanitizeURL(url) {
|
|
18
|
+
if (!url || typeof url !== 'string') return '';
|
|
19
|
+
try {
|
|
20
|
+
const parsed = new URL(url);
|
|
21
|
+
if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') return '';
|
|
22
|
+
return url;
|
|
23
|
+
} catch (e) {
|
|
24
|
+
return '';
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
module.exports = sanitizeURL;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* isSecureRemoteUrl(url) — transport gate for the remote code/config lanes
|
|
3
|
+
* (lib/remote-scripts.js, lib/remote-config.js), which execute or apply
|
|
4
|
+
* network-fetched content. Only `https:` passes; `http:` is allowed solely
|
|
5
|
+
* for loopback hosts so local dev servers keep working. Unparseable URLs
|
|
6
|
+
* fail closed.
|
|
7
|
+
*
|
|
8
|
+
* @param {string} url - The resolved fetch URL.
|
|
9
|
+
* @returns {boolean} True when the URL is safe to fetch remote content from.
|
|
10
|
+
*/
|
|
11
|
+
const LOOPBACK_HOSTS = new Set(['localhost', '127.0.0.1', '[::1]', '::1']);
|
|
12
|
+
|
|
13
|
+
function isSecureRemoteUrl(url) {
|
|
14
|
+
let parsed;
|
|
15
|
+
try {
|
|
16
|
+
parsed = new URL(url);
|
|
17
|
+
} catch (e) {
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
if (parsed.protocol === 'https:') return true;
|
|
22
|
+
return parsed.protocol === 'http:' && LOOPBACK_HOSTS.has(parsed.hostname);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
module.exports = { isSecureRemoteUrl };
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
// stealth-window — the single stealth-surfacing recipe for test runs.
|
|
2
|
+
//
|
|
3
|
+
// Makes a BrowserWindow render normally while staying invisible and
|
|
4
|
+
// non-intrusive: opacity 0 (still painting — deliberately NOT hide()/minimize(),
|
|
5
|
+
// which occlusion-throttle Chromium: rAF pauses and visibilityState flips, so
|
|
6
|
+
// tests would exercise a DIFFERENT runtime), click-through (real OS clicks pass
|
|
7
|
+
// to whatever is underneath; synthetic input — executeJavaScript,
|
|
8
|
+
// sendInputEvent, CDP — is unaffected), and never focused.
|
|
9
|
+
//
|
|
10
|
+
// show()/focus() are rerouted because RAW windows (created with
|
|
11
|
+
// `new BrowserWindow()` outside lib/window-manager — e.g. a consumer's
|
|
12
|
+
// automation popup) call win.show() themselves: show() becomes showInactive()
|
|
13
|
+
// so the window surfaces without taking keyboard focus, and focus() becomes a
|
|
14
|
+
// no-op. Stealth is decided at application time — a window stealthed here stays
|
|
15
|
+
// stealthed for its lifetime (OMEGA_TEST_SHOW=1 is honored by the callers, per
|
|
16
|
+
// window, at creation/surface time).
|
|
17
|
+
//
|
|
18
|
+
// Consumers: lib/window-manager.js `_surface()` (named windows) and main.js's
|
|
19
|
+
// `browser-window-created` hook (every other window during test runs). Shared
|
|
20
|
+
// predicate: utils/test-stealth.js.
|
|
21
|
+
//
|
|
22
|
+
// Idempotent — applying twice is harmless.
|
|
23
|
+
|
|
24
|
+
function applyStealth(win) {
|
|
25
|
+
if (!win || win.isDestroyed()) {
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
win.setOpacity(0);
|
|
30
|
+
win.setIgnoreMouseEvents(true);
|
|
31
|
+
|
|
32
|
+
const showInactive = win.showInactive.bind(win);
|
|
33
|
+
win.show = () => showInactive();
|
|
34
|
+
win.focus = () => {};
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
module.exports = { applyStealth };
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
// test-stealth — single source of truth for "should @omega.js/desktop keep test-run UI invisible
|
|
2
|
+
// and non-intrusive?".
|
|
3
|
+
//
|
|
4
|
+
// True when the process is in Testing mode AND the developer hasn't opted into
|
|
5
|
+
// watching the run (OMEGA_TEST_SHOW=1). Shared by:
|
|
6
|
+
// - lib/window-manager.js — stealth window surfacing (showInactive + opacity 0
|
|
7
|
+
// + click-through)
|
|
8
|
+
// - main.js — app-level activation suppression on macOS (accessory policy via
|
|
9
|
+
// app.dock.hide(), so a launching test app never steals keyboard focus)
|
|
10
|
+
// - test/harness/main-entry.js — same suppression for the spawned harness app,
|
|
11
|
+
// which initializes its Manager only after app ready (too late to prevent
|
|
12
|
+
// the launch activation)
|
|
13
|
+
//
|
|
14
|
+
// Pass the Manager when you have one — its isTesting() is authoritative (honors
|
|
15
|
+
// config.em.environment overrides). Without one (the harness, pre-Manager code),
|
|
16
|
+
// falls back to the standalone mode-helpers check (OMEGA_TEST_MODE=true).
|
|
17
|
+
//
|
|
18
|
+
// Usage:
|
|
19
|
+
// const isTestStealth = require('./utils/test-stealth.js');
|
|
20
|
+
// if (isTestStealth(manager)) { ... }
|
|
21
|
+
|
|
22
|
+
const { isTesting } = require('./mode-helpers.js');
|
|
23
|
+
|
|
24
|
+
function isTestStealth(manager) {
|
|
25
|
+
const testing = manager ? manager.isTesting() : isTesting();
|
|
26
|
+
return testing && process.env.OMEGA_TEST_SHOW !== '1';
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
module.exports = isTestStealth;
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
// Backend URL helpers, shared across all Manager contexts (main / renderer / preload /
|
|
2
|
+
// build). Mirror @omega.js/client's contract so @omega.js/desktop apps can hit the same dev/prod backends as
|
|
3
|
+
// UJM and BXM consumers.
|
|
4
|
+
//
|
|
5
|
+
// `getEnvironment()` is the SINGLE SOURCE OF TRUTH and lives in src/utils/mode-helpers.js
|
|
6
|
+
// (alongside the is*() family; mirrors @omega.js/backend/UJM/BXM). It returns exactly ONE of
|
|
7
|
+
// 'development' | 'testing' | 'production' (mutually exclusive; testing wins).
|
|
8
|
+
//
|
|
9
|
+
// `getFunctionsUrl()` / `getApiUrl()` / `getWebsiteUrl()` route through
|
|
10
|
+
// `this.getEnvironment()` and resolve to LOCAL urls in BOTH development AND testing —
|
|
11
|
+
// callers normally pass NO argument. An explicit `environment` arg is an override
|
|
12
|
+
// (used mainly by tests to pin a specific environment's mapping).
|
|
13
|
+
|
|
14
|
+
// Guarded the way @omega.js/extension's twin is: the renderer bundle is a
|
|
15
|
+
// browser context, and only the Node-side contexts (main, preload, build, the
|
|
16
|
+
// test harness) carry the resolved-port env channel.
|
|
17
|
+
function envPort(name) {
|
|
18
|
+
return typeof process !== 'undefined' && process.env
|
|
19
|
+
? process.env[name]
|
|
20
|
+
: undefined;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
// The classic dev WEBSITE ORIGIN: a lockstep copy of @omega.js/config's
|
|
24
|
+
// CLASSIC_DEV_ORIGIN, which is the SSOT. This module is attached in the RENDERER
|
|
25
|
+
// too (src/renderer.js), so it rides the browser bundle and cannot require that
|
|
26
|
+
// Node-only package (fs, net, json5); @omega.js/client mirrors the same constant
|
|
27
|
+
// for the same reason. The build suite pins this copy to the config package's
|
|
28
|
+
// value, so a drift fails a test instead of a user
|
|
29
|
+
// ([#747](https://github.com/Omega-JS-Stack/omega/issues/747)).
|
|
30
|
+
const CLASSIC_DEV_ORIGIN = 'https://localhost:4000';
|
|
31
|
+
|
|
32
|
+
// One local port, from whichever channel this context has: the env var first
|
|
33
|
+
// (the CLI that booted the stack publishes it, N7), then the `dev.ports` map
|
|
34
|
+
// the bundle baked into OMEGA_BUILD_JSON: a PACKAGED main process has no
|
|
35
|
+
// parent env, so a bumped emulator port reaches it only that way
|
|
36
|
+
// ([#745](https://github.com/Omega-JS-Stack/omega/issues/745)). Same helper,
|
|
37
|
+
// same order as @omega.js/extension's src/utils/url-helpers.js.
|
|
38
|
+
function localPort(context, envName, name) {
|
|
39
|
+
return envPort(envName) || context?.config?.dev?.ports?.[name];
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function getFunctionsUrl(environment) {
|
|
43
|
+
const env = environment || this.getEnvironment();
|
|
44
|
+
const projectId = this?.config?.cloud?.config?.projectId;
|
|
45
|
+
|
|
46
|
+
if (!projectId) {
|
|
47
|
+
throw new Error('cloud.config.projectId not set in config/omega.json5');
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// Local for development OR testing; production otherwise. The port rides the
|
|
51
|
+
// same three-step chain getApiUrl() walks: the OMEGA_*_PORT env channel (N7),
|
|
52
|
+
// then the baked map, then the classic default.
|
|
53
|
+
if (env === 'development' || env === 'testing') {
|
|
54
|
+
const port = localPort(this, 'OMEGA_FUNCTIONS_PORT', 'functions') || 5001;
|
|
55
|
+
return `http://localhost:${port}/${projectId}/us-central1`;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
return `https://us-central1-${projectId}.cloudfunctions.net`;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
function getApiUrl(environment) {
|
|
62
|
+
const env = environment || this.getEnvironment();
|
|
63
|
+
|
|
64
|
+
// Local for development OR testing; production otherwise. Mirrors
|
|
65
|
+
// @omega.js/backend's getApiUrl (N7): a resolved OMEGA_HTTPS_PORT means
|
|
66
|
+
// `mgr serve`'s mkcert proxy is up (https); otherwise plain http to the
|
|
67
|
+
// hosting emulator (env port, baked port, or classic 5002).
|
|
68
|
+
if (env === 'development' || env === 'testing') {
|
|
69
|
+
const httpsPort = localPort(this, 'OMEGA_HTTPS_PORT', 'https');
|
|
70
|
+
return httpsPort
|
|
71
|
+
? `https://localhost:${httpsPort}`
|
|
72
|
+
: `http://localhost:${localPort(this, 'OMEGA_HOSTING_PORT', 'hosting') || 5002}`;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// Prod: api.<brand host>. Mirrors @omega.js/client.getApiUrl. Never derive
|
|
76
|
+
// from authDomain — it is an auth concern (the brand host, with /__/auth/*
|
|
77
|
+
// self-hosted at build time) and must stay free to change independently.
|
|
78
|
+
const brandUrl = this?.config?.brand?.url;
|
|
79
|
+
if (!brandUrl) {
|
|
80
|
+
throw new Error('brand.url not set in config/omega.json5');
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
return `https://api.${new URL(brandUrl).hostname}`;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// Marketing-site / brand website URL. Dev → the local website's whole ORIGIN, the
|
|
87
|
+
// same answer @omega.js/client's getDevWebsiteOrigin() gives every other surface
|
|
88
|
+
// whenever the website published one
|
|
89
|
+
// ([#262](https://github.com/Omega-JS-Stack/omega/issues/262)): the baked
|
|
90
|
+
// `dev.origin` the live website published (scheme, host AND port, the complete
|
|
91
|
+
// fact) wins, else a port from the usual chain (OMEGA_WEBSITE_PORT, then the baked
|
|
92
|
+
// `dev.ports.website`) composed over https, else the classic dev origin. The scheme
|
|
93
|
+
// is https because `omega dev` fronts its public port with the mkcert proxy by
|
|
94
|
+
// default, so a port alone can never say it
|
|
95
|
+
// ([#747](https://github.com/Omega-JS-Stack/omega/issues/747)).
|
|
96
|
+
// Prod → `config.brand.url`. Use this whenever app code wants to link out to "the
|
|
97
|
+
// website" (Help → Website tray/menu items, "Open in browser," billing portal
|
|
98
|
+
// landings) so dev runs don't punch out to the real domain.
|
|
99
|
+
function getWebsiteUrl(environment) {
|
|
100
|
+
const env = environment || this.getEnvironment();
|
|
101
|
+
|
|
102
|
+
// Local for development OR testing; production otherwise.
|
|
103
|
+
if (env === 'development' || env === 'testing') {
|
|
104
|
+
const origin = this?.config?.dev?.origin;
|
|
105
|
+
if (origin) {
|
|
106
|
+
return origin;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
const port = localPort(this, 'OMEGA_WEBSITE_PORT', 'website');
|
|
110
|
+
return port ? `https://localhost:${port}` : CLASSIC_DEV_ORIGIN;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
const url = this?.config?.brand?.url;
|
|
114
|
+
if (!url) {
|
|
115
|
+
throw new Error('brand.url not set in config/omega.json5');
|
|
116
|
+
}
|
|
117
|
+
return url;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
// Sign-in URL that round-trips an auth token back to the app. Points at the brand
|
|
121
|
+
// website's /signin page (UJM), chained through its /token page so a successful login
|
|
122
|
+
// mints a Firebase custom token and redirects to `<brand.id>://auth/token` — the
|
|
123
|
+
// deep-link built-in that hands the token to client-bridge (signInWithCustomToken).
|
|
124
|
+
// Same env split as getWebsiteUrl: dev/test → the local website, prod → brand.url.
|
|
125
|
+
// The token page redirects with ?authToken=<token> — the ONE modern shape the
|
|
126
|
+
// auth/token route reads (legacy-app formats are UJM's concern, not @omega.js/desktop's).
|
|
127
|
+
//
|
|
128
|
+
// `returnUrl` overrides the final hop (default: `<brand.id>://auth/token`). Used by
|
|
129
|
+
// lib/auth-flow.js in dev, where the custom scheme isn't OS-registered — the flow
|
|
130
|
+
// returns to a loopback HTTP listener instead (RFC 8252 §7.3).
|
|
131
|
+
function getAuthUrl(environment, returnUrl) {
|
|
132
|
+
const site = this.getWebsiteUrl(environment);
|
|
133
|
+
const brandId = this?.config?.brand?.id;
|
|
134
|
+
if (!brandId) {
|
|
135
|
+
throw new Error('brand.id not set in config/omega.json5');
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
const tokenUrl = new URL('/token', site);
|
|
139
|
+
tokenUrl.searchParams.set('authReturnUrl', returnUrl || `${brandId}://auth/token`);
|
|
140
|
+
|
|
141
|
+
const signinUrl = new URL('/signin', site);
|
|
142
|
+
signinUrl.searchParams.set('authReturnUrl', tokenUrl.toString());
|
|
143
|
+
return signinUrl.toString();
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// Mix the URL helpers into a Manager constructor's prototype + the constructor itself.
|
|
147
|
+
// getEnvironment() is NOT attached here — it's the SSOT in src/utils/mode-helpers.js.
|
|
148
|
+
// These helpers call `this.getEnvironment()`, so mode-helpers' attachTo() must run before
|
|
149
|
+
// (or alongside) this one — every Manager entry point attaches mode-helpers first.
|
|
150
|
+
function attachTo(Manager) {
|
|
151
|
+
Manager.prototype.getFunctionsUrl = getFunctionsUrl;
|
|
152
|
+
Manager.prototype.getApiUrl = getApiUrl;
|
|
153
|
+
Manager.prototype.getWebsiteUrl = getWebsiteUrl;
|
|
154
|
+
Manager.prototype.getAuthUrl = getAuthUrl;
|
|
155
|
+
Manager.getFunctionsUrl = getFunctionsUrl;
|
|
156
|
+
Manager.getApiUrl = getApiUrl;
|
|
157
|
+
Manager.getWebsiteUrl = getWebsiteUrl;
|
|
158
|
+
Manager.getAuthUrl = getAuthUrl;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
module.exports = {
|
|
162
|
+
attachTo,
|
|
163
|
+
CLASSIC_DEV_ORIGIN,
|
|
164
|
+
localPort,
|
|
165
|
+
getFunctionsUrl,
|
|
166
|
+
getApiUrl,
|
|
167
|
+
getWebsiteUrl,
|
|
168
|
+
getAuthUrl,
|
|
169
|
+
};
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schema resolution engine — extracted verbatim from @omega.js/backend's
|
|
3
|
+
* src/manager/helpers/user.js, with ONE change: the '$uuid'/'$randomId'/'$apiKey'
|
|
4
|
+
* value generators are injected via ctx.generators instead of being required
|
|
5
|
+
* in-module. Hosts that can generate them (@omega.js/backend, Node) inject real generators;
|
|
6
|
+
* hosts that can't (@omega.js/client, browser) pass none and the fields resolve to
|
|
7
|
+
* null — the doc's real values always come from the backend.
|
|
8
|
+
*
|
|
9
|
+
* The engine is environment-agnostic: no dependencies, no Node APIs.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Check if a schema node is a leaf field definition (has 'type' and 'default')
|
|
14
|
+
*/
|
|
15
|
+
function isLeaf(node) {
|
|
16
|
+
return node !== null
|
|
17
|
+
&& typeof node === 'object'
|
|
18
|
+
&& typeof node.type === 'string'
|
|
19
|
+
&& 'default' in node;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Coerce a value to the expected type. Returns the coerced value or undefined if coercion fails.
|
|
24
|
+
*/
|
|
25
|
+
function coerce(value, type) {
|
|
26
|
+
if (typeof value === type) {
|
|
27
|
+
return value;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
switch (type) {
|
|
31
|
+
case 'number': {
|
|
32
|
+
const n = Number(value);
|
|
33
|
+
return Number.isNaN(n) ? undefined : n;
|
|
34
|
+
}
|
|
35
|
+
case 'boolean': {
|
|
36
|
+
if (value === 'true' || value === 1) return true;
|
|
37
|
+
if (value === 'false' || value === 0) return false;
|
|
38
|
+
return Boolean(value);
|
|
39
|
+
}
|
|
40
|
+
case 'string': {
|
|
41
|
+
return String(value);
|
|
42
|
+
}
|
|
43
|
+
default: {
|
|
44
|
+
return undefined;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Resolve a single leaf field value
|
|
51
|
+
*/
|
|
52
|
+
function resolveLeaf(leaf, value, ctx) {
|
|
53
|
+
// Null handling
|
|
54
|
+
if (value === null) {
|
|
55
|
+
return leaf.nullable ? null : resolveDefault(leaf.default, ctx);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// Undefined → apply default
|
|
59
|
+
if (value === undefined) {
|
|
60
|
+
return resolveDefault(leaf.default, ctx);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// Array type — just check it's an array, don't coerce
|
|
64
|
+
if (leaf.type === 'array') {
|
|
65
|
+
return Array.isArray(value) ? value : resolveDefault(leaf.default, ctx);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// Type coercion
|
|
69
|
+
if (typeof value !== leaf.type) {
|
|
70
|
+
const coerced = coerce(value, leaf.type);
|
|
71
|
+
return coerced !== undefined ? coerced : resolveDefault(leaf.default, ctx);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
return value;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Resolve a default value, handling special tokens
|
|
79
|
+
*/
|
|
80
|
+
function resolveDefault(def, ctx) {
|
|
81
|
+
if (typeof def !== 'string' || !def.startsWith('$')) {
|
|
82
|
+
// For arrays, return a fresh copy to avoid shared references
|
|
83
|
+
if (Array.isArray(def)) {
|
|
84
|
+
return [...def];
|
|
85
|
+
}
|
|
86
|
+
return def;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
switch (def) {
|
|
90
|
+
case '$uuid':
|
|
91
|
+
return ctx.generators.uuid ? ctx.generators.uuid() : null;
|
|
92
|
+
case '$randomId':
|
|
93
|
+
return ctx.generators.randomId ? ctx.generators.randomId() : null;
|
|
94
|
+
case '$apiKey':
|
|
95
|
+
return ctx.generators.apiKey ? ctx.generators.apiKey() : null;
|
|
96
|
+
case '$oldDate':
|
|
97
|
+
return ctx.oldDate;
|
|
98
|
+
case '$oldDateUNIX':
|
|
99
|
+
return ctx.oldDateUNIX;
|
|
100
|
+
case '$now':
|
|
101
|
+
return ctx.now;
|
|
102
|
+
case '$nowUNIX':
|
|
103
|
+
return ctx.nowUNIX;
|
|
104
|
+
default:
|
|
105
|
+
return def;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Expand $timestamp shorthand into a schema branch
|
|
111
|
+
*/
|
|
112
|
+
function expandTimestamp(variant) {
|
|
113
|
+
const useNow = variant === '$timestamp:now';
|
|
114
|
+
|
|
115
|
+
return {
|
|
116
|
+
timestamp: { type: 'string', default: useNow ? '$now' : '$oldDate' },
|
|
117
|
+
timestampUNIX: { type: 'number', default: useNow ? '$nowUNIX' : 0 },
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* Recursively resolve a schema node against input data
|
|
123
|
+
*/
|
|
124
|
+
function resolve(schema, data, ctx) {
|
|
125
|
+
data = data || {};
|
|
126
|
+
const result = {};
|
|
127
|
+
|
|
128
|
+
// If $passthrough, start by copying all existing keys from data
|
|
129
|
+
const isPassthrough = schema.$passthrough === true;
|
|
130
|
+
const template = schema.$template || null;
|
|
131
|
+
|
|
132
|
+
if (isPassthrough) {
|
|
133
|
+
// Copy all data keys first (they'll be overwritten by defined schema fields below)
|
|
134
|
+
for (const key of Object.keys(data)) {
|
|
135
|
+
if (template && !key.startsWith('$') && !(key in schema)) {
|
|
136
|
+
// Dynamic key — resolve against template
|
|
137
|
+
result[key] = resolve(template, data[key], ctx);
|
|
138
|
+
} else if (!(key in schema) || key.startsWith('$')) {
|
|
139
|
+
// Unknown key not in schema — passthrough as-is
|
|
140
|
+
result[key] = data[key];
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
// Now resolve each defined schema field
|
|
146
|
+
for (const [key, node] of Object.entries(schema)) {
|
|
147
|
+
// Skip meta keys
|
|
148
|
+
if (key.startsWith('$')) {
|
|
149
|
+
continue;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
// Handle string shorthands
|
|
153
|
+
if (typeof node === 'string') {
|
|
154
|
+
if (node === '$template') {
|
|
155
|
+
// Resolve against parent's $template
|
|
156
|
+
result[key] = resolve(template, data[key], ctx);
|
|
157
|
+
continue;
|
|
158
|
+
}
|
|
159
|
+
if (node.startsWith('$timestamp')) {
|
|
160
|
+
// Expand timestamp shorthand and recurse
|
|
161
|
+
result[key] = resolve(expandTimestamp(node), data[key], ctx);
|
|
162
|
+
continue;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
// Leaf field
|
|
167
|
+
if (isLeaf(node)) {
|
|
168
|
+
result[key] = resolveLeaf(node, data[key], ctx);
|
|
169
|
+
continue;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
// Nested branch (plain object)
|
|
173
|
+
if (node !== null && typeof node === 'object') {
|
|
174
|
+
result[key] = resolve(node, data[key], ctx);
|
|
175
|
+
continue;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
return result;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
module.exports = { resolve };
|