@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
@@ -8,19 +8,19 @@ module.exports = defineCases({
8
8
  description: 'deep-link (main)',
9
9
  cleanup: (ctx) => {
10
10
  // Drop all consumer handlers we registered. Built-ins stay (they're idempotent).
11
- ctx.manager.deepLink._handlers = ctx.manager.deepLink._handlers.filter((h) => h.builtin);
11
+ ctx.omega.deepLink._handlers = ctx.omega.deepLink._handlers.filter((h) => h.builtin);
12
12
  },
13
13
  tests: [
14
14
  {
15
15
  name: 'initialize ran during boot',
16
16
  run: (ctx) => {
17
- ctx.expect(ctx.manager.deepLink._initialized).toBe(true);
17
+ ctx.expect(ctx.omega.deepLink._initialized).toBe(true);
18
18
  },
19
19
  },
20
20
  {
21
21
  name: 'built-in handlers are registered for auth/token, app/show, app/quit',
22
22
  run: (ctx) => {
23
- const patterns = ctx.manager.deepLink.getHandlers().map((h) => h.pattern);
23
+ const patterns = ctx.omega.deepLink.getHandlers().map((h) => h.pattern);
24
24
  ctx.expect(patterns).toContain('auth/token');
25
25
  ctx.expect(patterns).toContain('app/show');
26
26
  ctx.expect(patterns).toContain('app/quit');
@@ -29,7 +29,7 @@ module.exports = defineCases({
29
29
  {
30
30
  name: '_parseUrl extracts scheme, route, query for a flat path',
31
31
  run: (ctx) => {
32
- const parsed = ctx.manager.deepLink._parseUrl('myapp://auth/token?token=abc&x=1');
32
+ const parsed = ctx.omega.deepLink._parseUrl('myapp://auth/token?token=abc&x=1');
33
33
  ctx.expect(parsed.scheme).toBe('myapp');
34
34
  ctx.expect(parsed.route).toBe('auth/token');
35
35
  ctx.expect(parsed.query).toEqual({ token: 'abc', x: '1' });
@@ -38,67 +38,67 @@ module.exports = defineCases({
38
38
  {
39
39
  name: '_parseUrl handles nested paths',
40
40
  run: (ctx) => {
41
- const parsed = ctx.manager.deepLink._parseUrl('myapp://user/profile/42');
41
+ const parsed = ctx.omega.deepLink._parseUrl('myapp://user/profile/42');
42
42
  ctx.expect(parsed.route).toBe('user/profile/42');
43
43
  },
44
44
  },
45
45
  {
46
46
  name: '_parseUrl returns null for malformed urls',
47
47
  run: (ctx) => {
48
- ctx.expect(ctx.manager.deepLink._parseUrl('not a url')).toBeNull();
48
+ ctx.expect(ctx.omega.deepLink._parseUrl('not a url')).toBeNull();
49
49
  },
50
50
  },
51
51
  {
52
52
  name: '_matchPattern: exact match returns empty params',
53
53
  run: (ctx) => {
54
- ctx.expect(ctx.manager.deepLink._matchPattern('auth/token', 'auth/token')).toEqual({});
54
+ ctx.expect(ctx.omega.deepLink._matchPattern('auth/token', 'auth/token')).toEqual({});
55
55
  },
56
56
  },
57
57
  {
58
58
  name: '_matchPattern: param match returns named params',
59
59
  run: (ctx) => {
60
- ctx.expect(ctx.manager.deepLink._matchPattern('user/profile/42', 'user/profile/:id'))
60
+ ctx.expect(ctx.omega.deepLink._matchPattern('user/profile/42', 'user/profile/:id'))
61
61
  .toEqual({ id: '42' });
62
- ctx.expect(ctx.manager.deepLink._matchPattern('org/foo/repo/bar', 'org/:slug/repo/:repo'))
62
+ ctx.expect(ctx.omega.deepLink._matchPattern('org/foo/repo/bar', 'org/:slug/repo/:repo'))
63
63
  .toEqual({ slug: 'foo', repo: 'bar' });
64
64
  },
65
65
  },
66
66
  {
67
67
  name: '_matchPattern: mismatched length or static segment returns null',
68
68
  run: (ctx) => {
69
- ctx.expect(ctx.manager.deepLink._matchPattern('auth/token', 'auth/token/extra')).toBeNull();
70
- ctx.expect(ctx.manager.deepLink._matchPattern('user/x/42', 'user/profile/:id')).toBeNull();
69
+ ctx.expect(ctx.omega.deepLink._matchPattern('auth/token', 'auth/token/extra')).toBeNull();
70
+ ctx.expect(ctx.omega.deepLink._matchPattern('user/x/42', 'user/profile/:id')).toBeNull();
71
71
  },
72
72
  },
73
73
  {
74
74
  name: '_matchPattern: wildcard always matches',
75
75
  run: (ctx) => {
76
- ctx.expect(ctx.manager.deepLink._matchPattern('anything/at/all', '*')).toEqual({});
76
+ ctx.expect(ctx.omega.deepLink._matchPattern('anything/at/all', '*')).toEqual({});
77
77
  },
78
78
  },
79
79
  {
80
80
  name: 'on() registers a handler and returns an unsubscribe fn',
81
81
  run: (ctx) => {
82
- const before = ctx.manager.deepLink.getHandlers().length;
83
- const off = ctx.manager.deepLink.on('test/route', () => {});
84
- ctx.expect(ctx.manager.deepLink.getHandlers().length).toBe(before + 1);
82
+ const before = ctx.omega.deepLink.getHandlers().length;
83
+ const off = ctx.omega.deepLink.on('test/route', () => {});
84
+ ctx.expect(ctx.omega.deepLink.getHandlers().length).toBe(before + 1);
85
85
  off();
86
- ctx.expect(ctx.manager.deepLink.getHandlers().length).toBe(before);
86
+ ctx.expect(ctx.omega.deepLink.getHandlers().length).toBe(before);
87
87
  },
88
88
  },
89
89
  {
90
90
  name: 'on() validates inputs',
91
91
  run: (ctx) => {
92
- ctx.expect(() => ctx.manager.deepLink.on('', () => {})).toThrow(/non-empty string/);
93
- ctx.expect(() => ctx.manager.deepLink.on('x', null)).toThrow(/must be a function/);
92
+ ctx.expect(() => ctx.omega.deepLink.on('', () => {})).toThrow(/non-empty string/);
93
+ ctx.expect(() => ctx.omega.deepLink.on('x', null)).toThrow(/must be a function/);
94
94
  },
95
95
  },
96
96
  {
97
97
  name: 'dispatch() fires the matching handler with parsed ctx',
98
98
  run: (ctx) => {
99
99
  let received;
100
- const off = ctx.manager.deepLink.on('user/profile/:id', (c) => { received = c; });
101
- ctx.manager.deepLink.dispatch('myapp://user/profile/42?ref=tray');
100
+ const off = ctx.omega.deepLink.on('user/profile/:id', (c) => { received = c; });
101
+ ctx.omega.deepLink.dispatch('myapp://user/profile/42?ref=tray');
102
102
  off();
103
103
 
104
104
  ctx.expect(received).toBeTruthy();
@@ -115,9 +115,9 @@ module.exports = defineCases({
115
115
  name: 'multiple handlers for the same route fire in order',
116
116
  run: (ctx) => {
117
117
  const calls = [];
118
- const off1 = ctx.manager.deepLink.on('foo/bar', () => { calls.push('a'); });
119
- const off2 = ctx.manager.deepLink.on('foo/bar', () => { calls.push('b'); });
120
- ctx.manager.deepLink.dispatch('myapp://foo/bar');
118
+ const off1 = ctx.omega.deepLink.on('foo/bar', () => { calls.push('a'); });
119
+ const off2 = ctx.omega.deepLink.on('foo/bar', () => { calls.push('b'); });
120
+ ctx.omega.deepLink.dispatch('myapp://foo/bar');
121
121
  off1(); off2();
122
122
  ctx.expect(calls).toEqual(['a', 'b']);
123
123
  },
@@ -126,16 +126,16 @@ module.exports = defineCases({
126
126
  name: 'consumer handler runs BEFORE built-in for the same route',
127
127
  run: (ctx) => {
128
128
  const calls = [];
129
- const off = ctx.manager.deepLink.on('app/show', () => { calls.push('consumer'); });
130
- // Built-in for app/show calls manager.windows.show — temporarily stub to record the call.
131
- const origShow = ctx.manager.windows.show;
132
- ctx.manager.windows.show = () => { calls.push('builtin'); };
129
+ const off = ctx.omega.deepLink.on('app/show', () => { calls.push('consumer'); });
130
+ // Built-in for app/show calls omega.windows.show — temporarily stub to record the call.
131
+ const origShow = ctx.omega.windows.show;
132
+ ctx.omega.windows.show = () => { calls.push('builtin'); };
133
133
 
134
134
  try {
135
- ctx.manager.deepLink.dispatch('myapp://app/show');
135
+ ctx.omega.deepLink.dispatch('myapp://app/show');
136
136
  ctx.expect(calls).toEqual(['consumer', 'builtin']);
137
137
  } finally {
138
- ctx.manager.windows.show = origShow;
138
+ ctx.omega.windows.show = origShow;
139
139
  off();
140
140
  }
141
141
  },
@@ -144,18 +144,18 @@ module.exports = defineCases({
144
144
  name: 'ctx.handled = true suppresses subsequent handlers (including built-ins)',
145
145
  run: (ctx) => {
146
146
  const calls = [];
147
- const off = ctx.manager.deepLink.on('app/show', (c) => {
147
+ const off = ctx.omega.deepLink.on('app/show', (c) => {
148
148
  calls.push('consumer');
149
149
  c.handled = true;
150
150
  });
151
- const origShow = ctx.manager.windows.show;
152
- ctx.manager.windows.show = () => { calls.push('builtin'); };
151
+ const origShow = ctx.omega.windows.show;
152
+ ctx.omega.windows.show = () => { calls.push('builtin'); };
153
153
 
154
154
  try {
155
- ctx.manager.deepLink.dispatch('myapp://app/show');
155
+ ctx.omega.deepLink.dispatch('myapp://app/show');
156
156
  ctx.expect(calls).toEqual(['consumer']);
157
157
  } finally {
158
- ctx.manager.windows.show = origShow;
158
+ ctx.omega.windows.show = origShow;
159
159
  off();
160
160
  }
161
161
  },
@@ -164,14 +164,14 @@ module.exports = defineCases({
164
164
  name: 'wildcard handler runs only when no concrete handler matched',
165
165
  run: (ctx) => {
166
166
  const calls = [];
167
- const offWild = ctx.manager.deepLink.on('*', () => { calls.push('wild'); });
168
- const offConcrete = ctx.manager.deepLink.on('foo/bar', () => { calls.push('concrete'); });
167
+ const offWild = ctx.omega.deepLink.on('*', () => { calls.push('wild'); });
168
+ const offConcrete = ctx.omega.deepLink.on('foo/bar', () => { calls.push('concrete'); });
169
169
 
170
170
  // Concrete match → wildcard does NOT fire.
171
- ctx.manager.deepLink.dispatch('myapp://foo/bar');
171
+ ctx.omega.deepLink.dispatch('myapp://foo/bar');
172
172
 
173
173
  // No concrete match → wildcard fires.
174
- ctx.manager.deepLink.dispatch('myapp://nothing/here');
174
+ ctx.omega.deepLink.dispatch('myapp://nothing/here');
175
175
 
176
176
  offWild(); offConcrete();
177
177
 
@@ -179,55 +179,55 @@ module.exports = defineCases({
179
179
  },
180
180
  },
181
181
  {
182
- name: 'built-in app/show calls manager.windows.show with query.window',
182
+ name: 'built-in app/show calls omega.windows.show with query.window',
183
183
  run: (ctx) => {
184
184
  let shownName = null;
185
- const orig = ctx.manager.windows.show;
186
- ctx.manager.windows.show = (name) => { shownName = name; };
185
+ const orig = ctx.omega.windows.show;
186
+ ctx.omega.windows.show = (name) => { shownName = name; };
187
187
 
188
188
  try {
189
- ctx.manager.deepLink.dispatch('myapp://app/show?window=settings');
189
+ ctx.omega.deepLink.dispatch('myapp://app/show?window=settings');
190
190
  ctx.expect(shownName).toBe('settings');
191
191
 
192
192
  shownName = null;
193
- ctx.manager.deepLink.dispatch('myapp://app/show');
193
+ ctx.omega.deepLink.dispatch('myapp://app/show');
194
194
  ctx.expect(shownName).toBe('main');
195
195
  } finally {
196
- ctx.manager.windows.show = orig;
196
+ ctx.omega.windows.show = orig;
197
197
  }
198
198
  },
199
199
  },
200
200
  {
201
- name: 'built-in auth/token calls omega.handleAuthToken when available',
201
+ name: 'built-in auth/token calls auth.handleToken when available',
202
202
  run: (ctx) => {
203
203
  let receivedToken = null;
204
- const origHandler = ctx.manager.omega.handleAuthToken;
205
- ctx.manager.omega.handleAuthToken = (token) => { receivedToken = token; };
204
+ const origHandler = ctx.omega.auth.handleToken;
205
+ ctx.omega.auth.handleToken = (token) => { receivedToken = token; };
206
206
 
207
207
  try {
208
- ctx.manager.deepLink.dispatch('myapp://auth/token?authToken=abc123');
208
+ ctx.omega.deepLink.dispatch('myapp://auth/token?authToken=abc123');
209
209
  ctx.expect(receivedToken).toBe('abc123');
210
210
  } finally {
211
- ctx.manager.omega.handleAuthToken = origHandler;
211
+ ctx.omega.auth.handleToken = origHandler;
212
212
  }
213
213
  },
214
214
  },
215
215
  {
216
216
  // MODERN shape only: ?authToken= (what the website's token page sends).
217
- // Legacy-app formats (?token=, ?payload=) are UJM's concern — @omega.js/desktop ignores them.
217
+ // Older formats (?token=, ?payload=) are ignored.
218
218
  name: 'built-in auth/token reads ONLY ?authToken= (legacy ?token=/?payload= ignored)',
219
219
  run: (ctx) => {
220
220
  let called = false;
221
- const origHandler = ctx.manager.omega.handleAuthToken;
222
- ctx.manager.omega.handleAuthToken = () => { called = true; };
221
+ const origHandler = ctx.omega.auth.handleToken;
222
+ ctx.omega.auth.handleToken = () => { called = true; };
223
223
 
224
224
  try {
225
- ctx.manager.deepLink.dispatch('myapp://auth/token?token=legacy1');
225
+ ctx.omega.deepLink.dispatch('myapp://auth/token?token=legacy1');
226
226
  const payload = encodeURIComponent(JSON.stringify({ token: 'legacy2' }));
227
- ctx.manager.deepLink.dispatch(`myapp://auth/token?payload=${payload}`);
227
+ ctx.omega.deepLink.dispatch(`myapp://auth/token?payload=${payload}`);
228
228
  ctx.expect(called).toBe(false);
229
229
  } finally {
230
- ctx.manager.omega.handleAuthToken = origHandler;
230
+ ctx.omega.auth.handleToken = origHandler;
231
231
  }
232
232
  },
233
233
  },
@@ -235,37 +235,37 @@ module.exports = defineCases({
235
235
  name: '_extractUrlFromArgv finds the url in argv',
236
236
  run: (ctx) => {
237
237
  const argv = ['/path/to/electron', 'main.js', '--flag', 'myapp://auth/token?token=x'];
238
- ctx.expect(ctx.manager.deepLink._extractUrlFromArgv(argv)).toBe('myapp://auth/token?token=x');
238
+ ctx.expect(ctx.omega.deepLink._extractUrlFromArgv(argv)).toBe('myapp://auth/token?token=x');
239
239
  },
240
240
  },
241
241
  {
242
242
  name: '_extractUrlFromArgv returns null when no scheme matches',
243
243
  run: (ctx) => {
244
244
  const argv = ['/path/to/electron', 'main.js', '--flag', 'https://example.com'];
245
- ctx.expect(ctx.manager.deepLink._extractUrlFromArgv(argv)).toBeNull();
245
+ ctx.expect(ctx.omega.deepLink._extractUrlFromArgv(argv)).toBeNull();
246
246
  },
247
247
  },
248
248
  {
249
249
  // wave-5 F1: a cold-start auth/token used to dispatch via setImmediate,
250
- // long before client-bridge booted Firebase — the token was dropped.
251
- name: 'dispatches before markManagerReady() are queued and drained on it',
250
+ // long before auth booted Firebase, the token was dropped.
251
+ name: 'dispatches before markOmegaReady() are queued and drained on it',
252
252
  run: (ctx) => {
253
- const dl = ctx.manager.deepLink;
253
+ const dl = ctx.omega.deepLink;
254
254
  const calls = [];
255
255
  const off = dl.on('queued/route', (c) => calls.push(c.query.v));
256
- const origReady = dl._managerReady;
256
+ const origReady = dl._omegaReady;
257
257
  try {
258
- dl._managerReady = false;
258
+ dl._omegaReady = false;
259
259
  dl._handle('myapp://queued/route?v=early', 'cold-start');
260
260
  ctx.expect(calls).toEqual([]); // held, not dispatched
261
261
  ctx.expect(dl._bootQueue.length).toBe(1);
262
262
 
263
- dl.markManagerReady();
263
+ dl.markOmegaReady();
264
264
  ctx.expect(calls).toEqual(['early']); // drained in order
265
265
  ctx.expect(dl._bootQueue.length).toBe(0);
266
- ctx.expect(dl._managerReady).toBe(true);
266
+ ctx.expect(dl._omegaReady).toBe(true);
267
267
  } finally {
268
- dl._managerReady = origReady;
268
+ dl._omegaReady = origReady;
269
269
  off();
270
270
  }
271
271
  },
@@ -277,13 +277,13 @@ module.exports = defineCases({
277
277
  // the case can only pass by reading the fourth argument.
278
278
  name: 'second-instance reads argv/cwd from additionalData when it rides along',
279
279
  run: (ctx) => {
280
- const brandId = ctx.manager.config.brand.id;
280
+ const brandId = ctx.omega.config.brand.id;
281
281
  const url = `${brandId}://dup/launch?k=v`;
282
282
  let received;
283
- const off = ctx.manager.deepLink.on('dup/launch', (c) => { received = c; });
283
+ const off = ctx.omega.deepLink.on('dup/launch', (c) => { received = c; });
284
284
 
285
285
  try {
286
- ctx.manager.protocol._electron.app.emit(
286
+ ctx.omega.protocol._electron.app.emit(
287
287
  'second-instance',
288
288
  {},
289
289
  ['/bin/app', '--title', '--message', '--allow-file-access-from-files', 'B', 'two'],
@@ -307,13 +307,13 @@ module.exports = defineCases({
307
307
  // A duplicate built before #921 passes no object, so the event's own argv still dispatches.
308
308
  name: 'second-instance falls back to the event argv when no additionalData rides along',
309
309
  run: (ctx) => {
310
- const brandId = ctx.manager.config.brand.id;
310
+ const brandId = ctx.omega.config.brand.id;
311
311
  const url = `${brandId}://dup/fallback?k=v`;
312
312
  let received;
313
- const off = ctx.manager.deepLink.on('dup/fallback', (c) => { received = c; });
313
+ const off = ctx.omega.deepLink.on('dup/fallback', (c) => { received = c; });
314
314
 
315
315
  try {
316
- ctx.manager.protocol._electron.app.emit('second-instance', {}, ['/bin/app', url], '/z');
316
+ ctx.omega.protocol._electron.app.emit('second-instance', {}, ['/bin/app', url], '/z');
317
317
 
318
318
  ctx.expect(received).toBeTruthy();
319
319
  ctx.expect(received.url).toBe(url);
@@ -328,11 +328,11 @@ module.exports = defineCases({
328
328
  name: 'handler errors do not stop subsequent handlers',
329
329
  run: (ctx) => {
330
330
  const calls = [];
331
- const off1 = ctx.manager.deepLink.on('error/route', () => { throw new Error('boom'); });
332
- const off2 = ctx.manager.deepLink.on('error/route', () => { calls.push('after-error'); });
331
+ const off1 = ctx.omega.deepLink.on('error/route', () => { throw new Error('boom'); });
332
+ const off2 = ctx.omega.deepLink.on('error/route', () => { calls.push('after-error'); });
333
333
 
334
334
  // Should not throw to the caller.
335
- ctx.manager.deepLink.dispatch('myapp://error/route');
335
+ ctx.omega.deepLink.dispatch('myapp://error/route');
336
336
  off1(); off2();
337
337
 
338
338
  ctx.expect(calls).toEqual(['after-error']);
@@ -11,17 +11,17 @@ module.exports = defineCases({
11
11
  description: 'fontawesome (main)',
12
12
  tests: [
13
13
  {
14
- name: 'manager.fontawesome is initialized with the full API surface',
14
+ name: 'omega.fontawesome is initialized with the full API surface',
15
15
  run: (ctx) => {
16
- ctx.expect(ctx.manager.fontawesome._initialized).toBe(true);
17
- ctx.expect(typeof ctx.manager.fontawesome.get).toBe('function');
18
- ctx.expect(typeof ctx.manager.fontawesome.has).toBe('function');
16
+ ctx.expect(ctx.omega.fontawesome._initialized).toBe(true);
17
+ ctx.expect(typeof ctx.omega.fontawesome.get).toBe('function');
18
+ ctx.expect(typeof ctx.omega.fontawesome.has).toBe('function');
19
19
  },
20
20
  },
21
21
  {
22
22
  name: 'get() resolves a solid icon to an inline SVG sized 1em/currentColor',
23
23
  run: (ctx) => {
24
- const svg = ctx.manager.fontawesome.get('play');
24
+ const svg = ctx.omega.fontawesome.get('play');
25
25
  ctx.expect(typeof svg).toBe('string');
26
26
  ctx.expect(svg.startsWith('<svg ')).toBe(true);
27
27
  ctx.expect(svg.includes('width="1em"')).toBe(true);
@@ -36,7 +36,7 @@ module.exports = defineCases({
36
36
  // fa-lock's shackle peaks at y=-32 in a 0 0 384 512 viewBox; the SVG
37
37
  // root default (overflow: hidden) clips it — FA's own kit renders
38
38
  // with overflow visible, so the serve path must too.
39
- const svg = ctx.manager.fontawesome.get('lock');
39
+ const svg = ctx.omega.fontawesome.get('lock');
40
40
  ctx.expect(typeof svg).toBe('string');
41
41
  ctx.expect(svg.includes('overflow="visible"')).toBe(true);
42
42
  },
@@ -44,8 +44,8 @@ module.exports = defineCases({
44
44
  {
45
45
  name: 'solid is the default style; brands resolve when named',
46
46
  run: (ctx) => {
47
- ctx.expect(ctx.manager.fontawesome.get('rocket')).toBe(ctx.manager.fontawesome.get('rocket', 'solid'));
48
- const brand = ctx.manager.fontawesome.get('github', 'brands');
47
+ ctx.expect(ctx.omega.fontawesome.get('rocket')).toBe(ctx.omega.fontawesome.get('rocket', 'solid'));
48
+ const brand = ctx.omega.fontawesome.get('github', 'brands');
49
49
  ctx.expect(typeof brand).toBe('string');
50
50
  ctx.expect(brand.startsWith('<svg ')).toBe(true);
51
51
  },
@@ -54,20 +54,20 @@ module.exports = defineCases({
54
54
  name: 'FA aliases resolve (via the fontawesome-free metadata map)',
55
55
  run: (ctx) => {
56
56
  // 'search' is the classic alias of 'magnifying-glass'.
57
- ctx.expect(ctx.manager.fontawesome.has('search')).toBe(true);
58
- ctx.expect(ctx.manager.fontawesome.has('magnifying-glass')).toBe(true);
57
+ ctx.expect(ctx.omega.fontawesome.has('search')).toBe(true);
58
+ ctx.expect(ctx.omega.fontawesome.has('magnifying-glass')).toBe(true);
59
59
  },
60
60
  },
61
61
  {
62
62
  name: 'unknown names and unknown styles return null (never throw)',
63
63
  run: (ctx) => {
64
- ctx.expect(ctx.manager.fontawesome.get('definitely-not-an-icon-xyz')).toBe(null);
64
+ ctx.expect(ctx.omega.fontawesome.get('definitely-not-an-icon-xyz')).toBe(null);
65
65
  // 'no-such-style' is shape-valid but exists in NO Font Awesome set —
66
66
  // stays null even after a brand supplies Pro (whose styles, like
67
67
  // duotone, are legitimate lookups now).
68
- ctx.expect(ctx.manager.fontawesome.get('play', 'no-such-style')).toBe(null);
69
- ctx.expect(ctx.manager.fontawesome.get('play', '../solid')).toBe(null);
70
- ctx.expect(ctx.manager.fontawesome.has('definitely-not-an-icon-xyz')).toBe(false);
68
+ ctx.expect(ctx.omega.fontawesome.get('play', 'no-such-style')).toBe(null);
69
+ ctx.expect(ctx.omega.fontawesome.get('play', '../solid')).toBe(null);
70
+ ctx.expect(ctx.omega.fontawesome.has('definitely-not-an-icon-xyz')).toBe(false);
71
71
  },
72
72
  },
73
73
  {
@@ -76,7 +76,7 @@ module.exports = defineCases({
76
76
  const os = require('os');
77
77
  const path = require('path');
78
78
  const jetpack = require('fs-jetpack');
79
- const fa = ctx.manager.fontawesome;
79
+ const fa = ctx.omega.fontawesome;
80
80
 
81
81
  const brandRoot = path.join(os.tmpdir(), `omega-fa-test-${process.pid}`);
82
82
  jetpack.write(
@@ -112,34 +112,34 @@ module.exports = defineCases({
112
112
  {
113
113
  name: 'non-slug names are rejected — no path traversal, no crashes',
114
114
  run: (ctx) => {
115
- ctx.expect(ctx.manager.fontawesome.get('../../package')).toBe(null);
116
- ctx.expect(ctx.manager.fontawesome.get('..')).toBe(null);
117
- ctx.expect(ctx.manager.fontawesome.get('play.svg/../../secrets')).toBe(null);
118
- ctx.expect(ctx.manager.fontawesome.get('')).toBe(null);
119
- ctx.expect(ctx.manager.fontawesome.get(null)).toBe(null);
120
- ctx.expect(ctx.manager.fontawesome.get(42)).toBe(null);
121
- ctx.expect(ctx.manager.fontawesome.get('Play')).toBe(null); // uppercase is not a slug
115
+ ctx.expect(ctx.omega.fontawesome.get('../../package')).toBe(null);
116
+ ctx.expect(ctx.omega.fontawesome.get('..')).toBe(null);
117
+ ctx.expect(ctx.omega.fontawesome.get('play.svg/../../secrets')).toBe(null);
118
+ ctx.expect(ctx.omega.fontawesome.get('')).toBe(null);
119
+ ctx.expect(ctx.omega.fontawesome.get(null)).toBe(null);
120
+ ctx.expect(ctx.omega.fontawesome.get(42)).toBe(null);
121
+ ctx.expect(ctx.omega.fontawesome.get('Play')).toBe(null); // uppercase is not a slug
122
122
  },
123
123
  },
124
124
  {
125
125
  name: 'lookups are cached — same string instance on repeat calls',
126
126
  run: (ctx) => {
127
- const first = ctx.manager.fontawesome.get('play');
128
- const second = ctx.manager.fontawesome.get('play');
127
+ const first = ctx.omega.fontawesome.get('play');
128
+ const second = ctx.omega.fontawesome.get('play');
129
129
  ctx.expect(first === second).toBe(true);
130
130
  },
131
131
  },
132
132
  {
133
133
  name: 'desktop:fontawesome:get IPC handler round-trips (and nulls bad input)',
134
134
  run: async (ctx) => {
135
- const ok = await ctx.manager.ipc.invoke('desktop:fontawesome:get', { name: 'play', style: 'solid' });
135
+ const ok = await ctx.omega.ipc.invoke('desktop:fontawesome:get', { name: 'play', style: 'solid' });
136
136
  ctx.expect(typeof ok.svg).toBe('string');
137
137
  ctx.expect(ok.svg.startsWith('<svg ')).toBe(true);
138
138
 
139
- const bad = await ctx.manager.ipc.invoke('desktop:fontawesome:get', { name: '../../etc/passwd' });
139
+ const bad = await ctx.omega.ipc.invoke('desktop:fontawesome:get', { name: '../../etc/passwd' });
140
140
  ctx.expect(bad.svg).toBe(null);
141
141
 
142
- const empty = await ctx.manager.ipc.invoke('desktop:fontawesome:get', {});
142
+ const empty = await ctx.omega.ipc.invoke('desktop:fontawesome:get', {});
143
143
  ctx.expect(empty.svg).toBe(null);
144
144
  },
145
145
  },