@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,103 @@
1
+ /**
2
+ * `rbac` plugin (08-server-api.md §5, M2-T05): decorates
3
+ *
4
+ * - `request.can(permission)` — lazy, per-request-cached allow/deny against
5
+ * the resolved permission set (union of role grants; super-admin bypass;
6
+ * deny-by-default),
7
+ * - `app.rbac.require(permission)` — route `preHandler` that throws
8
+ * `ForbiddenError` with the missing permission in `details` and writes an
9
+ * `rbac`-category `permission.denied` audit entry,
10
+ * - `app.rbac.audit(request, entry)` — actor/ip/ua/request-id-stamped audit
11
+ * append for the mutating routes in this wave,
12
+ * - the API-key request-auth path: `Authorization: Bearer adm_sk_…` →
13
+ * hashed lookup → `request.apiKeyPrincipal` acting with the key's role
14
+ * (§2.16), with a throttled `last_used_at` touch.
15
+ *
16
+ * Session users arrive as `request.user` from `plugins/auth.ts`; this plugin
17
+ * only *reads* that decoration (structurally — see rbac/principal.ts).
18
+ */
19
+ import fp from 'fastify-plugin';
20
+ import { apiKeysRepo, auditRepo, } from '@adminium/meta';
21
+ import { ForbiddenError, UnauthorizedError } from '../errors.js';
22
+ import { API_KEY_TOUCH_INTERVAL_MS, hashApiKey, parseBearerApiKey, } from '../rbac/api-keys.js';
23
+ import { parsePermission } from '../rbac/permissions.js';
24
+ import { getPrincipal } from '../rbac/principal.js';
25
+ import { permissionSetAllows, resolvePermissionSet, } from '../rbac/resolver.js';
26
+ export const rbacPlugin = fp(async (app, opts) => {
27
+ const { meta } = opts;
28
+ const now = opts.now ?? Date.now;
29
+ const audit = auditRepo(meta);
30
+ const apiKeys = apiKeysRepo(meta);
31
+ app.decorateRequest('apiKeyPrincipal', null);
32
+ app.decorateRequest('rbacResolution', null);
33
+ async function resolve(request) {
34
+ // `!= null` (not `!== null`): routes registered in encapsulation
35
+ // contexts created BEFORE this plugin (e.g. bootstrap, inside
36
+ // buildServer) never get the decorator default, so the property reads
37
+ // `undefined` there — which must mean "not resolved yet", not a cache hit.
38
+ if (request.rbacResolution != null)
39
+ return request.rbacResolution;
40
+ const principal = getPrincipal(request);
41
+ if (principal === null) {
42
+ throw new UnauthorizedError();
43
+ }
44
+ const set = await resolvePermissionSet(meta, principal);
45
+ request.rbacResolution = set;
46
+ return set;
47
+ }
48
+ app.decorateRequest('can', async function can(permission) {
49
+ if (getPrincipal(this) === null)
50
+ return false;
51
+ return permissionSetAllows(await resolve(this), permission);
52
+ });
53
+ async function auditFromRequest(request, entry) {
54
+ const principal = getPrincipal(request);
55
+ await audit.append({
56
+ ...entry,
57
+ actorKind: principal?.kind ?? 'system',
58
+ actorId: principal?.id ?? null,
59
+ actorLabel: principal?.label ?? 'Adminium',
60
+ ip: request.ip ?? null,
61
+ userAgent: typeof request.headers['user-agent'] === 'string' ? request.headers['user-agent'] : null,
62
+ requestId: request.id,
63
+ }, now());
64
+ }
65
+ function require(permission) {
66
+ if (parsePermission(permission) === null) {
67
+ // Fail at registration time, not per-request: a guard on a permission
68
+ // outside the grammar is a programming error, not a client 403.
69
+ throw new Error(`rbac.require(): invalid permission ${JSON.stringify(permission)}`);
70
+ }
71
+ return async (request) => {
72
+ const set = await resolve(request); // throws 401 when unauthenticated
73
+ if (permissionSetAllows(set, permission))
74
+ return;
75
+ await auditFromRequest(request, {
76
+ category: 'rbac',
77
+ action: 'permission.denied',
78
+ changes: { after: { permission, method: request.method, url: request.url } },
79
+ });
80
+ throw new ForbiddenError('You do not have the required permission.', 'FORBIDDEN', {
81
+ permission,
82
+ });
83
+ };
84
+ }
85
+ app.decorate('rbac', { meta, require, resolve, audit: auditFromRequest, now });
86
+ // API-key request-auth path (§2.16): only engages for Bearer adm_sk_* —
87
+ // cookie sessions and other bearer schemes pass through untouched.
88
+ app.addHook('onRequest', async (request) => {
89
+ const key = parseBearerApiKey(request.headers.authorization);
90
+ if (key === null)
91
+ return;
92
+ const at = now();
93
+ const row = await apiKeys.findValidByTokenHash(hashApiKey(key), at);
94
+ if (row === null) {
95
+ throw new UnauthorizedError('UNAUTHENTICATED', 'Invalid, expired, or revoked API key.');
96
+ }
97
+ request.apiKeyPrincipal = { kind: 'api-key', id: row.id, label: row.name, roleId: row.roleId };
98
+ if (row.lastUsedAt === null || at - row.lastUsedAt >= API_KEY_TOUCH_INTERVAL_MS) {
99
+ await apiKeys.touchLastUsed(row.id, at);
100
+ }
101
+ });
102
+ }, { name: 'adminium-rbac', fastify: '5.x' });
103
+ //# sourceMappingURL=rbac.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rbac.js","sourceRoot":"","sources":["../../src/plugins/rbac.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ declare module 'fastify' {
2
+ interface FastifyInstance {
3
+ /** Absolute dashboard-build root being served, or null when disabled. */
4
+ spaRoot: string | null;
5
+ }
6
+ }
7
+ export interface StaticPluginOptions {
8
+ /** Candidate dashboard build directory; must contain `index.html`. */
9
+ root?: string | undefined;
10
+ }
11
+ export declare const staticPlugin: import("fastify").FastifyPluginCallback<StaticPluginOptions, import("fastify").RawServerDefault, import("fastify").FastifyTypeProviderDefault, import("fastify").FastifyBaseLogger>;
12
+ //# sourceMappingURL=static.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static.d.ts","sourceRoot":"","sources":["../../src/plugins/static.ts"],"names":[],"mappings":"AAaA,OAAO,QAAQ,SAAS,CAAC;IACvB,UAAU,eAAe;QACvB,yEAAyE;QACzE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;KACxB;CACF;AAED,MAAM,WAAW,mBAAmB;IAClC,sEAAsE;IACtE,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3B;AAED,eAAO,MAAM,YAAY,qLA2BxB,CAAC"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * `static` plugin (08-server-api.md §1.2): serves a dashboard build directory
3
+ * when one exists, with an SPA fallback to `index.html` for non-`/api/*`
4
+ * GET/HEAD requests (the fallback itself lives in the app's not-found handler,
5
+ * keyed off the `spaRoot` decoration). When the directory is absent — the
6
+ * dashboard ships M4 — the plugin cleanly no-ops and the server still boots.
7
+ */
8
+ import { stat } from 'node:fs/promises';
9
+ import { join, resolve } from 'node:path';
10
+ import fastifyStatic from '@fastify/static';
11
+ import fp from 'fastify-plugin';
12
+ export const staticPlugin = fp(async (app, opts) => {
13
+ let root = null;
14
+ if (opts.root !== undefined && opts.root !== '') {
15
+ const absolute = resolve(opts.root);
16
+ try {
17
+ const entry = await stat(join(absolute, 'index.html'));
18
+ if (entry.isFile())
19
+ root = absolute;
20
+ }
21
+ catch {
22
+ // Directory or index.html absent → serve nothing (no-op).
23
+ }
24
+ }
25
+ app.decorate('spaRoot', root);
26
+ if (root !== null) {
27
+ app.log.info({ root }, 'serving dashboard build');
28
+ await app.register(fastifyStatic, {
29
+ root,
30
+ // Wildcard route; missing files fall through to the not-found handler,
31
+ // which applies the SPA fallback for non-/api paths.
32
+ wildcard: true,
33
+ });
34
+ }
35
+ }, { name: 'adminium-static', fastify: '5.x' });
36
+ //# sourceMappingURL=static.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static.js","sourceRoot":"","sources":["../../src/plugins/static.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAchC,MAAM,CAAC,MAAM,YAAY,GAAG,EAAE,CAC5B,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;IAClB,IAAI,IAAI,GAAkB,IAAI,CAAC;IAE/B,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,EAAE,EAAE,CAAC;QAChD,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC;YACvD,IAAI,KAAK,CAAC,MAAM,EAAE;gBAAE,IAAI,GAAG,QAAQ,CAAC;QACtC,CAAC;QAAC,MAAM,CAAC;YACP,0DAA0D;QAC5D,CAAC;IACH,CAAC;IAED,GAAG,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAE9B,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAClB,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,yBAAyB,CAAC,CAAC;QAClD,MAAM,GAAG,CAAC,QAAQ,CAAC,aAAa,EAAE;YAChC,IAAI;YACJ,uEAAuE;YACvE,qDAAqD;YACrD,QAAQ,EAAE,IAAI;SACf,CAAC,CAAC;IACL,CAAC;AACH,CAAC,EACD,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,KAAK,EAAE,CAC5C,CAAC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * API-key secret handling (08-server-api.md §2.16): `adm_sk_` + 40 base62
3
+ * chars, shown exactly once at create time; only the SHA-256 hex hash and a
4
+ * short display/lookup prefix are stored (07-meta-store.md §3.7).
5
+ */
6
+ export declare const API_KEY_PREFIX = "adm_sk_";
7
+ /** Secret length after the prefix. */
8
+ export declare const API_KEY_SECRET_LENGTH = 40;
9
+ /** Stored display fragment: `adm_sk_` + first 8 secret chars (fits str(16)). */
10
+ export declare const API_KEY_DISPLAY_PREFIX_LENGTH: number;
11
+ /** `last_used_at` write throttle (07 §3.7 "throttled"). */
12
+ export declare const API_KEY_TOUCH_INTERVAL_MS = 60000;
13
+ /** SHA-256 hex of the full key string — the stored `token_hash`. */
14
+ export declare function hashApiKey(key: string): string;
15
+ export interface GeneratedApiKey {
16
+ /** The full secret — returned to the caller once, never stored. */
17
+ key: string;
18
+ /** Display/lookup fragment persisted in the `prefix` column. */
19
+ prefix: string;
20
+ /** SHA-256 hex persisted in the `token_hash` column. */
21
+ tokenHash: string;
22
+ }
23
+ export declare function generateApiKey(): GeneratedApiKey;
24
+ /**
25
+ * Extract an Adminium API key from an `Authorization` header. Returns `null`
26
+ * unless the scheme is Bearer *and* the token carries the `adm_sk_` prefix —
27
+ * other bearer tokens fall through to the session/auth plugin untouched.
28
+ */
29
+ export declare function parseBearerApiKey(authorization: string | undefined): string | null;
30
+ //# sourceMappingURL=api-keys.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-keys.d.ts","sourceRoot":"","sources":["../../src/rbac/api-keys.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,eAAO,MAAM,cAAc,YAAY,CAAC;AAExC,sCAAsC;AACtC,eAAO,MAAM,qBAAqB,KAAK,CAAC;AAExC,gFAAgF;AAChF,eAAO,MAAM,6BAA6B,QAA4B,CAAC;AAEvE,2DAA2D;AAC3D,eAAO,MAAM,yBAAyB,QAAS,CAAC;AAIhD,oEAAoE;AACpE,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED,MAAM,WAAW,eAAe;IAC9B,mEAAmE;IACnE,GAAG,EAAE,MAAM,CAAC;IACZ,gEAAgE;IAChE,MAAM,EAAE,MAAM,CAAC;IACf,wDAAwD;IACxD,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,cAAc,IAAI,eAAe,CAOhD;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,aAAa,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAMlF"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * API-key secret handling (08-server-api.md §2.16): `adm_sk_` + 40 base62
3
+ * chars, shown exactly once at create time; only the SHA-256 hex hash and a
4
+ * short display/lookup prefix are stored (07-meta-store.md §3.7).
5
+ */
6
+ import { createHash, randomInt } from 'node:crypto';
7
+ export const API_KEY_PREFIX = 'adm_sk_';
8
+ /** Secret length after the prefix. */
9
+ export const API_KEY_SECRET_LENGTH = 40;
10
+ /** Stored display fragment: `adm_sk_` + first 8 secret chars (fits str(16)). */
11
+ export const API_KEY_DISPLAY_PREFIX_LENGTH = API_KEY_PREFIX.length + 8;
12
+ /** `last_used_at` write throttle (07 §3.7 "throttled"). */
13
+ export const API_KEY_TOUCH_INTERVAL_MS = 60_000;
14
+ const BASE62 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
15
+ /** SHA-256 hex of the full key string — the stored `token_hash`. */
16
+ export function hashApiKey(key) {
17
+ return createHash('sha256').update(key, 'utf8').digest('hex');
18
+ }
19
+ export function generateApiKey() {
20
+ let secret = '';
21
+ for (let i = 0; i < API_KEY_SECRET_LENGTH; i += 1) {
22
+ secret += BASE62[randomInt(BASE62.length)];
23
+ }
24
+ const key = `${API_KEY_PREFIX}${secret}`;
25
+ return { key, prefix: key.slice(0, API_KEY_DISPLAY_PREFIX_LENGTH), tokenHash: hashApiKey(key) };
26
+ }
27
+ /**
28
+ * Extract an Adminium API key from an `Authorization` header. Returns `null`
29
+ * unless the scheme is Bearer *and* the token carries the `adm_sk_` prefix —
30
+ * other bearer tokens fall through to the session/auth plugin untouched.
31
+ */
32
+ export function parseBearerApiKey(authorization) {
33
+ if (authorization === undefined)
34
+ return null;
35
+ const match = /^Bearer\s+(\S+)$/i.exec(authorization.trim());
36
+ if (match === null)
37
+ return null;
38
+ const token = match[1];
39
+ return token.startsWith(API_KEY_PREFIX) ? token : null;
40
+ }
41
+ //# sourceMappingURL=api-keys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-keys.js","sourceRoot":"","sources":["../../src/rbac/api-keys.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAEpD,MAAM,CAAC,MAAM,cAAc,GAAG,SAAS,CAAC;AAExC,sCAAsC;AACtC,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,CAAC;AAExC,gFAAgF;AAChF,MAAM,CAAC,MAAM,6BAA6B,GAAG,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC;AAEvE,2DAA2D;AAC3D,MAAM,CAAC,MAAM,yBAAyB,GAAG,MAAM,CAAC;AAEhD,MAAM,MAAM,GAAG,gEAAgE,CAAC;AAEhF,oEAAoE;AACpE,MAAM,UAAU,UAAU,CAAC,GAAW;IACpC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAChE,CAAC;AAWD,MAAM,UAAU,cAAc;IAC5B,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,qBAAqB,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAClD,MAAM,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IAC7C,CAAC;IACD,MAAM,GAAG,GAAG,GAAG,cAAc,GAAG,MAAM,EAAE,CAAC;IACzC,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,6BAA6B,CAAC,EAAE,SAAS,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;AAClG,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,aAAiC;IACjE,IAAI,aAAa,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAC7C,MAAM,KAAK,GAAG,mBAAmB,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC;IAC7D,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAChC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAW,CAAC;IACjC,OAAO,KAAK,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AACzD,CAAC"}
@@ -0,0 +1,6 @@
1
+ /** RBAC internals barrel (permission grammar, resolver, principal, API keys). */
2
+ export * from './permissions.js';
3
+ export * from './principal.js';
4
+ export * from './resolver.js';
5
+ export * from './api-keys.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/rbac/index.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC"}
@@ -0,0 +1,6 @@
1
+ /** RBAC internals barrel (permission grammar, resolver, principal, API keys). */
2
+ export * from './permissions.js';
3
+ export * from './principal.js';
4
+ export * from './resolver.js';
5
+ export * from './api-keys.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/rbac/index.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC"}
@@ -0,0 +1,107 @@
1
+ /**
2
+ * RBAC permission grammar (08-server-api.md §5.1) and its mapping onto the
3
+ * `adminium_role_permissions` matrix rows (07-meta-store.md §3.9).
4
+ *
5
+ * Grant strings:
6
+ *
7
+ * ```
8
+ * system:<area>:<verb> // closed set — meta SYSTEM_ACTION_KEYS,
9
+ * // e.g. system:users:manage ⇔ `users.manage`
10
+ * table:<connectionId>:<table>:<action> // action: read|create|update|delete|export|import
11
+ * page:<pageId>:<view|edit>
12
+ * ```
13
+ *
14
+ * Wildcards: `*` may stand in for any single segment of a stored `table:` or
15
+ * `page:` grant (`table:*:*:read`). Permissions *checked* at enforcement time
16
+ * are always concrete. `system:` grants are always concrete and validated
17
+ * against the v1 closed set. Deny-by-default: anything unparseable never
18
+ * matches anything.
19
+ *
20
+ * Reserved keys: meta's `RESERVED_SYSTEM_ACTION_KEYS` (automations.manage,
21
+ * webhooks.manage, manifests.manage, sql.run) are deferred features with no
22
+ * enforcement point in v1. The grammar here still accepts them — stored
23
+ * grants must keep round-tripping — but no permissions UI may offer them;
24
+ * grantable lists come from meta's `GRANTABLE_SYSTEM_ACTION_KEYS`.
25
+ */
26
+ import { type PermissionActions, type ResourceKind, type RolePermission } from '@adminium/meta';
27
+ /** Table matrix actions (07-meta-store.md §3.9 `actions` payload). */
28
+ export declare const TABLE_ACTIONS: readonly ["read", "create", "update", "delete", "export", "import"];
29
+ export type TableAction = (typeof TABLE_ACTIONS)[number];
30
+ export declare const PAGE_ACTIONS: readonly ["view", "edit"];
31
+ export type PageAction = (typeof PAGE_ACTIONS)[number];
32
+ /** Canonical permission constants used by route guards in this wave. */
33
+ export declare const PERMISSIONS: {
34
+ readonly usersManage: "system:users:manage";
35
+ readonly rolesManage: "system:roles:manage";
36
+ readonly settingsManage: "system:settings:manage";
37
+ readonly auditRead: "system:audit:read";
38
+ readonly apiKeysManage: "system:api-keys:manage";
39
+ readonly exportsManage: "system:exports:manage";
40
+ readonly importsManage: "system:imports:manage";
41
+ readonly reportsManage: "system:reports:manage";
42
+ readonly jobsRead: "system:jobs:read";
43
+ readonly jobsManage: "system:jobs:manage";
44
+ };
45
+ export type ParsedGrant = {
46
+ kind: 'system';
47
+ area: string;
48
+ verb: string;
49
+ } | {
50
+ kind: 'table';
51
+ connectionId: string;
52
+ table: string;
53
+ action: TableAction | '*';
54
+ } | {
55
+ kind: 'page';
56
+ pageId: string;
57
+ action: PageAction | '*';
58
+ };
59
+ /** A concrete (wildcard-free) permission, as passed to `can()`/`require()`. */
60
+ export type ParsedPermission = {
61
+ kind: 'system';
62
+ area: string;
63
+ verb: string;
64
+ } | {
65
+ kind: 'table';
66
+ connectionId: string;
67
+ table: string;
68
+ action: TableAction;
69
+ } | {
70
+ kind: 'page';
71
+ pageId: string;
72
+ action: PageAction;
73
+ };
74
+ /**
75
+ * Parse a grant string (wildcards allowed on table/page segments).
76
+ * Returns `null` for anything outside the grammar — never throws.
77
+ */
78
+ export declare function parseGrant(input: string): ParsedGrant | null;
79
+ /** Parse a concrete permission for an enforcement check — no wildcards. */
80
+ export declare function parsePermission(input: string): ParsedPermission | null;
81
+ /** Does one stored grant satisfy one concrete required permission? */
82
+ export declare function grantMatches(grant: string, required: string): boolean;
83
+ /**
84
+ * Deny-by-default union check: exact set hit first, then the wildcard scan.
85
+ * `grants` must contain normalized grant strings (as produced by
86
+ * {@link grantsFromMatrixRows}).
87
+ */
88
+ export declare function isGranted(grants: ReadonlySet<string>, required: string): boolean;
89
+ /** Expand matrix rows into the flat, normalized grant-string union. */
90
+ export declare function grantsFromMatrixRows(rows: readonly RolePermission[]): string[];
91
+ export interface MatrixRowInput {
92
+ resourceKind: ResourceKind;
93
+ resourceRef: string;
94
+ actions: PermissionActions;
95
+ }
96
+ export interface MatrixConversion {
97
+ rows: MatrixRowInput[];
98
+ /** Grant strings outside the grammar (or unknown system keys). */
99
+ invalid: string[];
100
+ }
101
+ /**
102
+ * Group a `grants: string[]` payload (PUT /roles/:id/permissions) into matrix
103
+ * rows, merging grants that land on the same (kind, ref) cell. Invalid grants
104
+ * are collected instead of thrown so the route can 422 with the full list.
105
+ */
106
+ export declare function matrixRowsFromGrants(grants: readonly string[]): MatrixConversion;
107
+ //# sourceMappingURL=permissions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permissions.d.ts","sourceRoot":"","sources":["../../src/rbac/permissions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAGL,KAAK,iBAAiB,EACtB,KAAK,YAAY,EACjB,KAAK,cAAc,EAEpB,MAAM,gBAAgB,CAAC;AAExB,sEAAsE;AACtE,eAAO,MAAM,aAAa,qEAAsE,CAAC;AACjG,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAEzD,eAAO,MAAM,YAAY,2BAA4B,CAAC;AACtD,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AAEvD,wEAAwE;AACxE,eAAO,MAAM,WAAW;;;;;;;;;;;CAiBd,CAAC;AAEX,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9C;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,WAAW,GAAG,GAAG,CAAA;CAAE,GACjF;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,UAAU,GAAG,GAAG,CAAA;CAAE,CAAC;AAE/D,+EAA+E;AAC/E,MAAM,MAAM,gBAAgB,GACxB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9C;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,WAAW,CAAA;CAAE,GAC3E;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,UAAU,CAAA;CAAE,CAAC;AAWzD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CA2B5D;AAED,2EAA2E;AAC3E,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAYtE;AAMD,sEAAsE;AACtE,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAsBrE;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAOhF;AAkBD,uEAAuE;AACvE,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,SAAS,cAAc,EAAE,GAAG,MAAM,EAAE,CAyB9E;AAED,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,YAAY,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,iBAAiB,CAAC;CAC5B;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,cAAc,EAAE,CAAC;IACvB,kEAAkE;IAClE,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAMD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,gBAAgB,CA0ChF"}
@@ -0,0 +1,250 @@
1
+ /**
2
+ * RBAC permission grammar (08-server-api.md §5.1) and its mapping onto the
3
+ * `adminium_role_permissions` matrix rows (07-meta-store.md §3.9).
4
+ *
5
+ * Grant strings:
6
+ *
7
+ * ```
8
+ * system:<area>:<verb> // closed set — meta SYSTEM_ACTION_KEYS,
9
+ * // e.g. system:users:manage ⇔ `users.manage`
10
+ * table:<connectionId>:<table>:<action> // action: read|create|update|delete|export|import
11
+ * page:<pageId>:<view|edit>
12
+ * ```
13
+ *
14
+ * Wildcards: `*` may stand in for any single segment of a stored `table:` or
15
+ * `page:` grant (`table:*:*:read`). Permissions *checked* at enforcement time
16
+ * are always concrete. `system:` grants are always concrete and validated
17
+ * against the v1 closed set. Deny-by-default: anything unparseable never
18
+ * matches anything.
19
+ *
20
+ * Reserved keys: meta's `RESERVED_SYSTEM_ACTION_KEYS` (automations.manage,
21
+ * webhooks.manage, manifests.manage, sql.run) are deferred features with no
22
+ * enforcement point in v1. The grammar here still accepts them — stored
23
+ * grants must keep round-tripping — but no permissions UI may offer them;
24
+ * grantable lists come from meta's `GRANTABLE_SYSTEM_ACTION_KEYS`.
25
+ */
26
+ import { SYSTEM_ACTION_KEYS, } from '@adminium/meta';
27
+ /** Table matrix actions (07-meta-store.md §3.9 `actions` payload). */
28
+ export const TABLE_ACTIONS = ['read', 'create', 'update', 'delete', 'export', 'import'];
29
+ export const PAGE_ACTIONS = ['view', 'edit'];
30
+ /** Canonical permission constants used by route guards in this wave. */
31
+ export const PERMISSIONS = {
32
+ usersManage: 'system:users:manage',
33
+ rolesManage: 'system:roles:manage',
34
+ settingsManage: 'system:settings:manage',
35
+ auditRead: 'system:audit:read',
36
+ apiKeysManage: 'system:api-keys:manage',
37
+ // M7 wave 2 (T5 data-io + T6 scheduled reports). The routes carry local
38
+ // constants (EXPORTS_MANAGE_PERMISSION / IMPORTS_MANAGE_PERMISSION /
39
+ // REPORTS_MANAGE_PERMISSION); these are the canonical spellings.
40
+ exportsManage: 'system:exports:manage',
41
+ importsManage: 'system:imports:manage',
42
+ reportsManage: 'system:reports:manage',
43
+ // Jobs (08 §2.17). The routes/realtime hub carry local constants
44
+ // (JOBS_READ_PERMISSION / JOBS_MANAGE_PERMISSION in realtime/hub.ts);
45
+ // these are the canonical spellings.
46
+ jobsRead: 'system:jobs:read',
47
+ jobsManage: 'system:jobs:manage',
48
+ };
49
+ const SYSTEM_KEY_SET = new Set(SYSTEM_ACTION_KEYS);
50
+ const TABLE_ACTION_SET = new Set(TABLE_ACTIONS);
51
+ const PAGE_ACTION_SET = new Set(PAGE_ACTIONS);
52
+ /** Segments may not be empty and may not contain `:`, `/`, or whitespace. */
53
+ function validSegment(segment) {
54
+ return segment.length > 0 && !/[:\s/]/.test(segment);
55
+ }
56
+ /**
57
+ * Parse a grant string (wildcards allowed on table/page segments).
58
+ * Returns `null` for anything outside the grammar — never throws.
59
+ */
60
+ export function parseGrant(input) {
61
+ const segments = input.split(':');
62
+ const kind = segments[0];
63
+ if (kind === 'system' && segments.length === 3) {
64
+ const [, area, verb] = segments;
65
+ if (!validSegment(area) || !validSegment(verb))
66
+ return null;
67
+ if (area === '*' || verb === '*')
68
+ return null; // system grants are concrete
69
+ if (!SYSTEM_KEY_SET.has(`${area}.${verb}`))
70
+ return null; // v1 closed set
71
+ return { kind: 'system', area, verb };
72
+ }
73
+ if (kind === 'table' && segments.length === 4) {
74
+ const [, connectionId, table, action] = segments;
75
+ if (!validSegment(connectionId) || !validSegment(table))
76
+ return null;
77
+ if (action !== '*' && !TABLE_ACTION_SET.has(action))
78
+ return null;
79
+ return { kind: 'table', connectionId, table, action: action };
80
+ }
81
+ if (kind === 'page' && segments.length === 3) {
82
+ const [, pageId, action] = segments;
83
+ if (!validSegment(pageId))
84
+ return null;
85
+ if (action !== '*' && !PAGE_ACTION_SET.has(action))
86
+ return null;
87
+ return { kind: 'page', pageId, action: action };
88
+ }
89
+ return null;
90
+ }
91
+ /** Parse a concrete permission for an enforcement check — no wildcards. */
92
+ export function parsePermission(input) {
93
+ const parsed = parseGrant(input);
94
+ if (parsed === null)
95
+ return null;
96
+ if (parsed.kind === 'table') {
97
+ if (parsed.connectionId === '*' || parsed.table === '*' || parsed.action === '*')
98
+ return null;
99
+ return parsed;
100
+ }
101
+ if (parsed.kind === 'page') {
102
+ if (parsed.pageId === '*' || parsed.action === '*')
103
+ return null;
104
+ return parsed;
105
+ }
106
+ return parsed;
107
+ }
108
+ function segmentMatches(grantSegment, requiredSegment) {
109
+ return grantSegment === '*' || grantSegment === requiredSegment;
110
+ }
111
+ /** Does one stored grant satisfy one concrete required permission? */
112
+ export function grantMatches(grant, required) {
113
+ const g = parseGrant(grant);
114
+ const r = parsePermission(required);
115
+ if (g === null || r === null || g.kind !== r.kind)
116
+ return false;
117
+ switch (r.kind) {
118
+ case 'system': {
119
+ const gs = g;
120
+ return gs.area === r.area && gs.verb === r.verb;
121
+ }
122
+ case 'table': {
123
+ const gt = g;
124
+ return (segmentMatches(gt.connectionId, r.connectionId) &&
125
+ segmentMatches(gt.table, r.table) &&
126
+ segmentMatches(gt.action, r.action));
127
+ }
128
+ case 'page': {
129
+ const gp = g;
130
+ return segmentMatches(gp.pageId, r.pageId) && segmentMatches(gp.action, r.action);
131
+ }
132
+ }
133
+ }
134
+ /**
135
+ * Deny-by-default union check: exact set hit first, then the wildcard scan.
136
+ * `grants` must contain normalized grant strings (as produced by
137
+ * {@link grantsFromMatrixRows}).
138
+ */
139
+ export function isGranted(grants, required) {
140
+ if (parsePermission(required) === null)
141
+ return false;
142
+ if (grants.has(required))
143
+ return true;
144
+ for (const grant of grants) {
145
+ if (grant.includes('*') && grantMatches(grant, required))
146
+ return true;
147
+ }
148
+ return false;
149
+ }
150
+ // --- matrix-row ⇄ grant-string mapping ---------------------------------------
151
+ /** `table` resource_ref is `<connectionId>/<schema.table>` (07 §3.9). */
152
+ function splitTableRef(resourceRef) {
153
+ const slash = resourceRef.indexOf('/');
154
+ if (slash <= 0 || slash === resourceRef.length - 1)
155
+ return null;
156
+ return { connectionId: resourceRef.slice(0, slash), table: resourceRef.slice(slash + 1) };
157
+ }
158
+ /** `system` resource_ref is the dotted action key, e.g. `users.manage`. */
159
+ function splitSystemRef(resourceRef) {
160
+ const dot = resourceRef.indexOf('.');
161
+ if (dot <= 0 || dot === resourceRef.length - 1)
162
+ return null;
163
+ return { area: resourceRef.slice(0, dot), verb: resourceRef.slice(dot + 1) };
164
+ }
165
+ /** Expand matrix rows into the flat, normalized grant-string union. */
166
+ export function grantsFromMatrixRows(rows) {
167
+ const grants = [];
168
+ for (const row of rows) {
169
+ if (row.resourceKind === 'system') {
170
+ const ref = splitSystemRef(row.resourceRef);
171
+ if (ref !== null && row.actions.allowed === true) {
172
+ grants.push(`system:${ref.area}:${ref.verb}`);
173
+ }
174
+ continue;
175
+ }
176
+ if (row.resourceKind === 'table') {
177
+ const ref = splitTableRef(row.resourceRef);
178
+ if (ref === null)
179
+ continue;
180
+ const actions = row.actions;
181
+ for (const action of TABLE_ACTIONS) {
182
+ if (actions[action] === true)
183
+ grants.push(`table:${ref.connectionId}:${ref.table}:${action}`);
184
+ }
185
+ continue;
186
+ }
187
+ const actions = row.actions;
188
+ for (const action of PAGE_ACTIONS) {
189
+ if (actions[action] === true)
190
+ grants.push(`page:${row.resourceRef}:${action}`);
191
+ }
192
+ }
193
+ return grants;
194
+ }
195
+ function emptyTableActions() {
196
+ return { read: false, create: false, update: false, delete: false, export: false, import: false };
197
+ }
198
+ /**
199
+ * Group a `grants: string[]` payload (PUT /roles/:id/permissions) into matrix
200
+ * rows, merging grants that land on the same (kind, ref) cell. Invalid grants
201
+ * are collected instead of thrown so the route can 422 with the full list.
202
+ */
203
+ export function matrixRowsFromGrants(grants) {
204
+ const invalid = [];
205
+ const tableRows = new Map();
206
+ const pageRows = new Map();
207
+ const systemRefs = new Set();
208
+ for (const grant of grants) {
209
+ const parsed = parseGrant(grant);
210
+ if (parsed === null) {
211
+ invalid.push(grant);
212
+ continue;
213
+ }
214
+ if (parsed.kind === 'system') {
215
+ systemRefs.add(`${parsed.area}.${parsed.verb}`);
216
+ continue;
217
+ }
218
+ if (parsed.kind === 'table') {
219
+ const ref = `${parsed.connectionId}/${parsed.table}`;
220
+ const actions = tableRows.get(ref) ?? emptyTableActions();
221
+ if (parsed.action === '*') {
222
+ for (const action of TABLE_ACTIONS)
223
+ actions[action] = true;
224
+ }
225
+ else {
226
+ actions[parsed.action] = true;
227
+ }
228
+ tableRows.set(ref, actions);
229
+ continue;
230
+ }
231
+ const actions = pageRows.get(parsed.pageId) ?? { view: false, edit: false };
232
+ if (parsed.action === '*') {
233
+ actions.view = true;
234
+ actions.edit = true;
235
+ }
236
+ else {
237
+ actions[parsed.action] = true;
238
+ }
239
+ pageRows.set(parsed.pageId, actions);
240
+ }
241
+ const rows = [];
242
+ for (const ref of systemRefs)
243
+ rows.push({ resourceKind: 'system', resourceRef: ref, actions: { allowed: true } });
244
+ for (const [ref, actions] of tableRows)
245
+ rows.push({ resourceKind: 'table', resourceRef: ref, actions });
246
+ for (const [ref, actions] of pageRows)
247
+ rows.push({ resourceKind: 'page', resourceRef: ref, actions });
248
+ return { rows, invalid };
249
+ }
250
+ //# sourceMappingURL=permissions.js.map