@omega.js/desktop 0.51.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.
Files changed (289) hide show
  1. package/README.md +18 -13
  2. package/dist/assets/css/core/_initialize.scss +1 -1
  3. package/dist/assets/js/core/app-shell.js +14 -15
  4. package/dist/assets/themes/_template/_theme.js +6 -6
  5. package/dist/assets/themes/base/_includes/global/sections/account.html +4 -4
  6. package/dist/assets/themes/base/_includes/global/sections/app-sidebar.html +5 -5
  7. package/dist/assets/themes/base/_layouts/frontend/pages/account/index.html +3 -3
  8. package/dist/assets/themes/base/_layouts/frontend/pages/alternatives/index.html +1 -1
  9. package/dist/assets/themes/base/_layouts/frontend/pages/blog/tags/tag.html +1 -1
  10. package/dist/assets/themes/base/_layouts/frontend/pages/payment/confirmation.html +1 -1
  11. package/dist/assets/themes/base/_sections/marketing/newsletter-cta/section.js +2 -3
  12. package/dist/assets/themes/base/_sections/verts/unit/section.html +1 -1
  13. package/dist/assets/themes/base/_sections/verts/unit/section.js +3 -4
  14. package/dist/assets/themes/base/_theme.js +4 -3
  15. package/dist/assets/themes/bootstrap/_theme.js +2 -2
  16. package/dist/assets/themes/bootstrap/overrides/_links.scss +1 -1
  17. package/dist/assets/themes/classy/_theme.js +8 -6
  18. package/dist/assets/themes/classy/css/marketing/_sections.scss +1 -2
  19. package/dist/assets/themes/classy/js/hero-demo-form.js +3 -2
  20. package/dist/assets/themes/neobrutalism/_theme.js +5 -5
  21. package/dist/assets/themes/neobrutalism/js/pages/test/libraries/layers/index.js +1 -1
  22. package/dist/assets/themes/newsflash/_theme.js +6 -6
  23. package/dist/assets/themes/newsflash/js/pages/test/libraries/layers/index.js +1 -1
  24. package/dist/build.js +87 -111
  25. package/dist/cli.js +1 -1
  26. package/dist/commands/build.js +2 -2
  27. package/dist/commands/cdp/capture.js +2 -2
  28. package/dist/commands/cdp/quit.js +2 -2
  29. package/dist/commands/cdp/relaunch.js +2 -2
  30. package/dist/commands/cdp/theme.js +1 -1
  31. package/dist/commands/clean.js +2 -2
  32. package/dist/commands/deploy.js +4 -4
  33. package/dist/commands/finalize-release.js +4 -4
  34. package/dist/commands/install.js +3 -3
  35. package/dist/commands/launch.js +2 -2
  36. package/dist/commands/lib/deploy-precheck.js +3 -3
  37. package/dist/commands/lib/ensure-target.js +6 -6
  38. package/dist/commands/package.js +2 -2
  39. package/dist/commands/publish.js +2 -2
  40. package/dist/commands/release.js +3 -3
  41. package/dist/commands/runner.js +145 -48
  42. package/dist/commands/sign-windows.js +5 -5
  43. package/dist/commands/test.js +4 -4
  44. package/dist/commands/update.js +2 -2
  45. package/dist/commands/validate-certs.js +4 -4
  46. package/dist/commands/version.js +3 -3
  47. package/dist/defaults/.github/workflows/build.yml +2 -0
  48. package/dist/defaults/AGENTS.md +17 -8
  49. package/dist/defaults/config/omega.json5 +7 -7
  50. package/dist/defaults/hooks/build/post.js +1 -1
  51. package/dist/defaults/hooks/build/pre.js +1 -1
  52. package/dist/defaults/hooks/deploy/pre.js +1 -1
  53. package/dist/defaults/hooks/release/post.js +1 -1
  54. package/dist/defaults/hooks/release/pre.js +1 -1
  55. package/dist/defaults/src/assets/js/components/about/index.js +3 -5
  56. package/dist/defaults/src/assets/js/components/main/index.js +3 -5
  57. package/dist/defaults/src/assets/js/components/settings/index.js +3 -5
  58. package/dist/defaults/src/integrations/context-menu/index.js +2 -2
  59. package/dist/defaults/src/integrations/menu/index.js +3 -3
  60. package/dist/defaults/src/integrations/tray/index.js +3 -3
  61. package/dist/defaults/src/main.js +3 -5
  62. package/dist/defaults/src/preload.js +3 -5
  63. package/dist/defaults/test/README.md +2 -2
  64. package/dist/gulp/main.js +9 -10
  65. package/dist/gulp/tasks/audit.js +7 -7
  66. package/dist/gulp/tasks/build-config.js +8 -8
  67. package/dist/gulp/tasks/bundle.js +16 -16
  68. package/dist/gulp/tasks/defaults.js +3 -3
  69. package/dist/gulp/tasks/distribute.js +2 -2
  70. package/dist/gulp/tasks/html.js +9 -9
  71. package/dist/gulp/tasks/package-quick.js +3 -3
  72. package/dist/gulp/tasks/package.js +3 -3
  73. package/dist/gulp/tasks/release.js +3 -3
  74. package/dist/gulp/tasks/sass.js +6 -6
  75. package/dist/gulp/tasks/serve.js +4 -4
  76. package/dist/hooks/notarize-artifacts.js +1 -1
  77. package/dist/hooks/notarize.js +1 -1
  78. package/dist/index.js +5 -8
  79. package/dist/lib/_environment-mixin.js +50 -0
  80. package/dist/lib/_lifecycle-mixin.js +45 -0
  81. package/dist/lib/analytics.js +33 -35
  82. package/dist/lib/app-state.js +14 -14
  83. package/dist/lib/auth-flow.js +18 -18
  84. package/dist/lib/auth-persistence.js +12 -12
  85. package/dist/lib/auth.js +421 -0
  86. package/dist/lib/auto-updater.js +49 -49
  87. package/dist/lib/context-menu.js +13 -13
  88. package/dist/lib/context.js +19 -19
  89. package/dist/lib/deep-link.js +34 -34
  90. package/dist/lib/fontawesome.js +5 -5
  91. package/dist/lib/ipc.js +4 -4
  92. package/dist/lib/menu.js +25 -25
  93. package/dist/lib/protocol.js +5 -5
  94. package/dist/lib/remote-config.js +22 -22
  95. package/dist/lib/remote-scripts.js +21 -21
  96. package/dist/lib/restart-manager/index.js +28 -28
  97. package/dist/lib/sign-helpers/exec-with-limit.js +1 -1
  98. package/dist/lib/sign-helpers/sign-events.js +1 -1
  99. package/dist/lib/startup.js +18 -13
  100. package/dist/lib/storage.js +10 -10
  101. package/dist/lib/templating.js +16 -16
  102. package/dist/lib/theme.js +10 -10
  103. package/dist/lib/tray.js +27 -27
  104. package/dist/lib/usage.js +11 -11
  105. package/dist/lib/window-manager.js +26 -26
  106. package/dist/main.js +398 -483
  107. package/dist/preload.js +236 -176
  108. package/dist/renderer.js +417 -391
  109. package/dist/runner/job-started.js +1 -1
  110. package/dist/test/fixtures/consumer-app/config/omega.json5 +1 -1
  111. package/dist/test/fixtures/consumer-app/src/assets/js/components/main/index.js +8 -11
  112. package/dist/test/fixtures/consumer-app/src/main.js +5 -7
  113. package/dist/test/fixtures/consumer-app/src/preload.js +2 -2
  114. package/dist/test/harness/boot-entry.js +22 -20
  115. package/dist/test/harness/main-entry.js +31 -30
  116. package/dist/test/harness/renderer-entry.js +5 -5
  117. package/dist/test/harness/renderer-preload.js +137 -141
  118. package/dist/test/index.js +10 -10
  119. package/dist/test/runner.js +2 -2
  120. package/dist/test/runners/boot.js +7 -6
  121. package/dist/test/runners/electron.js +3 -2
  122. package/dist/test/runners/render-event.js +2 -2
  123. package/dist/test/suites/boot/consumer-app-boots.test.js +57 -26
  124. package/dist/test/suites/boot/restart-manager.test.js +2 -2
  125. package/dist/test/suites/boot/storage-bundled.test.js +5 -5
  126. package/dist/test/suites/boot/theme.test.js +13 -13
  127. package/dist/test/suites/build/audit.test.js +1 -1
  128. package/dist/test/suites/build/auth-persistence-resolve.test.js +6 -6
  129. package/dist/test/suites/build/boot-fixture.test.js +2 -2
  130. package/dist/test/suites/build/boot-runner-timeout.test.js +6 -5
  131. package/dist/test/suites/build/brand-scss.test.js +1 -1
  132. package/dist/test/suites/build/build-json-bake.test.js +1 -1
  133. package/dist/test/suites/build/cli.test.js +2 -2
  134. package/dist/test/suites/build/config-schema.test.js +5 -5
  135. package/dist/test/suites/build/defaults-scaffold.test.js +2 -2
  136. package/dist/test/suites/build/deploy-hook.test.js +3 -3
  137. package/dist/test/suites/build/ensure-target.test.js +2 -2
  138. package/dist/test/suites/build/env-delivery.test.js +2 -2
  139. package/dist/test/suites/build/esm-only-dependency.test.js +2 -2
  140. package/dist/test/suites/build/exports.test.js +9 -8
  141. package/dist/test/suites/build/get-config.test.js +4 -4
  142. package/dist/test/suites/build/manifest-deps.test.js +1 -1
  143. package/dist/test/suites/build/merge-line-files.test.js +1 -1
  144. package/dist/test/suites/build/omega-shell.test.js +34 -2
  145. package/dist/test/suites/build/omega.test.js +350 -0
  146. package/dist/test/suites/build/renderer-auth-bridge.test.js +211 -78
  147. package/dist/test/suites/build/runner.test.js +612 -5
  148. package/dist/test/suites/build/sentry.test.js +2 -2
  149. package/dist/test/suites/build/sign-windows-e2e.test.js +2 -2
  150. package/dist/test/suites/build/templating.test.js +3 -3
  151. package/dist/test/suites/build/test-stealth.test.js +7 -9
  152. package/dist/test/suites/build/url-helpers.test.js +55 -56
  153. package/dist/test/suites/build/validate-config.test.js +2 -2
  154. package/dist/test/suites/build/wave5-pins.test.js +2 -2
  155. package/dist/test/suites/main/analytics.test.js +59 -59
  156. package/dist/test/suites/main/app-state.test.js +66 -66
  157. package/dist/test/suites/main/auth-flow.test.js +41 -41
  158. package/dist/test/suites/main/auth-persistence.test.js +54 -43
  159. package/dist/test/suites/main/{client-bridge.integration.test.js → auth.integration.test.js} +10 -9
  160. package/dist/test/suites/main/auth.test.js +336 -0
  161. package/dist/test/suites/main/auto-updater.test.js +134 -134
  162. package/dist/test/suites/main/boot-sequence.test.js +37 -49
  163. package/dist/test/suites/main/context-menu.test.js +51 -50
  164. package/dist/test/suites/main/context.test.js +25 -25
  165. package/dist/test/suites/main/deep-link.test.js +74 -74
  166. package/dist/test/suites/main/fontawesome.test.js +27 -27
  167. package/dist/test/suites/main/ipc.test.js +35 -35
  168. package/dist/test/suites/main/menu.test.js +101 -100
  169. package/dist/test/suites/main/protocol.test.js +19 -19
  170. package/dist/test/suites/main/remote-config.test.js +63 -63
  171. package/dist/test/suites/main/remote-scripts.test.js +103 -103
  172. package/dist/test/suites/main/request.test.js +71 -0
  173. package/dist/test/suites/main/restart-manager.test.js +33 -33
  174. package/dist/test/suites/main/startup-paths-and-ua.test.js +4 -4
  175. package/dist/test/suites/main/startup.test.js +26 -26
  176. package/dist/test/suites/main/stealth-window.test.js +1 -1
  177. package/dist/test/suites/main/storage.test.js +25 -25
  178. package/dist/test/suites/main/theme.test.js +34 -34
  179. package/dist/test/suites/main/tray.test.js +79 -79
  180. package/dist/test/suites/main/url-helpers.test.js +133 -133
  181. package/dist/test/suites/main/usage.test.js +25 -25
  182. package/dist/test/suites/main/window-bounds.test.js +27 -27
  183. package/dist/test/suites/main/window-manager.test.js +44 -44
  184. package/dist/test/suites/renderer/analytics-bridge.test.js +5 -5
  185. package/dist/test/suites/renderer/cross-context-helpers.test.js +37 -31
  186. package/dist/test/suites/renderer/round-trip.test.js +3 -3
  187. package/dist/test/suites/renderer/tooltips.test.js +15 -15
  188. package/dist/test/suites/renderer/{window-em-surface.test.js → window-desktop-surface.test.js} +27 -7
  189. package/dist/test/utils/extended-mode-warning.js +1 -1
  190. package/dist/utils/boot-harness.js +56 -0
  191. package/dist/utils/mode-helpers.js +2 -15
  192. package/dist/utils/ship-keys.js +3 -3
  193. package/dist/utils/signing-status.js +51 -0
  194. package/dist/utils/test-events.js +7 -0
  195. package/dist/utils/test-stealth.js +6 -6
  196. package/dist/utils/url-helpers.js +52 -42
  197. package/dist/utils/user-agent.js +44 -0
  198. package/dist/vendor/account/engine.js +3 -3
  199. package/dist/vendor/account/index.js +14 -45
  200. package/dist/vendor/account/resolve-account.js +44 -0
  201. package/dist/vendor/account/schema.js +1 -1
  202. package/dist/vendor/account/user.js +99 -0
  203. package/dist/vendor/config/client-config.js +1 -1
  204. package/dist/vendor/config/environment.js +11 -30
  205. package/dist/vendor/config/index.js +13 -12
  206. package/dist/vendor/config/load.js +1 -2
  207. package/dist/vendor/config/platforms.js +1 -1
  208. package/dist/vendor/config/repo.js +24 -0
  209. package/dist/vendor/config/retired-keys.js +2 -2
  210. package/dist/vendor/config/schema.js +5 -8
  211. package/dist/vendor/config/site-global.js +2 -3
  212. package/dist/vendor/config/validate.js +1 -2
  213. package/dist/vendor/config/winback.js +1 -1
  214. package/dist/vendor/devkit/actions-secrets.js +1 -1
  215. package/dist/vendor/devkit/attach-log-file.js +1 -1
  216. package/dist/vendor/devkit/brand-version.js +162 -1
  217. package/dist/vendor/devkit/build-json.js +1 -1
  218. package/dist/vendor/devkit/cli-router.js +3 -4
  219. package/dist/vendor/devkit/defaults-engine.js +9 -11
  220. package/dist/vendor/devkit/deploy.js +64 -4
  221. package/dist/vendor/devkit/git-remote.js +78 -1
  222. package/dist/vendor/devkit/local.js +53 -3
  223. package/dist/vendor/devkit/lockfile.js +127 -0
  224. package/dist/vendor/devkit/merge-line-files.js +2 -3
  225. package/dist/vendor/devkit/pack-local.js +4 -7
  226. package/dist/vendor/devkit/preludes/origin-heal.js +35 -49
  227. package/dist/vendor/devkit/target-secrets.js +34 -45
  228. package/dist/vendor/devkit/test/runner-core.js +6 -6
  229. package/dist/vendor/monitoring/env.js +2 -2
  230. package/dist/vendor/monitoring/index.js +1 -1
  231. package/dist/vendor/monitoring/main.js +1 -1
  232. package/dist/vendor/monitoring/preload.js +1 -1
  233. package/dist/vendor/monitoring/renderer.js +1 -1
  234. package/docs/analytics.md +8 -8
  235. package/docs/app-state.md +19 -19
  236. package/docs/audit.md +4 -4
  237. package/docs/{client-bridge.md → auth.md} +88 -73
  238. package/docs/auto-updater.md +8 -8
  239. package/docs/boot-sequence.md +11 -6
  240. package/docs/build-system.md +1 -1
  241. package/docs/cdp-debugging.md +1 -1
  242. package/docs/common-mistakes.md +7 -7
  243. package/docs/config-schema.md +1 -1
  244. package/docs/context-menu.md +13 -13
  245. package/docs/context.md +11 -11
  246. package/docs/css.md +3 -9
  247. package/docs/deep-link.md +25 -25
  248. package/docs/environment-detection.md +16 -16
  249. package/docs/fontawesome.md +7 -5
  250. package/docs/hooks.md +8 -8
  251. package/docs/index.md +39 -28
  252. package/docs/ipc.md +10 -10
  253. package/docs/lib-modules.md +9 -9
  254. package/docs/logging.md +12 -14
  255. package/docs/menu.md +18 -18
  256. package/docs/releasing.md +4 -2
  257. package/docs/remote-config.md +9 -9
  258. package/docs/remote-scripts.md +12 -12
  259. package/docs/restart-manager.md +8 -8
  260. package/docs/runner.md +12 -10
  261. package/docs/sentry.md +4 -4
  262. package/docs/shared/analytics.md +1 -1
  263. package/docs/shared/brands.md +1 -1
  264. package/docs/shared/breaking-changes.md +79 -13
  265. package/docs/shared/config.md +24 -21
  266. package/docs/shared/deploys.md +30 -7
  267. package/docs/shared/local-dev.md +5 -3
  268. package/docs/shared/logging.md +1 -1
  269. package/docs/shared/monitoring.md +5 -5
  270. package/docs/shared/testing.md +2 -2
  271. package/docs/shared/theming.md +1 -1
  272. package/docs/shared/translation.md +19 -10
  273. package/docs/signing.md +1 -1
  274. package/docs/startup.md +16 -16
  275. package/docs/storage.md +11 -11
  276. package/docs/templating.md +3 -3
  277. package/docs/test-boot-layer.md +12 -12
  278. package/docs/test-framework.md +17 -17
  279. package/docs/themes.md +7 -7
  280. package/docs/tooltips.md +2 -2
  281. package/docs/tray.md +31 -31
  282. package/docs/usage.md +7 -7
  283. package/docs/verts.md +1 -1
  284. package/docs/windows.md +22 -22
  285. package/package.json +3 -4
  286. package/dist/lib/client-bridge.js +0 -374
  287. package/dist/lib/logger.js +0 -4
  288. package/dist/test/suites/build/manager.test.js +0 -213
  289. 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 manager',
11
+ name: 'protocol module is loaded on the omega instance',
12
12
  run: (ctx) => {
13
- ctx.expect(ctx.manager.protocol).toBeDefined();
14
- ctx.expect(ctx.manager.protocol._initialized).toBe(true);
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.manager.protocol.hasSingleInstanceLock()).toBe(true);
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.manager.protocol.getSchemes();
26
+ const schemes = ctx.omega.protocol.getSchemes();
27
27
  ctx.expect(Array.isArray(schemes)).toBe(true);
28
- const brandId = ctx.manager.config?.brand?.id;
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.manager.protocol.getSchemes();
38
- const b = ctx.manager.protocol.getSchemes();
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.manager.config?.brand?.id;
46
+ const brandId = ctx.omega.config?.brand?.id;
47
47
  if (!brandId) return ctx.skip('no brand.id configured');
48
- ctx.expect(ctx.manager.protocol.isOurScheme(`${brandId}://auth/token?t=abc`)).toBe(true);
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.manager.protocol.isOurScheme('https://example.com')).toBe(false);
55
- ctx.expect(ctx.manager.protocol.isOurScheme('imaginary-scheme://x')).toBe(false);
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.manager.protocol.isOurScheme(null)).toBe(false);
62
- ctx.expect(ctx.manager.protocol.isOurScheme(undefined)).toBe(false);
63
- ctx.expect(ctx.manager.protocol.isOurScheme(42)).toBe(false);
64
- ctx.expect(ctx.manager.protocol.isOurScheme({})).toBe(false);
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.manager.protocol.getSchemes();
71
- await ctx.manager.protocol.initialize(ctx.manager);
72
- const after = ctx.manager.protocol.getSchemes();
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.manager.remoteConfig.shutdown();
12
- ctx.manager.storage.set('remoteConfig', null);
13
- ctx.manager.remoteConfig.initialize(ctx.manager);
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 manager + initialized during boot',
17
+ name: 'remoteConfig module wired on omega + initialized during boot',
18
18
  run: (ctx) => {
19
- ctx.expect(ctx.manager.remoteConfig).toBeDefined();
20
- ctx.expect(ctx.manager.remoteConfig._initialized).toBe(true);
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.manager.remoteConfig._url;
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.manager.remoteConfig.shutdown();
36
- const orig = ctx.manager.config.remoteConfig;
37
- ctx.manager.config.remoteConfig = { url: 'https://override.example/custom.json' };
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.manager.remoteConfig.initialize(ctx.manager);
40
- ctx.expect(ctx.manager.remoteConfig._url).toBe('https://override.example/custom.json');
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.manager.remoteConfig.shutdown();
43
- ctx.manager.config.remoteConfig = orig;
44
- ctx.manager.remoteConfig.initialize(ctx.manager);
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.manager.config.remoteConfig;
51
+ const orig = ctx.omega.config.remoteConfig;
52
52
  try {
53
- ctx.manager.remoteConfig.shutdown();
54
- ctx.manager.config.remoteConfig = { url: 'http://insecure.example/custom.json' };
55
- ctx.manager.remoteConfig.initialize(ctx.manager);
56
- ctx.expect(ctx.manager.remoteConfig._url).toBe(null);
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.manager.remoteConfig.get('status')).toBe('online');
61
- const viaIpc = await ctx.manager.ipc.invoke('desktop:remote-config:get', 'status');
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.manager.remoteConfig.shutdown();
66
- ctx.manager.config.remoteConfig = { url: 'http://127.0.0.1:59987/custom.json' };
67
- ctx.manager.remoteConfig.initialize(ctx.manager);
68
- ctx.expect(ctx.manager.remoteConfig._url).toBe('http://127.0.0.1:59987/custom.json');
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.manager.remoteConfig.shutdown();
71
- ctx.manager.config.remoteConfig = orig;
72
- ctx.manager.remoteConfig.initialize(ctx.manager);
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.manager.remoteConfig.shutdown();
80
- const orig = ctx.manager.config.remoteConfig;
81
- ctx.manager.config.remoteConfig = { enabled: false };
79
+ ctx.omega.remoteConfig.shutdown();
80
+ const orig = ctx.omega.config.remoteConfig;
81
+ ctx.omega.config.remoteConfig = { enabled: false };
82
82
  try {
83
- ctx.manager.remoteConfig.initialize(ctx.manager);
84
- ctx.expect(ctx.manager.remoteConfig._enabled).toBe(false);
85
- ctx.expect(ctx.manager.remoteConfig._url).toBe(null);
86
- ctx.expect(ctx.manager.remoteConfig._intervalId).toBe(null);
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.manager.remoteConfig.shutdown();
89
- ctx.manager.config.remoteConfig = orig;
90
- ctx.manager.remoteConfig.initialize(ctx.manager);
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.manager.remoteConfig._data = planted;
100
- const got = ctx.manager.remoteConfig.get();
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.manager.remoteConfig._data = {
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.manager.remoteConfig.get('status')).toBe('online');
113
- ctx.expect(ctx.manager.remoteConfig.get('settings.versionRequired')).toBe('1.5.0');
114
- ctx.expect(ctx.manager.remoteConfig.get('settings.nested.value')).toBe(42);
115
- ctx.expect(ctx.manager.remoteConfig.get('settings.missing')).toBe(undefined);
116
- ctx.expect(ctx.manager.remoteConfig.get('totally.absent.path')).toBe(undefined);
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.manager.remoteConfig._data;
123
- ctx.manager.remoteConfig._data = null;
122
+ const orig = ctx.omega.remoteConfig._data;
123
+ ctx.omega.remoteConfig._data = null;
124
124
  try {
125
- const all = ctx.manager.remoteConfig.get();
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.manager.remoteConfig.get('status')).toBe('online');
129
- ctx.expect(ctx.manager.remoteConfig.get('versionRequired')).toBe('0.0.0');
130
- } finally { ctx.manager.remoteConfig._data = orig; }
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.manager.remoteConfig.DEFAULTS;
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.manager.remoteConfig.on('update', (data) => { received = data; });
152
+ const off = ctx.omega.remoteConfig.on('update', (data) => { received = data; });
153
153
  try {
154
- ctx.manager.remoteConfig._emit('update', { ping: true });
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.manager.remoteConfig.on('update', () => { count++; });
164
- ctx.manager.remoteConfig._emit('update', {});
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.manager.remoteConfig._emit('update', {});
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.manager.remoteConfig._data = { status: 'online', x: 1 };
175
- const result = await ctx.manager.ipc.invoke('desktop:remote-config:get');
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.manager.remoteConfig._data = { settings: { versionRequired: '3.1.4' } };
184
- const result = await ctx.manager.ipc.invoke('desktop:remote-config:get', 'settings.versionRequired');
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
  },