@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
package/dist/main.js
ADDED
|
@@ -0,0 +1,542 @@
|
|
|
1
|
+
// Main-process Manager singleton.
|
|
2
|
+
// Consumer entry: `new (require('@omega.js/desktop/main'))().initialize()` — config auto-loads (config/omega.json5).
|
|
3
|
+
// Boot sequence below — each step delegates to a `lib/*.js` module. Stubs today, real impls land in pass 2.
|
|
4
|
+
|
|
5
|
+
const LoggerLite = require('./lib/logger-lite.js');
|
|
6
|
+
|
|
7
|
+
const storage = require('./lib/storage.js');
|
|
8
|
+
const theme = require('./lib/theme.js');
|
|
9
|
+
const fontawesome = require('./lib/fontawesome.js');
|
|
10
|
+
// Error reporting is the shared @omega.js/monitoring contract (#380) — the
|
|
11
|
+
// package's entry detects main vs renderer and forwards, exactly as the
|
|
12
|
+
// lib/sentry/ split it replaced did.
|
|
13
|
+
const sentry = require('./vendor/monitoring/index.js');
|
|
14
|
+
const protocol = require('./lib/protocol.js');
|
|
15
|
+
const deepLink = require('./lib/deep-link.js');
|
|
16
|
+
const authFlow = require('./lib/auth-flow.js');
|
|
17
|
+
const appState = require('./lib/app-state.js');
|
|
18
|
+
const ipc = require('./lib/ipc.js');
|
|
19
|
+
const autoUpdater = require('./lib/auto-updater.js');
|
|
20
|
+
const tray = require('./lib/tray.js');
|
|
21
|
+
const menu = require('./lib/menu.js');
|
|
22
|
+
const ctxMenu = require('./lib/context-menu.js');
|
|
23
|
+
const startup = require('./lib/startup.js');
|
|
24
|
+
const wmBridge = require('./lib/client-bridge.js');
|
|
25
|
+
const windows = require('./lib/window-manager.js');
|
|
26
|
+
const context = require('./lib/context.js');
|
|
27
|
+
const usage = require('./lib/usage.js');
|
|
28
|
+
const remoteConfig = require('./lib/remote-config.js');
|
|
29
|
+
const remoteScripts = require('./lib/remote-scripts.js');
|
|
30
|
+
const analytics = require('./lib/analytics.js');
|
|
31
|
+
const restartManager = require('./lib/restart-manager/index.js');
|
|
32
|
+
|
|
33
|
+
function Manager() {
|
|
34
|
+
const self = this;
|
|
35
|
+
|
|
36
|
+
self.config = null;
|
|
37
|
+
self.logger = new LoggerLite('main');
|
|
38
|
+
|
|
39
|
+
// Quit-vs-hide gating. The window-manager `close` handler checks `_allowQuit` /
|
|
40
|
+
// `_isQuitting` before deciding whether to actually close (=quit) or to swallow
|
|
41
|
+
// the event and just hide the window. Set true via `manager.quit({ force: true })`,
|
|
42
|
+
// by `app.on('before-quit')` (any user-initiated quit), and by the auto-updater
|
|
43
|
+
// when it's about to call `quitAndInstall()`.
|
|
44
|
+
self._allowQuit = false;
|
|
45
|
+
self._isQuitting = false;
|
|
46
|
+
|
|
47
|
+
// Public lib references (consumer code can call them by name)
|
|
48
|
+
self.storage = storage;
|
|
49
|
+
self.theme = theme;
|
|
50
|
+
self.fontawesome = fontawesome;
|
|
51
|
+
self.sentry = sentry;
|
|
52
|
+
self.protocol = protocol;
|
|
53
|
+
self.deepLink = deepLink;
|
|
54
|
+
self.authFlow = authFlow;
|
|
55
|
+
self.appState = appState;
|
|
56
|
+
self.ipc = ipc;
|
|
57
|
+
self.autoUpdater = autoUpdater;
|
|
58
|
+
self.tray = tray;
|
|
59
|
+
self.menu = menu;
|
|
60
|
+
self.contextMenu = ctxMenu;
|
|
61
|
+
self.startup = startup;
|
|
62
|
+
self.omega = wmBridge;
|
|
63
|
+
self.windows = windows;
|
|
64
|
+
self.context = context;
|
|
65
|
+
self.usage = usage;
|
|
66
|
+
self.remoteConfig = remoteConfig;
|
|
67
|
+
self.remoteScripts = remoteScripts;
|
|
68
|
+
self.analytics = analytics;
|
|
69
|
+
self.restartManager = restartManager;
|
|
70
|
+
|
|
71
|
+
return self;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// Open the sign-in round trip in the user's default browser (lib/auth-flow.js).
|
|
75
|
+
// Resolves once launched; completion arrives via the auth/token deep-link route →
|
|
76
|
+
// omega.handleAuthToken → the desktop:auth:sign-in-with-token broadcast.
|
|
77
|
+
Manager.prototype.openAuthFlow = function (options) {
|
|
78
|
+
return authFlow.open(options);
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
// Force a real quit, bypassing per-window `hideOnClose`. Use this anywhere the
|
|
82
|
+
// app legitimately wants to exit (tray Quit, Cmd+Q from menu role:'quit',
|
|
83
|
+
// auto-updater install). Without `{ force: true }`, the close events still get
|
|
84
|
+
// trapped by hide-on-close handlers and the app stays running.
|
|
85
|
+
Manager.prototype.quit = function (options) {
|
|
86
|
+
const self = this;
|
|
87
|
+
options = options || {};
|
|
88
|
+
|
|
89
|
+
if (options.force) {
|
|
90
|
+
self._allowQuit = true;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
try {
|
|
94
|
+
require('electron').app.quit();
|
|
95
|
+
} catch (e) { /* electron not available — no-op in test/headless */ }
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
// Force a relaunch — same gating as quit, but tells electron to start back up
|
|
99
|
+
// after exit. If an update has been downloaded, prefers `quitAndInstall()` so
|
|
100
|
+
// the user lands on the new version instead of the old one.
|
|
101
|
+
Manager.prototype.relaunch = function (options) {
|
|
102
|
+
const self = this;
|
|
103
|
+
options = options || {};
|
|
104
|
+
|
|
105
|
+
if (options.force) {
|
|
106
|
+
self._allowQuit = true;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
const electron = require('electron');
|
|
110
|
+
|
|
111
|
+
// If updater downloaded a fresh build, install + relaunch via electron-updater
|
|
112
|
+
// (which calls `app.quit()` internally with the right post-quit script). Falls
|
|
113
|
+
// back to plain relaunch if updater hasn't downloaded anything.
|
|
114
|
+
const updaterStatus = self.autoUpdater.getStatus();
|
|
115
|
+
if (updaterStatus.code === 'downloaded') {
|
|
116
|
+
return self.autoUpdater.installNow();
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
electron.app.relaunch();
|
|
120
|
+
electron.app.quit();
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
Manager.prototype.initialize = async function (consumerConfig, options) {
|
|
124
|
+
const self = this;
|
|
125
|
+
|
|
126
|
+
// Accept either an already-RESOLVED config object, a string path to a consumer
|
|
127
|
+
// project dir, or nothing. Default resolution order (when called with no arg):
|
|
128
|
+
// 1. OMEGA_BUILD_JSON.config — injected at build time by the bundle task's esbuild `define`. This is
|
|
129
|
+
// authoritative in packaged apps because config/omega.json5 is inside the asar —
|
|
130
|
+
// not loadable from disk. It's the RESOLVED config (Manager.getConfig() output —
|
|
131
|
+
// shared sections + targets.desktop overlaid) snapshotted at build time.
|
|
132
|
+
// 2. <appRoot>/config/omega.json5 — resolved via @omega.js/config for dev mode where
|
|
133
|
+
// @omega.js/desktop is loaded directly (unbundled). appRoot = the consumer project dir.
|
|
134
|
+
if (typeof consumerConfig === 'string') {
|
|
135
|
+
consumerConfig = loadResolvedConfig(consumerConfig);
|
|
136
|
+
} else if (!consumerConfig) {
|
|
137
|
+
// Try OMEGA_BUILD_JSON (set by DefinePlugin in packaged builds) first.
|
|
138
|
+
if (typeof OMEGA_BUILD_JSON !== 'undefined' && OMEGA_BUILD_JSON?.config) {
|
|
139
|
+
consumerConfig = OMEGA_BUILD_JSON.config;
|
|
140
|
+
} else {
|
|
141
|
+
const appRoot = require('./utils/app-root.js')();
|
|
142
|
+
consumerConfig = loadResolvedConfig(appRoot);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
self.config = consumerConfig || {};
|
|
147
|
+
self._options = options || {};
|
|
148
|
+
|
|
149
|
+
{
|
|
150
|
+
const fs = require('fs');
|
|
151
|
+
const _path = require('path');
|
|
152
|
+
const _app = require('electron').app;
|
|
153
|
+
|
|
154
|
+
const _productName = self.config.app?.productName || self.config.brand?.name;
|
|
155
|
+
if (_productName) {
|
|
156
|
+
_app.setName(_productName);
|
|
157
|
+
}
|
|
158
|
+
const _logPath = _app.isPackaged
|
|
159
|
+
? _path.join(_app.getPath('logs'), 'runtime.log')
|
|
160
|
+
: _path.join(process.cwd(), 'logs', 'runtime.log');
|
|
161
|
+
try { fs.writeFileSync(_logPath, ''); } catch (e) {}
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
self.logger.log(`Initializing @omega.js/desktop (main)... pid=${process.pid} platform=${process.platform} arch=${process.arch} packaged=${require('electron').app.isPackaged} argv=${JSON.stringify(process.argv.slice(1))}`);
|
|
165
|
+
|
|
166
|
+
try { if (require('electron').app.isPackaged) {
|
|
167
|
+
const { execFile } = require('child_process');
|
|
168
|
+
if (process.platform === 'darwin') {
|
|
169
|
+
const _appIdx = process.execPath.indexOf('.app');
|
|
170
|
+
if (_appIdx === -1) throw new Error('no .app in execPath');
|
|
171
|
+
const _appPath = process.execPath.substring(0, _appIdx + 4);
|
|
172
|
+
execFile('codesign', ['--verify', '--deep', '--strict', _appPath], (err) => {
|
|
173
|
+
if (err) {
|
|
174
|
+
self.logger.warn(`signing: NOT signed (${err.message.split('\n')[0]})`);
|
|
175
|
+
} else {
|
|
176
|
+
execFile('codesign', ['-dv', _appPath], { encoding: 'utf8' }, (e2, stdout, stderr) => {
|
|
177
|
+
const authority = (stderr || '').match(/Authority=(.+)/);
|
|
178
|
+
const adhoc = (stderr || '').includes('Signature=adhoc');
|
|
179
|
+
const label = adhoc ? 'ad-hoc' : (authority ? authority[1] : 'unknown');
|
|
180
|
+
self.logger.log(`signing: signed (${label})`);
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
});
|
|
184
|
+
} else if (process.platform === 'win32') {
|
|
185
|
+
execFile('powershell', ['-NoProfile', '-Command', `(Get-AuthenticodeSignature '${process.execPath}').Status`], { encoding: 'utf8' }, (err, stdout) => {
|
|
186
|
+
const status = (stdout || '').trim();
|
|
187
|
+
if (err || status === 'NotSigned') {
|
|
188
|
+
self.logger.warn(`signing: NOT signed`);
|
|
189
|
+
} else {
|
|
190
|
+
self.logger.log(`signing: signed (${status})`);
|
|
191
|
+
}
|
|
192
|
+
});
|
|
193
|
+
} else {
|
|
194
|
+
self.logger.log('signing: n/a (Linux — no OS-level code signing)');
|
|
195
|
+
}
|
|
196
|
+
} } catch (e) { self.logger.warn(`signing: check failed (${e.message})`); }
|
|
197
|
+
|
|
198
|
+
// Schema validation. Hard-fail boot if required fields are missing — same rules as
|
|
199
|
+
// gulp/audit (single source of truth in @omega.js/config: shared schema + the desktop
|
|
200
|
+
// target refinements). We do this before any lib initializes so a misconfigured app
|
|
201
|
+
// fails loud + early instead of partway through boot with a confusing stack trace.
|
|
202
|
+
{
|
|
203
|
+
const { validateConfig, formatErrors } = require('./vendor/config/index.js');
|
|
204
|
+
const { errors } = validateConfig(self.config, { target: 'desktop' });
|
|
205
|
+
if (errors.length > 0) {
|
|
206
|
+
throw new Error(`@omega.js/desktop: config validation failed — fix the following in config/omega.json5:\n${formatErrors(errors)}`);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
// electron is a peer dep — main process only (we're in main.js, always defined).
|
|
211
|
+
const electron = require('electron');
|
|
212
|
+
const app = electron.app;
|
|
213
|
+
|
|
214
|
+
// Lifecycle event logging. These are the high-signal app-level events worth tracing
|
|
215
|
+
// when something goes wrong — quit reasons, window-all-closed, will-finish-launching,
|
|
216
|
+
// ready, render-process-gone, child-process-gone. All cheap to log; one line each.
|
|
217
|
+
app.on('before-quit', () => {
|
|
218
|
+
self._isQuitting = true;
|
|
219
|
+
self.logger.log('app event: before-quit (entering quit sequence — close events bypass hide-on-close)');
|
|
220
|
+
});
|
|
221
|
+
app.on('will-quit', () => self.logger.log('app event: will-quit'));
|
|
222
|
+
app.on('quit', (_e, exitCode) => self.logger.log(`app event: quit code=${exitCode}`));
|
|
223
|
+
app.on('window-all-closed', () => self.logger.log('app event: window-all-closed'));
|
|
224
|
+
app.on('render-process-gone', (_e, webContents, details) => self.logger.warn(`app event: render-process-gone reason=${details.reason} exitCode=${details.exitCode}`));
|
|
225
|
+
app.on('child-process-gone', (_e, details) => self.logger.warn(`app event: child-process-gone type=${details.type} reason=${details.reason} exitCode=${details.exitCode}`));
|
|
226
|
+
app.on('activate', () => self.logger.log('app event: activate (macOS — dock click or app re-launch)'));
|
|
227
|
+
app.on('open-url', (_e, url) => self.logger.log(`app event: open-url url=${url}`));
|
|
228
|
+
app.on('open-file', (_e, p) => self.logger.log(`app event: open-file path=${p}`));
|
|
229
|
+
|
|
230
|
+
// Process-level signals that bypass Electron's app events. Catches uncaught exceptions
|
|
231
|
+
// so we never crash silently — combined with electron-log file transport, this means
|
|
232
|
+
// ANY unhandled throw lands in runtime.log rather than disappearing into stderr.
|
|
233
|
+
process.on('uncaughtException', (e) => {
|
|
234
|
+
// EPIPE = stdout/stderr pipe closed (CLI consumer hung up). Logging it would
|
|
235
|
+
// write to console, which triggers another EPIPE, cascading into thousands of
|
|
236
|
+
// identical log entries. Exit cleanly — standard Unix behavior.
|
|
237
|
+
if (e?.code === 'EPIPE') {
|
|
238
|
+
process.exit(0);
|
|
239
|
+
return;
|
|
240
|
+
}
|
|
241
|
+
self.logger.error(`uncaughtException: ${e?.stack || e?.message || String(e)}`);
|
|
242
|
+
});
|
|
243
|
+
process.on('unhandledRejection', (reason) => {
|
|
244
|
+
self.logger.error(`unhandledRejection: ${reason?.stack || reason?.message || String(reason)}`);
|
|
245
|
+
});
|
|
246
|
+
process.on('exit', (code) => {
|
|
247
|
+
// electron-log's file transport flushes synchronously, so this last line lands.
|
|
248
|
+
self.logger.log(`process exit code=${code}`);
|
|
249
|
+
});
|
|
250
|
+
|
|
251
|
+
// 1. Apply early startup-mode hide. For `mode: 'hidden'` we call app.dock.hide() *before*
|
|
252
|
+
// anything else so macOS spends as little time animating the dock entry as possible.
|
|
253
|
+
// In packaged builds the Info.plist's LSUIElement (injected by gulp/build-config when
|
|
254
|
+
// startup.mode === 'hidden') prevents the bounce entirely.
|
|
255
|
+
self.startup._manager = self;
|
|
256
|
+
self.startup._electron = electron || null;
|
|
257
|
+
self.startup.applyEarly();
|
|
258
|
+
|
|
259
|
+
// 1a. Test stealth: suppress app-level activation on macOS. Launching a regular-
|
|
260
|
+
// policy app activates it — menu bar + keyboard focus switch away from whatever
|
|
261
|
+
// the developer is typing in — even though stealth windows surface via
|
|
262
|
+
// showInactive() (see lib/window-manager.js). The accessory policy (the same
|
|
263
|
+
// switch app.dock.hide() flips, and what LSUIElement bakes for packaged
|
|
264
|
+
// hidden-mode apps) keeps the test process from ever activating; windows still
|
|
265
|
+
// render normally. Must run before app ready — activation happens when the app
|
|
266
|
+
// finishes launching. OMEGA_TEST_SHOW=1 restores normal activation along with
|
|
267
|
+
// visible windows.
|
|
268
|
+
if (process.platform === 'darwin' && require('./utils/test-stealth.js')(self)) {
|
|
269
|
+
app.dock.hide();
|
|
270
|
+
self.logger.log('test stealth: app activation suppressed (dock hidden / accessory policy) — launch will not steal focus');
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
// 1a-ii. Test stealth for EVERY BrowserWindow — including RAW ones created with
|
|
274
|
+
// `new BrowserWindow()` that never pass through lib/window-manager (e.g.
|
|
275
|
+
// a consumer's automation popup). Window-manager stealths only its own
|
|
276
|
+
// named windows via _surface(); this hook closes the gap so no window
|
|
277
|
+
// can flash or steal focus during a test run. The predicate is evaluated
|
|
278
|
+
// PER WINDOW so OMEGA_TEST_SHOW=1 keeps working even when flipped mid-run
|
|
279
|
+
// (the window-manager suite does exactly that).
|
|
280
|
+
if (self.isTesting()) {
|
|
281
|
+
app.on('browser-window-created', (_event, win) => {
|
|
282
|
+
if (!require('./utils/test-stealth.js')(self)) return;
|
|
283
|
+
require('./utils/stealth-window.js').applyStealth(win);
|
|
284
|
+
});
|
|
285
|
+
// webContents.focus() is NOT covered by the window stealth above — it's a
|
|
286
|
+
// different object whose focus() reaches the native window directly,
|
|
287
|
+
// making the invisible window KEY: the test app grabs the keyboard from
|
|
288
|
+
// whatever the developer is typing in (the accessory policy from 1a does
|
|
289
|
+
// not prevent key-window steals, only launch activation). Consumers call
|
|
290
|
+
// it legitimately (address-bar focus on tab select, overlay dismiss
|
|
291
|
+
// hand-back), so no-op it per-contents under the same predicate —
|
|
292
|
+
// synthetic input (executeJavaScript, sendInputEvent, CDP) targets a
|
|
293
|
+
// specific webContents and never depends on OS key status.
|
|
294
|
+
app.on('web-contents-created', (_event, wc) => {
|
|
295
|
+
if (!require('./utils/test-stealth.js')(self)) return;
|
|
296
|
+
wc.focus = () => {};
|
|
297
|
+
});
|
|
298
|
+
self.logger.log('test stealth: every BrowserWindow (raw ones included) surfaces invisible + unfocusable, webContents.focus() suppressed (OMEGA_TEST_SHOW=1 to watch)');
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
// 1b. Isolate the userData path per environment. MUST run before
|
|
302
|
+
// storage.initialize() because electron-store reads `app.getPath('userData')`
|
|
303
|
+
// at construction time.
|
|
304
|
+
// production → <name> (untouched)
|
|
305
|
+
// development → <name> (Development) (dev runs never touch installed-app data)
|
|
306
|
+
// testing → <name> (Testing) (wiped at boot — every test run starts
|
|
307
|
+
// from a clean slate; post-run state stays
|
|
308
|
+
// on disk for inspection until the next run.
|
|
309
|
+
// Set OMEGA_TEST_KEEP_USERDATA=1 to skip the wipe.)
|
|
310
|
+
if (self.isTesting()) {
|
|
311
|
+
const before = app.getPath('userData');
|
|
312
|
+
const after = `${before} (Testing)`;
|
|
313
|
+
const keep = process.env.OMEGA_TEST_KEEP_USERDATA === '1';
|
|
314
|
+
if (!keep) {
|
|
315
|
+
require('fs').rmSync(after, { recursive: true, force: true });
|
|
316
|
+
}
|
|
317
|
+
app.setPath('userData', after);
|
|
318
|
+
self.logger.log(`userData path: ${before} -> ${after} (testing mode, ${keep ? 'kept' : 'wiped at boot'})`);
|
|
319
|
+
} else if (!self.isProduction()) {
|
|
320
|
+
const before = app.getPath('userData');
|
|
321
|
+
const after = `${before} (Development)`;
|
|
322
|
+
app.setPath('userData', after);
|
|
323
|
+
self.logger.log(`userData path: ${before} -> ${after} (dev mode)`);
|
|
324
|
+
} else {
|
|
325
|
+
self.logger.log(`userData path: ${app.getPath('userData')} (production)`);
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
// 1c. Set the global user agent fallback. Default template applied to every @omega.js/desktop app so
|
|
329
|
+
// web requests (BrowserWindow loads, fetch, electron-updater downloads) carry a
|
|
330
|
+
// branded UA — Mozilla parsers see a normal Chrome UA + we tag with the app's
|
|
331
|
+
// name/version for our own server-side telemetry. Legacy @omega.js/desktop did the
|
|
332
|
+
// same; merge tags now use node-powertools.template (single-curly syntax).
|
|
333
|
+
{
|
|
334
|
+
const { template } = require('node-powertools');
|
|
335
|
+
const ctx = {
|
|
336
|
+
brand: {
|
|
337
|
+
name: self.config.brand.name,
|
|
338
|
+
id: self.config.brand.id,
|
|
339
|
+
},
|
|
340
|
+
app: {
|
|
341
|
+
version: self.getVersion(),
|
|
342
|
+
},
|
|
343
|
+
chrome: process.versions.chrome,
|
|
344
|
+
electron: process.versions.electron,
|
|
345
|
+
node: process.versions.node,
|
|
346
|
+
platform: process.platform,
|
|
347
|
+
arch: process.arch,
|
|
348
|
+
};
|
|
349
|
+
const templates = {
|
|
350
|
+
darwin: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) {brand.name}/{app.version} Chrome/{chrome} Safari/537.36',
|
|
351
|
+
win32: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) {brand.name}/{app.version} Chrome/{chrome} Safari/537.36',
|
|
352
|
+
linux: 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) {brand.name}/{app.version} Chrome/{chrome} Safari/537.36',
|
|
353
|
+
};
|
|
354
|
+
const tmpl = templates[process.platform] || templates.linux;
|
|
355
|
+
const ua = template(tmpl, ctx);
|
|
356
|
+
app.userAgentFallback = ua;
|
|
357
|
+
self.logger.log(`userAgent: ${ua}`);
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
// 2. IPC bus online first — storage and other libs register handlers on it
|
|
361
|
+
self.ipc.initialize(self);
|
|
362
|
+
|
|
363
|
+
// 3. Storage (precedes sentry + auth so opt-out + persisted session are honored)
|
|
364
|
+
await self.storage.initialize(self);
|
|
365
|
+
|
|
366
|
+
// 3b. Theme — sets nativeTheme.themeSource from the persisted override / config
|
|
367
|
+
// default, so every renderer (and native UI) resolves the right appearance
|
|
368
|
+
// from its very first paint. Needs storage (override) + ipc (handlers) only.
|
|
369
|
+
self.theme.initialize(self);
|
|
370
|
+
|
|
371
|
+
// 3c. FontAwesome — serves the bundled icon SVGs to renderers over IPC
|
|
372
|
+
// (desktop:fontawesome:get). Needs ipc only.
|
|
373
|
+
self.fontawesome.initialize(self);
|
|
374
|
+
|
|
375
|
+
// 4. Sentry (earliest catchable global handler)
|
|
376
|
+
self.sentry.initialize(self);
|
|
377
|
+
|
|
378
|
+
// 5. Protocol (single-instance lock + custom URL scheme)
|
|
379
|
+
self.protocol.initialize(self);
|
|
380
|
+
|
|
381
|
+
if (!self.protocol.hasSingleInstanceLock()) {
|
|
382
|
+
// Quit the duplicate AND halt the boot: returning normally would resolve
|
|
383
|
+
// initialize(), letting the consumer's .then() run its whole main.js (servers,
|
|
384
|
+
// shared files, IPC) against a dying Electron — the duplicate must go quietly.
|
|
385
|
+
// The returned promise intentionally never settles; the process exits first.
|
|
386
|
+
self.logger.warn('Single-instance lock lost. Quitting this duplicate instance.');
|
|
387
|
+
app.quit();
|
|
388
|
+
return new Promise(() => {});
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
// 6. Deep links (parse cold-start argv, install second-instance handler)
|
|
392
|
+
self.deepLink.initialize(self);
|
|
393
|
+
|
|
394
|
+
// 6b. Auth flow (the getAuthUrl sign-in round trip — external browser always;
|
|
395
|
+
// dev/test return via a loopback listener since the scheme isn't OS-registered)
|
|
396
|
+
self.authFlow.initialize(self);
|
|
397
|
+
|
|
398
|
+
// 7. App state (first-launch / crash / startup-context flags)
|
|
399
|
+
await self.appState.initialize(self);
|
|
400
|
+
|
|
401
|
+
// 7b. Runtime context — session id, deviceId, OS info, async geolocation fetch.
|
|
402
|
+
// Must run AFTER storage (writes deviceId + cached geolocation to storage) and
|
|
403
|
+
// BEFORE analytics (which reads context.session.deviceId). Async but the geolocation
|
|
404
|
+
// fetch is fire-and-forget so this returns quickly.
|
|
405
|
+
await self.context.initialize(self);
|
|
406
|
+
|
|
407
|
+
// 7c. Usage tracking — opens / hours-total / hours-this-session. Reads/writes
|
|
408
|
+
// storage.usage and registers a before-quit handler to record session duration.
|
|
409
|
+
self.usage.initialize(self);
|
|
410
|
+
|
|
411
|
+
// 8. Wait for app readiness before any UI
|
|
412
|
+
await app.whenReady();
|
|
413
|
+
|
|
414
|
+
// 9. Auto-updater (queues check, never blocks UI)
|
|
415
|
+
self.autoUpdater.initialize(self);
|
|
416
|
+
|
|
417
|
+
// 10. Tray + menu + context menu
|
|
418
|
+
self.tray.initialize(self);
|
|
419
|
+
self.menu.initialize(self);
|
|
420
|
+
self.contextMenu.initialize(self);
|
|
421
|
+
|
|
422
|
+
// 11. Open-at-login + hide-on-startup state sync
|
|
423
|
+
self.startup.initialize(self);
|
|
424
|
+
|
|
425
|
+
// 12. Web-manager bridge (main-side Firebase Auth source of truth, IPC handlers for renderers)
|
|
426
|
+
await self.omega.initialize(self);
|
|
427
|
+
|
|
428
|
+
// 12b. Remote config — fetches `<brand.url>/data/resources/main.json` for hot
|
|
429
|
+
// config flips (force-update gate, default user agents, etc.). Polls hourly.
|
|
430
|
+
// Wired AFTER auto-updater so it can inherit feedCheckIntervalMs from there.
|
|
431
|
+
self.remoteConfig.initialize(self);
|
|
432
|
+
|
|
433
|
+
// 12c. Remote scripts — fetches `<brand.url>/data/scripts/main.json` for
|
|
434
|
+
// emergency hotfixes (force-update, storage patches, etc.) when the normal
|
|
435
|
+
// update pipeline is broken. Same polling cadence as remote-config.
|
|
436
|
+
self.remoteScripts.initialize(self);
|
|
437
|
+
|
|
438
|
+
// 12d. Analytics — GA4 via Measurement Protocol. Wired AFTER client-bridge
|
|
439
|
+
// so it can subscribe to onAuthChange and flip user_id automatically.
|
|
440
|
+
self.analytics.initialize(self);
|
|
441
|
+
|
|
442
|
+
// 12e. Restart Manager — external guardian app that relaunches us if we crash.
|
|
443
|
+
// Registers over RM's loopback HTTP protocol (runtime.json advertises the port),
|
|
444
|
+
// heartbeats every 60s, deregisters on graceful quit, and silently installs RM
|
|
445
|
+
// when missing (mac zip / win silent NSIS / linux AppImage — RM then self-updates
|
|
446
|
+
// via its own @omega.js/desktop autoUpdater). Skips itself when this app IS restart-manager, in
|
|
447
|
+
// dev (unless OMEGA_RESTART_MANAGER_DEV=1), or when restartManager.enabled=false.
|
|
448
|
+
// See docs/restart-manager.md.
|
|
449
|
+
self.restartManager.initialize(self);
|
|
450
|
+
|
|
451
|
+
// 13. Initialize the windows lib — registers app-level handlers (window-all-closed, etc.)
|
|
452
|
+
// but does NOT create any windows. Consumers are responsible for calling
|
|
453
|
+
// `manager.windows.create('main')` (or any other named window) from their main.js
|
|
454
|
+
// when they want to surface UI. This makes hidden / agent-app patterns trivial:
|
|
455
|
+
// just don't call create() until something (tray click, deep link, IPC) warrants it.
|
|
456
|
+
self.windows.initialize(self);
|
|
457
|
+
|
|
458
|
+
self._initialized = true;
|
|
459
|
+
|
|
460
|
+
// 14. Release deep-link dispatch — cold-start URLs (and any early open-url)
|
|
461
|
+
// were queued so handlers like auth/token never fire before client-bridge
|
|
462
|
+
// has Firebase up. Everything they touch exists now.
|
|
463
|
+
self.deepLink.markManagerReady();
|
|
464
|
+
|
|
465
|
+
self.logger.log('@omega.js/desktop (main) initialized.');
|
|
466
|
+
|
|
467
|
+
// Boot test harness — runs against the live manager AFTER all libs are up. Test runner
|
|
468
|
+
// sets OMEGA_TEST_BOOT=1 + OMEGA_TEST_BOOT_HARNESS=<absolute path> + OMEGA_TEST_BOOT_SPEC=<path>
|
|
469
|
+
// before spawning electron. The harness emits __EM_TEST__ JSON lines on stdout (parsed
|
|
470
|
+
// by runners/boot.js) then app.exit()s.
|
|
471
|
+
//
|
|
472
|
+
// We use a runtime env-var path (not a static `require('./test/harness/...')`) because
|
|
473
|
+
// @omega.js/desktop is bundled into the consumer's bundle, and a static require would either get
|
|
474
|
+
// inlined (bundling test code into production) or dead-code-eliminated. An env-var
|
|
475
|
+
// path stays external and can only resolve when the runner sets it.
|
|
476
|
+
if (process.env.OMEGA_TEST_BOOT === '1') {
|
|
477
|
+
global.__em_manager = self;
|
|
478
|
+
const harnessPath = process.env.OMEGA_TEST_BOOT_HARNESS;
|
|
479
|
+
if (harnessPath) {
|
|
480
|
+
// Defer the harness so the consumer's `manager.initialize().then(() => { ... })`
|
|
481
|
+
// callback gets a chance to run first. @omega.js/desktop doesn't auto-create any windows; the
|
|
482
|
+
// consumer's main.js does it inside .then(). If we ran the harness synchronously
|
|
483
|
+
// here, that callback wouldn't have fired yet and `manager.windows.get('main')`
|
|
484
|
+
// would be null. setImmediate flushes the microtask queue (where promise callbacks
|
|
485
|
+
// live) before our boot harness inspects state.
|
|
486
|
+
setImmediate(() => {
|
|
487
|
+
try {
|
|
488
|
+
// A variable specifier, so the bundler leaves the call alone and it
|
|
489
|
+
// resolves at RUNTIME against the path the runner set — which is the
|
|
490
|
+
// whole point (see the env-var note above).
|
|
491
|
+
const harness = require(harnessPath);
|
|
492
|
+
harness.run(self);
|
|
493
|
+
} catch (e) {
|
|
494
|
+
const { app } = require('electron');
|
|
495
|
+
process.stdout.write(`__EM_TEST__${JSON.stringify({ event: 'fatal', message: `boot harness failed to load: ${e.message}` })}\n`);
|
|
496
|
+
app.exit(1);
|
|
497
|
+
}
|
|
498
|
+
});
|
|
499
|
+
} else {
|
|
500
|
+
const { app } = require('electron');
|
|
501
|
+
process.stdout.write(`__EM_TEST__${JSON.stringify({ event: 'fatal', message: 'OMEGA_TEST_BOOT=1 but OMEGA_TEST_BOOT_HARNESS not set' })}\n`);
|
|
502
|
+
app.exit(1);
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
|
|
506
|
+
return self;
|
|
507
|
+
};
|
|
508
|
+
|
|
509
|
+
function loadResolvedConfig(projectDir) {
|
|
510
|
+
// @omega.js/config is vendored into dist (and bundled from there) — it
|
|
511
|
+
// finds config/omega.json5 under the project dir and resolves the desktop target
|
|
512
|
+
// (shared sections + targets.desktop overlaid, brand-monorepo walk-up included).
|
|
513
|
+
const { hasOmegaConfig, loadConfig } = require('./vendor/config/index.js');
|
|
514
|
+
|
|
515
|
+
if (!hasOmegaConfig(projectDir)) {
|
|
516
|
+
return {};
|
|
517
|
+
}
|
|
518
|
+
|
|
519
|
+
return loadConfig(projectDir, 'desktop').config;
|
|
520
|
+
}
|
|
521
|
+
|
|
522
|
+
// Cross-context helpers (isDevelopment/isProduction/isTesting + getFunctionsUrl/getApiUrl
|
|
523
|
+
// + getEnvironment) live in src/utils/mode-helpers.js + src/utils/url-helpers.js +
|
|
524
|
+
// src/build.js. All four Manager constructors mix them in via their respective
|
|
525
|
+
// `attachTo(Manager)` calls — see the bottom of this file.
|
|
526
|
+
|
|
527
|
+
// Require — lets consumer main-process code load @omega.js/desktop's bundled dependencies at runtime
|
|
528
|
+
// (e.g. `manager.require('fs-jetpack')`). Resolves from @omega.js/desktop's module context, not the
|
|
529
|
+
// consumer's. Mirrors @omega.js/backend's Manager.require(). For build-time resolution, the
|
|
530
|
+
// bundle task's framework-deps resolve hook handles this automatically.
|
|
531
|
+
Manager.prototype.require = function (name) {
|
|
532
|
+
return require(name);
|
|
533
|
+
};
|
|
534
|
+
Manager.require = function (name) {
|
|
535
|
+
return require(name);
|
|
536
|
+
};
|
|
537
|
+
|
|
538
|
+
// Mix in shared cross-context helpers — same code path used in renderer, preload, build.
|
|
539
|
+
require('./utils/mode-helpers.js').attachTo(Manager);
|
|
540
|
+
require('./utils/url-helpers.js').attachTo(Manager);
|
|
541
|
+
|
|
542
|
+
module.exports = Manager;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
// Entry for the `omega`/`omg` bins — dispatches to the framework that owns the
|
|
2
|
+
// cwd's app (this one, or a sibling app's framework in a brand monorepo).
|
|
3
|
+
require('./vendor/devkit/omega-bin.js').run({
|
|
4
|
+
hostName: '@omega.js/desktop',
|
|
5
|
+
hostRun: () => require('./cli-run.js').run(),
|
|
6
|
+
});
|