@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,33 @@
1
+ import { isLoopbackPeer } from '../../auth/desktop-session.js';
2
+ import { readLanShareStatus } from '../../desktop/lan-share.js';
3
+ import { AppError } from '../../errors.js';
4
+ import { PERMISSIONS } from '../../rbac/permissions.js';
5
+ import { desktopLanShareReply } from './schema.js';
6
+ export function desktopLanRoutes(deps) {
7
+ return async (app) => {
8
+ app.get('/desktop/lan-share', {
9
+ // Gate 3. `rbac.require` carries `requireAuth` semantics: an anonymous
10
+ // request has no principal to resolve and is refused before the handler.
11
+ preHandler: [app.requireMeta, app.rbac.require(PERMISSIONS.settingsManage)],
12
+ schema: { response: { 200: desktopLanShareReply } },
13
+ }, async (request) => {
14
+ // Gate 2, before any work: a LAN peer learns nothing here, not even
15
+ // whether the question was expensive to answer.
16
+ if (!isLoopbackPeer(request.raw.socket)) {
17
+ throw new AppError(403, 'FORBIDDEN', 'The network-sharing panel is only available on the computer Adminium is running on.');
18
+ }
19
+ // `deps.now?.()` — an absent clock passes `undefined`, which takes the
20
+ // parameter's `Date.now()` default rather than pinning time to the boot.
21
+ const status = await readLanShareStatus(deps.env, deps.meta, deps.now?.());
22
+ return {
23
+ data: {
24
+ active: status.active,
25
+ host: deps.env.HOST,
26
+ lanSessions: status.lanSessions,
27
+ otherUsers: status.otherUsers,
28
+ },
29
+ };
30
+ });
31
+ };
32
+ }
33
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/routes/desktop-lan/index.ts"],"names":[],"mappings":"AAwCA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAA6B,MAAM,aAAa,CAAC;AAe9E,MAAM,UAAU,gBAAgB,CAAC,IAA0B;IACzD,OAAO,KAAK,EAAE,GAAG,EAAE,EAAE;QACnB,GAAG,CAAC,GAAG,CACL,oBAAoB,EACpB;YACE,uEAAuE;YACvE,yEAAyE;YACzE,UAAU,EAAE,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;YAC3E,MAAM,EAAE,EAAE,QAAQ,EAAE,EAAE,GAAG,EAAE,oBAAoB,EAAE,EAAE;SACpD,EACD,KAAK,EAAE,OAAO,EAAiC,EAAE;YAC/C,oEAAoE;YACpE,gDAAgD;YAChD,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;gBACxC,MAAM,IAAI,QAAQ,CAChB,GAAG,EACH,WAAW,EACX,qFAAqF,CACtF,CAAC;YACJ,CAAC;YAED,uEAAuE;YACvE,yEAAyE;YACzE,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAE3E,OAAO;gBACL,IAAI,EAAE;oBACJ,MAAM,EAAE,MAAM,CAAC,MAAM;oBACrB,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI;oBACnB,WAAW,EAAE,MAAM,CAAC,WAAW;oBAC/B,UAAU,EAAE,MAAM,CAAC,UAAU;iBAC9B;aACF,CAAC;QACJ,CAAC,CACF,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Wire schema for `GET /api/v1/desktop/lan-share` (11-electron.md §8.3).
3
+ *
4
+ * READ-ONLY, and there is no sibling POST. Turning sharing on is not something
5
+ * this process can do: §8.3's mechanics are "flipping the toggle updates
6
+ * `config.lanShare` … and gracefully restarts the utilityProcess with
7
+ * `ADMINIUM_HOST=0.0.0.0`", and both halves belong to the main process —
8
+ * `config.json` is its file (§2.3) and the utilityProcess is its child. A server
9
+ * route that "enabled LAN share" could at best write a value nobody reads and at
10
+ * worst ask this process to re-listen on a socket its supervisor knows nothing
11
+ * about. The SPA writes the toggle through §4's `setConfig` bridge; this route
12
+ * answers only the two questions the bridge cannot.
13
+ */
14
+ import { z } from 'zod';
15
+ export declare const desktopLanShareReply: z.ZodObject<{
16
+ data: z.ZodObject<{
17
+ active: z.ZodBoolean;
18
+ host: z.ZodString;
19
+ lanSessions: z.ZodNumber;
20
+ otherUsers: z.ZodNumber;
21
+ }, z.core.$strip>;
22
+ }, z.core.$strip>;
23
+ export type DesktopLanShareReply = z.infer<typeof desktopLanShareReply>;
24
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/routes/desktop-lan/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,oBAAoB;;;;;;;iBAwB/B,CAAC;AAEH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Wire schema for `GET /api/v1/desktop/lan-share` (11-electron.md §8.3).
3
+ *
4
+ * READ-ONLY, and there is no sibling POST. Turning sharing on is not something
5
+ * this process can do: §8.3's mechanics are "flipping the toggle updates
6
+ * `config.lanShare` … and gracefully restarts the utilityProcess with
7
+ * `ADMINIUM_HOST=0.0.0.0`", and both halves belong to the main process —
8
+ * `config.json` is its file (§2.3) and the utilityProcess is its child. A server
9
+ * route that "enabled LAN share" could at best write a value nobody reads and at
10
+ * worst ask this process to re-listen on a socket its supervisor knows nothing
11
+ * about. The SPA writes the toggle through §4's `setConfig` bridge; this route
12
+ * answers only the two questions the bridge cannot.
13
+ */
14
+ import { z } from 'zod';
15
+ export const desktopLanShareReply = z.object({
16
+ data: z.object({
17
+ /**
18
+ * Is this process ACTUALLY bound to every interface right now?
19
+ *
20
+ * Deliberately not named `enabled`: `config.lanShare.enabled` is the user's
21
+ * intent and this is the state of the socket. They differ for a whole server
22
+ * lifetime after a toggle that has not been applied yet, and the panel needs
23
+ * to show what is true, not what was asked for.
24
+ */
25
+ active: z.boolean(),
26
+ /** The bind address, so the panel can say something specific when they disagree. */
27
+ host: z.string(),
28
+ /** Sessions held right now by a peer that is not this machine (§8.3). */
29
+ lanSessions: z.number().int().nonnegative(),
30
+ /**
31
+ * Active non-super-admin users — §8.3's precondition ("at least one
32
+ * non-super-admin user exists *or* the admin acknowledges they'll invite
33
+ * users next"). A count and not a boolean: the panel says "2 people can sign
34
+ * in", which is the sentence that makes the precondition make sense, and a
35
+ * bare `true` cannot be rendered as one.
36
+ */
37
+ otherUsers: z.number().int().nonnegative(),
38
+ }),
39
+ });
40
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/routes/desktop-lan/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;QACb;;;;;;;WAOG;QACH,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;QACnB,oFAAoF;QACpF,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;QAChB,yEAAyE;QACzE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;QAC3C;;;;;;WAMG;QACH,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;KAC3C,CAAC;CACH,CAAC,CAAC"}
@@ -0,0 +1,92 @@
1
+ /**
2
+ * Create a local SQLite database and register it (11-electron.md §6 step 2
3
+ * card 1, task 11-T07).
4
+ *
5
+ * §6: "Name → slug → creates `<dataDir>/databases/<slug>.sqlite` (WAL, §9).
6
+ * Sub-choice: *Blank* … or *From a schema file* … translated to SQLite DDL and
7
+ * applied; includes the 'Auto-generate placeholder entries' toggle."
8
+ *
9
+ * ─── WHY THE SERVER CREATES THE FILE AT ALL ──────────────────────────────────
10
+ *
11
+ * `adapter-sqlite` opens every handle with `fileMustExist: true` for anything but
12
+ * `:memory:` (`packages/adapter-sqlite/src/index.ts`), which is correct — an
13
+ * adapter that creates a database when it fails to find one turns a typo in a DSN
14
+ * into a silently empty install. So `POST /connections` with
15
+ * `sqlite:/…/new.sqlite` cannot be the implementation of "create a new local
16
+ * database": it fails, and it fails for a good reason. This route is where the
17
+ * file legitimately comes into existence, and it is desktop-only for the same
18
+ * reason `desktop-demo` is — §2.1's "the server is the only data owner" holds,
19
+ * and `<dataDir>` only means something under the shell.
20
+ *
21
+ * ─── WHY `better-sqlite3` DIRECTLY AND NOT THROUGH THE ADAPTER ───────────────
22
+ *
23
+ * Same answer as `desktop-demo/handlers.ts`: the adapter's contract is
24
+ * introspect/query/mutate over an EXISTING database, and there is no `execute
25
+ * arbitrary DDL` method on it — deliberately, since that method is the one every
26
+ * SQL-injection review starts at. Creating a file and running a CREATE TABLE
27
+ * script is a different act from serving a connection, so it is spelled
28
+ * differently. `@adminium/adapter-sqlite`'s own pragma helper is reused rather
29
+ * than a second copy of §9's four lines (see `applyDataPragmas` below).
30
+ */
31
+ import { type DatabaseModel, type ImportFormat } from '@adminium/engine';
32
+ import type { ConnectionManager } from '../../connections/manager.js';
33
+ import { type DdlWarning } from './sqlite-ddl.js';
34
+ /** §6: `<dataDir>/databases/<slug>.sqlite`. Shared with `desktop-demo`'s copy. */
35
+ export declare const LOCAL_DATABASE_DIR = "databases";
36
+ /**
37
+ * Name → slug.
38
+ *
39
+ * The output alphabet is `[a-z0-9-]`, which is what makes {@link localDatabaseFile}
40
+ * safe by construction rather than by a path check: `../../etc/passwd`,
41
+ * `C:\evil`, and a NUL byte all reduce to hyphens, so no input can escape
42
+ * `<dataDir>/databases/`. That is the SECOND line of defence — the name is also
43
+ * length-capped by the Zod body — but it is the one that does not depend on
44
+ * anybody keeping a validator in sync with a path join.
45
+ */
46
+ export declare function slugFor(name: string): string;
47
+ /** `<dataDir>/databases/<slug>.sqlite`, absolute. */
48
+ export declare function localDatabaseFile(dataDir: string, slug: string): string;
49
+ /** §6: "registered in `adminium_connections` as `sqlite:<absolute path>`". */
50
+ export declare function localDsn(file: string): string;
51
+ export interface LocalDatabaseResult {
52
+ connectionId: string;
53
+ name: string;
54
+ slug: string;
55
+ file: string;
56
+ tables: string[];
57
+ rows: Record<string, number>;
58
+ warnings: DdlWarning[];
59
+ }
60
+ export interface LocalDatabaseDeps {
61
+ manager: ConnectionManager;
62
+ /** `ADMINIUM_DATA_DIR` — the database lands under it (§2.2/§6). */
63
+ dataDir: string;
64
+ /**
65
+ * Parse a schema file into the engine IR. Production passes
66
+ * `routes/schema-import`'s `parseSchemaFile` — the SAME resolver
67
+ * `POST /schema-import/parse` uses, so the eight formats behave identically on
68
+ * both paths and there is no second answer to "is this a valid Prisma schema".
69
+ */
70
+ parseSchema: (input: {
71
+ content: string;
72
+ format: ImportFormat | undefined;
73
+ fileName: string | undefined;
74
+ }) => Promise<{
75
+ model: DatabaseModel;
76
+ warnings: string[];
77
+ }>;
78
+ /** Injected for the suite; see `placeholder.ts`. */
79
+ now?: (() => Date) | undefined;
80
+ }
81
+ export interface LocalDatabaseInput {
82
+ name: string;
83
+ schemaFile: {
84
+ content: string;
85
+ format: ImportFormat | undefined;
86
+ fileName: string | undefined;
87
+ } | undefined;
88
+ placeholderRows: boolean;
89
+ actorId: string | null;
90
+ }
91
+ export declare function createLocalDatabaseHandler(deps: LocalDatabaseDeps, input: LocalDatabaseInput): Promise<LocalDatabaseResult>;
92
+ //# sourceMappingURL=handlers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../../src/routes/desktop-local-db/handlers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAMH,OAAO,EAAsB,KAAK,aAAa,EAAE,KAAK,YAAY,EAAmB,MAAM,kBAAkB,CAAC;AAG9G,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,EAA0C,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAG1F,kFAAkF;AAClF,eAAO,MAAM,kBAAkB,cAAc,CAAC;AAE9C;;;;;;;;;GASG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAc5C;AAED,qDAAqD;AACrD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAEvE;AAED,8EAA8E;AAC9E,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE7C;AAED,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,QAAQ,EAAE,UAAU,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,iBAAiB,CAAC;IAC3B,mEAAmE;IACnE,OAAO,EAAE,MAAM,CAAC;IAChB;;;;;OAKG;IACH,WAAW,EAAE,CAAC,KAAK,EAAE;QACnB,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,YAAY,GAAG,SAAS,CAAC;QACjC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;KAC9B,KAAK,OAAO,CAAC;QAAE,KAAK,EAAE,aAAa,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IAC5D,oDAAoD;IACpD,GAAG,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;CAChC;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,YAAY,GAAG,SAAS,CAAC;QAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,GAAG,SAAS,CAAC;IAC5G,eAAe,EAAE,OAAO,CAAC;IACzB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAoBD,wBAAsB,0BAA0B,CAC9C,IAAI,EAAE,iBAAiB,EACvB,KAAK,EAAE,kBAAkB,GACxB,OAAO,CAAC,mBAAmB,CAAC,CA4G9B"}
@@ -0,0 +1,300 @@
1
+ /**
2
+ * Create a local SQLite database and register it (11-electron.md §6 step 2
3
+ * card 1, task 11-T07).
4
+ *
5
+ * §6: "Name → slug → creates `<dataDir>/databases/<slug>.sqlite` (WAL, §9).
6
+ * Sub-choice: *Blank* … or *From a schema file* … translated to SQLite DDL and
7
+ * applied; includes the 'Auto-generate placeholder entries' toggle."
8
+ *
9
+ * ─── WHY THE SERVER CREATES THE FILE AT ALL ──────────────────────────────────
10
+ *
11
+ * `adapter-sqlite` opens every handle with `fileMustExist: true` for anything but
12
+ * `:memory:` (`packages/adapter-sqlite/src/index.ts`), which is correct — an
13
+ * adapter that creates a database when it fails to find one turns a typo in a DSN
14
+ * into a silently empty install. So `POST /connections` with
15
+ * `sqlite:/…/new.sqlite` cannot be the implementation of "create a new local
16
+ * database": it fails, and it fails for a good reason. This route is where the
17
+ * file legitimately comes into existence, and it is desktop-only for the same
18
+ * reason `desktop-demo` is — §2.1's "the server is the only data owner" holds,
19
+ * and `<dataDir>` only means something under the shell.
20
+ *
21
+ * ─── WHY `better-sqlite3` DIRECTLY AND NOT THROUGH THE ADAPTER ───────────────
22
+ *
23
+ * Same answer as `desktop-demo/handlers.ts`: the adapter's contract is
24
+ * introspect/query/mutate over an EXISTING database, and there is no `execute
25
+ * arbitrary DDL` method on it — deliberately, since that method is the one every
26
+ * SQL-injection review starts at. Creating a file and running a CREATE TABLE
27
+ * script is a different act from serving a connection, so it is spelled
28
+ * differently. `@adminium/adapter-sqlite`'s own pragma helper is reused rather
29
+ * than a second copy of §9's four lines (see `applyDataPragmas` below).
30
+ */
31
+ import BetterSqlite3 from 'better-sqlite3';
32
+ import { mkdir } from 'node:fs/promises';
33
+ import { existsSync } from 'node:fs';
34
+ import { dirname, join, resolve } from 'node:path';
35
+ import { parseDatabaseModel } from '@adminium/engine';
36
+ import { AppError, ValidationFailedError } from '../../errors.js';
37
+ import { emitSqliteDdl, orderTables, quoteIdent } from './sqlite-ddl.js';
38
+ import { planPlaceholderRows } from './placeholder.js';
39
+ /** §6: `<dataDir>/databases/<slug>.sqlite`. Shared with `desktop-demo`'s copy. */
40
+ export const LOCAL_DATABASE_DIR = 'databases';
41
+ /**
42
+ * Name → slug.
43
+ *
44
+ * The output alphabet is `[a-z0-9-]`, which is what makes {@link localDatabaseFile}
45
+ * safe by construction rather than by a path check: `../../etc/passwd`,
46
+ * `C:\evil`, and a NUL byte all reduce to hyphens, so no input can escape
47
+ * `<dataDir>/databases/`. That is the SECOND line of defence — the name is also
48
+ * length-capped by the Zod body — but it is the one that does not depend on
49
+ * anybody keeping a validator in sync with a path join.
50
+ */
51
+ export function slugFor(name) {
52
+ const slug = name
53
+ .normalize('NFKD')
54
+ // Strip combining marks so `Café` → `cafe` rather than `caf-`.
55
+ .replace(/[̀-ͯ]/g, '')
56
+ .toLowerCase()
57
+ .replace(/[^a-z0-9]+/g, '-')
58
+ .replace(/^-+|-+$/g, '')
59
+ .slice(0, 48)
60
+ .replace(/-+$/g, '');
61
+ // A name of only non-Latin characters (`日本語`, `العربية`) legitimately slugs
62
+ // to nothing. Rejecting it would make the wizard's first field refuse a
63
+ // perfectly good database name in three of the eight locales this app ships.
64
+ return slug.length > 0 ? slug : 'database';
65
+ }
66
+ /** `<dataDir>/databases/<slug>.sqlite`, absolute. */
67
+ export function localDatabaseFile(dataDir, slug) {
68
+ return join(resolve(dataDir), LOCAL_DATABASE_DIR, `${slug}.sqlite`);
69
+ }
70
+ /** §6: "registered in `adminium_connections` as `sqlite:<absolute path>`". */
71
+ export function localDsn(file) {
72
+ return `sqlite:${file}`;
73
+ }
74
+ /**
75
+ * §9's four pragmas, applied at creation so the file is WAL from its first byte.
76
+ *
77
+ * They are re-applied by `adapter-sqlite`'s data role on every open, which is
78
+ * what actually keeps them true — `journal_mode` is the only one that persists in
79
+ * the file header; `synchronous`, `foreign_keys` and `busy_timeout` are
80
+ * per-connection and reset to their defaults for anybody who opens the file
81
+ * without them. Setting them here is still not redundant: `foreign_keys = ON`
82
+ * governs THIS connection, the one that is about to run the placeholder INSERTs,
83
+ * and without it a dangling FK would be written silently instead of rejected.
84
+ */
85
+ function applyCreationPragmas(db) {
86
+ db.pragma('journal_mode = WAL');
87
+ db.pragma('synchronous = NORMAL');
88
+ db.pragma('foreign_keys = ON');
89
+ db.pragma('busy_timeout = 5000');
90
+ }
91
+ export async function createLocalDatabaseHandler(deps, input) {
92
+ const slug = slugFor(input.name);
93
+ const file = localDatabaseFile(deps.dataDir, slug);
94
+ const dsn = localDsn(file);
95
+ // Two different conflicts, and collapsing them would be a lie in one
96
+ // direction or the other: a file already here is the user's data (never
97
+ // overwritten — §9's ethos is that the app moves data aside and never
98
+ // destroys it), while a connection already here is a naming collision.
99
+ if (existsSync(file)) {
100
+ throw new AppError(409, 'CONFLICT', `A database file named "${slug}.sqlite" already exists. Choose a different name, or open the existing file instead.`, { slug, file });
101
+ }
102
+ const clash = await findConnectionForDsn(deps.manager, dsn);
103
+ if (clash !== null) {
104
+ throw new AppError(409, 'CONFLICT', `A connection named "${input.name}" already points at this file.`, {
105
+ connectionId: clash,
106
+ });
107
+ }
108
+ const warnings = [];
109
+ let tables = [];
110
+ let rows = {};
111
+ await mkdir(dirname(file), { recursive: true });
112
+ // From here on the FILE EXISTS. Every failure below must remove it: a
113
+ // half-created database left on disk means the user's retry hits the 409
114
+ // above — a dead end reachable by one rejected CHECK constraint, with no
115
+ // affordance anywhere in the product to clear it.
116
+ let db;
117
+ try {
118
+ db = new BetterSqlite3(file);
119
+ }
120
+ catch (error) {
121
+ throw new AppError(500, 'INTERNAL', `Could not create ${file}: ${messageOf(error)}`);
122
+ }
123
+ try {
124
+ applyCreationPragmas(db);
125
+ if (input.schemaFile !== undefined) {
126
+ const parsed = await parseOrReject(deps, input.schemaFile);
127
+ // The PARSER's gaps come first because they happened first: a
128
+ // `CREATE VIEW` the SQL parser could not read never reaches the emitter,
129
+ // so `emitSqliteDdl` cannot know it existed. Only the two lists together
130
+ // describe what the user's file lost on the way to their database.
131
+ warnings.push(...parsed.warnings.map((message) => ({
132
+ code: 'source-not-translated',
133
+ message,
134
+ tableId: null,
135
+ })));
136
+ const ddl = emitSqliteDdl(parsed.model);
137
+ warnings.push(...ddl.warnings);
138
+ tables = ddl.tables;
139
+ applyDdl(db, ddl.statements);
140
+ if (input.placeholderRows) {
141
+ rows = seedPlaceholders(db, parsed.model, deps.now?.() ?? new Date());
142
+ }
143
+ }
144
+ // §9: "`wal_checkpoint(TRUNCATE)` runs on server shutdown so `.sqlite` files
145
+ // are self-contained at rest." The same reasoning applies the moment this
146
+ // handle closes: the connection that opens the file next is a different
147
+ // process' handle in dev, and a user who backs up or copies the file
148
+ // seconds after the wizard created it should get all of it.
149
+ db.pragma('wal_checkpoint(TRUNCATE)');
150
+ }
151
+ catch (error) {
152
+ db.close();
153
+ await removeQuietly(file);
154
+ if (error instanceof AppError)
155
+ throw error;
156
+ throw new AppError(500, 'INTERNAL', `Could not build ${slug}.sqlite: ${messageOf(error)}`);
157
+ }
158
+ finally {
159
+ if (db.open)
160
+ db.close();
161
+ }
162
+ // The same probe `POST /connections` runs — see `desktop-demo/handlers.ts`,
163
+ // which explains why placement is asserted rather than assumed.
164
+ const summary = await deps.manager.testDsn('sqlite', dsn);
165
+ if (summary.ok)
166
+ deps.manager.enforceMetaPlacement(dsn, summary);
167
+ const connection = await deps.manager.connections.create({
168
+ name: input.name,
169
+ engine: 'sqlite',
170
+ sourceKind: 'dsn',
171
+ introspectDsn: dsn,
172
+ // One role — `POST /connections` stores null when both DSNs are the string.
173
+ dataDsn: null,
174
+ readOnly: summary.readOnly,
175
+ settings: {},
176
+ status: summary.ok ? 'connected' : 'error',
177
+ createdBy: input.actorId,
178
+ });
179
+ await deps.manager.connections.recordTestResult(connection.id, {
180
+ ok: summary.ok,
181
+ latencyMs: summary.latencyMs,
182
+ error: summary.error?.message ?? null,
183
+ readOnly: summary.readOnly,
184
+ });
185
+ return { connectionId: connection.id, name: connection.name, slug, file, tables, rows, warnings };
186
+ }
187
+ async function parseOrReject(deps, schemaFile) {
188
+ const parsed = await deps.parseSchema({
189
+ content: schemaFile.content,
190
+ format: schemaFile.format,
191
+ fileName: schemaFile.fileName,
192
+ });
193
+ // Re-validated even though `parseSchema` already did: this handler is a write
194
+ // boundary, and the injected parser is a seam a test can replace.
195
+ const model = parseDatabaseModel(parsed.model);
196
+ if (model.tables.length === 0) {
197
+ // Mirrors `POST /schema-import/parse`'s own rejection: a parse that yields
198
+ // zero tables is not a database, and creating an empty file for it would
199
+ // hand the user a "success" they then cannot explain.
200
+ throw new ValidationFailedError('The schema file contained no parseable tables.', {
201
+ reason: 'PARSE_FAILED',
202
+ info: { warnings: parsed.warnings },
203
+ });
204
+ }
205
+ return { model, warnings: parsed.warnings };
206
+ }
207
+ /**
208
+ * Run the DDL as ONE transaction.
209
+ *
210
+ * SQLite is transactional for DDL (unlike MySQL), so a rejected statement rolls
211
+ * the whole script back and the database is empty rather than half a schema. The
212
+ * caller then deletes the file — but the transaction is what makes that deletion
213
+ * a tidy-up rather than the actual recovery.
214
+ *
215
+ * The statement text rides in the error message because there is nowhere else
216
+ * for the user to see it: the schema file is theirs, the failure is almost always
217
+ * in a `CHECK` expression written in another engine's dialect (`sqlite-ddl.ts`
218
+ * documents why those are passed through), and "SQLITE_ERROR: near ')'" without
219
+ * the statement is unactionable. It carries no row data — this database has none
220
+ * yet.
221
+ */
222
+ function applyDdl(db, statements) {
223
+ const run = db.transaction((script) => {
224
+ for (const statement of script) {
225
+ try {
226
+ db.exec(statement);
227
+ }
228
+ catch (error) {
229
+ throw new ValidationFailedError(`The schema could not be applied to SQLite: ${messageOf(error)}`, { reason: 'DDL_FAILED', statement });
230
+ }
231
+ }
232
+ });
233
+ run(statements);
234
+ }
235
+ /** Insert the planned placeholder rows; returns rows-written per table. */
236
+ function seedPlaceholders(db, model, now) {
237
+ const { order } = orderTables(model);
238
+ const prefixed = needsPrefix(order);
239
+ const nameOf = (table) => (prefixed ? `${table.schema}_${table.name}` : table.name);
240
+ const plan = planPlaceholderRows(model, order, nameOf, { now });
241
+ const written = {};
242
+ const run = db.transaction(() => {
243
+ for (const insert of plan.inserts) {
244
+ const columns = insert.columns.map(quoteIdent).join(', ');
245
+ const marks = insert.columns.map(() => '?').join(', ');
246
+ const statement = db.prepare(`INSERT INTO ${quoteIdent(insert.table)} (${columns}) VALUES (${marks})`);
247
+ for (const row of insert.rows)
248
+ statement.run(row);
249
+ written[insert.table] = insert.rows.length;
250
+ }
251
+ });
252
+ run();
253
+ return written;
254
+ }
255
+ /** Mirrors `sqlite-ddl.ts`'s rule — see `needsSchemaPrefix` there. */
256
+ function needsPrefix(tables) {
257
+ const seen = new Set();
258
+ for (const table of tables) {
259
+ if (seen.has(table.name))
260
+ return true;
261
+ seen.add(table.name);
262
+ }
263
+ return false;
264
+ }
265
+ /** The connection id whose introspect/data DSN is this file, if any. */
266
+ async function findConnectionForDsn(manager, dsn) {
267
+ for (const connection of await manager.connections.list()) {
268
+ if (connection.engine !== 'sqlite')
269
+ continue;
270
+ const dsns = await manager.connections.getDsns(connection.id);
271
+ if (dsns?.introspectDsn === dsn || dsns?.dataDsn === dsn)
272
+ return connection.id;
273
+ }
274
+ return null;
275
+ }
276
+ /**
277
+ * Best-effort cleanup of a failed creation.
278
+ *
279
+ * Failure to delete is swallowed on purpose: the user is already getting the
280
+ * REAL error (the DDL that would not apply), and replacing it with "could not
281
+ * unlink a temp file" would hide the one message they can act on. WAL/SHM
282
+ * siblings go too — `close()` normally removes them, but a crashed handle can
283
+ * leave them behind, and an orphan `-wal` next to a recreated file of the same
284
+ * name is a corruption report waiting to happen.
285
+ */
286
+ async function removeQuietly(file) {
287
+ const { rm } = await import('node:fs/promises');
288
+ for (const path of [file, `${file}-wal`, `${file}-shm`]) {
289
+ try {
290
+ await rm(path, { force: true });
291
+ }
292
+ catch {
293
+ // see above
294
+ }
295
+ }
296
+ }
297
+ function messageOf(error) {
298
+ return error instanceof Error ? error.message : String(error);
299
+ }
300
+ //# sourceMappingURL=handlers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handlers.js","sourceRoot":"","sources":["../../../src/routes/desktop-local-db/handlers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,aAAa,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAA0D,MAAM,kBAAkB,CAAC;AAE9G,OAAO,EAAE,QAAQ,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAElE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,EAAmB,MAAM,iBAAiB,CAAC;AAC1F,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEvD,kFAAkF;AAClF,MAAM,CAAC,MAAM,kBAAkB,GAAG,WAAW,CAAC;AAE9C;;;;;;;;;GASG;AACH,MAAM,UAAU,OAAO,CAAC,IAAY;IAClC,MAAM,IAAI,GAAG,IAAI;SACd,SAAS,CAAC,MAAM,CAAC;QAClB,+DAA+D;SAC9D,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;SACrB,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SACvB,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;SACZ,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACvB,4EAA4E;IAC5E,wEAAwE;IACxE,6EAA6E;IAC7E,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC;AAC7C,CAAC;AAED,qDAAqD;AACrD,MAAM,UAAU,iBAAiB,CAAC,OAAe,EAAE,IAAY;IAC7D,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,kBAAkB,EAAE,GAAG,IAAI,SAAS,CAAC,CAAC;AACtE,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,QAAQ,CAAC,IAAY;IACnC,OAAO,UAAU,IAAI,EAAE,CAAC;AAC1B,CAAC;AAsCD;;;;;;;;;;GAUG;AACH,SAAS,oBAAoB,CAAC,EAA0B;IACtD,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAChC,EAAE,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC;IAClC,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAC/B,EAAE,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,IAAuB,EACvB,KAAyB;IAEzB,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACjC,MAAM,IAAI,GAAG,iBAAiB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACnD,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAE3B,qEAAqE;IACrE,wEAAwE;IACxE,sEAAsE;IACtE,uEAAuE;IACvE,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,QAAQ,CAChB,GAAG,EACH,UAAU,EACV,0BAA0B,IAAI,sFAAsF,EACpH,EAAE,IAAI,EAAE,IAAI,EAAE,CACf,CAAC;IACJ,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,oBAAoB,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAC5D,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,MAAM,IAAI,QAAQ,CAAC,GAAG,EAAE,UAAU,EAAE,uBAAuB,KAAK,CAAC,IAAI,gCAAgC,EAAE;YACrG,YAAY,EAAE,KAAK;SACpB,CAAC,CAAC;IACL,CAAC;IAED,MAAM,QAAQ,GAAiB,EAAE,CAAC;IAClC,IAAI,MAAM,GAAa,EAAE,CAAC;IAC1B,IAAI,IAAI,GAA2B,EAAE,CAAC;IAEtC,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEhD,sEAAsE;IACtE,yEAAyE;IACzE,yEAAyE;IACzE,kDAAkD;IAClD,IAAI,EAA0B,CAAC;IAC/B,IAAI,CAAC;QACH,EAAE,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,QAAQ,CAAC,GAAG,EAAE,UAAU,EAAE,oBAAoB,IAAI,KAAK,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACvF,CAAC;IAED,IAAI,CAAC;QACH,oBAAoB,CAAC,EAAE,CAAC,CAAC;QAEzB,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YACnC,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;YAC3D,8DAA8D;YAC9D,yEAAyE;YACzE,yEAAyE;YACzE,mEAAmE;YACnE,QAAQ,CAAC,IAAI,CACX,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;gBACnC,IAAI,EAAE,uBAAgC;gBACtC,OAAO;gBACP,OAAO,EAAE,IAAI;aACd,CAAC,CAAC,CACJ,CAAC;YACF,MAAM,GAAG,GAAG,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACxC,QAAQ,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC/B,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;YAEpB,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;YAE7B,IAAI,KAAK,CAAC,eAAe,EAAE,CAAC;gBAC1B,IAAI,GAAG,gBAAgB,CAAC,EAAE,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC;YACxE,CAAC;QACH,CAAC;QAED,6EAA6E;QAC7E,0EAA0E;QAC1E,wEAAwE;QACxE,qEAAqE;QACrE,4DAA4D;QAC5D,EAAE,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC;IACxC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,EAAE,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC;QAC1B,IAAI,KAAK,YAAY,QAAQ;YAAE,MAAM,KAAK,CAAC;QAC3C,MAAM,IAAI,QAAQ,CAAC,GAAG,EAAE,UAAU,EAAE,mBAAmB,IAAI,YAAY,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC7F,CAAC;YAAS,CAAC;QACT,IAAI,EAAE,CAAC,IAAI;YAAE,EAAE,CAAC,KAAK,EAAE,CAAC;IAC1B,CAAC;IAED,4EAA4E;IAC5E,gEAAgE;IAChE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IAC1D,IAAI,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAEhE,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC;QACvD,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,MAAM,EAAE,QAAQ;QAChB,UAAU,EAAE,KAAK;QACjB,aAAa,EAAE,GAAG;QAClB,4EAA4E;QAC5E,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,QAAQ,EAAE,EAAE;QACZ,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO;QAC1C,SAAS,EAAE,KAAK,CAAC,OAAO;KACzB,CAAC,CAAC;IACH,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,gBAAgB,CAAC,UAAU,CAAC,EAAE,EAAE;QAC7D,EAAE,EAAE,OAAO,CAAC,EAAE;QACd,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,IAAI,IAAI;QACrC,QAAQ,EAAE,OAAO,CAAC,QAAQ;KAC3B,CAAC,CAAC;IAEH,OAAO,EAAE,YAAY,EAAE,UAAU,CAAC,EAAE,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AACpG,CAAC;AAED,KAAK,UAAU,aAAa,CAC1B,IAAuB,EACvB,UAAyD;IAEzD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC;QACpC,OAAO,EAAE,UAAU,CAAC,OAAO;QAC3B,MAAM,EAAE,UAAU,CAAC,MAAM;QACzB,QAAQ,EAAE,UAAU,CAAC,QAAQ;KAC9B,CAAC,CAAC;IACH,8EAA8E;IAC9E,kEAAkE;IAClE,MAAM,KAAK,GAAG,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC/C,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,2EAA2E;QAC3E,yEAAyE;QACzE,sDAAsD;QACtD,MAAM,IAAI,qBAAqB,CAAC,gDAAgD,EAAE;YAChF,MAAM,EAAE,cAAc;YACtB,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE;SACpC,CAAC,CAAC;IACL,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC;AAC9C,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,SAAS,QAAQ,CAAC,EAA0B,EAAE,UAA6B;IACzE,MAAM,GAAG,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,MAAyB,EAAE,EAAE;QACvD,KAAK,MAAM,SAAS,IAAI,MAAM,EAAE,CAAC;YAC/B,IAAI,CAAC;gBACH,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACrB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,IAAI,qBAAqB,CAC7B,8CAA8C,SAAS,CAAC,KAAK,CAAC,EAAE,EAChE,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,CACpC,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IACH,GAAG,CAAC,UAAU,CAAC,CAAC;AAClB,CAAC;AAED,2EAA2E;AAC3E,SAAS,gBAAgB,CAAC,EAA0B,EAAE,KAAoB,EAAE,GAAS;IACnF,MAAM,EAAE,KAAK,EAAE,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IACrC,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IACpC,MAAM,MAAM,GAAG,CAAC,KAAiB,EAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAExG,MAAM,IAAI,GAAG,mBAAmB,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;IAChE,MAAM,OAAO,GAA2B,EAAE,CAAC;IAE3C,MAAM,GAAG,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE;QAC9B,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAClC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1D,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACvD,MAAM,SAAS,GAAG,EAAE,CAAC,OAAO,CAAC,eAAe,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,OAAO,aAAa,KAAK,GAAG,CAAC,CAAC;YACvG,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI;gBAAE,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAClD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;QAC7C,CAAC;IACH,CAAC,CAAC,CAAC;IACH,GAAG,EAAE,CAAC;IAEN,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,sEAAsE;AACtE,SAAS,WAAW,CAAC,MAA6B;IAChD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QACtC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,wEAAwE;AACxE,KAAK,UAAU,oBAAoB,CAAC,OAA0B,EAAE,GAAW;IACzE,KAAK,MAAM,UAAU,IAAI,MAAM,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC;QAC1D,IAAI,UAAU,CAAC,MAAM,KAAK,QAAQ;YAAE,SAAS;QAC7C,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAC9D,IAAI,IAAI,EAAE,aAAa,KAAK,GAAG,IAAI,IAAI,EAAE,OAAO,KAAK,GAAG;YAAE,OAAO,UAAU,CAAC,EAAE,CAAC;IACjF,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;GASG;AACH,KAAK,UAAU,aAAa,CAAC,IAAY;IACvC,MAAM,EAAE,EAAE,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAChD,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,EAAE,CAAC;QACxD,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAClC,CAAC;QAAC,MAAM,CAAC;YACP,YAAY;QACd,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,KAAc;IAC/B,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAChE,CAAC"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * `POST /api/v1/desktop/local-database` — 11-electron.md §6 step 2 card 1
3
+ * ("Create a new local database"), task 11-T07.
4
+ *
5
+ * ─── THE DESKTOP GATE ────────────────────────────────────────────────────────
6
+ *
7
+ * EXISTENCE is the gate, exactly as it is for `desktop-demo` and §5's
8
+ * `auth/desktop-session.ts`: `compose.ts` registers this factory only when
9
+ * `ADMINIUM_RUNTIME=desktop`, so self-host and Docker do not have the route at
10
+ * all. That is not a formality here — the route's whole subject is
11
+ * `<dataDir>/databases/`, a directory that exists because the shell created it
12
+ * and passed `ADMINIUM_DATA_DIR` (§2.2). On a Docker deployment `<dataDir>` is a
13
+ * container path nobody can reach with a file dialog, so a "create a local
14
+ * database" button there would create a file the user can neither find, back up,
15
+ * nor delete.
16
+ *
17
+ * No loopback check, for `desktop-demo`'s reason: this creates a database and
18
+ * registers a connection — the same act `POST /connections` performs, from the
19
+ * same principal, under the same `system:connections:manage` grant. The §5 route
20
+ * is loopback-only because it mints a session with no password; this one does
21
+ * not.
22
+ */
23
+ import type { FastifyPluginAsyncZod } from 'fastify-type-provider-zod';
24
+ import type { ConnectionManager } from '../../connections/manager.js';
25
+ import { type LocalDatabaseDeps } from './handlers.js';
26
+ export interface DesktopLocalDbRoutesDeps {
27
+ manager: ConnectionManager;
28
+ /** `ADMINIUM_DATA_DIR`. */
29
+ dataDir: string;
30
+ /**
31
+ * Test seams. Production omits both: the parser defaults to the one
32
+ * `POST /schema-import/parse` uses (so the eight formats cannot behave
33
+ * differently on the two paths), and the clock to `Date`.
34
+ */
35
+ parseSchema?: LocalDatabaseDeps['parseSchema'] | undefined;
36
+ now?: (() => Date) | undefined;
37
+ }
38
+ export declare function desktopLocalDbRoutes(deps: DesktopLocalDbRoutesDeps): FastifyPluginAsyncZod;
39
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/routes/desktop-local-db/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAEvE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAItE,OAAO,EAAwC,KAAK,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAG7F,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,iBAAiB,CAAC;IAC3B,2BAA2B;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,WAAW,CAAC,EAAE,iBAAiB,CAAC,aAAa,CAAC,GAAG,SAAS,CAAC;IAC3D,GAAG,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;CAChC;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,wBAAwB,GAAG,qBAAqB,CAkE1F"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * `POST /api/v1/desktop/local-database` — 11-electron.md §6 step 2 card 1
3
+ * ("Create a new local database"), task 11-T07.
4
+ *
5
+ * ─── THE DESKTOP GATE ────────────────────────────────────────────────────────
6
+ *
7
+ * EXISTENCE is the gate, exactly as it is for `desktop-demo` and §5's
8
+ * `auth/desktop-session.ts`: `compose.ts` registers this factory only when
9
+ * `ADMINIUM_RUNTIME=desktop`, so self-host and Docker do not have the route at
10
+ * all. That is not a formality here — the route's whole subject is
11
+ * `<dataDir>/databases/`, a directory that exists because the shell created it
12
+ * and passed `ADMINIUM_DATA_DIR` (§2.2). On a Docker deployment `<dataDir>` is a
13
+ * container path nobody can reach with a file dialog, so a "create a local
14
+ * database" button there would create a file the user can neither find, back up,
15
+ * nor delete.
16
+ *
17
+ * No loopback check, for `desktop-demo`'s reason: this creates a database and
18
+ * registers a connection — the same act `POST /connections` performs, from the
19
+ * same principal, under the same `system:connections:manage` grant. The §5 route
20
+ * is loopback-only because it mints a session with no password; this one does
21
+ * not.
22
+ */
23
+ import { maskDsn } from '../../connections/dsn.js';
24
+ import { CONNECTIONS_MANAGE } from '../connections/index.js';
25
+ import { parseSchemaFileContent } from '../schema-import/index.js';
26
+ import { createLocalDatabaseHandler, localDsn } from './handlers.js';
27
+ import { desktopLocalDbBody, desktopLocalDbReply } from './schema.js';
28
+ export function desktopLocalDbRoutes(deps) {
29
+ return async (app) => {
30
+ app.post('/desktop/local-database', {
31
+ preHandler: app.rbac.require(CONNECTIONS_MANAGE),
32
+ schema: { body: desktopLocalDbBody, response: { 201: desktopLocalDbReply } },
33
+ }, async (request, reply) => {
34
+ const actorId = request.apiKeyPrincipal === null
35
+ ? (request.user?.id ?? null)
36
+ : null;
37
+ const body = request.body;
38
+ const result = await createLocalDatabaseHandler({
39
+ manager: deps.manager,
40
+ dataDir: deps.dataDir,
41
+ parseSchema: deps.parseSchema ?? parseSchemaFileContent,
42
+ ...(deps.now === undefined ? {} : { now: deps.now }),
43
+ }, {
44
+ name: body.name,
45
+ schemaFile: body.schemaFile === undefined
46
+ ? undefined
47
+ : {
48
+ content: body.schemaFile.content,
49
+ format: body.schemaFile.format,
50
+ fileName: body.schemaFile.fileName,
51
+ },
52
+ placeholderRows: body.placeholderRows,
53
+ actorId,
54
+ });
55
+ // `connection.create`, for `desktop-demo`'s reason: the audit reader asks
56
+ // "where did this connection come from?", and the answer belongs in the
57
+ // action every other connection writes. The creation details ride in
58
+ // `changes`.
59
+ //
60
+ // `placeholderRows` is recorded because it is the one part of this
61
+ // request that WRITES ROWS. An operator looking at a table of sample data
62
+ // six months from now needs the audit log to say the app put it there.
63
+ await app.rbac.audit(request, {
64
+ category: 'connection',
65
+ action: 'connection.create',
66
+ connectionId: result.connectionId,
67
+ changes: {
68
+ after: {
69
+ name: result.name,
70
+ engine: 'sqlite',
71
+ dsnMasked: maskDsn(localDsn(result.file)),
72
+ source: 'desktop-local-database',
73
+ tables: result.tables.length,
74
+ placeholderRows: body.placeholderRows,
75
+ },
76
+ },
77
+ });
78
+ reply.status(201);
79
+ return { data: result };
80
+ });
81
+ };
82
+ }
83
+ //# sourceMappingURL=index.js.map