@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
@@ -2,6 +2,13 @@
2
2
 
3
3
  const defineCases = require('../../../vendor/devkit/test/define-cases.js');
4
4
 
5
+ // Every library src/main.js assigns, by its property name
6
+ const LIBS = [
7
+ 'storage', 'theme', 'fontawesome', 'sentry', 'protocol', 'deepLink', 'authFlow', 'appState',
8
+ 'ipc', 'autoUpdater', 'tray', 'menu', 'contextMenu', 'startup', 'auth', 'windows', 'context',
9
+ 'usage', 'remoteConfig', 'remoteScripts', 'analytics', 'restartManager',
10
+ ];
11
+
5
12
  module.exports = defineCases({
6
13
  type: 'group',
7
14
  layer: 'main',
@@ -10,67 +17,48 @@ module.exports = defineCases({
10
17
  {
11
18
  name: 'config was loaded',
12
19
  run: (ctx) => {
13
- ctx.expect(ctx.manager.config).toBeTruthy();
14
- ctx.expect(ctx.manager.config.brand.id).toBeTruthy();
20
+ ctx.expect(ctx.omega.config).toBeTruthy();
21
+ ctx.expect(ctx.omega.config.brand.id).toBeTruthy();
15
22
  },
16
23
  },
17
24
  {
18
- name: 'storage initialized',
19
- run: (ctx) => ctx.expect(ctx.manager.storage._initialized).toBe(true),
20
- },
21
- {
22
- name: 'sentry initialized',
23
- run: (ctx) => ctx.expect(ctx.manager.sentry._initialized).toBe(true),
24
- },
25
- {
26
- name: 'protocol initialized',
27
- run: (ctx) => ctx.expect(ctx.manager.protocol._initialized).toBe(true),
28
- },
29
- {
30
- name: 'deep-link initialized',
31
- run: (ctx) => ctx.expect(ctx.manager.deepLink._initialized).toBe(true),
32
- },
33
- {
34
- name: 'app-state initialized',
35
- run: (ctx) => ctx.expect(ctx.manager.appState._initialized).toBe(true),
36
- },
37
- {
38
- name: 'ipc initialized',
39
- run: (ctx) => ctx.expect(ctx.manager.ipc._initialized).toBe(true),
40
- },
41
- {
42
- name: 'auto-updater initialized',
43
- run: (ctx) => ctx.expect(ctx.manager.autoUpdater._initialized).toBe(true),
44
- },
45
- {
46
- name: 'tray initialized',
47
- run: (ctx) => ctx.expect(ctx.manager.tray._initialized).toBe(true),
48
- },
49
- {
50
- name: 'menu initialized',
51
- run: (ctx) => ctx.expect(ctx.manager.menu._initialized).toBe(true),
52
- },
53
- {
54
- name: 'context-menu initialized',
55
- run: (ctx) => ctx.expect(ctx.manager.contextMenu._initialized).toBe(true),
56
- },
57
- {
58
- name: 'startup initialized',
59
- run: (ctx) => ctx.expect(ctx.manager.startup._initialized).toBe(true),
25
+ // The 22 libraries, each a plain property of the one instance and each
26
+ // brought up by initialize(). `auth` is the main-side auth (lib/auth.js);
27
+ // the old `omega` property that held it is gone.
28
+ name: 'every library is on the instance and initialized',
29
+ run: (ctx) => {
30
+ for (const name of LIBS) {
31
+ ctx.expect(Boolean(ctx.omega[name])).toBe(true);
32
+ if (ctx.omega[name]._initialized !== true) {
33
+ throw new Error(`omega.${name} was not initialized by the boot`);
34
+ }
35
+ }
36
+ ctx.expect(LIBS.length).toBe(22);
37
+ ctx.expect(ctx.omega.omega).toBeUndefined();
38
+ },
60
39
  },
61
40
  {
62
- name: 'client-bridge initialized',
63
- run: (ctx) => ctx.expect(ctx.manager.omega._initialized).toBe(true),
41
+ // The one instance a consumer's main.js requires IS the one the harness booted
42
+ name: 'the module exports ONE instance, and .Omega is its constructor',
43
+ run: (ctx) => {
44
+ const main = require('../../../main.js');
45
+ ctx.expect(main).toBe(ctx.omega);
46
+ ctx.expect(typeof main.Omega).toBe('function');
47
+ ctx.expect(main).toBeInstanceOf(main.Omega);
48
+ ctx.expect(main.constructor).toBe(main.Omega);
49
+ },
64
50
  },
65
51
  {
66
- name: 'window-manager initialized',
67
- run: (ctx) => ctx.expect(ctx.manager.windows._initialized).toBe(true),
52
+ name: 'ready settled with the instance',
53
+ run: async (ctx) => {
54
+ ctx.expect(await ctx.omega.ready).toBe(ctx.omega);
55
+ },
68
56
  },
69
57
  {
70
58
  name: 'getEnvironment returns testing under the test harness',
71
59
  run: (ctx) => {
72
60
  // The harness spawn names OMEGA_ENVIRONMENT=testing, the one input.
73
- ctx.expect(ctx.manager.getEnvironment()).toBe('testing');
61
+ ctx.expect(ctx.omega.getEnvironment()).toBe('testing');
74
62
  },
75
63
  },
76
64
  ],
@@ -12,13 +12,13 @@ module.exports = defineCases({
12
12
  description: 'context-menu (main)',
13
13
  cleanup: (ctx) => {
14
14
  // Reset to the built-in default fn so subsequent test runs aren't affected.
15
- ctx.manager.contextMenu._definitionFn = null;
15
+ ctx.omega.contextMenu._definitionFn = null;
16
16
  },
17
17
  tests: [
18
18
  {
19
19
  name: 'initialize ran (enabled by default)',
20
20
  run: (ctx) => {
21
- ctx.expect(ctx.manager.contextMenu._initialized).toBe(true);
21
+ ctx.expect(ctx.omega.contextMenu._initialized).toBe(true);
22
22
  },
23
23
  },
24
24
  {
@@ -30,19 +30,19 @@ module.exports = defineCases({
30
30
  // In the test harness, appRoot() === app.getAppPath() === the @omega.js/desktop harness dir, which
31
31
  // differs from process.cwd() (the consumer project dir when run from a consumer).
32
32
  // Comparing against process.cwd() made this assert a false mismatch in consumers:
33
- // the consumer has src/integrations/context-menu/index.js, but the manager never
33
+ // the consumer has src/integrations/context-menu/index.js, but the omega instance never
34
34
  // looks there — it looks under appRoot(). Keying the expectation off appRoot() makes
35
35
  // the invariant self-consistent in both the @omega.js/desktop self-test and any consumer run.
36
36
  const appRoot = require('../../../utils/app-root.js')();
37
37
  const consumerFile = path.join(appRoot, 'src', 'integrations', 'context-menu', 'index.js');
38
38
  const hasConsumer = fs.existsSync(consumerFile);
39
- ctx.expect(ctx.manager.contextMenu.hasCustomDefinition()).toBe(hasConsumer);
39
+ ctx.expect(ctx.omega.contextMenu.hasCustomDefinition()).toBe(hasConsumer);
40
40
  },
41
41
  },
42
42
  {
43
43
  name: 'default fn: editable params produce cut/copy/paste',
44
44
  run: (ctx) => {
45
- const items = ctx.manager.contextMenu.buildItems({
45
+ const items = ctx.omega.contextMenu.buildItems({
46
46
  isEditable: true,
47
47
  editFlags: { canCut: true, canCopy: true, canPaste: true },
48
48
  });
@@ -55,7 +55,7 @@ module.exports = defineCases({
55
55
  {
56
56
  name: 'default fn: text selection produces copy only',
57
57
  run: (ctx) => {
58
- const items = ctx.manager.contextMenu.buildItems({
58
+ const items = ctx.omega.contextMenu.buildItems({
59
59
  isEditable: false,
60
60
  selectionText: 'hello world',
61
61
  });
@@ -68,7 +68,7 @@ module.exports = defineCases({
68
68
  {
69
69
  name: 'default fn: link adds Open / Copy Address items',
70
70
  run: (ctx) => {
71
- const items = ctx.manager.contextMenu.buildItems({
71
+ const items = ctx.omega.contextMenu.buildItems({
72
72
  linkURL: 'https://example.com',
73
73
  });
74
74
  const labels = items.filter((i) => i.label).map((i) => i.label);
@@ -80,27 +80,27 @@ module.exports = defineCases({
80
80
  name: 'default fn: empty params → only the always-on items (reload)',
81
81
  run: (ctx) => {
82
82
  // Force isDevelopment false so dev-only items don't appear.
83
- const orig = ctx.manager.isDevelopment;
84
- ctx.manager.isDevelopment = () => false;
83
+ const orig = ctx.omega.isDevelopment;
84
+ ctx.omega.isDevelopment = () => false;
85
85
  try {
86
- const items = ctx.manager.contextMenu.buildItems({});
86
+ const items = ctx.omega.contextMenu.buildItems({});
87
87
  // With no editFlags, no selection, no link → only `reload` is always-on.
88
88
  const ids = items.filter((i) => i.id).map((i) => i.id);
89
89
  ctx.expect(ids).toEqual(['reload']);
90
90
  } finally {
91
- ctx.manager.isDevelopment = orig;
91
+ ctx.omega.isDevelopment = orig;
92
92
  }
93
93
  },
94
94
  },
95
95
  {
96
96
  name: 'define() replaces the fn',
97
97
  run: (ctx) => {
98
- ctx.manager.contextMenu.define(({ menu, params }) => {
98
+ ctx.omega.contextMenu.define(({ menu, params }) => {
99
99
  menu.item({ label: `Selected: ${params.selectionText}` });
100
100
  });
101
- ctx.expect(ctx.manager.contextMenu.hasCustomDefinition()).toBe(true);
101
+ ctx.expect(ctx.omega.contextMenu.hasCustomDefinition()).toBe(true);
102
102
 
103
- const items = ctx.manager.contextMenu.buildItems({ selectionText: 'foo' });
103
+ const items = ctx.omega.contextMenu.buildItems({ selectionText: 'foo' });
104
104
  ctx.expect(items.length).toBe(1);
105
105
  ctx.expect(items[0].label).toBe('Selected: foo');
106
106
  },
@@ -108,18 +108,18 @@ module.exports = defineCases({
108
108
  {
109
109
  name: 'define() throws on non-function input',
110
110
  run: (ctx) => {
111
- ctx.expect(() => ctx.manager.contextMenu.define(null)).toThrow(/must be a function/);
111
+ ctx.expect(() => ctx.omega.contextMenu.define(null)).toThrow(/must be a function/);
112
112
  },
113
113
  },
114
114
  {
115
115
  name: 'menu.separator() pushes a separator descriptor',
116
116
  run: (ctx) => {
117
- ctx.manager.contextMenu.define(({ menu }) => {
117
+ ctx.omega.contextMenu.define(({ menu }) => {
118
118
  menu.item({ label: 'A' });
119
119
  menu.separator();
120
120
  menu.item({ label: 'B' });
121
121
  });
122
- const items = ctx.manager.contextMenu.buildItems({});
122
+ const items = ctx.omega.contextMenu.buildItems({});
123
123
  ctx.expect(items.length).toBe(3);
124
124
  ctx.expect(items[1].type).toBe('separator');
125
125
  },
@@ -127,24 +127,25 @@ module.exports = defineCases({
127
127
  {
128
128
  name: 'menu.submenu() builds a nested submenu',
129
129
  run: (ctx) => {
130
- ctx.manager.contextMenu.define(({ menu }) => {
130
+ ctx.omega.contextMenu.define(({ menu }) => {
131
131
  menu.submenu('More', [{ label: 'X' }, { label: 'Y' }]);
132
132
  });
133
- const items = ctx.manager.contextMenu.buildItems({});
133
+ const items = ctx.omega.contextMenu.buildItems({});
134
134
  ctx.expect(items[0].label).toBe('More');
135
135
  ctx.expect(items[0].submenu.length).toBe(2);
136
136
  },
137
137
  },
138
138
  {
139
- name: 'definition fn receives manager, params, webContents',
139
+ name: 'definition fn receives omega, params, webContents (no manager key)',
140
140
  run: (ctx) => {
141
141
  let received;
142
- ctx.manager.contextMenu.define((arg) => {
142
+ ctx.omega.contextMenu.define((arg) => {
143
143
  received = arg;
144
144
  arg.menu.item({ label: 'probe' });
145
145
  });
146
- ctx.manager.contextMenu.buildItems({ x: 100, y: 200 }, { id: 'fake-wc' });
147
- ctx.expect(received.manager).toBe(ctx.manager);
146
+ ctx.omega.contextMenu.buildItems({ x: 100, y: 200 }, { id: 'fake-wc' });
147
+ ctx.expect(received.omega).toBe(ctx.omega);
148
+ ctx.expect(received.manager).toBeUndefined();
148
149
  ctx.expect(received.params).toEqual({ x: 100, y: 200 });
149
150
  ctx.expect(received.webContents).toEqual({ id: 'fake-wc' });
150
151
  ctx.expect(typeof received.menu.item).toBe('function');
@@ -156,12 +157,12 @@ module.exports = defineCases({
156
157
  name: '_resolveItem evaluates dynamic labels',
157
158
  run: (ctx) => {
158
159
  let n = 0;
159
- const resolved = ctx.manager.contextMenu._resolveItem({
160
+ const resolved = ctx.omega.contextMenu._resolveItem({
160
161
  label: () => `Items: ${n}`,
161
162
  });
162
163
  ctx.expect(resolved.label).toBe('Items: 0');
163
164
  n = 4;
164
- const resolved2 = ctx.manager.contextMenu._resolveItem({ label: () => `Items: ${n}` });
165
+ const resolved2 = ctx.omega.contextMenu._resolveItem({ label: () => `Items: ${n}` });
165
166
  ctx.expect(resolved2.label).toBe('Items: 4');
166
167
  },
167
168
  },
@@ -169,7 +170,7 @@ module.exports = defineCases({
169
170
  name: '_resolveItem wraps click handlers to swallow errors',
170
171
  run: (ctx) => {
171
172
  let called = false;
172
- const resolved = ctx.manager.contextMenu._resolveItem({
173
+ const resolved = ctx.omega.contextMenu._resolveItem({
173
174
  label: 'X',
174
175
  click: () => { called = true; throw new Error('nope'); },
175
176
  });
@@ -185,8 +186,8 @@ module.exports = defineCases({
185
186
  const mockWC = {
186
187
  on: (evt, fn) => { calls.push({ evt, fn }); },
187
188
  };
188
- ctx.manager.contextMenu.attach(mockWC);
189
- ctx.manager.contextMenu.attach(mockWC); // second call should be a no-op
189
+ ctx.omega.contextMenu.attach(mockWC);
190
+ ctx.omega.contextMenu.attach(mockWC); // second call should be a no-op
190
191
  ctx.expect(calls.length).toBe(1);
191
192
  ctx.expect(calls[0].evt).toBe('context-menu');
192
193
  },
@@ -194,8 +195,8 @@ module.exports = defineCases({
194
195
  {
195
196
  name: 'menu.useDefaults() ships id-tagged items (cut, copy, paste, ...)',
196
197
  run: (ctx) => {
197
- ctx.manager.contextMenu.define(({ menu }) => { menu.useDefaults(); });
198
- const items = ctx.manager.contextMenu.buildItems({
198
+ ctx.omega.contextMenu.define(({ menu }) => { menu.useDefaults(); });
199
+ const items = ctx.omega.contextMenu.buildItems({
199
200
  isEditable: true,
200
201
  editFlags: { canCut: true, canCopy: true, canPaste: true },
201
202
  });
@@ -208,11 +209,11 @@ module.exports = defineCases({
208
209
  {
209
210
  name: 'menu.remove() drops an item by id within the event',
210
211
  run: (ctx) => {
211
- ctx.manager.contextMenu.define(({ menu }) => {
212
+ ctx.omega.contextMenu.define(({ menu }) => {
212
213
  menu.useDefaults();
213
214
  menu.remove('paste');
214
215
  });
215
- const items = ctx.manager.contextMenu.buildItems({
216
+ const items = ctx.omega.contextMenu.buildItems({
216
217
  isEditable: true,
217
218
  editFlags: { canCut: true, canCopy: true, canPaste: true },
218
219
  });
@@ -225,11 +226,11 @@ module.exports = defineCases({
225
226
  {
226
227
  name: 'menu.insertAfter splices a new item by id',
227
228
  run: (ctx) => {
228
- ctx.manager.contextMenu.define(({ menu }) => {
229
+ ctx.omega.contextMenu.define(({ menu }) => {
229
230
  menu.useDefaults();
230
231
  menu.insertAfter('copy', { id: 'search', label: 'Search...' });
231
232
  });
232
- const items = ctx.manager.contextMenu.buildItems({
233
+ const items = ctx.omega.contextMenu.buildItems({
233
234
  isEditable: false,
234
235
  selectionText: 'foo',
235
236
  });
@@ -243,11 +244,11 @@ module.exports = defineCases({
243
244
  {
244
245
  name: 'menu.update() patches a default item before popup',
245
246
  run: (ctx) => {
246
- ctx.manager.contextMenu.define(({ menu }) => {
247
+ ctx.omega.contextMenu.define(({ menu }) => {
247
248
  menu.useDefaults();
248
249
  menu.update('copy', { label: 'CUSTOM COPY' });
249
250
  });
250
- const items = ctx.manager.contextMenu.buildItems({
251
+ const items = ctx.omega.contextMenu.buildItems({
251
252
  isEditable: false,
252
253
  selectionText: 'foo',
253
254
  });
@@ -259,7 +260,7 @@ module.exports = defineCases({
259
260
  {
260
261
  name: 'defaults: undo/redo appear when canUndo/canRedo flags set',
261
262
  run: (ctx) => {
262
- const items = ctx.manager.contextMenu.buildItems({
263
+ const items = ctx.omega.contextMenu.buildItems({
263
264
  isEditable: true,
264
265
  editFlags: { canUndo: true, canRedo: true, canCut: true, canCopy: true, canPaste: true },
265
266
  });
@@ -271,7 +272,7 @@ module.exports = defineCases({
271
272
  {
272
273
  name: 'defaults: paste-and-match-style appears in editable contexts',
273
274
  run: (ctx) => {
274
- const items = ctx.manager.contextMenu.buildItems({
275
+ const items = ctx.omega.contextMenu.buildItems({
275
276
  isEditable: true,
276
277
  editFlags: { canCut: true, canCopy: true, canPaste: true },
277
278
  });
@@ -282,14 +283,14 @@ module.exports = defineCases({
282
283
  {
283
284
  name: 'defaults: reload always present',
284
285
  run: (ctx) => {
285
- const orig = ctx.manager.isDevelopment;
286
- ctx.manager.isDevelopment = () => false;
286
+ const orig = ctx.omega.isDevelopment;
287
+ ctx.omega.isDevelopment = () => false;
287
288
  try {
288
- const items = ctx.manager.contextMenu.buildItems({ selectionText: 'hi' });
289
+ const items = ctx.omega.contextMenu.buildItems({ selectionText: 'hi' });
289
290
  const ids = items.filter((i) => i.id).map((i) => i.id);
290
291
  ctx.expect(ids).toContain('reload');
291
292
  } finally {
292
- ctx.manager.isDevelopment = orig;
293
+ ctx.omega.isDevelopment = orig;
293
294
  }
294
295
  },
295
296
  },
@@ -297,13 +298,13 @@ module.exports = defineCases({
297
298
  name: 'menu.find / menu.has work within event builder',
298
299
  run: (ctx) => {
299
300
  let foundCopy, hasCut, hasNope;
300
- ctx.manager.contextMenu.define(({ menu }) => {
301
+ ctx.omega.contextMenu.define(({ menu }) => {
301
302
  menu.useDefaults();
302
303
  foundCopy = menu.find('copy');
303
304
  hasCut = menu.has('cut');
304
305
  hasNope = menu.has('does-not-exist');
305
306
  });
306
- ctx.manager.contextMenu.buildItems({
307
+ ctx.omega.contextMenu.buildItems({
307
308
  isEditable: true,
308
309
  editFlags: { canCut: true, canCopy: true, canPaste: true },
309
310
  });
@@ -315,11 +316,11 @@ module.exports = defineCases({
315
316
  {
316
317
  name: 'menu.insertBefore splices a new item by id',
317
318
  run: (ctx) => {
318
- ctx.manager.contextMenu.define(({ menu }) => {
319
+ ctx.omega.contextMenu.define(({ menu }) => {
319
320
  menu.useDefaults();
320
321
  menu.insertBefore('copy', { id: 'pre-copy', label: 'BEFORE COPY' });
321
322
  });
322
- const items = ctx.manager.contextMenu.buildItems({
323
+ const items = ctx.omega.contextMenu.buildItems({
323
324
  isEditable: false,
324
325
  selectionText: 'foo',
325
326
  });
@@ -332,12 +333,12 @@ module.exports = defineCases({
332
333
  {
333
334
  name: 'menu.hide / menu.enable / menu.show within event',
334
335
  run: (ctx) => {
335
- ctx.manager.contextMenu.define(({ menu }) => {
336
+ ctx.omega.contextMenu.define(({ menu }) => {
336
337
  menu.useDefaults();
337
338
  menu.hide('copy');
338
339
  menu.enable('paste', false);
339
340
  });
340
- const items = ctx.manager.contextMenu.buildItems({
341
+ const items = ctx.omega.contextMenu.buildItems({
341
342
  isEditable: true,
342
343
  editFlags: { canCut: true, canCopy: true, canPaste: true },
343
344
  });
@@ -350,12 +351,12 @@ module.exports = defineCases({
350
351
  {
351
352
  name: 'menu.appendTo pushes into a submenu created via menu.submenu(...)',
352
353
  run: (ctx) => {
353
- ctx.manager.contextMenu.define(({ menu }) => {
354
+ ctx.omega.contextMenu.define(({ menu }) => {
354
355
  // Build a parent submenu with an id.
355
356
  menu.item({ id: 'more', label: 'More', submenu: [] });
356
357
  menu.appendTo('more', { id: 'extra', label: 'Extra' });
357
358
  });
358
- const items = ctx.manager.contextMenu.buildItems({});
359
+ const items = ctx.omega.contextMenu.buildItems({});
359
360
  const more = items.find((i) => i.id === 'more');
360
361
  ctx.expect(more).toBeTruthy();
361
362
  ctx.expect(more.submenu[0].id).toBe('extra');
@@ -13,16 +13,16 @@ module.exports = defineCases({
13
13
  description: 'context (main)',
14
14
  tests: [
15
15
  {
16
- name: 'context module wired on manager + initialized during boot',
16
+ name: 'context module wired on omega + initialized during boot',
17
17
  run: (ctx) => {
18
- ctx.expect(ctx.manager.context).toBeDefined();
19
- ctx.expect(ctx.manager.context._initialized).toBe(true);
18
+ ctx.expect(ctx.omega.context).toBeDefined();
19
+ ctx.expect(ctx.omega.context._initialized).toBe(true);
20
20
  },
21
21
  },
22
22
  {
23
23
  name: 'session has id (UUID), startTime (ISO), deviceId (string)',
24
24
  run: (ctx) => {
25
- const s = ctx.manager.context.session;
25
+ const s = ctx.omega.context.session;
26
26
  ctx.expect(typeof s.id).toBe('string');
27
27
  ctx.expect(s.id.length).toBe(36);
28
28
  ctx.expect(typeof s.startTime).toBe('string');
@@ -34,10 +34,10 @@ module.exports = defineCases({
34
34
  {
35
35
  name: 'deviceId is stable — re-init preserves the same id',
36
36
  run: async (ctx) => {
37
- const before = ctx.manager.context.session.deviceId;
38
- ctx.manager.context.shutdown();
39
- await ctx.manager.context.initialize(ctx.manager);
40
- const after = ctx.manager.context.session.deviceId;
37
+ const before = ctx.omega.context.session.deviceId;
38
+ ctx.omega.context.shutdown();
39
+ await ctx.omega.context.initialize(ctx.omega);
40
+ const after = ctx.omega.context.session.deviceId;
41
41
  ctx.expect(after).toBe(before);
42
42
  },
43
43
  },
@@ -63,14 +63,14 @@ module.exports = defineCases({
63
63
  // that hands a wiped install back the id it had before.
64
64
  name: 'deviceId derives from the injected MAC seed and persists to storage',
65
65
  run: async (ctx) => {
66
- const storage = ctx.manager.storage;
66
+ const storage = ctx.omega.storage;
67
67
  const saved = storage.get('context.deviceId');
68
68
 
69
69
  try {
70
70
  // A wiped install: nothing stored, so the seed decides
71
71
  storage.delete('context.deviceId');
72
- const derived = await ctx.manager.context._resolveDeviceId();
73
- const mac = ctx.manager.context._readFirstMac();
72
+ const derived = await ctx.omega.context._resolveDeviceId();
73
+ const mac = ctx.omega.context._readFirstMac();
74
74
 
75
75
  if (mac) {
76
76
  ctx.expect(derived).toBe(mac);
@@ -82,7 +82,7 @@ module.exports = defineCases({
82
82
  ctx.expect(storage.get('context.deviceId')).toBe(derived);
83
83
 
84
84
  storage.set('context.deviceId', 'stored-wins-over-the-seed');
85
- ctx.expect(await ctx.manager.context._resolveDeviceId()).toBe('stored-wins-over-the-seed');
85
+ ctx.expect(await ctx.omega.context._resolveDeviceId()).toBe('stored-wins-over-the-seed');
86
86
  } finally {
87
87
  if (saved) storage.set('context.deviceId', saved);
88
88
  else storage.delete('context.deviceId');
@@ -93,38 +93,38 @@ module.exports = defineCases({
93
93
  name: 'client.platform is set (matches os.platform())',
94
94
  run: (ctx) => {
95
95
  const expected = require('os').platform();
96
- ctx.expect(ctx.manager.context.client.platform).toBe(expected);
96
+ ctx.expect(ctx.omega.context.client.platform).toBe(expected);
97
97
  },
98
98
  },
99
99
  {
100
100
  name: 'client.arch is set',
101
101
  run: (ctx) => {
102
- ctx.expect(typeof ctx.manager.context.client.arch).toBe('string');
103
- ctx.expect(ctx.manager.context.client.arch.length > 0).toBe(true);
102
+ ctx.expect(typeof ctx.omega.context.client.arch).toBe('string');
103
+ ctx.expect(ctx.omega.context.client.arch.length > 0).toBe(true);
104
104
  },
105
105
  },
106
106
  {
107
107
  name: 'client.mobile is false on desktop',
108
108
  run: (ctx) => {
109
- ctx.expect(ctx.manager.context.client.mobile).toBe(false);
109
+ ctx.expect(ctx.omega.context.client.mobile).toBe(false);
110
110
  },
111
111
  },
112
112
  {
113
- name: 'app.environment matches manager.getEnvironment()',
113
+ name: 'app.environment matches omega.getEnvironment()',
114
114
  run: (ctx) => {
115
- ctx.expect(ctx.manager.context.app.environment).toBe(ctx.manager.getEnvironment());
115
+ ctx.expect(ctx.omega.context.app.environment).toBe(ctx.omega.getEnvironment());
116
116
  },
117
117
  },
118
118
  {
119
- name: 'app.version matches manager.getVersion()',
119
+ name: 'app.version matches omega.getVersion()',
120
120
  run: (ctx) => {
121
- ctx.expect(ctx.manager.context.app.version).toBe(ctx.manager.getVersion());
121
+ ctx.expect(ctx.omega.context.app.version).toBe(ctx.omega.getVersion());
122
122
  },
123
123
  },
124
124
  {
125
125
  name: 'toJSON returns plain JSON snapshot (structured-cloneable)',
126
126
  run: (ctx) => {
127
- const snap = ctx.manager.context.toJSON();
127
+ const snap = ctx.omega.context.toJSON();
128
128
  ctx.expect(snap.geolocation).toBeDefined();
129
129
  ctx.expect(snap.client).toBeDefined();
130
130
  ctx.expect(snap.session).toBeDefined();
@@ -137,7 +137,7 @@ module.exports = defineCases({
137
137
  {
138
138
  name: '_readFirstMac returns null or a MAC-shaped string',
139
139
  run: (ctx) => {
140
- const mac = ctx.manager.context._readFirstMac();
140
+ const mac = ctx.omega.context._readFirstMac();
141
141
  if (mac !== null) {
142
142
  ctx.expect(mac).toMatch(/^[0-9a-f]{2}(:[0-9a-f]{2}){5}$/i);
143
143
  }
@@ -146,9 +146,9 @@ module.exports = defineCases({
146
146
  {
147
147
  name: 'IPC handler desktop:context:get returns the snapshot',
148
148
  run: async (ctx) => {
149
- const snap = await ctx.manager.ipc.invoke('desktop:context:get');
150
- ctx.expect(snap.session.id).toBe(ctx.manager.context.session.id);
151
- ctx.expect(snap.client.platform).toBe(ctx.manager.context.client.platform);
149
+ const snap = await ctx.omega.ipc.invoke('desktop:context:get');
150
+ ctx.expect(snap.session.id).toBe(ctx.omega.context.session.id);
151
+ ctx.expect(snap.client.platform).toBe(ctx.omega.context.client.platform);
152
152
  },
153
153
  },
154
154
  ],