@omega.js/desktop 0.52.0 → 0.53.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 +17 -12
- 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.js +1 -1
- package/dist/commands/build.js +2 -2
- package/dist/commands/cdp/capture.js +2 -2
- 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/clean.js +2 -2
- package/dist/commands/deploy.js +4 -4
- package/dist/commands/finalize-release.js +4 -4
- package/dist/commands/install.js +3 -3
- package/dist/commands/launch.js +2 -2
- package/dist/commands/lib/deploy-precheck.js +3 -3
- package/dist/commands/lib/ensure-target.js +6 -6
- package/dist/commands/package.js +2 -2
- package/dist/commands/publish.js +2 -2
- package/dist/commands/release.js +3 -3
- package/dist/commands/runner.js +11 -11
- package/dist/commands/sign-windows.js +5 -5
- package/dist/commands/test.js +4 -4
- package/dist/commands/update.js +2 -2
- package/dist/commands/validate-certs.js +4 -4
- package/dist/commands/version.js +3 -3
- package/dist/defaults/AGENTS.md +17 -8
- package/dist/defaults/config/omega.json5 +7 -7
- package/dist/defaults/hooks/build/post.js +1 -1
- package/dist/defaults/hooks/build/pre.js +1 -1
- package/dist/defaults/hooks/deploy/pre.js +1 -1
- package/dist/defaults/hooks/release/post.js +1 -1
- package/dist/defaults/hooks/release/pre.js +1 -1
- 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/integrations/context-menu/index.js +2 -2
- package/dist/defaults/src/integrations/menu/index.js +3 -3
- package/dist/defaults/src/integrations/tray/index.js +3 -3
- package/dist/defaults/src/main.js +3 -5
- package/dist/defaults/src/preload.js +3 -5
- package/dist/defaults/test/README.md +2 -2
- package/dist/gulp/main.js +9 -10
- package/dist/gulp/tasks/audit.js +7 -7
- 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 +28 -28
- 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 +398 -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 +1 -1
- 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/cli.test.js +2 -2
- package/dist/test/suites/build/config-schema.test.js +5 -5
- package/dist/test/suites/build/defaults-scaffold.test.js +2 -2
- package/dist/test/suites/build/deploy-hook.test.js +3 -3
- package/dist/test/suites/build/ensure-target.test.js +2 -2
- 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 +1 -1
- 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/renderer-auth-bridge.test.js +211 -78
- package/dist/test/suites/build/runner.test.js +2 -2
- package/dist/test/suites/build/sentry.test.js +2 -2
- 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 +2 -2
- 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} +27 -7
- package/dist/test/utils/extended-mode-warning.js +1 -1
- package/dist/utils/boot-harness.js +56 -0
- package/dist/utils/mode-helpers.js +2 -15
- 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/environment.js +11 -30
- package/dist/vendor/config/index.js +8 -11
- package/dist/vendor/config/load.js +1 -2
- package/dist/vendor/config/platforms.js +1 -1
- package/dist/vendor/config/retired-keys.js +2 -2
- package/dist/vendor/config/schema.js +5 -8
- package/dist/vendor/config/site-global.js +2 -3
- package/dist/vendor/config/validate.js +1 -2
- package/dist/vendor/config/winback.js +1 -1
- package/dist/vendor/devkit/actions-secrets.js +1 -1
- package/dist/vendor/devkit/attach-log-file.js +1 -1
- package/dist/vendor/devkit/build-json.js +1 -1
- package/dist/vendor/devkit/cli-router.js +3 -4
- package/dist/vendor/devkit/defaults-engine.js +9 -11
- package/dist/vendor/devkit/local.js +2 -0
- package/dist/vendor/devkit/merge-line-files.js +2 -3
- package/dist/vendor/devkit/test/runner-core.js +6 -6
- 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/docs/analytics.md +8 -8
- package/docs/app-state.md +19 -19
- package/docs/audit.md +4 -4
- package/docs/{client-bridge.md → auth.md} +88 -73
- package/docs/auto-updater.md +8 -8
- package/docs/boot-sequence.md +11 -6
- package/docs/build-system.md +1 -1
- package/docs/cdp-debugging.md +1 -1
- package/docs/common-mistakes.md +7 -7
- package/docs/config-schema.md +1 -1
- package/docs/context-menu.md +13 -13
- package/docs/context.md +11 -11
- package/docs/css.md +3 -9
- package/docs/deep-link.md +25 -25
- package/docs/environment-detection.md +16 -16
- package/docs/fontawesome.md +7 -5
- package/docs/hooks.md +8 -8
- package/docs/index.md +38 -27
- package/docs/ipc.md +10 -10
- package/docs/lib-modules.md +9 -9
- package/docs/logging.md +12 -14
- package/docs/menu.md +18 -18
- package/docs/remote-config.md +9 -9
- package/docs/remote-scripts.md +12 -12
- package/docs/restart-manager.md +8 -8
- package/docs/sentry.md +4 -4
- package/docs/shared/analytics.md +1 -1
- package/docs/shared/breaking-changes.md +79 -13
- package/docs/shared/config.md +17 -21
- package/docs/shared/logging.md +1 -1
- package/docs/shared/monitoring.md +5 -5
- package/docs/shared/testing.md +2 -2
- package/docs/shared/theming.md +1 -1
- package/docs/shared/translation.md +19 -10
- package/docs/startup.md +16 -16
- package/docs/storage.md +11 -11
- package/docs/templating.md +3 -3
- package/docs/test-boot-layer.md +12 -12
- package/docs/test-framework.md +17 -17
- package/docs/themes.md +7 -7
- package/docs/tooltips.md +2 -2
- package/docs/tray.md +31 -31
- package/docs/usage.md +7 -7
- package/docs/verts.md +1 -1
- package/docs/windows.md +22 -22
- package/package.json +3 -4
- 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
|
@@ -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
|
},
|