@omega.js/desktop 0.51.0 → 0.53.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (289) hide show
  1. package/README.md +18 -13
  2. package/dist/assets/css/core/_initialize.scss +1 -1
  3. package/dist/assets/js/core/app-shell.js +14 -15
  4. package/dist/assets/themes/_template/_theme.js +6 -6
  5. package/dist/assets/themes/base/_includes/global/sections/account.html +4 -4
  6. package/dist/assets/themes/base/_includes/global/sections/app-sidebar.html +5 -5
  7. package/dist/assets/themes/base/_layouts/frontend/pages/account/index.html +3 -3
  8. package/dist/assets/themes/base/_layouts/frontend/pages/alternatives/index.html +1 -1
  9. package/dist/assets/themes/base/_layouts/frontend/pages/blog/tags/tag.html +1 -1
  10. package/dist/assets/themes/base/_layouts/frontend/pages/payment/confirmation.html +1 -1
  11. package/dist/assets/themes/base/_sections/marketing/newsletter-cta/section.js +2 -3
  12. package/dist/assets/themes/base/_sections/verts/unit/section.html +1 -1
  13. package/dist/assets/themes/base/_sections/verts/unit/section.js +3 -4
  14. package/dist/assets/themes/base/_theme.js +4 -3
  15. package/dist/assets/themes/bootstrap/_theme.js +2 -2
  16. package/dist/assets/themes/bootstrap/overrides/_links.scss +1 -1
  17. package/dist/assets/themes/classy/_theme.js +8 -6
  18. package/dist/assets/themes/classy/css/marketing/_sections.scss +1 -2
  19. package/dist/assets/themes/classy/js/hero-demo-form.js +3 -2
  20. package/dist/assets/themes/neobrutalism/_theme.js +5 -5
  21. package/dist/assets/themes/neobrutalism/js/pages/test/libraries/layers/index.js +1 -1
  22. package/dist/assets/themes/newsflash/_theme.js +6 -6
  23. package/dist/assets/themes/newsflash/js/pages/test/libraries/layers/index.js +1 -1
  24. package/dist/build.js +87 -111
  25. package/dist/cli.js +1 -1
  26. package/dist/commands/build.js +2 -2
  27. package/dist/commands/cdp/capture.js +2 -2
  28. package/dist/commands/cdp/quit.js +2 -2
  29. package/dist/commands/cdp/relaunch.js +2 -2
  30. package/dist/commands/cdp/theme.js +1 -1
  31. package/dist/commands/clean.js +2 -2
  32. package/dist/commands/deploy.js +4 -4
  33. package/dist/commands/finalize-release.js +4 -4
  34. package/dist/commands/install.js +3 -3
  35. package/dist/commands/launch.js +2 -2
  36. package/dist/commands/lib/deploy-precheck.js +3 -3
  37. package/dist/commands/lib/ensure-target.js +6 -6
  38. package/dist/commands/package.js +2 -2
  39. package/dist/commands/publish.js +2 -2
  40. package/dist/commands/release.js +3 -3
  41. package/dist/commands/runner.js +145 -48
  42. package/dist/commands/sign-windows.js +5 -5
  43. package/dist/commands/test.js +4 -4
  44. package/dist/commands/update.js +2 -2
  45. package/dist/commands/validate-certs.js +4 -4
  46. package/dist/commands/version.js +3 -3
  47. package/dist/defaults/.github/workflows/build.yml +2 -0
  48. package/dist/defaults/AGENTS.md +17 -8
  49. package/dist/defaults/config/omega.json5 +7 -7
  50. package/dist/defaults/hooks/build/post.js +1 -1
  51. package/dist/defaults/hooks/build/pre.js +1 -1
  52. package/dist/defaults/hooks/deploy/pre.js +1 -1
  53. package/dist/defaults/hooks/release/post.js +1 -1
  54. package/dist/defaults/hooks/release/pre.js +1 -1
  55. package/dist/defaults/src/assets/js/components/about/index.js +3 -5
  56. package/dist/defaults/src/assets/js/components/main/index.js +3 -5
  57. package/dist/defaults/src/assets/js/components/settings/index.js +3 -5
  58. package/dist/defaults/src/integrations/context-menu/index.js +2 -2
  59. package/dist/defaults/src/integrations/menu/index.js +3 -3
  60. package/dist/defaults/src/integrations/tray/index.js +3 -3
  61. package/dist/defaults/src/main.js +3 -5
  62. package/dist/defaults/src/preload.js +3 -5
  63. package/dist/defaults/test/README.md +2 -2
  64. package/dist/gulp/main.js +9 -10
  65. package/dist/gulp/tasks/audit.js +7 -7
  66. package/dist/gulp/tasks/build-config.js +8 -8
  67. package/dist/gulp/tasks/bundle.js +16 -16
  68. package/dist/gulp/tasks/defaults.js +3 -3
  69. package/dist/gulp/tasks/distribute.js +2 -2
  70. package/dist/gulp/tasks/html.js +9 -9
  71. package/dist/gulp/tasks/package-quick.js +3 -3
  72. package/dist/gulp/tasks/package.js +3 -3
  73. package/dist/gulp/tasks/release.js +3 -3
  74. package/dist/gulp/tasks/sass.js +6 -6
  75. package/dist/gulp/tasks/serve.js +4 -4
  76. package/dist/hooks/notarize-artifacts.js +1 -1
  77. package/dist/hooks/notarize.js +1 -1
  78. package/dist/index.js +5 -8
  79. package/dist/lib/_environment-mixin.js +50 -0
  80. package/dist/lib/_lifecycle-mixin.js +45 -0
  81. package/dist/lib/analytics.js +33 -35
  82. package/dist/lib/app-state.js +14 -14
  83. package/dist/lib/auth-flow.js +18 -18
  84. package/dist/lib/auth-persistence.js +12 -12
  85. package/dist/lib/auth.js +421 -0
  86. package/dist/lib/auto-updater.js +49 -49
  87. package/dist/lib/context-menu.js +13 -13
  88. package/dist/lib/context.js +19 -19
  89. package/dist/lib/deep-link.js +34 -34
  90. package/dist/lib/fontawesome.js +5 -5
  91. package/dist/lib/ipc.js +4 -4
  92. package/dist/lib/menu.js +25 -25
  93. package/dist/lib/protocol.js +5 -5
  94. package/dist/lib/remote-config.js +22 -22
  95. package/dist/lib/remote-scripts.js +21 -21
  96. package/dist/lib/restart-manager/index.js +28 -28
  97. package/dist/lib/sign-helpers/exec-with-limit.js +1 -1
  98. package/dist/lib/sign-helpers/sign-events.js +1 -1
  99. package/dist/lib/startup.js +18 -13
  100. package/dist/lib/storage.js +10 -10
  101. package/dist/lib/templating.js +16 -16
  102. package/dist/lib/theme.js +10 -10
  103. package/dist/lib/tray.js +27 -27
  104. package/dist/lib/usage.js +11 -11
  105. package/dist/lib/window-manager.js +26 -26
  106. package/dist/main.js +398 -483
  107. package/dist/preload.js +236 -176
  108. package/dist/renderer.js +417 -391
  109. package/dist/runner/job-started.js +1 -1
  110. package/dist/test/fixtures/consumer-app/config/omega.json5 +1 -1
  111. package/dist/test/fixtures/consumer-app/src/assets/js/components/main/index.js +8 -11
  112. package/dist/test/fixtures/consumer-app/src/main.js +5 -7
  113. package/dist/test/fixtures/consumer-app/src/preload.js +2 -2
  114. package/dist/test/harness/boot-entry.js +22 -20
  115. package/dist/test/harness/main-entry.js +31 -30
  116. package/dist/test/harness/renderer-entry.js +5 -5
  117. package/dist/test/harness/renderer-preload.js +137 -141
  118. package/dist/test/index.js +10 -10
  119. package/dist/test/runner.js +2 -2
  120. package/dist/test/runners/boot.js +7 -6
  121. package/dist/test/runners/electron.js +3 -2
  122. package/dist/test/runners/render-event.js +2 -2
  123. package/dist/test/suites/boot/consumer-app-boots.test.js +57 -26
  124. package/dist/test/suites/boot/restart-manager.test.js +2 -2
  125. package/dist/test/suites/boot/storage-bundled.test.js +5 -5
  126. package/dist/test/suites/boot/theme.test.js +13 -13
  127. package/dist/test/suites/build/audit.test.js +1 -1
  128. package/dist/test/suites/build/auth-persistence-resolve.test.js +6 -6
  129. package/dist/test/suites/build/boot-fixture.test.js +2 -2
  130. package/dist/test/suites/build/boot-runner-timeout.test.js +6 -5
  131. package/dist/test/suites/build/brand-scss.test.js +1 -1
  132. package/dist/test/suites/build/build-json-bake.test.js +1 -1
  133. package/dist/test/suites/build/cli.test.js +2 -2
  134. package/dist/test/suites/build/config-schema.test.js +5 -5
  135. package/dist/test/suites/build/defaults-scaffold.test.js +2 -2
  136. package/dist/test/suites/build/deploy-hook.test.js +3 -3
  137. package/dist/test/suites/build/ensure-target.test.js +2 -2
  138. package/dist/test/suites/build/env-delivery.test.js +2 -2
  139. package/dist/test/suites/build/esm-only-dependency.test.js +2 -2
  140. package/dist/test/suites/build/exports.test.js +9 -8
  141. package/dist/test/suites/build/get-config.test.js +4 -4
  142. package/dist/test/suites/build/manifest-deps.test.js +1 -1
  143. package/dist/test/suites/build/merge-line-files.test.js +1 -1
  144. package/dist/test/suites/build/omega-shell.test.js +34 -2
  145. package/dist/test/suites/build/omega.test.js +350 -0
  146. package/dist/test/suites/build/renderer-auth-bridge.test.js +211 -78
  147. package/dist/test/suites/build/runner.test.js +612 -5
  148. package/dist/test/suites/build/sentry.test.js +2 -2
  149. package/dist/test/suites/build/sign-windows-e2e.test.js +2 -2
  150. package/dist/test/suites/build/templating.test.js +3 -3
  151. package/dist/test/suites/build/test-stealth.test.js +7 -9
  152. package/dist/test/suites/build/url-helpers.test.js +55 -56
  153. package/dist/test/suites/build/validate-config.test.js +2 -2
  154. package/dist/test/suites/build/wave5-pins.test.js +2 -2
  155. package/dist/test/suites/main/analytics.test.js +59 -59
  156. package/dist/test/suites/main/app-state.test.js +66 -66
  157. package/dist/test/suites/main/auth-flow.test.js +41 -41
  158. package/dist/test/suites/main/auth-persistence.test.js +54 -43
  159. package/dist/test/suites/main/{client-bridge.integration.test.js → auth.integration.test.js} +10 -9
  160. package/dist/test/suites/main/auth.test.js +336 -0
  161. package/dist/test/suites/main/auto-updater.test.js +134 -134
  162. package/dist/test/suites/main/boot-sequence.test.js +37 -49
  163. package/dist/test/suites/main/context-menu.test.js +51 -50
  164. package/dist/test/suites/main/context.test.js +25 -25
  165. package/dist/test/suites/main/deep-link.test.js +74 -74
  166. package/dist/test/suites/main/fontawesome.test.js +27 -27
  167. package/dist/test/suites/main/ipc.test.js +35 -35
  168. package/dist/test/suites/main/menu.test.js +101 -100
  169. package/dist/test/suites/main/protocol.test.js +19 -19
  170. package/dist/test/suites/main/remote-config.test.js +63 -63
  171. package/dist/test/suites/main/remote-scripts.test.js +103 -103
  172. package/dist/test/suites/main/request.test.js +71 -0
  173. package/dist/test/suites/main/restart-manager.test.js +33 -33
  174. package/dist/test/suites/main/startup-paths-and-ua.test.js +4 -4
  175. package/dist/test/suites/main/startup.test.js +26 -26
  176. package/dist/test/suites/main/stealth-window.test.js +1 -1
  177. package/dist/test/suites/main/storage.test.js +25 -25
  178. package/dist/test/suites/main/theme.test.js +34 -34
  179. package/dist/test/suites/main/tray.test.js +79 -79
  180. package/dist/test/suites/main/url-helpers.test.js +133 -133
  181. package/dist/test/suites/main/usage.test.js +25 -25
  182. package/dist/test/suites/main/window-bounds.test.js +27 -27
  183. package/dist/test/suites/main/window-manager.test.js +44 -44
  184. package/dist/test/suites/renderer/analytics-bridge.test.js +5 -5
  185. package/dist/test/suites/renderer/cross-context-helpers.test.js +37 -31
  186. package/dist/test/suites/renderer/round-trip.test.js +3 -3
  187. package/dist/test/suites/renderer/tooltips.test.js +15 -15
  188. package/dist/test/suites/renderer/{window-em-surface.test.js → window-desktop-surface.test.js} +27 -7
  189. package/dist/test/utils/extended-mode-warning.js +1 -1
  190. package/dist/utils/boot-harness.js +56 -0
  191. package/dist/utils/mode-helpers.js +2 -15
  192. package/dist/utils/ship-keys.js +3 -3
  193. package/dist/utils/signing-status.js +51 -0
  194. package/dist/utils/test-events.js +7 -0
  195. package/dist/utils/test-stealth.js +6 -6
  196. package/dist/utils/url-helpers.js +52 -42
  197. package/dist/utils/user-agent.js +44 -0
  198. package/dist/vendor/account/engine.js +3 -3
  199. package/dist/vendor/account/index.js +14 -45
  200. package/dist/vendor/account/resolve-account.js +44 -0
  201. package/dist/vendor/account/schema.js +1 -1
  202. package/dist/vendor/account/user.js +99 -0
  203. package/dist/vendor/config/client-config.js +1 -1
  204. package/dist/vendor/config/environment.js +11 -30
  205. package/dist/vendor/config/index.js +13 -12
  206. package/dist/vendor/config/load.js +1 -2
  207. package/dist/vendor/config/platforms.js +1 -1
  208. package/dist/vendor/config/repo.js +24 -0
  209. package/dist/vendor/config/retired-keys.js +2 -2
  210. package/dist/vendor/config/schema.js +5 -8
  211. package/dist/vendor/config/site-global.js +2 -3
  212. package/dist/vendor/config/validate.js +1 -2
  213. package/dist/vendor/config/winback.js +1 -1
  214. package/dist/vendor/devkit/actions-secrets.js +1 -1
  215. package/dist/vendor/devkit/attach-log-file.js +1 -1
  216. package/dist/vendor/devkit/brand-version.js +162 -1
  217. package/dist/vendor/devkit/build-json.js +1 -1
  218. package/dist/vendor/devkit/cli-router.js +3 -4
  219. package/dist/vendor/devkit/defaults-engine.js +9 -11
  220. package/dist/vendor/devkit/deploy.js +64 -4
  221. package/dist/vendor/devkit/git-remote.js +78 -1
  222. package/dist/vendor/devkit/local.js +53 -3
  223. package/dist/vendor/devkit/lockfile.js +127 -0
  224. package/dist/vendor/devkit/merge-line-files.js +2 -3
  225. package/dist/vendor/devkit/pack-local.js +4 -7
  226. package/dist/vendor/devkit/preludes/origin-heal.js +35 -49
  227. package/dist/vendor/devkit/target-secrets.js +34 -45
  228. package/dist/vendor/devkit/test/runner-core.js +6 -6
  229. package/dist/vendor/monitoring/env.js +2 -2
  230. package/dist/vendor/monitoring/index.js +1 -1
  231. package/dist/vendor/monitoring/main.js +1 -1
  232. package/dist/vendor/monitoring/preload.js +1 -1
  233. package/dist/vendor/monitoring/renderer.js +1 -1
  234. package/docs/analytics.md +8 -8
  235. package/docs/app-state.md +19 -19
  236. package/docs/audit.md +4 -4
  237. package/docs/{client-bridge.md → auth.md} +88 -73
  238. package/docs/auto-updater.md +8 -8
  239. package/docs/boot-sequence.md +11 -6
  240. package/docs/build-system.md +1 -1
  241. package/docs/cdp-debugging.md +1 -1
  242. package/docs/common-mistakes.md +7 -7
  243. package/docs/config-schema.md +1 -1
  244. package/docs/context-menu.md +13 -13
  245. package/docs/context.md +11 -11
  246. package/docs/css.md +3 -9
  247. package/docs/deep-link.md +25 -25
  248. package/docs/environment-detection.md +16 -16
  249. package/docs/fontawesome.md +7 -5
  250. package/docs/hooks.md +8 -8
  251. package/docs/index.md +39 -28
  252. package/docs/ipc.md +10 -10
  253. package/docs/lib-modules.md +9 -9
  254. package/docs/logging.md +12 -14
  255. package/docs/menu.md +18 -18
  256. package/docs/releasing.md +4 -2
  257. package/docs/remote-config.md +9 -9
  258. package/docs/remote-scripts.md +12 -12
  259. package/docs/restart-manager.md +8 -8
  260. package/docs/runner.md +12 -10
  261. package/docs/sentry.md +4 -4
  262. package/docs/shared/analytics.md +1 -1
  263. package/docs/shared/brands.md +1 -1
  264. package/docs/shared/breaking-changes.md +79 -13
  265. package/docs/shared/config.md +24 -21
  266. package/docs/shared/deploys.md +30 -7
  267. package/docs/shared/local-dev.md +5 -3
  268. package/docs/shared/logging.md +1 -1
  269. package/docs/shared/monitoring.md +5 -5
  270. package/docs/shared/testing.md +2 -2
  271. package/docs/shared/theming.md +1 -1
  272. package/docs/shared/translation.md +19 -10
  273. package/docs/signing.md +1 -1
  274. package/docs/startup.md +16 -16
  275. package/docs/storage.md +11 -11
  276. package/docs/templating.md +3 -3
  277. package/docs/test-boot-layer.md +12 -12
  278. package/docs/test-framework.md +17 -17
  279. package/docs/themes.md +7 -7
  280. package/docs/tooltips.md +2 -2
  281. package/docs/tray.md +31 -31
  282. package/docs/usage.md +7 -7
  283. package/docs/verts.md +1 -1
  284. package/docs/windows.md +22 -22
  285. package/package.json +3 -4
  286. package/dist/lib/client-bridge.js +0 -374
  287. package/dist/lib/logger.js +0 -4
  288. package/dist/test/suites/build/manager.test.js +0 -213
  289. package/dist/test/suites/main/client-bridge.test.js +0 -262
@@ -12,8 +12,8 @@
12
12
  // partial Pro supply never loses icons the free set has.
13
13
  //
14
14
  // Main-side API:
15
- // manager.fontawesome.get(name, style) → svg string | null ('play', 'solid')
16
- // manager.fontawesome.has(name, style) → boolean
15
+ // omega.fontawesome.get(name, style) → svg string | null ('play', 'solid')
16
+ // omega.fontawesome.has(name, style) → boolean
17
17
  //
18
18
  // Renderer-side (preload contextBridge):
19
19
  // window.desktop.fontawesome.get(name, style) → Promise<svg string | null>
@@ -54,17 +54,17 @@ const logger = new LoggerLite('fontawesome');
54
54
 
55
55
  const fontawesome = {
56
56
  _initialized: false,
57
- _manager: null,
57
+ _omega: null,
58
58
  _roots: [],
59
59
  _aliasMap: null,
60
60
  _cache: new Map(),
61
61
 
62
- initialize(manager) {
62
+ initialize(omega) {
63
63
  if (fontawesome._initialized) {
64
64
  return;
65
65
  }
66
66
 
67
- fontawesome._manager = manager;
67
+ fontawesome._omega = omega;
68
68
  fontawesome._roots = fontawesome._resolveRoots();
69
69
 
70
70
  fontawesome._registerIpc();
package/dist/lib/ipc.js CHANGED
@@ -15,7 +15,7 @@
15
15
  // window.desktop.ipc.send(channel, payload) // fire-and-forget renderer → main
16
16
  //
17
17
  // All framework-internal channels are prefixed `desktop:` (e.g. `desktop:storage:get`);
18
- // the test harness keeps its own `desktop:__test:*` channels (parked internals, like EM_* env vars).
18
+ // the test harness keeps its own `desktop:__test:*` channels (parked internals, like the OMEGA_TEST_* env vars).
19
19
  // Consumers can register their own channels under any namespace they want.
20
20
 
21
21
  const LoggerLite = require('./logger-lite.js');
@@ -24,18 +24,18 @@ const logger = new LoggerLite('ipc');
24
24
 
25
25
  const ipc = {
26
26
  _initialized: false,
27
- _manager: null,
27
+ _omega: null,
28
28
  _handlers: {}, // channel -> handler fn
29
29
  _listeners: {}, // channel -> Set<fn>
30
30
  _ipcMain: null,
31
31
  _electron: null,
32
32
 
33
- initialize(manager) {
33
+ initialize(omega) {
34
34
  if (ipc._initialized) {
35
35
  return;
36
36
  }
37
37
 
38
- ipc._manager = manager;
38
+ ipc._omega = omega;
39
39
  ipc._electron = require('electron');
40
40
  ipc._ipcMain = ipc._electron.ipcMain;
41
41
  // No ipcMain in renderer/preload — those contexts use ipcRenderer instead.
package/dist/lib/menu.js CHANGED
@@ -3,13 +3,13 @@
3
3
  // @omega.js/desktop looks for the consumer's `src/integrations/menu/index.js` and calls it with a builder API:
4
4
  //
5
5
  // // src/integrations/menu/index.js
6
- // module.exports = ({ manager, menu, defaults }) => {
6
+ // module.exports = ({ omega, menu, defaults }) => {
7
7
  // // Use the platform-aware default template as a starting point...
8
8
  // menu.useDefaults();
9
9
  //
10
10
  // // ...or build from scratch:
11
11
  // menu.menu('File', [
12
- // { id: 'file/new', label: 'New Window', accelerator: 'CmdOrCtrl+N', click: () => manager.windows.show('main') },
12
+ // { id: 'file/new', label: 'New Window', accelerator: 'CmdOrCtrl+N', click: () => omega.windows.show('main') },
13
13
  // { type: 'separator' },
14
14
  // { role: 'quit' },
15
15
  // ]);
@@ -28,7 +28,7 @@
28
28
  // menu.clear() // start over
29
29
  // menu.append(item) // append a top-level descriptor (rare; prefer menu())
30
30
  //
31
- // Id-path API (during definition AND at runtime via `manager.menu.*`):
31
+ // Id-path API (during definition AND at runtime via `omega.menu.*`):
32
32
  // .find(idPath) / .has(idPath)
33
33
  // .update(idPath, patch) — Object.assign + re-render
34
34
  // .remove(idPath) — splice + re-render
@@ -59,7 +59,7 @@
59
59
  // development/open-user-data, development/open-logs, development/open-app-config,
60
60
  // development/test-error
61
61
  //
62
- // Disabling at runtime: call `manager.menu.disable()` from anywhere in main —
62
+ // Disabling at runtime: call `omega.menu.disable()` from anywhere in main,
63
63
  // idempotent, calls Menu.setApplicationMenu(null) (or null on Windows/Linux to hide
64
64
  // the menu bar). No config flag.
65
65
 
@@ -73,21 +73,21 @@ const logger = new LoggerLite('menu');
73
73
 
74
74
  const menu = {
75
75
  _initialized: false,
76
- _manager: null,
76
+ _omega: null,
77
77
  _menu: null, // electron Menu instance (after _render)
78
78
  _items: [], // top-level descriptors
79
79
  _electron: null,
80
80
  _definitionFn: null,
81
81
 
82
- initialize(manager) {
82
+ initialize(omega) {
83
83
  if (menu._initialized) {
84
84
  return;
85
85
  }
86
86
 
87
- menu._manager = manager;
87
+ menu._omega = omega;
88
88
 
89
89
  if (menu._disabled) {
90
- logger.log('initialize — disabled via manager.menu.disable() called pre-init');
90
+ logger.log('initialize — disabled via omega.menu.disable() called pre-init');
91
91
  menu._initialized = true;
92
92
  return;
93
93
  }
@@ -102,7 +102,7 @@ const menu = {
102
102
 
103
103
  if (fs.existsSync(absPath)) {
104
104
  const loadConsumerFile = require('../utils/load-consumer-file.js');
105
- const loaded = loadConsumerFile(absPath, logger);
105
+ const loaded = loadConsumerFile(absPath);
106
106
  if (typeof loaded === 'function') {
107
107
  menu._definitionFn = loaded;
108
108
  } else if (loaded != null) {
@@ -117,7 +117,7 @@ const menu = {
117
117
 
118
118
  if (menu._definitionFn) {
119
119
  try {
120
- menu._definitionFn({ manager, menu: builder, defaults: menu._defaultTemplate() });
120
+ menu._definitionFn({ omega, menu: builder, defaults: menu._defaultTemplate() });
121
121
  } catch (e) {
122
122
  logger.error('menu definition fn threw:', e);
123
123
  }
@@ -131,8 +131,8 @@ const menu = {
131
131
  // Reflect current auto-updater state into the menu item now that the menu exists.
132
132
  // (The auto-updater initializes before menu in the boot sequence, so its initial state
133
133
  // wasn't reflected in the menu yet.)
134
- if (manager.autoUpdater._updateMenuItem) {
135
- manager.autoUpdater._updateMenuItem();
134
+ if (omega.autoUpdater._updateMenuItem) {
135
+ omega.autoUpdater._updateMenuItem();
136
136
  }
137
137
 
138
138
  logger.log(`initialize — top-level menus=${menu._items.length}`);
@@ -168,12 +168,12 @@ const menu = {
168
168
  // is informed by the legacy @omega.js/desktop template (preferences, relaunch,
169
169
  // dev tools nested under view/developer, top-level development menu).
170
170
  _defaultTemplate() {
171
- const m = menu._manager;
171
+ const omega = menu._omega;
172
172
  const isMac = process.platform === 'darwin';
173
- const productName = m.config.app?.productName || m.config.brand.name;
174
- const brandUrl = m.config.brand.url || null;
175
- const brandName = m.config.brand.name;
176
- const isDev = m.isDevelopment();
173
+ const productName = omega.config.app?.productName || omega.config.brand.name;
174
+ const brandUrl = omega.config.brand.url || null;
175
+ const brandName = omega.config.brand.name;
176
+ const isDev = omega.isDevelopment();
177
177
 
178
178
  // @omega.js/desktop's built-in "Check for Updates..." item. Click defaults to invoking auto-updater
179
179
  // check; auto-updater hook updates label/enabled dynamically based on status.
@@ -183,9 +183,9 @@ const menu = {
183
183
  id: idPath,
184
184
  label: 'Check for Updates...',
185
185
  click: () => {
186
- const status = m.autoUpdater.getStatus();
187
- if (status.code === 'downloaded') m.autoUpdater.installNow();
188
- else m.autoUpdater.checkNow({ userInitiated: true });
186
+ const status = omega.autoUpdater.getStatus();
187
+ if (status.code === 'downloaded') omega.autoUpdater.installNow();
188
+ else omega.autoUpdater.checkNow({ userInitiated: true });
189
189
  },
190
190
  });
191
191
 
@@ -197,7 +197,7 @@ const menu = {
197
197
  id: `view/developer/simulate-update/${scenario}`,
198
198
  label,
199
199
  click: () => {
200
- m.autoUpdater.simulate(scenario)
200
+ omega.autoUpdater.simulate(scenario)
201
201
  .then((status) => logger.log(`simulate(${scenario}) → ${status.code}`))
202
202
  .catch((e) => logger.warn(`simulate(${scenario}) failed: ${e.message}`));
203
203
  },
@@ -211,7 +211,7 @@ const menu = {
211
211
  accelerator: 'CommandOrControl+,',
212
212
  visible: false,
213
213
  click: () => {
214
- m.windows.show('settings');
214
+ omega.windows.show('settings');
215
215
  },
216
216
  };
217
217
 
@@ -351,7 +351,7 @@ const menu = {
351
351
  const { shell } = require('electron');
352
352
  // Route through getWebsiteUrl() so dev runs open localhost:4000 instead
353
353
  // of punching out to the live brand site.
354
- const safe = sanitizeURL(m.getWebsiteUrl());
354
+ const safe = sanitizeURL(omega.getWebsiteUrl());
355
355
  if (safe) shell.openExternal(safe);
356
356
  },
357
357
  });
@@ -477,7 +477,7 @@ const menu = {
477
477
  throw new Error('menu.define: fn must be a function');
478
478
  }
479
479
  menu._items = [];
480
- fn({ manager: menu._manager, menu: menu._buildBuilder(), defaults: menu._defaultTemplate() });
480
+ fn({ omega: menu._omega, menu: menu._buildBuilder(), defaults: menu._defaultTemplate() });
481
481
  menu._render();
482
482
  },
483
483
 
@@ -511,7 +511,7 @@ const menu = {
511
511
  isDisabled() { return Boolean(menu._disabled); },
512
512
  };
513
513
 
514
- // Mix the id-path API directly onto the singleton so `manager.menu.update(...)` works at runtime.
514
+ // Mix the id-path API directly onto the singleton so `omega.menu.update(...)` works at runtime.
515
515
  Object.assign(menu, buildIdApi({
516
516
  getItems: () => menu._items,
517
517
  render: () => menu._render(),
@@ -14,17 +14,17 @@ const logger = new LoggerLite('protocol');
14
14
 
15
15
  const protocol = {
16
16
  _initialized: false,
17
- _manager: null,
17
+ _omega: null,
18
18
  _electron: null,
19
19
  _hasLock: true,
20
20
  _schemes: [],
21
21
 
22
- initialize(manager) {
22
+ initialize(omega) {
23
23
  if (protocol._initialized) {
24
24
  return;
25
25
  }
26
26
 
27
- protocol._manager = manager;
27
+ protocol._omega = omega;
28
28
  protocol._electron = require('electron');
29
29
 
30
30
  // `app` is only defined in the main process. In renderer/preload (and in
@@ -57,9 +57,9 @@ const protocol = {
57
57
  // Register custom URL scheme. Always derived from brand.id — `<brand.id>://...` is
58
58
  // the one and only scheme. No config knob; if you need multiple schemes for the same app,
59
59
  // call `app.setAsDefaultProtocolClient(extra)` yourself in main.js.
60
- const schemes = [manager.config.brand.id];
60
+ const schemes = [omega.config.brand.id];
61
61
  protocol._schemes = schemes;
62
- if (manager.isProduction()) {
62
+ if (omega.isProduction()) {
63
63
  schemes.forEach((scheme) => {
64
64
  if (process.platform === 'win32' || process.platform === 'linux') {
65
65
  app.setAsDefaultProtocolClient(scheme, process.execPath, [process.cwd()]);
@@ -32,14 +32,14 @@ const DEFAULTS = Object.freeze({
32
32
  // const required = cfg?.versionRequired || '0.0.0';
33
33
  // if (semver.lt(app.getVersion(), required)) showForceUpdateDialog();
34
34
  // };
35
- // checkVersion(manager.remoteConfig.get()); // run at boot with defaults/cache
36
- // manager.remoteConfig.on('update', checkVersion); // re-run on every fresh fetch
35
+ // checkVersion(omega.remoteConfig.get()); // run at boot with defaults/cache
36
+ // omega.remoteConfig.on('update', checkVersion); // re-run on every fresh fetch
37
37
  //
38
38
  // API:
39
- // manager.remoteConfig.get() → entire data (defaults | cache | latest fetch)
40
- // manager.remoteConfig.get('versionRequired') → dot-path lookup
41
- // manager.remoteConfig.on('update', fn) → subscribe; returns unsub fn
42
- // manager.remoteConfig.refreshNow() → force a fetch right now (Promise<data | null>)
39
+ // omega.remoteConfig.get() → entire data (defaults | cache | latest fetch)
40
+ // omega.remoteConfig.get('versionRequired') → dot-path lookup
41
+ // omega.remoteConfig.on('update', fn) → subscribe; returns unsub fn
42
+ // omega.remoteConfig.refreshNow() → force a fetch right now (Promise<data | null>)
43
43
 
44
44
  const LoggerLite = require('./logger-lite.js');
45
45
  const fetch = require('wonderful-fetch');
@@ -53,17 +53,17 @@ const FETCH_TIMEOUT_MS = 60 * 1000; // 60s — generous; this is a once-an
53
53
 
54
54
  const remoteConfig = {
55
55
  _initialized: false,
56
- _manager: null,
56
+ _omega: null,
57
57
  _data: null,
58
58
  _intervalId: null,
59
59
  _listeners: new Set(),
60
60
  _url: null,
61
61
  _enabled: true,
62
62
 
63
- initialize(manager) {
63
+ initialize(omega) {
64
64
  if (remoteConfig._initialized) return;
65
65
  remoteConfig._initialized = true;
66
- remoteConfig._manager = manager;
66
+ remoteConfig._omega = omega;
67
67
 
68
68
  // Always seed with safe defaults FIRST so any caller reading `get()` between
69
69
  // `initialize()` and the first successful fetch sees usable values (status:
@@ -74,16 +74,16 @@ const remoteConfig = {
74
74
  // (disabled / no URL / transport gate) — the preload exposes these invokes
75
75
  // unconditionally, so an unregistered handler would reject every renderer
76
76
  // call instead of serving the defaults the early-return paths promise.
77
- manager.ipc.unhandle('desktop:remote-config:get');
78
- manager.ipc.handle('desktop:remote-config:get', (path) => remoteConfig.get(path));
79
- manager.ipc.unhandle('desktop:remote-config:refresh-now');
80
- manager.ipc.handle('desktop:remote-config:refresh-now', () => remoteConfig.refreshNow());
77
+ omega.ipc.unhandle('desktop:remote-config:get');
78
+ omega.ipc.handle('desktop:remote-config:get', (path) => remoteConfig.get(path));
79
+ omega.ipc.unhandle('desktop:remote-config:refresh-now');
80
+ omega.ipc.handle('desktop:remote-config:refresh-now', () => remoteConfig.refreshNow());
81
81
  // Broadcast updates to renderers.
82
82
  remoteConfig.on('update', (data) => {
83
- manager.ipc.broadcast('desktop:remote-config:update', data);
83
+ omega.ipc.broadcast('desktop:remote-config:update', data);
84
84
  });
85
85
 
86
- const cfg = manager.config.remoteConfig || {};
86
+ const cfg = omega.config.remoteConfig || {};
87
87
  remoteConfig._enabled = cfg.enabled !== false; // default on
88
88
 
89
89
  if (!remoteConfig._enabled) {
@@ -95,8 +95,8 @@ const remoteConfig = {
95
95
  // brand.url + the legacy convention path.
96
96
  if (cfg.url) {
97
97
  remoteConfig._url = cfg.url;
98
- } else if (manager.config.brand.url) {
99
- const base = String(manager.config.brand.url).replace(/\/$/, '');
98
+ } else if (omega.config.brand.url) {
99
+ const base = String(omega.config.brand.url).replace(/\/$/, '');
100
100
  remoteConfig._url = `${base}/data/resources/main.json`;
101
101
  }
102
102
 
@@ -115,7 +115,7 @@ const remoteConfig = {
115
115
 
116
116
  // Restore cached data on top of defaults (last-known-good wins over defaults
117
117
  // until the next successful fetch lands).
118
- const cached = manager.storage.get(STORAGE_KEY);
118
+ const cached = omega.storage.get(STORAGE_KEY);
119
119
  if (cached && typeof cached === 'object') {
120
120
  remoteConfig._data = { ...DEFAULTS, ...cached };
121
121
  }
@@ -127,9 +127,9 @@ const remoteConfig = {
127
127
  // Cadence: match auto-updater's feed-check (same "occasionally network-hits-the-internet"
128
128
  // job category). Auto-updater is wired BEFORE remote-config in boot sequence
129
129
  // so `_options` is always populated; testing collapses to 500ms via isTesting().
130
- const interval = manager.isTesting()
130
+ const interval = omega.isTesting()
131
131
  ? 500
132
- : manager.autoUpdater._options.feedCheckIntervalMs;
132
+ : omega.autoUpdater._options.feedCheckIntervalMs;
133
133
  remoteConfig._intervalId = setInterval(() => {
134
134
  remoteConfig.refreshNow().catch((e) => logger.warn(`periodic fetch failed: ${formatFetchError(e)}`));
135
135
  }, interval);
@@ -190,7 +190,7 @@ const remoteConfig = {
190
190
  // Layer fresh fetch on top of defaults so consumers can omit fields from
191
191
  // their hosted JSON and @omega.js/desktop still has sensible values.
192
192
  remoteConfig._data = { ...DEFAULTS, ...data };
193
- remoteConfig._manager.storage.set(STORAGE_KEY, data);
193
+ remoteConfig._omega.storage.set(STORAGE_KEY, data);
194
194
  remoteConfig._emit('update', remoteConfig._data);
195
195
  logger.log(`remote-config refreshed (${remoteConfig._url})`);
196
196
  return remoteConfig._data;
@@ -210,7 +210,7 @@ const remoteConfig = {
210
210
  if (remoteConfig._intervalId) clearInterval(remoteConfig._intervalId);
211
211
  remoteConfig._intervalId = null;
212
212
  remoteConfig._initialized = false;
213
- remoteConfig._manager = null;
213
+ remoteConfig._omega = null;
214
214
  remoteConfig._data = null;
215
215
  remoteConfig._listeners.clear();
216
216
  remoteConfig._url = null;
@@ -10,14 +10,14 @@
10
10
  // Fetch timeout: 60s
11
11
  //
12
12
  // The file is plain JavaScript fetched as text. It runs as an async function
13
- // body with `manager` and `require` in scope — full main-process access.
13
+ // body with `omega` and `require` in scope: full main-process access.
14
14
  // Dedup is automatic: the script's content hash is stored in electron-store and
15
15
  // the same script won't re-execute until the content changes.
16
16
  //
17
17
  // API:
18
- // manager.remoteScripts.refreshNow() → force-fetch + execute if changed
19
- // manager.remoteScripts.getLastRun() → { hash, timestamp } or null
20
- // manager.remoteScripts.clearExecuted() → wipe stored hash (forces re-run next poll)
18
+ // omega.remoteScripts.refreshNow() → force-fetch + execute if changed
19
+ // omega.remoteScripts.getLastRun() → { hash, timestamp } or null
20
+ // omega.remoteScripts.clearExecuted() → wipe stored hash (forces re-run next poll)
21
21
 
22
22
  const LoggerLite = require('./logger-lite.js');
23
23
  const fetch = require('wonderful-fetch');
@@ -31,17 +31,17 @@ const FETCH_TIMEOUT_MS = 60 * 1000;
31
31
 
32
32
  const remoteScripts = {
33
33
  _initialized: false,
34
- _manager: null,
34
+ _omega: null,
35
35
  _url: null,
36
36
  _enabled: false,
37
37
  _intervalId: null,
38
38
 
39
- initialize(manager) {
39
+ initialize(omega) {
40
40
  if (remoteScripts._initialized) return;
41
41
  remoteScripts._initialized = true;
42
- remoteScripts._manager = manager;
42
+ remoteScripts._omega = omega;
43
43
 
44
- const cfg = manager.config.remoteScripts || {};
44
+ const cfg = omega.config.remoteScripts || {};
45
45
  remoteScripts._enabled = cfg.enabled === true;
46
46
 
47
47
  if (!remoteScripts._enabled) {
@@ -51,8 +51,8 @@ const remoteScripts = {
51
51
 
52
52
  if (cfg.url) {
53
53
  remoteScripts._url = cfg.url;
54
- } else if (manager.config.brand.url) {
55
- const base = String(manager.config.brand.url).replace(/\/$/, '');
54
+ } else if (omega.config.brand.url) {
55
+ const base = String(omega.config.brand.url).replace(/\/$/, '');
56
56
  remoteScripts._url = `${base}/data/scripts/main.js`;
57
57
  }
58
58
 
@@ -72,9 +72,9 @@ const remoteScripts = {
72
72
  remoteScripts.refreshNow()
73
73
  .catch((e) => logger.warn(`initial fetch failed: ${formatFetchError(e)}`));
74
74
 
75
- const interval = manager.isTesting()
75
+ const interval = omega.isTesting()
76
76
  ? 500
77
- : manager.autoUpdater._options.feedCheckIntervalMs;
77
+ : omega.autoUpdater._options.feedCheckIntervalMs;
78
78
  remoteScripts._intervalId = setInterval(() => {
79
79
  remoteScripts.refreshNow()
80
80
  .catch((e) => logger.warn(`periodic fetch failed: ${formatFetchError(e)}`));
@@ -114,31 +114,31 @@ const remoteScripts = {
114
114
  logger.error(`remote-scripts: script threw: ${e.message}`);
115
115
  }
116
116
 
117
- remoteScripts._manager.storage.set(STORAGE_KEY, { hash, timestamp: Date.now() });
117
+ remoteScripts._omega.storage.set(STORAGE_KEY, { hash, timestamp: Date.now() });
118
118
  return { hash };
119
119
  },
120
120
 
121
121
  getLastRun() {
122
- if (!remoteScripts._manager) return null;
123
- return remoteScripts._manager.storage.get(STORAGE_KEY) || null;
122
+ if (!remoteScripts._omega) return null;
123
+ return remoteScripts._omega.storage.get(STORAGE_KEY) || null;
124
124
  },
125
125
 
126
126
  clearExecuted() {
127
- if (!remoteScripts._manager) return;
128
- remoteScripts._manager.storage.set(STORAGE_KEY, null);
127
+ if (!remoteScripts._omega) return;
128
+ remoteScripts._omega.storage.set(STORAGE_KEY, null);
129
129
  },
130
130
 
131
131
  // ─── Internals ──────────────────────────────────────────────────────────────
132
132
 
133
133
  async _execute(code) {
134
- const manager = remoteScripts._manager;
134
+ const omega = remoteScripts._omega;
135
135
 
136
136
  // The real `require`, handed to the script: it is compiled by
137
137
  // `new AsyncFunction`, so it has no module scope of its own and no bundler
138
138
  // ever sees its body.
139
139
  const AsyncFunction = Object.getPrototypeOf(async function () {}).constructor;
140
- const fn = new AsyncFunction('manager', 'require', code);
141
- await fn(manager, require);
140
+ const fn = new AsyncFunction('omega', 'require', code);
141
+ await fn(omega, require);
142
142
  },
143
143
 
144
144
  _hash(str) {
@@ -149,7 +149,7 @@ const remoteScripts = {
149
149
  if (remoteScripts._intervalId) clearInterval(remoteScripts._intervalId);
150
150
  remoteScripts._intervalId = null;
151
151
  remoteScripts._initialized = false;
152
- remoteScripts._manager = null;
152
+ remoteScripts._omega = null;
153
153
  remoteScripts._url = null;
154
154
  remoteScripts._enabled = false;
155
155
  },