@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,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `omega update` — dependency freshness report (npu-outdated semantics):
|
|
3
|
+
* installed/wanted/latest + patch/minor/major per dep, releases younger than
|
|
4
|
+
* --min-age days (default 7) QUARANTINED. `--apply` installs the
|
|
5
|
+
* non-quarantined, non-breaking set (`--major` opts into breaking) through
|
|
6
|
+
* npu when present. The whole verb is the shared devkit implementation.
|
|
7
|
+
*/
|
|
8
|
+
const Manager = new (require('../build.js'));
|
|
9
|
+
const logger = Manager.logger('update');
|
|
10
|
+
const { runUpdate } = require('../vendor/devkit/update.js');
|
|
11
|
+
|
|
12
|
+
module.exports = async function (options) {
|
|
13
|
+
await runUpdate({
|
|
14
|
+
dir: process.cwd(),
|
|
15
|
+
apply: options.apply,
|
|
16
|
+
major: options.major,
|
|
17
|
+
minAge: options.minAge ?? options['min-age'],
|
|
18
|
+
forceFresh: options.forceFresh || options['force-fresh'],
|
|
19
|
+
logger,
|
|
20
|
+
});
|
|
21
|
+
};
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
// Validate code-signing prerequisites (certs, profiles, env vars).
|
|
2
|
+
//
|
|
3
|
+
// Runs as an `omega deploy` precheck (non-fatal — warns and continues so the deploy
|
|
4
|
+
// finishes even if certs aren't ready yet) and standalone via `npx omega validate-certs`.
|
|
5
|
+
//
|
|
6
|
+
// Exit codes:
|
|
7
|
+
// 0 all checks passed
|
|
8
|
+
// 1 failures (only when --strict is passed; otherwise we always exit 0 and just warn)
|
|
9
|
+
|
|
10
|
+
const path = require('path');
|
|
11
|
+
const fs = require('fs');
|
|
12
|
+
const jetpack = require('fs-jetpack');
|
|
13
|
+
const { execute } = require('node-powertools');
|
|
14
|
+
|
|
15
|
+
const Manager = new (require('../build.js'));
|
|
16
|
+
const logger = Manager.logger('validate-certs');
|
|
17
|
+
|
|
18
|
+
module.exports = async function (options) {
|
|
19
|
+
options = options || {};
|
|
20
|
+
const strict = options.strict === true || (options._ && options._.includes('--strict'));
|
|
21
|
+
|
|
22
|
+
logger.log('Validating signing prerequisites...');
|
|
23
|
+
|
|
24
|
+
const platform = process.platform;
|
|
25
|
+
const config = Manager.getConfig();
|
|
26
|
+
const winStrategy = Manager.getWindowsSignStrategy();
|
|
27
|
+
|
|
28
|
+
const issues = [];
|
|
29
|
+
|
|
30
|
+
// macOS checks (run on any platform if cert files are present in config/certs/, since
|
|
31
|
+
// CI builds happen cross-platform — useful to flag bad files even when running on win/linux).
|
|
32
|
+
await checkMac(issues, config);
|
|
33
|
+
|
|
34
|
+
if (platform === 'win32') {
|
|
35
|
+
checkWindows(issues, winStrategy, config);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// Report.
|
|
39
|
+
if (issues.length === 0) {
|
|
40
|
+
logger.log(logger.format.green('All signing prerequisites OK.'));
|
|
41
|
+
return { ok: true };
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
for (const issue of issues) {
|
|
45
|
+
if (issue.severity === 'error') {
|
|
46
|
+
logger.error(`✗ ${issue.message}`);
|
|
47
|
+
} else {
|
|
48
|
+
logger.warn(`⚠ ${issue.message}`);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
if (strict && issues.some((i) => i.severity === 'error')) {
|
|
53
|
+
throw new Error(`${issues.length} validation issue(s) — see above.`);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
return { ok: false, issues };
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
async function checkMac(issues, config) {
|
|
60
|
+
const projectRoot = process.cwd();
|
|
61
|
+
const certsDir = path.join(projectRoot, 'config', 'certs');
|
|
62
|
+
const expectedAppId = config.app?.appId
|
|
63
|
+
|| `com.itwcw.${config.brand?.id || 'app'}`;
|
|
64
|
+
|
|
65
|
+
// 1. Developer ID Application .p12
|
|
66
|
+
const cscLink = process.env.CSC_LINK;
|
|
67
|
+
if (cscLink) {
|
|
68
|
+
const p12Path = path.isAbsolute(cscLink) ? cscLink : path.join(projectRoot, cscLink);
|
|
69
|
+
if (!jetpack.exists(p12Path)) {
|
|
70
|
+
issues.push({ severity: 'error', message: `CSC_LINK points to a missing file: ${p12Path}` });
|
|
71
|
+
} else if (!process.env.CSC_KEY_PASSWORD) {
|
|
72
|
+
issues.push({ severity: 'warn', message: 'CSC_KEY_PASSWORD not set — signing will fail.' });
|
|
73
|
+
} else {
|
|
74
|
+
logger.log(logger.format.green(`✓ Developer ID Application cert at ${path.relative(projectRoot, p12Path)}`));
|
|
75
|
+
}
|
|
76
|
+
} else if (jetpack.exists(certsDir)) {
|
|
77
|
+
// Look for the file even if env not pointed
|
|
78
|
+
const p12Files = jetpack.find(certsDir, { matching: '*.p12', recursive: false }) || [];
|
|
79
|
+
if (p12Files.length === 0) {
|
|
80
|
+
issues.push({ severity: 'warn', message: `No .p12 found in config/certs/ and CSC_LINK not set. (Required for macOS signing.)` });
|
|
81
|
+
} else {
|
|
82
|
+
issues.push({ severity: 'warn', message: `Found .p12 in config/certs/ but CSC_LINK env var is not set. Set CSC_LINK=${path.relative(projectRoot, p12Files[0])}` });
|
|
83
|
+
}
|
|
84
|
+
} else {
|
|
85
|
+
issues.push({ severity: 'warn', message: 'No config/certs/ directory and no CSC_LINK env var. Skipping mac cert check.' });
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
// 2. Provisioning profile (optional — only some apps need one)
|
|
89
|
+
const provisionFiles = jetpack.exists(certsDir)
|
|
90
|
+
? (jetpack.find(certsDir, { matching: '*.provisionprofile', recursive: false }) || [])
|
|
91
|
+
: [];
|
|
92
|
+
for (const profPath of provisionFiles) {
|
|
93
|
+
try {
|
|
94
|
+
const parsed = parseProvision(profPath);
|
|
95
|
+
const rel = path.relative(projectRoot, profPath);
|
|
96
|
+
|
|
97
|
+
if (!parsed.parsed || !parsed.raw) {
|
|
98
|
+
issues.push({ severity: 'error', message: `${rel}: could not parse plist payload.` });
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
const exp = parsed.parsed.ExpirationDate;
|
|
103
|
+
if (exp && new Date(exp) < new Date()) {
|
|
104
|
+
issues.push({ severity: 'error', message: `${rel}: EXPIRED on ${new Date(exp).toISOString()}.` });
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
// Days until expiry — warn if < 30 days
|
|
109
|
+
if (exp) {
|
|
110
|
+
const daysLeft = Math.floor((new Date(exp) - new Date()) / (1000 * 60 * 60 * 24));
|
|
111
|
+
if (daysLeft < 30) {
|
|
112
|
+
issues.push({ severity: 'warn', message: `${rel}: expires in ${daysLeft} day(s) — renew soon.` });
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
// App ID match — provisioning profiles embed the app-id-prefix.bundle-id.
|
|
117
|
+
// Be lenient: just check the bundle id appears anywhere in the raw plist text.
|
|
118
|
+
if (expectedAppId && !parsed.raw.includes(expectedAppId)) {
|
|
119
|
+
issues.push({ severity: 'error', message: `${rel}: does not contain expected appId "${expectedAppId}". This profile is for a different app.` });
|
|
120
|
+
continue;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
logger.log(logger.format.green(`✓ ${rel} (expires ${exp ? new Date(exp).toISOString().slice(0,10) : 'unknown'})`));
|
|
124
|
+
} catch (e) {
|
|
125
|
+
issues.push({ severity: 'error', message: `${path.relative(projectRoot, profPath)}: parse failed: ${e.message}` });
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
// 3. Notarization API key (.p8)
|
|
130
|
+
const apiKeyEnv = process.env.APPLE_API_KEY;
|
|
131
|
+
if (apiKeyEnv) {
|
|
132
|
+
const p8Path = path.isAbsolute(apiKeyEnv) ? apiKeyEnv : path.join(projectRoot, apiKeyEnv);
|
|
133
|
+
if (!jetpack.exists(p8Path)) {
|
|
134
|
+
issues.push({ severity: 'error', message: `APPLE_API_KEY points to a missing file: ${p8Path}` });
|
|
135
|
+
} else {
|
|
136
|
+
// Check the filename includes the key id (Apple's filename convention is AuthKey_<KEY_ID>.p8).
|
|
137
|
+
const keyId = process.env.APPLE_API_KEY_ID;
|
|
138
|
+
const issuer = process.env.APPLE_API_ISSUER;
|
|
139
|
+
const filenameKeyId = path.basename(p8Path).match(/AuthKey_([A-Z0-9]+)\.p8$/i)?.[1];
|
|
140
|
+
|
|
141
|
+
if (!keyId) {
|
|
142
|
+
issues.push({ severity: 'warn', message: 'APPLE_API_KEY set but APPLE_API_KEY_ID is missing.' });
|
|
143
|
+
} else if (filenameKeyId && filenameKeyId !== keyId) {
|
|
144
|
+
issues.push({ severity: 'warn', message: `APPLE_API_KEY filename suggests key ID "${filenameKeyId}" but APPLE_API_KEY_ID is "${keyId}". Likely a typo.` });
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
if (!issuer) {
|
|
148
|
+
issues.push({ severity: 'warn', message: 'APPLE_API_KEY set but APPLE_API_ISSUER is missing.' });
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
logger.log(logger.format.green(`✓ Notarization API key at ${path.relative(projectRoot, p8Path)}`));
|
|
152
|
+
}
|
|
153
|
+
} else {
|
|
154
|
+
issues.push({ severity: 'warn', message: 'No APPLE_API_KEY set. Required for notarization (`npm run release`).' });
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
// 4. Apple Team ID format check
|
|
158
|
+
const teamId = process.env.APPLE_TEAM_ID;
|
|
159
|
+
if (teamId && !/^[A-Z0-9]{10}$/.test(teamId)) {
|
|
160
|
+
issues.push({ severity: 'warn', message: `APPLE_TEAM_ID="${teamId}" doesn't match the expected 10-character format.` });
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
// 5. macOS Keychain identity (only when running on macOS — irrelevant on win/linux)
|
|
164
|
+
if (process.platform === 'darwin') {
|
|
165
|
+
try {
|
|
166
|
+
const out = await execute('security find-identity -v -p codesigning', { log: false });
|
|
167
|
+
const identities = String(out || '');
|
|
168
|
+
if (!identities.includes('Developer ID Application')) {
|
|
169
|
+
issues.push({ severity: 'warn', message: 'No "Developer ID Application" identity in macOS Keychain. Import your .p12 via Keychain Access.' });
|
|
170
|
+
} else {
|
|
171
|
+
logger.log(logger.format.green('✓ Keychain has Developer ID Application identity.'));
|
|
172
|
+
}
|
|
173
|
+
} catch (e) {
|
|
174
|
+
issues.push({ severity: 'warn', message: `Could not query macOS Keychain: ${e.message}` });
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
function checkWindows(issues, strategy, config) {
|
|
180
|
+
logger.log(`Checking Windows signing prerequisites (strategy: ${strategy})...`);
|
|
181
|
+
|
|
182
|
+
if (strategy === 'self-hosted' || strategy === 'local') {
|
|
183
|
+
const tokenPath = process.env.WIN_EV_TOKEN_PATH;
|
|
184
|
+
if (!tokenPath) {
|
|
185
|
+
issues.push({ severity: 'error', message: 'Set WIN_EV_TOKEN_PATH to the EV token / certificate path.' });
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
if (!process.env.WIN_CSC_KEY_PASSWORD) {
|
|
189
|
+
issues.push({ severity: 'warn', message: 'WIN_CSC_KEY_PASSWORD not set — signing will fail.' });
|
|
190
|
+
}
|
|
191
|
+
logger.log(logger.format.green(`✓ Windows EV token path present (strategy=${strategy}).`));
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
if (strategy === 'cloud') {
|
|
196
|
+
const provider = config.targets?.win?.signing?.cloud?.provider;
|
|
197
|
+
if (!provider) {
|
|
198
|
+
issues.push({ severity: 'error', message: 'Cloud signing strategy selected but no provider set (config.targets.win.signing.cloud.provider).' });
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
const required = {
|
|
202
|
+
azure: ['AZURE_TENANT_ID', 'AZURE_CLIENT_ID', 'AZURE_CLIENT_SECRET', 'AZURE_TRUSTED_SIGNING_ENDPOINT'],
|
|
203
|
+
sslcom: ['SSLCOM_USERNAME', 'SSLCOM_PASSWORD', 'SSLCOM_CREDENTIAL_ID'],
|
|
204
|
+
digicert: ['DIGICERT_API_KEY', 'DIGICERT_KEYPAIR_ALIAS'],
|
|
205
|
+
}[provider] || [];
|
|
206
|
+
|
|
207
|
+
const missing = required.filter((k) => !process.env[k]);
|
|
208
|
+
if (missing.length > 0) {
|
|
209
|
+
issues.push({ severity: 'error', message: `Missing cloud-signing env vars for ${provider}: ${missing.join(', ')}` });
|
|
210
|
+
return;
|
|
211
|
+
}
|
|
212
|
+
logger.log(logger.format.green(`✓ Cloud signing provider "${provider}" configured.`));
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
issues.push({ severity: 'error', message: `Unknown Windows signing strategy: ${strategy}` });
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
// Parse a provisioning profile (a CMS-signed plist). Extract the embedded plist payload.
|
|
220
|
+
function parseProvision(filepath) {
|
|
221
|
+
const raw = jetpack.read(filepath);
|
|
222
|
+
if (!raw) return { parsed: null, raw: null };
|
|
223
|
+
|
|
224
|
+
const match = raw.match(/<\?xml(.|\n)*?<\/plist>/);
|
|
225
|
+
if (!match) return { parsed: null, raw: null };
|
|
226
|
+
|
|
227
|
+
const xml = match[0];
|
|
228
|
+
let parsed;
|
|
229
|
+
try {
|
|
230
|
+
parsed = require('plist').parse(xml);
|
|
231
|
+
} catch (e) {
|
|
232
|
+
return { parsed: null, raw: xml };
|
|
233
|
+
}
|
|
234
|
+
return { parsed, raw: xml };
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
// Exported for tests.
|
|
238
|
+
module.exports.parseProvision = parseProvision;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html data-bs-theme="{{ theme.appearance }}">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width,initial-scale=1">
|
|
6
|
+
<title>{{ page.title }}</title>
|
|
7
|
+
|
|
8
|
+
<!-- Main CSS — present on every page (compiled from src/assets/scss/main.scss by gulp/sass). -->
|
|
9
|
+
<link href="../../assets/css/main.bundle.css?cb={{ cacheBust }}" rel="stylesheet">
|
|
10
|
+
|
|
11
|
+
<!-- Per-page CSS — present only on this view (compiled from src/assets/scss/pages/{{ page.name }}.scss). -->
|
|
12
|
+
<link href="../../assets/css/components/{{ page.name }}.bundle.css?cb={{ cacheBust }}" rel="stylesheet">
|
|
13
|
+
</head>
|
|
14
|
+
<body>
|
|
15
|
+
<!--
|
|
16
|
+
@omega.js/desktop titlebar — provides the draggable region for the inset native window controls.
|
|
17
|
+
- Mac: padded left ~70px to clear the inset traffic lights.
|
|
18
|
+
- Windows: padded right ~140px to clear the native overlay min/max/close buttons.
|
|
19
|
+
- Linux: hidden entirely (the native window frame supplies the title bar).
|
|
20
|
+
Platform detection comes from `html[data-platform]` set by @omega.js/client during init —
|
|
21
|
+
see themes/classy/css/components/_titlebar.scss for the styling.
|
|
22
|
+
-->
|
|
23
|
+
<div class="omega-titlebar">
|
|
24
|
+
<div class="omega-titlebar__drag" aria-hidden="true"></div>
|
|
25
|
+
<div class="omega-titlebar__title">{{ page.title }}</div>
|
|
26
|
+
</div>
|
|
27
|
+
|
|
28
|
+
<main class="omega-content">
|
|
29
|
+
{{ content }}
|
|
30
|
+
</main>
|
|
31
|
+
|
|
32
|
+
<!-- Per-page JS — entry bundle for this view (compiled by the `bundle` task's renderer entry). -->
|
|
33
|
+
<script src="../../assets/js/components/{{ page.name }}.bundle.js?cb={{ cacheBust }}"></script>
|
|
34
|
+
</body>
|
|
35
|
+
</html>
|
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
name: Build & Release
|
|
2
|
+
|
|
3
|
+
# Manual-trigger only — releases are intentional, not a side effect of every commit.
|
|
4
|
+
on:
|
|
5
|
+
workflow_dispatch:
|
|
6
|
+
inputs:
|
|
7
|
+
platforms:
|
|
8
|
+
description: 'Platforms to build (comma-separated). Examples: all, windows, mac,linux'
|
|
9
|
+
required: false
|
|
10
|
+
default: 'all'
|
|
11
|
+
type: string
|
|
12
|
+
|
|
13
|
+
env:
|
|
14
|
+
NODE_VERSION: '{{ versions.node }}'
|
|
15
|
+
OMEGA_BUILD_MODE: 'true'
|
|
16
|
+
OMEGA_IS_PUBLISH: 'true'
|
|
17
|
+
OMEGA_IS_SERVER: 'true'
|
|
18
|
+
GH_TOKEN: ${{ secrets.GH_TOKEN }}
|
|
19
|
+
# Every CI-delivered key of the env schema, GENERATED (#627): one
|
|
20
|
+
# `KEY: ${{ secrets.KEY }}` line per `delivery: { desktop: 'ci' | 'bake' }`
|
|
21
|
+
# entry (@omega.js/config's env-delivery.js), re-rendered by every verb's
|
|
22
|
+
# ensureTarget. Signing, notarization, store and analytics credentials all
|
|
23
|
+
# arrive here, workflow-wide — the jobs and steps below consume them without
|
|
24
|
+
# restating one. Add a key to the schema, not to this file.
|
|
25
|
+
{{ githubSecrets }}
|
|
26
|
+
|
|
27
|
+
concurrency:
|
|
28
|
+
group: ${{ github.ref }}
|
|
29
|
+
cancel-in-progress: true
|
|
30
|
+
|
|
31
|
+
jobs:
|
|
32
|
+
# Resolve which platforms to build from the workflow_dispatch `platforms` input.
|
|
33
|
+
# Outputs a JSON matrix (consumed by the build job) plus per-platform booleans
|
|
34
|
+
# (consumed by windows-strategy / windows-sign gating). When `platforms` is
|
|
35
|
+
# omitted (older invocations) the input defaults to 'all'.
|
|
36
|
+
setup:
|
|
37
|
+
name: Setup (resolve target platforms)
|
|
38
|
+
runs-on: ubuntu-latest
|
|
39
|
+
outputs:
|
|
40
|
+
matrix: ${{ steps.resolve.outputs.matrix }}
|
|
41
|
+
mac: ${{ steps.resolve.outputs.mac }}
|
|
42
|
+
windows: ${{ steps.resolve.outputs.windows }}
|
|
43
|
+
linux: ${{ steps.resolve.outputs.linux }}
|
|
44
|
+
steps:
|
|
45
|
+
- id: resolve
|
|
46
|
+
run: |
|
|
47
|
+
input="${{ github.event.inputs.platforms || 'all' }}"
|
|
48
|
+
input="$(echo "$input" | tr '[:upper:]' '[:lower:]')"
|
|
49
|
+
|
|
50
|
+
mac=false; win=false; linux=false
|
|
51
|
+
if [[ "$input" == *all* ]]; then mac=true; win=true; linux=true; fi
|
|
52
|
+
if [[ "$input" == *mac* ]] || [[ "$input" == *darwin* ]]; then mac=true; fi
|
|
53
|
+
if [[ "$input" == *win* ]]; then win=true; fi
|
|
54
|
+
if [[ "$input" == *linux* ]] || [[ "$input" == *ubuntu* ]]; then linux=true; fi
|
|
55
|
+
|
|
56
|
+
entries=()
|
|
57
|
+
$mac && entries+=('"macos-latest"')
|
|
58
|
+
$win && entries+=('"windows-latest"')
|
|
59
|
+
$linux && entries+=('"ubuntu-latest"')
|
|
60
|
+
if [ ${#entries[@]} -eq 0 ]; then
|
|
61
|
+
echo "Error: '$input' did not match any platform. Use: all | mac | windows | linux | comma-separated combos." >&2
|
|
62
|
+
exit 1
|
|
63
|
+
fi
|
|
64
|
+
|
|
65
|
+
matrix="[$(IFS=,; echo "${entries[*]}")]"
|
|
66
|
+
echo "Resolved input='$input' → mac=$mac, win=$win, linux=$linux, matrix=$matrix"
|
|
67
|
+
|
|
68
|
+
echo "matrix=$matrix" >> "$GITHUB_OUTPUT"
|
|
69
|
+
echo "mac=$mac" >> "$GITHUB_OUTPUT"
|
|
70
|
+
echo "windows=$win" >> "$GITHUB_OUTPUT"
|
|
71
|
+
echo "linux=$linux" >> "$GITHUB_OUTPUT"
|
|
72
|
+
|
|
73
|
+
build:
|
|
74
|
+
name: Build (${{ matrix.os }})
|
|
75
|
+
needs: setup
|
|
76
|
+
strategy:
|
|
77
|
+
fail-fast: false
|
|
78
|
+
matrix:
|
|
79
|
+
os: ${{ fromJSON(needs.setup.outputs.matrix) }}
|
|
80
|
+
runs-on: ${{ matrix.os }}
|
|
81
|
+
timeout-minutes: 60
|
|
82
|
+
steps:
|
|
83
|
+
# The workflow's own token: a checkout never needs the release PAT, and a
|
|
84
|
+
# bad PAT then fails at the release step with an API error, not here with
|
|
85
|
+
# git asking for a username.
|
|
86
|
+
- uses: actions/checkout@v4
|
|
87
|
+
with:
|
|
88
|
+
fetch-depth: 0
|
|
89
|
+
|
|
90
|
+
- uses: actions/setup-node@v4
|
|
91
|
+
with:
|
|
92
|
+
node-version: ${{ env.NODE_VERSION }}
|
|
93
|
+
cache: npm
|
|
94
|
+
|
|
95
|
+
- name: Install Socket Firewall
|
|
96
|
+
run: npm install -g sfw
|
|
97
|
+
|
|
98
|
+
# On Windows, force cmd for every shell step in this job — the runner's default
|
|
99
|
+
# is PowerShell 7 which has its own ExecutionPolicy/wrapping quirks that cause
|
|
100
|
+
# `npm ci` and similar to exit silently with no captured output. cmd has none
|
|
101
|
+
# of that. mac/linux use their default bash regardless of this flag (per
|
|
102
|
+
# actions/runner shell-resolution: `cmd` is win-only and ignored elsewhere).
|
|
103
|
+
- if: matrix.os == 'windows-latest'
|
|
104
|
+
shell: cmd
|
|
105
|
+
run: sfw npm ci
|
|
106
|
+
- if: matrix.os != 'windows-latest'
|
|
107
|
+
run: sfw npm ci
|
|
108
|
+
|
|
109
|
+
# macOS — decode signing assets from secrets, then sign + notarize + publish.
|
|
110
|
+
# `npx omega push-secrets` uploads .p12 / .p8 files as base64-encoded secrets;
|
|
111
|
+
# the workflow decodes them back to disk for electron-builder + notarytool to read.
|
|
112
|
+
- if: matrix.os == 'macos-latest'
|
|
113
|
+
run: |
|
|
114
|
+
mkdir -p config/certs
|
|
115
|
+
echo "${{ secrets.CSC_LINK }}" | base64 --decode > config/certs/dev-id.p12
|
|
116
|
+
echo "${{ secrets.APPLE_API_KEY }}" | base64 --decode > config/certs/AuthKey.p8
|
|
117
|
+
# The two file-path OVERRIDES of the workflow env: electron-builder and
|
|
118
|
+
# notarytool read these as paths, and the step above just decoded the
|
|
119
|
+
# base64 secrets of the same name to disk. Every other credential comes
|
|
120
|
+
# from the generated env block.
|
|
121
|
+
- if: matrix.os == 'macos-latest'
|
|
122
|
+
env:
|
|
123
|
+
CSC_LINK: config/certs/dev-id.p12
|
|
124
|
+
APPLE_API_KEY: config/certs/AuthKey.p8
|
|
125
|
+
run: npm run release:local
|
|
126
|
+
|
|
127
|
+
# Linux — install snapcraft when (a) the consumer hasn't explicitly disabled snap
|
|
128
|
+
# in their config (`platforms.linux.snap.enabled !== false`; default is true) AND
|
|
129
|
+
# (b) SNAPCRAFT_STORE_CREDENTIALS is set as a repo secret. Without the secret we
|
|
130
|
+
# skip snapcraft install entirely — build-config.js auto-skips the snap target on
|
|
131
|
+
# the same condition, so the build still produces .deb + .AppImage cleanly with
|
|
132
|
+
# no snap publish attempt and no failure.
|
|
133
|
+
- name: Install Snapcraft (Linux, when snap enabled + creds present)
|
|
134
|
+
if: matrix.os == 'ubuntu-latest'
|
|
135
|
+
run: |
|
|
136
|
+
# (a) Config check — explicit `enabled: false` opts out; missing/true opts in.
|
|
137
|
+
# `@omega.js/desktop/config` is the vendored @omega.js/config loader — resolves
|
|
138
|
+
# config/omega.json5 for the desktop target (brand-monorepo aware).
|
|
139
|
+
if node -e 'const c = require("@omega.js/desktop/config").loadConfig(process.cwd(), "desktop").config; process.exit(c.platforms?.linux?.snap?.enabled === false ? 1 : 0);'; then
|
|
140
|
+
CONFIG_OK=1
|
|
141
|
+
else
|
|
142
|
+
CONFIG_OK=0
|
|
143
|
+
echo "platforms.linux.snap.enabled === false — skipping snapcraft install."
|
|
144
|
+
fi
|
|
145
|
+
# (b) Credentials check — empty secret means no publish creds available.
|
|
146
|
+
if [ -n "$SNAPCRAFT_STORE_CREDENTIALS" ]; then
|
|
147
|
+
CREDS_OK=1
|
|
148
|
+
else
|
|
149
|
+
CREDS_OK=0
|
|
150
|
+
echo "SNAPCRAFT_STORE_CREDENTIALS not set — skipping snapcraft install. Run 'snapcraft export-login -' and add the blob to .env, then 'mgr push-secrets'."
|
|
151
|
+
fi
|
|
152
|
+
if [ "$CONFIG_OK" = 1 ] && [ "$CREDS_OK" = 1 ]; then
|
|
153
|
+
sudo snap install snapcraft --classic
|
|
154
|
+
echo "Snapcraft installed."
|
|
155
|
+
fi
|
|
156
|
+
|
|
157
|
+
# Linux — no signing
|
|
158
|
+
- if: matrix.os == 'ubuntu-latest'
|
|
159
|
+
run: npm run release:local
|
|
160
|
+
|
|
161
|
+
# Windows — package (build + electron-builder package) unsigned. We do NOT publish
|
|
162
|
+
# here. Mac/linux's `npm run release:local` step already created the GH Release via
|
|
163
|
+
# electron-builder publish; windows-sign uploads signed .exe to that same release.
|
|
164
|
+
# shell: cmd as above — PowerShell 7's wrapping breaks long-running npm scripts.
|
|
165
|
+
- if: matrix.os == 'windows-latest'
|
|
166
|
+
shell: cmd
|
|
167
|
+
env:
|
|
168
|
+
OMEGA_SKIP_WIN_SIGN: 'true'
|
|
169
|
+
# The workflow env carries the mac signing cert (CSC_LINK is the
|
|
170
|
+
# base64 .p12 the mac job decodes); electron-builder would otherwise
|
|
171
|
+
# try to sign the Windows build with it. Empty reads as UNSET — the
|
|
172
|
+
# build's sanitize pass drops it — so this step packages unsigned, as
|
|
173
|
+
# it always did. windows-sign signs separately.
|
|
174
|
+
CSC_LINK: ''
|
|
175
|
+
CSC_KEY_PASSWORD: ''
|
|
176
|
+
run: npm run package
|
|
177
|
+
|
|
178
|
+
- if: matrix.os == 'windows-latest'
|
|
179
|
+
uses: actions/upload-artifact@v4
|
|
180
|
+
with:
|
|
181
|
+
name: windows-unsigned
|
|
182
|
+
# Capture installer + auto-updater feed + blockmap so windows-sign can re-upload them all.
|
|
183
|
+
path: |
|
|
184
|
+
release/*.exe
|
|
185
|
+
release/*.yml
|
|
186
|
+
release/*.blockmap
|
|
187
|
+
|
|
188
|
+
# Resolve the signing strategy from config/omega.json5. We do this in a tiny job
|
|
189
|
+
# (just runs node + the vendored config loader) so downstream jobs can gate on the result.
|
|
190
|
+
# Single source of truth = the consumer's config file; workflow doesn't duplicate the value.
|
|
191
|
+
windows-strategy:
|
|
192
|
+
name: Resolve Windows signing strategy
|
|
193
|
+
needs: [setup, build]
|
|
194
|
+
if: needs.setup.outputs.windows == 'true'
|
|
195
|
+
runs-on: ubuntu-latest
|
|
196
|
+
outputs:
|
|
197
|
+
strategy: ${{ steps.resolve.outputs.strategy }}
|
|
198
|
+
steps:
|
|
199
|
+
- uses: actions/checkout@v4
|
|
200
|
+
- uses: actions/setup-node@v4
|
|
201
|
+
with:
|
|
202
|
+
node-version: ${{ env.NODE_VERSION }}
|
|
203
|
+
cache: npm
|
|
204
|
+
- run: npm install -g sfw
|
|
205
|
+
- run: sfw npm ci
|
|
206
|
+
- id: resolve
|
|
207
|
+
run: |
|
|
208
|
+
STRATEGY=$(node -e "const c=require('@omega.js/desktop/config').loadConfig(process.cwd(),'desktop').config;console.log(c.platforms?.win?.signing?.strategy || 'self-hosted');")
|
|
209
|
+
echo "strategy=$STRATEGY" >> "$GITHUB_OUTPUT"
|
|
210
|
+
echo "Resolved Windows signing strategy: $STRATEGY"
|
|
211
|
+
|
|
212
|
+
windows-sign:
|
|
213
|
+
name: Sign Windows
|
|
214
|
+
needs: [setup, build, windows-strategy]
|
|
215
|
+
# Strategy comes from config platforms.win.signing.strategy (read by windows-strategy job).
|
|
216
|
+
# self-hosted (default) — runs on a self-hosted runner with EV USB token attached
|
|
217
|
+
# cloud — runs on hosted windows-latest, calls cloud signing provider
|
|
218
|
+
# local — skip this job; sign locally via `npx omega sign-windows`
|
|
219
|
+
if: needs.setup.outputs.windows == 'true' && needs.windows-strategy.outputs.strategy != 'local'
|
|
220
|
+
runs-on: ${{ needs.windows-strategy.outputs.strategy == 'cloud' && fromJSON('["windows-latest"]') || fromJSON('["self-hosted","windows","ev-token"]') }}
|
|
221
|
+
# Use cmd.exe (not PowerShell) on Windows. Self-hosted runners often have PowerShell
|
|
222
|
+
# ExecutionPolicy set to Restricted, which blocks the Actions-generated wrapper .ps1
|
|
223
|
+
# scripts that GH spits out for every `run:` step. cmd.exe has no such restriction
|
|
224
|
+
# and runs the same `npm ci` / `npx ...` commands fine.
|
|
225
|
+
defaults:
|
|
226
|
+
run:
|
|
227
|
+
shell: cmd
|
|
228
|
+
# Signing credentials — self-hosted EV USB token (WIN_EV_TOKEN_PATH,
|
|
229
|
+
# WIN_CSC_KEY_PASSWORD, SIGNTOOL_PATH) and the cloud providers (only the set
|
|
230
|
+
# `platforms.win.signing.cloud.provider` names is consumed) — all arrive
|
|
231
|
+
# through the workflow's generated env block. Set them in the brand .env and
|
|
232
|
+
# push with `npx omega push-secrets`.
|
|
233
|
+
steps:
|
|
234
|
+
- uses: actions/checkout@v4
|
|
235
|
+
- uses: actions/setup-node@v4
|
|
236
|
+
with:
|
|
237
|
+
node-version: ${{ env.NODE_VERSION }}
|
|
238
|
+
- run: npm install -g sfw
|
|
239
|
+
- run: sfw npm ci
|
|
240
|
+
- uses: actions/download-artifact@v4
|
|
241
|
+
with:
|
|
242
|
+
name: windows-unsigned
|
|
243
|
+
path: release
|
|
244
|
+
- run: npx omega sign-windows --in release --out release/signed
|
|
245
|
+
# Upload the SIGNED Windows assets to the release the mac/linux electron-builder
|
|
246
|
+
# publish step already created in the brand's public releases repo. The asset
|
|
247
|
+
# names carry no version, so nothing is mirrored anywhere.
|
|
248
|
+
- run: npx omega finalize-release --signed-dir release/signed
|
|
249
|
+
|
|
250
|
+
finalize:
|
|
251
|
+
name: Finalize release
|
|
252
|
+
# Run after every required job. windows-sign is skipped when strategy=local OR when
|
|
253
|
+
# `inputs.platforms` excludes windows; this job still runs and just won't flip the
|
|
254
|
+
# release to published in those cases (see step gate below).
|
|
255
|
+
# `always()` lets a failed or skipped job reach this `if`, which is why the
|
|
256
|
+
# build's result is named rather than left to the default success gate.
|
|
257
|
+
needs: [setup, build, windows-sign]
|
|
258
|
+
if: always() && needs.build.result == 'success'
|
|
259
|
+
runs-on: ubuntu-latest
|
|
260
|
+
steps:
|
|
261
|
+
- uses: actions/checkout@v4
|
|
262
|
+
- uses: actions/setup-node@v4
|
|
263
|
+
with:
|
|
264
|
+
node-version: ${{ env.NODE_VERSION }}
|
|
265
|
+
cache: npm
|
|
266
|
+
- run: npm install -g sfw
|
|
267
|
+
- run: sfw npm ci
|
|
268
|
+
# Flip the releases-repo release from Draft to Published so electron-updater
|
|
269
|
+
# can read it. Idempotent — safe to run even if already published. ONLY runs
|
|
270
|
+
# on all-platforms builds: a partial run (e.g. `--platforms windows`) leaves
|
|
271
|
+
# the release as a draft, so subsequent runs can fill in the missing platform
|
|
272
|
+
# assets before electron-updater starts seeing the version.
|
|
273
|
+
- if: needs.setup.outputs.mac == 'true' && needs.setup.outputs.linux == 'true' && needs.setup.outputs.windows == 'true'
|
|
274
|
+
run: npx omega finalize-release --publish
|
|
275
|
+
- if: needs.setup.outputs.mac != 'true' || needs.setup.outputs.linux != 'true' || needs.setup.outputs.windows != 'true'
|
|
276
|
+
run: echo "Partial-platform run (mac=${{ needs.setup.outputs.mac }} linux=${{ needs.setup.outputs.linux }} windows=${{ needs.setup.outputs.windows }}) — leaving release as draft. Run with --platforms all to publish."
|