@omega.js/desktop 0.52.0 → 0.54.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/README.md +53 -48
- package/dist/assets/css/core/_initialize.scss +1 -1
- package/dist/assets/js/core/app-shell.js +14 -15
- package/dist/assets/themes/_template/_theme.js +6 -6
- package/dist/assets/themes/base/_includes/global/sections/account.html +4 -4
- package/dist/assets/themes/base/_includes/global/sections/app-sidebar.html +5 -5
- package/dist/assets/themes/base/_layouts/frontend/pages/account/index.html +3 -3
- package/dist/assets/themes/base/_layouts/frontend/pages/alternatives/index.html +1 -1
- package/dist/assets/themes/base/_layouts/frontend/pages/blog/tags/tag.html +1 -1
- package/dist/assets/themes/base/_layouts/frontend/pages/payment/confirmation.html +1 -1
- package/dist/assets/themes/base/_sections/marketing/newsletter-cta/section.js +2 -3
- package/dist/assets/themes/base/_sections/verts/unit/section.html +1 -1
- package/dist/assets/themes/base/_sections/verts/unit/section.js +3 -4
- package/dist/assets/themes/base/_theme.js +4 -3
- package/dist/assets/themes/bootstrap/_theme.js +2 -2
- package/dist/assets/themes/bootstrap/overrides/_links.scss +1 -1
- package/dist/assets/themes/classy/_theme.js +8 -6
- package/dist/assets/themes/classy/css/marketing/_sections.scss +1 -2
- package/dist/assets/themes/classy/js/hero-demo-form.js +3 -2
- package/dist/assets/themes/neobrutalism/_theme.js +5 -5
- package/dist/assets/themes/neobrutalism/js/pages/test/libraries/layers/index.js +1 -1
- package/dist/assets/themes/newsflash/_theme.js +6 -6
- package/dist/assets/themes/newsflash/js/pages/test/libraries/layers/index.js +1 -1
- package/dist/build.js +87 -111
- package/dist/cli-run.js +4 -1
- package/dist/cli.js +3 -3
- package/dist/commands/build.js +2 -2
- package/dist/commands/cdp/capture.js +2 -2
- package/dist/commands/cdp/client.js +1 -1
- package/dist/commands/cdp/quit.js +2 -2
- package/dist/commands/cdp/relaunch.js +2 -2
- package/dist/commands/cdp/theme.js +1 -1
- package/dist/commands/cdp.js +1 -1
- package/dist/commands/clean.js +4 -5
- package/dist/commands/deploy.js +4 -4
- package/dist/commands/dev.js +25 -0
- package/dist/commands/finalize-release.js +4 -4
- package/dist/commands/launch.js +2 -2
- package/dist/commands/lib/deploy-precheck.js +3 -3
- package/dist/commands/lib/ensure-target.js +18 -23
- package/dist/commands/lib/migrate.js +17 -0
- package/dist/commands/logs.js +1 -1
- package/dist/commands/package.js +2 -2
- package/dist/commands/publish.js +2 -2
- package/dist/commands/release.js +4 -4
- package/dist/commands/runner.js +11 -11
- package/dist/commands/sign-windows.js +5 -5
- package/dist/commands/test.js +8 -8
- package/dist/commands/update.js +7 -6
- package/dist/commands/validate-certs.js +4 -4
- package/dist/commands/version.js +3 -3
- package/dist/defaults/.github/workflows/build.yml +18 -18
- package/dist/defaults/_.gitignore +0 -2
- package/dist/defaults/_mas/README.md +3 -3
- package/dist/defaults/config/certs/README.md +1 -1
- package/dist/defaults/config/omega.json5 +43 -43
- package/dist/defaults/docs/README.md +3 -3
- package/dist/defaults/gulpfile.js +1 -1
- package/dist/defaults/hooks/build/post.js +2 -2
- package/dist/defaults/hooks/build/pre.js +2 -2
- package/dist/defaults/hooks/deploy/pre.js +1 -1
- package/dist/defaults/hooks/notarize/post.js +2 -2
- package/dist/defaults/hooks/release/post.js +2 -2
- package/dist/defaults/hooks/release/pre.js +2 -2
- package/dist/defaults/src/assets/js/components/about/index.js +3 -5
- package/dist/defaults/src/assets/js/components/main/index.js +3 -5
- package/dist/defaults/src/assets/js/components/settings/index.js +3 -5
- package/dist/defaults/src/assets/scss/pages/about.scss +1 -1
- package/dist/defaults/src/assets/scss/pages/main.scss +1 -1
- package/dist/defaults/src/assets/scss/pages/settings.scss +1 -1
- package/dist/defaults/src/integrations/context-menu/index.js +13 -13
- package/dist/defaults/src/integrations/menu/index.js +8 -8
- package/dist/defaults/src/integrations/tray/index.js +12 -12
- package/dist/defaults/src/main.js +5 -7
- package/dist/defaults/src/preload.js +4 -6
- package/dist/defaults/test/README.md +5 -5
- package/dist/defaults/test/_init.js +1 -1
- package/dist/gulp/main.js +9 -10
- package/dist/gulp/tasks/audit.js +11 -14
- package/dist/gulp/tasks/build-config.js +8 -8
- package/dist/gulp/tasks/bundle.js +16 -16
- package/dist/gulp/tasks/defaults.js +3 -3
- package/dist/gulp/tasks/distribute.js +2 -2
- package/dist/gulp/tasks/html.js +9 -9
- package/dist/gulp/tasks/package-quick.js +3 -3
- package/dist/gulp/tasks/package.js +3 -3
- package/dist/gulp/tasks/release.js +3 -3
- package/dist/gulp/tasks/sass.js +6 -6
- package/dist/gulp/tasks/serve.js +4 -4
- package/dist/hooks/notarize-artifacts.js +1 -1
- package/dist/hooks/notarize.js +1 -1
- package/dist/index.js +5 -8
- package/dist/lib/_environment-mixin.js +50 -0
- package/dist/lib/_lifecycle-mixin.js +45 -0
- package/dist/lib/analytics.js +33 -35
- package/dist/lib/app-state.js +14 -14
- package/dist/lib/auth-flow.js +18 -18
- package/dist/lib/auth-persistence.js +12 -12
- package/dist/lib/auth.js +421 -0
- package/dist/lib/auto-updater.js +49 -49
- package/dist/lib/context-menu.js +13 -13
- package/dist/lib/context.js +19 -19
- package/dist/lib/deep-link.js +34 -34
- package/dist/lib/fontawesome.js +5 -5
- package/dist/lib/ipc.js +4 -4
- package/dist/lib/menu.js +25 -25
- package/dist/lib/protocol.js +5 -5
- package/dist/lib/remote-config.js +22 -22
- package/dist/lib/remote-scripts.js +21 -21
- package/dist/lib/restart-manager/index.js +29 -29
- package/dist/lib/restart-manager/install.js +1 -1
- package/dist/lib/restart-manager/protocol.js +1 -1
- package/dist/lib/sign-helpers/exec-with-limit.js +1 -1
- package/dist/lib/sign-helpers/sign-events.js +1 -1
- package/dist/lib/startup.js +18 -13
- package/dist/lib/storage.js +10 -10
- package/dist/lib/templating.js +16 -16
- package/dist/lib/theme.js +10 -10
- package/dist/lib/tray.js +27 -27
- package/dist/lib/usage.js +11 -11
- package/dist/lib/window-manager.js +26 -26
- package/dist/main.js +399 -483
- package/dist/preload.js +236 -176
- package/dist/renderer.js +417 -391
- package/dist/test/fixtures/consumer-app/config/omega.json5 +1 -1
- package/dist/test/fixtures/consumer-app/src/assets/js/components/main/index.js +8 -11
- package/dist/test/fixtures/consumer-app/src/main.js +5 -7
- package/dist/test/fixtures/consumer-app/src/preload.js +2 -2
- package/dist/test/harness/boot-entry.js +22 -20
- package/dist/test/harness/main-entry.js +31 -30
- package/dist/test/harness/renderer-entry.js +5 -5
- package/dist/test/harness/renderer-preload.js +137 -141
- package/dist/test/index.js +10 -10
- package/dist/test/runner.js +2 -2
- package/dist/test/runners/boot.js +7 -6
- package/dist/test/runners/electron.js +3 -2
- package/dist/test/runners/render-event.js +2 -2
- package/dist/test/suites/boot/consumer-app-boots.test.js +57 -26
- package/dist/test/suites/boot/restart-manager.test.js +2 -2
- package/dist/test/suites/boot/storage-bundled.test.js +5 -5
- package/dist/test/suites/boot/theme.test.js +13 -13
- package/dist/test/suites/build/audit.test.js +21 -8
- package/dist/test/suites/build/auth-persistence-resolve.test.js +6 -6
- package/dist/test/suites/build/boot-fixture.test.js +2 -2
- package/dist/test/suites/build/boot-runner-timeout.test.js +6 -5
- package/dist/test/suites/build/brand-scss.test.js +1 -1
- package/dist/test/suites/build/build-json-bake.test.js +1 -1
- package/dist/test/suites/build/build-workflow-jobs.test.js +2 -2
- package/dist/test/suites/build/cli.test.js +30 -2
- package/dist/test/suites/build/config-schema.test.js +5 -5
- package/dist/test/suites/build/defaults-em-dash.test.js +22 -0
- package/dist/test/suites/build/defaults-scaffold.test.js +21 -7
- package/dist/test/suites/build/deploy-direct.test.js +7 -5
- package/dist/test/suites/build/deploy-dispatch.test.js +2 -1
- package/dist/test/suites/build/deploy-hook.test.js +7 -5
- package/dist/test/suites/build/dev-verb.test.js +67 -0
- package/dist/test/suites/build/ensure-target.test.js +13 -5
- package/dist/test/suites/build/env-delivery.test.js +2 -2
- package/dist/test/suites/build/esm-only-dependency.test.js +2 -2
- package/dist/test/suites/build/exports.test.js +9 -8
- package/dist/test/suites/build/get-config.test.js +4 -4
- package/dist/test/suites/build/manifest-deps.test.js +1 -1
- package/dist/test/suites/build/merge-line-files.test.js +7 -7
- package/dist/test/suites/build/migrate.test.js +29 -0
- package/dist/test/suites/build/omega-shell.test.js +34 -2
- package/dist/test/suites/build/omega.test.js +350 -0
- package/dist/test/suites/build/project-scripts-deps.test.js +6 -10
- package/dist/test/suites/build/renderer-auth-bridge.test.js +211 -78
- package/dist/test/suites/build/runner-env-write.test.js +73 -0
- package/dist/test/suites/build/runner.test.js +11 -10
- package/dist/test/suites/build/sentry.test.js +2 -2
- package/dist/test/suites/build/setup-scripts.test.js +27 -0
- package/dist/test/suites/build/sign-windows-e2e.test.js +2 -2
- package/dist/test/suites/build/templating.test.js +3 -3
- package/dist/test/suites/build/test-stealth.test.js +7 -9
- package/dist/test/suites/build/url-helpers.test.js +55 -56
- package/dist/test/suites/build/validate-config.test.js +15 -4
- package/dist/test/suites/build/verb-logs.test.js +20 -0
- package/dist/test/suites/build/wave5-pins.test.js +2 -2
- package/dist/test/suites/main/analytics.test.js +59 -59
- package/dist/test/suites/main/app-state.test.js +66 -66
- package/dist/test/suites/main/auth-flow.test.js +41 -41
- package/dist/test/suites/main/auth-persistence.test.js +54 -43
- package/dist/test/suites/main/{client-bridge.integration.test.js → auth.integration.test.js} +10 -9
- package/dist/test/suites/main/auth.test.js +336 -0
- package/dist/test/suites/main/auto-updater.test.js +134 -134
- package/dist/test/suites/main/boot-sequence.test.js +37 -49
- package/dist/test/suites/main/context-menu.test.js +51 -50
- package/dist/test/suites/main/context.test.js +25 -25
- package/dist/test/suites/main/deep-link.test.js +74 -74
- package/dist/test/suites/main/fontawesome.test.js +27 -27
- package/dist/test/suites/main/ipc.test.js +35 -35
- package/dist/test/suites/main/menu.test.js +101 -100
- package/dist/test/suites/main/protocol.test.js +19 -19
- package/dist/test/suites/main/remote-config.test.js +63 -63
- package/dist/test/suites/main/remote-scripts.test.js +103 -103
- package/dist/test/suites/main/request.test.js +71 -0
- package/dist/test/suites/main/restart-manager.test.js +33 -33
- package/dist/test/suites/main/startup-paths-and-ua.test.js +4 -4
- package/dist/test/suites/main/startup.test.js +26 -26
- package/dist/test/suites/main/stealth-window.test.js +1 -1
- package/dist/test/suites/main/storage.test.js +25 -25
- package/dist/test/suites/main/theme.test.js +34 -34
- package/dist/test/suites/main/tray.test.js +79 -79
- package/dist/test/suites/main/url-helpers.test.js +133 -133
- package/dist/test/suites/main/usage.test.js +25 -25
- package/dist/test/suites/main/window-bounds.test.js +27 -27
- package/dist/test/suites/main/window-manager.test.js +44 -44
- package/dist/test/suites/renderer/analytics-bridge.test.js +5 -5
- package/dist/test/suites/renderer/cross-context-helpers.test.js +37 -31
- package/dist/test/suites/renderer/round-trip.test.js +3 -3
- package/dist/test/suites/renderer/tooltips.test.js +15 -15
- package/dist/test/suites/renderer/{window-em-surface.test.js → window-desktop-surface.test.js} +28 -8
- package/dist/test/utils/extended-mode-warning.js +1 -1
- package/dist/utils/boot-harness.js +56 -0
- package/dist/utils/build-pipeline.js +4 -4
- package/dist/utils/mode-helpers.js +2 -15
- package/dist/utils/runner-env.js +13 -28
- package/dist/utils/ship-keys.js +3 -3
- package/dist/utils/signing-status.js +51 -0
- package/dist/utils/test-events.js +7 -0
- package/dist/utils/test-stealth.js +6 -6
- package/dist/utils/url-helpers.js +52 -42
- package/dist/utils/user-agent.js +44 -0
- package/dist/vendor/account/engine.js +3 -3
- package/dist/vendor/account/index.js +14 -45
- package/dist/vendor/account/resolve-account.js +44 -0
- package/dist/vendor/account/schema.js +1 -1
- package/dist/vendor/account/user.js +99 -0
- package/dist/vendor/config/client-config.js +1 -1
- package/dist/vendor/config/company.js +46 -14
- package/dist/vendor/config/defaults.js +30 -7
- package/dist/vendor/config/edit.js +25 -3
- package/dist/vendor/config/env-delivery.js +1 -1
- package/dist/vendor/config/env-schema.js +3 -6
- package/dist/vendor/config/env.js +34 -22
- package/dist/vendor/config/environment.js +11 -30
- package/dist/vendor/config/index.js +21 -28
- package/dist/vendor/config/load.js +16 -9
- package/dist/vendor/config/platforms.js +1 -1
- package/dist/vendor/config/repo.js +10 -27
- package/dist/vendor/config/schema-client.js +64 -0
- package/dist/vendor/config/schema-cloud.js +38 -0
- package/dist/vendor/config/schema-manager.js +118 -0
- package/dist/vendor/config/schema-overrides.js +68 -0
- package/dist/vendor/config/schema.js +104 -160
- package/dist/vendor/config/site-global.js +2 -3
- package/dist/vendor/config/validate.js +97 -78
- package/dist/vendor/config/winback.js +1 -1
- package/dist/vendor/devkit/actions-secrets.js +1 -1
- package/dist/vendor/devkit/agents-md.js +233 -0
- package/dist/vendor/devkit/attach-log-file.js +16 -2
- package/dist/vendor/devkit/build-json.js +1 -1
- package/dist/vendor/devkit/ci-workflows.js +30 -30
- package/dist/vendor/devkit/cli-router.js +16 -11
- package/dist/vendor/devkit/defaults-engine.js +15 -51
- package/dist/vendor/devkit/deploy-snapshot.js +44 -9
- package/dist/vendor/devkit/env-lines.js +183 -0
- package/dist/vendor/devkit/local.js +64 -10
- package/dist/vendor/devkit/lockfile.js +32 -13
- package/dist/vendor/devkit/logger.js +7 -2
- package/dist/vendor/devkit/merge-line-files.js +219 -177
- package/dist/vendor/devkit/omega-bin.js +208 -111
- package/dist/vendor/devkit/preludes/docs-sync.js +52 -0
- package/dist/vendor/devkit/preludes/index.js +1 -0
- package/dist/vendor/devkit/target-picker.js +45 -0
- package/dist/vendor/devkit/test/dashed-files.js +37 -0
- package/dist/vendor/devkit/test/run-verb-under-tee.js +71 -0
- package/dist/vendor/devkit/test/runner-core.js +6 -6
- package/dist/vendor/devkit/update.js +15 -15
- package/dist/vendor/devkit/verb-scripts.js +40 -0
- package/dist/vendor/devkit/verbs.js +170 -0
- package/dist/vendor/monitoring/env.js +2 -2
- package/dist/vendor/monitoring/index.js +1 -1
- package/dist/vendor/monitoring/main.js +1 -1
- package/dist/vendor/monitoring/preload.js +1 -1
- package/dist/vendor/monitoring/renderer.js +1 -1
- package/package.json +19 -26
- package/dist/commands/install.js +0 -37
- package/dist/defaults/AGENTS.md +0 -110
- package/dist/defaults/CLAUDE.md +0 -1
- package/dist/lib/client-bridge.js +0 -374
- package/dist/lib/logger.js +0 -4
- package/dist/test/suites/build/manager.test.js +0 -213
- package/dist/test/suites/main/client-bridge.test.js +0 -262
- package/dist/vendor/config/env-retired.js +0 -137
- package/dist/vendor/config/retired-keys.js +0 -635
- package/docs/analytics.md +0 -140
- package/docs/app-state.md +0 -92
- package/docs/audit.md +0 -69
- package/docs/auto-updater.md +0 -243
- package/docs/boot-sequence.md +0 -39
- package/docs/build-system.md +0 -169
- package/docs/cdp-debugging.md +0 -169
- package/docs/client-bridge.md +0 -269
- package/docs/common-mistakes.md +0 -21
- package/docs/config-schema.md +0 -120
- package/docs/context-menu.md +0 -112
- package/docs/context.md +0 -81
- package/docs/css.md +0 -90
- package/docs/deep-link.md +0 -186
- package/docs/environment-detection.md +0 -112
- package/docs/fontawesome.md +0 -107
- package/docs/hooks.md +0 -89
- package/docs/icons.md +0 -79
- package/docs/index.md +0 -317
- package/docs/installer-options.md +0 -165
- package/docs/ipc.md +0 -61
- package/docs/lib-modules.md +0 -53
- package/docs/logging.md +0 -229
- package/docs/menu.md +0 -160
- package/docs/releasing.md +0 -239
- package/docs/remote-config.md +0 -118
- package/docs/remote-scripts.md +0 -144
- package/docs/restart-manager.md +0 -144
- package/docs/runner.md +0 -290
- package/docs/sentry.md +0 -97
- package/docs/shared/agent-docs.md +0 -89
- package/docs/shared/analytics.md +0 -612
- package/docs/shared/brands.md +0 -57
- package/docs/shared/breaking-changes.md +0 -851
- package/docs/shared/config.md +0 -1952
- package/docs/shared/deploys.md +0 -341
- package/docs/shared/icons.md +0 -219
- package/docs/shared/local-dev.md +0 -167
- package/docs/shared/logging.md +0 -205
- package/docs/shared/monitoring.md +0 -167
- package/docs/shared/publishing.md +0 -187
- package/docs/shared/rulings.md +0 -34
- package/docs/shared/testing.md +0 -147
- package/docs/shared/theming.md +0 -629
- package/docs/shared/translation.md +0 -333
- package/docs/shared/updates.md +0 -61
- package/docs/signing.md +0 -293
- package/docs/startup.md +0 -142
- package/docs/storage.md +0 -59
- package/docs/templating.md +0 -101
- package/docs/test-boot-layer.md +0 -157
- package/docs/test-framework.md +0 -362
- package/docs/themes.md +0 -149
- package/docs/tooltips.md +0 -99
- package/docs/tray.md +0 -164
- package/docs/usage.md +0 -58
- package/docs/verts.md +0 -62
- package/docs/windows.md +0 -149
|
@@ -8,24 +8,24 @@ module.exports = defineCases({
|
|
|
8
8
|
description: 'protocol (main)',
|
|
9
9
|
tests: [
|
|
10
10
|
{
|
|
11
|
-
name: 'protocol module is loaded on the
|
|
11
|
+
name: 'protocol module is loaded on the omega instance',
|
|
12
12
|
run: (ctx) => {
|
|
13
|
-
ctx.expect(ctx.
|
|
14
|
-
ctx.expect(ctx.
|
|
13
|
+
ctx.expect(ctx.omega.protocol).toBeDefined();
|
|
14
|
+
ctx.expect(ctx.omega.protocol._initialized).toBe(true);
|
|
15
15
|
},
|
|
16
16
|
},
|
|
17
17
|
{
|
|
18
18
|
name: 'hasSingleInstanceLock returns true (test process owns the lock)',
|
|
19
19
|
run: (ctx) => {
|
|
20
|
-
ctx.expect(ctx.
|
|
20
|
+
ctx.expect(ctx.omega.protocol.hasSingleInstanceLock()).toBe(true);
|
|
21
21
|
},
|
|
22
22
|
},
|
|
23
23
|
{
|
|
24
24
|
name: 'getSchemes returns brand.id when configured',
|
|
25
25
|
run: (ctx) => {
|
|
26
|
-
const schemes = ctx.
|
|
26
|
+
const schemes = ctx.omega.protocol.getSchemes();
|
|
27
27
|
ctx.expect(Array.isArray(schemes)).toBe(true);
|
|
28
|
-
const brandId = ctx.
|
|
28
|
+
const brandId = ctx.omega.config?.brand?.id;
|
|
29
29
|
if (brandId) {
|
|
30
30
|
ctx.expect(schemes).toContain(brandId);
|
|
31
31
|
}
|
|
@@ -34,8 +34,8 @@ module.exports = defineCases({
|
|
|
34
34
|
{
|
|
35
35
|
name: 'getSchemes returns a fresh copy each call (mutation safe)',
|
|
36
36
|
run: (ctx) => {
|
|
37
|
-
const a = ctx.
|
|
38
|
-
const b = ctx.
|
|
37
|
+
const a = ctx.omega.protocol.getSchemes();
|
|
38
|
+
const b = ctx.omega.protocol.getSchemes();
|
|
39
39
|
ctx.expect(a).not.toBe(b); // different array instances
|
|
40
40
|
ctx.expect(a).toEqual(b); // same contents
|
|
41
41
|
},
|
|
@@ -43,33 +43,33 @@ module.exports = defineCases({
|
|
|
43
43
|
{
|
|
44
44
|
name: 'isOurScheme matches registered scheme',
|
|
45
45
|
run: (ctx) => {
|
|
46
|
-
const brandId = ctx.
|
|
46
|
+
const brandId = ctx.omega.config?.brand?.id;
|
|
47
47
|
if (!brandId) return ctx.skip('no brand.id configured');
|
|
48
|
-
ctx.expect(ctx.
|
|
48
|
+
ctx.expect(ctx.omega.protocol.isOurScheme(`${brandId}://auth/token?t=abc`)).toBe(true);
|
|
49
49
|
},
|
|
50
50
|
},
|
|
51
51
|
{
|
|
52
52
|
name: 'isOurScheme rejects unregistered schemes',
|
|
53
53
|
run: (ctx) => {
|
|
54
|
-
ctx.expect(ctx.
|
|
55
|
-
ctx.expect(ctx.
|
|
54
|
+
ctx.expect(ctx.omega.protocol.isOurScheme('https://example.com')).toBe(false);
|
|
55
|
+
ctx.expect(ctx.omega.protocol.isOurScheme('imaginary-scheme://x')).toBe(false);
|
|
56
56
|
},
|
|
57
57
|
},
|
|
58
58
|
{
|
|
59
59
|
name: 'isOurScheme: non-string input returns false (no throw)',
|
|
60
60
|
run: (ctx) => {
|
|
61
|
-
ctx.expect(ctx.
|
|
62
|
-
ctx.expect(ctx.
|
|
63
|
-
ctx.expect(ctx.
|
|
64
|
-
ctx.expect(ctx.
|
|
61
|
+
ctx.expect(ctx.omega.protocol.isOurScheme(null)).toBe(false);
|
|
62
|
+
ctx.expect(ctx.omega.protocol.isOurScheme(undefined)).toBe(false);
|
|
63
|
+
ctx.expect(ctx.omega.protocol.isOurScheme(42)).toBe(false);
|
|
64
|
+
ctx.expect(ctx.omega.protocol.isOurScheme({})).toBe(false);
|
|
65
65
|
},
|
|
66
66
|
},
|
|
67
67
|
{
|
|
68
68
|
name: 'initialize is idempotent — re-calling does not change schemes',
|
|
69
69
|
run: async (ctx) => {
|
|
70
|
-
const before = ctx.
|
|
71
|
-
await ctx.
|
|
72
|
-
const after = ctx.
|
|
70
|
+
const before = ctx.omega.protocol.getSchemes();
|
|
71
|
+
await ctx.omega.protocol.initialize(ctx.omega);
|
|
72
|
+
const after = ctx.omega.protocol.getSchemes();
|
|
73
73
|
ctx.expect(after).toEqual(before);
|
|
74
74
|
},
|
|
75
75
|
},
|
|
@@ -8,16 +8,16 @@ module.exports = defineCases({
|
|
|
8
8
|
layer: 'main',
|
|
9
9
|
description: 'remote-config (main)',
|
|
10
10
|
cleanup: (ctx) => {
|
|
11
|
-
ctx.
|
|
12
|
-
ctx.
|
|
13
|
-
ctx.
|
|
11
|
+
ctx.omega.remoteConfig.shutdown();
|
|
12
|
+
ctx.omega.storage.set('remoteConfig', null);
|
|
13
|
+
ctx.omega.remoteConfig.initialize(ctx.omega);
|
|
14
14
|
},
|
|
15
15
|
tests: [
|
|
16
16
|
{
|
|
17
|
-
name: 'remoteConfig module wired on
|
|
17
|
+
name: 'remoteConfig module wired on omega + initialized during boot',
|
|
18
18
|
run: (ctx) => {
|
|
19
|
-
ctx.expect(ctx.
|
|
20
|
-
ctx.expect(ctx.
|
|
19
|
+
ctx.expect(ctx.omega.remoteConfig).toBeDefined();
|
|
20
|
+
ctx.expect(ctx.omega.remoteConfig._initialized).toBe(true);
|
|
21
21
|
},
|
|
22
22
|
},
|
|
23
23
|
{
|
|
@@ -25,69 +25,69 @@ module.exports = defineCases({
|
|
|
25
25
|
run: (ctx) => {
|
|
26
26
|
// Test config has a brand.url, so we should have a URL set.
|
|
27
27
|
// (If brand.url is missing in test config, this test verifies the resolution shape.)
|
|
28
|
-
const u = ctx.
|
|
28
|
+
const u = ctx.omega.remoteConfig._url;
|
|
29
29
|
ctx.expect(u === null || u.endsWith('/data/resources/main.json')).toBe(true);
|
|
30
30
|
},
|
|
31
31
|
},
|
|
32
32
|
{
|
|
33
33
|
name: 'URL override: config.remoteConfig.url wins over brand.url',
|
|
34
34
|
run: async (ctx) => {
|
|
35
|
-
ctx.
|
|
36
|
-
const orig = ctx.
|
|
37
|
-
ctx.
|
|
35
|
+
ctx.omega.remoteConfig.shutdown();
|
|
36
|
+
const orig = ctx.omega.config.remoteConfig;
|
|
37
|
+
ctx.omega.config.remoteConfig = { url: 'https://override.example/custom.json' };
|
|
38
38
|
try {
|
|
39
|
-
ctx.
|
|
40
|
-
ctx.expect(ctx.
|
|
39
|
+
ctx.omega.remoteConfig.initialize(ctx.omega);
|
|
40
|
+
ctx.expect(ctx.omega.remoteConfig._url).toBe('https://override.example/custom.json');
|
|
41
41
|
} finally {
|
|
42
|
-
ctx.
|
|
43
|
-
ctx.
|
|
44
|
-
ctx.
|
|
42
|
+
ctx.omega.remoteConfig.shutdown();
|
|
43
|
+
ctx.omega.config.remoteConfig = orig;
|
|
44
|
+
ctx.omega.remoteConfig.initialize(ctx.omega);
|
|
45
45
|
}
|
|
46
46
|
},
|
|
47
47
|
},
|
|
48
48
|
{
|
|
49
49
|
name: 'transport gate: non-https URL refused (defaults only), loopback http allowed',
|
|
50
50
|
run: async (ctx) => {
|
|
51
|
-
const orig = ctx.
|
|
51
|
+
const orig = ctx.omega.config.remoteConfig;
|
|
52
52
|
try {
|
|
53
|
-
ctx.
|
|
54
|
-
ctx.
|
|
55
|
-
ctx.
|
|
56
|
-
ctx.expect(ctx.
|
|
53
|
+
ctx.omega.remoteConfig.shutdown();
|
|
54
|
+
ctx.omega.config.remoteConfig = { url: 'http://insecure.example/custom.json' };
|
|
55
|
+
ctx.omega.remoteConfig.initialize(ctx.omega);
|
|
56
|
+
ctx.expect(ctx.omega.remoteConfig._url).toBe(null);
|
|
57
57
|
// Defaults still served — the gate disables the fetch, not the API —
|
|
58
58
|
// and the renderer IPC handler is registered BEFORE the gate returns
|
|
59
59
|
// (the preload exposes the invoke unconditionally).
|
|
60
|
-
ctx.expect(ctx.
|
|
61
|
-
const viaIpc = await ctx.
|
|
60
|
+
ctx.expect(ctx.omega.remoteConfig.get('status')).toBe('online');
|
|
61
|
+
const viaIpc = await ctx.omega.ipc.invoke('desktop:remote-config:get', 'status');
|
|
62
62
|
ctx.expect(viaIpc).toBe('online');
|
|
63
63
|
|
|
64
64
|
// Unlikely-to-be-listening port — initialize() fires a real fetch.
|
|
65
|
-
ctx.
|
|
66
|
-
ctx.
|
|
67
|
-
ctx.
|
|
68
|
-
ctx.expect(ctx.
|
|
65
|
+
ctx.omega.remoteConfig.shutdown();
|
|
66
|
+
ctx.omega.config.remoteConfig = { url: 'http://127.0.0.1:59987/custom.json' };
|
|
67
|
+
ctx.omega.remoteConfig.initialize(ctx.omega);
|
|
68
|
+
ctx.expect(ctx.omega.remoteConfig._url).toBe('http://127.0.0.1:59987/custom.json');
|
|
69
69
|
} finally {
|
|
70
|
-
ctx.
|
|
71
|
-
ctx.
|
|
72
|
-
ctx.
|
|
70
|
+
ctx.omega.remoteConfig.shutdown();
|
|
71
|
+
ctx.omega.config.remoteConfig = orig;
|
|
72
|
+
ctx.omega.remoteConfig.initialize(ctx.omega);
|
|
73
73
|
}
|
|
74
74
|
},
|
|
75
75
|
},
|
|
76
76
|
{
|
|
77
77
|
name: 'enabled=false: skip everything',
|
|
78
78
|
run: async (ctx) => {
|
|
79
|
-
ctx.
|
|
80
|
-
const orig = ctx.
|
|
81
|
-
ctx.
|
|
79
|
+
ctx.omega.remoteConfig.shutdown();
|
|
80
|
+
const orig = ctx.omega.config.remoteConfig;
|
|
81
|
+
ctx.omega.config.remoteConfig = { enabled: false };
|
|
82
82
|
try {
|
|
83
|
-
ctx.
|
|
84
|
-
ctx.expect(ctx.
|
|
85
|
-
ctx.expect(ctx.
|
|
86
|
-
ctx.expect(ctx.
|
|
83
|
+
ctx.omega.remoteConfig.initialize(ctx.omega);
|
|
84
|
+
ctx.expect(ctx.omega.remoteConfig._enabled).toBe(false);
|
|
85
|
+
ctx.expect(ctx.omega.remoteConfig._url).toBe(null);
|
|
86
|
+
ctx.expect(ctx.omega.remoteConfig._intervalId).toBe(null);
|
|
87
87
|
} finally {
|
|
88
|
-
ctx.
|
|
89
|
-
ctx.
|
|
90
|
-
ctx.
|
|
88
|
+
ctx.omega.remoteConfig.shutdown();
|
|
89
|
+
ctx.omega.config.remoteConfig = orig;
|
|
90
|
+
ctx.omega.remoteConfig.initialize(ctx.omega);
|
|
91
91
|
}
|
|
92
92
|
},
|
|
93
93
|
},
|
|
@@ -96,8 +96,8 @@ module.exports = defineCases({
|
|
|
96
96
|
run: async (ctx) => {
|
|
97
97
|
// Inject test data via the storage cache + bypass the network.
|
|
98
98
|
const planted = { status: 'online', versionRequired: '2.0.0' };
|
|
99
|
-
ctx.
|
|
100
|
-
const got = ctx.
|
|
99
|
+
ctx.omega.remoteConfig._data = planted;
|
|
100
|
+
const got = ctx.omega.remoteConfig.get();
|
|
101
101
|
ctx.expect(got.status).toBe('online');
|
|
102
102
|
ctx.expect(got.versionRequired).toBe('2.0.0');
|
|
103
103
|
},
|
|
@@ -105,35 +105,35 @@ module.exports = defineCases({
|
|
|
105
105
|
{
|
|
106
106
|
name: 'get() supports dot-path lookup',
|
|
107
107
|
run: (ctx) => {
|
|
108
|
-
ctx.
|
|
108
|
+
ctx.omega.remoteConfig._data = {
|
|
109
109
|
status: 'online',
|
|
110
110
|
settings: { versionRequired: '1.5.0', nested: { value: 42 } },
|
|
111
111
|
};
|
|
112
|
-
ctx.expect(ctx.
|
|
113
|
-
ctx.expect(ctx.
|
|
114
|
-
ctx.expect(ctx.
|
|
115
|
-
ctx.expect(ctx.
|
|
116
|
-
ctx.expect(ctx.
|
|
112
|
+
ctx.expect(ctx.omega.remoteConfig.get('status')).toBe('online');
|
|
113
|
+
ctx.expect(ctx.omega.remoteConfig.get('settings.versionRequired')).toBe('1.5.0');
|
|
114
|
+
ctx.expect(ctx.omega.remoteConfig.get('settings.nested.value')).toBe(42);
|
|
115
|
+
ctx.expect(ctx.omega.remoteConfig.get('settings.missing')).toBe(undefined);
|
|
116
|
+
ctx.expect(ctx.omega.remoteConfig.get('totally.absent.path')).toBe(undefined);
|
|
117
117
|
},
|
|
118
118
|
},
|
|
119
119
|
{
|
|
120
120
|
name: 'get() returns DEFAULTS even before first fetch (so consumers never see undefined at boot)',
|
|
121
121
|
run: (ctx) => {
|
|
122
|
-
const orig = ctx.
|
|
123
|
-
ctx.
|
|
122
|
+
const orig = ctx.omega.remoteConfig._data;
|
|
123
|
+
ctx.omega.remoteConfig._data = null;
|
|
124
124
|
try {
|
|
125
|
-
const all = ctx.
|
|
125
|
+
const all = ctx.omega.remoteConfig.get();
|
|
126
126
|
ctx.expect(all.status).toBe('online');
|
|
127
127
|
ctx.expect(all.versionRequired).toBe('0.0.0');
|
|
128
|
-
ctx.expect(ctx.
|
|
129
|
-
ctx.expect(ctx.
|
|
130
|
-
} finally { ctx.
|
|
128
|
+
ctx.expect(ctx.omega.remoteConfig.get('status')).toBe('online');
|
|
129
|
+
ctx.expect(ctx.omega.remoteConfig.get('versionRequired')).toBe('0.0.0');
|
|
130
|
+
} finally { ctx.omega.remoteConfig._data = orig; }
|
|
131
131
|
},
|
|
132
132
|
},
|
|
133
133
|
{
|
|
134
134
|
name: 'DEFAULTS export — exposed for consumer reference',
|
|
135
135
|
run: (ctx) => {
|
|
136
|
-
const D = ctx.
|
|
136
|
+
const D = ctx.omega.remoteConfig.DEFAULTS;
|
|
137
137
|
ctx.expect(D).toBeDefined();
|
|
138
138
|
ctx.expect(D.status).toBe('online');
|
|
139
139
|
ctx.expect(D.versionRequired).toBe('0.0.0');
|
|
@@ -149,9 +149,9 @@ module.exports = defineCases({
|
|
|
149
149
|
name: 'on(update, fn): subscriber fires when _emit is called',
|
|
150
150
|
run: async (ctx) => {
|
|
151
151
|
let received = null;
|
|
152
|
-
const off = ctx.
|
|
152
|
+
const off = ctx.omega.remoteConfig.on('update', (data) => { received = data; });
|
|
153
153
|
try {
|
|
154
|
-
ctx.
|
|
154
|
+
ctx.omega.remoteConfig._emit('update', { ping: true });
|
|
155
155
|
ctx.expect(received).toEqual({ ping: true });
|
|
156
156
|
} finally { off(); }
|
|
157
157
|
},
|
|
@@ -160,19 +160,19 @@ module.exports = defineCases({
|
|
|
160
160
|
name: 'on(update, fn): unsubscribe stops further calls',
|
|
161
161
|
run: (ctx) => {
|
|
162
162
|
let count = 0;
|
|
163
|
-
const off = ctx.
|
|
164
|
-
ctx.
|
|
163
|
+
const off = ctx.omega.remoteConfig.on('update', () => { count++; });
|
|
164
|
+
ctx.omega.remoteConfig._emit('update', {});
|
|
165
165
|
ctx.expect(count).toBe(1);
|
|
166
166
|
off();
|
|
167
|
-
ctx.
|
|
167
|
+
ctx.omega.remoteConfig._emit('update', {});
|
|
168
168
|
ctx.expect(count).toBe(1); // unchanged
|
|
169
169
|
},
|
|
170
170
|
},
|
|
171
171
|
{
|
|
172
172
|
name: 'IPC handler desktop:remote-config:get returns cached data',
|
|
173
173
|
run: async (ctx) => {
|
|
174
|
-
ctx.
|
|
175
|
-
const result = await ctx.
|
|
174
|
+
ctx.omega.remoteConfig._data = { status: 'online', x: 1 };
|
|
175
|
+
const result = await ctx.omega.ipc.invoke('desktop:remote-config:get');
|
|
176
176
|
ctx.expect(result.status).toBe('online');
|
|
177
177
|
ctx.expect(result.x).toBe(1);
|
|
178
178
|
},
|
|
@@ -180,8 +180,8 @@ module.exports = defineCases({
|
|
|
180
180
|
{
|
|
181
181
|
name: 'IPC handler desktop:remote-config:get supports dot-path',
|
|
182
182
|
run: async (ctx) => {
|
|
183
|
-
ctx.
|
|
184
|
-
const result = await ctx.
|
|
183
|
+
ctx.omega.remoteConfig._data = { settings: { versionRequired: '3.1.4' } };
|
|
184
|
+
const result = await ctx.omega.ipc.invoke('desktop:remote-config:get', 'settings.versionRequired');
|
|
185
185
|
ctx.expect(result).toBe('3.1.4');
|
|
186
186
|
},
|
|
187
187
|
},
|