@adminiumjs/adminium 0.1.0-rc.1

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 (875) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +94 -0
  3. package/dashboard/assets/DeltaPill-dxlsGh-1.js +2 -0
  4. package/dashboard/assets/DeltaPill-dxlsGh-1.js.map +1 -0
  5. package/dashboard/assets/DistributionCorrelationWidgets-ztVy_W_R.js +2 -0
  6. package/dashboard/assets/DistributionCorrelationWidgets-ztVy_W_R.js.map +1 -0
  7. package/dashboard/assets/PartWholeWidgets-BDn0i0jt.js +2 -0
  8. package/dashboard/assets/PartWholeWidgets-BDn0i0jt.js.map +1 -0
  9. package/dashboard/assets/RemapEditor-z3vRY12e.js +2 -0
  10. package/dashboard/assets/RemapEditor-z3vRY12e.js.map +1 -0
  11. package/dashboard/assets/ReviewScreen-COkLQ3T7.js +2 -0
  12. package/dashboard/assets/ReviewScreen-COkLQ3T7.js.map +1 -0
  13. package/dashboard/assets/Sparkline-Cvwo368J.js +2 -0
  14. package/dashboard/assets/Sparkline-Cvwo368J.js.map +1 -0
  15. package/dashboard/assets/WidgetMissingCard-D0bPJKIs.js +2 -0
  16. package/dashboard/assets/WidgetMissingCard-D0bPJKIs.js.map +1 -0
  17. package/dashboard/assets/arc-CPxb74pf.js +2 -0
  18. package/dashboard/assets/arc-CPxb74pf.js.map +1 -0
  19. package/dashboard/assets/bars-ranking-components-9Asn_0gR.js +2 -0
  20. package/dashboard/assets/bars-ranking-components-9Asn_0gR.js.map +1 -0
  21. package/dashboard/assets/blocks-track-components-BST-NjK2.js +2 -0
  22. package/dashboard/assets/blocks-track-components-BST-NjK2.js.map +1 -0
  23. package/dashboard/assets/calendar-track-components-RgNtGtZR.js +2 -0
  24. package/dashboard/assets/calendar-track-components-RgNtGtZR.js.map +1 -0
  25. package/dashboard/assets/chrome-track-components-ClNsentC.js +2 -0
  26. package/dashboard/assets/chrome-track-components-ClNsentC.js.map +1 -0
  27. package/dashboard/assets/common-BY1j__bD.js +2 -0
  28. package/dashboard/assets/common-BY1j__bD.js.map +1 -0
  29. package/dashboard/assets/common-BdlXKpcB.js +2 -0
  30. package/dashboard/assets/common-BdlXKpcB.js.map +1 -0
  31. package/dashboard/assets/common-BqqhgMgB.js +2 -0
  32. package/dashboard/assets/common-BqqhgMgB.js.map +1 -0
  33. package/dashboard/assets/common-BribWmIo.js +2 -0
  34. package/dashboard/assets/common-BribWmIo.js.map +1 -0
  35. package/dashboard/assets/common-Cmf0_lKV.js +2 -0
  36. package/dashboard/assets/common-Cmf0_lKV.js.map +1 -0
  37. package/dashboard/assets/common-i0r48qY9.js +2 -0
  38. package/dashboard/assets/common-i0r48qY9.js.map +1 -0
  39. package/dashboard/assets/common-x8cfkwpc.js +2 -0
  40. package/dashboard/assets/common-x8cfkwpc.js.map +1 -0
  41. package/dashboard/assets/communication-track-components-CNLZXOH_.js +2 -0
  42. package/dashboard/assets/communication-track-components-CNLZXOH_.js.map +1 -0
  43. package/dashboard/assets/components-Bp5cFm2d.js +2 -0
  44. package/dashboard/assets/components-Bp5cFm2d.js.map +1 -0
  45. package/dashboard/assets/components-C4-O3_gD.js +2 -0
  46. package/dashboard/assets/components-C4-O3_gD.js.map +1 -0
  47. package/dashboard/assets/domain-ops-track-components-BPa41AU7.js +2 -0
  48. package/dashboard/assets/domain-ops-track-components-BPa41AU7.js.map +1 -0
  49. package/dashboard/assets/domain-track-components-CQ1i1X1t.js +2 -0
  50. package/dashboard/assets/domain-track-components-CQ1i1X1t.js.map +1 -0
  51. package/dashboard/assets/errors-BHUWiAQ3.js +2 -0
  52. package/dashboard/assets/errors-BHUWiAQ3.js.map +1 -0
  53. package/dashboard/assets/errors-BbyKweDG.js +2 -0
  54. package/dashboard/assets/errors-BbyKweDG.js.map +1 -0
  55. package/dashboard/assets/errors-CMQ6JC31.js +2 -0
  56. package/dashboard/assets/errors-CMQ6JC31.js.map +1 -0
  57. package/dashboard/assets/errors-D3nVgTmf.js +2 -0
  58. package/dashboard/assets/errors-D3nVgTmf.js.map +1 -0
  59. package/dashboard/assets/errors-IqJSoANC.js +2 -0
  60. package/dashboard/assets/errors-IqJSoANC.js.map +1 -0
  61. package/dashboard/assets/errors-gmIkO9F6.js +2 -0
  62. package/dashboard/assets/errors-gmIkO9F6.js.map +1 -0
  63. package/dashboard/assets/errors-vFk058Vh.js +2 -0
  64. package/dashboard/assets/errors-vFk058Vh.js.map +1 -0
  65. package/dashboard/assets/feeds-track-f-components-Cl_8SkGs.js +2 -0
  66. package/dashboard/assets/feeds-track-f-components-Cl_8SkGs.js.map +1 -0
  67. package/dashboard/assets/format-Lx4cQ8k-.js +2 -0
  68. package/dashboard/assets/format-Lx4cQ8k-.js.map +1 -0
  69. package/dashboard/assets/forms-track-components-Bc2Hoxdh.js +2 -0
  70. package/dashboard/assets/forms-track-components-Bc2Hoxdh.js.map +1 -0
  71. package/dashboard/assets/generated-1EfWhCMA.js +2 -0
  72. package/dashboard/assets/generated-1EfWhCMA.js.map +1 -0
  73. package/dashboard/assets/generated-BB3ZMxvx.js +2 -0
  74. package/dashboard/assets/generated-BB3ZMxvx.js.map +1 -0
  75. package/dashboard/assets/generated-C0JVNBRX.js +2 -0
  76. package/dashboard/assets/generated-C0JVNBRX.js.map +1 -0
  77. package/dashboard/assets/generated-C1W48_-3.js +2 -0
  78. package/dashboard/assets/generated-C1W48_-3.js.map +1 -0
  79. package/dashboard/assets/generated-CluiB_xY.js +2 -0
  80. package/dashboard/assets/generated-CluiB_xY.js.map +1 -0
  81. package/dashboard/assets/generated-DDGtlf-4.js +2 -0
  82. package/dashboard/assets/generated-DDGtlf-4.js.map +1 -0
  83. package/dashboard/assets/generated-DPCHvNto.js +2 -0
  84. package/dashboard/assets/generated-DPCHvNto.js.map +1 -0
  85. package/dashboard/assets/geo-track-components-Ct4-MSRw.js +3 -0
  86. package/dashboard/assets/geo-track-components-Ct4-MSRw.js.map +1 -0
  87. package/dashboard/assets/ibm-plex-sans-arabic-arabic-400-normal-CyU-ddYS.woff2 +0 -0
  88. package/dashboard/assets/ibm-plex-sans-arabic-arabic-500-normal-C4MQITzh.woff2 +0 -0
  89. package/dashboard/assets/ibm-plex-sans-arabic-arabic-600-normal-0pRdybE_.woff2 +0 -0
  90. package/dashboard/assets/ibm-plex-sans-arabic-arabic-700-normal-DrtBj6UE.woff2 +0 -0
  91. package/dashboard/assets/index-DPi4cduu.css +1 -0
  92. package/dashboard/assets/index-PB1II0WV.js +137 -0
  93. package/dashboard/assets/index-PB1II0WV.js.map +1 -0
  94. package/dashboard/assets/jetbrains-mono-latin-ext-wght-italic-BrDczivE.woff2 +0 -0
  95. package/dashboard/assets/jetbrains-mono-latin-ext-wght-normal-DBQx-q_a.woff2 +0 -0
  96. package/dashboard/assets/jetbrains-mono-latin-wght-italic-B2M6KQje.woff2 +0 -0
  97. package/dashboard/assets/jetbrains-mono-latin-wght-normal-B9CIFXIH.woff2 +0 -0
  98. package/dashboard/assets/leaflet-CIGW-MKW.css +1 -0
  99. package/dashboard/assets/leaflet-src-D12shr04.js +2 -0
  100. package/dashboard/assets/leaflet-src-D12shr04.js.map +1 -0
  101. package/dashboard/assets/manrope-latin-ext-wght-normal-Ch3YOpNY.woff2 +0 -0
  102. package/dashboard/assets/manrope-latin-wght-normal-DHIcAJRg.woff2 +0 -0
  103. package/dashboard/assets/media-track-components-CpeII-tT.js +2 -0
  104. package/dashboard/assets/media-track-components-CpeII-tT.js.map +1 -0
  105. package/dashboard/assets/scales-e0tkfEy1.js +2 -0
  106. package/dashboard/assets/scales-e0tkfEy1.js.map +1 -0
  107. package/dashboard/assets/sparkline-2JUGDrMW.js +2 -0
  108. package/dashboard/assets/sparkline-2JUGDrMW.js.map +1 -0
  109. package/dashboard/assets/stats-BNgXz5BD.js +2 -0
  110. package/dashboard/assets/stats-BNgXz5BD.js.map +1 -0
  111. package/dashboard/assets/studio-B7hMOwAF.js +2 -0
  112. package/dashboard/assets/studio-B7hMOwAF.js.map +1 -0
  113. package/dashboard/assets/studio-BN_9xHY3.js +2 -0
  114. package/dashboard/assets/studio-BN_9xHY3.js.map +1 -0
  115. package/dashboard/assets/studio-Cn2MObe8.js +2 -0
  116. package/dashboard/assets/studio-Cn2MObe8.js.map +1 -0
  117. package/dashboard/assets/studio-DZEZCCkw.js +2 -0
  118. package/dashboard/assets/studio-DZEZCCkw.js.map +1 -0
  119. package/dashboard/assets/studio-DzatTvLl.js +2 -0
  120. package/dashboard/assets/studio-DzatTvLl.js.map +1 -0
  121. package/dashboard/assets/studio-cBlD8x90.js +2 -0
  122. package/dashboard/assets/studio-cBlD8x90.js.map +1 -0
  123. package/dashboard/assets/studio-cglZPbJK.js +2 -0
  124. package/dashboard/assets/studio-cglZPbJK.js.map +1 -0
  125. package/dashboard/assets/system-track-components-GTYYpnfB.js +2 -0
  126. package/dashboard/assets/system-track-components-GTYYpnfB.js.map +1 -0
  127. package/dashboard/assets/tables-tail-components-DiA5GeHB.js +2 -0
  128. package/dashboard/assets/tables-tail-components-DiA5GeHB.js.map +1 -0
  129. package/dashboard/assets/tables-track-f-components-CVNPd7rq.js +2 -0
  130. package/dashboard/assets/tables-track-f-components-CVNPd7rq.js.map +1 -0
  131. package/dashboard/assets/time-flow-components-nKsaryry.js +2 -0
  132. package/dashboard/assets/time-flow-components-nKsaryry.js.map +1 -0
  133. package/dashboard/assets/ui-B-kZetor.js +2 -0
  134. package/dashboard/assets/ui-B-kZetor.js.map +1 -0
  135. package/dashboard/assets/ui-BEStJ5Pw.js +2 -0
  136. package/dashboard/assets/ui-BEStJ5Pw.js.map +1 -0
  137. package/dashboard/assets/ui-BS5_eDN4.js +2 -0
  138. package/dashboard/assets/ui-BS5_eDN4.js.map +1 -0
  139. package/dashboard/assets/ui-BZ0EyxRH.js +2 -0
  140. package/dashboard/assets/ui-BZ0EyxRH.js.map +1 -0
  141. package/dashboard/assets/ui-BloJDdt6.js +2 -0
  142. package/dashboard/assets/ui-BloJDdt6.js.map +1 -0
  143. package/dashboard/assets/ui-CpdrplJH.js +2 -0
  144. package/dashboard/assets/ui-CpdrplJH.js.map +1 -0
  145. package/dashboard/assets/ui-YJfT644k.js +2 -0
  146. package/dashboard/assets/ui-YJfT644k.js.map +1 -0
  147. package/dashboard/assets/widgets-uDqZWw4A.js +2 -0
  148. package/dashboard/assets/widgets-uDqZWw4A.js.map +1 -0
  149. package/dashboard/index.html +41 -0
  150. package/dist/app.d.ts +48 -0
  151. package/dist/app.d.ts.map +1 -0
  152. package/dist/app.js +250 -0
  153. package/dist/app.js.map +1 -0
  154. package/dist/auth/audit.d.ts +22 -0
  155. package/dist/auth/audit.d.ts.map +1 -0
  156. package/dist/auth/audit.js +17 -0
  157. package/dist/auth/audit.js.map +1 -0
  158. package/dist/auth/desktop-session.d.ts +53 -0
  159. package/dist/auth/desktop-session.d.ts.map +1 -0
  160. package/dist/auth/desktop-session.js +111 -0
  161. package/dist/auth/desktop-session.js.map +1 -0
  162. package/dist/auth/passwords.d.ts +17 -0
  163. package/dist/auth/passwords.d.ts.map +1 -0
  164. package/dist/auth/passwords.js +40 -0
  165. package/dist/auth/passwords.js.map +1 -0
  166. package/dist/auth/sessions.d.ts +77 -0
  167. package/dist/auth/sessions.d.ts.map +1 -0
  168. package/dist/auth/sessions.js +137 -0
  169. package/dist/auth/sessions.js.map +1 -0
  170. package/dist/auth/totp.d.ts +30 -0
  171. package/dist/auth/totp.d.ts.map +1 -0
  172. package/dist/auth/totp.js +97 -0
  173. package/dist/auth/totp.js.map +1 -0
  174. package/dist/backup/backup-service.d.ts +157 -0
  175. package/dist/backup/backup-service.d.ts.map +1 -0
  176. package/dist/backup/backup-service.js +354 -0
  177. package/dist/backup/backup-service.js.map +1 -0
  178. package/dist/backup/format.d.ts +300 -0
  179. package/dist/backup/format.d.ts.map +1 -0
  180. package/dist/backup/format.js +304 -0
  181. package/dist/backup/format.js.map +1 -0
  182. package/dist/backup/notify.d.ts +55 -0
  183. package/dist/backup/notify.d.ts.map +1 -0
  184. package/dist/backup/notify.js +60 -0
  185. package/dist/backup/notify.js.map +1 -0
  186. package/dist/backup/snapshot.d.ts +78 -0
  187. package/dist/backup/snapshot.d.ts.map +1 -0
  188. package/dist/backup/snapshot.js +142 -0
  189. package/dist/backup/snapshot.js.map +1 -0
  190. package/dist/capabilities/catalog.d.ts +33 -0
  191. package/dist/capabilities/catalog.d.ts.map +1 -0
  192. package/dist/capabilities/catalog.js +32 -0
  193. package/dist/capabilities/catalog.js.map +1 -0
  194. package/dist/capabilities/grants.d.ts +44 -0
  195. package/dist/capabilities/grants.d.ts.map +1 -0
  196. package/dist/capabilities/grants.js +65 -0
  197. package/dist/capabilities/grants.js.map +1 -0
  198. package/dist/cli/allowlist.d.ts +46 -0
  199. package/dist/cli/allowlist.d.ts.map +1 -0
  200. package/dist/cli/allowlist.js +99 -0
  201. package/dist/cli/allowlist.js.map +1 -0
  202. package/dist/cli/args.d.ts +63 -0
  203. package/dist/cli/args.d.ts.map +1 -0
  204. package/dist/cli/args.js +92 -0
  205. package/dist/cli/args.js.map +1 -0
  206. package/dist/cli/command.d.ts +32 -0
  207. package/dist/cli/command.d.ts.map +1 -0
  208. package/dist/cli/command.js +64 -0
  209. package/dist/cli/command.js.map +1 -0
  210. package/dist/cli/commands/apply-llm-response.d.ts +32 -0
  211. package/dist/cli/commands/apply-llm-response.d.ts.map +1 -0
  212. package/dist/cli/commands/apply-llm-response.js +209 -0
  213. package/dist/cli/commands/apply-llm-response.js.map +1 -0
  214. package/dist/cli/commands/export-zip.d.ts +17 -0
  215. package/dist/cli/commands/export-zip.d.ts.map +1 -0
  216. package/dist/cli/commands/export-zip.js +111 -0
  217. package/dist/cli/commands/export-zip.js.map +1 -0
  218. package/dist/cli/commands/generate-prompt.d.ts +29 -0
  219. package/dist/cli/commands/generate-prompt.d.ts.map +1 -0
  220. package/dist/cli/commands/generate-prompt.js +154 -0
  221. package/dist/cli/commands/generate-prompt.js.map +1 -0
  222. package/dist/cli/commands/import-zip.d.ts +13 -0
  223. package/dist/cli/commands/import-zip.d.ts.map +1 -0
  224. package/dist/cli/commands/import-zip.js +95 -0
  225. package/dist/cli/commands/import-zip.js.map +1 -0
  226. package/dist/cli/commands/init.d.ts +47 -0
  227. package/dist/cli/commands/init.d.ts.map +1 -0
  228. package/dist/cli/commands/init.js +372 -0
  229. package/dist/cli/commands/init.js.map +1 -0
  230. package/dist/cli/commands/introspect.d.ts +11 -0
  231. package/dist/cli/commands/introspect.d.ts.map +1 -0
  232. package/dist/cli/commands/introspect.js +100 -0
  233. package/dist/cli/commands/introspect.js.map +1 -0
  234. package/dist/cli/commands/migrate.d.ts +11 -0
  235. package/dist/cli/commands/migrate.d.ts.map +1 -0
  236. package/dist/cli/commands/migrate.js +80 -0
  237. package/dist/cli/commands/migrate.js.map +1 -0
  238. package/dist/cli/commands/start.d.ts +22 -0
  239. package/dist/cli/commands/start.d.ts.map +1 -0
  240. package/dist/cli/commands/start.js +101 -0
  241. package/dist/cli/commands/start.js.map +1 -0
  242. package/dist/cli/exit.d.ts +37 -0
  243. package/dist/cli/exit.d.ts.map +1 -0
  244. package/dist/cli/exit.js +39 -0
  245. package/dist/cli/exit.js.map +1 -0
  246. package/dist/cli/index.d.ts +10 -0
  247. package/dist/cli/index.d.ts.map +1 -0
  248. package/dist/cli/index.js +17 -0
  249. package/dist/cli/index.js.map +1 -0
  250. package/dist/cli/io.d.ts +49 -0
  251. package/dist/cli/io.d.ts.map +1 -0
  252. package/dist/cli/io.js +77 -0
  253. package/dist/cli/io.js.map +1 -0
  254. package/dist/cli/run.d.ts +35 -0
  255. package/dist/cli/run.d.ts.map +1 -0
  256. package/dist/cli/run.js +139 -0
  257. package/dist/cli/run.js.map +1 -0
  258. package/dist/cli/runtime.d.ts +116 -0
  259. package/dist/cli/runtime.d.ts.map +1 -0
  260. package/dist/cli/runtime.js +181 -0
  261. package/dist/cli/runtime.js.map +1 -0
  262. package/dist/cli/static-root.d.ts +42 -0
  263. package/dist/cli/static-root.d.ts.map +1 -0
  264. package/dist/cli/static-root.js +58 -0
  265. package/dist/cli/static-root.js.map +1 -0
  266. package/dist/compose.d.ts +135 -0
  267. package/dist/compose.d.ts.map +1 -0
  268. package/dist/compose.js +383 -0
  269. package/dist/compose.js.map +1 -0
  270. package/dist/config/bootstrap.d.ts +33 -0
  271. package/dist/config/bootstrap.d.ts.map +1 -0
  272. package/dist/config/bootstrap.js +81 -0
  273. package/dist/config/bootstrap.js.map +1 -0
  274. package/dist/config/env.d.ts +95 -0
  275. package/dist/config/env.d.ts.map +1 -0
  276. package/dist/config/env.js +236 -0
  277. package/dist/config/env.js.map +1 -0
  278. package/dist/config/secrets.d.ts +24 -0
  279. package/dist/config/secrets.d.ts.map +1 -0
  280. package/dist/config/secrets.js +74 -0
  281. package/dist/config/secrets.js.map +1 -0
  282. package/dist/connections/crypto.d.ts +9 -0
  283. package/dist/connections/crypto.d.ts.map +1 -0
  284. package/dist/connections/crypto.js +16 -0
  285. package/dist/connections/crypto.js.map +1 -0
  286. package/dist/connections/dsn.d.ts +42 -0
  287. package/dist/connections/dsn.d.ts.map +1 -0
  288. package/dist/connections/dsn.js +131 -0
  289. package/dist/connections/dsn.js.map +1 -0
  290. package/dist/connections/effective-schema.d.ts +65 -0
  291. package/dist/connections/effective-schema.d.ts.map +1 -0
  292. package/dist/connections/effective-schema.js +249 -0
  293. package/dist/connections/effective-schema.js.map +1 -0
  294. package/dist/connections/introspect.d.ts +52 -0
  295. package/dist/connections/introspect.d.ts.map +1 -0
  296. package/dist/connections/introspect.js +111 -0
  297. package/dist/connections/introspect.js.map +1 -0
  298. package/dist/connections/manager.d.ts +97 -0
  299. package/dist/connections/manager.d.ts.map +1 -0
  300. package/dist/connections/manager.js +224 -0
  301. package/dist/connections/manager.js.map +1 -0
  302. package/dist/connections/register-adapters.d.ts +42 -0
  303. package/dist/connections/register-adapters.d.ts.map +1 -0
  304. package/dist/connections/register-adapters.js +92 -0
  305. package/dist/connections/register-adapters.js.map +1 -0
  306. package/dist/crud/filters.d.ts +57 -0
  307. package/dist/crud/filters.d.ts.map +1 -0
  308. package/dist/crud/filters.js +177 -0
  309. package/dist/crud/filters.js.map +1 -0
  310. package/dist/crud/identifiers.d.ts +58 -0
  311. package/dist/crud/identifiers.d.ts.map +1 -0
  312. package/dist/crud/identifiers.js +99 -0
  313. package/dist/crud/identifiers.js.map +1 -0
  314. package/dist/crud/list.d.ts +51 -0
  315. package/dist/crud/list.d.ts.map +1 -0
  316. package/dist/crud/list.js +126 -0
  317. package/dist/crud/list.js.map +1 -0
  318. package/dist/crud/mask.d.ts +23 -0
  319. package/dist/crud/mask.d.ts.map +1 -0
  320. package/dist/crud/mask.js +41 -0
  321. package/dist/crud/mask.js.map +1 -0
  322. package/dist/crud/records.d.ts +33 -0
  323. package/dist/crud/records.d.ts.map +1 -0
  324. package/dist/crud/records.js +126 -0
  325. package/dist/crud/records.js.map +1 -0
  326. package/dist/crud/undo.d.ts +55 -0
  327. package/dist/crud/undo.d.ts.map +1 -0
  328. package/dist/crud/undo.js +74 -0
  329. package/dist/crud/undo.js.map +1 -0
  330. package/dist/data-io/coerce.d.ts +28 -0
  331. package/dist/data-io/coerce.d.ts.map +1 -0
  332. package/dist/data-io/coerce.js +123 -0
  333. package/dist/data-io/coerce.js.map +1 -0
  334. package/dist/data-io/csv.d.ts +38 -0
  335. package/dist/data-io/csv.d.ts.map +1 -0
  336. package/dist/data-io/csv.js +138 -0
  337. package/dist/data-io/csv.js.map +1 -0
  338. package/dist/data-io/snapshot-view.d.ts +10 -0
  339. package/dist/data-io/snapshot-view.d.ts.map +1 -0
  340. package/dist/data-io/snapshot-view.js +19 -0
  341. package/dist/data-io/snapshot-view.js.map +1 -0
  342. package/dist/desktop/demo-seed.d.ts +23 -0
  343. package/dist/desktop/demo-seed.d.ts.map +1 -0
  344. package/dist/desktop/demo-seed.js +28 -0
  345. package/dist/desktop/demo-seed.js.map +1 -0
  346. package/dist/desktop/lan-share.d.ts +94 -0
  347. package/dist/desktop/lan-share.d.ts.map +1 -0
  348. package/dist/desktop/lan-share.js +150 -0
  349. package/dist/desktop/lan-share.js.map +1 -0
  350. package/dist/errors.d.ts +72 -0
  351. package/dist/errors.d.ts.map +1 -0
  352. package/dist/errors.js +82 -0
  353. package/dist/errors.js.map +1 -0
  354. package/dist/export/bundle.d.ts +235 -0
  355. package/dist/export/bundle.d.ts.map +1 -0
  356. package/dist/export/bundle.js +172 -0
  357. package/dist/export/bundle.js.map +1 -0
  358. package/dist/export/import-service.d.ts +99 -0
  359. package/dist/export/import-service.d.ts.map +1 -0
  360. package/dist/export/import-service.js +515 -0
  361. package/dist/export/import-service.js.map +1 -0
  362. package/dist/export/readme.d.ts +25 -0
  363. package/dist/export/readme.d.ts.map +1 -0
  364. package/dist/export/readme.js +154 -0
  365. package/dist/export/readme.js.map +1 -0
  366. package/dist/export/redaction.d.ts +118 -0
  367. package/dist/export/redaction.d.ts.map +1 -0
  368. package/dist/export/redaction.js +233 -0
  369. package/dist/export/redaction.js.map +1 -0
  370. package/dist/export/zip-service.d.ts +66 -0
  371. package/dist/export/zip-service.d.ts.map +1 -0
  372. package/dist/export/zip-service.js +306 -0
  373. package/dist/export/zip-service.js.map +1 -0
  374. package/dist/files/storage.d.ts +50 -0
  375. package/dist/files/storage.d.ts.map +1 -0
  376. package/dist/files/storage.js +100 -0
  377. package/dist/files/storage.js.map +1 -0
  378. package/dist/generate/materialize-llm.d.ts +45 -0
  379. package/dist/generate/materialize-llm.d.ts.map +1 -0
  380. package/dist/generate/materialize-llm.js +167 -0
  381. package/dist/generate/materialize-llm.js.map +1 -0
  382. package/dist/generate/run.d.ts +48 -0
  383. package/dist/generate/run.d.ts.map +1 -0
  384. package/dist/generate/run.js +123 -0
  385. package/dist/generate/run.js.map +1 -0
  386. package/dist/index.d.ts +89 -0
  387. package/dist/index.d.ts.map +1 -0
  388. package/dist/index.js +116 -0
  389. package/dist/index.js.map +1 -0
  390. package/dist/jobs/export-run.d.ts +38 -0
  391. package/dist/jobs/export-run.d.ts.map +1 -0
  392. package/dist/jobs/export-run.js +172 -0
  393. package/dist/jobs/export-run.js.map +1 -0
  394. package/dist/jobs/import-run.d.ts +43 -0
  395. package/dist/jobs/import-run.d.ts.map +1 -0
  396. package/dist/jobs/import-run.js +290 -0
  397. package/dist/jobs/import-run.js.map +1 -0
  398. package/dist/jobs/llm-run.d.ts +73 -0
  399. package/dist/jobs/llm-run.d.ts.map +1 -0
  400. package/dist/jobs/llm-run.js +225 -0
  401. package/dist/jobs/llm-run.js.map +1 -0
  402. package/dist/jobs/register.d.ts +90 -0
  403. package/dist/jobs/register.d.ts.map +1 -0
  404. package/dist/jobs/register.js +121 -0
  405. package/dist/jobs/register.js.map +1 -0
  406. package/dist/jobs/registry.d.ts +74 -0
  407. package/dist/jobs/registry.d.ts.map +1 -0
  408. package/dist/jobs/registry.js +78 -0
  409. package/dist/jobs/registry.js.map +1 -0
  410. package/dist/jobs/report-run.d.ts +64 -0
  411. package/dist/jobs/report-run.d.ts.map +1 -0
  412. package/dist/jobs/report-run.js +221 -0
  413. package/dist/jobs/report-run.js.map +1 -0
  414. package/dist/jobs/scheduler.d.ts +72 -0
  415. package/dist/jobs/scheduler.d.ts.map +1 -0
  416. package/dist/jobs/scheduler.js +121 -0
  417. package/dist/jobs/scheduler.js.map +1 -0
  418. package/dist/jobs/worker.d.ts +110 -0
  419. package/dist/jobs/worker.d.ts.map +1 -0
  420. package/dist/jobs/worker.js +282 -0
  421. package/dist/jobs/worker.js.map +1 -0
  422. package/dist/llm/apply-service.d.ts +150 -0
  423. package/dist/llm/apply-service.d.ts.map +1 -0
  424. package/dist/llm/apply-service.js +463 -0
  425. package/dist/llm/apply-service.js.map +1 -0
  426. package/dist/llm/apply-undo-store.d.ts +50 -0
  427. package/dist/llm/apply-undo-store.d.ts.map +1 -0
  428. package/dist/llm/apply-undo-store.js +60 -0
  429. package/dist/llm/apply-undo-store.js.map +1 -0
  430. package/dist/llm/direct-runner.d.ts +146 -0
  431. package/dist/llm/direct-runner.d.ts.map +1 -0
  432. package/dist/llm/direct-runner.js +204 -0
  433. package/dist/llm/direct-runner.js.map +1 -0
  434. package/dist/llm/prompt-service.d.ts +90 -0
  435. package/dist/llm/prompt-service.d.ts.map +1 -0
  436. package/dist/llm/prompt-service.js +93 -0
  437. package/dist/llm/prompt-service.js.map +1 -0
  438. package/dist/llm/provider-resolver.d.ts +25 -0
  439. package/dist/llm/provider-resolver.d.ts.map +1 -0
  440. package/dist/llm/provider-resolver.js +81 -0
  441. package/dist/llm/provider-resolver.js.map +1 -0
  442. package/dist/llm/run-service.d.ts +215 -0
  443. package/dist/llm/run-service.d.ts.map +1 -0
  444. package/dist/llm/run-service.js +343 -0
  445. package/dist/llm/run-service.js.map +1 -0
  446. package/dist/llm/stats-collector.d.ts +40 -0
  447. package/dist/llm/stats-collector.d.ts.map +1 -0
  448. package/dist/llm/stats-collector.js +74 -0
  449. package/dist/llm/stats-collector.js.map +1 -0
  450. package/dist/log-scrub.d.ts +58 -0
  451. package/dist/log-scrub.d.ts.map +1 -0
  452. package/dist/log-scrub.js +103 -0
  453. package/dist/log-scrub.js.map +1 -0
  454. package/dist/meta/store.d.ts +96 -0
  455. package/dist/meta/store.d.ts.map +1 -0
  456. package/dist/meta/store.js +192 -0
  457. package/dist/meta/store.js.map +1 -0
  458. package/dist/notifications/notify.d.ts +43 -0
  459. package/dist/notifications/notify.d.ts.map +1 -0
  460. package/dist/notifications/notify.js +42 -0
  461. package/dist/notifications/notify.js.map +1 -0
  462. package/dist/plugins/auth.d.ts +42 -0
  463. package/dist/plugins/auth.d.ts.map +1 -0
  464. package/dist/plugins/auth.js +84 -0
  465. package/dist/plugins/auth.js.map +1 -0
  466. package/dist/plugins/core.d.ts +48 -0
  467. package/dist/plugins/core.d.ts.map +1 -0
  468. package/dist/plugins/core.js +248 -0
  469. package/dist/plugins/core.js.map +1 -0
  470. package/dist/plugins/rbac.d.ts +54 -0
  471. package/dist/plugins/rbac.d.ts.map +1 -0
  472. package/dist/plugins/rbac.js +103 -0
  473. package/dist/plugins/rbac.js.map +1 -0
  474. package/dist/plugins/static.d.ts +12 -0
  475. package/dist/plugins/static.d.ts.map +1 -0
  476. package/dist/plugins/static.js +36 -0
  477. package/dist/plugins/static.js.map +1 -0
  478. package/dist/rbac/api-keys.d.ts +30 -0
  479. package/dist/rbac/api-keys.d.ts.map +1 -0
  480. package/dist/rbac/api-keys.js +41 -0
  481. package/dist/rbac/api-keys.js.map +1 -0
  482. package/dist/rbac/index.d.ts +6 -0
  483. package/dist/rbac/index.d.ts.map +1 -0
  484. package/dist/rbac/index.js +6 -0
  485. package/dist/rbac/index.js.map +1 -0
  486. package/dist/rbac/permissions.d.ts +107 -0
  487. package/dist/rbac/permissions.d.ts.map +1 -0
  488. package/dist/rbac/permissions.js +250 -0
  489. package/dist/rbac/permissions.js.map +1 -0
  490. package/dist/rbac/principal.d.ts +33 -0
  491. package/dist/rbac/principal.d.ts.map +1 -0
  492. package/dist/rbac/principal.js +31 -0
  493. package/dist/rbac/principal.js.map +1 -0
  494. package/dist/rbac/resolver.d.ts +26 -0
  495. package/dist/rbac/resolver.d.ts.map +1 -0
  496. package/dist/rbac/resolver.js +46 -0
  497. package/dist/rbac/resolver.js.map +1 -0
  498. package/dist/realtime/hub.d.ts +90 -0
  499. package/dist/realtime/hub.d.ts.map +1 -0
  500. package/dist/realtime/hub.js +146 -0
  501. package/dist/realtime/hub.js.map +1 -0
  502. package/dist/realtime/sse.d.ts +35 -0
  503. package/dist/realtime/sse.d.ts.map +1 -0
  504. package/dist/realtime/sse.js +88 -0
  505. package/dist/realtime/sse.js.map +1 -0
  506. package/dist/realtime/ws.d.ts +38 -0
  507. package/dist/realtime/ws.d.ts.map +1 -0
  508. package/dist/realtime/ws.js +124 -0
  509. package/dist/realtime/ws.js.map +1 -0
  510. package/dist/reports/schedule.d.ts +14 -0
  511. package/dist/reports/schedule.d.ts.map +1 -0
  512. package/dist/reports/schedule.js +63 -0
  513. package/dist/reports/schedule.js.map +1 -0
  514. package/dist/routes/about/index.d.ts +39 -0
  515. package/dist/routes/about/index.d.ts.map +1 -0
  516. package/dist/routes/about/index.js +73 -0
  517. package/dist/routes/about/index.js.map +1 -0
  518. package/dist/routes/about/schema.d.ts +50 -0
  519. package/dist/routes/about/schema.d.ts.map +1 -0
  520. package/dist/routes/about/schema.js +53 -0
  521. package/dist/routes/about/schema.js.map +1 -0
  522. package/dist/routes/api-keys/index.d.ts +11 -0
  523. package/dist/routes/api-keys/index.d.ts.map +1 -0
  524. package/dist/routes/api-keys/index.js +79 -0
  525. package/dist/routes/api-keys/index.js.map +1 -0
  526. package/dist/routes/api-keys/schema.d.ts +62 -0
  527. package/dist/routes/api-keys/schema.d.ts.map +1 -0
  528. package/dist/routes/api-keys/schema.js +37 -0
  529. package/dist/routes/api-keys/schema.js.map +1 -0
  530. package/dist/routes/audit/index.d.ts +11 -0
  531. package/dist/routes/audit/index.d.ts.map +1 -0
  532. package/dist/routes/audit/index.js +107 -0
  533. package/dist/routes/audit/index.js.map +1 -0
  534. package/dist/routes/audit/schema.d.ts +129 -0
  535. package/dist/routes/audit/schema.d.ts.map +1 -0
  536. package/dist/routes/audit/schema.js +43 -0
  537. package/dist/routes/audit/schema.js.map +1 -0
  538. package/dist/routes/auth/desktop-session.d.ts +48 -0
  539. package/dist/routes/auth/desktop-session.d.ts.map +1 -0
  540. package/dist/routes/auth/desktop-session.js +132 -0
  541. package/dist/routes/auth/desktop-session.js.map +1 -0
  542. package/dist/routes/auth/handlers.d.ts +21 -0
  543. package/dist/routes/auth/handlers.d.ts.map +1 -0
  544. package/dist/routes/auth/handlers.js +256 -0
  545. package/dist/routes/auth/handlers.js.map +1 -0
  546. package/dist/routes/auth/index.d.ts +27 -0
  547. package/dist/routes/auth/index.d.ts.map +1 -0
  548. package/dist/routes/auth/index.js +67 -0
  549. package/dist/routes/auth/index.js.map +1 -0
  550. package/dist/routes/auth/schema.d.ts +129 -0
  551. package/dist/routes/auth/schema.d.ts.map +1 -0
  552. package/dist/routes/auth/schema.js +84 -0
  553. package/dist/routes/auth/schema.js.map +1 -0
  554. package/dist/routes/bootstrap/handlers.d.ts +34 -0
  555. package/dist/routes/bootstrap/handlers.d.ts.map +1 -0
  556. package/dist/routes/bootstrap/handlers.js +96 -0
  557. package/dist/routes/bootstrap/handlers.js.map +1 -0
  558. package/dist/routes/bootstrap/index.d.ts +9 -0
  559. package/dist/routes/bootstrap/index.d.ts.map +1 -0
  560. package/dist/routes/bootstrap/index.js +16 -0
  561. package/dist/routes/bootstrap/index.js.map +1 -0
  562. package/dist/routes/bootstrap/schema.d.ts +177 -0
  563. package/dist/routes/bootstrap/schema.d.ts.map +1 -0
  564. package/dist/routes/bootstrap/schema.js +55 -0
  565. package/dist/routes/bootstrap/schema.js.map +1 -0
  566. package/dist/routes/connections/index.d.ts +21 -0
  567. package/dist/routes/connections/index.d.ts.map +1 -0
  568. package/dist/routes/connections/index.js +260 -0
  569. package/dist/routes/connections/index.js.map +1 -0
  570. package/dist/routes/connections/schema.d.ts +161 -0
  571. package/dist/routes/connections/schema.d.ts.map +1 -0
  572. package/dist/routes/connections/schema.js +91 -0
  573. package/dist/routes/connections/schema.js.map +1 -0
  574. package/dist/routes/data/index.d.ts +46 -0
  575. package/dist/routes/data/index.d.ts.map +1 -0
  576. package/dist/routes/data/index.js +508 -0
  577. package/dist/routes/data/index.js.map +1 -0
  578. package/dist/routes/data/schema.d.ts +128 -0
  579. package/dist/routes/data/schema.d.ts.map +1 -0
  580. package/dist/routes/data/schema.js +83 -0
  581. package/dist/routes/data/schema.js.map +1 -0
  582. package/dist/routes/desktop/index.d.ts +61 -0
  583. package/dist/routes/desktop/index.d.ts.map +1 -0
  584. package/dist/routes/desktop/index.js +91 -0
  585. package/dist/routes/desktop/index.js.map +1 -0
  586. package/dist/routes/desktop/schema.d.ts +71 -0
  587. package/dist/routes/desktop/schema.d.ts.map +1 -0
  588. package/dist/routes/desktop/schema.js +58 -0
  589. package/dist/routes/desktop/schema.js.map +1 -0
  590. package/dist/routes/desktop-capabilities/index.d.ts +9 -0
  591. package/dist/routes/desktop-capabilities/index.d.ts.map +1 -0
  592. package/dist/routes/desktop-capabilities/index.js +62 -0
  593. package/dist/routes/desktop-capabilities/index.js.map +1 -0
  594. package/dist/routes/desktop-capabilities/schema.d.ts +46 -0
  595. package/dist/routes/desktop-capabilities/schema.d.ts.map +1 -0
  596. package/dist/routes/desktop-capabilities/schema.js +30 -0
  597. package/dist/routes/desktop-capabilities/schema.js.map +1 -0
  598. package/dist/routes/desktop-demo/handlers.d.ts +94 -0
  599. package/dist/routes/desktop-demo/handlers.d.ts.map +1 -0
  600. package/dist/routes/desktop-demo/handlers.js +182 -0
  601. package/dist/routes/desktop-demo/handlers.js.map +1 -0
  602. package/dist/routes/desktop-demo/index.d.ts +39 -0
  603. package/dist/routes/desktop-demo/index.d.ts.map +1 -0
  604. package/dist/routes/desktop-demo/index.js +73 -0
  605. package/dist/routes/desktop-demo/index.js.map +1 -0
  606. package/dist/routes/desktop-demo/schema.d.ts +17 -0
  607. package/dist/routes/desktop-demo/schema.d.ts.map +1 -0
  608. package/dist/routes/desktop-demo/schema.js +30 -0
  609. package/dist/routes/desktop-demo/schema.js.map +1 -0
  610. package/dist/routes/desktop-lan/index.d.ts +54 -0
  611. package/dist/routes/desktop-lan/index.d.ts.map +1 -0
  612. package/dist/routes/desktop-lan/index.js +33 -0
  613. package/dist/routes/desktop-lan/index.js.map +1 -0
  614. package/dist/routes/desktop-lan/schema.d.ts +24 -0
  615. package/dist/routes/desktop-lan/schema.d.ts.map +1 -0
  616. package/dist/routes/desktop-lan/schema.js +40 -0
  617. package/dist/routes/desktop-lan/schema.js.map +1 -0
  618. package/dist/routes/desktop-local-db/handlers.d.ts +92 -0
  619. package/dist/routes/desktop-local-db/handlers.d.ts.map +1 -0
  620. package/dist/routes/desktop-local-db/handlers.js +300 -0
  621. package/dist/routes/desktop-local-db/handlers.js.map +1 -0
  622. package/dist/routes/desktop-local-db/index.d.ts +39 -0
  623. package/dist/routes/desktop-local-db/index.d.ts.map +1 -0
  624. package/dist/routes/desktop-local-db/index.js +83 -0
  625. package/dist/routes/desktop-local-db/index.js.map +1 -0
  626. package/dist/routes/desktop-local-db/placeholder.d.ts +75 -0
  627. package/dist/routes/desktop-local-db/placeholder.d.ts.map +1 -0
  628. package/dist/routes/desktop-local-db/placeholder.js +420 -0
  629. package/dist/routes/desktop-local-db/placeholder.js.map +1 -0
  630. package/dist/routes/desktop-local-db/schema.d.ts +50 -0
  631. package/dist/routes/desktop-local-db/schema.d.ts.map +1 -0
  632. package/dist/routes/desktop-local-db/schema.js +71 -0
  633. package/dist/routes/desktop-local-db/schema.js.map +1 -0
  634. package/dist/routes/desktop-local-db/sqlite-ddl.d.ts +104 -0
  635. package/dist/routes/desktop-local-db/sqlite-ddl.d.ts.map +1 -0
  636. package/dist/routes/desktop-local-db/sqlite-ddl.js +419 -0
  637. package/dist/routes/desktop-local-db/sqlite-ddl.js.map +1 -0
  638. package/dist/routes/email-templates/index.d.ts +7 -0
  639. package/dist/routes/email-templates/index.d.ts.map +1 -0
  640. package/dist/routes/email-templates/index.js +70 -0
  641. package/dist/routes/email-templates/index.js.map +1 -0
  642. package/dist/routes/email-templates/schema.d.ts +54 -0
  643. package/dist/routes/email-templates/schema.d.ts.map +1 -0
  644. package/dist/routes/email-templates/schema.js +35 -0
  645. package/dist/routes/email-templates/schema.js.map +1 -0
  646. package/dist/routes/exports/index.d.ts +19 -0
  647. package/dist/routes/exports/index.d.ts.map +1 -0
  648. package/dist/routes/exports/index.js +145 -0
  649. package/dist/routes/exports/index.js.map +1 -0
  650. package/dist/routes/exports/schema.d.ts +183 -0
  651. package/dist/routes/exports/schema.d.ts.map +1 -0
  652. package/dist/routes/exports/schema.js +37 -0
  653. package/dist/routes/exports/schema.js.map +1 -0
  654. package/dist/routes/generate/index.d.ts +23 -0
  655. package/dist/routes/generate/index.d.ts.map +1 -0
  656. package/dist/routes/generate/index.js +80 -0
  657. package/dist/routes/generate/index.js.map +1 -0
  658. package/dist/routes/generate/schema.d.ts +43 -0
  659. package/dist/routes/generate/schema.d.ts.map +1 -0
  660. package/dist/routes/generate/schema.js +37 -0
  661. package/dist/routes/generate/schema.js.map +1 -0
  662. package/dist/routes/imports/index.d.ts +21 -0
  663. package/dist/routes/imports/index.d.ts.map +1 -0
  664. package/dist/routes/imports/index.js +288 -0
  665. package/dist/routes/imports/index.js.map +1 -0
  666. package/dist/routes/imports/schema.d.ts +292 -0
  667. package/dist/routes/imports/schema.d.ts.map +1 -0
  668. package/dist/routes/imports/schema.js +78 -0
  669. package/dist/routes/imports/schema.js.map +1 -0
  670. package/dist/routes/index.d.ts +11 -0
  671. package/dist/routes/index.d.ts.map +1 -0
  672. package/dist/routes/index.js +8 -0
  673. package/dist/routes/index.js.map +1 -0
  674. package/dist/routes/jobs/index.d.ts +29 -0
  675. package/dist/routes/jobs/index.d.ts.map +1 -0
  676. package/dist/routes/jobs/index.js +175 -0
  677. package/dist/routes/jobs/index.js.map +1 -0
  678. package/dist/routes/jobs/schema.d.ts +170 -0
  679. package/dist/routes/jobs/schema.d.ts.map +1 -0
  680. package/dist/routes/jobs/schema.js +57 -0
  681. package/dist/routes/jobs/schema.js.map +1 -0
  682. package/dist/routes/llm/config-service.d.ts +48 -0
  683. package/dist/routes/llm/config-service.d.ts.map +1 -0
  684. package/dist/routes/llm/config-service.js +102 -0
  685. package/dist/routes/llm/config-service.js.map +1 -0
  686. package/dist/routes/llm/index.d.ts +69 -0
  687. package/dist/routes/llm/index.d.ts.map +1 -0
  688. package/dist/routes/llm/index.js +412 -0
  689. package/dist/routes/llm/index.js.map +1 -0
  690. package/dist/routes/llm/schema.d.ts +605 -0
  691. package/dist/routes/llm/schema.d.ts.map +1 -0
  692. package/dist/routes/llm/schema.js +238 -0
  693. package/dist/routes/llm/schema.js.map +1 -0
  694. package/dist/routes/me/handlers.d.ts +14 -0
  695. package/dist/routes/me/handlers.d.ts.map +1 -0
  696. package/dist/routes/me/handlers.js +88 -0
  697. package/dist/routes/me/handlers.js.map +1 -0
  698. package/dist/routes/me/index.d.ts +8 -0
  699. package/dist/routes/me/index.d.ts.map +1 -0
  700. package/dist/routes/me/index.js +17 -0
  701. package/dist/routes/me/index.js.map +1 -0
  702. package/dist/routes/me/schema.d.ts +270 -0
  703. package/dist/routes/me/schema.d.ts.map +1 -0
  704. package/dist/routes/me/schema.js +59 -0
  705. package/dist/routes/me/schema.js.map +1 -0
  706. package/dist/routes/me-views/index.d.ts +23 -0
  707. package/dist/routes/me-views/index.d.ts.map +1 -0
  708. package/dist/routes/me-views/index.js +76 -0
  709. package/dist/routes/me-views/index.js.map +1 -0
  710. package/dist/routes/me-views/schema.d.ts +44 -0
  711. package/dist/routes/me-views/schema.d.ts.map +1 -0
  712. package/dist/routes/me-views/schema.js +13 -0
  713. package/dist/routes/me-views/schema.js.map +1 -0
  714. package/dist/routes/notifications/index.d.ts +19 -0
  715. package/dist/routes/notifications/index.d.ts.map +1 -0
  716. package/dist/routes/notifications/index.js +123 -0
  717. package/dist/routes/notifications/index.js.map +1 -0
  718. package/dist/routes/notifications/schema.d.ts +122 -0
  719. package/dist/routes/notifications/schema.d.ts.map +1 -0
  720. package/dist/routes/notifications/schema.js +83 -0
  721. package/dist/routes/notifications/schema.js.map +1 -0
  722. package/dist/routes/onboarding/derive.d.ts +41 -0
  723. package/dist/routes/onboarding/derive.d.ts.map +1 -0
  724. package/dist/routes/onboarding/derive.js +30 -0
  725. package/dist/routes/onboarding/derive.js.map +1 -0
  726. package/dist/routes/onboarding/index.d.ts +26 -0
  727. package/dist/routes/onboarding/index.d.ts.map +1 -0
  728. package/dist/routes/onboarding/index.js +95 -0
  729. package/dist/routes/onboarding/index.js.map +1 -0
  730. package/dist/routes/onboarding/schema.d.ts +22 -0
  731. package/dist/routes/onboarding/schema.d.ts.map +1 -0
  732. package/dist/routes/onboarding/schema.js +22 -0
  733. package/dist/routes/onboarding/schema.js.map +1 -0
  734. package/dist/routes/pages/index.d.ts +26 -0
  735. package/dist/routes/pages/index.d.ts.map +1 -0
  736. package/dist/routes/pages/index.js +119 -0
  737. package/dist/routes/pages/index.js.map +1 -0
  738. package/dist/routes/pages/layout-schema.d.ts +19 -0
  739. package/dist/routes/pages/layout-schema.d.ts.map +1 -0
  740. package/dist/routes/pages/layout-schema.js +19 -0
  741. package/dist/routes/pages/layout-schema.js.map +1 -0
  742. package/dist/routes/pages/schema.d.ts +52 -0
  743. package/dist/routes/pages/schema.d.ts.map +1 -0
  744. package/dist/routes/pages/schema.js +35 -0
  745. package/dist/routes/pages/schema.js.map +1 -0
  746. package/dist/routes/roles/index.d.ts +17 -0
  747. package/dist/routes/roles/index.d.ts.map +1 -0
  748. package/dist/routes/roles/index.js +255 -0
  749. package/dist/routes/roles/index.js.map +1 -0
  750. package/dist/routes/roles/schema.d.ts +94 -0
  751. package/dist/routes/roles/schema.d.ts.map +1 -0
  752. package/dist/routes/roles/schema.js +57 -0
  753. package/dist/routes/roles/schema.js.map +1 -0
  754. package/dist/routes/scheduled-reports/index.d.ts +15 -0
  755. package/dist/routes/scheduled-reports/index.d.ts.map +1 -0
  756. package/dist/routes/scheduled-reports/index.js +195 -0
  757. package/dist/routes/scheduled-reports/index.js.map +1 -0
  758. package/dist/routes/scheduled-reports/schema.d.ts +154 -0
  759. package/dist/routes/scheduled-reports/schema.d.ts.map +1 -0
  760. package/dist/routes/scheduled-reports/schema.js +49 -0
  761. package/dist/routes/scheduled-reports/schema.js.map +1 -0
  762. package/dist/routes/schema/index.d.ts +24 -0
  763. package/dist/routes/schema/index.d.ts.map +1 -0
  764. package/dist/routes/schema/index.js +224 -0
  765. package/dist/routes/schema/index.js.map +1 -0
  766. package/dist/routes/schema/schema.d.ts +92 -0
  767. package/dist/routes/schema/schema.d.ts.map +1 -0
  768. package/dist/routes/schema/schema.js +64 -0
  769. package/dist/routes/schema/schema.js.map +1 -0
  770. package/dist/routes/schema-import/fallback-parser.d.ts +35 -0
  771. package/dist/routes/schema-import/fallback-parser.d.ts.map +1 -0
  772. package/dist/routes/schema-import/fallback-parser.js +349 -0
  773. package/dist/routes/schema-import/fallback-parser.js.map +1 -0
  774. package/dist/routes/schema-import/index.d.ts +43 -0
  775. package/dist/routes/schema-import/index.d.ts.map +1 -0
  776. package/dist/routes/schema-import/index.js +167 -0
  777. package/dist/routes/schema-import/index.js.map +1 -0
  778. package/dist/routes/schema-import/schema.d.ts +65 -0
  779. package/dist/routes/schema-import/schema.d.ts.map +1 -0
  780. package/dist/routes/schema-import/schema.js +40 -0
  781. package/dist/routes/schema-import/schema.js.map +1 -0
  782. package/dist/routes/search/index.d.ts +71 -0
  783. package/dist/routes/search/index.d.ts.map +1 -0
  784. package/dist/routes/search/index.js +361 -0
  785. package/dist/routes/search/index.js.map +1 -0
  786. package/dist/routes/search/schema.d.ts +125 -0
  787. package/dist/routes/search/schema.d.ts.map +1 -0
  788. package/dist/routes/search/schema.js +70 -0
  789. package/dist/routes/search/schema.js.map +1 -0
  790. package/dist/routes/settings/index.d.ts +24 -0
  791. package/dist/routes/settings/index.d.ts.map +1 -0
  792. package/dist/routes/settings/index.js +164 -0
  793. package/dist/routes/settings/index.js.map +1 -0
  794. package/dist/routes/settings/schema.d.ts +110 -0
  795. package/dist/routes/settings/schema.d.ts.map +1 -0
  796. package/dist/routes/settings/schema.js +71 -0
  797. package/dist/routes/settings/schema.js.map +1 -0
  798. package/dist/routes/setup/index.d.ts +29 -0
  799. package/dist/routes/setup/index.d.ts.map +1 -0
  800. package/dist/routes/setup/index.js +68 -0
  801. package/dist/routes/setup/index.js.map +1 -0
  802. package/dist/routes/setup/schema.d.ts +61 -0
  803. package/dist/routes/setup/schema.d.ts.map +1 -0
  804. package/dist/routes/setup/schema.js +47 -0
  805. package/dist/routes/setup/schema.js.map +1 -0
  806. package/dist/routes/system/handlers.d.ts +63 -0
  807. package/dist/routes/system/handlers.d.ts.map +1 -0
  808. package/dist/routes/system/handlers.js +121 -0
  809. package/dist/routes/system/handlers.js.map +1 -0
  810. package/dist/routes/system/index.d.ts +34 -0
  811. package/dist/routes/system/index.d.ts.map +1 -0
  812. package/dist/routes/system/index.js +18 -0
  813. package/dist/routes/system/index.js.map +1 -0
  814. package/dist/routes/system/schema.d.ts +93 -0
  815. package/dist/routes/system/schema.d.ts.map +1 -0
  816. package/dist/routes/system/schema.js +109 -0
  817. package/dist/routes/system/schema.js.map +1 -0
  818. package/dist/routes/views/index.d.ts +21 -0
  819. package/dist/routes/views/index.d.ts.map +1 -0
  820. package/dist/routes/views/index.js +155 -0
  821. package/dist/routes/views/index.js.map +1 -0
  822. package/dist/routes/views/schema.d.ts +127 -0
  823. package/dist/routes/views/schema.d.ts.map +1 -0
  824. package/dist/routes/views/schema.js +56 -0
  825. package/dist/routes/views/schema.js.map +1 -0
  826. package/dist/routes/widget-data/index.d.ts +29 -0
  827. package/dist/routes/widget-data/index.d.ts.map +1 -0
  828. package/dist/routes/widget-data/index.js +152 -0
  829. package/dist/routes/widget-data/index.js.map +1 -0
  830. package/dist/routes/widget-data/schema.d.ts +252 -0
  831. package/dist/routes/widget-data/schema.d.ts.map +1 -0
  832. package/dist/routes/widget-data/schema.js +44 -0
  833. package/dist/routes/widget-data/schema.js.map +1 -0
  834. package/dist/setup/service.d.ts +63 -0
  835. package/dist/setup/service.d.ts.map +1 -0
  836. package/dist/setup/service.js +103 -0
  837. package/dist/setup/service.js.map +1 -0
  838. package/dist/start.d.ts +12 -0
  839. package/dist/start.d.ts.map +1 -0
  840. package/dist/start.js +28 -0
  841. package/dist/start.js.map +1 -0
  842. package/dist/telemetry/payload.d.ts +66 -0
  843. package/dist/telemetry/payload.d.ts.map +1 -0
  844. package/dist/telemetry/payload.js +69 -0
  845. package/dist/telemetry/payload.js.map +1 -0
  846. package/dist/telemetry/service.d.ts +67 -0
  847. package/dist/telemetry/service.d.ts.map +1 -0
  848. package/dist/telemetry/service.js +103 -0
  849. package/dist/telemetry/service.js.map +1 -0
  850. package/dist/telemetry/update-check.d.ts +79 -0
  851. package/dist/telemetry/update-check.d.ts.map +1 -0
  852. package/dist/telemetry/update-check.js +103 -0
  853. package/dist/telemetry/update-check.js.map +1 -0
  854. package/dist/version.d.ts +14 -0
  855. package/dist/version.d.ts.map +1 -0
  856. package/dist/version.js +21 -0
  857. package/dist/version.js.map +1 -0
  858. package/dist/widget-data/cache.d.ts +35 -0
  859. package/dist/widget-data/cache.d.ts.map +1 -0
  860. package/dist/widget-data/cache.js +67 -0
  861. package/dist/widget-data/cache.js.map +1 -0
  862. package/dist/widget-data/compiler.d.ts +107 -0
  863. package/dist/widget-data/compiler.d.ts.map +1 -0
  864. package/dist/widget-data/compiler.js +362 -0
  865. package/dist/widget-data/compiler.js.map +1 -0
  866. package/dist/widget-data/shapers.d.ts +75 -0
  867. package/dist/widget-data/shapers.d.ts.map +1 -0
  868. package/dist/widget-data/shapers.js +128 -0
  869. package/dist/widget-data/shapers.js.map +1 -0
  870. package/dist/widget-data/stream-publisher.d.ts +42 -0
  871. package/dist/widget-data/stream-publisher.d.ts.map +1 -0
  872. package/dist/widget-data/stream-publisher.js +34 -0
  873. package/dist/widget-data/stream-publisher.js.map +1 -0
  874. package/package.json +79 -0
  875. package/vocabulary/llm-allowlist.json +76 -0
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Wire schemas for the desktop capability grant table (11-electron.md §12).
3
+ *
4
+ * The grant identity `{ manifestId, capabilityId }` is the body of both POST
5
+ * (consent) and DELETE (revoke) — one shape, so a form that can grant can revoke
6
+ * the same thing. `capabilityId` is the closed host vocabulary (`catalog.ts`),
7
+ * NOT a free string: a grant for a capability this build has no provider for
8
+ * would be a dead row that the consent UI could offer and the host could never
9
+ * honour, so an unknown id is a 422 here rather than a persisted lie.
10
+ */
11
+ import { z } from 'zod';
12
+ /** The identity written by consent / removed by revoke. */
13
+ export declare const capabilityGrantRefBody: z.ZodObject<{
14
+ manifestId: z.ZodString;
15
+ capabilityId: z.ZodEnum<{
16
+ "printer.escpos": "printer.escpos";
17
+ }>;
18
+ }, z.core.$strict>;
19
+ export type CapabilityGrantRefBody = z.infer<typeof capabilityGrantRefBody>;
20
+ export declare const capabilityGrantsListReply: z.ZodObject<{
21
+ data: z.ZodObject<{
22
+ grants: z.ZodArray<z.ZodObject<{
23
+ manifestId: z.ZodString;
24
+ capabilityId: z.ZodString;
25
+ grantedAt: z.ZodNumber;
26
+ }, z.core.$strip>>;
27
+ }, z.core.$strip>;
28
+ }, z.core.$strip>;
29
+ export type CapabilityGrantsListReply = z.infer<typeof capabilityGrantsListReply>;
30
+ export declare const capabilityGrantReply: z.ZodObject<{
31
+ data: z.ZodObject<{
32
+ grant: z.ZodObject<{
33
+ manifestId: z.ZodString;
34
+ capabilityId: z.ZodString;
35
+ grantedAt: z.ZodNumber;
36
+ }, z.core.$strip>;
37
+ }, z.core.$strip>;
38
+ }, z.core.$strip>;
39
+ export type CapabilityGrantReply = z.infer<typeof capabilityGrantReply>;
40
+ export declare const capabilityRevokeReply: z.ZodObject<{
41
+ data: z.ZodObject<{
42
+ removed: z.ZodBoolean;
43
+ }, z.core.$strip>;
44
+ }, z.core.$strip>;
45
+ export type CapabilityRevokeReply = z.infer<typeof capabilityRevokeReply>;
46
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/routes/desktop-capabilities/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,2DAA2D;AAC3D,eAAO,MAAM,sBAAsB;;;;;kBAIjC,CAAC;AACH,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAE5E,eAAO,MAAM,yBAAyB;;;;;;;;iBAEpC,CAAC;AACH,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAElF,eAAO,MAAM,oBAAoB;;;;;;;;iBAE/B,CAAC;AACH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAExE,eAAO,MAAM,qBAAqB;;;;iBAGhC,CAAC;AACH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Wire schemas for the desktop capability grant table (11-electron.md §12).
3
+ *
4
+ * The grant identity `{ manifestId, capabilityId }` is the body of both POST
5
+ * (consent) and DELETE (revoke) — one shape, so a form that can grant can revoke
6
+ * the same thing. `capabilityId` is the closed host vocabulary (`catalog.ts`),
7
+ * NOT a free string: a grant for a capability this build has no provider for
8
+ * would be a dead row that the consent UI could offer and the host could never
9
+ * honour, so an unknown id is a 422 here rather than a persisted lie.
10
+ */
11
+ import { z } from 'zod';
12
+ import { capabilityGrantSchema } from '@adminium/meta';
13
+ import { capabilityIdSchema } from '../../capabilities/catalog.js';
14
+ /** The identity written by consent / removed by revoke. */
15
+ export const capabilityGrantRefBody = z.strictObject({
16
+ /** The installed micro-SaaS manifest's id (reverse-DNS; §12 / 13-marketplace.md). */
17
+ manifestId: z.string().min(1).max(200),
18
+ capabilityId: capabilityIdSchema,
19
+ });
20
+ export const capabilityGrantsListReply = z.object({
21
+ data: z.object({ grants: z.array(capabilityGrantSchema) }),
22
+ });
23
+ export const capabilityGrantReply = z.object({
24
+ data: z.object({ grant: capabilityGrantSchema }),
25
+ });
26
+ export const capabilityRevokeReply = z.object({
27
+ /** `removed: false` when there was no such grant — revoke is idempotent, not an error. */
28
+ data: z.object({ removed: z.boolean() }),
29
+ });
30
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/routes/desktop-capabilities/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAEvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAEnE,2DAA2D;AAC3D,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,YAAY,CAAC;IACnD,qFAAqF;IACrF,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IACtC,YAAY,EAAE,kBAAkB;CACjC,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChD,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,qBAAqB,CAAC,EAAE,CAAC;CAC3D,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,qBAAqB,EAAE,CAAC;CACjD,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,0FAA0F;IAC1F,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;CACzC,CAAC,CAAC"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * The demo database — seed the file, register the connection (11-electron.md §6
3
+ * step 2 card 4, task 11-T08).
4
+ *
5
+ * ─── WHY THE SEED SCRIPT IS LOADED BY PATH ───────────────────────────────────
6
+ *
7
+ * `demo-seed.mjs` lives in `apps/desktop/resources/`, and `@adminium/server` may
8
+ * not import `@adminium/desktop` — the dependency arrow points the other way
9
+ * (.dependency-cruiser.cjs, rule `desktop-shell-only`), and it points that way
10
+ * because self-host and Docker run this same server with no desktop package
11
+ * within a mile of them. So the shell TELLS the server where the script is
12
+ * (`ADMINIUM_DEMO_SEED_SCRIPT`, §2.2's env block) and the server imports that
13
+ * path at runtime. `compose.ts` already loads `@adminium/widgets` by file path
14
+ * for the same boundary reason; this is that pattern, not a new one.
15
+ *
16
+ * ─── WHY THE SERVER OPENS THE FILE, NOT THE SCRIPT ───────────────────────────
17
+ *
18
+ * §2.1: "The server is the only data owner." The script is a pure description of
19
+ * a schema and its rows; the `better-sqlite3` handle it writes through is opened
20
+ * here, by the process that owns every other database handle in the app. That
21
+ * also keeps the script free of module resolution — see its header.
22
+ */
23
+ import BetterSqlite3 from 'better-sqlite3';
24
+ import type { ConnectionManager } from '../../connections/manager.js';
25
+ /** §6: "creates `<dataDir>/databases/demo.sqlite`". Both halves are spec'd. */
26
+ export declare const DEMO_DATABASE_DIR = "databases";
27
+ export declare const DEMO_DATABASE_FILE = "demo.sqlite";
28
+ /** What `demo-seed.mjs` exports. Structural — the script is plain JS. */
29
+ export interface DemoSeeder {
30
+ createDemoDatabase(input: {
31
+ file: string;
32
+ Database: typeof BetterSqlite3;
33
+ }): Record<string, number>;
34
+ }
35
+ /** Rows-per-table, as the script reports them. */
36
+ export type DemoSeedCounts = Record<string, number>;
37
+ export interface DemoDatabaseResult {
38
+ connectionId: string;
39
+ name: string;
40
+ file: string;
41
+ seeded: boolean;
42
+ rows: DemoSeedCounts;
43
+ }
44
+ export interface DemoDatabaseDeps {
45
+ manager: ConnectionManager;
46
+ /** `ADMINIUM_DATA_DIR` — the demo lands under it (§2.2/§6). */
47
+ dataDir: string;
48
+ /** Absolute path to `demo-seed.mjs` (`ADMINIUM_DEMO_SEED_SCRIPT`). */
49
+ seedScriptPath: string;
50
+ /**
51
+ * Test seam. Production leaves it out and gets {@link importDemoSeeder}, which
52
+ * imports {@link DemoDatabaseDeps.seedScriptPath} — the suites point it at the
53
+ * REAL script rather than replacing it, because a fake seeder would test the
54
+ * plumbing and not the fixture the whole task exists to produce.
55
+ */
56
+ loadSeeder?: ((scriptPath: string) => Promise<DemoSeeder>) | undefined;
57
+ }
58
+ /**
59
+ * `import()` the seed script. The `file://` URL is required, not cosmetic: an
60
+ * absolute Windows path (`C:\…`) is not a valid ESM specifier and throws
61
+ * `ERR_UNSUPPORTED_ESM_URL_SCHEME`, which would make this route fail on exactly
62
+ * one of the three platforms §10 ships.
63
+ */
64
+ export declare function importDemoSeeder(scriptPath: string): Promise<DemoSeeder>;
65
+ /** `<dataDir>/databases/demo.sqlite`, absolute. */
66
+ export declare function demoDatabaseFile(dataDir: string): string;
67
+ /** §6: "registered in `adminium_connections` as `sqlite:<absolute path>`". */
68
+ export declare function demoDsn(file: string): string;
69
+ /**
70
+ * Create the demo database and register it.
71
+ *
72
+ * THREE STATES, because §6 promises the connection is "deletable afterwards from
73
+ * Data Connections … nothing special" — and deleting a connection does not
74
+ * delete the file behind it. So:
75
+ *
76
+ * 1. A connection already points at the demo file ⇒ 409. The wizard sends the
77
+ * user to the connection it already has; re-seeding underneath a live
78
+ * connection would silently discard whatever they had done to it.
79
+ * 2. The file exists but no connection does (they deleted it and came back)
80
+ * ⇒ adopt the file as-is. NOT re-seeded: the app never destroys data the
81
+ * user could have edited (§9's ethos — even `restore` only moves data
82
+ * aside), and a demo they had been playing in is exactly that.
83
+ * 3. Neither ⇒ seed, then register.
84
+ *
85
+ * State 2 is the one worth having: without it, deleting the demo connection
86
+ * leaves the user permanently unable to make another (the file is in the way and
87
+ * nothing in the UI removes it), which is a dead end reachable by one click on a
88
+ * button the wizard offers.
89
+ */
90
+ export declare function createDemoDatabaseHandler(deps: DemoDatabaseDeps, input: {
91
+ name: string;
92
+ actorId: string | null;
93
+ }): Promise<DemoDatabaseResult>;
94
+ //# sourceMappingURL=handlers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../../src/routes/desktop-demo/handlers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,aAAa,MAAM,gBAAgB,CAAC;AAQ3C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAEtE,+EAA+E;AAC/E,eAAO,MAAM,iBAAiB,cAAc,CAAC;AAC7C,eAAO,MAAM,kBAAkB,gBAAgB,CAAC;AAEhD,yEAAyE;AACzE,MAAM,WAAW,UAAU;IACzB,kBAAkB,CAAC,KAAK,EAAE;QACxB,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,OAAO,aAAa,CAAC;KAChC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC5B;AAED,kDAAkD;AAClD,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAEpD,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,cAAc,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,iBAAiB,CAAC;IAC3B,+DAA+D;IAC/D,OAAO,EAAE,MAAM,CAAC;IAChB,sEAAsE;IACtE,cAAc,EAAE,MAAM,CAAC;IACvB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,CAAC,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,SAAS,CAAC;CACxE;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAW9E;AAED,mDAAmD;AACnD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,8EAA8E;AAC9E,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE5C;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,yBAAyB,CAC7C,IAAI,EAAE,gBAAgB,EACtB,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAC9C,OAAO,CAAC,kBAAkB,CAAC,CAkD7B"}
@@ -0,0 +1,182 @@
1
+ /**
2
+ * The demo database — seed the file, register the connection (11-electron.md §6
3
+ * step 2 card 4, task 11-T08).
4
+ *
5
+ * ─── WHY THE SEED SCRIPT IS LOADED BY PATH ───────────────────────────────────
6
+ *
7
+ * `demo-seed.mjs` lives in `apps/desktop/resources/`, and `@adminium/server` may
8
+ * not import `@adminium/desktop` — the dependency arrow points the other way
9
+ * (.dependency-cruiser.cjs, rule `desktop-shell-only`), and it points that way
10
+ * because self-host and Docker run this same server with no desktop package
11
+ * within a mile of them. So the shell TELLS the server where the script is
12
+ * (`ADMINIUM_DEMO_SEED_SCRIPT`, §2.2's env block) and the server imports that
13
+ * path at runtime. `compose.ts` already loads `@adminium/widgets` by file path
14
+ * for the same boundary reason; this is that pattern, not a new one.
15
+ *
16
+ * ─── WHY THE SERVER OPENS THE FILE, NOT THE SCRIPT ───────────────────────────
17
+ *
18
+ * §2.1: "The server is the only data owner." The script is a pure description of
19
+ * a schema and its rows; the `better-sqlite3` handle it writes through is opened
20
+ * here, by the process that owns every other database handle in the app. That
21
+ * also keeps the script free of module resolution — see its header.
22
+ */
23
+ import BetterSqlite3 from 'better-sqlite3';
24
+ import { mkdir, rename, rm } from 'node:fs/promises';
25
+ import { existsSync } from 'node:fs';
26
+ import { randomUUID } from 'node:crypto';
27
+ import { dirname, join, resolve } from 'node:path';
28
+ import { pathToFileURL } from 'node:url';
29
+ import { AppError } from '../../errors.js';
30
+ /** §6: "creates `<dataDir>/databases/demo.sqlite`". Both halves are spec'd. */
31
+ export const DEMO_DATABASE_DIR = 'databases';
32
+ export const DEMO_DATABASE_FILE = 'demo.sqlite';
33
+ /**
34
+ * `import()` the seed script. The `file://` URL is required, not cosmetic: an
35
+ * absolute Windows path (`C:\…`) is not a valid ESM specifier and throws
36
+ * `ERR_UNSUPPORTED_ESM_URL_SCHEME`, which would make this route fail on exactly
37
+ * one of the three platforms §10 ships.
38
+ */
39
+ export async function importDemoSeeder(scriptPath) {
40
+ const module = await import(pathToFileURL(scriptPath).href);
41
+ const seeder = module;
42
+ if (typeof seeder.createDemoDatabase !== 'function') {
43
+ throw new AppError(500, 'INTERNAL', `The demo seed script at ${scriptPath} does not export createDemoDatabase().`);
44
+ }
45
+ return seeder;
46
+ }
47
+ /** `<dataDir>/databases/demo.sqlite`, absolute. */
48
+ export function demoDatabaseFile(dataDir) {
49
+ return join(resolve(dataDir), DEMO_DATABASE_DIR, DEMO_DATABASE_FILE);
50
+ }
51
+ /** §6: "registered in `adminium_connections` as `sqlite:<absolute path>`". */
52
+ export function demoDsn(file) {
53
+ return `sqlite:${file}`;
54
+ }
55
+ /**
56
+ * Create the demo database and register it.
57
+ *
58
+ * THREE STATES, because §6 promises the connection is "deletable afterwards from
59
+ * Data Connections … nothing special" — and deleting a connection does not
60
+ * delete the file behind it. So:
61
+ *
62
+ * 1. A connection already points at the demo file ⇒ 409. The wizard sends the
63
+ * user to the connection it already has; re-seeding underneath a live
64
+ * connection would silently discard whatever they had done to it.
65
+ * 2. The file exists but no connection does (they deleted it and came back)
66
+ * ⇒ adopt the file as-is. NOT re-seeded: the app never destroys data the
67
+ * user could have edited (§9's ethos — even `restore` only moves data
68
+ * aside), and a demo they had been playing in is exactly that.
69
+ * 3. Neither ⇒ seed, then register.
70
+ *
71
+ * State 2 is the one worth having: without it, deleting the demo connection
72
+ * leaves the user permanently unable to make another (the file is in the way and
73
+ * nothing in the UI removes it), which is a dead end reachable by one click on a
74
+ * button the wizard offers.
75
+ */
76
+ export async function createDemoDatabaseHandler(deps, input) {
77
+ const file = demoDatabaseFile(deps.dataDir);
78
+ const dsn = demoDsn(file);
79
+ const existing = await findDemoConnection(deps.manager, dsn);
80
+ if (existing !== null) {
81
+ throw new AppError(409, 'CONFLICT', 'The demo database is already connected. Delete it from Data Connections to start over.', { connectionId: existing });
82
+ }
83
+ let seeded = false;
84
+ let rows = {};
85
+ if (!existsSync(file)) {
86
+ rows = await seedDemoFile(deps, file);
87
+ seeded = true;
88
+ }
89
+ // The same probe `POST /connections` runs, for the same reasons: it decides
90
+ // `readOnly` and it is what `enforceMetaPlacement` reads. A demo file cannot
91
+ // BE the meta store (§2.1 puts that at `<dataDir>/meta.db`), but the check is
92
+ // cheap and asserting placement here rather than assuming it means the day
93
+ // someone changes either path, this fails loudly instead of quietly sharing.
94
+ const summary = await deps.manager.testDsn('sqlite', dsn);
95
+ if (summary.ok)
96
+ deps.manager.enforceMetaPlacement(dsn, summary);
97
+ const connection = await deps.manager.connections.create({
98
+ name: input.name,
99
+ engine: 'sqlite',
100
+ sourceKind: 'dsn',
101
+ introspectDsn: dsn,
102
+ // One role: `POST /connections` stores `null` when data and introspect are
103
+ // the same string, and Data Connections renders whichever is set.
104
+ dataDsn: null,
105
+ readOnly: summary.readOnly,
106
+ settings: {},
107
+ status: summary.ok ? 'connected' : 'error',
108
+ createdBy: input.actorId,
109
+ });
110
+ await deps.manager.connections.recordTestResult(connection.id, {
111
+ ok: summary.ok,
112
+ latencyMs: summary.latencyMs,
113
+ error: summary.error?.message ?? null,
114
+ readOnly: summary.readOnly,
115
+ });
116
+ return { connectionId: connection.id, name: connection.name, file, seeded, rows };
117
+ }
118
+ /**
119
+ * Seed the demo database so that `demo.sqlite` only ever exists COMPLETE.
120
+ *
121
+ * ─── WHY THIS IS NOT `createDemoDatabase({ file })` ──────────────────────────
122
+ *
123
+ * `new Database(file)` CREATES THE FILE ON OPEN — before the schema, before the
124
+ * row transaction. Seeding straight into `demo.sqlite` therefore published an
125
+ * empty database the instant the seeder started, and left it there for good if
126
+ * anything went wrong in the ~800 ms that followed: the app quits mid-seed, the
127
+ * disk fills, or `journal_mode = WAL` fails because dataDir is on a network or
128
+ * synced share (the exact placement 11-T03's sync-folder detection exists to
129
+ * warn about).
130
+ *
131
+ * Nothing removed that file, and state 2 above adopts any `demo.sqlite` it finds
132
+ * BY DESIGN — so the wreckage was claimed as "a demo the user had been playing
133
+ * in" on every subsequent click, forever. Reproduced against the real route: a
134
+ * 0-byte demo.sqlite returns 201 `{seeded:false, rows:{}}`, `testDsn` says ok
135
+ * (an empty file is a valid 0-table SQLite database), the connection registers
136
+ * as 'connected', and `generate` then produces 0 pages from 0 tables. The button
137
+ * becomes a permanent success-returning no-op — the same dead end state 2 was
138
+ * added to prevent, reached by one click on a button the wizard offers.
139
+ *
140
+ * ─── THE FIX: A TEMP FILE AND A RENAME ──────────────────────────────────────
141
+ *
142
+ * `rename` is atomic and same-directory, so `demo.sqlite` goes from absent to
143
+ * fully-seeded with no state in between that `existsSync` can observe. A crash
144
+ * mid-seed leaves only `demo.sqlite.<uuid>.partial`, which state 2 does not look
145
+ * for and the next attempt simply ignores. A try/catch alone could not deliver
146
+ * that: it does not run when the process is killed, which is the case that
147
+ * matters most here.
148
+ *
149
+ * The seeder closes its handle in a `finally` and `wal_checkpoint(TRUNCATE)`s on
150
+ * the way out, so a clean close leaves no `-wal`/`-shm` beside the temp file.
151
+ * The cleanup removes them anyway — an UNCLEAN close is exactly when they exist,
152
+ * and that is exactly the path this function is here for.
153
+ */
154
+ async function seedDemoFile(deps, file) {
155
+ await mkdir(dirname(file), { recursive: true });
156
+ const temp = `${file}.${randomUUID()}.partial`;
157
+ try {
158
+ const loadSeeder = deps.loadSeeder ?? importDemoSeeder;
159
+ const seeder = await loadSeeder(deps.seedScriptPath);
160
+ const rows = seeder.createDemoDatabase({ file: temp, Database: BetterSqlite3 });
161
+ await rename(temp, file);
162
+ return rows;
163
+ }
164
+ catch (error) {
165
+ // Best effort, and it must not mask the real failure: the user needs to know
166
+ // the disk filled, not that we then failed to tidy up after it.
167
+ await Promise.all([temp, `${temp}-wal`, `${temp}-shm`].map((path) => rm(path, { force: true }).catch(() => undefined)));
168
+ throw error;
169
+ }
170
+ }
171
+ /** The connection id whose introspect/data DSN is the demo file, if any. */
172
+ async function findDemoConnection(manager, dsn) {
173
+ for (const connection of await manager.connections.list()) {
174
+ if (connection.engine !== 'sqlite')
175
+ continue;
176
+ const dsns = await manager.connections.getDsns(connection.id);
177
+ if (dsns?.introspectDsn === dsn || dsns?.dataDsn === dsn)
178
+ return connection.id;
179
+ }
180
+ return null;
181
+ }
182
+ //# sourceMappingURL=handlers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handlers.js","sourceRoot":"","sources":["../../../src/routes/desktop-demo/handlers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * `POST /api/v1/desktop/demo-database` — 11-electron.md §6 step 2 card 4
3
+ * ("Explore the demo database"), task 11-T08.
4
+ *
5
+ * ─── THE DESKTOP GATE ────────────────────────────────────────────────────────
6
+ *
7
+ * Same shape as §5's `auth/desktop-session.ts`, and for the same reason:
8
+ * EXISTENCE is the gate. `compose.ts` registers this factory only when
9
+ * `ADMINIUM_RUNTIME=desktop` AND `ADMINIUM_DEMO_SEED_SCRIPT` names a script, so
10
+ * a self-host or Docker instance does not have the route at all — it 404s there,
11
+ * which no runtime check inside a handler could improve on. Both halves of the
12
+ * AND are load-bearing, exactly as they are for the boot-token route: a desktop
13
+ * boot with no seed script has nothing to run, so the route would be an
14
+ * unreachable surface, and the wizard hides the card instead.
15
+ *
16
+ * Where this route deliberately DIFFERS from the §5 route: no loopback check.
17
+ * §2.4 makes loopback unconditional for the boot-token exchange because that
18
+ * route mints a super-admin session with no password — it is a credential door,
19
+ * and §8.3 puts a LAN on the other side of it. This one creates a database and
20
+ * registers a connection: the same act `POST /connections` performs, from the
21
+ * same authenticated principal, under the same grant. An admin who may connect a
22
+ * production Postgres over the LAN may certainly seed a demo SQLite file, and
23
+ * refusing them would be security theatre — the authorization that matters is
24
+ * `system:connections:manage`, which is what guards it.
25
+ */
26
+ import type { FastifyPluginAsyncZod } from 'fastify-type-provider-zod';
27
+ import type { ConnectionManager } from '../../connections/manager.js';
28
+ import { type DemoSeeder } from './handlers.js';
29
+ export interface DesktopDemoRoutesDeps {
30
+ manager: ConnectionManager;
31
+ /** `ADMINIUM_DATA_DIR`. */
32
+ dataDir: string;
33
+ /** Absolute path to `apps/desktop/resources/demo/demo-seed.mjs`. */
34
+ seedScriptPath: string;
35
+ /** Test seam — see `handlers.ts`. */
36
+ loadSeeder?: ((scriptPath: string) => Promise<DemoSeeder>) | undefined;
37
+ }
38
+ export declare function desktopDemoRoutes(deps: DesktopDemoRoutesDeps): FastifyPluginAsyncZod;
39
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/routes/desktop-demo/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAEvE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAGtE,OAAO,EAAsC,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AAGpF,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,iBAAiB,CAAC;IAC3B,2BAA2B;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,oEAAoE;IACpE,cAAc,EAAE,MAAM,CAAC;IACvB,qCAAqC;IACrC,UAAU,CAAC,EAAE,CAAC,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,SAAS,CAAC;CACxE;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,qBAAqB,GAAG,qBAAqB,CAqDpF"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * `POST /api/v1/desktop/demo-database` — 11-electron.md §6 step 2 card 4
3
+ * ("Explore the demo database"), task 11-T08.
4
+ *
5
+ * ─── THE DESKTOP GATE ────────────────────────────────────────────────────────
6
+ *
7
+ * Same shape as §5's `auth/desktop-session.ts`, and for the same reason:
8
+ * EXISTENCE is the gate. `compose.ts` registers this factory only when
9
+ * `ADMINIUM_RUNTIME=desktop` AND `ADMINIUM_DEMO_SEED_SCRIPT` names a script, so
10
+ * a self-host or Docker instance does not have the route at all — it 404s there,
11
+ * which no runtime check inside a handler could improve on. Both halves of the
12
+ * AND are load-bearing, exactly as they are for the boot-token route: a desktop
13
+ * boot with no seed script has nothing to run, so the route would be an
14
+ * unreachable surface, and the wizard hides the card instead.
15
+ *
16
+ * Where this route deliberately DIFFERS from the §5 route: no loopback check.
17
+ * §2.4 makes loopback unconditional for the boot-token exchange because that
18
+ * route mints a super-admin session with no password — it is a credential door,
19
+ * and §8.3 puts a LAN on the other side of it. This one creates a database and
20
+ * registers a connection: the same act `POST /connections` performs, from the
21
+ * same authenticated principal, under the same grant. An admin who may connect a
22
+ * production Postgres over the LAN may certainly seed a demo SQLite file, and
23
+ * refusing them would be security theatre — the authorization that matters is
24
+ * `system:connections:manage`, which is what guards it.
25
+ */
26
+ import { maskDsn } from '../../connections/dsn.js';
27
+ import { CONNECTIONS_MANAGE } from '../connections/index.js';
28
+ import { createDemoDatabaseHandler, demoDsn } from './handlers.js';
29
+ import { desktopDemoBody, desktopDemoReply } from './schema.js';
30
+ export function desktopDemoRoutes(deps) {
31
+ return async (app) => {
32
+ app.post('/desktop/demo-database', {
33
+ // The grant that governs "add a database to this workspace" everywhere
34
+ // else. Reusing it rather than inventing `desktop:demo:create` is the
35
+ // point: the demo IS a connection, and an operator who has revoked
36
+ // connection management has already answered this question.
37
+ preHandler: app.rbac.require(CONNECTIONS_MANAGE),
38
+ schema: { body: desktopDemoBody, response: { 201: desktopDemoReply } },
39
+ }, async (request, reply) => {
40
+ const actorId = request.apiKeyPrincipal === null
41
+ ? (request.user?.id ?? null)
42
+ : null;
43
+ const result = await createDemoDatabaseHandler({
44
+ manager: deps.manager,
45
+ dataDir: deps.dataDir,
46
+ seedScriptPath: deps.seedScriptPath,
47
+ ...(deps.loadSeeder === undefined ? {} : { loadSeeder: deps.loadSeeder }),
48
+ }, { name: request.body.name, actorId });
49
+ // `connection.create`, not a bespoke `demo.create`: the audit reader's
50
+ // question is "where did this connection come from?", and the answer
51
+ // belongs in the same action every other connection writes. The demo-ness
52
+ // rides in `changes` — the same way §5's route records that a login used
53
+ // a boot token rather than inventing a second kind of login.
54
+ await app.rbac.audit(request, {
55
+ category: 'connection',
56
+ action: 'connection.create',
57
+ connectionId: result.connectionId,
58
+ changes: {
59
+ after: {
60
+ name: result.name,
61
+ engine: 'sqlite',
62
+ dsnMasked: maskDsn(demoDsn(result.file)),
63
+ source: 'desktop-demo',
64
+ seeded: result.seeded,
65
+ },
66
+ },
67
+ });
68
+ reply.status(201);
69
+ return { data: result };
70
+ });
71
+ };
72
+ }
73
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/routes/desktop-demo/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAKH,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,yBAAyB,EAAE,OAAO,EAAmB,MAAM,eAAe,CAAC;AACpF,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAyB,MAAM,aAAa,CAAC;AAYvF,MAAM,UAAU,iBAAiB,CAAC,IAA2B;IAC3D,OAAO,KAAK,EAAE,GAAG,EAAE,EAAE;QACnB,GAAG,CAAC,IAAI,CACN,wBAAwB,EACxB;YACE,uEAAuE;YACvE,sEAAsE;YACtE,mEAAmE;YACnE,4DAA4D;YAC5D,UAAU,EAAE,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC;YAChD,MAAM,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,EAAE,GAAG,EAAE,gBAAgB,EAAE,EAAE;SACvE,EACD,KAAK,EAAE,OAAO,EAAE,KAAK,EAA6B,EAAE;YAClD,MAAM,OAAO,GACX,OAAO,CAAC,eAAe,KAAK,IAAI;gBAC9B,CAAC,CAAC,CAAE,OAAiD,CAAC,IAAI,EAAE,EAAE,IAAI,IAAI,CAAC;gBACvE,CAAC,CAAC,IAAI,CAAC;YAEX,MAAM,MAAM,GAAG,MAAM,yBAAyB,CAC5C;gBACE,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,cAAc,EAAE,IAAI,CAAC,cAAc;gBACnC,GAAG,CAAC,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;aAC1E,EACD,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,CACrC,CAAC;YAEF,uEAAuE;YACvE,qEAAqE;YACrE,0EAA0E;YAC1E,yEAAyE;YACzE,6DAA6D;YAC7D,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;gBAC5B,QAAQ,EAAE,YAAY;gBACtB,MAAM,EAAE,mBAAmB;gBAC3B,YAAY,EAAE,MAAM,CAAC,YAAY;gBACjC,OAAO,EAAE;oBACP,KAAK,EAAE;wBACL,IAAI,EAAE,MAAM,CAAC,IAAI;wBACjB,MAAM,EAAE,QAAQ;wBAChB,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;wBACxC,MAAM,EAAE,cAAc;wBACtB,MAAM,EAAE,MAAM,CAAC,MAAM;qBACtB;iBACF;aACF,CAAC,CAAC;YAEH,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAClB,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QAC1B,CAAC,CACF,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,17 @@
1
+ /** Zod schemas for the desktop demo-database resource (11-T08, §6 step 2 card 4). */
2
+ import { z } from 'zod';
3
+ export declare const desktopDemoBody: z.ZodObject<{
4
+ name: z.ZodDefault<z.ZodString>;
5
+ }, z.core.$strip>;
6
+ export type DesktopDemoBody = z.infer<typeof desktopDemoBody>;
7
+ export declare const desktopDemoReply: z.ZodObject<{
8
+ data: z.ZodObject<{
9
+ connectionId: z.ZodString;
10
+ name: z.ZodString;
11
+ file: z.ZodString;
12
+ seeded: z.ZodBoolean;
13
+ rows: z.ZodRecord<z.ZodString, z.ZodNumber>;
14
+ }, z.core.$strip>;
15
+ }, z.core.$strip>;
16
+ export type DesktopDemoReply = z.infer<typeof desktopDemoReply>;
17
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/routes/desktop-demo/schema.ts"],"names":[],"mappings":"AAAA,qFAAqF;AAErF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,eAAe;;iBAG1B,CAAC;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAE9D,eAAO,MAAM,gBAAgB;;;;;;;;iBAsB3B,CAAC;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC"}
@@ -0,0 +1,30 @@
1
+ /** Zod schemas for the desktop demo-database resource (11-T08, §6 step 2 card 4). */
2
+ import { z } from 'zod';
3
+ export const desktopDemoBody = z.object({
4
+ /** The name the connection appears under in Data Connections. */
5
+ name: z.string().min(1).max(80).default('Demo'),
6
+ });
7
+ export const desktopDemoReply = z.object({
8
+ data: z.object({
9
+ connectionId: z.string(),
10
+ name: z.string(),
11
+ /**
12
+ * The absolute `<dataDir>/databases/demo.sqlite` path.
13
+ *
14
+ * Not a secret and deliberately unmasked: a SQLite DSN carries no
15
+ * credentials (`maskDsn` reduces one to `sqlite:<file>` — the same string),
16
+ * this route only ever names a file it just created inside the app's own
17
+ * data directory, and the wizard's "Show in folder" affordance needs a path
18
+ * to hand the preload bridge.
19
+ */
20
+ file: z.string(),
21
+ /**
22
+ * Whether this call seeded the file, or adopted one already on disk (see
23
+ * `handlers.ts` — deleting the connection leaves the file behind).
24
+ */
25
+ seeded: z.boolean(),
26
+ /** Rows written per table. Empty when `seeded` is false. */
27
+ rows: z.record(z.string(), z.number().int().min(0)),
28
+ }),
29
+ });
30
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/routes/desktop-demo/schema.ts"],"names":[],"mappings":"AAAA,qFAAqF;AAErF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,iEAAiE;IACjE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;CAChD,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;QACb,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;QACxB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;QAChB;;;;;;;;WAQG;QACH,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;QAChB;;;WAGG;QACH,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;QACnB,4DAA4D;QAC5D,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;KACpD,CAAC;CACH,CAAC,CAAC"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * `GET /api/v1/desktop/lan-share` — what §8.3's share panel needs from the side
3
+ * of the boundary that holds the data (11-electron.md §8.3, §1 principle 2).
4
+ *
5
+ * The panel is built from two sources and this is one of them. §4's bridge
6
+ * supplies what only the main process knows — the reachable
7
+ * `http://<LAN-IPv4>:<port>` URLs, which come from `os.networkInterfaces()` in a
8
+ * process that has interfaces to enumerate. This route supplies what only the
9
+ * server knows: who is connected, and whether there is anyone to invite. Neither
10
+ * can answer the other's question, which is why the panel asks both.
11
+ *
12
+ * ─── The gates, in order, mirroring `routes/desktop/index.ts` ────────────────
13
+ *
14
+ * 1. EXISTENCE. `compose.ts` registers this factory only when
15
+ * `ADMINIUM_RUNTIME=desktop`. Self-host has no LAN-share feature to report
16
+ * on — it binds `0.0.0.0` as its normal, correct configuration behind a
17
+ * reverse proxy, and "how many non-loopback sessions do you have" is a
18
+ * question about EVERY session there. The route would answer a different
19
+ * question under the same name, which is worse than 404.
20
+ * 2. PEER. The SOCKET's `remoteAddress` must be loopback — `request.raw.socket`,
21
+ * never `request.ip`; see `auth/desktop-session.ts` for why that distinction
22
+ * is the difference between a check and a vulnerability. This is the gate
23
+ * with the most direct reasoning behind it in the whole file: the route
24
+ * exists ONLY when the server is bound to every interface, so the LAN users
25
+ * §8.3 invited can reach it by construction. Without this gate, any of them
26
+ * with a super-admin account — and §8.3's whole point is that LAN users get
27
+ * real accounts — could enumerate how many other people are on the network
28
+ * right now. That is a surveillance surface, and it is not one the panel's
29
+ * owner asked for. The panel is a LOCAL affordance about the local machine;
30
+ * it belongs to the person sitting at it.
31
+ * 3. SESSION + RBAC. `system:settings:manage`, i.e. Super Admin — the same
32
+ * grant `routes/desktop/index.ts` requires for a backup, and for the same
33
+ * reason: `config.lanShare` is a security setting, and the count of who is
34
+ * connected is the operational half of it. There is no narrower system
35
+ * action in meta's closed set (`SYSTEM_ACTION_KEYS`) and this route is not
36
+ * the place to invent one.
37
+ */
38
+ import type { FastifyPluginAsyncZod } from 'fastify-type-provider-zod';
39
+ import type { MetaDb } from '@adminium/meta';
40
+ import type { Env } from '../../config/env.js';
41
+ export interface DesktopLanRoutesDeps {
42
+ meta: MetaDb;
43
+ /**
44
+ * The validated boot environment. INJECTED for the reason
45
+ * `routes/system/index.ts` gives at length: `HOST` and `ADMINIUM_RUNTIME`
46
+ * decide what this reply CLAIMS, and a value sampled off `process.env` inside
47
+ * a handler reads as a plausible default instead of failing the boot.
48
+ */
49
+ env: Env;
50
+ /** Test seam for the session-window arithmetic. */
51
+ now?: (() => number) | undefined;
52
+ }
53
+ export declare function desktopLanRoutes(deps: DesktopLanRoutesDeps): FastifyPluginAsyncZod;
54
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/routes/desktop-lan/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAG7C,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAM/C,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb;;;;;OAKG;IACH,GAAG,EAAE,GAAG,CAAC;IACT,mDAAmD;IACnD,GAAG,CAAC,EAAE,CAAC,MAAM,MAAM,CAAC,GAAG,SAAS,CAAC;CAClC;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,oBAAoB,GAAG,qBAAqB,CAoClF"}