@fuzdev/fuz_app 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (457) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +49 -0
  3. package/dist/actions/action_bridge.d.ts +65 -0
  4. package/dist/actions/action_bridge.d.ts.map +1 -0
  5. package/dist/actions/action_bridge.js +76 -0
  6. package/dist/actions/action_codegen.d.ts +97 -0
  7. package/dist/actions/action_codegen.d.ts.map +1 -0
  8. package/dist/actions/action_codegen.js +280 -0
  9. package/dist/actions/action_registry.d.ts +35 -0
  10. package/dist/actions/action_registry.d.ts.map +1 -0
  11. package/dist/actions/action_registry.js +83 -0
  12. package/dist/actions/action_spec.d.ts +169 -0
  13. package/dist/actions/action_spec.d.ts.map +1 -0
  14. package/dist/actions/action_spec.js +76 -0
  15. package/dist/auth/account_queries.d.ts +96 -0
  16. package/dist/auth/account_queries.d.ts.map +1 -0
  17. package/dist/auth/account_queries.js +172 -0
  18. package/dist/auth/account_routes.d.ts +86 -0
  19. package/dist/auth/account_routes.d.ts.map +1 -0
  20. package/dist/auth/account_routes.js +406 -0
  21. package/dist/auth/account_schema.d.ts +192 -0
  22. package/dist/auth/account_schema.d.ts.map +1 -0
  23. package/dist/auth/account_schema.js +105 -0
  24. package/dist/auth/admin_routes.d.ts +29 -0
  25. package/dist/auth/admin_routes.d.ts.map +1 -0
  26. package/dist/auth/admin_routes.js +193 -0
  27. package/dist/auth/api_token.d.ts +33 -0
  28. package/dist/auth/api_token.d.ts.map +1 -0
  29. package/dist/auth/api_token.js +36 -0
  30. package/dist/auth/api_token_queries.d.ts +80 -0
  31. package/dist/auth/api_token_queries.d.ts.map +1 -0
  32. package/dist/auth/api_token_queries.js +116 -0
  33. package/dist/auth/app_settings_queries.d.ts +33 -0
  34. package/dist/auth/app_settings_queries.d.ts.map +1 -0
  35. package/dist/auth/app_settings_queries.js +51 -0
  36. package/dist/auth/app_settings_routes.d.ts +27 -0
  37. package/dist/auth/app_settings_routes.d.ts.map +1 -0
  38. package/dist/auth/app_settings_routes.js +66 -0
  39. package/dist/auth/app_settings_schema.d.ts +35 -0
  40. package/dist/auth/app_settings_schema.d.ts.map +1 -0
  41. package/dist/auth/app_settings_schema.js +22 -0
  42. package/dist/auth/audit_log_queries.d.ts +90 -0
  43. package/dist/auth/audit_log_queries.d.ts.map +1 -0
  44. package/dist/auth/audit_log_queries.js +205 -0
  45. package/dist/auth/audit_log_routes.d.ts +33 -0
  46. package/dist/auth/audit_log_routes.d.ts.map +1 -0
  47. package/dist/auth/audit_log_routes.js +106 -0
  48. package/dist/auth/audit_log_schema.d.ts +259 -0
  49. package/dist/auth/audit_log_schema.d.ts.map +1 -0
  50. package/dist/auth/audit_log_schema.js +123 -0
  51. package/dist/auth/bearer_auth.d.ts +32 -0
  52. package/dist/auth/bearer_auth.d.ts.map +1 -0
  53. package/dist/auth/bearer_auth.js +90 -0
  54. package/dist/auth/bootstrap_account.d.ts +82 -0
  55. package/dist/auth/bootstrap_account.d.ts.map +1 -0
  56. package/dist/auth/bootstrap_account.js +97 -0
  57. package/dist/auth/bootstrap_routes.d.ts +74 -0
  58. package/dist/auth/bootstrap_routes.d.ts.map +1 -0
  59. package/dist/auth/bootstrap_routes.js +154 -0
  60. package/dist/auth/daemon_token.d.ts +49 -0
  61. package/dist/auth/daemon_token.d.ts.map +1 -0
  62. package/dist/auth/daemon_token.js +49 -0
  63. package/dist/auth/daemon_token_middleware.d.ts +93 -0
  64. package/dist/auth/daemon_token_middleware.d.ts.map +1 -0
  65. package/dist/auth/daemon_token_middleware.js +167 -0
  66. package/dist/auth/ddl.d.ts +27 -0
  67. package/dist/auth/ddl.d.ts.map +1 -0
  68. package/dist/auth/ddl.js +111 -0
  69. package/dist/auth/deps.d.ts +52 -0
  70. package/dist/auth/deps.d.ts.map +1 -0
  71. package/dist/auth/deps.js +10 -0
  72. package/dist/auth/invite_queries.d.ts +68 -0
  73. package/dist/auth/invite_queries.d.ts.map +1 -0
  74. package/dist/auth/invite_queries.js +105 -0
  75. package/dist/auth/invite_routes.d.ts +18 -0
  76. package/dist/auth/invite_routes.d.ts.map +1 -0
  77. package/dist/auth/invite_routes.js +129 -0
  78. package/dist/auth/invite_schema.d.ts +51 -0
  79. package/dist/auth/invite_schema.d.ts.map +1 -0
  80. package/dist/auth/invite_schema.js +25 -0
  81. package/dist/auth/keyring.d.ts +87 -0
  82. package/dist/auth/keyring.d.ts.map +1 -0
  83. package/dist/auth/keyring.js +142 -0
  84. package/dist/auth/middleware.d.ts +40 -0
  85. package/dist/auth/middleware.d.ts.map +1 -0
  86. package/dist/auth/middleware.js +64 -0
  87. package/dist/auth/migrations.d.ts +42 -0
  88. package/dist/auth/migrations.d.ts.map +1 -0
  89. package/dist/auth/migrations.js +79 -0
  90. package/dist/auth/password.d.ts +39 -0
  91. package/dist/auth/password.d.ts.map +1 -0
  92. package/dist/auth/password.js +25 -0
  93. package/dist/auth/password_argon2.d.ts +43 -0
  94. package/dist/auth/password_argon2.d.ts.map +1 -0
  95. package/dist/auth/password_argon2.js +76 -0
  96. package/dist/auth/permit_queries.d.ts +72 -0
  97. package/dist/auth/permit_queries.d.ts.map +1 -0
  98. package/dist/auth/permit_queries.js +116 -0
  99. package/dist/auth/request_context.d.ts +114 -0
  100. package/dist/auth/request_context.d.ts.map +1 -0
  101. package/dist/auth/request_context.js +176 -0
  102. package/dist/auth/require_keeper.d.ts +20 -0
  103. package/dist/auth/require_keeper.d.ts.map +1 -0
  104. package/dist/auth/require_keeper.js +35 -0
  105. package/dist/auth/role_schema.d.ts +69 -0
  106. package/dist/auth/role_schema.d.ts.map +1 -0
  107. package/dist/auth/role_schema.js +70 -0
  108. package/dist/auth/route_guards.d.ts +21 -0
  109. package/dist/auth/route_guards.d.ts.map +1 -0
  110. package/dist/auth/route_guards.js +32 -0
  111. package/dist/auth/session_cookie.d.ts +158 -0
  112. package/dist/auth/session_cookie.d.ts.map +1 -0
  113. package/dist/auth/session_cookie.js +135 -0
  114. package/dist/auth/session_lifecycle.d.ts +35 -0
  115. package/dist/auth/session_lifecycle.d.ts.map +1 -0
  116. package/dist/auth/session_lifecycle.js +27 -0
  117. package/dist/auth/session_middleware.d.ts +33 -0
  118. package/dist/auth/session_middleware.d.ts.map +1 -0
  119. package/dist/auth/session_middleware.js +62 -0
  120. package/dist/auth/session_queries.d.ts +135 -0
  121. package/dist/auth/session_queries.d.ts.map +1 -0
  122. package/dist/auth/session_queries.js +186 -0
  123. package/dist/auth/signup_routes.d.ts +32 -0
  124. package/dist/auth/signup_routes.d.ts.map +1 -0
  125. package/dist/auth/signup_routes.js +150 -0
  126. package/dist/cli/args.d.ts +48 -0
  127. package/dist/cli/args.d.ts.map +1 -0
  128. package/dist/cli/args.js +76 -0
  129. package/dist/cli/config.d.ts +48 -0
  130. package/dist/cli/config.d.ts.map +1 -0
  131. package/dist/cli/config.js +77 -0
  132. package/dist/cli/daemon.d.ts +82 -0
  133. package/dist/cli/daemon.d.ts.map +1 -0
  134. package/dist/cli/daemon.js +149 -0
  135. package/dist/cli/help.d.ts +85 -0
  136. package/dist/cli/help.d.ts.map +1 -0
  137. package/dist/cli/help.js +138 -0
  138. package/dist/cli/logger.d.ts +46 -0
  139. package/dist/cli/logger.d.ts.map +1 -0
  140. package/dist/cli/logger.js +48 -0
  141. package/dist/cli/util.d.ts +36 -0
  142. package/dist/cli/util.d.ts.map +1 -0
  143. package/dist/cli/util.js +50 -0
  144. package/dist/crypto.d.ts +13 -0
  145. package/dist/crypto.d.ts.map +1 -0
  146. package/dist/crypto.js +19 -0
  147. package/dist/db/assert_row.d.ts +18 -0
  148. package/dist/db/assert_row.d.ts.map +1 -0
  149. package/dist/db/assert_row.js +24 -0
  150. package/dist/db/create_db.d.ts +38 -0
  151. package/dist/db/create_db.d.ts.map +1 -0
  152. package/dist/db/create_db.js +57 -0
  153. package/dist/db/db.d.ts +97 -0
  154. package/dist/db/db.d.ts.map +1 -0
  155. package/dist/db/db.js +76 -0
  156. package/dist/db/db_pg.d.ts +21 -0
  157. package/dist/db/db_pg.d.ts.map +1 -0
  158. package/dist/db/db_pg.js +45 -0
  159. package/dist/db/db_pglite.d.ts +21 -0
  160. package/dist/db/db_pglite.d.ts.map +1 -0
  161. package/dist/db/db_pglite.js +28 -0
  162. package/dist/db/migrate.d.ts +67 -0
  163. package/dist/db/migrate.d.ts.map +1 -0
  164. package/dist/db/migrate.js +118 -0
  165. package/dist/db/pg_error.d.ts +16 -0
  166. package/dist/db/pg_error.d.ts.map +1 -0
  167. package/dist/db/pg_error.js +15 -0
  168. package/dist/db/query_deps.d.ts +14 -0
  169. package/dist/db/query_deps.d.ts.map +1 -0
  170. package/dist/db/query_deps.js +9 -0
  171. package/dist/db/sql_identifier.d.ts +27 -0
  172. package/dist/db/sql_identifier.d.ts.map +1 -0
  173. package/dist/db/sql_identifier.js +31 -0
  174. package/dist/db/status.d.ts +62 -0
  175. package/dist/db/status.d.ts.map +1 -0
  176. package/dist/db/status.js +116 -0
  177. package/dist/dev/setup.d.ts +159 -0
  178. package/dist/dev/setup.d.ts.map +1 -0
  179. package/dist/dev/setup.js +265 -0
  180. package/dist/env/dotenv.d.ts +25 -0
  181. package/dist/env/dotenv.d.ts.map +1 -0
  182. package/dist/env/dotenv.js +52 -0
  183. package/dist/env/load.d.ts +52 -0
  184. package/dist/env/load.d.ts.map +1 -0
  185. package/dist/env/load.js +79 -0
  186. package/dist/env/mask.d.ts +19 -0
  187. package/dist/env/mask.d.ts.map +1 -0
  188. package/dist/env/mask.js +26 -0
  189. package/dist/env/resolve.d.ts +126 -0
  190. package/dist/env/resolve.d.ts.map +1 -0
  191. package/dist/env/resolve.js +200 -0
  192. package/dist/hono_context.d.ts +48 -0
  193. package/dist/hono_context.d.ts.map +1 -0
  194. package/dist/hono_context.js +22 -0
  195. package/dist/http/common_routes.d.ts +52 -0
  196. package/dist/http/common_routes.d.ts.map +1 -0
  197. package/dist/http/common_routes.js +65 -0
  198. package/dist/http/db_routes.d.ts +57 -0
  199. package/dist/http/db_routes.d.ts.map +1 -0
  200. package/dist/http/db_routes.js +176 -0
  201. package/dist/http/error_schemas.d.ts +169 -0
  202. package/dist/http/error_schemas.d.ts.map +1 -0
  203. package/dist/http/error_schemas.js +178 -0
  204. package/dist/http/middleware_spec.d.ts +19 -0
  205. package/dist/http/middleware_spec.d.ts.map +1 -0
  206. package/dist/http/middleware_spec.js +9 -0
  207. package/dist/http/origin.d.ts +57 -0
  208. package/dist/http/origin.d.ts.map +1 -0
  209. package/dist/http/origin.js +207 -0
  210. package/dist/http/proxy.d.ts +112 -0
  211. package/dist/http/proxy.d.ts.map +1 -0
  212. package/dist/http/proxy.js +240 -0
  213. package/dist/http/route_spec.d.ts +197 -0
  214. package/dist/http/route_spec.d.ts.map +1 -0
  215. package/dist/http/route_spec.js +243 -0
  216. package/dist/http/schema_helpers.d.ts +64 -0
  217. package/dist/http/schema_helpers.d.ts.map +1 -0
  218. package/dist/http/schema_helpers.js +90 -0
  219. package/dist/http/surface.d.ts +132 -0
  220. package/dist/http/surface.d.ts.map +1 -0
  221. package/dist/http/surface.js +156 -0
  222. package/dist/http/surface_query.d.ts +77 -0
  223. package/dist/http/surface_query.d.ts.map +1 -0
  224. package/dist/http/surface_query.js +86 -0
  225. package/dist/rate_limiter.d.ts +94 -0
  226. package/dist/rate_limiter.d.ts.map +1 -0
  227. package/dist/rate_limiter.js +156 -0
  228. package/dist/realtime/sse.d.ts +80 -0
  229. package/dist/realtime/sse.d.ts.map +1 -0
  230. package/dist/realtime/sse.js +109 -0
  231. package/dist/realtime/sse_auth_guard.d.ts +93 -0
  232. package/dist/realtime/sse_auth_guard.d.ts.map +1 -0
  233. package/dist/realtime/sse_auth_guard.js +111 -0
  234. package/dist/realtime/subscriber_registry.d.ts +85 -0
  235. package/dist/realtime/subscriber_registry.d.ts.map +1 -0
  236. package/dist/realtime/subscriber_registry.js +108 -0
  237. package/dist/runtime/deno.d.ts +21 -0
  238. package/dist/runtime/deno.d.ts.map +1 -0
  239. package/dist/runtime/deno.js +83 -0
  240. package/dist/runtime/deps.d.ts +113 -0
  241. package/dist/runtime/deps.d.ts.map +1 -0
  242. package/dist/runtime/deps.js +10 -0
  243. package/dist/runtime/fs.d.ts +15 -0
  244. package/dist/runtime/fs.d.ts.map +1 -0
  245. package/dist/runtime/fs.js +17 -0
  246. package/dist/runtime/mock.d.ts +81 -0
  247. package/dist/runtime/mock.d.ts.map +1 -0
  248. package/dist/runtime/mock.js +195 -0
  249. package/dist/runtime/node.d.ts +17 -0
  250. package/dist/runtime/node.d.ts.map +1 -0
  251. package/dist/runtime/node.js +117 -0
  252. package/dist/schema_meta.d.ts +16 -0
  253. package/dist/schema_meta.d.ts.map +1 -0
  254. package/dist/schema_meta.js +9 -0
  255. package/dist/sensitivity.d.ts +15 -0
  256. package/dist/sensitivity.d.ts.map +1 -0
  257. package/dist/sensitivity.js +9 -0
  258. package/dist/server/app_backend.d.ts +74 -0
  259. package/dist/server/app_backend.d.ts.map +1 -0
  260. package/dist/server/app_backend.js +39 -0
  261. package/dist/server/app_server.d.ts +201 -0
  262. package/dist/server/app_server.d.ts.map +1 -0
  263. package/dist/server/app_server.js +266 -0
  264. package/dist/server/env.d.ts +68 -0
  265. package/dist/server/env.d.ts.map +1 -0
  266. package/dist/server/env.js +95 -0
  267. package/dist/server/startup.d.ts +22 -0
  268. package/dist/server/startup.d.ts.map +1 -0
  269. package/dist/server/startup.js +48 -0
  270. package/dist/server/static.d.ts +39 -0
  271. package/dist/server/static.d.ts.map +1 -0
  272. package/dist/server/static.js +38 -0
  273. package/dist/server/validate_nginx.d.ts +34 -0
  274. package/dist/server/validate_nginx.d.ts.map +1 -0
  275. package/dist/server/validate_nginx.js +118 -0
  276. package/dist/testing/CLAUDE.md +3 -0
  277. package/dist/testing/admin_integration.d.ts +45 -0
  278. package/dist/testing/admin_integration.d.ts.map +1 -0
  279. package/dist/testing/admin_integration.js +840 -0
  280. package/dist/testing/adversarial_404.d.ts +15 -0
  281. package/dist/testing/adversarial_404.d.ts.map +1 -0
  282. package/dist/testing/adversarial_404.js +118 -0
  283. package/dist/testing/adversarial_headers.d.ts +36 -0
  284. package/dist/testing/adversarial_headers.d.ts.map +1 -0
  285. package/dist/testing/adversarial_headers.js +128 -0
  286. package/dist/testing/adversarial_input.d.ts +56 -0
  287. package/dist/testing/adversarial_input.d.ts.map +1 -0
  288. package/dist/testing/adversarial_input.js +494 -0
  289. package/dist/testing/app_server.d.ts +169 -0
  290. package/dist/testing/app_server.d.ts.map +1 -0
  291. package/dist/testing/app_server.js +240 -0
  292. package/dist/testing/assert_dev_env.d.ts +10 -0
  293. package/dist/testing/assert_dev_env.d.ts.map +1 -0
  294. package/dist/testing/assert_dev_env.js +13 -0
  295. package/dist/testing/assertions.d.ts +61 -0
  296. package/dist/testing/assertions.d.ts.map +1 -0
  297. package/dist/testing/assertions.js +96 -0
  298. package/dist/testing/attack_surface.d.ts +63 -0
  299. package/dist/testing/attack_surface.d.ts.map +1 -0
  300. package/dist/testing/attack_surface.js +224 -0
  301. package/dist/testing/audit_completeness.d.ts +29 -0
  302. package/dist/testing/audit_completeness.d.ts.map +1 -0
  303. package/dist/testing/audit_completeness.js +410 -0
  304. package/dist/testing/auth_apps.d.ts +55 -0
  305. package/dist/testing/auth_apps.d.ts.map +1 -0
  306. package/dist/testing/auth_apps.js +122 -0
  307. package/dist/testing/data_exposure.d.ts +62 -0
  308. package/dist/testing/data_exposure.d.ts.map +1 -0
  309. package/dist/testing/data_exposure.js +297 -0
  310. package/dist/testing/db.d.ts +111 -0
  311. package/dist/testing/db.d.ts.map +1 -0
  312. package/dist/testing/db.js +258 -0
  313. package/dist/testing/entities.d.ts +21 -0
  314. package/dist/testing/entities.d.ts.map +1 -0
  315. package/dist/testing/entities.js +42 -0
  316. package/dist/testing/error_coverage.d.ts +78 -0
  317. package/dist/testing/error_coverage.d.ts.map +1 -0
  318. package/dist/testing/error_coverage.js +135 -0
  319. package/dist/testing/integration.d.ts +37 -0
  320. package/dist/testing/integration.d.ts.map +1 -0
  321. package/dist/testing/integration.js +1139 -0
  322. package/dist/testing/integration_helpers.d.ts +107 -0
  323. package/dist/testing/integration_helpers.d.ts.map +1 -0
  324. package/dist/testing/integration_helpers.js +246 -0
  325. package/dist/testing/middleware.d.ts +125 -0
  326. package/dist/testing/middleware.d.ts.map +1 -0
  327. package/dist/testing/middleware.js +210 -0
  328. package/dist/testing/rate_limiting.d.ts +43 -0
  329. package/dist/testing/rate_limiting.d.ts.map +1 -0
  330. package/dist/testing/rate_limiting.js +216 -0
  331. package/dist/testing/round_trip.d.ts +37 -0
  332. package/dist/testing/round_trip.d.ts.map +1 -0
  333. package/dist/testing/round_trip.js +128 -0
  334. package/dist/testing/schema_generators.d.ts +33 -0
  335. package/dist/testing/schema_generators.d.ts.map +1 -0
  336. package/dist/testing/schema_generators.js +137 -0
  337. package/dist/testing/standard.d.ts +49 -0
  338. package/dist/testing/standard.d.ts.map +1 -0
  339. package/dist/testing/standard.js +16 -0
  340. package/dist/testing/stubs.d.ts +96 -0
  341. package/dist/testing/stubs.d.ts.map +1 -0
  342. package/dist/testing/stubs.js +192 -0
  343. package/dist/testing/surface_invariants.d.ts +189 -0
  344. package/dist/testing/surface_invariants.d.ts.map +1 -0
  345. package/dist/testing/surface_invariants.js +450 -0
  346. package/dist/ui/AccountSessions.svelte +75 -0
  347. package/dist/ui/AccountSessions.svelte.d.ts +19 -0
  348. package/dist/ui/AccountSessions.svelte.d.ts.map +1 -0
  349. package/dist/ui/AdminAccounts.svelte +107 -0
  350. package/dist/ui/AdminAccounts.svelte.d.ts +19 -0
  351. package/dist/ui/AdminAccounts.svelte.d.ts.map +1 -0
  352. package/dist/ui/AdminAuditLog.svelte +144 -0
  353. package/dist/ui/AdminAuditLog.svelte.d.ts +4 -0
  354. package/dist/ui/AdminAuditLog.svelte.d.ts.map +1 -0
  355. package/dist/ui/AdminInvites.svelte +142 -0
  356. package/dist/ui/AdminInvites.svelte.d.ts +4 -0
  357. package/dist/ui/AdminInvites.svelte.d.ts.map +1 -0
  358. package/dist/ui/AdminOverview.svelte +337 -0
  359. package/dist/ui/AdminOverview.svelte.d.ts +4 -0
  360. package/dist/ui/AdminOverview.svelte.d.ts.map +1 -0
  361. package/dist/ui/AdminPermitHistory.svelte +61 -0
  362. package/dist/ui/AdminPermitHistory.svelte.d.ts +19 -0
  363. package/dist/ui/AdminPermitHistory.svelte.d.ts.map +1 -0
  364. package/dist/ui/AdminSessions.svelte +85 -0
  365. package/dist/ui/AdminSessions.svelte.d.ts +19 -0
  366. package/dist/ui/AdminSessions.svelte.d.ts.map +1 -0
  367. package/dist/ui/AdminSettings.svelte +32 -0
  368. package/dist/ui/AdminSettings.svelte.d.ts +19 -0
  369. package/dist/ui/AdminSettings.svelte.d.ts.map +1 -0
  370. package/dist/ui/AdminSurface.svelte +42 -0
  371. package/dist/ui/AdminSurface.svelte.d.ts +4 -0
  372. package/dist/ui/AdminSurface.svelte.d.ts.map +1 -0
  373. package/dist/ui/AppShell.svelte +93 -0
  374. package/dist/ui/AppShell.svelte.d.ts +20 -0
  375. package/dist/ui/AppShell.svelte.d.ts.map +1 -0
  376. package/dist/ui/BootstrapForm.svelte +105 -0
  377. package/dist/ui/BootstrapForm.svelte.d.ts +4 -0
  378. package/dist/ui/BootstrapForm.svelte.d.ts.map +1 -0
  379. package/dist/ui/ColumnLayout.svelte +46 -0
  380. package/dist/ui/ColumnLayout.svelte.d.ts +11 -0
  381. package/dist/ui/ColumnLayout.svelte.d.ts.map +1 -0
  382. package/dist/ui/ConfirmButton.svelte +125 -0
  383. package/dist/ui/ConfirmButton.svelte.d.ts +54 -0
  384. package/dist/ui/ConfirmButton.svelte.d.ts.map +1 -0
  385. package/dist/ui/Datatable.svelte +185 -0
  386. package/dist/ui/Datatable.svelte.d.ts +35 -0
  387. package/dist/ui/Datatable.svelte.d.ts.map +1 -0
  388. package/dist/ui/LoginForm.svelte +82 -0
  389. package/dist/ui/LoginForm.svelte.d.ts +8 -0
  390. package/dist/ui/LoginForm.svelte.d.ts.map +1 -0
  391. package/dist/ui/LogoutButton.svelte +36 -0
  392. package/dist/ui/LogoutButton.svelte.d.ts +10 -0
  393. package/dist/ui/LogoutButton.svelte.d.ts.map +1 -0
  394. package/dist/ui/MenuLink.svelte +35 -0
  395. package/dist/ui/MenuLink.svelte.d.ts +12 -0
  396. package/dist/ui/MenuLink.svelte.d.ts.map +1 -0
  397. package/dist/ui/OpenSignupToggle.svelte +36 -0
  398. package/dist/ui/OpenSignupToggle.svelte.d.ts +19 -0
  399. package/dist/ui/OpenSignupToggle.svelte.d.ts.map +1 -0
  400. package/dist/ui/PopoverButton.svelte +136 -0
  401. package/dist/ui/PopoverButton.svelte.d.ts +63 -0
  402. package/dist/ui/PopoverButton.svelte.d.ts.map +1 -0
  403. package/dist/ui/SignupForm.svelte +117 -0
  404. package/dist/ui/SignupForm.svelte.d.ts +7 -0
  405. package/dist/ui/SignupForm.svelte.d.ts.map +1 -0
  406. package/dist/ui/SurfaceExplorer.svelte +287 -0
  407. package/dist/ui/SurfaceExplorer.svelte.d.ts +8 -0
  408. package/dist/ui/SurfaceExplorer.svelte.d.ts.map +1 -0
  409. package/dist/ui/account_sessions_state.svelte.d.ts +15 -0
  410. package/dist/ui/account_sessions_state.svelte.d.ts.map +1 -0
  411. package/dist/ui/account_sessions_state.svelte.js +45 -0
  412. package/dist/ui/admin_accounts_state.svelte.d.ts +19 -0
  413. package/dist/ui/admin_accounts_state.svelte.d.ts.map +1 -0
  414. package/dist/ui/admin_accounts_state.svelte.js +65 -0
  415. package/dist/ui/admin_invites_state.svelte.d.ts +19 -0
  416. package/dist/ui/admin_invites_state.svelte.d.ts.map +1 -0
  417. package/dist/ui/admin_invites_state.svelte.js +71 -0
  418. package/dist/ui/admin_sessions_state.svelte.d.ts +18 -0
  419. package/dist/ui/admin_sessions_state.svelte.d.ts.map +1 -0
  420. package/dist/ui/admin_sessions_state.svelte.js +62 -0
  421. package/dist/ui/app_settings_state.svelte.d.ts +14 -0
  422. package/dist/ui/app_settings_state.svelte.d.ts.map +1 -0
  423. package/dist/ui/app_settings_state.svelte.js +44 -0
  424. package/dist/ui/audit_log_state.svelte.d.ts +40 -0
  425. package/dist/ui/audit_log_state.svelte.d.ts.map +1 -0
  426. package/dist/ui/audit_log_state.svelte.js +153 -0
  427. package/dist/ui/auth_state.svelte.d.ts +85 -0
  428. package/dist/ui/auth_state.svelte.d.ts.map +1 -0
  429. package/dist/ui/auth_state.svelte.js +238 -0
  430. package/dist/ui/datatable.d.ts +25 -0
  431. package/dist/ui/datatable.d.ts.map +1 -0
  432. package/dist/ui/datatable.js +9 -0
  433. package/dist/ui/enter_advance.d.ts +13 -0
  434. package/dist/ui/enter_advance.d.ts.map +1 -0
  435. package/dist/ui/enter_advance.js +30 -0
  436. package/dist/ui/loadable.svelte.d.ts +55 -0
  437. package/dist/ui/loadable.svelte.d.ts.map +1 -0
  438. package/dist/ui/loadable.svelte.js +75 -0
  439. package/dist/ui/popover.svelte.d.ts +137 -0
  440. package/dist/ui/popover.svelte.d.ts.map +1 -0
  441. package/dist/ui/popover.svelte.js +288 -0
  442. package/dist/ui/position_helpers.d.ts +27 -0
  443. package/dist/ui/position_helpers.d.ts.map +1 -0
  444. package/dist/ui/position_helpers.js +81 -0
  445. package/dist/ui/sidebar_state.svelte.d.ts +30 -0
  446. package/dist/ui/sidebar_state.svelte.d.ts.map +1 -0
  447. package/dist/ui/sidebar_state.svelte.js +39 -0
  448. package/dist/ui/table_state.svelte.d.ts +63 -0
  449. package/dist/ui/table_state.svelte.d.ts.map +1 -0
  450. package/dist/ui/table_state.svelte.js +117 -0
  451. package/dist/ui/ui_fetch.d.ts +29 -0
  452. package/dist/ui/ui_fetch.d.ts.map +1 -0
  453. package/dist/ui/ui_fetch.js +37 -0
  454. package/dist/ui/ui_format.d.ts +63 -0
  455. package/dist/ui/ui_format.d.ts.map +1 -0
  456. package/dist/ui/ui_format.js +196 -0
  457. package/package.json +121 -0
@@ -0,0 +1,205 @@
1
+ /**
2
+ * Audit log database queries.
3
+ *
4
+ * Records and retrieves auth mutation events for security monitoring.
5
+ * All write operations should use `audit_log_fire_and_forget` to
6
+ * ensure audit logging never blocks or breaks auth flows.
7
+ *
8
+ * Rollback resilience: `audit_log_fire_and_forget` writes to `background_db`
9
+ * (pool-level), not the handler's transaction-scoped `db`, so audit entries
10
+ * persist even when the request transaction rolls back.
11
+ *
12
+ * @module
13
+ */
14
+ import { DEV } from 'esm-env';
15
+ import { assert_row } from '../db/assert_row.js';
16
+ import { AUDIT_METADATA_SCHEMAS, } from './audit_log_schema.js';
17
+ /** Default limit for audit log listings. */
18
+ export const AUDIT_LOG_DEFAULT_LIMIT = 50;
19
+ /**
20
+ * Insert an audit log entry.
21
+ *
22
+ * Uses `RETURNING *` to return the full inserted row including
23
+ * DB-assigned fields (`id`, `seq`, `created_at`).
24
+ *
25
+ * In DEV mode, validates metadata against the per-event-type schema
26
+ * before writing (warns on mismatch, never throws).
27
+ *
28
+ * @param deps - query dependencies
29
+ * @param input - the audit event to record
30
+ * @returns the inserted audit log row
31
+ */
32
+ export const query_audit_log = async (deps, input) => {
33
+ if (DEV && input.metadata != null) {
34
+ const schema = AUDIT_METADATA_SCHEMAS[input.event_type];
35
+ const result = schema.safeParse(input.metadata);
36
+ if (!result.success) {
37
+ console.warn(`[audit_log] Metadata mismatch for '${input.event_type}':`, result.error.issues);
38
+ }
39
+ }
40
+ const rows = await deps.db.query(`INSERT INTO audit_log (event_type, outcome, actor_id, account_id, target_account_id, ip, metadata)
41
+ VALUES ($1, $2, $3, $4, $5, $6, $7)
42
+ RETURNING *`, [
43
+ input.event_type,
44
+ input.outcome ?? 'success',
45
+ input.actor_id ?? null,
46
+ input.account_id ?? null,
47
+ input.target_account_id ?? null,
48
+ input.ip ?? null,
49
+ input.metadata ? JSON.stringify(input.metadata) : null,
50
+ ]);
51
+ return assert_row(rows[0], 'INSERT INTO audit_log');
52
+ };
53
+ /**
54
+ * List audit log entries, newest first.
55
+ *
56
+ * @param deps - query dependencies
57
+ * @param options - filters and pagination
58
+ * @returns matching audit log entries
59
+ */
60
+ export const query_audit_log_list = async (deps, options) => {
61
+ const conditions = [];
62
+ const params = [];
63
+ let param_index = 1;
64
+ if (options?.event_type) {
65
+ conditions.push(`event_type = $${param_index++}`);
66
+ params.push(options.event_type);
67
+ }
68
+ if (options?.event_type_in && options.event_type_in.length > 0) {
69
+ const placeholders = options.event_type_in.map(() => `$${param_index++}`);
70
+ conditions.push(`event_type IN (${placeholders.join(', ')})`);
71
+ params.push(...options.event_type_in);
72
+ }
73
+ if (options?.account_id) {
74
+ conditions.push(`(account_id = $${param_index} OR target_account_id = $${param_index})`);
75
+ param_index++;
76
+ params.push(options.account_id);
77
+ }
78
+ if (options?.outcome) {
79
+ conditions.push(`outcome = $${param_index++}`);
80
+ params.push(options.outcome);
81
+ }
82
+ if (options?.since_seq != null) {
83
+ conditions.push(`seq > $${param_index++}`);
84
+ params.push(options.since_seq);
85
+ }
86
+ const where = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '';
87
+ const limit = options?.limit ?? AUDIT_LOG_DEFAULT_LIMIT;
88
+ const offset = options?.offset ?? 0;
89
+ return deps.db.query(`SELECT * FROM audit_log ${where} ORDER BY seq DESC LIMIT $${param_index++} OFFSET $${param_index}`, [...params, limit, offset]);
90
+ };
91
+ /**
92
+ * List audit log entries with resolved usernames, newest first.
93
+ *
94
+ * @param deps - query dependencies
95
+ * @param options - filters and pagination
96
+ * @returns matching audit log entries with `username` and `target_username`
97
+ */
98
+ export const query_audit_log_list_with_usernames = async (deps, options) => {
99
+ const conditions = [];
100
+ const params = [];
101
+ let param_index = 1;
102
+ if (options?.event_type) {
103
+ conditions.push(`al.event_type = $${param_index++}`);
104
+ params.push(options.event_type);
105
+ }
106
+ if (options?.event_type_in && options.event_type_in.length > 0) {
107
+ const placeholders = options.event_type_in.map(() => `$${param_index++}`);
108
+ conditions.push(`al.event_type IN (${placeholders.join(', ')})`);
109
+ params.push(...options.event_type_in);
110
+ }
111
+ if (options?.account_id) {
112
+ conditions.push(`(al.account_id = $${param_index} OR al.target_account_id = $${param_index})`);
113
+ param_index++;
114
+ params.push(options.account_id);
115
+ }
116
+ if (options?.outcome) {
117
+ conditions.push(`al.outcome = $${param_index++}`);
118
+ params.push(options.outcome);
119
+ }
120
+ if (options?.since_seq != null) {
121
+ conditions.push(`al.seq > $${param_index++}`);
122
+ params.push(options.since_seq);
123
+ }
124
+ const where = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '';
125
+ const limit = options?.limit ?? AUDIT_LOG_DEFAULT_LIMIT;
126
+ const offset = options?.offset ?? 0;
127
+ return deps.db.query(`SELECT al.*,
128
+ a1.username AS username,
129
+ a2.username AS target_username
130
+ FROM audit_log al
131
+ LEFT JOIN account a1 ON a1.id = al.account_id
132
+ LEFT JOIN account a2 ON a2.id = al.target_account_id
133
+ ${where} ORDER BY al.seq DESC LIMIT $${param_index++} OFFSET $${param_index}`, [...params, limit, offset]);
134
+ };
135
+ /**
136
+ * List audit log entries related to an account (as actor or target).
137
+ *
138
+ * @param deps - query dependencies
139
+ * @param account_id - the account to query for
140
+ * @param limit - maximum entries to return
141
+ */
142
+ export const query_audit_log_list_for_account = async (deps, account_id, limit = AUDIT_LOG_DEFAULT_LIMIT) => {
143
+ return deps.db.query(`SELECT * FROM audit_log
144
+ WHERE account_id = $1 OR target_account_id = $1
145
+ ORDER BY seq DESC LIMIT $2`, [account_id, limit]);
146
+ };
147
+ /**
148
+ * List permit grant/revoke events with resolved usernames.
149
+ *
150
+ * @param deps - query dependencies
151
+ * @param limit - maximum entries to return
152
+ * @param offset - number of entries to skip
153
+ * @returns permit history events with `username` and `target_username`
154
+ */
155
+ export const query_audit_log_list_permit_history = async (deps, limit = AUDIT_LOG_DEFAULT_LIMIT, offset = 0) => {
156
+ return deps.db.query(`SELECT al.*,
157
+ a1.username AS username,
158
+ a2.username AS target_username
159
+ FROM audit_log al
160
+ LEFT JOIN account a1 ON a1.id = al.account_id
161
+ LEFT JOIN account a2 ON a2.id = al.target_account_id
162
+ WHERE al.event_type IN ('permit_grant', 'permit_revoke')
163
+ ORDER BY al.seq DESC LIMIT $1 OFFSET $2`, [limit, offset]);
164
+ };
165
+ /**
166
+ * Delete audit log entries older than the given date.
167
+ *
168
+ * @param deps - query dependencies
169
+ * @param before - delete entries created before this date
170
+ * @returns the number of entries deleted
171
+ */
172
+ export const query_audit_log_cleanup_before = async (deps, before) => {
173
+ const rows = await deps.db.query(`DELETE FROM audit_log WHERE created_at < $1 RETURNING id`, [before.toISOString()]);
174
+ return rows.length;
175
+ };
176
+ /**
177
+ * Log an audit event without blocking the caller.
178
+ *
179
+ * Errors are logged to console — audit logging never breaks auth flows.
180
+ * Uses `background_db` so audit entries persist even if the request transaction rolls back.
181
+ * Write failures and `on_event` callback failures are logged separately
182
+ * so the error message indicates which phase failed.
183
+ *
184
+ * @param route - `background_db` and `pending_effects` from the route context
185
+ * @param input - the audit event to record
186
+ * @param log - the logger instance
187
+ * @param on_event - callback invoked with the inserted row after a successful write
188
+ * @returns the settled promise (callers may ignore it — fire-and-forget semantics preserved)
189
+ */
190
+ export const audit_log_fire_and_forget = (route, input, log, on_event) => {
191
+ const p = query_audit_log({ db: route.background_db }, input)
192
+ .then((event) => {
193
+ try {
194
+ on_event(event);
195
+ }
196
+ catch (callback_err) {
197
+ log.error('Audit log on_event callback failed:', callback_err);
198
+ }
199
+ })
200
+ .catch((err) => {
201
+ log.error('Audit log write failed:', err);
202
+ });
203
+ route.pending_effects.push(p);
204
+ return p;
205
+ };
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Audit log and admin observability route specs.
3
+ *
4
+ * All routes require admin role by default. Provides audit event listing,
5
+ * permit history shortcut, and active session overview.
6
+ *
7
+ * @module
8
+ */
9
+ import type { Logger } from '@fuzdev/fuz_util/log.js';
10
+ import type { RouteSpec } from '../http/route_spec.js';
11
+ import { type SseStream, type SseNotification } from '../realtime/sse.js';
12
+ /** Options for audit log route specs. */
13
+ export interface AuditLogRouteOptions {
14
+ /** Role required to access audit routes. Default `'admin'`. */
15
+ required_role?: string;
16
+ /**
17
+ * When provided, includes an SSE route at `/audit-log/stream` for realtime audit events.
18
+ * The `subscribe` function receives the stream, channels, and the subscriber's `account_id`
19
+ * as an identity key — enabling `close_by_identity()` for auth revocation.
20
+ */
21
+ stream?: {
22
+ subscribe: (stream: SseStream<SseNotification>, channels?: Array<string>, identity?: string) => () => void;
23
+ log: Logger;
24
+ };
25
+ }
26
+ /**
27
+ * Create audit log and admin observability route specs.
28
+ *
29
+ * @param options - optional options with role override
30
+ * @returns route specs for audit log and admin session management
31
+ */
32
+ export declare const create_audit_log_route_specs: (options?: AuditLogRouteOptions) => Array<RouteSpec>;
33
+ //# sourceMappingURL=audit_log_routes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit_log_routes.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/auth/audit_log_routes.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,yBAAyB,CAAC;AAQpD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,uBAAuB,CAAC;AAQrD,OAAO,EAAsB,KAAK,SAAS,EAAE,KAAK,eAAe,EAAC,MAAM,oBAAoB,CAAC;AAU7F,yCAAyC;AACzC,MAAM,WAAW,oBAAoB;IACpC,+DAA+D;IAC/D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;OAIG;IACH,MAAM,CAAC,EAAE;QACR,SAAS,EAAE,CACV,MAAM,EAAE,SAAS,CAAC,eAAe,CAAC,EAClC,QAAQ,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,EACxB,QAAQ,CAAC,EAAE,MAAM,KACb,MAAM,IAAI,CAAC;QAChB,GAAG,EAAE,MAAM,CAAC;KACZ,CAAC;CACF;AAED;;;;;GAKG;AACH,eAAO,MAAM,4BAA4B,GAAI,UAAU,oBAAoB,KAAG,KAAK,CAAC,SAAS,CAuF5F,CAAC"}
@@ -0,0 +1,106 @@
1
+ /**
2
+ * Audit log and admin observability route specs.
3
+ *
4
+ * All routes require admin role by default. Provides audit event listing,
5
+ * permit history shortcut, and active session overview.
6
+ *
7
+ * @module
8
+ */
9
+ import { z } from 'zod';
10
+ import { AuditLogEventWithUsernamesJson, AdminSessionJson, AuditEventType, PermitHistoryEventJson, } from './audit_log_schema.js';
11
+ import { AUDIT_LOG_DEFAULT_LIMIT, query_audit_log_list_with_usernames, query_audit_log_list_permit_history, } from './audit_log_queries.js';
12
+ import { query_session_list_all_active } from './session_queries.js';
13
+ import { ERROR_INVALID_EVENT_TYPE } from '../http/error_schemas.js';
14
+ import { create_sse_response } from '../realtime/sse.js';
15
+ import { require_request_context } from './request_context.js';
16
+ // TODO upstream to fuz_util
17
+ /** Parse a string to an integer, returning `undefined` for non-numeric input (including `NaN`). */
18
+ const parse_int_or_undefined = (value) => {
19
+ const n = parseInt(value, 10);
20
+ return Number.isFinite(n) ? n : undefined;
21
+ };
22
+ /**
23
+ * Create audit log and admin observability route specs.
24
+ *
25
+ * @param options - optional options with role override
26
+ * @returns route specs for audit log and admin session management
27
+ */
28
+ export const create_audit_log_route_specs = (options) => {
29
+ const role = options?.required_role ?? 'admin';
30
+ const routes = [
31
+ {
32
+ method: 'GET',
33
+ path: '/audit-log',
34
+ auth: { type: 'role', role },
35
+ description: 'List audit log events with optional filters',
36
+ input: z.null(),
37
+ output: z.strictObject({ events: z.array(AuditLogEventWithUsernamesJson) }),
38
+ errors: { 400: z.looseObject({ error: z.literal(ERROR_INVALID_EVENT_TYPE) }) },
39
+ handler: async (c, route) => {
40
+ const raw_event_type = c.req.query('event_type') || undefined;
41
+ if (raw_event_type && !AuditEventType.safeParse(raw_event_type).success) {
42
+ return c.json({ error: ERROR_INVALID_EVENT_TYPE }, 400);
43
+ }
44
+ const event_type = raw_event_type;
45
+ const account_id = c.req.query('account_id') || undefined;
46
+ const limit = Math.max(1, Math.min(200, parseInt(c.req.query('limit') ?? '', 10) || AUDIT_LOG_DEFAULT_LIMIT));
47
+ const offset = Math.max(0, parseInt(c.req.query('offset') ?? '', 10) || 0);
48
+ const raw_since_seq = c.req.query('since_seq');
49
+ const since_seq = raw_since_seq != null ? parse_int_or_undefined(raw_since_seq) : undefined;
50
+ const events = await query_audit_log_list_with_usernames(route, {
51
+ event_type,
52
+ account_id,
53
+ limit,
54
+ offset,
55
+ since_seq,
56
+ });
57
+ return c.json({ events });
58
+ },
59
+ },
60
+ {
61
+ method: 'GET',
62
+ path: '/audit-log/permit-history',
63
+ auth: { type: 'role', role },
64
+ description: 'List permit grant and revoke events with usernames',
65
+ input: z.null(),
66
+ output: z.strictObject({ events: z.array(PermitHistoryEventJson) }),
67
+ handler: async (c, route) => {
68
+ const limit = Math.max(1, Math.min(200, parseInt(c.req.query('limit') ?? '', 10) || AUDIT_LOG_DEFAULT_LIMIT));
69
+ const offset = Math.max(0, parseInt(c.req.query('offset') ?? '', 10) || 0);
70
+ const events = await query_audit_log_list_permit_history(route, limit, offset);
71
+ return c.json({ events });
72
+ },
73
+ },
74
+ {
75
+ method: 'GET',
76
+ path: '/sessions',
77
+ auth: { type: 'role', role },
78
+ description: 'List all active sessions across all accounts',
79
+ input: z.null(),
80
+ output: z.strictObject({ sessions: z.array(AdminSessionJson) }),
81
+ handler: async (c, route) => {
82
+ const sessions = await query_session_list_all_active(route);
83
+ return c.json({ sessions });
84
+ },
85
+ },
86
+ ];
87
+ if (options?.stream) {
88
+ const { subscribe, log } = options.stream;
89
+ routes.push({
90
+ method: 'GET',
91
+ path: '/audit-log/stream',
92
+ auth: { type: 'role', role },
93
+ description: 'Subscribe to realtime audit log events',
94
+ input: z.null(),
95
+ output: z.null(), // SSE — no JSON response
96
+ handler: (c) => {
97
+ const ctx = require_request_context(c);
98
+ const { response, stream } = create_sse_response(c, log);
99
+ const unsubscribe = subscribe(stream, ['audit_log'], ctx.account.id);
100
+ stream.on_close(unsubscribe);
101
+ return response;
102
+ },
103
+ });
104
+ }
105
+ return routes;
106
+ };
@@ -0,0 +1,259 @@
1
+ /**
2
+ * Audit log database schema and types.
3
+ *
4
+ * Records auth mutations (login, logout, grant, revoke, etc.) for
5
+ * security monitoring and operational visibility.
6
+ *
7
+ * @module
8
+ */
9
+ import { z } from 'zod';
10
+ /** All tracked auth event types. */
11
+ export declare const AUDIT_EVENT_TYPES: readonly ["login", "logout", "bootstrap", "signup", "password_change", "session_revoke", "session_revoke_all", "token_create", "token_revoke", "token_revoke_all", "permit_grant", "permit_revoke", "invite_create", "invite_delete", "app_settings_update"];
12
+ /** Zod schema for audit event types. */
13
+ export declare const AuditEventType: z.ZodEnum<{
14
+ login: "login";
15
+ logout: "logout";
16
+ bootstrap: "bootstrap";
17
+ signup: "signup";
18
+ password_change: "password_change";
19
+ session_revoke: "session_revoke";
20
+ session_revoke_all: "session_revoke_all";
21
+ token_create: "token_create";
22
+ token_revoke: "token_revoke";
23
+ token_revoke_all: "token_revoke_all";
24
+ permit_grant: "permit_grant";
25
+ permit_revoke: "permit_revoke";
26
+ invite_create: "invite_create";
27
+ invite_delete: "invite_delete";
28
+ app_settings_update: "app_settings_update";
29
+ }>;
30
+ export type AuditEventType = z.infer<typeof AuditEventType>;
31
+ /** Zod schema for audit event outcomes. */
32
+ export declare const AuditOutcome: z.ZodEnum<{
33
+ success: "success";
34
+ failure: "failure";
35
+ }>;
36
+ export type AuditOutcome = z.infer<typeof AuditOutcome>;
37
+ /**
38
+ * Per-event-type metadata Zod schemas.
39
+ *
40
+ * Uses `z.looseObject` so consumers can add extra fields
41
+ * (e.g. visiones `self_service`) while known fields are validated.
42
+ * Events with outcome-dependent metadata use a union with `z.null()`.
43
+ */
44
+ export declare const AUDIT_METADATA_SCHEMAS: {
45
+ login: z.ZodNullable<z.ZodObject<{
46
+ username: z.ZodString;
47
+ }, z.core.$loose>>;
48
+ logout: z.ZodNull;
49
+ bootstrap: z.ZodNullable<z.ZodObject<{
50
+ error: z.ZodString;
51
+ }, z.core.$loose>>;
52
+ signup: z.ZodObject<{
53
+ username: z.ZodString;
54
+ invite_id: z.ZodOptional<z.ZodString>;
55
+ open_signup: z.ZodOptional<z.ZodBoolean>;
56
+ }, z.core.$loose>;
57
+ password_change: z.ZodNullable<z.ZodObject<{
58
+ sessions_revoked: z.ZodNumber;
59
+ }, z.core.$loose>>;
60
+ session_revoke: z.ZodObject<{
61
+ session_id: z.ZodString;
62
+ }, z.core.$loose>;
63
+ session_revoke_all: z.ZodObject<{
64
+ count: z.ZodNumber;
65
+ }, z.core.$loose>;
66
+ token_create: z.ZodObject<{
67
+ token_id: z.ZodString;
68
+ name: z.ZodString;
69
+ }, z.core.$loose>;
70
+ token_revoke: z.ZodObject<{
71
+ token_id: z.ZodString;
72
+ }, z.core.$loose>;
73
+ token_revoke_all: z.ZodObject<{
74
+ count: z.ZodNumber;
75
+ }, z.core.$loose>;
76
+ permit_grant: z.ZodObject<{
77
+ role: z.ZodString;
78
+ permit_id: z.ZodString;
79
+ }, z.core.$loose>;
80
+ permit_revoke: z.ZodObject<{
81
+ role: z.ZodString;
82
+ permit_id: z.ZodString;
83
+ }, z.core.$loose>;
84
+ invite_create: z.ZodObject<{
85
+ invite_id: z.ZodString;
86
+ email: z.ZodNullable<z.ZodString>;
87
+ username: z.ZodNullable<z.ZodString>;
88
+ }, z.core.$loose>;
89
+ invite_delete: z.ZodObject<{
90
+ invite_id: z.ZodString;
91
+ }, z.core.$loose>;
92
+ app_settings_update: z.ZodObject<{
93
+ setting: z.ZodString;
94
+ old_value: z.ZodUnknown;
95
+ new_value: z.ZodUnknown;
96
+ }, z.core.$loose>;
97
+ };
98
+ /** Mapped type of metadata shapes per event type, derived from Zod schemas. */
99
+ export type AuditMetadataMap = {
100
+ [K in AuditEventType]: z.infer<(typeof AUDIT_METADATA_SCHEMAS)[K]>;
101
+ };
102
+ /** Audit log row from the database. */
103
+ export interface AuditLogEvent {
104
+ id: string;
105
+ seq: number;
106
+ event_type: AuditEventType;
107
+ outcome: AuditOutcome;
108
+ actor_id: string | null;
109
+ account_id: string | null;
110
+ target_account_id: string | null;
111
+ ip: string | null;
112
+ created_at: string;
113
+ metadata: Record<string, unknown> | null;
114
+ }
115
+ /**
116
+ * Narrow metadata type for a known event type.
117
+ *
118
+ * Use after checking `event_type` to get typed metadata access.
119
+ */
120
+ export declare const get_audit_metadata: <T extends AuditEventType>(event: AuditLogEvent & {
121
+ event_type: T;
122
+ }) => AuditMetadataMap[T] | null;
123
+ /** Input for creating an audit log entry. */
124
+ export interface AuditLogInput<T extends AuditEventType = AuditEventType> {
125
+ event_type: T;
126
+ outcome?: AuditOutcome;
127
+ actor_id?: string | null;
128
+ account_id?: string | null;
129
+ target_account_id?: string | null;
130
+ ip?: string | null;
131
+ metadata?: (AuditMetadataMap[T] & Record<string, unknown>) | null;
132
+ }
133
+ /** Options for listing audit log entries. */
134
+ export interface AuditLogListOptions {
135
+ limit?: number;
136
+ offset?: number;
137
+ event_type?: AuditEventType;
138
+ event_type_in?: Array<AuditEventType>;
139
+ account_id?: string;
140
+ outcome?: AuditOutcome;
141
+ /** When set, only return events with `seq` greater than this value. Enables SSE reconnection gap fill. */
142
+ since_seq?: number;
143
+ }
144
+ /** Zod schema for client-safe audit log event. */
145
+ export declare const AuditLogEventJson: z.ZodObject<{
146
+ id: z.ZodString;
147
+ seq: z.ZodNumber;
148
+ event_type: z.ZodEnum<{
149
+ login: "login";
150
+ logout: "logout";
151
+ bootstrap: "bootstrap";
152
+ signup: "signup";
153
+ password_change: "password_change";
154
+ session_revoke: "session_revoke";
155
+ session_revoke_all: "session_revoke_all";
156
+ token_create: "token_create";
157
+ token_revoke: "token_revoke";
158
+ token_revoke_all: "token_revoke_all";
159
+ permit_grant: "permit_grant";
160
+ permit_revoke: "permit_revoke";
161
+ invite_create: "invite_create";
162
+ invite_delete: "invite_delete";
163
+ app_settings_update: "app_settings_update";
164
+ }>;
165
+ outcome: z.ZodEnum<{
166
+ success: "success";
167
+ failure: "failure";
168
+ }>;
169
+ actor_id: z.ZodNullable<z.ZodString>;
170
+ account_id: z.ZodNullable<z.ZodString>;
171
+ target_account_id: z.ZodNullable<z.ZodString>;
172
+ ip: z.ZodNullable<z.ZodString>;
173
+ created_at: z.ZodString;
174
+ metadata: z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
175
+ }, z.core.$strict>;
176
+ export type AuditLogEventJson = z.infer<typeof AuditLogEventJson>;
177
+ /** Zod schema for audit log events with resolved usernames. */
178
+ export declare const AuditLogEventWithUsernamesJson: z.ZodObject<{
179
+ id: z.ZodString;
180
+ seq: z.ZodNumber;
181
+ event_type: z.ZodEnum<{
182
+ login: "login";
183
+ logout: "logout";
184
+ bootstrap: "bootstrap";
185
+ signup: "signup";
186
+ password_change: "password_change";
187
+ session_revoke: "session_revoke";
188
+ session_revoke_all: "session_revoke_all";
189
+ token_create: "token_create";
190
+ token_revoke: "token_revoke";
191
+ token_revoke_all: "token_revoke_all";
192
+ permit_grant: "permit_grant";
193
+ permit_revoke: "permit_revoke";
194
+ invite_create: "invite_create";
195
+ invite_delete: "invite_delete";
196
+ app_settings_update: "app_settings_update";
197
+ }>;
198
+ outcome: z.ZodEnum<{
199
+ success: "success";
200
+ failure: "failure";
201
+ }>;
202
+ actor_id: z.ZodNullable<z.ZodString>;
203
+ account_id: z.ZodNullable<z.ZodString>;
204
+ target_account_id: z.ZodNullable<z.ZodString>;
205
+ ip: z.ZodNullable<z.ZodString>;
206
+ created_at: z.ZodString;
207
+ metadata: z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
208
+ username: z.ZodNullable<z.ZodString>;
209
+ target_username: z.ZodNullable<z.ZodString>;
210
+ }, z.core.$strict>;
211
+ export type AuditLogEventWithUsernamesJson = z.infer<typeof AuditLogEventWithUsernamesJson>;
212
+ /** Zod schema for permit history events with resolved usernames. */
213
+ export declare const PermitHistoryEventJson: z.ZodObject<{
214
+ id: z.ZodString;
215
+ seq: z.ZodNumber;
216
+ event_type: z.ZodEnum<{
217
+ login: "login";
218
+ logout: "logout";
219
+ bootstrap: "bootstrap";
220
+ signup: "signup";
221
+ password_change: "password_change";
222
+ session_revoke: "session_revoke";
223
+ session_revoke_all: "session_revoke_all";
224
+ token_create: "token_create";
225
+ token_revoke: "token_revoke";
226
+ token_revoke_all: "token_revoke_all";
227
+ permit_grant: "permit_grant";
228
+ permit_revoke: "permit_revoke";
229
+ invite_create: "invite_create";
230
+ invite_delete: "invite_delete";
231
+ app_settings_update: "app_settings_update";
232
+ }>;
233
+ outcome: z.ZodEnum<{
234
+ success: "success";
235
+ failure: "failure";
236
+ }>;
237
+ actor_id: z.ZodNullable<z.ZodString>;
238
+ account_id: z.ZodNullable<z.ZodString>;
239
+ target_account_id: z.ZodNullable<z.ZodString>;
240
+ ip: z.ZodNullable<z.ZodString>;
241
+ created_at: z.ZodString;
242
+ metadata: z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
243
+ username: z.ZodNullable<z.ZodString>;
244
+ target_username: z.ZodNullable<z.ZodString>;
245
+ }, z.core.$strict>;
246
+ export type PermitHistoryEventJson = z.infer<typeof PermitHistoryEventJson>;
247
+ /** Zod schema for admin session listing (session + username). */
248
+ export declare const AdminSessionJson: z.ZodObject<{
249
+ id: z.ZodString;
250
+ account_id: z.ZodString;
251
+ created_at: z.ZodString;
252
+ expires_at: z.ZodString;
253
+ last_seen_at: z.ZodString;
254
+ username: z.ZodString;
255
+ }, z.core.$strict>;
256
+ export type AdminSessionJson = z.infer<typeof AdminSessionJson>;
257
+ export declare const AUDIT_LOG_SCHEMA = "\nCREATE TABLE IF NOT EXISTS audit_log (\n id UUID PRIMARY KEY DEFAULT gen_random_uuid(),\n seq SERIAL NOT NULL,\n event_type TEXT NOT NULL,\n outcome TEXT NOT NULL DEFAULT 'success',\n actor_id UUID REFERENCES actor(id) ON DELETE SET NULL,\n account_id UUID REFERENCES account(id) ON DELETE SET NULL,\n target_account_id UUID REFERENCES account(id) ON DELETE SET NULL,\n ip TEXT,\n created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n metadata JSONB\n)";
258
+ export declare const AUDIT_LOG_INDEXES: string[];
259
+ //# sourceMappingURL=audit_log_schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit_log_schema.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/auth/audit_log_schema.ts"],"names":[],"mappings":"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"}