@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.
Files changed (345) hide show
  1. package/README.md +53 -48
  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-run.js +4 -1
  26. package/dist/cli.js +3 -3
  27. package/dist/commands/build.js +2 -2
  28. package/dist/commands/cdp/capture.js +2 -2
  29. package/dist/commands/cdp/client.js +1 -1
  30. package/dist/commands/cdp/quit.js +2 -2
  31. package/dist/commands/cdp/relaunch.js +2 -2
  32. package/dist/commands/cdp/theme.js +1 -1
  33. package/dist/commands/cdp.js +1 -1
  34. package/dist/commands/clean.js +4 -5
  35. package/dist/commands/deploy.js +4 -4
  36. package/dist/commands/dev.js +25 -0
  37. package/dist/commands/finalize-release.js +4 -4
  38. package/dist/commands/launch.js +2 -2
  39. package/dist/commands/lib/deploy-precheck.js +3 -3
  40. package/dist/commands/lib/ensure-target.js +18 -23
  41. package/dist/commands/lib/migrate.js +17 -0
  42. package/dist/commands/logs.js +1 -1
  43. package/dist/commands/package.js +2 -2
  44. package/dist/commands/publish.js +2 -2
  45. package/dist/commands/release.js +4 -4
  46. package/dist/commands/runner.js +11 -11
  47. package/dist/commands/sign-windows.js +5 -5
  48. package/dist/commands/test.js +8 -8
  49. package/dist/commands/update.js +7 -6
  50. package/dist/commands/validate-certs.js +4 -4
  51. package/dist/commands/version.js +3 -3
  52. package/dist/defaults/.github/workflows/build.yml +18 -18
  53. package/dist/defaults/_.gitignore +0 -2
  54. package/dist/defaults/_mas/README.md +3 -3
  55. package/dist/defaults/config/certs/README.md +1 -1
  56. package/dist/defaults/config/omega.json5 +43 -43
  57. package/dist/defaults/docs/README.md +3 -3
  58. package/dist/defaults/gulpfile.js +1 -1
  59. package/dist/defaults/hooks/build/post.js +2 -2
  60. package/dist/defaults/hooks/build/pre.js +2 -2
  61. package/dist/defaults/hooks/deploy/pre.js +1 -1
  62. package/dist/defaults/hooks/notarize/post.js +2 -2
  63. package/dist/defaults/hooks/release/post.js +2 -2
  64. package/dist/defaults/hooks/release/pre.js +2 -2
  65. package/dist/defaults/src/assets/js/components/about/index.js +3 -5
  66. package/dist/defaults/src/assets/js/components/main/index.js +3 -5
  67. package/dist/defaults/src/assets/js/components/settings/index.js +3 -5
  68. package/dist/defaults/src/assets/scss/pages/about.scss +1 -1
  69. package/dist/defaults/src/assets/scss/pages/main.scss +1 -1
  70. package/dist/defaults/src/assets/scss/pages/settings.scss +1 -1
  71. package/dist/defaults/src/integrations/context-menu/index.js +13 -13
  72. package/dist/defaults/src/integrations/menu/index.js +8 -8
  73. package/dist/defaults/src/integrations/tray/index.js +12 -12
  74. package/dist/defaults/src/main.js +5 -7
  75. package/dist/defaults/src/preload.js +4 -6
  76. package/dist/defaults/test/README.md +5 -5
  77. package/dist/defaults/test/_init.js +1 -1
  78. package/dist/gulp/main.js +9 -10
  79. package/dist/gulp/tasks/audit.js +11 -14
  80. package/dist/gulp/tasks/build-config.js +8 -8
  81. package/dist/gulp/tasks/bundle.js +16 -16
  82. package/dist/gulp/tasks/defaults.js +3 -3
  83. package/dist/gulp/tasks/distribute.js +2 -2
  84. package/dist/gulp/tasks/html.js +9 -9
  85. package/dist/gulp/tasks/package-quick.js +3 -3
  86. package/dist/gulp/tasks/package.js +3 -3
  87. package/dist/gulp/tasks/release.js +3 -3
  88. package/dist/gulp/tasks/sass.js +6 -6
  89. package/dist/gulp/tasks/serve.js +4 -4
  90. package/dist/hooks/notarize-artifacts.js +1 -1
  91. package/dist/hooks/notarize.js +1 -1
  92. package/dist/index.js +5 -8
  93. package/dist/lib/_environment-mixin.js +50 -0
  94. package/dist/lib/_lifecycle-mixin.js +45 -0
  95. package/dist/lib/analytics.js +33 -35
  96. package/dist/lib/app-state.js +14 -14
  97. package/dist/lib/auth-flow.js +18 -18
  98. package/dist/lib/auth-persistence.js +12 -12
  99. package/dist/lib/auth.js +421 -0
  100. package/dist/lib/auto-updater.js +49 -49
  101. package/dist/lib/context-menu.js +13 -13
  102. package/dist/lib/context.js +19 -19
  103. package/dist/lib/deep-link.js +34 -34
  104. package/dist/lib/fontawesome.js +5 -5
  105. package/dist/lib/ipc.js +4 -4
  106. package/dist/lib/menu.js +25 -25
  107. package/dist/lib/protocol.js +5 -5
  108. package/dist/lib/remote-config.js +22 -22
  109. package/dist/lib/remote-scripts.js +21 -21
  110. package/dist/lib/restart-manager/index.js +29 -29
  111. package/dist/lib/restart-manager/install.js +1 -1
  112. package/dist/lib/restart-manager/protocol.js +1 -1
  113. package/dist/lib/sign-helpers/exec-with-limit.js +1 -1
  114. package/dist/lib/sign-helpers/sign-events.js +1 -1
  115. package/dist/lib/startup.js +18 -13
  116. package/dist/lib/storage.js +10 -10
  117. package/dist/lib/templating.js +16 -16
  118. package/dist/lib/theme.js +10 -10
  119. package/dist/lib/tray.js +27 -27
  120. package/dist/lib/usage.js +11 -11
  121. package/dist/lib/window-manager.js +26 -26
  122. package/dist/main.js +399 -483
  123. package/dist/preload.js +236 -176
  124. package/dist/renderer.js +417 -391
  125. package/dist/test/fixtures/consumer-app/config/omega.json5 +1 -1
  126. package/dist/test/fixtures/consumer-app/src/assets/js/components/main/index.js +8 -11
  127. package/dist/test/fixtures/consumer-app/src/main.js +5 -7
  128. package/dist/test/fixtures/consumer-app/src/preload.js +2 -2
  129. package/dist/test/harness/boot-entry.js +22 -20
  130. package/dist/test/harness/main-entry.js +31 -30
  131. package/dist/test/harness/renderer-entry.js +5 -5
  132. package/dist/test/harness/renderer-preload.js +137 -141
  133. package/dist/test/index.js +10 -10
  134. package/dist/test/runner.js +2 -2
  135. package/dist/test/runners/boot.js +7 -6
  136. package/dist/test/runners/electron.js +3 -2
  137. package/dist/test/runners/render-event.js +2 -2
  138. package/dist/test/suites/boot/consumer-app-boots.test.js +57 -26
  139. package/dist/test/suites/boot/restart-manager.test.js +2 -2
  140. package/dist/test/suites/boot/storage-bundled.test.js +5 -5
  141. package/dist/test/suites/boot/theme.test.js +13 -13
  142. package/dist/test/suites/build/audit.test.js +21 -8
  143. package/dist/test/suites/build/auth-persistence-resolve.test.js +6 -6
  144. package/dist/test/suites/build/boot-fixture.test.js +2 -2
  145. package/dist/test/suites/build/boot-runner-timeout.test.js +6 -5
  146. package/dist/test/suites/build/brand-scss.test.js +1 -1
  147. package/dist/test/suites/build/build-json-bake.test.js +1 -1
  148. package/dist/test/suites/build/build-workflow-jobs.test.js +2 -2
  149. package/dist/test/suites/build/cli.test.js +30 -2
  150. package/dist/test/suites/build/config-schema.test.js +5 -5
  151. package/dist/test/suites/build/defaults-em-dash.test.js +22 -0
  152. package/dist/test/suites/build/defaults-scaffold.test.js +21 -7
  153. package/dist/test/suites/build/deploy-direct.test.js +7 -5
  154. package/dist/test/suites/build/deploy-dispatch.test.js +2 -1
  155. package/dist/test/suites/build/deploy-hook.test.js +7 -5
  156. package/dist/test/suites/build/dev-verb.test.js +67 -0
  157. package/dist/test/suites/build/ensure-target.test.js +13 -5
  158. package/dist/test/suites/build/env-delivery.test.js +2 -2
  159. package/dist/test/suites/build/esm-only-dependency.test.js +2 -2
  160. package/dist/test/suites/build/exports.test.js +9 -8
  161. package/dist/test/suites/build/get-config.test.js +4 -4
  162. package/dist/test/suites/build/manifest-deps.test.js +1 -1
  163. package/dist/test/suites/build/merge-line-files.test.js +7 -7
  164. package/dist/test/suites/build/migrate.test.js +29 -0
  165. package/dist/test/suites/build/omega-shell.test.js +34 -2
  166. package/dist/test/suites/build/omega.test.js +350 -0
  167. package/dist/test/suites/build/project-scripts-deps.test.js +6 -10
  168. package/dist/test/suites/build/renderer-auth-bridge.test.js +211 -78
  169. package/dist/test/suites/build/runner-env-write.test.js +73 -0
  170. package/dist/test/suites/build/runner.test.js +11 -10
  171. package/dist/test/suites/build/sentry.test.js +2 -2
  172. package/dist/test/suites/build/setup-scripts.test.js +27 -0
  173. package/dist/test/suites/build/sign-windows-e2e.test.js +2 -2
  174. package/dist/test/suites/build/templating.test.js +3 -3
  175. package/dist/test/suites/build/test-stealth.test.js +7 -9
  176. package/dist/test/suites/build/url-helpers.test.js +55 -56
  177. package/dist/test/suites/build/validate-config.test.js +15 -4
  178. package/dist/test/suites/build/verb-logs.test.js +20 -0
  179. package/dist/test/suites/build/wave5-pins.test.js +2 -2
  180. package/dist/test/suites/main/analytics.test.js +59 -59
  181. package/dist/test/suites/main/app-state.test.js +66 -66
  182. package/dist/test/suites/main/auth-flow.test.js +41 -41
  183. package/dist/test/suites/main/auth-persistence.test.js +54 -43
  184. package/dist/test/suites/main/{client-bridge.integration.test.js → auth.integration.test.js} +10 -9
  185. package/dist/test/suites/main/auth.test.js +336 -0
  186. package/dist/test/suites/main/auto-updater.test.js +134 -134
  187. package/dist/test/suites/main/boot-sequence.test.js +37 -49
  188. package/dist/test/suites/main/context-menu.test.js +51 -50
  189. package/dist/test/suites/main/context.test.js +25 -25
  190. package/dist/test/suites/main/deep-link.test.js +74 -74
  191. package/dist/test/suites/main/fontawesome.test.js +27 -27
  192. package/dist/test/suites/main/ipc.test.js +35 -35
  193. package/dist/test/suites/main/menu.test.js +101 -100
  194. package/dist/test/suites/main/protocol.test.js +19 -19
  195. package/dist/test/suites/main/remote-config.test.js +63 -63
  196. package/dist/test/suites/main/remote-scripts.test.js +103 -103
  197. package/dist/test/suites/main/request.test.js +71 -0
  198. package/dist/test/suites/main/restart-manager.test.js +33 -33
  199. package/dist/test/suites/main/startup-paths-and-ua.test.js +4 -4
  200. package/dist/test/suites/main/startup.test.js +26 -26
  201. package/dist/test/suites/main/stealth-window.test.js +1 -1
  202. package/dist/test/suites/main/storage.test.js +25 -25
  203. package/dist/test/suites/main/theme.test.js +34 -34
  204. package/dist/test/suites/main/tray.test.js +79 -79
  205. package/dist/test/suites/main/url-helpers.test.js +133 -133
  206. package/dist/test/suites/main/usage.test.js +25 -25
  207. package/dist/test/suites/main/window-bounds.test.js +27 -27
  208. package/dist/test/suites/main/window-manager.test.js +44 -44
  209. package/dist/test/suites/renderer/analytics-bridge.test.js +5 -5
  210. package/dist/test/suites/renderer/cross-context-helpers.test.js +37 -31
  211. package/dist/test/suites/renderer/round-trip.test.js +3 -3
  212. package/dist/test/suites/renderer/tooltips.test.js +15 -15
  213. package/dist/test/suites/renderer/{window-em-surface.test.js → window-desktop-surface.test.js} +28 -8
  214. package/dist/test/utils/extended-mode-warning.js +1 -1
  215. package/dist/utils/boot-harness.js +56 -0
  216. package/dist/utils/build-pipeline.js +4 -4
  217. package/dist/utils/mode-helpers.js +2 -15
  218. package/dist/utils/runner-env.js +13 -28
  219. package/dist/utils/ship-keys.js +3 -3
  220. package/dist/utils/signing-status.js +51 -0
  221. package/dist/utils/test-events.js +7 -0
  222. package/dist/utils/test-stealth.js +6 -6
  223. package/dist/utils/url-helpers.js +52 -42
  224. package/dist/utils/user-agent.js +44 -0
  225. package/dist/vendor/account/engine.js +3 -3
  226. package/dist/vendor/account/index.js +14 -45
  227. package/dist/vendor/account/resolve-account.js +44 -0
  228. package/dist/vendor/account/schema.js +1 -1
  229. package/dist/vendor/account/user.js +99 -0
  230. package/dist/vendor/config/client-config.js +1 -1
  231. package/dist/vendor/config/company.js +46 -14
  232. package/dist/vendor/config/defaults.js +30 -7
  233. package/dist/vendor/config/edit.js +25 -3
  234. package/dist/vendor/config/env-delivery.js +1 -1
  235. package/dist/vendor/config/env-schema.js +3 -6
  236. package/dist/vendor/config/env.js +34 -22
  237. package/dist/vendor/config/environment.js +11 -30
  238. package/dist/vendor/config/index.js +21 -28
  239. package/dist/vendor/config/load.js +16 -9
  240. package/dist/vendor/config/platforms.js +1 -1
  241. package/dist/vendor/config/repo.js +10 -27
  242. package/dist/vendor/config/schema-client.js +64 -0
  243. package/dist/vendor/config/schema-cloud.js +38 -0
  244. package/dist/vendor/config/schema-manager.js +118 -0
  245. package/dist/vendor/config/schema-overrides.js +68 -0
  246. package/dist/vendor/config/schema.js +104 -160
  247. package/dist/vendor/config/site-global.js +2 -3
  248. package/dist/vendor/config/validate.js +97 -78
  249. package/dist/vendor/config/winback.js +1 -1
  250. package/dist/vendor/devkit/actions-secrets.js +1 -1
  251. package/dist/vendor/devkit/agents-md.js +233 -0
  252. package/dist/vendor/devkit/attach-log-file.js +16 -2
  253. package/dist/vendor/devkit/build-json.js +1 -1
  254. package/dist/vendor/devkit/ci-workflows.js +30 -30
  255. package/dist/vendor/devkit/cli-router.js +16 -11
  256. package/dist/vendor/devkit/defaults-engine.js +15 -51
  257. package/dist/vendor/devkit/deploy-snapshot.js +44 -9
  258. package/dist/vendor/devkit/env-lines.js +183 -0
  259. package/dist/vendor/devkit/local.js +64 -10
  260. package/dist/vendor/devkit/lockfile.js +32 -13
  261. package/dist/vendor/devkit/logger.js +7 -2
  262. package/dist/vendor/devkit/merge-line-files.js +219 -177
  263. package/dist/vendor/devkit/omega-bin.js +208 -111
  264. package/dist/vendor/devkit/preludes/docs-sync.js +52 -0
  265. package/dist/vendor/devkit/preludes/index.js +1 -0
  266. package/dist/vendor/devkit/target-picker.js +45 -0
  267. package/dist/vendor/devkit/test/dashed-files.js +37 -0
  268. package/dist/vendor/devkit/test/run-verb-under-tee.js +71 -0
  269. package/dist/vendor/devkit/test/runner-core.js +6 -6
  270. package/dist/vendor/devkit/update.js +15 -15
  271. package/dist/vendor/devkit/verb-scripts.js +40 -0
  272. package/dist/vendor/devkit/verbs.js +170 -0
  273. package/dist/vendor/monitoring/env.js +2 -2
  274. package/dist/vendor/monitoring/index.js +1 -1
  275. package/dist/vendor/monitoring/main.js +1 -1
  276. package/dist/vendor/monitoring/preload.js +1 -1
  277. package/dist/vendor/monitoring/renderer.js +1 -1
  278. package/package.json +19 -26
  279. package/dist/commands/install.js +0 -37
  280. package/dist/defaults/AGENTS.md +0 -110
  281. package/dist/defaults/CLAUDE.md +0 -1
  282. package/dist/lib/client-bridge.js +0 -374
  283. package/dist/lib/logger.js +0 -4
  284. package/dist/test/suites/build/manager.test.js +0 -213
  285. package/dist/test/suites/main/client-bridge.test.js +0 -262
  286. package/dist/vendor/config/env-retired.js +0 -137
  287. package/dist/vendor/config/retired-keys.js +0 -635
  288. package/docs/analytics.md +0 -140
  289. package/docs/app-state.md +0 -92
  290. package/docs/audit.md +0 -69
  291. package/docs/auto-updater.md +0 -243
  292. package/docs/boot-sequence.md +0 -39
  293. package/docs/build-system.md +0 -169
  294. package/docs/cdp-debugging.md +0 -169
  295. package/docs/client-bridge.md +0 -269
  296. package/docs/common-mistakes.md +0 -21
  297. package/docs/config-schema.md +0 -120
  298. package/docs/context-menu.md +0 -112
  299. package/docs/context.md +0 -81
  300. package/docs/css.md +0 -90
  301. package/docs/deep-link.md +0 -186
  302. package/docs/environment-detection.md +0 -112
  303. package/docs/fontawesome.md +0 -107
  304. package/docs/hooks.md +0 -89
  305. package/docs/icons.md +0 -79
  306. package/docs/index.md +0 -317
  307. package/docs/installer-options.md +0 -165
  308. package/docs/ipc.md +0 -61
  309. package/docs/lib-modules.md +0 -53
  310. package/docs/logging.md +0 -229
  311. package/docs/menu.md +0 -160
  312. package/docs/releasing.md +0 -239
  313. package/docs/remote-config.md +0 -118
  314. package/docs/remote-scripts.md +0 -144
  315. package/docs/restart-manager.md +0 -144
  316. package/docs/runner.md +0 -290
  317. package/docs/sentry.md +0 -97
  318. package/docs/shared/agent-docs.md +0 -89
  319. package/docs/shared/analytics.md +0 -612
  320. package/docs/shared/brands.md +0 -57
  321. package/docs/shared/breaking-changes.md +0 -851
  322. package/docs/shared/config.md +0 -1952
  323. package/docs/shared/deploys.md +0 -341
  324. package/docs/shared/icons.md +0 -219
  325. package/docs/shared/local-dev.md +0 -167
  326. package/docs/shared/logging.md +0 -205
  327. package/docs/shared/monitoring.md +0 -167
  328. package/docs/shared/publishing.md +0 -187
  329. package/docs/shared/rulings.md +0 -34
  330. package/docs/shared/testing.md +0 -147
  331. package/docs/shared/theming.md +0 -629
  332. package/docs/shared/translation.md +0 -333
  333. package/docs/shared/updates.md +0 -61
  334. package/docs/signing.md +0 -293
  335. package/docs/startup.md +0 -142
  336. package/docs/storage.md +0 -59
  337. package/docs/templating.md +0 -101
  338. package/docs/test-boot-layer.md +0 -157
  339. package/docs/test-framework.md +0 -362
  340. package/docs/themes.md +0 -149
  341. package/docs/tooltips.md +0 -99
  342. package/docs/tray.md +0 -164
  343. package/docs/usage.md +0 -58
  344. package/docs/verts.md +0 -62
  345. package/docs/windows.md +0 -149
@@ -16,12 +16,12 @@ module.exports = defineCases({
16
16
  description: 'window-manager bounds persistence (main)',
17
17
  cleanup: (ctx) => {
18
18
  // Drop everything we wrote so reruns are clean.
19
- ctx.manager.storage.delete('windows.settings.bounds');
20
- ctx.manager.storage.delete('windows.about.bounds');
21
- ctx.manager.storage.delete('windows.bounds-test.bounds');
19
+ ctx.omega.storage.delete('windows.settings.bounds');
20
+ ctx.omega.storage.delete('windows.about.bounds');
21
+ ctx.omega.storage.delete('windows.bounds-test.bounds');
22
22
  // Make sure no test-leftover windows remain.
23
23
  ['settings', 'about', 'bounds-test'].forEach((name) => {
24
- const w = ctx.manager.windows.get(name);
24
+ const w = ctx.omega.windows.get(name);
25
25
  if (w) {
26
26
  w._emForceClose = true;
27
27
  w.close();
@@ -32,33 +32,33 @@ module.exports = defineCases({
32
32
  {
33
33
  name: '_loadBounds returns null when nothing is saved',
34
34
  run: (ctx) => {
35
- ctx.manager.storage.delete('windows.bounds-test.bounds');
36
- ctx.expect(ctx.manager.windows._loadBounds('bounds-test', ctx.manager)).toBeNull();
35
+ ctx.omega.storage.delete('windows.bounds-test.bounds');
36
+ ctx.expect(ctx.omega.windows._loadBounds('bounds-test', ctx.omega)).toBeNull();
37
37
  },
38
38
  },
39
39
  {
40
40
  name: '_loadBounds returns the saved object',
41
41
  run: (ctx) => {
42
42
  const saved = { x: 50, y: 60, width: 800, height: 600 };
43
- ctx.manager.storage.set('windows.bounds-test.bounds', saved);
44
- ctx.expect(ctx.manager.windows._loadBounds('bounds-test', ctx.manager)).toEqual(saved);
43
+ ctx.omega.storage.set('windows.bounds-test.bounds', saved);
44
+ ctx.expect(ctx.omega.windows._loadBounds('bounds-test', ctx.omega)).toEqual(saved);
45
45
  },
46
46
  },
47
47
  {
48
48
  name: '_loadBounds rejects malformed entries',
49
49
  run: (ctx) => {
50
- ctx.manager.storage.set('windows.bounds-test.bounds', { width: 'oops' });
51
- ctx.expect(ctx.manager.windows._loadBounds('bounds-test', ctx.manager)).toBeNull();
50
+ ctx.omega.storage.set('windows.bounds-test.bounds', { width: 'oops' });
51
+ ctx.expect(ctx.omega.windows._loadBounds('bounds-test', ctx.omega)).toBeNull();
52
52
 
53
- ctx.manager.storage.set('windows.bounds-test.bounds', { width: 50, height: 50 }); // below sanity floor
54
- ctx.expect(ctx.manager.windows._loadBounds('bounds-test', ctx.manager)).toBeNull();
53
+ ctx.omega.storage.set('windows.bounds-test.bounds', { width: 50, height: 50 }); // below sanity floor
54
+ ctx.expect(ctx.omega.windows._loadBounds('bounds-test', ctx.omega)).toBeNull();
55
55
  },
56
56
  },
57
57
  {
58
58
  name: '_clampToDisplays drops x/y when off-screen, keeps width/height',
59
59
  run: (ctx) => {
60
60
  // Way off-screen (huge negative coordinates).
61
- const out = ctx.manager.windows._clampToDisplays({
61
+ const out = ctx.omega.windows._clampToDisplays({
62
62
  x: -99999, y: -99999, width: 800, height: 600,
63
63
  });
64
64
  ctx.expect(out.x).toBeUndefined();
@@ -71,7 +71,7 @@ module.exports = defineCases({
71
71
  name: '_clampToDisplays keeps x/y when on-screen',
72
72
  run: (ctx) => {
73
73
  // Use a primary-display point we know is on-screen: (100, 100).
74
- const out = ctx.manager.windows._clampToDisplays({
74
+ const out = ctx.omega.windows._clampToDisplays({
75
75
  x: 100, y: 100, width: 800, height: 600,
76
76
  });
77
77
  ctx.expect(out.x).toBe(100);
@@ -83,9 +83,9 @@ module.exports = defineCases({
83
83
  run: async (ctx) => {
84
84
  // Pre-seed storage with bounds for the about window.
85
85
  const wanted = { x: 120, y: 140, width: 720, height: 540 };
86
- ctx.manager.storage.set('windows.about.bounds', wanted);
86
+ ctx.omega.storage.set('windows.about.bounds', wanted);
87
87
 
88
- const win = await ctx.manager.windows.createNamed('about');
88
+ const win = await ctx.omega.windows.createNamed('about');
89
89
  ctx.state.win = win;
90
90
  const got = win.getBounds();
91
91
  ctx.expect(got.width).toBe(720);
@@ -103,9 +103,9 @@ module.exports = defineCases({
103
103
 
104
104
  // Move + resize, then trigger save.
105
105
  win.setBounds({ x: 200, y: 220, width: 640, height: 480 });
106
- ctx.manager.windows._saveBoundsNow('about');
106
+ ctx.omega.windows._saveBoundsNow('about');
107
107
 
108
- const saved = ctx.manager.storage.get('windows.about.bounds');
108
+ const saved = ctx.omega.storage.get('windows.about.bounds');
109
109
  ctx.expect(saved).toBeTruthy();
110
110
  ctx.expect(saved.width).toBe(640);
111
111
  ctx.expect(saved.height).toBe(480);
@@ -123,10 +123,10 @@ module.exports = defineCases({
123
123
  if (win.isDestroyed()) return r();
124
124
  win.once('closed', r);
125
125
  });
126
- ctx.manager.windows.close('about');
126
+ ctx.omega.windows.close('about');
127
127
  await closedPromise;
128
128
 
129
- const saved = ctx.manager.storage.get('windows.about.bounds');
129
+ const saved = ctx.omega.storage.get('windows.about.bounds');
130
130
  ctx.expect(saved.width).toBe(555);
131
131
  ctx.expect(saved.height).toBe(444);
132
132
  },
@@ -135,13 +135,13 @@ module.exports = defineCases({
135
135
  name: 'persistBounds: false → no auto-save on resize, no restore on create',
136
136
  run: async (ctx) => {
137
137
  // Pre-seed bounds that SHOULD be ignored when persistBounds: false.
138
- ctx.manager.storage.set('windows.about.bounds', { x: 50, y: 60, width: 999, height: 888 });
138
+ ctx.omega.storage.set('windows.about.bounds', { x: 50, y: 60, width: 999, height: 888 });
139
139
 
140
140
  // The `windows` config block is no longer required — pass persistBounds via the
141
141
  // call-site overrides arg instead. (The merge order is defaults < JSON config <
142
142
  // overrides, so this works whether or not config.windows.about is set.)
143
143
  try {
144
- const win = await ctx.manager.windows.createNamed('about', undefined, { persistBounds: false });
144
+ const win = await ctx.omega.windows.createNamed('about', undefined, { persistBounds: false });
145
145
 
146
146
  // Saved 999x888 must NOT have been restored — should fall back to config defaults.
147
147
  const got = win.getBounds();
@@ -149,19 +149,19 @@ module.exports = defineCases({
149
149
  ctx.expect(got.height).not.toBe(888);
150
150
 
151
151
  // Now resize and confirm no auto-save fires past the debounce window.
152
- ctx.manager.storage.delete('windows.about.bounds');
152
+ ctx.omega.storage.delete('windows.about.bounds');
153
153
  win.setBounds({ x: 30, y: 30, width: 700, height: 500 });
154
154
  await new Promise((r) => setTimeout(r, 350));
155
- ctx.expect(ctx.manager.storage.get('windows.about.bounds')).toBeUndefined();
155
+ ctx.expect(ctx.omega.storage.get('windows.about.bounds')).toBeUndefined();
156
156
 
157
157
  const closedPromise = new Promise((r) => win.once('closed', r));
158
- ctx.manager.windows.close('about');
158
+ ctx.omega.windows.close('about');
159
159
  await closedPromise;
160
160
 
161
161
  // close also must NOT have written under persistBounds:false.
162
- ctx.expect(ctx.manager.storage.get('windows.about.bounds')).toBeUndefined();
162
+ ctx.expect(ctx.omega.storage.get('windows.about.bounds')).toBeUndefined();
163
163
  } finally {
164
- ctx.manager.storage.delete('windows.about.bounds');
164
+ ctx.omega.storage.delete('windows.about.bounds');
165
165
  }
166
166
  },
167
167
  },
@@ -2,7 +2,7 @@
2
2
  //
3
3
  // Note: createNamed requires src/views/<view>/index.html to exist on disk in the test cwd.
4
4
  // The harness uses @omega.js/desktop's defaults config but runs from @omega.js/desktop's repo root, where there are no built views.
5
- // So we test the API surface and dedup behavior using the manager's electron handle but skip
5
+ // So we test the API surface and dedup behavior using the omega instance's electron handle but skip
6
6
  // actual file-loading in createNamed (it logs an error and returns the BrowserWindow anyway,
7
7
  // which is enough to verify the registry behavior).
8
8
 
@@ -16,21 +16,21 @@ module.exports = defineCases({
16
16
  {
17
17
  name: 'initialize was called during boot',
18
18
  run: (ctx) => {
19
- ctx.expect(ctx.manager.windows._initialized).toBe(true);
19
+ ctx.expect(ctx.omega.windows._initialized).toBe(true);
20
20
  },
21
21
  },
22
22
  {
23
23
  name: 'list returns empty array when no windows are open',
24
24
  run: (ctx) => {
25
25
  // skipWindowCreation: true means no window was auto-created.
26
- ctx.expect(Array.isArray(ctx.manager.windows.list())).toBe(true);
27
- ctx.expect(ctx.manager.windows.list().length).toBe(0);
26
+ ctx.expect(Array.isArray(ctx.omega.windows.list())).toBe(true);
27
+ ctx.expect(ctx.omega.windows.list().length).toBe(0);
28
28
  },
29
29
  },
30
30
  {
31
31
  name: 'get returns null for unknown name',
32
32
  run: (ctx) => {
33
- ctx.expect(ctx.manager.windows.get('nonexistent')).toBeNull();
33
+ ctx.expect(ctx.omega.windows.get('nonexistent')).toBeNull();
34
34
  },
35
35
  },
36
36
  {
@@ -39,25 +39,25 @@ module.exports = defineCases({
39
39
  // We need a view file. Use @omega.js/desktop's own defaults dir as the cwd-equivalent by setting a custom html path.
40
40
  // For simplicity, just verify createNamed creates a BrowserWindow even when the html file is missing
41
41
  // (loadFile catches the error; the window object still exists in the registry).
42
- const win = await ctx.manager.windows.createNamed('about');
42
+ const win = await ctx.omega.windows.createNamed('about');
43
43
  ctx.state.win = win;
44
44
  ctx.expect(win).toBeTruthy();
45
- ctx.expect(ctx.manager.windows.get('about')).toBe(win);
46
- ctx.expect(ctx.manager.windows.list()).toContain('about');
45
+ ctx.expect(ctx.omega.windows.get('about')).toBe(win);
46
+ ctx.expect(ctx.omega.windows.list()).toContain('about');
47
47
  },
48
48
  },
49
49
  {
50
50
  name: 'createNamed dedups — second call returns the same window',
51
51
  run: async (ctx) => {
52
- const again = await ctx.manager.windows.createNamed('about');
52
+ const again = await ctx.omega.windows.createNamed('about');
53
53
  ctx.expect(again).toBe(ctx.state.win);
54
54
  },
55
55
  },
56
56
  {
57
57
  name: 'hide / show do not throw',
58
58
  run: (ctx) => {
59
- ctx.manager.windows.hide('about');
60
- ctx.manager.windows.show('about');
59
+ ctx.omega.windows.hide('about');
60
+ ctx.omega.windows.show('about');
61
61
  // No assertion beyond "didn't throw" — visibility is OS-side state we can't reliably read.
62
62
  },
63
63
  },
@@ -66,13 +66,13 @@ module.exports = defineCases({
66
66
  // without a startup block (schema: optional) threw inside the hide handler.
67
67
  name: '_maybeRehideDock survives a config without a startup block',
68
68
  run: (ctx) => {
69
- const orig = ctx.manager.config.startup;
70
- delete ctx.manager.config.startup;
69
+ const orig = ctx.omega.config.startup;
70
+ delete ctx.omega.config.startup;
71
71
  try {
72
- ctx.manager.windows._maybeRehideDock(); // must not throw
73
- ctx.expect(ctx.manager.startup.getMode()).toBe('normal');
72
+ ctx.omega.windows._maybeRehideDock(); // must not throw
73
+ ctx.expect(ctx.omega.startup.getMode()).toBe('normal');
74
74
  } finally {
75
- if (orig !== undefined) ctx.manager.config.startup = orig;
75
+ if (orig !== undefined) ctx.omega.config.startup = orig;
76
76
  }
77
77
  },
78
78
  },
@@ -84,7 +84,7 @@ module.exports = defineCases({
84
84
  if (process.platform !== 'darwin') {
85
85
  return ctx.skip('macOS-only — accessory activation policy / dock');
86
86
  }
87
- // Both the harness entry (at require time) and Manager.initialize (step 1a)
87
+ // Both the harness entry (at require time) and omega.initialize() (step 1a)
88
88
  // hide the dock under the stealth predicate, so the launched test app never
89
89
  // activates and never steals keyboard focus.
90
90
  const { app } = require('electron');
@@ -96,10 +96,10 @@ module.exports = defineCases({
96
96
  run: (ctx) => {
97
97
  const { BrowserWindow } = require('electron');
98
98
 
99
- ctx.expect(ctx.manager.windows._isStealth()).toBe(true);
99
+ ctx.expect(ctx.omega.windows._isStealth()).toBe(true);
100
100
 
101
101
  const win = new BrowserWindow({ show: false, width: 120, height: 80 });
102
- ctx.manager.windows._surface(win, 'stealth-probe');
102
+ ctx.omega.windows._surface(win, 'stealth-probe');
103
103
 
104
104
  // Shown (rendering/timers run like a visible window — NOT hide/minimize,
105
105
  // which would occlusion-throttle) but fully transparent and inactive.
@@ -117,7 +117,7 @@ module.exports = defineCases({
117
117
 
118
118
  process.env.OMEGA_TEST_SHOW = '1';
119
119
  try {
120
- ctx.expect(ctx.manager.windows._isStealth()).toBe(false);
120
+ ctx.expect(ctx.omega.windows._isStealth()).toBe(false);
121
121
 
122
122
  // This probe exercises the real non-stealth _surface branch WITHOUT
123
123
  // stealing the developer's keyboard focus mid-run. Two activation
@@ -133,7 +133,7 @@ module.exports = defineCases({
133
133
  require('electron').app.setActivationPolicy('regular');
134
134
  }
135
135
  const win = new BrowserWindow({ show: false, width: 120, height: 80, x: 0, y: 0, focusable: false });
136
- ctx.manager.windows._surface(win, 'visible-probe');
136
+ ctx.omega.windows._surface(win, 'visible-probe');
137
137
 
138
138
  ctx.expect(win.isVisible()).toBe(true);
139
139
  ctx.expect(win.getOpacity()).toBe(1);
@@ -148,7 +148,7 @@ module.exports = defineCases({
148
148
  }
149
149
 
150
150
  // Flag removed → stealth is back on for the rest of the run.
151
- ctx.expect(ctx.manager.windows._isStealth()).toBe(true);
151
+ ctx.expect(ctx.omega.windows._isStealth()).toBe(true);
152
152
  },
153
153
  },
154
154
  {
@@ -158,7 +158,7 @@ module.exports = defineCases({
158
158
  return; // trafficLightPosition is a macOS-only BrowserWindow option
159
159
  }
160
160
 
161
- const win = await ctx.manager.windows.create('tlp-probe', { trafficLightPosition: { x: 26, y: 24 } });
161
+ const win = await ctx.omega.windows.create('tlp-probe', { trafficLightPosition: { x: 26, y: 24 } });
162
162
  ctx.expect(win).toBeTruthy();
163
163
 
164
164
  const pos = win.getWindowButtonPosition();
@@ -170,7 +170,7 @@ module.exports = defineCases({
170
170
  {
171
171
  name: 'close removes the window from the registry',
172
172
  run: async (ctx) => {
173
- const win = ctx.manager.windows.get('about');
173
+ const win = ctx.omega.windows.get('about');
174
174
  ctx.expect(win).toBeTruthy();
175
175
 
176
176
  // close fires asynchronously — wait for the 'closed' event rather than guessing a timeout.
@@ -179,18 +179,18 @@ module.exports = defineCases({
179
179
  win.once('closed', resolve);
180
180
  });
181
181
 
182
- ctx.manager.windows.close('about');
182
+ ctx.omega.windows.close('about');
183
183
  await closedPromise;
184
184
 
185
- ctx.expect(ctx.manager.windows.get('about')).toBeNull();
185
+ ctx.expect(ctx.omega.windows.get('about')).toBeNull();
186
186
  },
187
187
  },
188
188
  {
189
- name: 'manager.quit + manager.relaunch exposed and set _allowQuit',
189
+ name: 'omega.quit + omega.relaunch exposed and set _allowQuit',
190
190
  run: (ctx) => {
191
- ctx.expect(typeof ctx.manager.quit).toBe('function');
192
- ctx.expect(typeof ctx.manager.relaunch).toBe('function');
193
- ctx.manager._allowQuit = false;
191
+ ctx.expect(typeof ctx.omega.quit).toBe('function');
192
+ ctx.expect(typeof ctx.omega.relaunch).toBe('function');
193
+ ctx.omega._allowQuit = false;
194
194
 
195
195
  // Calling quit({force:true}) should set _allowQuit BEFORE invoking app.quit().
196
196
  // We can't actually let app.quit() run mid-test (it'd kill the harness), so we
@@ -199,33 +199,33 @@ module.exports = defineCases({
199
199
  const origQuit = electron.app.quit;
200
200
  electron.app.quit = () => {};
201
201
  try {
202
- ctx.manager.quit({ force: true });
203
- ctx.expect(ctx.manager._allowQuit).toBe(true);
202
+ ctx.omega.quit({ force: true });
203
+ ctx.expect(ctx.omega._allowQuit).toBe(true);
204
204
  } finally {
205
205
  electron.app.quit = origQuit;
206
- ctx.manager._allowQuit = false;
206
+ ctx.omega._allowQuit = false;
207
207
  }
208
208
  },
209
209
  },
210
210
  {
211
- name: 'auto-updater installNow flips manager._allowQuit',
211
+ name: 'auto-updater installNow flips omega._allowQuit',
212
212
  run: (ctx) => {
213
- ctx.manager._allowQuit = false;
213
+ ctx.omega._allowQuit = false;
214
214
 
215
215
  // Force the autoUpdater state to "downloaded" + stub the underlying library
216
216
  // so installNow doesn't actually quit the harness.
217
- const prevState = ctx.manager.autoUpdater._state;
218
- const prevLib = ctx.manager.autoUpdater._library;
219
- ctx.manager.autoUpdater._state = { code: 'downloaded', version: '9.9.9' };
220
- ctx.manager.autoUpdater._library = { quitAndInstall: () => {} };
217
+ const prevState = ctx.omega.autoUpdater._state;
218
+ const prevLib = ctx.omega.autoUpdater._library;
219
+ ctx.omega.autoUpdater._state = { code: 'downloaded', version: '9.9.9' };
220
+ ctx.omega.autoUpdater._library = { quitAndInstall: () => {} };
221
221
 
222
222
  try {
223
- ctx.manager.autoUpdater.installNow();
224
- ctx.expect(ctx.manager._allowQuit).toBe(true);
223
+ ctx.omega.autoUpdater.installNow();
224
+ ctx.expect(ctx.omega._allowQuit).toBe(true);
225
225
  } finally {
226
- ctx.manager.autoUpdater._state = prevState;
227
- ctx.manager.autoUpdater._library = prevLib;
228
- ctx.manager._allowQuit = false;
226
+ ctx.omega.autoUpdater._state = prevState;
227
+ ctx.omega.autoUpdater._library = prevLib;
228
+ ctx.omega._allowQuit = false;
229
229
  }
230
230
  },
231
231
  },
@@ -38,15 +38,15 @@ module.exports = defineCases({
38
38
  },
39
39
  },
40
40
  {
41
- // #411: a renderer's own `omega.analytics().event(...)` used to no-op
41
+ // #411: a renderer's own `omega.analytics.event(...)` used to no-op
42
42
  // silently — the embedded client had no way to deliver. It now forwards
43
43
  // over this bridge, and main's sender is the one that fires it.
44
- name: 'a renderer-originated omega.analytics() event reaches main\'s sender exactly once, with main\'s identity',
44
+ name: 'a renderer-originated omega.analytics event reaches main\'s sender exactly once, with main\'s identity',
45
45
  run: async (ctx) => {
46
46
  const read = () => window.desktop.ipc.invoke('desktop:__test:read-analytics-sends');
47
47
  const baseline = (await read()).length;
48
48
 
49
- window.__emTestClientAnalytics.event('vert_click', { vert_id: 'pin-411' });
49
+ window.__omegaTestClientAnalytics.event('vert_click', { vert_id: 'pin-411' });
50
50
 
51
51
  // The forward is fire-and-forget IPC — poll until main records it.
52
52
  let sends = [];
@@ -54,7 +54,7 @@ module.exports = defineCases({
54
54
  while (sends.length <= baseline) {
55
55
  // The client's own state says WHY when this fails: an unbridged one
56
56
  // carries a client id of its own — the identity fork (#411).
57
- if (Date.now() - t0 > 3000) throw new Error(`timed out waiting for main to record the forwarded event — client state ${JSON.stringify(window.__emTestClientAnalytics.state())}`);
57
+ if (Date.now() - t0 > 3000) throw new Error(`timed out waiting for main to record the forwarded event, client state ${JSON.stringify(window.__omegaTestClientAnalytics.state())}`);
58
58
  await new Promise((r) => setTimeout(r, 25));
59
59
  sends = await read();
60
60
  }
@@ -79,7 +79,7 @@ module.exports = defineCases({
79
79
  {
80
80
  name: 'the bridged renderer holds no sender of its own — no secret, no second device id',
81
81
  run: (ctx) => {
82
- const state = window.__emTestClientAnalytics.state();
82
+ const state = window.__omegaTestClientAnalytics.state();
83
83
  ctx.expect(state.initialized).toBe(true);
84
84
  ctx.expect(state.bridged).toBe(true);
85
85
  ctx.expect(state.secret).toBe(null);
@@ -1,12 +1,13 @@
1
- // Renderer-layer tests for the cross-context helpers (mode-helpers + url-helpers).
2
- // Verifies that `manager.isDevelopment / isProduction / isTesting / getVersion`
3
- // AND `manager.getEnvironment / getApiUrl / getFunctionsUrl / getWebsiteUrl` work
1
+ // Renderer-layer tests for the cross-context helpers on the renderer `omega`
2
+ // instance: `isDevelopment / isProduction / isTesting / getEnvironment` and
3
+ // `getApiUrl / getFunctionsUrl` (the @omega.js/client base class's own), plus
4
+ // desktop's `getVersion / getWebsiteUrl` (utils/mode-helpers + utils/url-helpers),
4
5
  // end-to-end inside a real renderer process, not just in main.
5
6
  //
6
- // The renderer-preload (test/harness/renderer-preload.js) instantiates a renderer
7
- // Manager and exposes its helpers via contextBridge as `window.__emTestManager`.
7
+ // The renderer-preload (test/harness/renderer-preload.js) builds the real renderer
8
+ // instance and exposes its helpers via contextBridge as `window.__omegaTestInstance`.
8
9
  // Test bodies are stringified + reconstructed via `new Function('ctx', body)` so
9
- // they only have access to `ctx` and `window` — no closures over module scope.
10
+ // they only have access to `ctx` and `window`, no closures over module scope.
10
11
 
11
12
  const defineCases = require('../../../vendor/devkit/test/define-cases.js');
12
13
 
@@ -16,16 +17,19 @@ module.exports = defineCases({
16
17
  description: 'cross-context helpers (renderer)',
17
18
  tests: [
18
19
  {
19
- name: '__emTestManager is exposed by the test preload',
20
+ name: '__omegaTestInstance is exposed by the test preload, over a built instance',
20
21
  run: (ctx) => {
21
- ctx.expect(typeof window.__emTestManager).toBe('object');
22
- ctx.expect(window.__emTestManager).toBeTruthy();
22
+ ctx.expect(typeof window.__omegaTestInstance).toBe('object');
23
+ ctx.expect(window.__omegaTestInstance).toBeTruthy();
24
+ if (!window.__omegaTestInstance.built()) {
25
+ throw new Error(`the renderer instance did not build: ${window.__omegaTestInstance.error()}`);
26
+ }
23
27
  },
24
28
  },
25
29
  {
26
30
  name: 'isTesting() returns true (this lane named OMEGA_ENVIRONMENT=testing)',
27
31
  run: (ctx) => {
28
- ctx.expect(window.__emTestManager.isTesting()).toBe(true);
32
+ ctx.expect(window.__omegaTestInstance.isTesting()).toBe(true);
29
33
  },
30
34
  },
31
35
  {
@@ -34,7 +38,7 @@ module.exports = defineCases({
34
38
  // Nothing here reads app.isPackaged or NODE_ENV any more (#817): the
35
39
  // preload has a process, so the lane's OMEGA_ENVIRONMENT answers, and a
36
40
  // real renderer bundle answers from the baked config.environment.
37
- const v = window.__emTestManager.isDevelopment();
41
+ const v = window.__omegaTestInstance.isDevelopment();
38
42
  ctx.expect(typeof v).toBe('boolean');
39
43
  ctx.expect(v).toBe(false);
40
44
  },
@@ -42,9 +46,9 @@ module.exports = defineCases({
42
46
  {
43
47
  name: 'environments are mutually exclusive — exactly one of dev/testing/prod is true',
44
48
  run: (ctx) => {
45
- const dev = window.__emTestManager.isDevelopment();
46
- const test = window.__emTestManager.isTesting();
47
- const prod = window.__emTestManager.isProduction();
49
+ const dev = window.__omegaTestInstance.isDevelopment();
50
+ const test = window.__omegaTestInstance.isTesting();
51
+ const prod = window.__omegaTestInstance.isProduction();
48
52
  // This lane named testing; dev and prod are both false.
49
53
  ctx.expect(test).toBe(true);
50
54
  ctx.expect(dev).toBe(false);
@@ -55,7 +59,7 @@ module.exports = defineCases({
55
59
  {
56
60
  name: 'getVersion() returns a string or null without throwing',
57
61
  run: (ctx) => {
58
- const v = window.__emTestManager.getVersion();
62
+ const v = window.__omegaTestInstance.getVersion();
59
63
  // In renderer, `electron.app` is unavailable and process.cwd()/package.json
60
64
  // resolves to whatever the test harness was launched from — could be either
61
65
  // a string or null. Assert just the shape.
@@ -69,32 +73,34 @@ module.exports = defineCases({
69
73
  // process to read it from, so it wins over whatever the artifact was
70
74
  // baked as (#817). A real renderer bundle has no process and takes the
71
75
  // baked word, which is the other half of the same one-input rule.
72
- window.__emTestManager.setConfig('environment', 'production');
73
- ctx.expect(window.__emTestManager.getEnvironment()).toBe('testing');
74
- window.__emTestManager.setConfig('environment', 'development');
75
- ctx.expect(window.__emTestManager.getEnvironment()).toBe('testing');
76
+ window.__omegaTestInstance.setConfig('environment', 'production');
77
+ ctx.expect(window.__omegaTestInstance.getEnvironment()).toBe('testing');
78
+ window.__omegaTestInstance.setConfig('environment', 'development');
79
+ ctx.expect(window.__omegaTestInstance.getEnvironment()).toBe('testing');
76
80
  // Reset.
77
- window.__emTestManager.setConfig('environment', 'production');
81
+ window.__omegaTestInstance.setConfig('environment', 'production');
78
82
  },
79
83
  },
80
84
  {
81
85
  name: 'getFunctionsUrl: dev → localhost:5001/<projectId>/us-central1',
82
86
  run: (ctx) => {
83
- ctx.expect(window.__emTestManager.getFunctionsUrl('development'))
87
+ ctx.expect(window.__omegaTestInstance.getFunctionsUrl('development'))
84
88
  .toBe('http://localhost:5001/demo-app/us-central1');
85
89
  },
86
90
  },
87
91
  {
88
92
  name: 'getFunctionsUrl: prod → us-central1-<projectId>.cloudfunctions.net',
89
93
  run: (ctx) => {
90
- ctx.expect(window.__emTestManager.getFunctionsUrl('production'))
94
+ ctx.expect(window.__omegaTestInstance.getFunctionsUrl('production'))
91
95
  .toBe('https://us-central1-demo-app.cloudfunctions.net');
92
96
  },
93
97
  },
94
98
  {
95
- name: 'getApiUrl: dev → http://localhost:5002',
99
+ // The client's own getApiUrl, the one `omega.request()` calls: a baked
100
+ // `hosting` port with no `https` one is the emulator on 127.0.0.1
101
+ name: 'getApiUrl: dev → http://127.0.0.1:5002 (the client base class answers)',
96
102
  run: (ctx) => {
97
- ctx.expect(window.__emTestManager.getApiUrl('development')).toBe('http://localhost:5002');
103
+ ctx.expect(window.__omegaTestInstance.getApiUrl('development')).toBe('http://127.0.0.1:5002');
98
104
  },
99
105
  },
100
106
  {
@@ -102,20 +108,20 @@ module.exports = defineCases({
102
108
  // authDomain — that value is an auth-only concern.
103
109
  name: 'getApiUrl: prod → api.<brand.url host>',
104
110
  run: (ctx) => {
105
- ctx.expect(window.__emTestManager.getApiUrl('production'))
111
+ ctx.expect(window.__omegaTestInstance.getApiUrl('production'))
106
112
  .toBe('https://api.example.com');
107
113
  },
108
114
  },
109
115
  {
110
116
  name: 'getWebsiteUrl: dev → https://localhost:4000, from the baked classic map',
111
117
  run: (ctx) => {
112
- ctx.expect(window.__emTestManager.getWebsiteUrl('development')).toBe('https://localhost:4000');
118
+ ctx.expect(window.__omegaTestInstance.getWebsiteUrl('development')).toBe('https://localhost:4000');
113
119
  },
114
120
  },
115
121
  {
116
122
  name: 'getWebsiteUrl: prod → config.brand.url',
117
123
  run: (ctx) => {
118
- ctx.expect(window.__emTestManager.getWebsiteUrl('production')).toBe('https://example.com');
124
+ ctx.expect(window.__omegaTestInstance.getWebsiteUrl('production')).toBe('https://example.com');
119
125
  },
120
126
  },
121
127
  {
@@ -123,11 +129,11 @@ module.exports = defineCases({
123
129
  run: (ctx) => {
124
130
  // This lane is testing, so the no-arg form resolves LOCAL regardless of
125
131
  // what the artifact was baked as: that's the safety guarantee.
126
- window.__emTestManager.setConfig('environment', 'production');
127
- ctx.expect(window.__emTestManager.getWebsiteUrl()).toBe('https://localhost:4000');
132
+ window.__omegaTestInstance.setConfig('environment', 'production');
133
+ ctx.expect(window.__omegaTestInstance.getWebsiteUrl()).toBe('https://localhost:4000');
128
134
  // An explicit env arg bypasses the current environment and pins the mapping.
129
- ctx.expect(window.__emTestManager.getWebsiteUrl('production')).toBe('https://example.com');
130
- ctx.expect(window.__emTestManager.getWebsiteUrl('development')).toBe('https://localhost:4000');
135
+ ctx.expect(window.__omegaTestInstance.getWebsiteUrl('production')).toBe('https://example.com');
136
+ ctx.expect(window.__omegaTestInstance.getWebsiteUrl('development')).toBe('https://localhost:4000');
131
137
  },
132
138
  },
133
139
  ],
@@ -37,7 +37,7 @@ module.exports = defineCases({
37
37
  {
38
38
  name: 'window.desktop.logger.log forwards to main where it can be read back',
39
39
  run: async (ctx) => {
40
- const marker = `__em_test_log_${Date.now()}_${Math.random()}`;
40
+ const marker = `__omega_test_log_${Date.now()}_${Math.random()}`;
41
41
  window.desktop.logger.log(marker, { extra: 'payload' });
42
42
  // Give main a moment to receive (IPC send is async, no callback).
43
43
  await new Promise((r) => setTimeout(r, 50));
@@ -53,7 +53,7 @@ module.exports = defineCases({
53
53
  {
54
54
  name: 'window.desktop.logger.warn also forwards',
55
55
  run: async (ctx) => {
56
- const marker = `__em_test_warn_${Date.now()}_${Math.random()}`;
56
+ const marker = `__omega_test_warn_${Date.now()}_${Math.random()}`;
57
57
  window.desktop.logger.warn(marker);
58
58
  await new Promise((r) => setTimeout(r, 50));
59
59
  const last = await window.desktop.ipc.invoke('desktop:__test:read-last-log');
@@ -65,7 +65,7 @@ module.exports = defineCases({
65
65
  name: 'window.desktop.storage.set → window.desktop.storage.onChange fires across IPC',
66
66
  run: async (ctx) => {
67
67
  // Subscribe FIRST so we don't miss the broadcast.
68
- const key = `__em_renderer_change_${Date.now()}`;
68
+ const key = `__omega_renderer_change_${Date.now()}`;
69
69
  let received = null;
70
70
  const off = window.desktop.storage.onChange(key, (payload) => { received = payload; });
71
71
  try {