@omega.js/desktop 0.1.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 (818) hide show
  1. package/LICENSE +98 -0
  2. package/README.md +166 -0
  3. package/bin/omega +2 -0
  4. package/bin/omega-desktop +2 -0
  5. package/bin/omg +2 -0
  6. package/dist/assets/css/core/_fontawesome.scss +146 -0
  7. package/dist/assets/css/core/_initialize.scss +38 -0
  8. package/dist/assets/css/omega-desktop.scss +39 -0
  9. package/dist/assets/css/shell/_index.scss +207 -0
  10. package/dist/assets/css/tokens/_index.scss +166 -0
  11. package/dist/assets/js/bootstrap.bundle.js +1 -0
  12. package/dist/assets/js/core/app-shell.js +136 -0
  13. package/dist/assets/themes/_template/README.md +115 -0
  14. package/dist/assets/themes/_template/_config.scss +60 -0
  15. package/dist/assets/themes/_template/_theme.js +14 -0
  16. package/dist/assets/themes/_template/_theme.scss +28 -0
  17. package/dist/assets/themes/_template/css/base/_root.scss +19 -0
  18. package/dist/assets/themes/_template/css/components/_components.scss +23 -0
  19. package/dist/assets/themes/base/README.md +5 -0
  20. package/dist/assets/themes/base/_components/data/org-chart/component.html +33 -0
  21. package/dist/assets/themes/base/_components/data/org-chart/component.json5 +33 -0
  22. package/dist/assets/themes/base/_components/data/org-chart/component.scss +183 -0
  23. package/dist/assets/themes/base/_components/heading/masthead/component.html +22 -0
  24. package/dist/assets/themes/base/_components/heading/masthead/component.json5 +30 -0
  25. package/dist/assets/themes/base/_components/heading/section-head/component.html +18 -0
  26. package/dist/assets/themes/base/_components/heading/section-head/component.json5 +27 -0
  27. package/dist/assets/themes/base/_components/pricing/features/component.html +29 -0
  28. package/dist/assets/themes/base/_components/pricing/features/component.json5 +30 -0
  29. package/dist/assets/themes/base/_hero/orbit/index.html +30 -0
  30. package/dist/assets/themes/base/_hero/orbit/script.js +33 -0
  31. package/dist/assets/themes/base/_hero/orbit/style.scss +133 -0
  32. package/dist/assets/themes/base/_includes/admin/sections/sidebar.html +3 -0
  33. package/dist/assets/themes/base/_includes/admin/sections/topbar.html +3 -0
  34. package/dist/assets/themes/base/_includes/backend/sections/sidebar.html +3 -0
  35. package/dist/assets/themes/base/_includes/backend/sections/topbar.html +3 -0
  36. package/dist/assets/themes/base/_includes/frontend/components/connection-card.html +49 -0
  37. package/dist/assets/themes/base/_includes/frontend/components/post-card.html +54 -0
  38. package/dist/assets/themes/base/_includes/frontend/sections/account-connections.html +42 -0
  39. package/dist/assets/themes/base/_includes/frontend/sections/account-section-header.html +11 -0
  40. package/dist/assets/themes/base/_includes/frontend/sections/footer.html +154 -0
  41. package/dist/assets/themes/base/_includes/frontend/sections/nav.html +276 -0
  42. package/dist/assets/themes/base/_includes/global/sections/account.html +72 -0
  43. package/dist/assets/themes/base/_includes/global/sections/app-sidebar.html +248 -0
  44. package/dist/assets/themes/base/_includes/global/sections/app-topbar.html +228 -0
  45. package/dist/assets/themes/base/_includes/global/sections/page-header.html +99 -0
  46. package/dist/assets/themes/base/_layouts/admin/core/minimal-viewport-locked.html +22 -0
  47. package/dist/assets/themes/base/_layouts/admin/core/minimal.html +23 -0
  48. package/dist/assets/themes/base/_layouts/backend/core/base.html +57 -0
  49. package/dist/assets/themes/base/_layouts/backend/core/minimal-viewport-locked.html +32 -0
  50. package/dist/assets/themes/base/_layouts/backend/core/minimal.html +32 -0
  51. package/dist/assets/themes/base/_layouts/backend/pages/dashboard/index.html +230 -0
  52. package/dist/assets/themes/base/_layouts/frontend/core/base.html +31 -0
  53. package/dist/assets/themes/base/_layouts/frontend/core/cover.html +40 -0
  54. package/dist/assets/themes/base/_layouts/frontend/core/minimal.html +47 -0
  55. package/dist/assets/themes/base/_layouts/frontend/pages/404.html +54 -0
  56. package/dist/assets/themes/base/_layouts/frontend/pages/about.html +144 -0
  57. package/dist/assets/themes/base/_layouts/frontend/pages/account/index.html +2104 -0
  58. package/dist/assets/themes/base/_layouts/frontend/pages/alternatives/alternative.html +319 -0
  59. package/dist/assets/themes/base/_layouts/frontend/pages/alternatives/index.html +186 -0
  60. package/dist/assets/themes/base/_layouts/frontend/pages/app.html +142 -0
  61. package/dist/assets/themes/base/_layouts/frontend/pages/auth/reset.html +53 -0
  62. package/dist/assets/themes/base/_layouts/frontend/pages/auth/signin.html +90 -0
  63. package/dist/assets/themes/base/_layouts/frontend/pages/auth/signup.html +141 -0
  64. package/dist/assets/themes/base/_layouts/frontend/pages/auth/token.html +44 -0
  65. package/dist/assets/themes/base/_layouts/frontend/pages/blog/categories/category.html +88 -0
  66. package/dist/assets/themes/base/_layouts/frontend/pages/blog/categories/index.html +88 -0
  67. package/dist/assets/themes/base/_layouts/frontend/pages/blog/index.html +255 -0
  68. package/dist/assets/themes/base/_layouts/frontend/pages/blog/post.html +261 -0
  69. package/dist/assets/themes/base/_layouts/frontend/pages/blog/tags/index.html +84 -0
  70. package/dist/assets/themes/base/_layouts/frontend/pages/blog/tags/tag.html +88 -0
  71. package/dist/assets/themes/base/_layouts/frontend/pages/collection/category.html +72 -0
  72. package/dist/assets/themes/base/_layouts/frontend/pages/collection/document.html +54 -0
  73. package/dist/assets/themes/base/_layouts/frontend/pages/collection/index.html +84 -0
  74. package/dist/assets/themes/base/_layouts/frontend/pages/connections/callback.html +55 -0
  75. package/dist/assets/themes/base/_layouts/frontend/pages/contact.html +214 -0
  76. package/dist/assets/themes/base/_layouts/frontend/pages/download.html +793 -0
  77. package/dist/assets/themes/base/_layouts/frontend/pages/extension/index.html +253 -0
  78. package/dist/assets/themes/base/_layouts/frontend/pages/extension/installed.html +198 -0
  79. package/dist/assets/themes/base/_layouts/frontend/pages/feedback.html +171 -0
  80. package/dist/assets/themes/base/_layouts/frontend/pages/index.html +66 -0
  81. package/dist/assets/themes/base/_layouts/frontend/pages/legal/document.html +78 -0
  82. package/dist/assets/themes/base/_layouts/frontend/pages/payment/checkout.html +459 -0
  83. package/dist/assets/themes/base/_layouts/frontend/pages/payment/confirmation.html +131 -0
  84. package/dist/assets/themes/base/_layouts/frontend/pages/portal/email-preferences.html +104 -0
  85. package/dist/assets/themes/base/_layouts/frontend/pages/pricing.html +596 -0
  86. package/dist/assets/themes/base/_layouts/frontend/pages/status.html +361 -0
  87. package/dist/assets/themes/base/_layouts/frontend/pages/team/index.html +210 -0
  88. package/dist/assets/themes/base/_layouts/frontend/pages/team/member.html +125 -0
  89. package/dist/assets/themes/base/_layouts/frontend/pages/updates/index.html +119 -0
  90. package/dist/assets/themes/base/_layouts/frontend/pages/updates/update.html +118 -0
  91. package/dist/assets/themes/base/_sections/about/hero/section.html +68 -0
  92. package/dist/assets/themes/base/_sections/about/hero/section.json5 +58 -0
  93. package/dist/assets/themes/base/_sections/about/letter/section.html +60 -0
  94. package/dist/assets/themes/base/_sections/about/letter/section.json5 +56 -0
  95. package/dist/assets/themes/base/_sections/about/photo-band/section.html +24 -0
  96. package/dist/assets/themes/base/_sections/about/photo-band/section.json5 +23 -0
  97. package/dist/assets/themes/base/_sections/about/principles/section.html +17 -0
  98. package/dist/assets/themes/base/_sections/about/principles/section.json5 +34 -0
  99. package/dist/assets/themes/base/_sections/about/timeline/section.html +20 -0
  100. package/dist/assets/themes/base/_sections/about/timeline/section.json5 +34 -0
  101. package/dist/assets/themes/base/_sections/marketing/bento/section.html +91 -0
  102. package/dist/assets/themes/base/_sections/marketing/bento/section.json5 +152 -0
  103. package/dist/assets/themes/base/_sections/marketing/cta/section.html +44 -0
  104. package/dist/assets/themes/base/_sections/marketing/cta/section.json5 +47 -0
  105. package/dist/assets/themes/base/_sections/marketing/faq/section.html +52 -0
  106. package/dist/assets/themes/base/_sections/marketing/faq/section.json5 +68 -0
  107. package/dist/assets/themes/base/_sections/marketing/hero/section.html +349 -0
  108. package/dist/assets/themes/base/_sections/marketing/hero/section.json5 +335 -0
  109. package/dist/assets/themes/base/_sections/marketing/newsletter-cta/section.html +38 -0
  110. package/dist/assets/themes/base/_sections/marketing/newsletter-cta/section.js +86 -0
  111. package/dist/assets/themes/base/_sections/marketing/newsletter-cta/section.json5 +29 -0
  112. package/dist/assets/themes/base/_sections/marketing/pricing-cards/section.html +115 -0
  113. package/dist/assets/themes/base/_sections/marketing/pricing-cards/section.json5 +72 -0
  114. package/dist/assets/themes/base/_sections/marketing/product-demo/section.html +62 -0
  115. package/dist/assets/themes/base/_sections/marketing/product-demo/section.js +44 -0
  116. package/dist/assets/themes/base/_sections/marketing/product-demo/section.json5 +52 -0
  117. package/dist/assets/themes/base/_sections/marketing/prose/section.html +22 -0
  118. package/dist/assets/themes/base/_sections/marketing/prose/section.json5 +41 -0
  119. package/dist/assets/themes/base/_sections/marketing/showcase/section.html +35 -0
  120. package/dist/assets/themes/base/_sections/marketing/showcase/section.json5 +52 -0
  121. package/dist/assets/themes/base/_sections/marketing/stats/section.html +32 -0
  122. package/dist/assets/themes/base/_sections/marketing/stats/section.json5 +44 -0
  123. package/dist/assets/themes/base/_sections/marketing/testimonials/section.html +54 -0
  124. package/dist/assets/themes/base/_sections/marketing/testimonials/section.json5 +70 -0
  125. package/dist/assets/themes/base/_sections/marketing/trusted-by/section.html +30 -0
  126. package/dist/assets/themes/base/_sections/marketing/trusted-by/section.json5 +38 -0
  127. package/dist/assets/themes/base/_sections/verts/unit/section.html +7 -0
  128. package/dist/assets/themes/base/_sections/verts/unit/section.js +22 -0
  129. package/dist/assets/themes/base/_sections/verts/unit/section.json5 +24 -0
  130. package/dist/assets/themes/base/_sections/verts/unit/section.scss +24 -0
  131. package/dist/assets/themes/base/_theme.js +13 -0
  132. package/dist/assets/themes/base/_theme.scss +4 -0
  133. package/dist/assets/themes/bootstrap/_theme.js +16 -0
  134. package/dist/assets/themes/bootstrap/_theme.scss +11 -0
  135. package/dist/assets/themes/bootstrap/js/index.esm.js +19 -0
  136. package/dist/assets/themes/bootstrap/js/index.umd.js +34 -0
  137. package/dist/assets/themes/bootstrap/js/src/alert.js +87 -0
  138. package/dist/assets/themes/bootstrap/js/src/base-component.js +86 -0
  139. package/dist/assets/themes/bootstrap/js/src/button.js +72 -0
  140. package/dist/assets/themes/bootstrap/js/src/carousel.js +474 -0
  141. package/dist/assets/themes/bootstrap/js/src/collapse.js +297 -0
  142. package/dist/assets/themes/bootstrap/js/src/dom/data.js +55 -0
  143. package/dist/assets/themes/bootstrap/js/src/dom/event-handler.js +317 -0
  144. package/dist/assets/themes/bootstrap/js/src/dom/manipulator.js +71 -0
  145. package/dist/assets/themes/bootstrap/js/src/dom/selector-engine.js +126 -0
  146. package/dist/assets/themes/bootstrap/js/src/dropdown.js +458 -0
  147. package/dist/assets/themes/bootstrap/js/src/modal.js +378 -0
  148. package/dist/assets/themes/bootstrap/js/src/offcanvas.js +282 -0
  149. package/dist/assets/themes/bootstrap/js/src/popover.js +97 -0
  150. package/dist/assets/themes/bootstrap/js/src/scrollspy.js +296 -0
  151. package/dist/assets/themes/bootstrap/js/src/tab.js +315 -0
  152. package/dist/assets/themes/bootstrap/js/src/toast.js +224 -0
  153. package/dist/assets/themes/bootstrap/js/src/tooltip.js +632 -0
  154. package/dist/assets/themes/bootstrap/js/src/util/backdrop.js +151 -0
  155. package/dist/assets/themes/bootstrap/js/src/util/component-functions.js +35 -0
  156. package/dist/assets/themes/bootstrap/js/src/util/config.js +65 -0
  157. package/dist/assets/themes/bootstrap/js/src/util/focustrap.js +115 -0
  158. package/dist/assets/themes/bootstrap/js/src/util/index.js +306 -0
  159. package/dist/assets/themes/bootstrap/js/src/util/sanitizer.js +117 -0
  160. package/dist/assets/themes/bootstrap/js/src/util/scrollbar.js +114 -0
  161. package/dist/assets/themes/bootstrap/js/src/util/swipe.js +146 -0
  162. package/dist/assets/themes/bootstrap/js/src/util/template-factory.js +160 -0
  163. package/dist/assets/themes/bootstrap/overrides/_accordion.scss +21 -0
  164. package/dist/assets/themes/bootstrap/overrides/_avatars.scss +51 -0
  165. package/dist/assets/themes/bootstrap/overrides/_blog-images.scss +45 -0
  166. package/dist/assets/themes/bootstrap/overrides/_buttons-adaptive.scss +141 -0
  167. package/dist/assets/themes/bootstrap/overrides/_color-shades.scss +25 -0
  168. package/dist/assets/themes/bootstrap/overrides/_cursor-utilities.scss +13 -0
  169. package/dist/assets/themes/bootstrap/overrides/_index.scss +30 -0
  170. package/dist/assets/themes/bootstrap/overrides/_links.scss +26 -0
  171. package/dist/assets/themes/bootstrap/overrides/_soft-colors.scss +99 -0
  172. package/dist/assets/themes/bootstrap/overrides/_spacing-extended.scss +74 -0
  173. package/dist/assets/themes/bootstrap/overrides/_spinners.scss +22 -0
  174. package/dist/assets/themes/bootstrap/overrides/_typography-utilities.scss +40 -0
  175. package/dist/assets/themes/bootstrap/scss/_accordion.scss +153 -0
  176. package/dist/assets/themes/bootstrap/scss/_alert.scss +68 -0
  177. package/dist/assets/themes/bootstrap/scss/_badge.scss +38 -0
  178. package/dist/assets/themes/bootstrap/scss/_breadcrumb.scss +40 -0
  179. package/dist/assets/themes/bootstrap/scss/_button-group.scss +147 -0
  180. package/dist/assets/themes/bootstrap/scss/_buttons.scss +216 -0
  181. package/dist/assets/themes/bootstrap/scss/_card.scss +238 -0
  182. package/dist/assets/themes/bootstrap/scss/_carousel.scss +226 -0
  183. package/dist/assets/themes/bootstrap/scss/_close.scss +66 -0
  184. package/dist/assets/themes/bootstrap/scss/_containers.scss +41 -0
  185. package/dist/assets/themes/bootstrap/scss/_dropdown.scss +250 -0
  186. package/dist/assets/themes/bootstrap/scss/_forms.scss +9 -0
  187. package/dist/assets/themes/bootstrap/scss/_functions.scss +302 -0
  188. package/dist/assets/themes/bootstrap/scss/_grid.scss +39 -0
  189. package/dist/assets/themes/bootstrap/scss/_helpers.scss +12 -0
  190. package/dist/assets/themes/bootstrap/scss/_images.scss +42 -0
  191. package/dist/assets/themes/bootstrap/scss/_list-group.scss +199 -0
  192. package/dist/assets/themes/bootstrap/scss/_maps.scss +174 -0
  193. package/dist/assets/themes/bootstrap/scss/_mixins.scss +42 -0
  194. package/dist/assets/themes/bootstrap/scss/_modal.scss +240 -0
  195. package/dist/assets/themes/bootstrap/scss/_nav.scss +197 -0
  196. package/dist/assets/themes/bootstrap/scss/_navbar.scss +289 -0
  197. package/dist/assets/themes/bootstrap/scss/_offcanvas.scss +147 -0
  198. package/dist/assets/themes/bootstrap/scss/_pagination.scss +109 -0
  199. package/dist/assets/themes/bootstrap/scss/_placeholders.scss +51 -0
  200. package/dist/assets/themes/bootstrap/scss/_popover.scss +196 -0
  201. package/dist/assets/themes/bootstrap/scss/_progress.scss +68 -0
  202. package/dist/assets/themes/bootstrap/scss/_reboot.scss +611 -0
  203. package/dist/assets/themes/bootstrap/scss/_root.scss +187 -0
  204. package/dist/assets/themes/bootstrap/scss/_spinners.scss +85 -0
  205. package/dist/assets/themes/bootstrap/scss/_tables.scss +171 -0
  206. package/dist/assets/themes/bootstrap/scss/_toasts.scss +73 -0
  207. package/dist/assets/themes/bootstrap/scss/_tooltip.scss +119 -0
  208. package/dist/assets/themes/bootstrap/scss/_transitions.scss +27 -0
  209. package/dist/assets/themes/bootstrap/scss/_type.scss +106 -0
  210. package/dist/assets/themes/bootstrap/scss/_utilities.scss +806 -0
  211. package/dist/assets/themes/bootstrap/scss/_variables-dark.scss +102 -0
  212. package/dist/assets/themes/bootstrap/scss/_variables.scss +1753 -0
  213. package/dist/assets/themes/bootstrap/scss/bootstrap-grid.scss +62 -0
  214. package/dist/assets/themes/bootstrap/scss/bootstrap-reboot.scss +10 -0
  215. package/dist/assets/themes/bootstrap/scss/bootstrap-utilities.scss +19 -0
  216. package/dist/assets/themes/bootstrap/scss/bootstrap.scss +52 -0
  217. package/dist/assets/themes/bootstrap/scss/forms/_floating-labels.scss +97 -0
  218. package/dist/assets/themes/bootstrap/scss/forms/_form-check.scss +189 -0
  219. package/dist/assets/themes/bootstrap/scss/forms/_form-control.scss +214 -0
  220. package/dist/assets/themes/bootstrap/scss/forms/_form-range.scss +91 -0
  221. package/dist/assets/themes/bootstrap/scss/forms/_form-select.scss +80 -0
  222. package/dist/assets/themes/bootstrap/scss/forms/_form-text.scss +11 -0
  223. package/dist/assets/themes/bootstrap/scss/forms/_input-group.scss +132 -0
  224. package/dist/assets/themes/bootstrap/scss/forms/_labels.scss +36 -0
  225. package/dist/assets/themes/bootstrap/scss/forms/_validation.scss +12 -0
  226. package/dist/assets/themes/bootstrap/scss/helpers/_clearfix.scss +3 -0
  227. package/dist/assets/themes/bootstrap/scss/helpers/_color-bg.scss +7 -0
  228. package/dist/assets/themes/bootstrap/scss/helpers/_colored-links.scss +30 -0
  229. package/dist/assets/themes/bootstrap/scss/helpers/_focus-ring.scss +5 -0
  230. package/dist/assets/themes/bootstrap/scss/helpers/_icon-link.scss +25 -0
  231. package/dist/assets/themes/bootstrap/scss/helpers/_position.scss +36 -0
  232. package/dist/assets/themes/bootstrap/scss/helpers/_ratio.scss +26 -0
  233. package/dist/assets/themes/bootstrap/scss/helpers/_stacks.scss +15 -0
  234. package/dist/assets/themes/bootstrap/scss/helpers/_stretched-link.scss +15 -0
  235. package/dist/assets/themes/bootstrap/scss/helpers/_text-truncation.scss +7 -0
  236. package/dist/assets/themes/bootstrap/scss/helpers/_visually-hidden.scss +8 -0
  237. package/dist/assets/themes/bootstrap/scss/helpers/_vr.scss +8 -0
  238. package/dist/assets/themes/bootstrap/scss/mixins/_alert.scss +18 -0
  239. package/dist/assets/themes/bootstrap/scss/mixins/_backdrop.scss +14 -0
  240. package/dist/assets/themes/bootstrap/scss/mixins/_banner.scss +7 -0
  241. package/dist/assets/themes/bootstrap/scss/mixins/_border-radius.scss +78 -0
  242. package/dist/assets/themes/bootstrap/scss/mixins/_box-shadow.scss +18 -0
  243. package/dist/assets/themes/bootstrap/scss/mixins/_breakpoints.scss +127 -0
  244. package/dist/assets/themes/bootstrap/scss/mixins/_buttons.scss +70 -0
  245. package/dist/assets/themes/bootstrap/scss/mixins/_caret.scss +69 -0
  246. package/dist/assets/themes/bootstrap/scss/mixins/_clearfix.scss +9 -0
  247. package/dist/assets/themes/bootstrap/scss/mixins/_color-mode.scss +21 -0
  248. package/dist/assets/themes/bootstrap/scss/mixins/_color-scheme.scss +7 -0
  249. package/dist/assets/themes/bootstrap/scss/mixins/_container.scss +11 -0
  250. package/dist/assets/themes/bootstrap/scss/mixins/_deprecate.scss +10 -0
  251. package/dist/assets/themes/bootstrap/scss/mixins/_forms.scss +163 -0
  252. package/dist/assets/themes/bootstrap/scss/mixins/_gradients.scss +47 -0
  253. package/dist/assets/themes/bootstrap/scss/mixins/_grid.scss +151 -0
  254. package/dist/assets/themes/bootstrap/scss/mixins/_image.scss +16 -0
  255. package/dist/assets/themes/bootstrap/scss/mixins/_list-group.scss +26 -0
  256. package/dist/assets/themes/bootstrap/scss/mixins/_lists.scss +7 -0
  257. package/dist/assets/themes/bootstrap/scss/mixins/_pagination.scss +10 -0
  258. package/dist/assets/themes/bootstrap/scss/mixins/_reset-text.scss +17 -0
  259. package/dist/assets/themes/bootstrap/scss/mixins/_resize.scss +6 -0
  260. package/dist/assets/themes/bootstrap/scss/mixins/_table-variants.scss +24 -0
  261. package/dist/assets/themes/bootstrap/scss/mixins/_text-truncate.scss +8 -0
  262. package/dist/assets/themes/bootstrap/scss/mixins/_transition.scss +26 -0
  263. package/dist/assets/themes/bootstrap/scss/mixins/_utilities.scss +97 -0
  264. package/dist/assets/themes/bootstrap/scss/mixins/_visually-hidden.scss +38 -0
  265. package/dist/assets/themes/bootstrap/scss/tests/jasmine.js +16 -0
  266. package/dist/assets/themes/bootstrap/scss/tests/mixins/_auto-import-of-variables-dark.test.scss +7 -0
  267. package/dist/assets/themes/bootstrap/scss/tests/mixins/_color-modes.test.scss +69 -0
  268. package/dist/assets/themes/bootstrap/scss/tests/mixins/_media-query-color-mode-full.test.scss +8 -0
  269. package/dist/assets/themes/bootstrap/scss/tests/mixins/_utilities.test.scss +393 -0
  270. package/dist/assets/themes/bootstrap/scss/tests/sass-true/register.js +14 -0
  271. package/dist/assets/themes/bootstrap/scss/tests/sass-true/runner.js +17 -0
  272. package/dist/assets/themes/bootstrap/scss/tests/utilities/_api.test.scss +75 -0
  273. package/dist/assets/themes/bootstrap/scss/utilities/_api.scss +47 -0
  274. package/dist/assets/themes/bootstrap/scss/vendor/_rfs.scss +348 -0
  275. package/dist/assets/themes/classy/README.md +89 -0
  276. package/dist/assets/themes/classy/_config.scss +245 -0
  277. package/dist/assets/themes/classy/_theme.js +31 -0
  278. package/dist/assets/themes/classy/_theme.scss +57 -0
  279. package/dist/assets/themes/classy/css/app/_panels.scss +183 -0
  280. package/dist/assets/themes/classy/css/base/_fonts.scss +79 -0
  281. package/dist/assets/themes/classy/css/base/_no-raise.scss +49 -0
  282. package/dist/assets/themes/classy/css/base/_root.scss +113 -0
  283. package/dist/assets/themes/classy/css/base/_typography.scss +154 -0
  284. package/dist/assets/themes/classy/css/base/_utilities.scss +284 -0
  285. package/dist/assets/themes/classy/css/components/_alerts.scss +51 -0
  286. package/dist/assets/themes/classy/css/components/_badges.scss +46 -0
  287. package/dist/assets/themes/classy/css/components/_buttons.scss +175 -0
  288. package/dist/assets/themes/classy/css/components/_cards.scss +41 -0
  289. package/dist/assets/themes/classy/css/components/_dropdowns.scss +48 -0
  290. package/dist/assets/themes/classy/css/components/_forms.scss +171 -0
  291. package/dist/assets/themes/classy/css/components/_receipt.scss +45 -0
  292. package/dist/assets/themes/classy/css/layout/_footer.scss +298 -0
  293. package/dist/assets/themes/classy/css/layout/_general.scss +209 -0
  294. package/dist/assets/themes/classy/css/layout/_nav.scss +154 -0
  295. package/dist/assets/themes/classy/css/layout/_shell.scss +458 -0
  296. package/dist/assets/themes/classy/css/marketing/_bento.scss +238 -0
  297. package/dist/assets/themes/classy/css/marketing/_content.scss +1328 -0
  298. package/dist/assets/themes/classy/css/marketing/_downloads.scss +246 -0
  299. package/dist/assets/themes/classy/css/marketing/_hero.scss +311 -0
  300. package/dist/assets/themes/classy/css/marketing/_sections.scss +649 -0
  301. package/dist/assets/themes/classy/css/pages/404/index.scss +67 -0
  302. package/dist/assets/themes/classy/css/pages/_auth.scss +235 -0
  303. package/dist/assets/themes/classy/css/pages/admin/firebase/index.scss +22 -0
  304. package/dist/assets/themes/classy/css/pages/blog/[slug].scss +56 -0
  305. package/dist/assets/themes/classy/css/pages/cookies.scss +2 -0
  306. package/dist/assets/themes/classy/css/pages/dashboard/account/index.scss +31 -0
  307. package/dist/assets/themes/classy/css/pages/feedback/index.scss +39 -0
  308. package/dist/assets/themes/classy/css/pages/legal/_document.scss +192 -0
  309. package/dist/assets/themes/classy/css/pages/payment/checkout/index.scss +585 -0
  310. package/dist/assets/themes/classy/css/pages/payment/confirmation/index.scss +9 -0
  311. package/dist/assets/themes/classy/css/pages/privacy.scss +2 -0
  312. package/dist/assets/themes/classy/css/pages/status/index.scss +164 -0
  313. package/dist/assets/themes/classy/css/pages/terms.scss +2 -0
  314. package/dist/assets/themes/classy/css/pages/updates/index.scss +128 -0
  315. package/dist/assets/themes/classy/fonts/inter-italic-latin-ext.woff2 +0 -0
  316. package/dist/assets/themes/classy/fonts/inter-italic-latin.woff2 +0 -0
  317. package/dist/assets/themes/classy/fonts/inter-normal-latin-ext.woff2 +0 -0
  318. package/dist/assets/themes/classy/fonts/inter-normal-latin.woff2 +0 -0
  319. package/dist/assets/themes/classy/fonts/newsreader-italic-latin-ext.woff2 +0 -0
  320. package/dist/assets/themes/classy/fonts/newsreader-italic-latin.woff2 +0 -0
  321. package/dist/assets/themes/classy/fonts/newsreader-normal-latin-ext.woff2 +0 -0
  322. package/dist/assets/themes/classy/fonts/newsreader-normal-latin.woff2 +0 -0
  323. package/dist/assets/themes/classy/js/hero-demo-form.js +56 -0
  324. package/dist/assets/themes/neobrutalism/README.md +118 -0
  325. package/dist/assets/themes/neobrutalism/_config.scss +139 -0
  326. package/dist/assets/themes/neobrutalism/_layouts/frontend/core/base.html +30 -0
  327. package/dist/assets/themes/neobrutalism/_layouts/frontend/pages/index.html +275 -0
  328. package/dist/assets/themes/neobrutalism/_theme.js +24 -0
  329. package/dist/assets/themes/neobrutalism/_theme.scss +61 -0
  330. package/dist/assets/themes/neobrutalism/css/base/_mixins.scss +46 -0
  331. package/dist/assets/themes/neobrutalism/css/base/_root.scss +169 -0
  332. package/dist/assets/themes/neobrutalism/css/base/_typography.scss +61 -0
  333. package/dist/assets/themes/neobrutalism/css/base/_utilities.scss +89 -0
  334. package/dist/assets/themes/neobrutalism/css/components/_billing-toggle.scss +74 -0
  335. package/dist/assets/themes/neobrutalism/css/components/_buttons.scss +148 -0
  336. package/dist/assets/themes/neobrutalism/css/components/_cards.scss +47 -0
  337. package/dist/assets/themes/neobrutalism/css/components/_forms.scss +88 -0
  338. package/dist/assets/themes/neobrutalism/css/components/_marketing.scss +244 -0
  339. package/dist/assets/themes/neobrutalism/css/layout/_general.scss +213 -0
  340. package/dist/assets/themes/neobrutalism/css/layout/_navigation.scss +171 -0
  341. package/dist/assets/themes/neobrutalism/css/pages/index.scss +203 -0
  342. package/dist/assets/themes/neobrutalism/css/pages/pricing/index.scss +58 -0
  343. package/dist/assets/themes/neobrutalism/css/pages/test/libraries/layers/index.scss +7 -0
  344. package/dist/assets/themes/neobrutalism/js/pages/test/libraries/layers/index.js +9 -0
  345. package/dist/assets/themes/newsflash/README.md +117 -0
  346. package/dist/assets/themes/newsflash/_components/heading/lede/component.html +14 -0
  347. package/dist/assets/themes/newsflash/_components/heading/lede/component.json5 +23 -0
  348. package/dist/assets/themes/newsflash/_components/heading/rule-head/component.html +17 -0
  349. package/dist/assets/themes/newsflash/_components/heading/rule-head/component.json5 +23 -0
  350. package/dist/assets/themes/newsflash/_components/news/byline/component.html +12 -0
  351. package/dist/assets/themes/newsflash/_components/news/byline/component.json5 +18 -0
  352. package/dist/assets/themes/newsflash/_components/news/story-card/component.html +25 -0
  353. package/dist/assets/themes/newsflash/_components/news/story-card/component.json5 +21 -0
  354. package/dist/assets/themes/newsflash/_config.scss +147 -0
  355. package/dist/assets/themes/newsflash/_layouts/frontend/core/base.html +51 -0
  356. package/dist/assets/themes/newsflash/_layouts/frontend/pages/blog/index.html +299 -0
  357. package/dist/assets/themes/newsflash/_layouts/frontend/pages/blog/post.html +235 -0
  358. package/dist/assets/themes/newsflash/_layouts/frontend/pages/index.html +328 -0
  359. package/dist/assets/themes/newsflash/_sections/marketing/desks/section.html +39 -0
  360. package/dist/assets/themes/newsflash/_sections/marketing/desks/section.json5 +49 -0
  361. package/dist/assets/themes/newsflash/_sections/marketing/newsletter-cta/section.html +103 -0
  362. package/dist/assets/themes/newsflash/_sections/marketing/newsletter-cta/section.json5 +50 -0
  363. package/dist/assets/themes/newsflash/_sections/marketing/rundown/section.html +28 -0
  364. package/dist/assets/themes/newsflash/_sections/marketing/rundown/section.json5 +40 -0
  365. package/dist/assets/themes/newsflash/_theme.js +24 -0
  366. package/dist/assets/themes/newsflash/_theme.scss +70 -0
  367. package/dist/assets/themes/newsflash/css/base/_fonts.scss +80 -0
  368. package/dist/assets/themes/newsflash/css/base/_mixins.scss +51 -0
  369. package/dist/assets/themes/newsflash/css/base/_root.scss +257 -0
  370. package/dist/assets/themes/newsflash/css/base/_typography.scss +49 -0
  371. package/dist/assets/themes/newsflash/css/base/_utilities.scss +122 -0
  372. package/dist/assets/themes/newsflash/css/components/_badges.scss +65 -0
  373. package/dist/assets/themes/newsflash/css/components/_billing-toggle.scss +61 -0
  374. package/dist/assets/themes/newsflash/css/components/_buttons.scss +139 -0
  375. package/dist/assets/themes/newsflash/css/components/_cards.scss +47 -0
  376. package/dist/assets/themes/newsflash/css/components/_editorial.scss +173 -0
  377. package/dist/assets/themes/newsflash/css/components/_forms.scss +75 -0
  378. package/dist/assets/themes/newsflash/css/components/_infinite-scroll.scss +102 -0
  379. package/dist/assets/themes/newsflash/css/components/_panels.scss +156 -0
  380. package/dist/assets/themes/newsflash/css/components/_ticker.scss +67 -0
  381. package/dist/assets/themes/newsflash/css/layout/_general.scss +330 -0
  382. package/dist/assets/themes/newsflash/css/layout/_navigation.scss +168 -0
  383. package/dist/assets/themes/newsflash/css/pages/404/index.scss +79 -0
  384. package/dist/assets/themes/newsflash/css/pages/blog/[slug].scss +186 -0
  385. package/dist/assets/themes/newsflash/css/pages/blog/index.scss +17 -0
  386. package/dist/assets/themes/newsflash/css/pages/index.scss +157 -0
  387. package/dist/assets/themes/newsflash/css/pages/pricing/index.scss +55 -0
  388. package/dist/assets/themes/newsflash/css/pages/test/libraries/layers/index.scss +7 -0
  389. package/dist/assets/themes/newsflash/fonts/fraunces-italic-latin-ext.woff2 +0 -0
  390. package/dist/assets/themes/newsflash/fonts/fraunces-italic-latin.woff2 +0 -0
  391. package/dist/assets/themes/newsflash/fonts/fraunces-normal-latin-ext.woff2 +0 -0
  392. package/dist/assets/themes/newsflash/fonts/fraunces-normal-latin.woff2 +0 -0
  393. package/dist/assets/themes/newsflash/fonts/schibsted-grotesk-italic-latin-ext.woff2 +0 -0
  394. package/dist/assets/themes/newsflash/fonts/schibsted-grotesk-italic-latin.woff2 +0 -0
  395. package/dist/assets/themes/newsflash/fonts/schibsted-grotesk-normal-latin-ext.woff2 +0 -0
  396. package/dist/assets/themes/newsflash/fonts/schibsted-grotesk-normal-latin.woff2 +0 -0
  397. package/dist/assets/themes/newsflash/js/pages/blog/[slug].js +29 -0
  398. package/dist/assets/themes/newsflash/js/pages/test/libraries/layers/index.js +9 -0
  399. package/dist/build.js +249 -0
  400. package/dist/cli-run.js +34 -0
  401. package/dist/cli.js +49 -0
  402. package/dist/commands/build.js +32 -0
  403. package/dist/commands/cdp/capture.js +91 -0
  404. package/dist/commands/cdp/client.js +140 -0
  405. package/dist/commands/cdp/eval.js +20 -0
  406. package/dist/commands/cdp/quit.js +84 -0
  407. package/dist/commands/cdp/relaunch.js +62 -0
  408. package/dist/commands/cdp/shot.js +20 -0
  409. package/dist/commands/cdp/status.js +38 -0
  410. package/dist/commands/cdp/theme.js +21 -0
  411. package/dist/commands/cdp.js +53 -0
  412. package/dist/commands/clean.js +34 -0
  413. package/dist/commands/deploy.js +75 -0
  414. package/dist/commands/finalize-release.js +238 -0
  415. package/dist/commands/install.js +37 -0
  416. package/dist/commands/launch.js +150 -0
  417. package/dist/commands/lib/dependencies.js +35 -0
  418. package/dist/commands/lib/deploy-precheck.js +117 -0
  419. package/dist/commands/lib/ensure-target.js +300 -0
  420. package/dist/commands/logs.js +185 -0
  421. package/dist/commands/package.js +31 -0
  422. package/dist/commands/publish.js +34 -0
  423. package/dist/commands/push-secrets.js +141 -0
  424. package/dist/commands/release.js +286 -0
  425. package/dist/commands/runner.js +1874 -0
  426. package/dist/commands/sign-windows.js +563 -0
  427. package/dist/commands/test.js +121 -0
  428. package/dist/commands/update.js +21 -0
  429. package/dist/commands/validate-certs.js +238 -0
  430. package/dist/commands/version.js +9 -0
  431. package/dist/config/page-template.html +35 -0
  432. package/dist/defaults/.github/workflows/build.yml +276 -0
  433. package/dist/defaults/AGENTS.md +109 -0
  434. package/dist/defaults/CHANGELOG.md +15 -0
  435. package/dist/defaults/CLAUDE.md +1 -0
  436. package/dist/defaults/_.gitignore +24 -0
  437. package/dist/defaults/_mas/README.md +49 -0
  438. package/dist/defaults/_mas/entitlements.mas.inherit.plist +12 -0
  439. package/dist/defaults/_mas/entitlements.mas.loginhelper.plist +8 -0
  440. package/dist/defaults/_mas/entitlements.mas.plist +33 -0
  441. package/dist/defaults/config/certs/.gitkeep +0 -0
  442. package/dist/defaults/config/certs/README.md +60 -0
  443. package/dist/defaults/config/icons/macos/dmg.png +0 -0
  444. package/dist/defaults/config/icons/macos/icon.png +0 -0
  445. package/dist/defaults/config/icons/macos/tray.png +0 -0
  446. package/dist/defaults/config/icons/windows/icon.png +0 -0
  447. package/dist/defaults/config/omega.json5 +279 -0
  448. package/dist/defaults/docs/README.md +17 -0
  449. package/dist/defaults/gulpfile.js +6 -0
  450. package/dist/defaults/hooks/build/post.js +9 -0
  451. package/dist/defaults/hooks/build/pre.js +9 -0
  452. package/dist/defaults/hooks/notarize/post.js +16 -0
  453. package/dist/defaults/hooks/release/post.js +9 -0
  454. package/dist/defaults/hooks/release/pre.js +9 -0
  455. package/dist/defaults/src/assets/js/components/about/index.js +10 -0
  456. package/dist/defaults/src/assets/js/components/main/index.js +14 -0
  457. package/dist/defaults/src/assets/js/components/settings/index.js +10 -0
  458. package/dist/defaults/src/assets/scss/main.scss +34 -0
  459. package/dist/defaults/src/assets/scss/pages/about.scss +3 -0
  460. package/dist/defaults/src/assets/scss/pages/main.scss +4 -0
  461. package/dist/defaults/src/assets/scss/pages/settings.scss +3 -0
  462. package/dist/defaults/src/integrations/context-menu/index.js +60 -0
  463. package/dist/defaults/src/integrations/menu/index.js +58 -0
  464. package/dist/defaults/src/integrations/tray/index.js +60 -0
  465. package/dist/defaults/src/main.js +78 -0
  466. package/dist/defaults/src/preload.js +15 -0
  467. package/dist/defaults/src/views/about/index.html +3 -0
  468. package/dist/defaults/src/views/main/index.html +8 -0
  469. package/dist/defaults/src/views/settings/index.html +3 -0
  470. package/dist/defaults/test/README.md +41 -0
  471. package/dist/defaults/test/_init.js +10 -0
  472. package/dist/gulp/main.js +144 -0
  473. package/dist/gulp/tasks/audit.js +82 -0
  474. package/dist/gulp/tasks/build-config.js +445 -0
  475. package/dist/gulp/tasks/bundle.js +451 -0
  476. package/dist/gulp/tasks/defaults.js +20 -0
  477. package/dist/gulp/tasks/distribute.js +8 -0
  478. package/dist/gulp/tasks/html.js +95 -0
  479. package/dist/gulp/tasks/package-quick.js +102 -0
  480. package/dist/gulp/tasks/package.js +53 -0
  481. package/dist/gulp/tasks/release.js +57 -0
  482. package/dist/gulp/tasks/sass.js +82 -0
  483. package/dist/gulp/tasks/serve.js +191 -0
  484. package/dist/hooks/notarize.js +70 -0
  485. package/dist/index.js +14 -0
  486. package/dist/lib/_menu-mixin.js +199 -0
  487. package/dist/lib/analytics.js +360 -0
  488. package/dist/lib/app-state.js +220 -0
  489. package/dist/lib/auth-flow.js +160 -0
  490. package/dist/lib/auth-persistence.js +207 -0
  491. package/dist/lib/auto-updater.js +752 -0
  492. package/dist/lib/client-bridge.js +371 -0
  493. package/dist/lib/context-menu.js +302 -0
  494. package/dist/lib/context.js +162 -0
  495. package/dist/lib/deep-link.js +370 -0
  496. package/dist/lib/fontawesome.js +203 -0
  497. package/dist/lib/ipc.js +169 -0
  498. package/dist/lib/logger-lite.js +259 -0
  499. package/dist/lib/logger.js +4 -0
  500. package/dist/lib/menu.js +521 -0
  501. package/dist/lib/protocol.js +85 -0
  502. package/dist/lib/remote-config.js +224 -0
  503. package/dist/lib/remote-scripts.js +158 -0
  504. package/dist/lib/restart-manager/index.js +550 -0
  505. package/dist/lib/restart-manager/install.js +353 -0
  506. package/dist/lib/restart-manager/protocol.js +274 -0
  507. package/dist/lib/sign-helpers/auto-unlock.js +95 -0
  508. package/dist/lib/sign-helpers/entitlements.js +98 -0
  509. package/dist/lib/sign-helpers/resolve-icons.js +171 -0
  510. package/dist/lib/sign-helpers/sign-events.js +75 -0
  511. package/dist/lib/sign-helpers/update-info.js +186 -0
  512. package/dist/lib/startup.js +214 -0
  513. package/dist/lib/storage.js +193 -0
  514. package/dist/lib/templating.js +85 -0
  515. package/dist/lib/theme.js +173 -0
  516. package/dist/lib/tray.js +414 -0
  517. package/dist/lib/usage.js +141 -0
  518. package/dist/lib/window-manager.js +509 -0
  519. package/dist/main.js +542 -0
  520. package/dist/omega-bin.js +6 -0
  521. package/dist/preload.js +241 -0
  522. package/dist/renderer.js +456 -0
  523. package/dist/test/assert.js +4 -0
  524. package/dist/test/fixtures/consumer-app/config/omega.json5 +39 -0
  525. package/dist/test/fixtures/consumer-app/package.json +13 -0
  526. package/dist/test/fixtures/consumer-app/src/assets/js/components/main/index.js +11 -0
  527. package/dist/test/fixtures/consumer-app/src/assets/scss/main.scss +3 -0
  528. package/dist/test/fixtures/consumer-app/src/main.js +17 -0
  529. package/dist/test/fixtures/consumer-app/src/preload.js +4 -0
  530. package/dist/test/fixtures/consumer-app/src/views/main/index.html +4 -0
  531. package/dist/test/harness/boot-entry.js +237 -0
  532. package/dist/test/harness/main-entry.js +494 -0
  533. package/dist/test/harness/package.json +6 -0
  534. package/dist/test/harness/renderer-entry.js +173 -0
  535. package/dist/test/harness/renderer-preload.js +310 -0
  536. package/dist/test/harness/renderer.html +12 -0
  537. package/dist/test/index.js +65 -0
  538. package/dist/test/runner.js +99 -0
  539. package/dist/test/runners/boot.js +414 -0
  540. package/dist/test/runners/electron.js +92 -0
  541. package/dist/test/runners/render-event.js +46 -0
  542. package/dist/test/suites/boot/build-isolation.test.js +54 -0
  543. package/dist/test/suites/boot/consumer-app-boots.test.js +99 -0
  544. package/dist/test/suites/boot/restart-manager.test.js +38 -0
  545. package/dist/test/suites/boot/storage-bundled.test.js +59 -0
  546. package/dist/test/suites/boot/theme.test.js +68 -0
  547. package/dist/test/suites/boot/view-suite.test.js +47 -0
  548. package/dist/test/suites/build/attach-log-file.test.js +99 -0
  549. package/dist/test/suites/build/audit.test.js +271 -0
  550. package/dist/test/suites/build/boot-fixture.test.js +48 -0
  551. package/dist/test/suites/build/build-config.test.js +457 -0
  552. package/dist/test/suites/build/build-verbs.test.js +156 -0
  553. package/dist/test/suites/build/build-workflow-jobs.test.js +55 -0
  554. package/dist/test/suites/build/cdp.test.js +89 -0
  555. package/dist/test/suites/build/cli.test.js +135 -0
  556. package/dist/test/suites/build/config-schema.test.js +133 -0
  557. package/dist/test/suites/build/defaults-scaffold.test.js +192 -0
  558. package/dist/test/suites/build/deliver-certs.test.js +95 -0
  559. package/dist/test/suites/build/derive-signing-env.test.js +122 -0
  560. package/dist/test/suites/build/electron-node-version.test.js +49 -0
  561. package/dist/test/suites/build/electron-targets.test.js +92 -0
  562. package/dist/test/suites/build/ensure-target.test.js +131 -0
  563. package/dist/test/suites/build/entitlements.test.js +107 -0
  564. package/dist/test/suites/build/env-delivery.test.js +166 -0
  565. package/dist/test/suites/build/env-watch.test.js +86 -0
  566. package/dist/test/suites/build/exports.test.js +63 -0
  567. package/dist/test/suites/build/finalize-release.test.js +152 -0
  568. package/dist/test/suites/build/format-fetch-error.test.js +85 -0
  569. package/dist/test/suites/build/framework-deps.test.js +173 -0
  570. package/dist/test/suites/build/get-config.test.js +137 -0
  571. package/dist/test/suites/build/github-utils.test.js +54 -0
  572. package/dist/test/suites/build/icon-sheet.test.js +62 -0
  573. package/dist/test/suites/build/license-stamp.test.js +63 -0
  574. package/dist/test/suites/build/logger-lite.test.js +148 -0
  575. package/dist/test/suites/build/logs-command.test.js +226 -0
  576. package/dist/test/suites/build/manager.test.js +193 -0
  577. package/dist/test/suites/build/menu-mixin.test.js +130 -0
  578. package/dist/test/suites/build/merge-line-files.test.js +230 -0
  579. package/dist/test/suites/build/omega-shell.test.js +94 -0
  580. package/dist/test/suites/build/omega-tokens.test.js +64 -0
  581. package/dist/test/suites/build/project-scripts-deps.test.js +90 -0
  582. package/dist/test/suites/build/push-secrets.test.js +226 -0
  583. package/dist/test/suites/build/release-pipeline.test.js +365 -0
  584. package/dist/test/suites/build/renderer-auth-bridge.test.js +158 -0
  585. package/dist/test/suites/build/renderer-entry-key.test.js +37 -0
  586. package/dist/test/suites/build/renderer-node-shims.test.js +125 -0
  587. package/dist/test/suites/build/resolve-icons.test.js +296 -0
  588. package/dist/test/suites/build/resolve-signing-cert.test.js +342 -0
  589. package/dist/test/suites/build/restart-manager-install.test.js +178 -0
  590. package/dist/test/suites/build/restart-manager-protocol.test.js +158 -0
  591. package/dist/test/suites/build/run-consumer-hook.test.js +137 -0
  592. package/dist/test/suites/build/runner.test.js +2599 -0
  593. package/dist/test/suites/build/sanitize-signing-env.test.js +98 -0
  594. package/dist/test/suites/build/sanitize-url.test.js +78 -0
  595. package/dist/test/suites/build/secure-remote-url.test.js +42 -0
  596. package/dist/test/suites/build/sentry.test.js +89 -0
  597. package/dist/test/suites/build/serve-resolve-electron.test.js +58 -0
  598. package/dist/test/suites/build/setup-scripts.test.js +172 -0
  599. package/dist/test/suites/build/sign-events.test.js +90 -0
  600. package/dist/test/suites/build/sign-windows-e2e.test.js +302 -0
  601. package/dist/test/suites/build/sign-windows.test.js +313 -0
  602. package/dist/test/suites/build/strip-dev-blocks.test.js +116 -0
  603. package/dist/test/suites/build/templating.test.js +95 -0
  604. package/dist/test/suites/build/test-discovery.test.js +64 -0
  605. package/dist/test/suites/build/test-stealth.test.js +83 -0
  606. package/dist/test/suites/build/test-target-no-match.test.js +119 -0
  607. package/dist/test/suites/build/update-info.test.js +224 -0
  608. package/dist/test/suites/build/url-helpers.test.js +289 -0
  609. package/dist/test/suites/build/validate-certs.test.js +103 -0
  610. package/dist/test/suites/build/validate-config.test.js +90 -0
  611. package/dist/test/suites/build/verb-logs.test.js +43 -0
  612. package/dist/test/suites/build/wave5-pins.test.js +35 -0
  613. package/dist/test/suites/main/analytics.test.js +364 -0
  614. package/dist/test/suites/main/app-state.test.js +197 -0
  615. package/dist/test/suites/main/auth-flow.test.js +196 -0
  616. package/dist/test/suites/main/auth-persistence.test.js +167 -0
  617. package/dist/test/suites/main/auto-updater.test.js +1138 -0
  618. package/dist/test/suites/main/boot-sequence.test.js +77 -0
  619. package/dist/test/suites/main/client-bridge.integration.test.js +134 -0
  620. package/dist/test/suites/main/client-bridge.test.js +249 -0
  621. package/dist/test/suites/main/context-menu.test.js +365 -0
  622. package/dist/test/suites/main/context.test.js +155 -0
  623. package/dist/test/suites/main/deep-link.test.js +288 -0
  624. package/dist/test/suites/main/epipe-handler.test.js +40 -0
  625. package/dist/test/suites/main/fontawesome.test.js +147 -0
  626. package/dist/test/suites/main/harness-cdp.test.js +49 -0
  627. package/dist/test/suites/main/ipc.test.js +165 -0
  628. package/dist/test/suites/main/menu.test.js +419 -0
  629. package/dist/test/suites/main/protocol.test.js +77 -0
  630. package/dist/test/suites/main/remote-config.test.js +189 -0
  631. package/dist/test/suites/main/remote-scripts.test.js +276 -0
  632. package/dist/test/suites/main/restart-manager.test.js +328 -0
  633. package/dist/test/suites/main/startup-paths-and-ua.test.js +99 -0
  634. package/dist/test/suites/main/startup.test.js +129 -0
  635. package/dist/test/suites/main/stealth-window.test.js +74 -0
  636. package/dist/test/suites/main/storage.test.js +89 -0
  637. package/dist/test/suites/main/theme.test.js +137 -0
  638. package/dist/test/suites/main/tray.test.js +322 -0
  639. package/dist/test/suites/main/truncate-on-boot.test.js +22 -0
  640. package/dist/test/suites/main/url-helpers.test.js +429 -0
  641. package/dist/test/suites/main/usage.test.js +127 -0
  642. package/dist/test/suites/main/window-bounds.test.js +169 -0
  643. package/dist/test/suites/main/window-manager.test.js +233 -0
  644. package/dist/test/suites/renderer/analytics-bridge.test.js +128 -0
  645. package/dist/test/suites/renderer/cross-context-helpers.test.js +131 -0
  646. package/dist/test/suites/renderer/fontawesome.test.js +190 -0
  647. package/dist/test/suites/renderer/round-trip.test.js +107 -0
  648. package/dist/test/suites/renderer/theme.test.js +118 -0
  649. package/dist/test/suites/renderer/tooltips.test.js +166 -0
  650. package/dist/test/suites/renderer/verts.test.js +100 -0
  651. package/dist/test/suites/renderer/window-em-surface.test.js +107 -0
  652. package/dist/test/utils/dist-snapshot.js +36 -0
  653. package/dist/test/utils/extended-mode-warning.js +13 -0
  654. package/dist/utils/app-root.js +28 -0
  655. package/dist/utils/attach-log-file.js +4 -0
  656. package/dist/utils/build-pipeline.js +58 -0
  657. package/dist/utils/deliver-certs.js +69 -0
  658. package/dist/utils/derive-signing-env.js +56 -0
  659. package/dist/utils/dist-root.js +21 -0
  660. package/dist/utils/electron-node-version.js +48 -0
  661. package/dist/utils/electron-targets.js +72 -0
  662. package/dist/utils/format-fetch-error.js +38 -0
  663. package/dist/utils/github.js +73 -0
  664. package/dist/utils/load-consumer-file.js +26 -0
  665. package/dist/utils/merge-line-files.js +5 -0
  666. package/dist/utils/mode-helpers.js +147 -0
  667. package/dist/utils/resolve-signing-cert.js +175 -0
  668. package/dist/utils/run-consumer-hook.js +38 -0
  669. package/dist/utils/runner-env.js +687 -0
  670. package/dist/utils/safe-install.js +4 -0
  671. package/dist/utils/sanitize-signing-env.js +45 -0
  672. package/dist/utils/sanitize-url.js +28 -0
  673. package/dist/utils/secure-remote-url.js +25 -0
  674. package/dist/utils/stealth-window.js +37 -0
  675. package/dist/utils/test-stealth.js +29 -0
  676. package/dist/utils/url-helpers.js +169 -0
  677. package/dist/vendor/account/engine.js +182 -0
  678. package/dist/vendor/account/features.js +220 -0
  679. package/dist/vendor/account/index.js +53 -0
  680. package/dist/vendor/account/schema.js +272 -0
  681. package/dist/vendor/account/subscription.js +38 -0
  682. package/dist/vendor/analytics/adapters/ga4.js +26 -0
  683. package/dist/vendor/analytics/adapters/meta.js +26 -0
  684. package/dist/vendor/analytics/adapters/resolve.js +130 -0
  685. package/dist/vendor/analytics/adapters/tiktok.js +27 -0
  686. package/dist/vendor/analytics/catalog.js +908 -0
  687. package/dist/vendor/analytics/consent.js +49 -0
  688. package/dist/vendor/analytics/core.js +141 -0
  689. package/dist/vendor/analytics/identity.js +136 -0
  690. package/dist/vendor/analytics/index.js +170 -0
  691. package/dist/vendor/analytics/logger.js +40 -0
  692. package/dist/vendor/analytics/transports/browser.js +110 -0
  693. package/dist/vendor/config/company.js +31 -0
  694. package/dist/vendor/config/defaults.js +173 -0
  695. package/dist/vendor/config/demo.js +18 -0
  696. package/dist/vendor/config/desktop-artifacts.js +110 -0
  697. package/dist/vendor/config/edit.js +769 -0
  698. package/dist/vendor/config/env-delivery.js +145 -0
  699. package/dist/vendor/config/env-rules.js +93 -0
  700. package/dist/vendor/config/env-schema.js +1078 -0
  701. package/dist/vendor/config/env.js +445 -0
  702. package/dist/vendor/config/hooks.js +97 -0
  703. package/dist/vendor/config/index.js +237 -0
  704. package/dist/vendor/config/instances.js +208 -0
  705. package/dist/vendor/config/load.js +490 -0
  706. package/dist/vendor/config/merge.js +68 -0
  707. package/dist/vendor/config/order.js +139 -0
  708. package/dist/vendor/config/ports.js +374 -0
  709. package/dist/vendor/config/providers.js +32 -0
  710. package/dist/vendor/config/repo.js +142 -0
  711. package/dist/vendor/config/retired-keys.js +430 -0
  712. package/dist/vendor/config/schema.js +1610 -0
  713. package/dist/vendor/config/secrets.js +50 -0
  714. package/dist/vendor/config/seed.js +34 -0
  715. package/dist/vendor/config/site-global.js +205 -0
  716. package/dist/vendor/config/validate.js +554 -0
  717. package/dist/vendor/config/winback.js +61 -0
  718. package/dist/vendor/devkit/actions-secrets.js +145 -0
  719. package/dist/vendor/devkit/attach-log-file.js +262 -0
  720. package/dist/vendor/devkit/bundle.js +292 -0
  721. package/dist/vendor/devkit/certs.js +199 -0
  722. package/dist/vendor/devkit/ci-workflows.js +520 -0
  723. package/dist/vendor/devkit/clean-dirs.js +28 -0
  724. package/dist/vendor/devkit/cli-router.js +156 -0
  725. package/dist/vendor/devkit/defaults-engine.js +372 -0
  726. package/dist/vendor/devkit/deploy-precheck.js +54 -0
  727. package/dist/vendor/devkit/deploy-record.js +180 -0
  728. package/dist/vendor/devkit/deploy.js +286 -0
  729. package/dist/vendor/devkit/empty-modules-plugin.js +64 -0
  730. package/dist/vendor/devkit/env-watch.js +132 -0
  731. package/dist/vendor/devkit/framework-deps.js +46 -0
  732. package/dist/vendor/devkit/license.js +155 -0
  733. package/dist/vendor/devkit/local.js +1905 -0
  734. package/dist/vendor/devkit/logger.js +128 -0
  735. package/dist/vendor/devkit/merge-line-files.js +296 -0
  736. package/dist/vendor/devkit/npm-registry.js +52 -0
  737. package/dist/vendor/devkit/omega-bin.js +345 -0
  738. package/dist/vendor/devkit/prompt.js +187 -0
  739. package/dist/vendor/devkit/safe-install.js +18 -0
  740. package/dist/vendor/devkit/scaffold-guard.js +96 -0
  741. package/dist/vendor/devkit/stop-signals.js +28 -0
  742. package/dist/vendor/devkit/strip-dev-blocks-plugin.js +29 -0
  743. package/dist/vendor/devkit/strip-dev-blocks.js +32 -0
  744. package/dist/vendor/devkit/target-dependencies.js +137 -0
  745. package/dist/vendor/devkit/target-secrets.js +165 -0
  746. package/dist/vendor/devkit/test/assert.js +120 -0
  747. package/dist/vendor/devkit/test/define-cases.js +104 -0
  748. package/dist/vendor/devkit/test/extended-mode-warning.js +22 -0
  749. package/dist/vendor/devkit/test/runner-core.js +554 -0
  750. package/dist/vendor/devkit/test/scope.js +162 -0
  751. package/dist/vendor/devkit/update.js +569 -0
  752. package/dist/vendor/monitoring/core.js +180 -0
  753. package/dist/vendor/monitoring/env.js +49 -0
  754. package/dist/vendor/monitoring/index.js +28 -0
  755. package/dist/vendor/monitoring/logger.js +39 -0
  756. package/dist/vendor/monitoring/main.js +99 -0
  757. package/dist/vendor/monitoring/preload.js +45 -0
  758. package/dist/vendor/monitoring/renderer.js +87 -0
  759. package/docs/analytics.md +140 -0
  760. package/docs/app-state.md +92 -0
  761. package/docs/audit.md +69 -0
  762. package/docs/auto-updater.md +243 -0
  763. package/docs/boot-sequence.md +39 -0
  764. package/docs/build-system.md +161 -0
  765. package/docs/cdp-debugging.md +169 -0
  766. package/docs/client-bridge.md +267 -0
  767. package/docs/common-mistakes.md +21 -0
  768. package/docs/config-schema.md +120 -0
  769. package/docs/context-menu.md +112 -0
  770. package/docs/context.md +81 -0
  771. package/docs/css.md +84 -0
  772. package/docs/deep-link.md +178 -0
  773. package/docs/environment-detection.md +104 -0
  774. package/docs/fontawesome.md +107 -0
  775. package/docs/hooks.md +87 -0
  776. package/docs/icons.md +79 -0
  777. package/docs/index.md +279 -0
  778. package/docs/installer-options.md +162 -0
  779. package/docs/ipc.md +61 -0
  780. package/docs/lib-modules.md +53 -0
  781. package/docs/logging.md +229 -0
  782. package/docs/menu.md +160 -0
  783. package/docs/releasing.md +229 -0
  784. package/docs/remote-config.md +118 -0
  785. package/docs/remote-scripts.md +144 -0
  786. package/docs/restart-manager.md +144 -0
  787. package/docs/runner.md +253 -0
  788. package/docs/sentry.md +97 -0
  789. package/docs/shared/agent-docs.md +89 -0
  790. package/docs/shared/analytics.md +612 -0
  791. package/docs/shared/brands.md +51 -0
  792. package/docs/shared/breaking-changes.md +497 -0
  793. package/docs/shared/config.md +1387 -0
  794. package/docs/shared/deploys.md +215 -0
  795. package/docs/shared/icons.md +201 -0
  796. package/docs/shared/local-dev.md +147 -0
  797. package/docs/shared/logging.md +202 -0
  798. package/docs/shared/monitoring.md +153 -0
  799. package/docs/shared/publishing.md +183 -0
  800. package/docs/shared/rulings.md +34 -0
  801. package/docs/shared/testing.md +147 -0
  802. package/docs/shared/theming.md +604 -0
  803. package/docs/shared/translation.md +291 -0
  804. package/docs/shared/updates.md +61 -0
  805. package/docs/signing.md +267 -0
  806. package/docs/startup.md +142 -0
  807. package/docs/storage.md +59 -0
  808. package/docs/templating.md +101 -0
  809. package/docs/test-boot-layer.md +157 -0
  810. package/docs/test-framework.md +357 -0
  811. package/docs/themes.md +135 -0
  812. package/docs/tooltips.md +99 -0
  813. package/docs/tray.md +164 -0
  814. package/docs/usage.md +58 -0
  815. package/docs/verts.md +62 -0
  816. package/docs/windows.md +149 -0
  817. package/package.json +184 -0
  818. package/scripts/sync-nvmrc.js +100 -0
@@ -0,0 +1,95 @@
1
+ // Auto-unlocks SafeNet / eToken password dialogs that signtool triggers when
2
+ // using a SafeNet-managed EV cert (selected via /sha1 thumbprint).
3
+ //
4
+ // Strategy: in parallel with the signtool invocation, poll the Win32 window
5
+ // list (via automately.getWindows() — a single native call, ~1-5ms) looking
6
+ // for a "Token Logon" window. When detected, focus it and type the password
7
+ // + Enter via automately (a maintained nutjs fork).
8
+ //
9
+ // Falls back to a no-op if:
10
+ // - automately isn't installed (optional dep, may have failed to compile)
11
+ // - WIN_CSC_KEY_PASSWORD isn't set (signing in thumbprint mode without auto-unlock)
12
+ // - not on Windows
13
+ //
14
+ // Returns { stop } so the caller can cancel polling once signtool finishes.
15
+
16
+ let automately;
17
+ try {
18
+ automately = require('automately');
19
+ } catch (e) {
20
+ automately = null;
21
+ }
22
+
23
+ const POLL_INTERVAL_MS = 500; // automately.getWindows() is fast — poll twice a second
24
+ const POLL_TIMEOUT_MS = 60000;
25
+ const PRE_TYPE_DELAY_MS = 2000; // safety wait after detecting dialog before typing
26
+ const PER_CHAR_DELAY_MS = 60; // small delay between keystrokes — some dialogs drop chars on fast input
27
+
28
+ function sleep(ms) { return new Promise((r) => setTimeout(r, ms)); }
29
+
30
+ async function findTokenLogonWindow() {
31
+ const windows = await automately.getWindows();
32
+ for (const w of windows) {
33
+ let title = '';
34
+ try { title = await w.title; } catch (e) { continue; }
35
+ if (title && title.startsWith('Token Logon')) return title;
36
+ }
37
+ return null;
38
+ }
39
+
40
+ function startAutoUnlock({ password, logger }) {
41
+ if (process.platform !== 'win32') return { stop: () => {} };
42
+ if (!password) return { stop: () => {} };
43
+ if (!automately) {
44
+ if (logger) logger.warn('automately not installed — SafeNet password prompt will need manual entry. Run `npm install` in the @omega.js/desktop repo to enable auto-unlock.');
45
+ return { stop: () => {} };
46
+ }
47
+
48
+ let stopped = false;
49
+ let typed = false;
50
+ const startedAt = Date.now();
51
+
52
+ (async function poll() {
53
+ let attempt = 0;
54
+ while (!stopped && !typed && Date.now() - startedAt < POLL_TIMEOUT_MS) {
55
+ attempt += 1;
56
+ const elapsed = Math.round((Date.now() - startedAt) / 1000);
57
+ const pollStart = Date.now();
58
+ let title = null;
59
+ try {
60
+ title = await findTokenLogonWindow();
61
+ } catch (e) {
62
+ if (logger) logger.log(`auto-unlock: poll ${attempt} (${elapsed}s) — getWindows error: ${e.message}`);
63
+ }
64
+ const pollMs = Date.now() - pollStart;
65
+
66
+ if (title) {
67
+ if (logger) logger.log(`auto-unlock: SafeNet Token Logon dialog detected (attempt ${attempt}, ${elapsed}s, poll took ${pollMs}ms) — title: "${title}" — waiting ${PRE_TYPE_DELAY_MS}ms before typing...`);
68
+ await sleep(PRE_TYPE_DELAY_MS);
69
+
70
+ if (logger) logger.log(`auto-unlock: typing password (${password.length} chars, ~${PER_CHAR_DELAY_MS}ms each)...`);
71
+ for (const ch of password) {
72
+ if (stopped) return;
73
+ await automately.keyboard.type(ch);
74
+ await sleep(PER_CHAR_DELAY_MS);
75
+ }
76
+ await automately.keyboard.type(automately.Key.Enter);
77
+ typed = true;
78
+ if (logger) logger.log('auto-unlock: password typed + Enter pressed.');
79
+ return;
80
+ }
81
+
82
+ if (logger) logger.log(`auto-unlock: poll ${attempt} (${elapsed}s, took ${pollMs}ms) — no Token Logon window`);
83
+ await sleep(POLL_INTERVAL_MS);
84
+ }
85
+ if (!typed && !stopped && logger) logger.warn(`auto-unlock: timed out after ${Math.round(POLL_TIMEOUT_MS / 1000)}s without seeing the Token Logon dialog`);
86
+ })().catch((e) => {
87
+ if (logger) logger.warn(`auto-unlock: poll error: ${e.message}`);
88
+ });
89
+
90
+ return {
91
+ stop: () => { stopped = true; },
92
+ };
93
+ }
94
+
95
+ module.exports = { startAutoUnlock };
@@ -0,0 +1,98 @@
1
+ // Generate dist/config/entitlements.mac.plist from @omega.js/desktop defaults + consumer overrides.
2
+ //
3
+ // Consumer config schema (in omega.json5):
4
+ // entitlements: {
5
+ // mac: {
6
+ // 'com.apple.security.cs.allow-jit': false, // override default `true`
7
+ // 'com.apple.security.network.client': true, // add a key not in defaults
8
+ // },
9
+ // }
10
+ //
11
+ // Empty/missing → defaults only. Consumer keys override defaults. Setting a key to `null` or
12
+ // `undefined` removes it from the merged set (escape hatch to drop a default entitlement).
13
+
14
+ const path = require('path');
15
+ const jetpack = require('fs-jetpack');
16
+
17
+ // @omega.js/desktop's canonical mac entitlement defaults. Mirrors the legacy build/entitlements.mac.plist.
18
+ const DEFAULT_MAC_ENTITLEMENTS = {
19
+ // Hardened runtime — required for notarization.
20
+ 'com.apple.security.cs.allow-jit': true,
21
+ 'com.apple.security.cs.allow-unsigned-executable-memory': true,
22
+ 'com.apple.security.cs.allow-dyld-environment-variables': true,
23
+
24
+ // Network — Firebase Auth, auto-update, web requests.
25
+ 'com.apple.security.network.client': true,
26
+ 'com.apple.security.network.server': true,
27
+
28
+ // Files — electron-store reads/writes user-selected files.
29
+ 'com.apple.security.files.user-selected.read-write': true,
30
+
31
+ // Library validation off — Electron helpers + native modules load fine despite signing chain mismatch.
32
+ 'com.apple.security.cs.disable-library-validation': true,
33
+ };
34
+
35
+ function mergeMacEntitlements(consumerOverrides) {
36
+ const merged = { ...DEFAULT_MAC_ENTITLEMENTS };
37
+ if (consumerOverrides && typeof consumerOverrides === 'object') {
38
+ for (const [key, value] of Object.entries(consumerOverrides)) {
39
+ if (value === null || value === undefined) {
40
+ delete merged[key]; // explicit removal
41
+ } else {
42
+ merged[key] = value;
43
+ }
44
+ }
45
+ }
46
+ return merged;
47
+ }
48
+
49
+ function renderPlist(entitlements) {
50
+ // Plist format is XML. Bool values render as <true/> or <false/>; strings as <string>...</string>;
51
+ // numbers as <integer> or <real>. We only emit bool/string/number — that covers all known mac entitlements.
52
+ const lines = [
53
+ '<?xml version="1.0" encoding="UTF-8"?>',
54
+ '<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">',
55
+ '<plist version="1.0">',
56
+ '<dict>',
57
+ ];
58
+
59
+ for (const [key, value] of Object.entries(entitlements)) {
60
+ lines.push(` <key>${escapeXml(key)}</key>`);
61
+ if (typeof value === 'boolean') {
62
+ lines.push(value ? ' <true/>' : ' <false/>');
63
+ } else if (typeof value === 'number') {
64
+ lines.push(Number.isInteger(value) ? ` <integer>${value}</integer>` : ` <real>${value}</real>`);
65
+ } else if (Array.isArray(value)) {
66
+ lines.push(' <array>');
67
+ for (const v of value) {
68
+ if (typeof v === 'string') lines.push(` <string>${escapeXml(v)}</string>`);
69
+ }
70
+ lines.push(' </array>');
71
+ } else {
72
+ lines.push(` <string>${escapeXml(String(value))}</string>`);
73
+ }
74
+ }
75
+
76
+ lines.push('</dict>', '</plist>', '');
77
+ return lines.join('\n');
78
+ }
79
+
80
+ function escapeXml(s) {
81
+ return String(s).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
82
+ }
83
+
84
+ // Materialize the merged plist file. Returns the absolute path to the written file.
85
+ function writeMacEntitlements(distRoot, consumerOverrides) {
86
+ const merged = mergeMacEntitlements(consumerOverrides);
87
+ const xml = renderPlist(merged);
88
+ const outPath = path.join(distRoot, 'config', 'entitlements.mac.plist');
89
+ jetpack.write(outPath, xml);
90
+ return outPath;
91
+ }
92
+
93
+ module.exports = {
94
+ DEFAULT_MAC_ENTITLEMENTS,
95
+ mergeMacEntitlements,
96
+ renderPlist,
97
+ writeMacEntitlements,
98
+ };
@@ -0,0 +1,171 @@
1
+ // Resolve icon paths via a convention-only waterfall, copy resolved files into
2
+ // dist/config/icons/, and return the paths electron-builder.yml needs.
3
+ //
4
+ // Resolution order per slot, per platform (most specific wins):
5
+ // 1. <projectRoot>/config/icons/<platform>/<file> — platform-specific override
6
+ // 2. <projectRoot>/config/icons/global/<file> — universal fallback (shared by all platforms)
7
+ // 3. <projectRoot>/config/icons/windows/<file> — Linux-only extra: legacy Linux→Windows fallback
8
+ // 4. <@omega.js/desktop>/dist/config/icons/<platform>/<file> — @omega.js/desktop bundled default
9
+ //
10
+ // Note the DMG slot is macOS-only by definition. Its lookup chain skips step 3
11
+ // entirely and step 2 only checks `global/` for the DMG file specifically (which
12
+ // almost never exists — a "global DMG background" makes no sense).
13
+ //
14
+ // Retina (@2x) variants are DERIVED. Consumers ship ONE file at the @2x (native) size.
15
+ // @omega.js/desktop downscales it to write the @1x sibling. So `tray.png` is the 32x32 native retina
16
+ // source (consumer-facing input name), and @omega.js/desktop emits both `trayTemplate.png` (16x16)
17
+ // and `trayTemplate@2x.png` (32x32) into `dist/config/icons/macos/`. The output name
18
+ // diverges from the input on macOS because the `Template` suffix is a system magic
19
+ // marker that triggers auto-inversion in dark mode. Same retina derivation for
20
+ // `dmg.png` (1080x760 native → emits 540x380 + 1080x760, no name change).
21
+ //
22
+ // Special fallbacks:
23
+ // - Windows tray slot falls back to the Windows app icon if no tray source resolves.
24
+ // - Linux uses the Windows resolved paths if its own chain produces nothing.
25
+
26
+ const path = require('path');
27
+ const jetpack = require('fs-jetpack');
28
+ const sharp = require('sharp');
29
+
30
+ // Slot defs: per platform, a list of { slot, file, outFile, retina } entries.
31
+ // slot = key under resolved[platform] (e.g. 'app' → resolved.macos.app)
32
+ // file = INPUT filename — what consumers ship in config/icons/<platform>/ (or global/)
33
+ // outFile = OUTPUT filename written into dist/config/icons/<platform>/.
34
+ // Defaults to `file`. Diverges only when the on-disk runtime name
35
+ // carries magic meaning (e.g. macOS tray icons must end in
36
+ // `Template.png` for the OS to auto-invert them in dark mode —
37
+ // @omega.js/desktop owns that detail so consumers can just call it `tray.png`).
38
+ // retina = if set, the SOURCE file is treated as @2x (native). @omega.js/desktop downscales it
39
+ // to produce the @1x sibling. Both files are written into dist/.
40
+ const SLOTS = {
41
+ macos: [
42
+ { slot: 'app', file: 'icon.png' },
43
+ { slot: 'tray', file: 'tray.png', outFile: 'trayTemplate.png', retina: true },
44
+ { slot: 'dmg', file: 'dmg.png', retina: true },
45
+ ],
46
+ windows: [
47
+ { slot: 'app', file: 'icon.png' },
48
+ { slot: 'tray', file: 'tray.png' }, // optional; falls back to app icon if missing
49
+ ],
50
+ linux: [
51
+ { slot: 'app', file: 'icon.png' },
52
+ { slot: 'tray', file: 'tray.png' },
53
+ ],
54
+ };
55
+
56
+ // Given a non-retina file path, return its @2x sibling (`foo.png` → `foo@2x.png`).
57
+ function retinaSibling(p) {
58
+ const dir = path.dirname(p);
59
+ const ext = path.extname(p);
60
+ const base = path.basename(p, ext);
61
+ return path.join(dir, `${base}@2x${ext}`);
62
+ }
63
+
64
+ // Find the source file for a slot on a platform via the convention waterfall.
65
+ // Most-specific-wins: platform-specific override beats global fallback beats
66
+ // bundled default. Linux gets an extra step: it falls back to the Windows
67
+ // consumer dir before going to bundled defaults (legacy compat — Linux apps
68
+ // historically reuse Windows assets).
69
+ function findSource({ slot, file }, platform, opts) {
70
+ const { projectRoot, emDefaultsRoot } = opts;
71
+
72
+ // 1. Platform-specific override.
73
+ const platformPath = path.join(projectRoot, 'config', 'icons', platform, file);
74
+ if (jetpack.exists(platformPath)) return platformPath;
75
+
76
+ // 2. Universal fallback (shared by all platforms). Skip for macOS-only slots
77
+ // like `dmg` where a global file makes no sense — but we still allow it (if
78
+ // someone REALLY wants a global dmg.png, fine; we don't enforce semantics).
79
+ const globalPath = path.join(projectRoot, 'config', 'icons', 'global', file);
80
+ if (jetpack.exists(globalPath)) return globalPath;
81
+
82
+ // 3. Linux-only: legacy fallback through Windows consumer dir.
83
+ if (platform === 'linux') {
84
+ const winFallback = path.join(projectRoot, 'config', 'icons', 'windows', file);
85
+ if (jetpack.exists(winFallback)) return winFallback;
86
+ }
87
+
88
+ // 4. @omega.js/desktop bundled default.
89
+ const bundled = path.join(emDefaultsRoot, 'icons', platform, file);
90
+ if (jetpack.exists(bundled)) return bundled;
91
+
92
+ // Linux gets one more shot at bundled defaults via the Windows chain.
93
+ if (platform === 'linux') {
94
+ const bundledWin = path.join(emDefaultsRoot, 'icons', 'windows', file);
95
+ if (jetpack.exists(bundledWin)) return bundledWin;
96
+ }
97
+
98
+ return null;
99
+ }
100
+
101
+ // Downscale an @2x source to its @1x sibling. Source is written as the @2x output,
102
+ // and a half-sized copy is written alongside as the @1x output. Returns { ref1x, ref2x }.
103
+ async function emitRetinaPair(src, dest) {
104
+ const dest2x = retinaSibling(dest);
105
+
106
+ // @2x output is a straight copy of the native source.
107
+ jetpack.copy(src, dest2x, { overwrite: true });
108
+
109
+ // @1x output is the source downscaled by 50%.
110
+ const meta = await sharp(src).metadata();
111
+ const w1x = Math.max(1, Math.round((meta.width || 2) / 2));
112
+ const h1x = Math.max(1, Math.round((meta.height || 2) / 2));
113
+ await sharp(src)
114
+ .resize(w1x, h1x, { fit: 'fill' })
115
+ .toFile(dest);
116
+
117
+ return { ref1x: dest, ref2x: dest2x };
118
+ }
119
+
120
+ // Resolve all icons, copy into dist/config/icons/, return the wiring object that
121
+ // build-config consumes.
122
+ async function resolveAndCopy({ config, projectRoot, distRoot, emDefaultsRoot }) {
123
+ const distIconsRoot = path.join(distRoot, 'config', 'icons');
124
+ jetpack.dir(distIconsRoot);
125
+
126
+ const resolved = { macos: {}, windows: {}, linux: {} };
127
+
128
+ // First pass: resolve each platform/slot. For retina slots, source file is treated as
129
+ // @2x; @omega.js/desktop emits both <slot>.png (downscaled) and <slot>@2x.png (the source) into dist.
130
+ for (const platform of Object.keys(SLOTS)) {
131
+ for (const def of SLOTS[platform]) {
132
+ const src = findSource(def, platform, { projectRoot, emDefaultsRoot });
133
+ if (!src) continue;
134
+
135
+ const outFile = def.outFile || def.file;
136
+ const dest = path.join(distIconsRoot, platform, outFile);
137
+ jetpack.dir(path.dirname(dest));
138
+
139
+ if (def.retina) {
140
+ const { ref1x, ref2x } = await emitRetinaPair(src, dest);
141
+ resolved[platform][def.slot] = ref1x;
142
+ resolved[platform][`${def.slot}2x`] = ref2x;
143
+ } else {
144
+ jetpack.copy(src, dest, { overwrite: true });
145
+ resolved[platform][def.slot] = dest;
146
+ }
147
+ }
148
+ }
149
+
150
+ // Special fallbacks:
151
+ // - Windows tray → Windows app icon if tray didn't resolve.
152
+ if (!resolved.windows.tray && resolved.windows.app) {
153
+ resolved.windows.tray = resolved.windows.app;
154
+ }
155
+ // - Linux entirely follows Windows resolved paths if its own chain produced nothing.
156
+ for (const slot of ['app', 'tray']) {
157
+ if (!resolved.linux[slot] && resolved.windows[slot]) {
158
+ resolved.linux[slot] = resolved.windows[slot];
159
+ }
160
+ }
161
+
162
+ return resolved;
163
+ }
164
+
165
+ module.exports = {
166
+ SLOTS,
167
+ retinaSibling,
168
+ findSource,
169
+ emitRetinaPair,
170
+ resolveAndCopy,
171
+ };
@@ -0,0 +1,75 @@
1
+ // Structured signing event log — appends JSONL lines to `<runner-dir>/omega-signing.log`
2
+ // (or another path via `OMEGA_SIGN_LOG`) so a separate `mgr runner monitor` process can
3
+ // tail + pretty-print them in real time on the Windows box.
4
+ //
5
+ // Why JSONL not plain text: lets the monitor pretty-print durations, color the failure
6
+ // events distinctively, and group sign-start / sign-done pairs without parsing English.
7
+ //
8
+ // Where the file lands (resolved in this priority order):
9
+ // 1. `OMEGA_SIGN_LOG` env var (explicit override) — wins if set
10
+ // 2. `<OMEGA_RUNNER_HOME>/omega-signing.log` — when caller has set the runner home
11
+ // 3. `<defaultRunnerHome()>/omega-signing.log` on Windows — the runner home the
12
+ // install actually uses (`%LOCALAPPDATA%\omega-runner`), read from
13
+ // src/commands/runner.js so the two can never drift again. This is the
14
+ // machine-wide default, so EVERY signing job from every org/repo writes to
15
+ // the same file and `npx omega runner monitor` with no args picks it up.
16
+ // 4. `<RUNNER_TOOLSDIRECTORY>/omega-signing.log` — fallback if someone runs
17
+ // sign-windows outside the runner-installed path
18
+ // 5. `<process.cwd()>/logs/signing.log` — local dev fallback (matches dev.log, build.log, etc.)
19
+
20
+ const os = require('os');
21
+ const path = require('path');
22
+ const jetpack = require('fs-jetpack');
23
+
24
+ const logger = new (require('../../build.js'))().logger('sign-events');
25
+
26
+ function resolveLogPath(env, platform) {
27
+ env = env || process.env;
28
+ platform = platform || process.platform;
29
+
30
+ if (env.OMEGA_SIGN_LOG) return env.OMEGA_SIGN_LOG;
31
+ if (env.OMEGA_RUNNER_HOME) {
32
+ return path.join(env.OMEGA_RUNNER_HOME, 'omega-signing.log');
33
+ }
34
+ if (platform === 'win32') {
35
+ // Required lazily: runner.js pulls sign-events in from `monitor`, and a
36
+ // top-level require here would make that a cycle.
37
+ const { defaultRunnerHome } = require('../../commands/runner.js');
38
+ return path.join(defaultRunnerHome(platform, env), 'omega-signing.log');
39
+ }
40
+ const ciRoot = env.RUNNER_TOOLSDIRECTORY
41
+ || env.RUNNER_WORKSPACE
42
+ || env.RUNNER_ROOT;
43
+ if (ciRoot) {
44
+ return path.join(ciRoot, 'omega-signing.log');
45
+ }
46
+ return path.join(process.cwd(), 'logs', 'signing.log');
47
+ }
48
+
49
+ const logPath = resolveLogPath();
50
+
51
+ function emit(event, data) {
52
+ const line = `${JSON.stringify({
53
+ ts: new Date().toISOString(),
54
+ pid: process.pid,
55
+ host: os.hostname(),
56
+ event,
57
+ ...data,
58
+ })}\n`;
59
+ try {
60
+ // jetpack.append creates the parent directory when it is missing. The first
61
+ // event of a job is often the first thing to touch the runner home, and a
62
+ // dropped first line is a whole signing run with no trail.
63
+ jetpack.append(logPath, line);
64
+ } catch (e) {
65
+ // If we can't write the event file, don't crash the sign — warn on the
66
+ // framework logger so the GH Actions runner log still has the trace.
67
+ logger.warn(`write failed: ${e.message}`);
68
+ }
69
+ }
70
+
71
+ module.exports = {
72
+ getLogPath: () => logPath,
73
+ emit,
74
+ resolveLogPath,
75
+ };
@@ -0,0 +1,186 @@
1
+ // Generate the Windows auto-updater feed file (`latest.yml`) + accompanying
2
+ // `.blockmap` for each signed installer.
3
+ //
4
+ // Why this exists: electron-builder generates `latest.yml` ONLY as part of its
5
+ // publish flow. Our pipeline signs Windows .exe out-of-band (separate self-hosted
6
+ // runner job, EV USB token, signtool — see commands/sign-windows.js), so by the
7
+ // time we have a signed binary, electron-builder is long gone. We have to write
8
+ // `latest.yml` ourselves against the signed exe; otherwise its sha512 wouldn't
9
+ // match the binary in the releases repo and electron-updater would reject the update.
10
+ //
11
+ // `latest.yml` is the public client-side contract that electron-updater reads
12
+ // from the GitHub release. Schema reference:
13
+ // node_modules/builder-util-runtime/out/updateInfo.d.ts (UpdateInfo + UpdateFileInfo).
14
+ //
15
+ // We also generate a `.blockmap` for each installer using app-builder-bin's
16
+ // `blockmap` subcommand. The blockmap enables delta updates — electron-updater
17
+ // downloads only changed chunks instead of the whole .exe on minor updates.
18
+ // Blockmap generation is best-effort: if app-builder-bin isn't resolvable, we
19
+ // warn and skip (auto-updater still works full-download style without it).
20
+ //
21
+ // Sister `latest-mac.yml` / `latest-linux.yml` are produced by electron-builder's
22
+ // own publish step on those jobs, where they're built+signed in one process and
23
+ // the yml lands naturally. Only Windows is split.
24
+
25
+ const path = require('path');
26
+ const fs = require('fs');
27
+ const crypto = require('crypto');
28
+ const jetpack = require('fs-jetpack');
29
+ const yaml = require('js-yaml');
30
+ const { execute } = require('node-powertools');
31
+
32
+ // SHA-512 of a file → base64 (raw bytes encoded), matching electron-builder's wire format.
33
+ // electron-updater verifies updates by recomputing this and comparing — must be base64
34
+ // of the raw 64-byte digest, NOT hex, NOT base64 of the hex string.
35
+ function sha512Base64(filePath) {
36
+ return new Promise((resolve, reject) => {
37
+ const hash = crypto.createHash('sha512');
38
+ const stream = fs.createReadStream(filePath);
39
+ stream.on('error', reject);
40
+ stream.on('data', (chunk) => hash.update(chunk));
41
+ stream.on('end', () => resolve(hash.digest('base64')));
42
+ });
43
+ }
44
+
45
+ // Resolve the app-builder binary path via app-builder-bin. Returns null if the
46
+ // dep isn't installed (consumer hasn't run electron-builder build → its node_modules
47
+ // won't contain app-builder-bin). Caller should warn-and-skip rather than throw.
48
+ function resolveAppBuilderPath() {
49
+ try {
50
+ const { appBuilderPath } = require('app-builder-bin');
51
+ if (jetpack.exists(appBuilderPath)) return appBuilderPath;
52
+ } catch (e) {
53
+ // app-builder-bin not installed — likely no electron-builder in this consumer.
54
+ }
55
+ return null;
56
+ }
57
+
58
+ // Generate <exe>.blockmap next to the signed exe via `app-builder blockmap`.
59
+ // Returns the blockmap path on success, null if app-builder-bin isn't available
60
+ // or generation failed (the latter is surfaced as a warning by the caller).
61
+ async function generateBlockmap({ exePath, logger }) {
62
+ const builder = resolveAppBuilderPath();
63
+ if (!builder) {
64
+ if (logger) logger.warn(' app-builder-bin not resolvable — skipping blockmap (auto-updater will still work, just no delta updates).');
65
+ return null;
66
+ }
67
+
68
+ const blockmapPath = `${exePath}.blockmap`;
69
+ try {
70
+ // gzip is electron-updater's expected format. -i input -o output.
71
+ await execute(`"${builder}" blockmap --input "${exePath}" --output "${blockmapPath}" --compression gzip`, { log: false });
72
+ return blockmapPath;
73
+ } catch (e) {
74
+ if (logger) logger.warn(` Blockmap generation failed (skipping, non-fatal): ${e.message}`);
75
+ return null;
76
+ }
77
+ }
78
+
79
+ // Build the `latest.yml` content from a list of signed installers + their metadata.
80
+ // Schema mirrors what electron-builder produces for the windows nsis target. Fields
81
+ // kept in the same order electron-builder emits, for diff-friendliness if anyone
82
+ // inspects the yml by hand.
83
+ //
84
+ // `files` is the canonical list. `path` and top-level `sha512` are deprecated but
85
+ // kept for backward compat with old electron-updater clients.
86
+ function buildUpdateInfo({ version, releaseDate, files }) {
87
+ if (!files.length) {
88
+ throw new Error('writeUpdateInfo: no files supplied — nothing to describe.');
89
+ }
90
+
91
+ const primary = files[0];
92
+
93
+ return {
94
+ version,
95
+ files: files.map((f) => {
96
+ const entry = {
97
+ url: f.url,
98
+ sha512: f.sha512,
99
+ size: f.size,
100
+ };
101
+ if (f.blockMapSize !== undefined) entry.blockMapSize = f.blockMapSize;
102
+ return entry;
103
+ }),
104
+ path: primary.url,
105
+ sha512: primary.sha512,
106
+ releaseDate,
107
+ };
108
+ }
109
+
110
+ // Main entry. Given a set of signed Windows installers, generate per-exe blockmaps
111
+ // (best-effort) and write a single `latest.yml` describing them all.
112
+ //
113
+ // signedExes : Array<{ filePath, urlName }> — absolute path + the URL-style name
114
+ // the file will have on the GH release (usually basename(filePath)).
115
+ // outDir : where to drop latest.yml + the blockmaps. Typically same dir as the
116
+ // signed exes; finalize-release uploads everything in this dir.
117
+ // version : package.json version (no leading 'v').
118
+ // releaseDate : ISO 8601 string. Defaults to now() if omitted.
119
+ //
120
+ // Returns the path to the written latest.yml.
121
+ async function writeUpdateInfo({ signedExes, outDir, version, releaseDate, logger }) {
122
+ if (!signedExes || signedExes.length === 0) {
123
+ throw new Error('writeUpdateInfo: signedExes is empty.');
124
+ }
125
+ if (!version) {
126
+ throw new Error('writeUpdateInfo: version is required.');
127
+ }
128
+
129
+ jetpack.dir(outDir);
130
+ const finalReleaseDate = releaseDate || new Date().toISOString();
131
+
132
+ const files = [];
133
+ for (const { filePath, urlName } of signedExes) {
134
+ const stat = fs.statSync(filePath);
135
+ const sha512 = await sha512Base64(filePath);
136
+ const blockmapPath = await generateBlockmap({ exePath: filePath, logger });
137
+
138
+ let blockMapSize;
139
+ if (blockmapPath && jetpack.exists(blockmapPath)) {
140
+ blockMapSize = fs.statSync(blockmapPath).size;
141
+ }
142
+
143
+ files.push({
144
+ url: urlName || path.basename(filePath),
145
+ sha512,
146
+ size: stat.size,
147
+ ...(blockMapSize !== undefined ? { blockMapSize } : {}),
148
+ });
149
+ }
150
+
151
+ const updateInfo = buildUpdateInfo({ version, releaseDate: finalReleaseDate, files });
152
+ const ymlPath = path.join(outDir, 'latest.yml');
153
+
154
+ // Use single-quoted strings for date (matches electron-builder output style).
155
+ const ymlContent = yaml.dump(updateInfo, {
156
+ lineWidth: -1, // never wrap (auto-updater clients parse line-by-line)
157
+ quotingType: "'",
158
+ forceQuotes: false,
159
+ });
160
+
161
+ fs.writeFileSync(ymlPath, ymlContent, 'utf8');
162
+
163
+ if (logger) {
164
+ logger.log(` ✓ Wrote latest.yml (${files.length} file${files.length === 1 ? '' : 's'}, ${blockmapBlurb(files)})`);
165
+ }
166
+
167
+ return ymlPath;
168
+ }
169
+
170
+ function blockmapBlurb(files) {
171
+ const withBlockmap = files.filter((f) => f.blockMapSize !== undefined).length;
172
+ if (withBlockmap === files.length) return 'all with blockmap';
173
+ if (withBlockmap === 0) return 'no blockmaps — delta updates disabled';
174
+ return `${withBlockmap}/${files.length} with blockmap`;
175
+ }
176
+
177
+ module.exports = {
178
+ writeUpdateInfo,
179
+ // Exported for unit tests.
180
+ _internals: {
181
+ sha512Base64,
182
+ buildUpdateInfo,
183
+ generateBlockmap,
184
+ resolveAppBuilderPath,
185
+ },
186
+ };