alepha 0.21.2 → 0.23.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 (519) hide show
  1. package/README.md +0 -1
  2. package/dist/api/audits/index.browser.js.map +1 -1
  3. package/dist/api/audits/index.d.ts +393 -403
  4. package/dist/api/audits/index.d.ts.map +1 -1
  5. package/dist/api/audits/index.js +25 -56
  6. package/dist/api/audits/index.js.map +1 -1
  7. package/dist/api/files/index.browser.js +31 -1
  8. package/dist/api/files/index.browser.js.map +1 -1
  9. package/dist/api/files/index.d.ts +313 -208
  10. package/dist/api/files/index.d.ts.map +1 -1
  11. package/dist/api/files/index.js +152 -42
  12. package/dist/api/files/index.js.map +1 -1
  13. package/dist/api/jobs/index.browser.js +2 -2
  14. package/dist/api/jobs/index.browser.js.map +1 -1
  15. package/dist/api/jobs/index.d.ts +282 -285
  16. package/dist/api/jobs/index.d.ts.map +1 -1
  17. package/dist/api/jobs/index.js +39 -33
  18. package/dist/api/jobs/index.js.map +1 -1
  19. package/dist/api/keys/index.d.ts +217 -222
  20. package/dist/api/keys/index.d.ts.map +1 -1
  21. package/dist/api/keys/index.js.map +1 -1
  22. package/dist/api/notifications/index.browser.js.map +1 -1
  23. package/dist/api/notifications/index.d.ts +188 -195
  24. package/dist/api/notifications/index.d.ts.map +1 -1
  25. package/dist/api/notifications/index.js.map +1 -1
  26. package/dist/api/oauth/index.d.ts +71 -76
  27. package/dist/api/oauth/index.d.ts.map +1 -1
  28. package/dist/api/oauth/index.js.map +1 -1
  29. package/dist/api/organizations/index.browser.js.map +1 -1
  30. package/dist/api/organizations/index.d.ts +104 -109
  31. package/dist/api/organizations/index.d.ts.map +1 -1
  32. package/dist/api/organizations/index.js.map +1 -1
  33. package/dist/api/parameters/index.browser.js +43 -16
  34. package/dist/api/parameters/index.browser.js.map +1 -1
  35. package/dist/api/parameters/index.d.ts +488 -344
  36. package/dist/api/parameters/index.d.ts.map +1 -1
  37. package/dist/api/parameters/index.js +175 -35
  38. package/dist/api/parameters/index.js.map +1 -1
  39. package/dist/api/payments/index.d.ts +396 -402
  40. package/dist/api/payments/index.d.ts.map +1 -1
  41. package/dist/api/payments/index.js.map +1 -1
  42. package/dist/api/subscriptions/index.d.ts +644 -652
  43. package/dist/api/subscriptions/index.d.ts.map +1 -1
  44. package/dist/api/subscriptions/index.js +1 -1
  45. package/dist/api/subscriptions/index.js.map +1 -1
  46. package/dist/api/users/index.browser.js +7 -0
  47. package/dist/api/users/index.browser.js.map +1 -1
  48. package/dist/api/users/index.d.ts +1106 -1005
  49. package/dist/api/users/index.d.ts.map +1 -1
  50. package/dist/api/users/index.js +307 -64
  51. package/dist/api/users/index.js.map +1 -1
  52. package/dist/api/verifications/index.browser.js.map +1 -1
  53. package/dist/api/verifications/index.d.ts +137 -143
  54. package/dist/api/verifications/index.d.ts.map +1 -1
  55. package/dist/api/verifications/index.js.map +1 -1
  56. package/dist/background/index.d.ts +95 -0
  57. package/dist/background/index.d.ts.map +1 -0
  58. package/dist/background/index.js +121 -0
  59. package/dist/background/index.js.map +1 -0
  60. package/dist/background/index.workerd.js +110 -0
  61. package/dist/background/index.workerd.js.map +1 -0
  62. package/dist/batch/index.d.ts +5 -7
  63. package/dist/batch/index.d.ts.map +1 -1
  64. package/dist/batch/index.js.map +1 -1
  65. package/dist/bin/index.js.map +1 -1
  66. package/dist/bucket/index.d.ts +76 -54
  67. package/dist/bucket/index.d.ts.map +1 -1
  68. package/dist/bucket/index.js +58 -11
  69. package/dist/bucket/index.js.map +1 -1
  70. package/dist/bucket/index.workerd.js +200 -5
  71. package/dist/bucket/index.workerd.js.map +1 -1
  72. package/dist/cache/core/index.d.ts +7 -10
  73. package/dist/cache/core/index.d.ts.map +1 -1
  74. package/dist/cache/core/index.js.map +1 -1
  75. package/dist/cache/core/index.workerd.js.map +1 -1
  76. package/dist/cache/database/index.d.ts +22 -26
  77. package/dist/cache/database/index.d.ts.map +1 -1
  78. package/dist/cache/database/index.js.map +1 -1
  79. package/dist/cache/redis/index.d.ts +4 -7
  80. package/dist/cache/redis/index.d.ts.map +1 -1
  81. package/dist/cache/redis/index.js.map +1 -1
  82. package/dist/captcha/index.d.ts +3 -6
  83. package/dist/captcha/index.d.ts.map +1 -1
  84. package/dist/captcha/index.js.map +1 -1
  85. package/dist/cli/config/index.d.ts.map +1 -1
  86. package/dist/cli/config/index.js.map +1 -1
  87. package/dist/cli/core/index.d.ts +458 -249
  88. package/dist/cli/core/index.d.ts.map +1 -1
  89. package/dist/cli/core/index.js +372 -660
  90. package/dist/cli/core/index.js.map +1 -1
  91. package/dist/cli/devtools/index.d.ts +3 -5
  92. package/dist/cli/devtools/index.d.ts.map +1 -1
  93. package/dist/cli/devtools/index.js.map +1 -1
  94. package/dist/cli/i18n/index.d.ts +20 -17
  95. package/dist/cli/i18n/index.d.ts.map +1 -1
  96. package/dist/cli/i18n/index.js +45 -11
  97. package/dist/cli/i18n/index.js.map +1 -1
  98. package/dist/cli/platform/index.d.ts +126 -1342
  99. package/dist/cli/platform/index.d.ts.map +1 -1
  100. package/dist/cli/platform/index.js +136 -2374
  101. package/dist/cli/platform/index.js.map +1 -1
  102. package/dist/cli/platform-lib/index.d.ts +1472 -0
  103. package/dist/cli/platform-lib/index.d.ts.map +1 -0
  104. package/dist/cli/platform-lib/index.js +2660 -0
  105. package/dist/cli/platform-lib/index.js.map +1 -0
  106. package/dist/cli/vendor/index.d.ts +17 -21
  107. package/dist/cli/vendor/index.d.ts.map +1 -1
  108. package/dist/cli/vendor/index.js.map +1 -1
  109. package/dist/command/index.d.ts +20 -19
  110. package/dist/command/index.d.ts.map +1 -1
  111. package/dist/command/index.js +39 -10
  112. package/dist/command/index.js.map +1 -1
  113. package/dist/{containers → container}/core/index.d.ts +13 -15
  114. package/dist/container/core/index.d.ts.map +1 -0
  115. package/dist/{containers → container}/core/index.js +23 -14
  116. package/dist/container/core/index.js.map +1 -0
  117. package/dist/{containers → container}/core/index.workerd.js +37 -22
  118. package/dist/container/core/index.workerd.js.map +1 -0
  119. package/dist/core/index.browser.js +27 -1
  120. package/dist/core/index.browser.js.map +1 -1
  121. package/dist/core/index.d.ts +48 -24
  122. package/dist/core/index.d.ts.map +1 -1
  123. package/dist/core/index.js +27 -1
  124. package/dist/core/index.js.map +1 -1
  125. package/dist/core/index.native.js +27 -1
  126. package/dist/core/index.native.js.map +1 -1
  127. package/dist/core/index.workerd.js +27 -1
  128. package/dist/core/index.workerd.js.map +1 -1
  129. package/dist/crypto/index.browser.js.map +1 -1
  130. package/dist/crypto/index.d.ts +5 -8
  131. package/dist/crypto/index.d.ts.map +1 -1
  132. package/dist/crypto/index.js.map +1 -1
  133. package/dist/datetime/index.d.ts +3 -4
  134. package/dist/datetime/index.d.ts.map +1 -1
  135. package/dist/datetime/index.js.map +1 -1
  136. package/dist/email/brevo/index.d.ts +2 -4
  137. package/dist/email/brevo/index.d.ts.map +1 -1
  138. package/dist/email/brevo/index.js.map +1 -1
  139. package/dist/email/cloudflare/index.d.ts +20 -7
  140. package/dist/email/cloudflare/index.d.ts.map +1 -1
  141. package/dist/email/cloudflare/index.js +46 -9
  142. package/dist/email/cloudflare/index.js.map +1 -1
  143. package/dist/email/core/index.d.ts +6 -9
  144. package/dist/email/core/index.d.ts.map +1 -1
  145. package/dist/email/core/index.js.map +1 -1
  146. package/dist/email/core/index.workerd.js.map +1 -1
  147. package/dist/email/smtp/index.d.ts +10 -13
  148. package/dist/email/smtp/index.d.ts.map +1 -1
  149. package/dist/email/smtp/index.js +107 -32
  150. package/dist/email/smtp/index.js.map +1 -1
  151. package/dist/fake/index.d.ts +1 -2
  152. package/dist/fake/index.d.ts.map +1 -1
  153. package/dist/fake/index.js.map +1 -1
  154. package/dist/lock/core/index.d.ts +9 -14
  155. package/dist/lock/core/index.d.ts.map +1 -1
  156. package/dist/lock/core/index.js.map +1 -1
  157. package/dist/lock/redis/index.d.ts +2 -4
  158. package/dist/lock/redis/index.d.ts.map +1 -1
  159. package/dist/lock/redis/index.js.map +1 -1
  160. package/dist/logger/index.d.ts +105 -76
  161. package/dist/logger/index.d.ts.map +1 -1
  162. package/dist/logger/index.js +196 -174
  163. package/dist/logger/index.js.map +1 -1
  164. package/dist/mcp/index.d.ts +25 -20
  165. package/dist/mcp/index.d.ts.map +1 -1
  166. package/dist/mcp/index.js +23 -0
  167. package/dist/mcp/index.js.map +1 -1
  168. package/dist/orm/core/index.browser.js.map +1 -1
  169. package/dist/orm/core/index.bun.js +19 -1
  170. package/dist/orm/core/index.bun.js.map +1 -1
  171. package/dist/orm/core/index.d.ts +76 -62
  172. package/dist/orm/core/index.d.ts.map +1 -1
  173. package/dist/orm/core/index.js +20 -2
  174. package/dist/orm/core/index.js.map +1 -1
  175. package/dist/orm/postgres/index.bun.js.map +1 -1
  176. package/dist/orm/postgres/index.d.ts +28 -20
  177. package/dist/orm/postgres/index.d.ts.map +1 -1
  178. package/dist/orm/postgres/index.js.map +1 -1
  179. package/dist/queue/core/index.d.ts +12 -15
  180. package/dist/queue/core/index.d.ts.map +1 -1
  181. package/dist/queue/core/index.js.map +1 -1
  182. package/dist/queue/core/index.workerd.js.map +1 -1
  183. package/dist/queue/redis/index.d.ts +3 -5
  184. package/dist/queue/redis/index.d.ts.map +1 -1
  185. package/dist/queue/redis/index.js.map +1 -1
  186. package/dist/react/auth/index.browser.js +9 -2
  187. package/dist/react/auth/index.browser.js.map +1 -1
  188. package/dist/react/auth/index.d.ts +14 -9
  189. package/dist/react/auth/index.d.ts.map +1 -1
  190. package/dist/react/auth/index.js +9 -2
  191. package/dist/react/auth/index.js.map +1 -1
  192. package/dist/react/core/index.d.ts +7 -8
  193. package/dist/react/core/index.d.ts.map +1 -1
  194. package/dist/react/core/index.js +6 -3
  195. package/dist/react/core/index.js.map +1 -1
  196. package/dist/react/form/index.d.ts +2 -5
  197. package/dist/react/form/index.d.ts.map +1 -1
  198. package/dist/react/form/index.js +16 -15
  199. package/dist/react/form/index.js.map +1 -1
  200. package/dist/react/head/index.browser.js.map +1 -1
  201. package/dist/react/head/index.d.ts +2 -4
  202. package/dist/react/head/index.d.ts.map +1 -1
  203. package/dist/react/head/index.js.map +1 -1
  204. package/dist/react/i18n/index.d.ts +90 -11
  205. package/dist/react/i18n/index.d.ts.map +1 -1
  206. package/dist/react/i18n/index.js +147 -11
  207. package/dist/react/i18n/index.js.map +1 -1
  208. package/dist/react/intro/index.d.ts +1 -2
  209. package/dist/react/intro/index.d.ts.map +1 -1
  210. package/dist/react/intro/index.js +2 -2
  211. package/dist/react/intro/index.js.map +1 -1
  212. package/dist/react/router/index.browser.js +193 -24
  213. package/dist/react/router/index.browser.js.map +1 -1
  214. package/dist/react/router/index.d.ts +434 -222
  215. package/dist/react/router/index.d.ts.map +1 -1
  216. package/dist/react/router/index.js +249 -35
  217. package/dist/react/router/index.js.map +1 -1
  218. package/dist/react/sitemap/index.browser.js +35 -0
  219. package/dist/react/sitemap/index.browser.js.map +1 -0
  220. package/dist/react/sitemap/index.d.ts +92 -0
  221. package/dist/react/sitemap/index.d.ts.map +1 -0
  222. package/dist/react/sitemap/index.js +131 -0
  223. package/dist/react/sitemap/index.js.map +1 -0
  224. package/dist/react/testing/index.d.ts +1 -2
  225. package/dist/react/testing/index.d.ts.map +1 -1
  226. package/dist/react/testing/index.js +16 -17
  227. package/dist/react/testing/index.js.map +1 -1
  228. package/dist/react/ui/index.d.ts +20 -25
  229. package/dist/react/ui/index.d.ts.map +1 -1
  230. package/dist/react/ui/index.js.map +1 -1
  231. package/dist/redis/index.bun.js.map +1 -1
  232. package/dist/redis/index.d.ts +17 -19
  233. package/dist/redis/index.d.ts.map +1 -1
  234. package/dist/redis/index.js.map +1 -1
  235. package/dist/retry/index.d.ts +2 -4
  236. package/dist/retry/index.d.ts.map +1 -1
  237. package/dist/retry/index.js.map +1 -1
  238. package/dist/router/index.d.ts.map +1 -1
  239. package/dist/router/index.js.map +1 -1
  240. package/dist/scheduler/index.d.ts +10 -13
  241. package/dist/scheduler/index.d.ts.map +1 -1
  242. package/dist/scheduler/index.js.map +1 -1
  243. package/dist/scheduler/index.workerd.js.map +1 -1
  244. package/dist/security/index.browser.js.map +1 -1
  245. package/dist/security/index.d.ts +45 -48
  246. package/dist/security/index.d.ts.map +1 -1
  247. package/dist/security/index.js.map +1 -1
  248. package/dist/server/auth/index.browser.js.map +1 -1
  249. package/dist/server/auth/index.d.ts +272 -173
  250. package/dist/server/auth/index.d.ts.map +1 -1
  251. package/dist/server/auth/index.js +1608 -15
  252. package/dist/server/auth/index.js.map +1 -1
  253. package/dist/server/cookies/index.browser.js.map +1 -1
  254. package/dist/server/cookies/index.d.ts +20 -7
  255. package/dist/server/cookies/index.d.ts.map +1 -1
  256. package/dist/server/cookies/index.js +22 -3
  257. package/dist/server/cookies/index.js.map +1 -1
  258. package/dist/server/core/index.browser.js.map +1 -1
  259. package/dist/server/core/index.d.ts +106 -73
  260. package/dist/server/core/index.d.ts.map +1 -1
  261. package/dist/server/core/index.js +44 -0
  262. package/dist/server/core/index.js.map +1 -1
  263. package/dist/server/cors/index.d.ts +11 -14
  264. package/dist/server/cors/index.d.ts.map +1 -1
  265. package/dist/server/cors/index.js.map +1 -1
  266. package/dist/server/etag/index.d.ts +6 -9
  267. package/dist/server/etag/index.d.ts.map +1 -1
  268. package/dist/server/etag/index.js.map +1 -1
  269. package/dist/server/health/index.d.ts +18 -21
  270. package/dist/server/health/index.d.ts.map +1 -1
  271. package/dist/server/health/index.js.map +1 -1
  272. package/dist/server/links/index.browser.js +2 -0
  273. package/dist/server/links/index.browser.js.map +1 -1
  274. package/dist/server/links/index.d.ts +63 -67
  275. package/dist/server/links/index.d.ts.map +1 -1
  276. package/dist/server/links/index.js +2 -0
  277. package/dist/server/links/index.js.map +1 -1
  278. package/dist/server/metrics/index.d.ts +5 -7
  279. package/dist/server/metrics/index.d.ts.map +1 -1
  280. package/dist/server/metrics/index.js.map +1 -1
  281. package/dist/server/proxy/index.d.ts +3 -5
  282. package/dist/server/proxy/index.d.ts.map +1 -1
  283. package/dist/server/proxy/index.js.map +1 -1
  284. package/dist/server/rate-limit/index.d.ts +10 -13
  285. package/dist/server/rate-limit/index.d.ts.map +1 -1
  286. package/dist/server/rate-limit/index.js.map +1 -1
  287. package/dist/server/static/index.d.ts +3 -5
  288. package/dist/server/static/index.d.ts.map +1 -1
  289. package/dist/server/static/index.js.map +1 -1
  290. package/dist/server/swagger/index.d.ts +5 -8
  291. package/dist/server/swagger/index.d.ts.map +1 -1
  292. package/dist/server/swagger/index.js.map +1 -1
  293. package/dist/sms/index.d.ts +3 -5
  294. package/dist/sms/index.d.ts.map +1 -1
  295. package/dist/sms/index.js.map +1 -1
  296. package/dist/system/index.browser.js.map +1 -1
  297. package/dist/system/index.d.ts +2 -4
  298. package/dist/system/index.d.ts.map +1 -1
  299. package/dist/system/index.js.map +1 -1
  300. package/dist/system/index.workerd.js.map +1 -1
  301. package/dist/topic/core/index.d.ts +4 -6
  302. package/dist/topic/core/index.d.ts.map +1 -1
  303. package/dist/topic/core/index.js.map +1 -1
  304. package/dist/topic/redis/index.d.ts +5 -8
  305. package/dist/topic/redis/index.d.ts.map +1 -1
  306. package/dist/topic/redis/index.js.map +1 -1
  307. package/package.json +59 -23
  308. package/src/api/audits/__tests__/AuditService.spec.ts +18 -110
  309. package/src/api/audits/controllers/AdminAuditController.ts +14 -0
  310. package/src/api/audits/services/AuditService.ts +21 -88
  311. package/src/api/files/__tests__/FileService.spec.ts +207 -2
  312. package/src/api/files/index.ts +3 -0
  313. package/src/api/files/schemas/fileCreatorSummarySchema.ts +22 -0
  314. package/src/api/files/schemas/fileResourceSchema.ts +10 -1
  315. package/src/api/files/services/FileService.ts +170 -72
  316. package/src/api/jobs/__tests__/$job.spec.ts +24 -1
  317. package/src/api/jobs/index.ts +4 -3
  318. package/src/api/jobs/primitives/$job.ts +7 -3
  319. package/src/api/jobs/providers/DirectJobDispatcher.ts +17 -36
  320. package/src/api/jobs/providers/JobProvider.ts +53 -24
  321. package/src/api/jobs/schemas/jobConfigAtom.ts +1 -1
  322. package/src/api/jobs/schemas/jobExecutionResourceSchema.ts +4 -1
  323. package/src/api/keys/schemas/adminApiKeyResourceSchema.ts +3 -1
  324. package/src/api/parameters/__tests__/$parameter.spec.ts +19 -2
  325. package/src/api/parameters/audits/ParameterAudits.ts +17 -0
  326. package/src/api/parameters/controllers/AdminParameterController.ts +95 -19
  327. package/src/api/parameters/index.ts +3 -0
  328. package/src/api/parameters/schemas/activateParameterBodySchema.ts +3 -3
  329. package/src/api/parameters/schemas/createParameterVersionBodySchema.ts +3 -2
  330. package/src/api/parameters/schemas/parameterCreatorSummarySchema.ts +25 -0
  331. package/src/api/parameters/schemas/parameterResponseSchema.ts +5 -0
  332. package/src/api/parameters/schemas/rollbackParameterBodySchema.ts +4 -2
  333. package/src/api/parameters/services/ParameterProvider.ts +69 -6
  334. package/src/api/subscriptions/jobs/SubscriptionJobs.ts +1 -1
  335. package/src/api/users/__tests__/AdminSessionController.spec.ts +37 -0
  336. package/src/api/users/audits/SessionAudits.ts +33 -0
  337. package/src/api/users/audits/UserAudits.ts +19 -43
  338. package/src/api/users/controllers/AdminUserController.ts +66 -1
  339. package/src/api/users/controllers/RealmController.ts +1 -0
  340. package/src/api/users/entities/sessions.ts +6 -0
  341. package/src/api/users/entities/users.ts +2 -0
  342. package/src/api/users/index.ts +9 -1
  343. package/src/api/users/primitives/$realm.ts +29 -0
  344. package/src/api/users/providers/RealmProvider.ts +15 -0
  345. package/src/api/users/schemas/realmConfigSchema.ts +14 -0
  346. package/src/api/users/schemas/sessionResourceSchema.ts +16 -0
  347. package/src/api/users/schemas/updateUserSchema.ts +1 -8
  348. package/src/api/users/schemas/userQuerySchema.ts +7 -0
  349. package/src/api/users/services/CredentialService.ts +15 -6
  350. package/src/api/users/services/IdentityService.ts +2 -1
  351. package/src/api/users/services/RegistrationService.ts +2 -1
  352. package/src/api/users/services/SessionCrudService.ts +19 -2
  353. package/src/api/users/services/SessionService.ts +39 -19
  354. package/src/api/users/services/UserService.ts +106 -8
  355. package/src/background/__tests__/BackgroundTaskProvider.spec.ts +96 -0
  356. package/src/background/index.ts +37 -0
  357. package/src/background/index.workerd.ts +28 -0
  358. package/src/background/providers/BackgroundTaskProvider.ts +70 -0
  359. package/src/background/providers/WorkerdBackgroundTaskProvider.ts +43 -0
  360. package/src/bucket/__tests__/$bucket.spec.ts +18 -0
  361. package/src/bucket/__tests__/LocalFileStorageProvider.spec.ts +5 -0
  362. package/src/bucket/__tests__/MemoryFileStorageProvider.spec.ts +5 -0
  363. package/src/bucket/__tests__/NodeS3BucketProvider.spec.ts +23 -4
  364. package/src/bucket/__tests__/shared.ts +30 -0
  365. package/src/bucket/index.ts +5 -5
  366. package/src/bucket/index.workerd.ts +11 -4
  367. package/src/bucket/primitives/$bucket.ts +27 -0
  368. package/src/bucket/providers/FileStorageProvider.ts +13 -0
  369. package/src/bucket/providers/LocalFileStorageProvider.ts +17 -1
  370. package/src/bucket/providers/MemoryFileStorageProvider.ts +7 -0
  371. package/src/bucket/providers/{CloudflareR2Provider.ts → R2FileStorageProvider.ts} +10 -1
  372. package/src/bucket/providers/{NodeS3BucketProvider.ts → S3FileStorageProvider.ts} +27 -5
  373. package/src/cli/core/__tests__/BuildDockerTask.spec.ts +25 -1
  374. package/src/cli/core/__tests__/init.spec.ts +0 -219
  375. package/src/cli/core/atoms/buildOptions.ts +0 -12
  376. package/src/cli/core/commands/__tests__/BuildCommand.spec.ts +43 -0
  377. package/src/cli/core/commands/build.ts +105 -37
  378. package/src/cli/core/commands/init.ts +0 -12
  379. package/src/cli/core/commands/pack.ts +133 -0
  380. package/src/cli/core/index.ts +3 -3
  381. package/src/cli/core/providers/ViteDevServerProvider.ts +40 -16
  382. package/src/cli/core/services/PackageManagerUtils.ts +0 -16
  383. package/src/cli/core/services/ProjectScaffolder.ts +29 -291
  384. package/src/cli/core/tasks/BuildCloudflareTask.ts +382 -56
  385. package/src/cli/core/tasks/BuildDockerTask.ts +33 -3
  386. package/src/cli/core/tasks/BuildPrerenderTask.ts +44 -7
  387. package/src/cli/core/tasks/BuildTask.ts +34 -0
  388. package/src/cli/core/templates/apiIndexTs.ts +1 -22
  389. package/src/cli/core/templates/mainCss.ts +0 -1
  390. package/src/cli/core/templates/webAppRouterTs.ts +0 -99
  391. package/src/cli/core/templates/webIndexTs.ts +1 -22
  392. package/src/cli/i18n/__tests__/I18nCheckService.spec.ts +48 -0
  393. package/src/cli/i18n/services/I18nCheckService.ts +65 -11
  394. package/src/cli/platform/__tests__/SecretsCommand.spec.ts +5 -3
  395. package/src/cli/platform/commands/SecretsCommand.ts +8 -6
  396. package/src/cli/platform/commands/platform.ts +192 -46
  397. package/src/cli/platform/index.ts +12 -52
  398. package/src/cli/{platform → platform-lib}/__tests__/CloudflareAdapter.spec.ts +426 -169
  399. package/src/cli/{platform → platform-lib}/__tests__/NamingService.spec.ts +91 -4
  400. package/src/cli/{platform → platform-lib}/__tests__/VercelAdapter.spec.ts +56 -85
  401. package/src/cli/{platform → platform-lib}/adapters/CloudflareAdapter.ts +519 -190
  402. package/src/cli/{platform → platform-lib}/adapters/PlatformAdapter.ts +62 -35
  403. package/src/cli/{platform → platform-lib}/adapters/VercelAdapter.ts +6 -10
  404. package/src/cli/{platform → platform-lib}/atoms/platformOptions.ts +34 -1
  405. package/src/cli/platform-lib/index.ts +67 -0
  406. package/src/cli/platform-lib/services/NamingService.ts +136 -0
  407. package/src/cli/{platform → platform-lib}/services/PlatformInspector.ts +60 -13
  408. package/src/cli/{platform → platform-lib}/services/PlatformOrchestrator.ts +54 -43
  409. package/src/cli/{platform → platform-lib}/services/WranglerApi.ts +4 -2
  410. package/src/command/__tests__/Runner.spec.ts +20 -0
  411. package/src/command/helpers/EnvUtils.ts +19 -3
  412. package/src/command/helpers/Runner.ts +12 -2
  413. package/src/command/providers/CliProvider.ts +34 -1
  414. package/src/{containers → container}/core/__tests__/$container.spec.ts +5 -5
  415. package/src/{containers → container}/core/index.ts +4 -4
  416. package/src/{containers → container}/core/index.workerd.ts +19 -3
  417. package/src/{containers → container}/core/primitives/$container.ts +1 -1
  418. package/src/{containers → container}/core/providers/CloudflareContainerProvider.ts +17 -19
  419. package/src/{containers → container}/core/providers/ContainerProvider.ts +16 -2
  420. package/src/{containers → container}/core/providers/MockContainerProvider.ts +1 -1
  421. package/src/core/Alepha.ts +49 -1
  422. package/src/core/__tests__/$env.spec.ts +42 -0
  423. package/src/core/__tests__/dump.spec.ts +47 -0
  424. package/src/email/cloudflare/__tests__/CloudflareEmailProvider.spec.ts +42 -10
  425. package/src/email/cloudflare/index.ts +14 -5
  426. package/src/email/cloudflare/providers/CloudflareEmailProvider.ts +54 -9
  427. package/src/logger/__tests__/Logger.spec.ts +55 -0
  428. package/src/logger/index.ts +13 -0
  429. package/src/logger/services/Logger.ts +31 -1
  430. package/src/mcp/__tests__/McpServerProvider.spec.ts +71 -0
  431. package/src/mcp/providers/McpServerProvider.ts +55 -0
  432. package/src/orm/__tests__/orm-showcase-tests.ts +27 -0
  433. package/src/orm/__tests__/orm-showcase.spec.ts +12 -0
  434. package/src/orm/core/interfaces/PgQuery.ts +4 -1
  435. package/src/orm/core/services/Repository.ts +27 -11
  436. package/src/react/auth/hooks/useAuth.ts +10 -5
  437. package/src/react/core/__tests__/useQuery.browser.spec.tsx +25 -0
  438. package/src/react/core/hooks/useAction.ts +14 -3
  439. package/src/react/core/hooks/useQuery.ts +24 -4
  440. package/src/react/form/__tests__/FormModel-submit-loading.spec.ts +71 -0
  441. package/src/react/form/__tests__/form-submitting-reactive.browser.spec.tsx +96 -0
  442. package/src/react/form/services/FormModel.ts +57 -39
  443. package/src/react/i18n/__tests__/I18nProvider.spec.ts +89 -0
  444. package/src/react/i18n/__tests__/locale-routing.spec.ts +107 -0
  445. package/src/react/i18n/components/Translate.tsx +47 -0
  446. package/src/react/i18n/index.ts +2 -0
  447. package/src/react/i18n/providers/I18nProvider.ts +171 -12
  448. package/src/react/intro/components/GettingStartedAdminSlide.tsx +2 -2
  449. package/src/react/router/__tests__/$page.spec.tsx +3 -2
  450. package/src/react/router/__tests__/RouterLocaleProvider.spec.ts +127 -0
  451. package/src/react/router/__tests__/page-can.spec.ts +18 -13
  452. package/src/react/router/hooks/useQueryParams.ts +114 -14
  453. package/src/react/router/index.browser.ts +4 -0
  454. package/src/react/router/index.shared.ts +1 -0
  455. package/src/react/router/index.ts +9 -0
  456. package/src/react/router/primitives/$page.ts +85 -4
  457. package/src/react/router/providers/ReactBrowserRouterProvider.ts +18 -8
  458. package/src/react/router/providers/ReactPageProvider.ts +12 -1
  459. package/src/react/router/providers/ReactServerProvider.ts +96 -14
  460. package/src/react/router/providers/RootComponentsProvider.ts +13 -0
  461. package/src/react/router/providers/RouterLocaleProvider.ts +125 -0
  462. package/src/react/router/providers/__tests__/RootComponentsProvider.spec.ts +15 -0
  463. package/src/react/router/providers/__tests__/rootComponents.ssr.browser.spec.tsx +67 -0
  464. package/src/react/sitemap/__tests__/$sitemap.spec.ts +131 -0
  465. package/src/react/sitemap/index.browser.ts +21 -0
  466. package/src/react/sitemap/index.ts +25 -0
  467. package/src/react/sitemap/primitives/$sitemap.browser.ts +26 -0
  468. package/src/react/sitemap/primitives/$sitemap.ts +196 -0
  469. package/src/react/ui/services/SchemaControl.ts +3 -4
  470. package/src/server/auth/__tests__/appleClientSecret.spec.ts +34 -0
  471. package/src/server/auth/__tests__/authFederationClient.spec.ts +40 -0
  472. package/src/server/auth/__tests__/federationAssertion.spec.ts +146 -0
  473. package/src/server/auth/__tests__/federationRedirectReplay.spec.ts +44 -0
  474. package/src/server/auth/helpers/appleClientSecret.ts +24 -0
  475. package/src/server/auth/helpers/federationAssertion.ts +74 -0
  476. package/src/server/auth/helpers/jtiReplayGuard.ts +41 -0
  477. package/src/server/auth/helpers/safeRedirectPath.ts +19 -0
  478. package/src/server/auth/index.ts +4 -0
  479. package/src/server/auth/primitives/$authFederationBroker.ts +273 -0
  480. package/src/server/auth/primitives/$authFederationClient.ts +89 -0
  481. package/src/server/auth/providers/ServerAuthProvider.ts +18 -4
  482. package/src/server/cookies/__tests__/ServerCookiesProvider.spec.ts +70 -0
  483. package/src/server/cookies/providers/ServerCookiesProvider.ts +23 -3
  484. package/src/server/core/interfaces/ServerRequest.ts +8 -0
  485. package/src/server/core/primitives/$route.ts +27 -0
  486. package/src/server/core/providers/ServerMultipartProvider.ts +19 -0
  487. package/src/server/links/providers/LinkProvider.ts +10 -0
  488. package/dist/containers/core/index.d.ts.map +0 -1
  489. package/dist/containers/core/index.js.map +0 -1
  490. package/dist/containers/core/index.workerd.js.map +0 -1
  491. package/src/cli/core/tasks/BuildSitemapTask.ts +0 -130
  492. package/src/cli/core/templates/componentsJsonTs.ts +0 -39
  493. package/src/cli/core/templates/saasAdminLayoutTsx.ts +0 -77
  494. package/src/cli/core/templates/saasAdminPagesTsx.ts +0 -26
  495. package/src/cli/core/templates/saasAuthLayoutTsx.ts +0 -22
  496. package/src/cli/core/templates/saasAuthPagesTsx.ts +0 -62
  497. package/src/cli/core/templates/saasRealmProviderTs.ts +0 -52
  498. package/src/cli/platform/services/NamingService.ts +0 -54
  499. /package/dist/orm/core/{chunk-o8xxKEmq.js → chunk-B4FMCO8f.js} +0 -0
  500. /package/dist/react/testing/{chunk-6Ep1yQYe.js → chunk-BpyX8vjI.js} +0 -0
  501. /package/src/cli/{platform → platform-lib}/__tests__/GitHubSecretStore.spec.ts +0 -0
  502. /package/src/cli/{platform → platform-lib}/__tests__/PlatformCacheProvider.spec.ts +0 -0
  503. /package/src/cli/{platform → platform-lib}/__tests__/PlatformInspector.spec.ts +0 -0
  504. /package/src/cli/{platform → platform-lib}/__tests__/PlatformOrchestrator.spec.ts +0 -0
  505. /package/src/cli/{platform → platform-lib}/__tests__/SecretFilterService.spec.ts +0 -0
  506. /package/src/cli/{platform → platform-lib}/__tests__/detectResources.spec.ts +0 -0
  507. /package/src/cli/{platform → platform-lib}/providers/GitHubSecretStore.ts +0 -0
  508. /package/src/cli/{platform → platform-lib}/providers/MemorySecretStore.ts +0 -0
  509. /package/src/cli/{platform → platform-lib}/providers/PlatformCacheProvider.ts +0 -0
  510. /package/src/cli/{platform → platform-lib}/providers/SecretStoreProvider.ts +0 -0
  511. /package/src/cli/{platform → platform-lib}/schemas/cloudflare.ts +0 -0
  512. /package/src/cli/{platform → platform-lib}/schemas/platform.ts +0 -0
  513. /package/src/cli/{platform → platform-lib}/schemas/vercel.ts +0 -0
  514. /package/src/cli/{platform → platform-lib}/services/CloudflareApi.ts +0 -0
  515. /package/src/cli/{platform → platform-lib}/services/SecretFilterService.ts +0 -0
  516. /package/src/cli/{platform → platform-lib}/services/VercelApi.ts +0 -0
  517. /package/src/cli/{platform → platform-lib}/services/VercelCli.ts +0 -0
  518. /package/src/{containers → container}/core/interfaces/ContainerOptions.ts +0 -0
  519. /package/src/{containers → container}/core/providers/NodeContainerProvider.ts +0 -0
@@ -1,37 +1,32 @@
1
- import * as _$alepha from "alepha";
2
1
  import { Alepha, FileLike, Static, TNull, TObject, TOptional, TSchema, TUnion } from "alepha";
3
2
  import { BucketPrimitive } from "alepha/bucket";
4
3
  import { UserAccountToken } from "alepha/security";
5
- import * as _$alepha_server0 from "alepha/server";
6
4
  import { Ok } from "alepha/server";
7
5
  import { DateTime, DateTimeProvider, DurationLike } from "alepha/datetime";
8
- import * as _$alepha_logger0 from "alepha/logger";
9
- import * as _$alepha_orm0 from "alepha/orm";
10
- import { Page } from "alepha/orm";
11
- import * as _$alepha_scheduler0 from "alepha/scheduler";
12
- import * as _$typebox from "typebox";
6
+ import { Page, RepositoryProvider } from "alepha/orm";
7
+ import { FileSystemProvider } from "alepha/system";
13
8
  import { BuildExtraConfigColumns, SQL } from "drizzle-orm";
14
9
  import { PgColumnBuilderBase, PgSequenceOptions, PgTableExtraConfigValue, UpdateDeleteAction } from "drizzle-orm/pg-core";
15
10
  //#region ../../src/api/files/entities/files.d.ts
16
- declare const files: _$alepha_orm0.EntityPrimitive<_$typebox.TObject<{
17
- id: _$alepha_orm0.PgAttr<_$alepha_orm0.PgAttr<_$typebox.TString, typeof _$alepha_orm0.PG_PRIMARY_KEY>, typeof _$alepha_orm0.PG_DEFAULT>;
18
- version: _$alepha_orm0.PgAttr<_$alepha_orm0.PgAttr<_$typebox.TInteger, typeof _$alepha_orm0.PG_VERSION>, typeof _$alepha_orm0.PG_DEFAULT>;
19
- createdAt: _$alepha_orm0.PgAttr<_$alepha_orm0.PgAttr<_$typebox.TString, typeof _$alepha_orm0.PG_CREATED_AT>, typeof _$alepha_orm0.PG_DEFAULT>;
20
- updatedAt: _$alepha_orm0.PgAttr<_$alepha_orm0.PgAttr<_$typebox.TString, typeof _$alepha_orm0.PG_UPDATED_AT>, typeof _$alepha_orm0.PG_DEFAULT>;
21
- organizationId: _$alepha_orm0.PgAttr<_$typebox.TString, typeof _$alepha_orm0.PG_ORGANIZATION>;
22
- blobId: _$typebox.TString;
23
- creator: _$typebox.TOptional<_$typebox.TString>;
24
- creatorRealm: _$typebox.TOptional<_$typebox.TString>;
25
- creatorName: _$typebox.TOptional<_$typebox.TString>;
26
- bucket: _$typebox.TString;
27
- expirationDate: _$typebox.TOptional<_$typebox.TString>;
11
+ declare const files: import("alepha/orm").EntityPrimitive<import("typebox").TObject<{
12
+ id: import("alepha/orm").PgAttr<import("alepha/orm").PgAttr<import("typebox").TString, typeof import("alepha/orm").PG_PRIMARY_KEY>, typeof import("alepha/orm").PG_DEFAULT>;
13
+ version: import("alepha/orm").PgAttr<import("alepha/orm").PgAttr<import("typebox").TInteger, typeof import("alepha/orm").PG_VERSION>, typeof import("alepha/orm").PG_DEFAULT>;
14
+ createdAt: import("alepha/orm").PgAttr<import("alepha/orm").PgAttr<import("typebox").TString, typeof import("alepha/orm").PG_CREATED_AT>, typeof import("alepha/orm").PG_DEFAULT>;
15
+ updatedAt: import("alepha/orm").PgAttr<import("alepha/orm").PgAttr<import("typebox").TString, typeof import("alepha/orm").PG_UPDATED_AT>, typeof import("alepha/orm").PG_DEFAULT>;
16
+ organizationId: import("alepha/orm").PgAttr<import("typebox").TString, typeof import("alepha/orm").PG_ORGANIZATION>;
17
+ blobId: import("typebox").TString;
18
+ creator: import("typebox").TOptional<import("typebox").TString>;
19
+ creatorRealm: import("typebox").TOptional<import("typebox").TString>;
20
+ creatorName: import("typebox").TOptional<import("typebox").TString>;
21
+ bucket: import("typebox").TString;
22
+ expirationDate: import("typebox").TOptional<import("typebox").TString>;
28
23
  /**
29
24
  * Display name. Mutable via `FileService.updateFile` — can be renamed
30
25
  * by callers (e.g. an Archive UI letting users rename uploaded blobs).
31
26
  * Initialized to the uploader's filename at upload time. Use
32
27
  * `originalName` if you need the as-uploaded filename after a rename.
33
28
  */
34
- name: _$typebox.TString;
29
+ name: import("typebox").TString;
35
30
  /**
36
31
  * Immutable record of the uploader's filename at upload time. Set once
37
32
  * by `FileService.uploadFile` and the `bucket:file:uploaded` hook;
@@ -39,37 +34,37 @@ declare const files: _$alepha_orm0.EntityPrimitive<_$typebox.TObject<{
39
34
  * headers (Content-Disposition), audit trails, and any UI that wants
40
35
  * to show "originally uploaded as X" alongside a renamed file.
41
36
  */
42
- originalName: _$typebox.TOptional<_$typebox.TString>;
43
- size: _$typebox.TNumber;
44
- mimeType: _$typebox.TString;
37
+ originalName: import("typebox").TOptional<import("typebox").TString>;
38
+ size: import("typebox").TNumber;
39
+ mimeType: import("typebox").TString;
45
40
  /**
46
41
  * Free-form taxonomy. Normalized server-side (trim/lowercase/dedupe is
47
42
  * caller's responsibility for now). Use with `FileQuery.tags` to
48
43
  * filter via array-contains.
49
44
  */
50
- tags: _$typebox.TOptional<_$typebox.TArray<_$typebox.TString>>;
45
+ tags: import("typebox").TOptional<import("typebox").TArray<import("typebox").TString>>;
51
46
  /**
52
47
  * SHA-256 hex digest of the file content (64 lowercase hex chars).
53
48
  * Computed at upload time by `FileService.calculateChecksum`. Stable
54
49
  * — never recomputed after upload. Use for integrity verification,
55
50
  * content-based dedup, or downstream virus-scan correlation.
56
51
  */
57
- checksum: _$typebox.TOptional<_$typebox.TString>;
52
+ checksum: import("typebox").TOptional<import("typebox").TString>;
58
53
  }>>;
59
54
  type FileEntity = Static<typeof files.schema>;
60
55
  //#endregion
61
56
  //#region ../../src/api/files/schemas/fileQuerySchema.d.ts
62
- declare const fileQuerySchema: _$typebox.TObject<{
63
- page: _$typebox.TOptional<_$typebox.TInteger>;
64
- size: _$typebox.TOptional<_$typebox.TInteger>;
65
- sort: _$typebox.TOptional<_$typebox.TString>;
66
- bucket: _$typebox.TOptional<_$typebox.TString>;
67
- tags: _$typebox.TOptional<_$typebox.TArray<_$typebox.TString>>;
68
- name: _$typebox.TOptional<_$typebox.TString>;
69
- mimeType: _$typebox.TOptional<_$typebox.TString>;
70
- creator: _$typebox.TOptional<_$typebox.TString>;
71
- createdAfter: _$typebox.TOptional<_$typebox.TString>;
72
- createdBefore: _$typebox.TOptional<_$typebox.TString>;
57
+ declare const fileQuerySchema: import("typebox").TObject<{
58
+ page: import("typebox").TOptional<import("typebox").TInteger>;
59
+ size: import("typebox").TOptional<import("typebox").TInteger>;
60
+ sort: import("typebox").TOptional<import("typebox").TString>;
61
+ bucket: import("typebox").TOptional<import("typebox").TString>;
62
+ tags: import("typebox").TOptional<import("typebox").TArray<import("typebox").TString>>;
63
+ name: import("typebox").TOptional<import("typebox").TString>;
64
+ mimeType: import("typebox").TOptional<import("typebox").TString>;
65
+ creator: import("typebox").TOptional<import("typebox").TString>;
66
+ createdAfter: import("typebox").TOptional<import("typebox").TString>;
67
+ createdBefore: import("typebox").TOptional<import("typebox").TString>;
73
68
  }>;
74
69
  type FileQuery = Static<typeof fileQuerySchema>;
75
70
  //#endregion
@@ -364,8 +359,8 @@ type PgAttr<T extends TSchema, TAttr extends PgSymbolKeys> = T & { [K in TAttr]:
364
359
  * - `d1://BINDING_NAME` — Cloudflare D1
365
360
  * - `hyperdrive://BINDING_NAME` — Cloudflare Hyperdrive
366
361
  */
367
- declare const databaseEnvSchema: _$typebox.TObject<{
368
- DATABASE_URL: _$typebox.TOptional<_$typebox.TString>;
362
+ declare const databaseEnvSchema: import("typebox").TObject<{
363
+ DATABASE_URL: import("typebox").TOptional<import("typebox").TString>;
369
364
  /**
370
365
  * Enable or disable push-based schema synchronization (drizzle-kit push).
371
366
  *
@@ -373,55 +368,62 @@ declare const databaseEnvSchema: _$typebox.TObject<{
373
368
  * Set to `false` in development to skip automatic schema sync
374
369
  * (e.g. when managing migrations manually).
375
370
  */
376
- DATABASE_SYNC: _$typebox.TOptional<_$typebox.TBoolean>;
371
+ DATABASE_SYNC: import("typebox").TOptional<import("typebox").TBoolean>;
377
372
  }>;
378
373
  declare module "alepha" {
379
374
  interface Env extends Partial<Static<typeof databaseEnvSchema>> {}
380
375
  } //# sourceMappingURL=databaseEnvSchema.d.ts.map
381
376
  //#endregion
382
377
  //#region ../../src/api/files/schemas/fileResourceSchema.d.ts
383
- declare const fileResourceSchema: _$typebox.TObject<{
384
- id: PgAttr<PgAttr<_$typebox.TString, typeof PG_PRIMARY_KEY>, typeof PG_DEFAULT>;
385
- version: PgAttr<PgAttr<_$typebox.TInteger, typeof PG_VERSION>, typeof PG_DEFAULT>;
386
- createdAt: PgAttr<PgAttr<_$typebox.TString, typeof PG_CREATED_AT>, typeof PG_DEFAULT>;
387
- updatedAt: PgAttr<PgAttr<_$typebox.TString, typeof PG_UPDATED_AT>, typeof PG_DEFAULT>;
388
- organizationId: PgAttr<_$typebox.TString, typeof PG_ORGANIZATION>;
389
- blobId: _$typebox.TString;
390
- creator: _$typebox.TOptional<_$typebox.TString>;
391
- creatorRealm: _$typebox.TOptional<_$typebox.TString>;
392
- creatorName: _$typebox.TOptional<_$typebox.TString>;
393
- bucket: _$typebox.TString;
394
- expirationDate: _$typebox.TOptional<_$typebox.TString>;
395
- name: _$typebox.TString;
396
- originalName: _$typebox.TOptional<_$typebox.TString>;
397
- size: _$typebox.TNumber;
398
- mimeType: _$typebox.TString;
399
- tags: _$typebox.TOptional<_$typebox.TArray<_$typebox.TString>>;
400
- checksum: _$typebox.TOptional<_$typebox.TString>;
378
+ declare const fileResourceSchema: import("typebox").TObject<{
379
+ id: PgAttr<PgAttr<import("typebox").TString, typeof PG_PRIMARY_KEY>, typeof PG_DEFAULT>;
380
+ version: PgAttr<PgAttr<import("typebox").TInteger, typeof PG_VERSION>, typeof PG_DEFAULT>;
381
+ createdAt: PgAttr<PgAttr<import("typebox").TString, typeof PG_CREATED_AT>, typeof PG_DEFAULT>;
382
+ updatedAt: PgAttr<PgAttr<import("typebox").TString, typeof PG_UPDATED_AT>, typeof PG_DEFAULT>;
383
+ organizationId: PgAttr<import("typebox").TString, typeof PG_ORGANIZATION>;
384
+ blobId: import("typebox").TString;
385
+ creator: import("typebox").TOptional<import("typebox").TString>;
386
+ creatorRealm: import("typebox").TOptional<import("typebox").TString>;
387
+ creatorName: import("typebox").TOptional<import("typebox").TString>;
388
+ bucket: import("typebox").TString;
389
+ expirationDate: import("typebox").TOptional<import("typebox").TString>;
390
+ name: import("typebox").TString;
391
+ originalName: import("typebox").TOptional<import("typebox").TString>;
392
+ size: import("typebox").TNumber;
393
+ mimeType: import("typebox").TString;
394
+ tags: import("typebox").TOptional<import("typebox").TArray<import("typebox").TString>>;
395
+ checksum: import("typebox").TOptional<import("typebox").TString>;
396
+ user: import("typebox").TOptional<import("typebox").TObject<{
397
+ id: import("typebox").TString;
398
+ email: import("typebox").TOptional<import("typebox").TString>;
399
+ username: import("typebox").TOptional<import("typebox").TString>;
400
+ firstName: import("typebox").TOptional<import("typebox").TString>;
401
+ lastName: import("typebox").TOptional<import("typebox").TString>;
402
+ }>>;
401
403
  }>;
402
404
  type FileResource = Static<typeof fileResourceSchema>;
403
405
  //#endregion
404
406
  //#region ../../src/api/files/schemas/storageStatsSchema.d.ts
405
- declare const bucketStatsSchema: _$typebox.TObject<{
406
- bucket: _$typebox.TString;
407
- totalSize: _$typebox.TNumber;
408
- fileCount: _$typebox.TNumber;
407
+ declare const bucketStatsSchema: import("typebox").TObject<{
408
+ bucket: import("typebox").TString;
409
+ totalSize: import("typebox").TNumber;
410
+ fileCount: import("typebox").TNumber;
409
411
  }>;
410
- declare const mimeTypeStatsSchema: _$typebox.TObject<{
411
- mimeType: _$typebox.TString;
412
- fileCount: _$typebox.TNumber;
412
+ declare const mimeTypeStatsSchema: import("typebox").TObject<{
413
+ mimeType: import("typebox").TString;
414
+ fileCount: import("typebox").TNumber;
413
415
  }>;
414
- declare const storageStatsSchema: _$typebox.TObject<{
415
- totalSize: _$typebox.TNumber;
416
- totalFiles: _$typebox.TNumber;
417
- byBucket: _$typebox.TArray<_$typebox.TObject<{
418
- bucket: _$typebox.TString;
419
- totalSize: _$typebox.TNumber;
420
- fileCount: _$typebox.TNumber;
416
+ declare const storageStatsSchema: import("typebox").TObject<{
417
+ totalSize: import("typebox").TNumber;
418
+ totalFiles: import("typebox").TNumber;
419
+ byBucket: import("typebox").TArray<import("typebox").TObject<{
420
+ bucket: import("typebox").TString;
421
+ totalSize: import("typebox").TNumber;
422
+ fileCount: import("typebox").TNumber;
421
423
  }>>;
422
- byMimeType: _$typebox.TArray<_$typebox.TObject<{
423
- mimeType: _$typebox.TString;
424
- fileCount: _$typebox.TNumber;
424
+ byMimeType: import("typebox").TArray<import("typebox").TObject<{
425
+ mimeType: import("typebox").TString;
426
+ fileCount: import("typebox").TNumber;
425
427
  }>>;
426
428
  }>;
427
429
  type BucketStats = Static<typeof bucketStatsSchema>;
@@ -431,38 +433,74 @@ type StorageStats = Static<typeof storageStatsSchema>;
431
433
  //#region ../../src/api/files/services/FileService.d.ts
432
434
  declare class FileService {
433
435
  protected readonly alepha: Alepha;
434
- protected readonly log: _$alepha_logger0.Logger;
436
+ protected readonly log: import("alepha/logger").Logger;
435
437
  protected readonly dateTimeProvider: DateTimeProvider;
438
+ protected readonly repositoryProvider: RepositoryProvider;
439
+ protected readonly fileSystem: FileSystemProvider;
436
440
  protected readonly defaultBucket: BucketPrimitive;
437
- readonly fileRepository: _$alepha_orm0.Repository<_$typebox.TObject<{
438
- id: _$alepha_orm0.PgAttr<_$alepha_orm0.PgAttr<_$typebox.TString, typeof _$alepha_orm0.PG_PRIMARY_KEY>, typeof _$alepha_orm0.PG_DEFAULT>;
439
- version: _$alepha_orm0.PgAttr<_$alepha_orm0.PgAttr<_$typebox.TInteger, typeof _$alepha_orm0.PG_VERSION>, typeof _$alepha_orm0.PG_DEFAULT>;
440
- createdAt: _$alepha_orm0.PgAttr<_$alepha_orm0.PgAttr<_$typebox.TString, typeof _$alepha_orm0.PG_CREATED_AT>, typeof _$alepha_orm0.PG_DEFAULT>;
441
- updatedAt: _$alepha_orm0.PgAttr<_$alepha_orm0.PgAttr<_$typebox.TString, typeof _$alepha_orm0.PG_UPDATED_AT>, typeof _$alepha_orm0.PG_DEFAULT>;
442
- organizationId: _$alepha_orm0.PgAttr<_$typebox.TString, typeof _$alepha_orm0.PG_ORGANIZATION>;
443
- blobId: _$typebox.TString;
444
- creator: _$typebox.TOptional<_$typebox.TString>;
445
- creatorRealm: _$typebox.TOptional<_$typebox.TString>;
446
- creatorName: _$typebox.TOptional<_$typebox.TString>;
447
- bucket: _$typebox.TString;
448
- expirationDate: _$typebox.TOptional<_$typebox.TString>;
449
- name: _$typebox.TString;
450
- originalName: _$typebox.TOptional<_$typebox.TString>;
451
- size: _$typebox.TNumber;
452
- mimeType: _$typebox.TString;
453
- tags: _$typebox.TOptional<_$typebox.TArray<_$typebox.TString>>;
454
- checksum: _$typebox.TOptional<_$typebox.TString>;
441
+ readonly fileRepository: import("alepha/orm").Repository<import("typebox").TObject<{
442
+ id: import("alepha/orm").PgAttr<import("alepha/orm").PgAttr<import("typebox").TString, typeof import("alepha/orm").PG_PRIMARY_KEY>, typeof import("alepha/orm").PG_DEFAULT>;
443
+ version: import("alepha/orm").PgAttr<import("alepha/orm").PgAttr<import("typebox").TInteger, typeof import("alepha/orm").PG_VERSION>, typeof import("alepha/orm").PG_DEFAULT>;
444
+ createdAt: import("alepha/orm").PgAttr<import("alepha/orm").PgAttr<import("typebox").TString, typeof import("alepha/orm").PG_CREATED_AT>, typeof import("alepha/orm").PG_DEFAULT>;
445
+ updatedAt: import("alepha/orm").PgAttr<import("alepha/orm").PgAttr<import("typebox").TString, typeof import("alepha/orm").PG_UPDATED_AT>, typeof import("alepha/orm").PG_DEFAULT>;
446
+ organizationId: import("alepha/orm").PgAttr<import("typebox").TString, typeof import("alepha/orm").PG_ORGANIZATION>;
447
+ blobId: import("typebox").TString;
448
+ creator: import("typebox").TOptional<import("typebox").TString>;
449
+ creatorRealm: import("typebox").TOptional<import("typebox").TString>;
450
+ creatorName: import("typebox").TOptional<import("typebox").TString>;
451
+ bucket: import("typebox").TString;
452
+ expirationDate: import("typebox").TOptional<import("typebox").TString>;
453
+ name: import("typebox").TString;
454
+ originalName: import("typebox").TOptional<import("typebox").TString>;
455
+ size: import("typebox").TNumber;
456
+ mimeType: import("typebox").TString;
457
+ tags: import("typebox").TOptional<import("typebox").TArray<import("typebox").TString>>;
458
+ checksum: import("typebox").TOptional<import("typebox").TString>;
455
459
  }>>;
456
- protected onUploadFile: _$alepha.HookPrimitive<"bucket:file:uploaded">;
457
- protected onDeleteBucketFile: _$alepha.HookPrimitive<"bucket:file:deleted">;
460
+ /**
461
+ * Best-effort left join embedding the uploader on every file row, so the
462
+ * admin UI can render `user.email` instead of the bare `creator` UUID.
463
+ * Joins `files.creator` → `users.id`. Only applied when the `users` table is
464
+ * actually registered in the app (see `findFiles`) — the files module stays
465
+ * usable standalone, without `alepha/api/users`. Targets the default `users`
466
+ * table, so creators in non-default realms come back unmatched (`user`
467
+ * undefined), which the UI handles by falling back to `creatorName`.
468
+ *
469
+ * The `users` entity is resolved from the repository registry at runtime
470
+ * rather than imported: the users module already depends on the files module
471
+ * (avatars), so a compile-time import here would form a circular dependency.
472
+ */
473
+ protected resolveCreatorJoin(): {
474
+ user: {
475
+ join: import("alepha/orm").EntityPrimitive<import("typebox").TObject<import("typebox").TProperties>>;
476
+ on: ["creator", {
477
+ name: string;
478
+ }];
479
+ };
480
+ } | undefined;
481
+ protected onUploadFile: import("alepha").HookPrimitive<"bucket:file:uploaded">;
482
+ protected onDeleteBucketFile: import("alepha").HookPrimitive<"bucket:file:deleted">;
458
483
  /**
459
484
  * Calculates SHA-256 checksum of a file.
460
485
  *
486
+ * Reads the whole file into memory. Callers that already hold the bytes
487
+ * should use {@link hashBuffer} instead to avoid re-reading — re-reading a
488
+ * one-shot stream either yields the wrong hash or drains a stream another
489
+ * step still needs.
490
+ *
461
491
  * @param file - The file to calculate checksum for
462
492
  * @returns Hexadecimal string representation of the SHA-256 hash
463
493
  * @protected
464
494
  */
465
495
  protected calculateChecksum(file: FileLike): Promise<string>;
496
+ /**
497
+ * Calculates the SHA-256 checksum of an already-read body.
498
+ *
499
+ * @param data - The file bytes
500
+ * @returns Hexadecimal string representation of the SHA-256 hash
501
+ * @protected
502
+ */
503
+ protected hashBuffer(data: ArrayBuffer): string;
466
504
  /**
467
505
  * Gets a bucket primitive by name.
468
506
  *
@@ -513,6 +551,25 @@ declare class FileService {
513
551
  user?: UserAccountToken;
514
552
  tags?: string[];
515
553
  }): Promise<FileEntity>;
554
+ /**
555
+ * Persists the metadata row for an already-uploaded blob, deleting the
556
+ * blob if the insert fails. Uploads are not atomic: the blob is written to
557
+ * storage first (the row needs the returned `blobId`), so a failed insert
558
+ * would otherwise leak the blob — an orphaned blob with no DB row. This
559
+ * compensates by removing the blob, favouring the recoverable failure
560
+ * (a missing blob) over the worse one (a row pointing at nothing).
561
+ *
562
+ * Best-effort: cleanup runs with `skipHook` so it neither re-emits
563
+ * `bucket:file:deleted` nor touches the (non-existent) DB row, and a failed
564
+ * cleanup is logged rather than thrown. The original write error is always
565
+ * rethrown so callers still see the real failure.
566
+ *
567
+ * @param bucket - The bucket the blob was uploaded to
568
+ * @param blobId - The id returned by `bucket.upload`
569
+ * @param insert - Thunk performing the metadata insert
570
+ * @returns The created file entity
571
+ */
572
+ protected persistBlobMetadata(bucket: BucketPrimitive, blobId: string, insert: () => Promise<FileEntity>): Promise<FileEntity>;
516
573
  /**
517
574
  * Streams a file from storage by its database ID, or directly from an
518
575
  * already-loaded `FileEntity` to avoid a duplicate DB roundtrip when the
@@ -569,6 +626,12 @@ declare class FileService {
569
626
  /**
570
627
  * Gets storage statistics including total size, file count, and breakdowns by bucket and MIME type.
571
628
  *
629
+ * Aggregated in SQL (`SUM`/`COUNT` + `GROUP BY`) rather than by loading
630
+ * every row into memory — the table can hold millions of files, and this
631
+ * endpoint must stay O(groups), not O(rows). Totals are derived from the
632
+ * per-bucket groups (every row has exactly one bucket), so no extra query
633
+ * is needed.
634
+ *
572
635
  * @returns Storage statistics with aggregated data
573
636
  */
574
637
  getStorageStats(): Promise<StorageStats>;
@@ -596,18 +659,18 @@ declare class AdminFileStatsController {
596
659
  * Returns aggregated data including total size, file count,
597
660
  * and breakdowns by bucket and MIME type.
598
661
  */
599
- readonly getFileStats: _$alepha_server0.ActionPrimitiveFn<{
600
- response: _$typebox.TObject<{
601
- totalSize: _$typebox.TNumber;
602
- totalFiles: _$typebox.TNumber;
603
- byBucket: _$typebox.TArray<_$typebox.TObject<{
604
- bucket: _$typebox.TString;
605
- totalSize: _$typebox.TNumber;
606
- fileCount: _$typebox.TNumber;
662
+ readonly getFileStats: import("alepha/server").ActionPrimitiveFn<{
663
+ response: import("typebox").TObject<{
664
+ totalSize: import("typebox").TNumber;
665
+ totalFiles: import("typebox").TNumber;
666
+ byBucket: import("typebox").TArray<import("typebox").TObject<{
667
+ bucket: import("typebox").TString;
668
+ totalSize: import("typebox").TNumber;
669
+ fileCount: import("typebox").TNumber;
607
670
  }>>;
608
- byMimeType: _$typebox.TArray<_$typebox.TObject<{
609
- mimeType: _$typebox.TString;
610
- fileCount: _$typebox.TNumber;
671
+ byMimeType: import("typebox").TArray<import("typebox").TObject<{
672
+ mimeType: import("typebox").TString;
673
+ fileCount: import("typebox").TNumber;
611
674
  }>>;
612
675
  }>;
613
676
  }>;
@@ -679,63 +742,70 @@ declare class FileController {
679
742
  * GET /files - Lists files with optional filtering and pagination.
680
743
  * Supports filtering by bucket and tags.
681
744
  */
682
- readonly findFiles: _$alepha_server0.ActionPrimitiveFn<{
683
- query: _$typebox.TObject<{
684
- page: _$typebox.TOptional<_$typebox.TInteger>;
685
- size: _$typebox.TOptional<_$typebox.TInteger>;
686
- sort: _$typebox.TOptional<_$typebox.TString>;
687
- bucket: _$typebox.TOptional<_$typebox.TString>;
688
- tags: _$typebox.TOptional<_$typebox.TArray<_$typebox.TString>>;
689
- name: _$typebox.TOptional<_$typebox.TString>;
690
- mimeType: _$typebox.TOptional<_$typebox.TString>;
691
- creator: _$typebox.TOptional<_$typebox.TString>;
692
- createdAfter: _$typebox.TOptional<_$typebox.TString>;
693
- createdBefore: _$typebox.TOptional<_$typebox.TString>;
745
+ readonly findFiles: import("alepha/server").ActionPrimitiveFn<{
746
+ query: import("typebox").TObject<{
747
+ page: import("typebox").TOptional<import("typebox").TInteger>;
748
+ size: import("typebox").TOptional<import("typebox").TInteger>;
749
+ sort: import("typebox").TOptional<import("typebox").TString>;
750
+ bucket: import("typebox").TOptional<import("typebox").TString>;
751
+ tags: import("typebox").TOptional<import("typebox").TArray<import("typebox").TString>>;
752
+ name: import("typebox").TOptional<import("typebox").TString>;
753
+ mimeType: import("typebox").TOptional<import("typebox").TString>;
754
+ creator: import("typebox").TOptional<import("typebox").TString>;
755
+ createdAfter: import("typebox").TOptional<import("typebox").TString>;
756
+ createdBefore: import("typebox").TOptional<import("typebox").TString>;
694
757
  }>;
695
- response: _$alepha.TPage<_$typebox.TObject<{
696
- id: PgAttr<PgAttr<_$typebox.TString, typeof PG_PRIMARY_KEY>, typeof PG_DEFAULT>;
697
- version: PgAttr<PgAttr<_$typebox.TInteger, typeof PG_VERSION>, typeof PG_DEFAULT>;
698
- createdAt: PgAttr<PgAttr<_$typebox.TString, typeof PG_CREATED_AT>, typeof PG_DEFAULT>;
699
- updatedAt: PgAttr<PgAttr<_$typebox.TString, typeof PG_UPDATED_AT>, typeof PG_DEFAULT>;
700
- organizationId: PgAttr<_$typebox.TString, typeof PG_ORGANIZATION>;
701
- blobId: _$typebox.TString;
702
- creator: _$typebox.TOptional<_$typebox.TString>;
703
- creatorRealm: _$typebox.TOptional<_$typebox.TString>;
704
- creatorName: _$typebox.TOptional<_$typebox.TString>;
705
- bucket: _$typebox.TString;
706
- expirationDate: _$typebox.TOptional<_$typebox.TString>;
707
- name: _$typebox.TString;
708
- originalName: _$typebox.TOptional<_$typebox.TString>;
709
- size: _$typebox.TNumber;
710
- mimeType: _$typebox.TString;
711
- tags: _$typebox.TOptional<_$typebox.TArray<_$typebox.TString>>;
712
- checksum: _$typebox.TOptional<_$typebox.TString>;
758
+ response: import("alepha").TPage<import("typebox").TObject<{
759
+ id: PgAttr<PgAttr<import("typebox").TString, typeof PG_PRIMARY_KEY>, typeof PG_DEFAULT>;
760
+ version: PgAttr<PgAttr<import("typebox").TInteger, typeof PG_VERSION>, typeof PG_DEFAULT>;
761
+ createdAt: PgAttr<PgAttr<import("typebox").TString, typeof PG_CREATED_AT>, typeof PG_DEFAULT>;
762
+ updatedAt: PgAttr<PgAttr<import("typebox").TString, typeof PG_UPDATED_AT>, typeof PG_DEFAULT>;
763
+ organizationId: PgAttr<import("typebox").TString, typeof PG_ORGANIZATION>;
764
+ blobId: import("typebox").TString;
765
+ creator: import("typebox").TOptional<import("typebox").TString>;
766
+ creatorRealm: import("typebox").TOptional<import("typebox").TString>;
767
+ creatorName: import("typebox").TOptional<import("typebox").TString>;
768
+ bucket: import("typebox").TString;
769
+ expirationDate: import("typebox").TOptional<import("typebox").TString>;
770
+ name: import("typebox").TString;
771
+ originalName: import("typebox").TOptional<import("typebox").TString>;
772
+ size: import("typebox").TNumber;
773
+ mimeType: import("typebox").TString;
774
+ tags: import("typebox").TOptional<import("typebox").TArray<import("typebox").TString>>;
775
+ checksum: import("typebox").TOptional<import("typebox").TString>;
776
+ user: import("typebox").TOptional<import("typebox").TObject<{
777
+ id: import("typebox").TString;
778
+ email: import("typebox").TOptional<import("typebox").TString>;
779
+ username: import("typebox").TOptional<import("typebox").TString>;
780
+ firstName: import("typebox").TOptional<import("typebox").TString>;
781
+ lastName: import("typebox").TOptional<import("typebox").TString>;
782
+ }>>;
713
783
  }>>;
714
784
  }>;
715
785
  /**
716
786
  * DELETE /files/:id - Deletes a file from both storage and database.
717
787
  * Removes the file from the bucket and cleans up the database record.
718
788
  */
719
- readonly deleteFile: _$alepha_server0.ActionPrimitiveFn<{
720
- params: _$typebox.TObject<{
721
- id: _$typebox.TString;
789
+ readonly deleteFile: import("alepha/server").ActionPrimitiveFn<{
790
+ params: import("typebox").TObject<{
791
+ id: import("typebox").TString;
722
792
  }>;
723
- response: _$typebox.TObject<{
724
- ok: _$typebox.TBoolean;
725
- id: _$typebox.TOptional<_$typebox.TUnion<[_$typebox.TString, _$typebox.TInteger]>>;
726
- count: _$typebox.TOptional<_$typebox.TNumber>;
793
+ response: import("typebox").TObject<{
794
+ ok: import("typebox").TBoolean;
795
+ id: import("typebox").TOptional<import("typebox").TUnion<[import("typebox").TString, import("typebox").TInteger]>>;
796
+ count: import("typebox").TOptional<import("typebox").TNumber>;
727
797
  }>;
728
798
  }>;
729
799
  /**
730
800
  * POST /files/delete - Delete many files in one request, batching the
731
801
  * underlying bucket calls per bucket (R2/S3 batch where supported).
732
802
  */
733
- readonly deleteFiles: _$alepha_server0.ActionPrimitiveFn<{
734
- body: _$typebox.TObject<{
735
- ids: _$typebox.TArray<_$typebox.TString>;
803
+ readonly deleteFiles: import("alepha/server").ActionPrimitiveFn<{
804
+ body: import("typebox").TObject<{
805
+ ids: import("typebox").TArray<import("typebox").TString>;
736
806
  }>;
737
- response: _$typebox.TObject<{
738
- deleted: _$typebox.TArray<_$typebox.TString>;
807
+ response: import("typebox").TObject<{
808
+ deleted: import("typebox").TArray<import("typebox").TString>;
739
809
  }>;
740
810
  }>;
741
811
  /**
@@ -743,65 +813,79 @@ declare class FileController {
743
813
  * Creates a database record with metadata and calculates checksum.
744
814
  * Optionally specify bucket and expiration date.
745
815
  */
746
- readonly uploadFile: _$alepha_server0.ActionPrimitiveFn<{
747
- body: _$typebox.TObject<{
748
- file: _$alepha.TFile;
816
+ readonly uploadFile: import("alepha/server").ActionPrimitiveFn<{
817
+ body: import("typebox").TObject<{
818
+ file: import("alepha").TFile;
749
819
  }>;
750
- query: _$typebox.TObject<{
751
- expirationDate: _$typebox.TOptional<_$typebox.TString>;
752
- bucket: _$typebox.TOptional<_$typebox.TString>;
820
+ query: import("typebox").TObject<{
821
+ expirationDate: import("typebox").TOptional<import("typebox").TString>;
822
+ bucket: import("typebox").TOptional<import("typebox").TString>;
753
823
  }>;
754
- response: _$typebox.TObject<{
755
- id: PgAttr<PgAttr<_$typebox.TString, typeof PG_PRIMARY_KEY>, typeof PG_DEFAULT>;
756
- version: PgAttr<PgAttr<_$typebox.TInteger, typeof PG_VERSION>, typeof PG_DEFAULT>;
757
- createdAt: PgAttr<PgAttr<_$typebox.TString, typeof PG_CREATED_AT>, typeof PG_DEFAULT>;
758
- updatedAt: PgAttr<PgAttr<_$typebox.TString, typeof PG_UPDATED_AT>, typeof PG_DEFAULT>;
759
- organizationId: PgAttr<_$typebox.TString, typeof PG_ORGANIZATION>;
760
- blobId: _$typebox.TString;
761
- creator: _$typebox.TOptional<_$typebox.TString>;
762
- creatorRealm: _$typebox.TOptional<_$typebox.TString>;
763
- creatorName: _$typebox.TOptional<_$typebox.TString>;
764
- bucket: _$typebox.TString;
765
- expirationDate: _$typebox.TOptional<_$typebox.TString>;
766
- name: _$typebox.TString;
767
- originalName: _$typebox.TOptional<_$typebox.TString>;
768
- size: _$typebox.TNumber;
769
- mimeType: _$typebox.TString;
770
- tags: _$typebox.TOptional<_$typebox.TArray<_$typebox.TString>>;
771
- checksum: _$typebox.TOptional<_$typebox.TString>;
824
+ response: import("typebox").TObject<{
825
+ id: PgAttr<PgAttr<import("typebox").TString, typeof PG_PRIMARY_KEY>, typeof PG_DEFAULT>;
826
+ version: PgAttr<PgAttr<import("typebox").TInteger, typeof PG_VERSION>, typeof PG_DEFAULT>;
827
+ createdAt: PgAttr<PgAttr<import("typebox").TString, typeof PG_CREATED_AT>, typeof PG_DEFAULT>;
828
+ updatedAt: PgAttr<PgAttr<import("typebox").TString, typeof PG_UPDATED_AT>, typeof PG_DEFAULT>;
829
+ organizationId: PgAttr<import("typebox").TString, typeof PG_ORGANIZATION>;
830
+ blobId: import("typebox").TString;
831
+ creator: import("typebox").TOptional<import("typebox").TString>;
832
+ creatorRealm: import("typebox").TOptional<import("typebox").TString>;
833
+ creatorName: import("typebox").TOptional<import("typebox").TString>;
834
+ bucket: import("typebox").TString;
835
+ expirationDate: import("typebox").TOptional<import("typebox").TString>;
836
+ name: import("typebox").TString;
837
+ originalName: import("typebox").TOptional<import("typebox").TString>;
838
+ size: import("typebox").TNumber;
839
+ mimeType: import("typebox").TString;
840
+ tags: import("typebox").TOptional<import("typebox").TArray<import("typebox").TString>>;
841
+ checksum: import("typebox").TOptional<import("typebox").TString>;
842
+ user: import("typebox").TOptional<import("typebox").TObject<{
843
+ id: import("typebox").TString;
844
+ email: import("typebox").TOptional<import("typebox").TString>;
845
+ username: import("typebox").TOptional<import("typebox").TString>;
846
+ firstName: import("typebox").TOptional<import("typebox").TString>;
847
+ lastName: import("typebox").TOptional<import("typebox").TString>;
848
+ }>>;
772
849
  }>;
773
850
  }>;
774
851
  /**
775
852
  * PATCH /files/:id - Updates file metadata.
776
853
  * Allows updating name, tags, and expiration date without modifying file content.
777
854
  */
778
- readonly updateFile: _$alepha_server0.ActionPrimitiveFn<{
779
- params: _$typebox.TObject<{
780
- id: _$typebox.TString;
855
+ readonly updateFile: import("alepha/server").ActionPrimitiveFn<{
856
+ params: import("typebox").TObject<{
857
+ id: import("typebox").TString;
781
858
  }>;
782
- body: _$typebox.TObject<{
783
- name: _$typebox.TOptional<_$typebox.TString>;
784
- tags: _$typebox.TOptional<_$typebox.TArray<_$typebox.TString>>;
785
- expirationDate: _$typebox.TOptional<_$typebox.TString>;
859
+ body: import("typebox").TObject<{
860
+ name: import("typebox").TOptional<import("typebox").TString>;
861
+ tags: import("typebox").TOptional<import("typebox").TArray<import("typebox").TString>>;
862
+ expirationDate: import("typebox").TOptional<import("typebox").TString>;
786
863
  }>;
787
- response: _$typebox.TObject<{
788
- id: PgAttr<PgAttr<_$typebox.TString, typeof PG_PRIMARY_KEY>, typeof PG_DEFAULT>;
789
- version: PgAttr<PgAttr<_$typebox.TInteger, typeof PG_VERSION>, typeof PG_DEFAULT>;
790
- createdAt: PgAttr<PgAttr<_$typebox.TString, typeof PG_CREATED_AT>, typeof PG_DEFAULT>;
791
- updatedAt: PgAttr<PgAttr<_$typebox.TString, typeof PG_UPDATED_AT>, typeof PG_DEFAULT>;
792
- organizationId: PgAttr<_$typebox.TString, typeof PG_ORGANIZATION>;
793
- blobId: _$typebox.TString;
794
- creator: _$typebox.TOptional<_$typebox.TString>;
795
- creatorRealm: _$typebox.TOptional<_$typebox.TString>;
796
- creatorName: _$typebox.TOptional<_$typebox.TString>;
797
- bucket: _$typebox.TString;
798
- expirationDate: _$typebox.TOptional<_$typebox.TString>;
799
- name: _$typebox.TString;
800
- originalName: _$typebox.TOptional<_$typebox.TString>;
801
- size: _$typebox.TNumber;
802
- mimeType: _$typebox.TString;
803
- tags: _$typebox.TOptional<_$typebox.TArray<_$typebox.TString>>;
804
- checksum: _$typebox.TOptional<_$typebox.TString>;
864
+ response: import("typebox").TObject<{
865
+ id: PgAttr<PgAttr<import("typebox").TString, typeof PG_PRIMARY_KEY>, typeof PG_DEFAULT>;
866
+ version: PgAttr<PgAttr<import("typebox").TInteger, typeof PG_VERSION>, typeof PG_DEFAULT>;
867
+ createdAt: PgAttr<PgAttr<import("typebox").TString, typeof PG_CREATED_AT>, typeof PG_DEFAULT>;
868
+ updatedAt: PgAttr<PgAttr<import("typebox").TString, typeof PG_UPDATED_AT>, typeof PG_DEFAULT>;
869
+ organizationId: PgAttr<import("typebox").TString, typeof PG_ORGANIZATION>;
870
+ blobId: import("typebox").TString;
871
+ creator: import("typebox").TOptional<import("typebox").TString>;
872
+ creatorRealm: import("typebox").TOptional<import("typebox").TString>;
873
+ creatorName: import("typebox").TOptional<import("typebox").TString>;
874
+ bucket: import("typebox").TString;
875
+ expirationDate: import("typebox").TOptional<import("typebox").TString>;
876
+ name: import("typebox").TString;
877
+ originalName: import("typebox").TOptional<import("typebox").TString>;
878
+ size: import("typebox").TNumber;
879
+ mimeType: import("typebox").TString;
880
+ tags: import("typebox").TOptional<import("typebox").TArray<import("typebox").TString>>;
881
+ checksum: import("typebox").TOptional<import("typebox").TString>;
882
+ user: import("typebox").TOptional<import("typebox").TObject<{
883
+ id: import("typebox").TString;
884
+ email: import("typebox").TOptional<import("typebox").TString>;
885
+ username: import("typebox").TOptional<import("typebox").TString>;
886
+ firstName: import("typebox").TOptional<import("typebox").TString>;
887
+ lastName: import("typebox").TOptional<import("typebox").TString>;
888
+ }>>;
805
889
  }>;
806
890
  }>;
807
891
  /**
@@ -815,11 +899,11 @@ declare class FileController {
815
899
  * Cache-Control is `private` because the per-user authorization decision
816
900
  * cannot be cached by shared proxies/CDNs. Client-side ETag still works.
817
901
  */
818
- readonly streamFile: _$alepha_server0.ActionPrimitiveFn<{
819
- params: _$typebox.TObject<{
820
- id: _$typebox.TString;
902
+ readonly streamFile: import("alepha/server").ActionPrimitiveFn<{
903
+ params: import("typebox").TObject<{
904
+ id: import("typebox").TString;
821
905
  }>;
822
- response: _$alepha.TFile;
906
+ response: import("alepha").TFile;
823
907
  }>;
824
908
  /**
825
909
  * GET /public/files/:id - Anonymous, edge-cacheable download.
@@ -835,20 +919,41 @@ declare class FileController {
835
919
  * makes this safe: edge cache is URL-keyed, so public and private files
836
920
  * live in separate cache lanes.
837
921
  */
838
- readonly streamPublicFile: _$alepha_server0.ActionPrimitiveFn<{
839
- params: _$typebox.TObject<{
840
- id: _$typebox.TString;
922
+ readonly streamPublicFile: import("alepha/server").ActionPrimitiveFn<{
923
+ params: import("typebox").TObject<{
924
+ id: import("typebox").TString;
841
925
  }>;
842
- response: _$alepha.TFile;
926
+ response: import("alepha").TFile;
843
927
  }>;
844
928
  }
845
929
  //#endregion
846
930
  //#region ../../src/api/files/jobs/FileJobs.d.ts
847
931
  declare class FileJobs {
848
932
  protected readonly fileService: FileService;
849
- readonly purgeFiles: _$alepha_scheduler0.SchedulerPrimitive;
933
+ readonly purgeFiles: import("alepha/scheduler").SchedulerPrimitive;
850
934
  }
851
935
  //#endregion
936
+ //#region ../../src/api/files/schemas/fileCreatorSummarySchema.d.ts
937
+ /**
938
+ * Slim view of a file's uploader, embedded by the admin listing via a
939
+ * best-effort left join (`files.creator` → `users.id`) so the UI can render
940
+ * a human-readable identifier instead of a bare UUID.
941
+ *
942
+ * Optional end-to-end: the join only runs when the `users` entity is
943
+ * registered in the running app (see `FileService.findFiles`), and even then
944
+ * a file whose creator was deleted — or who lives in a non-default realm —
945
+ * comes back with `user` undefined. Callers must fall back to `creatorName`
946
+ * or the raw `creator` id.
947
+ */
948
+ declare const fileCreatorSummarySchema: import("typebox").TObject<{
949
+ id: import("typebox").TString;
950
+ email: import("typebox").TOptional<import("typebox").TString>;
951
+ username: import("typebox").TOptional<import("typebox").TString>;
952
+ firstName: import("typebox").TOptional<import("typebox").TString>;
953
+ lastName: import("typebox").TOptional<import("typebox").TString>;
954
+ }>;
955
+ type FileCreatorSummary = Static<typeof fileCreatorSummarySchema>;
956
+ //#endregion
852
957
  //#region ../../src/api/files/index.d.ts
853
958
  declare module "alepha/bucket" {
854
959
  interface BucketFileOptions {
@@ -883,7 +988,7 @@ declare module "alepha/bucket" {
883
988
  *
884
989
  * @module alepha.api.files
885
990
  */
886
- declare const AlephaApiFiles: _$alepha.Service<_$alepha.Module>;
991
+ declare const AlephaApiFiles: import("alepha").Service<import("alepha").Module>;
887
992
  //#endregion
888
- export { AdminFileStatsController, AlephaApiFiles, BucketStats, FileAccessProvider, FileController, FileEntity, FileJobs, FileService, MimeTypeStats, StorageStats, bucketStatsSchema, files, mimeTypeStatsSchema, storageStatsSchema };
993
+ export { AdminFileStatsController, AlephaApiFiles, BucketStats, FileAccessProvider, FileController, FileCreatorSummary, FileEntity, FileJobs, FileQuery, FileResource, FileService, MimeTypeStats, StorageStats, bucketStatsSchema, fileCreatorSummarySchema, fileQuerySchema, fileResourceSchema, files, mimeTypeStatsSchema, storageStatsSchema };
889
994
  //# sourceMappingURL=index.d.ts.map