@tulip-systems/core 0.7.0 → 0.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (361) hide show
  1. package/dist/auth/server.d.mts +3 -3
  2. package/dist/auth/server.mjs +3 -3
  3. package/dist/components/editor/components/editor.client.d.mts +4 -3
  4. package/dist/components/editor/components/editor.client.d.mts.map +1 -1
  5. package/dist/components/editor/components/editor.client.mjs +5 -2
  6. package/dist/components/editor/components/editor.client.mjs.map +1 -1
  7. package/dist/components/editor/extensions/file-handler/extension.d.mts +4 -4
  8. package/dist/components/editor/extensions/file-handler/extension.d.mts.map +1 -1
  9. package/dist/components/editor/extensions/file-handler/extension.mjs.map +1 -1
  10. package/dist/components/editor/extensions/file-handler/strategy.d.mts +4 -6
  11. package/dist/components/editor/extensions/file-handler/strategy.d.mts.map +1 -1
  12. package/dist/components/editor/extensions/file-handler/strategy.mjs +11 -11
  13. package/dist/components/editor/extensions/file-handler/strategy.mjs.map +1 -1
  14. package/dist/components/editor/extensions/file-handler/utils.mjs +1 -1
  15. package/dist/components/editor/extensions/file-handler/utils.mjs.map +1 -1
  16. package/dist/components/editor/extensions/image/extension.mjs +9 -9
  17. package/dist/components/editor/extensions/image/extension.mjs.map +1 -1
  18. package/dist/components/editor/lib/constants.d.mts +1 -1
  19. package/dist/components/editor/lib/constants.mjs +1 -1
  20. package/dist/components/editor/lib/extensions.d.mts +1 -1
  21. package/dist/components/editor/lib/helpers.d.mts +11 -3
  22. package/dist/components/editor/lib/helpers.d.mts.map +1 -1
  23. package/dist/components/editor/lib/helpers.mjs +27 -13
  24. package/dist/components/editor/lib/helpers.mjs.map +1 -1
  25. package/dist/components/ui/combobox-dropdown.client.mjs +1 -0
  26. package/dist/components/ui/combobox-dropdown.client.mjs.map +1 -1
  27. package/dist/components/ui/combobox.client.mjs +1 -1
  28. package/dist/components/ui/combobox.client.mjs.map +1 -1
  29. package/dist/components.d.mts +2 -2
  30. package/dist/components.mjs +2 -2
  31. package/dist/config/server.d.mts +1 -3
  32. package/dist/config/server.mjs +1 -4
  33. package/dist/config.d.mts +2 -2
  34. package/dist/config.mjs +1 -1
  35. package/dist/data-tables/client.d.mts +2 -1
  36. package/dist/data-tables/client.mjs +2 -1
  37. package/dist/data-tables.d.mts +1 -1
  38. package/dist/database/client.d.mts +1 -0
  39. package/dist/database/client.mjs +1 -0
  40. package/dist/database/server.d.mts +2 -0
  41. package/dist/database/server.mjs +3 -0
  42. package/dist/database.d.mts +3 -0
  43. package/dist/database.mjs +3 -0
  44. package/dist/emails/client.d.mts +1 -0
  45. package/dist/emails/client.mjs +1 -0
  46. package/dist/emails/server.d.mts +2 -0
  47. package/dist/emails/server.mjs +3 -0
  48. package/dist/emails.d.mts +1 -0
  49. package/dist/emails.mjs +1 -0
  50. package/dist/lib/utils/markdown.d.mts +10 -0
  51. package/dist/lib/utils/markdown.d.mts.map +1 -0
  52. package/dist/lib/utils/markdown.mjs +15 -0
  53. package/dist/lib/utils/markdown.mjs.map +1 -0
  54. package/dist/lib/utils/url.mjs +2 -1
  55. package/dist/lib/utils/url.mjs.map +1 -1
  56. package/dist/lib/utils/user-agent.mjs +15 -0
  57. package/dist/lib/utils/user-agent.mjs.map +1 -1
  58. package/dist/lib.d.mts +2 -2
  59. package/dist/lib.mjs +2 -2
  60. package/dist/modules/auth/components/create-first-user-guard.server.d.mts +16 -0
  61. package/dist/modules/auth/components/create-first-user-guard.server.d.mts.map +1 -0
  62. package/dist/modules/auth/components/create-first-user-guard.server.mjs +16 -0
  63. package/dist/modules/auth/components/create-first-user-guard.server.mjs.map +1 -0
  64. package/dist/modules/auth/components/guard.server.d.mts +2 -2
  65. package/dist/modules/auth/components/guard.server.mjs +1 -1
  66. package/dist/modules/auth/components/guard.server.mjs.map +1 -1
  67. package/dist/modules/auth/db/schema.d.mts +1 -1
  68. package/dist/modules/auth/db/schema.mjs +2 -2
  69. package/dist/modules/auth/handler/create-client.client.d.mts +4838 -229
  70. package/dist/modules/auth/handler/create-client.client.d.mts.map +1 -1
  71. package/dist/modules/auth/handler/create-client.client.mjs.map +1 -1
  72. package/dist/modules/auth/handler/proxy.server.mjs +2 -2
  73. package/dist/modules/auth/handler/proxy.server.mjs.map +1 -1
  74. package/dist/modules/auth/handler/route.server.d.mts +2 -2
  75. package/dist/modules/auth/handler/route.server.d.mts.map +1 -1
  76. package/dist/modules/auth/handler/route.server.mjs.map +1 -1
  77. package/dist/modules/auth/handler/{init.d.mts → service.server.d.mts} +322 -90
  78. package/dist/modules/auth/handler/service.server.d.mts.map +1 -0
  79. package/dist/modules/auth/handler/{init.mjs → service.server.mjs} +19 -8
  80. package/dist/modules/auth/handler/service.server.mjs.map +1 -0
  81. package/dist/modules/auth/hooks/use-session.d.mts +9 -4
  82. package/dist/modules/auth/hooks/use-session.d.mts.map +1 -1
  83. package/dist/modules/auth/lib/helpers.server.d.mts +1 -1
  84. package/dist/modules/auth/lib/permissions.d.mts +1 -1
  85. package/dist/modules/auth/lib/validators.mjs +1 -1
  86. package/dist/modules/config/lib/context.d.mts +9 -10
  87. package/dist/modules/config/lib/context.d.mts.map +1 -1
  88. package/dist/modules/config/lib/context.mjs.map +1 -1
  89. package/dist/modules/data-tables/lib/converters/search.d.mts +1 -1
  90. package/dist/modules/data-tables/lib/converters/sorting.d.mts +1 -1
  91. package/dist/modules/data-tables/server/get-data.server.d.mts +3 -3
  92. package/dist/modules/data-tables/server/get-data.server.mjs +1 -1
  93. package/dist/modules/data-tables/server/get-data.server.mjs.map +1 -1
  94. package/dist/modules/data-tables/strategies/infinite/strategy.d.mts +1 -1
  95. package/dist/modules/data-tables/strategies/infinite/strategy.mjs +3 -0
  96. package/dist/modules/data-tables/strategies/infinite/strategy.mjs.map +1 -1
  97. package/dist/modules/data-tables/tables/data-table/components/row.mjs +5 -15
  98. package/dist/modules/data-tables/tables/data-table/components/row.mjs.map +1 -1
  99. package/dist/modules/data-tables/tables/inline-table/components/body.mjs +1 -1
  100. package/dist/modules/data-tables/tables/inline-table/components/body.mjs.map +1 -1
  101. package/dist/modules/data-tables/tables/inline-table/components/row.client.mjs +13 -23
  102. package/dist/modules/data-tables/tables/inline-table/components/row.client.mjs.map +1 -1
  103. package/dist/modules/data-tables/tables/inline-table/components/table.d.mts +1 -0
  104. package/dist/modules/data-tables/tables/inline-table/components/table.d.mts.map +1 -1
  105. package/dist/modules/data-tables/tables/inline-table/components/table.mjs +2 -1
  106. package/dist/modules/data-tables/tables/inline-table/components/table.mjs.map +1 -1
  107. package/dist/modules/data-tables/tables/inline-table/hooks/context.client.d.mts +5 -1
  108. package/dist/modules/data-tables/tables/inline-table/hooks/context.client.d.mts.map +1 -1
  109. package/dist/modules/data-tables/tables/inline-table/hooks/context.client.mjs +2 -1
  110. package/dist/modules/data-tables/tables/inline-table/hooks/context.client.mjs.map +1 -1
  111. package/dist/modules/data-tables/tables/inline-table/hooks/use-hotkeys.client.d.mts +30 -0
  112. package/dist/modules/data-tables/tables/inline-table/hooks/use-hotkeys.client.d.mts.map +1 -0
  113. package/dist/modules/data-tables/tables/inline-table/hooks/use-hotkeys.client.mjs +77 -9
  114. package/dist/modules/data-tables/tables/inline-table/hooks/use-hotkeys.client.mjs.map +1 -1
  115. package/dist/modules/{config/db → database/lib}/helpers.d.mts +2 -2
  116. package/dist/modules/database/lib/helpers.d.mts.map +1 -0
  117. package/dist/modules/{config/db → database/lib}/helpers.mjs +1 -1
  118. package/dist/modules/database/lib/helpers.mjs.map +1 -0
  119. package/dist/modules/database/lib/service.server.d.mts +34 -0
  120. package/dist/modules/database/lib/service.server.d.mts.map +1 -0
  121. package/dist/modules/database/lib/service.server.mjs +24 -0
  122. package/dist/modules/database/lib/service.server.mjs.map +1 -0
  123. package/dist/modules/{config/db → database/lib}/types.d.mts +1 -1
  124. package/dist/modules/database/lib/types.d.mts.map +1 -0
  125. package/dist/modules/emails/lib/service.server.d.mts +29 -0
  126. package/dist/modules/emails/lib/service.server.d.mts.map +1 -0
  127. package/dist/modules/emails/lib/service.server.mjs +21 -0
  128. package/dist/modules/emails/lib/service.server.mjs.map +1 -0
  129. package/dist/modules/inline-edit/components/date-input.client.mjs +1 -1
  130. package/dist/modules/inline-edit/components/date-input.client.mjs.map +1 -1
  131. package/dist/modules/inline-edit/components/date-picker.client.mjs +1 -0
  132. package/dist/modules/inline-edit/components/date-picker.client.mjs.map +1 -1
  133. package/dist/modules/inline-edit/components/date-time.client.mjs +1 -0
  134. package/dist/modules/inline-edit/components/date-time.client.mjs.map +1 -1
  135. package/dist/modules/inline-edit/components/editor.client.mjs +1 -0
  136. package/dist/modules/inline-edit/components/editor.client.mjs.map +1 -1
  137. package/dist/modules/inline-edit/components/input-recipient.client.mjs +1 -0
  138. package/dist/modules/inline-edit/components/input-recipient.client.mjs.map +1 -1
  139. package/dist/modules/inline-edit/components/input-toggle.client.mjs +1 -0
  140. package/dist/modules/inline-edit/components/input-toggle.client.mjs.map +1 -1
  141. package/dist/modules/inline-edit/components/input.client.d.mts.map +1 -1
  142. package/dist/modules/inline-edit/components/input.client.mjs +3 -0
  143. package/dist/modules/inline-edit/components/input.client.mjs.map +1 -1
  144. package/dist/modules/inline-edit/components/select.client.d.mts.map +1 -1
  145. package/dist/modules/inline-edit/components/select.client.mjs +1 -0
  146. package/dist/modules/inline-edit/components/select.client.mjs.map +1 -1
  147. package/dist/modules/inline-edit/components/switch.client.mjs +1 -0
  148. package/dist/modules/inline-edit/components/switch.client.mjs.map +1 -1
  149. package/dist/modules/inline-edit/components/toggle.client.mjs +1 -0
  150. package/dist/modules/inline-edit/components/toggle.client.mjs.map +1 -1
  151. package/dist/modules/router/handler/context.server.d.mts +12 -10
  152. package/dist/modules/router/handler/context.server.d.mts.map +1 -1
  153. package/dist/modules/router/handler/init.server.d.mts +13 -11
  154. package/dist/modules/router/handler/init.server.d.mts.map +1 -1
  155. package/dist/modules/router/handler/init.server.mjs +2 -2
  156. package/dist/modules/router/handler/init.server.mjs.map +1 -1
  157. package/dist/modules/router/handler/route.server.d.mts +1 -1
  158. package/dist/modules/storage/components/dropzone.client.d.mts +2 -2
  159. package/dist/modules/storage/components/dropzone.client.d.mts.map +1 -1
  160. package/dist/modules/storage/components/dropzone.client.mjs.map +1 -1
  161. package/dist/modules/storage/components/image-grid.client.d.mts +3 -3
  162. package/dist/modules/storage/components/image-grid.client.d.mts.map +1 -1
  163. package/dist/modules/storage/components/image-grid.client.mjs +20 -22
  164. package/dist/modules/storage/components/image-grid.client.mjs.map +1 -1
  165. package/dist/modules/storage/components/image.client.d.mts +8 -0
  166. package/dist/modules/storage/components/image.client.d.mts.map +1 -0
  167. package/dist/modules/storage/components/image.client.mjs +17 -0
  168. package/dist/modules/storage/components/image.client.mjs.map +1 -0
  169. package/dist/modules/storage/components/upload-button.client.d.mts +12 -0
  170. package/dist/modules/storage/components/upload-button.client.d.mts.map +1 -0
  171. package/dist/modules/storage/components/upload-button.client.mjs +34 -0
  172. package/dist/modules/storage/components/upload-button.client.mjs.map +1 -0
  173. package/dist/modules/storage/components/upload-zone-context.client.d.mts +5 -5
  174. package/dist/modules/storage/components/upload-zone-context.client.d.mts.map +1 -1
  175. package/dist/modules/storage/components/upload-zone-context.client.mjs +2 -2
  176. package/dist/modules/storage/components/upload-zone-context.client.mjs.map +1 -1
  177. package/dist/modules/storage/components/upload-zone.client.d.mts +4 -4
  178. package/dist/modules/storage/components/upload-zone.client.d.mts.map +1 -1
  179. package/dist/modules/storage/components/upload-zone.client.mjs +16 -9
  180. package/dist/modules/storage/components/upload-zone.client.mjs.map +1 -1
  181. package/dist/modules/storage/lib/constants.d.mts +1 -5
  182. package/dist/modules/storage/lib/constants.d.mts.map +1 -1
  183. package/dist/modules/storage/lib/constants.mjs +1 -13
  184. package/dist/modules/storage/lib/constants.mjs.map +1 -1
  185. package/dist/modules/storage/lib/helpers.d.mts +14 -28
  186. package/dist/modules/storage/lib/helpers.d.mts.map +1 -1
  187. package/dist/modules/storage/lib/helpers.mjs +17 -75
  188. package/dist/modules/storage/lib/helpers.mjs.map +1 -1
  189. package/dist/modules/storage/lib/procedures.server.d.mts +1991 -0
  190. package/dist/modules/{auth/handler/init.d.mts.map → storage/lib/procedures.server.d.mts.map} +1 -1
  191. package/dist/modules/storage/lib/procedures.server.mjs +22 -0
  192. package/dist/modules/storage/lib/procedures.server.mjs.map +1 -0
  193. package/dist/modules/storage/lib/router-handlers.server.d.mts +41 -0
  194. package/dist/modules/storage/lib/router-handlers.server.d.mts.map +1 -0
  195. package/dist/modules/storage/lib/router-handlers.server.mjs +124 -0
  196. package/dist/modules/storage/lib/router-handlers.server.mjs.map +1 -0
  197. package/dist/modules/storage/lib/schema.d.mts +68 -958
  198. package/dist/modules/storage/lib/schema.d.mts.map +1 -1
  199. package/dist/modules/storage/lib/schema.mjs +28 -65
  200. package/dist/modules/storage/lib/schema.mjs.map +1 -1
  201. package/dist/modules/storage/lib/service.server.d.mts +2155 -141
  202. package/dist/modules/storage/lib/service.server.d.mts.map +1 -1
  203. package/dist/modules/storage/lib/service.server.mjs +453 -242
  204. package/dist/modules/storage/lib/service.server.mjs.map +1 -1
  205. package/dist/modules/storage/lib/upload.client.d.mts +58 -0
  206. package/dist/modules/storage/lib/upload.client.d.mts.map +1 -0
  207. package/dist/modules/storage/lib/upload.client.mjs +87 -0
  208. package/dist/modules/storage/lib/upload.client.mjs.map +1 -0
  209. package/dist/modules/storage/lib/validators.d.mts +297 -835
  210. package/dist/modules/storage/lib/validators.d.mts.map +1 -1
  211. package/dist/modules/storage/lib/validators.mjs +32 -76
  212. package/dist/modules/storage/lib/validators.mjs.map +1 -1
  213. package/dist/modules/storage/providers/adapters/s3.server.d.mts +19 -0
  214. package/dist/modules/storage/providers/adapters/s3.server.d.mts.map +1 -0
  215. package/dist/modules/storage/providers/adapters/s3.server.mjs +173 -0
  216. package/dist/modules/storage/providers/adapters/s3.server.mjs.map +1 -0
  217. package/dist/modules/storage/providers/lib/constants.d.mts +6 -0
  218. package/dist/modules/storage/providers/lib/constants.d.mts.map +1 -0
  219. package/dist/modules/storage/providers/lib/constants.mjs +6 -0
  220. package/dist/modules/storage/providers/lib/constants.mjs.map +1 -0
  221. package/dist/modules/storage/providers/lib/errors.d.mts +12 -0
  222. package/dist/modules/storage/providers/lib/errors.d.mts.map +1 -0
  223. package/dist/modules/storage/providers/lib/errors.mjs +13 -0
  224. package/dist/modules/storage/providers/lib/errors.mjs.map +1 -0
  225. package/dist/modules/storage/providers/lib/types.d.mts +21 -0
  226. package/dist/modules/storage/providers/lib/types.d.mts.map +1 -0
  227. package/dist/modules/storage/providers/lib/validators.d.mts +112 -0
  228. package/dist/modules/storage/providers/lib/validators.d.mts.map +1 -0
  229. package/dist/modules/storage/providers/lib/validators.mjs +75 -0
  230. package/dist/modules/storage/providers/lib/validators.mjs.map +1 -0
  231. package/dist/router/server.d.mts +1 -1
  232. package/dist/storage/client.d.mts +4 -2
  233. package/dist/storage/client.mjs +4 -2
  234. package/dist/storage/server.d.mts +5 -4
  235. package/dist/storage/server.mjs +5 -4
  236. package/dist/storage.d.mts +9 -6
  237. package/dist/storage.mjs +8 -6
  238. package/package.json +18 -5
  239. package/src/components/editor/components/editor.client.tsx +9 -1
  240. package/src/components/editor/extensions/file-handler/extension.ts +4 -4
  241. package/src/components/editor/extensions/file-handler/strategy.ts +15 -40
  242. package/src/components/editor/extensions/file-handler/utils.ts +1 -1
  243. package/src/components/editor/extensions/image/extension.ts +10 -10
  244. package/src/components/editor/lib/helpers.ts +28 -11
  245. package/src/components/ui/combobox-dropdown.client.tsx +1 -0
  246. package/src/components/ui/combobox.client.tsx +1 -1
  247. package/src/entry.ts +12 -51
  248. package/src/lib/entry.ts +1 -5
  249. package/src/lib/utils/markdown.ts +10 -0
  250. package/src/lib/utils/url.ts +2 -1
  251. package/src/lib/utils/user-agent.ts +15 -0
  252. package/src/modules/auth/components/{guard-first-user.server.tsx → create-first-user-guard.server.tsx} +8 -8
  253. package/src/modules/auth/components/guard.server.tsx +1 -1
  254. package/src/modules/auth/entry.server.ts +4 -5
  255. package/src/modules/auth/handler/create-client.client.ts +2 -2
  256. package/src/modules/auth/handler/proxy.server.ts +1 -1
  257. package/src/modules/auth/handler/route.server.ts +2 -2
  258. package/src/modules/auth/handler/{init.ts → service.server.ts} +30 -9
  259. package/src/modules/config/entry.server.ts +0 -9
  260. package/src/modules/config/entry.ts +2 -2
  261. package/src/modules/config/lib/context.ts +9 -9
  262. package/src/modules/data-tables/entry.client.ts +1 -0
  263. package/src/modules/data-tables/server/get-data.server.ts +1 -1
  264. package/src/modules/data-tables/strategies/infinite/strategy.ts +4 -1
  265. package/src/modules/data-tables/tables/data-table/components/row.tsx +12 -21
  266. package/src/modules/data-tables/tables/inline-table/components/body.tsx +1 -1
  267. package/src/modules/data-tables/tables/inline-table/components/row.client.tsx +24 -30
  268. package/src/modules/data-tables/tables/inline-table/components/table.tsx +6 -1
  269. package/src/modules/data-tables/tables/inline-table/hooks/context.client.tsx +5 -0
  270. package/src/modules/data-tables/tables/inline-table/hooks/use-hotkeys.client.ts +119 -91
  271. package/src/modules/database/entry.client.ts +0 -0
  272. package/src/modules/database/entry.server.ts +4 -0
  273. package/src/modules/database/entry.ts +5 -0
  274. package/src/modules/database/lib/service.server.ts +33 -0
  275. package/src/modules/emails/entry.client.ts +0 -0
  276. package/src/modules/emails/entry.server.ts +4 -0
  277. package/src/modules/emails/entry.ts +0 -0
  278. package/src/modules/emails/lib/service.server.ts +29 -0
  279. package/src/modules/inline-edit/components/date-input.client.tsx +1 -1
  280. package/src/modules/inline-edit/components/date-picker.client.tsx +1 -0
  281. package/src/modules/inline-edit/components/date-time.client.tsx +1 -0
  282. package/src/modules/inline-edit/components/editor.client.tsx +3 -0
  283. package/src/modules/inline-edit/components/input-recipient.client.tsx +1 -0
  284. package/src/modules/inline-edit/components/input-toggle.client.tsx +1 -0
  285. package/src/modules/inline-edit/components/input.client.tsx +3 -0
  286. package/src/modules/inline-edit/components/select.client.tsx +5 -1
  287. package/src/modules/inline-edit/components/switch.client.tsx +1 -0
  288. package/src/modules/inline-edit/components/toggle.client.tsx +1 -0
  289. package/src/modules/router/handler/init.server.ts +2 -2
  290. package/src/modules/storage/components/dropzone.client.tsx +1 -1
  291. package/src/modules/storage/components/image-grid.client.tsx +23 -20
  292. package/src/modules/storage/components/image.client.tsx +8 -0
  293. package/src/modules/storage/components/upload-zone-context.client.tsx +11 -8
  294. package/src/modules/storage/components/upload-zone.client.tsx +22 -16
  295. package/src/modules/storage/entry.client.ts +3 -1
  296. package/src/modules/storage/entry.server.ts +9 -3
  297. package/src/modules/storage/entry.ts +13 -1
  298. package/src/modules/storage/lib/constants.ts +0 -11
  299. package/src/modules/storage/lib/helpers.ts +18 -65
  300. package/src/modules/storage/lib/procedures.server.ts +60 -0
  301. package/src/modules/storage/lib/router-handlers.server.ts +178 -0
  302. package/src/modules/storage/lib/schema.ts +26 -97
  303. package/src/modules/storage/lib/service.server.ts +636 -374
  304. package/src/modules/storage/lib/upload.client.ts +156 -0
  305. package/src/modules/storage/lib/validators.ts +50 -111
  306. package/src/modules/storage/providers/adapters/s3.server.ts +281 -0
  307. package/src/modules/storage/providers/lib/constants.ts +3 -0
  308. package/src/modules/storage/providers/lib/errors.ts +21 -0
  309. package/src/modules/storage/providers/lib/types.ts +28 -0
  310. package/src/modules/storage/providers/lib/validators.ts +122 -0
  311. package/dist/lib/config/constants.d.mts +0 -5
  312. package/dist/lib/config/constants.d.mts.map +0 -1
  313. package/dist/lib/config/constants.mjs +0 -6
  314. package/dist/lib/config/constants.mjs.map +0 -1
  315. package/dist/modules/auth/components/guard-first-user.server.d.mts +0 -18
  316. package/dist/modules/auth/components/guard-first-user.server.d.mts.map +0 -1
  317. package/dist/modules/auth/components/guard-first-user.server.mjs +0 -16
  318. package/dist/modules/auth/components/guard-first-user.server.mjs.map +0 -1
  319. package/dist/modules/auth/handler/init.mjs.map +0 -1
  320. package/dist/modules/config/db/helpers.d.mts.map +0 -1
  321. package/dist/modules/config/db/helpers.mjs.map +0 -1
  322. package/dist/modules/config/db/init.d.mts +0 -20
  323. package/dist/modules/config/db/init.d.mts.map +0 -1
  324. package/dist/modules/config/db/init.mjs +0 -15
  325. package/dist/modules/config/db/init.mjs.map +0 -1
  326. package/dist/modules/config/db/types.d.mts.map +0 -1
  327. package/dist/modules/config/providers/email.d.mts +0 -12
  328. package/dist/modules/config/providers/email.d.mts.map +0 -1
  329. package/dist/modules/config/providers/email.mjs +0 -11
  330. package/dist/modules/config/providers/email.mjs.map +0 -1
  331. package/dist/modules/storage/config/filters.d.mts +0 -17
  332. package/dist/modules/storage/config/filters.d.mts.map +0 -1
  333. package/dist/modules/storage/config/filters.mjs +0 -17
  334. package/dist/modules/storage/config/filters.mjs.map +0 -1
  335. package/dist/modules/storage/lib/create-client.server.d.mts +0 -11
  336. package/dist/modules/storage/lib/create-client.server.d.mts.map +0 -1
  337. package/dist/modules/storage/lib/create-client.server.mjs +0 -11
  338. package/dist/modules/storage/lib/create-client.server.mjs.map +0 -1
  339. package/dist/modules/storage/lib/create-upload.client.d.mts +0 -56
  340. package/dist/modules/storage/lib/create-upload.client.d.mts.map +0 -1
  341. package/dist/modules/storage/lib/create-upload.client.mjs +0 -98
  342. package/dist/modules/storage/lib/create-upload.client.mjs.map +0 -1
  343. package/dist/modules/storage/lib/proxy.server.d.mts +0 -21
  344. package/dist/modules/storage/lib/proxy.server.d.mts.map +0 -1
  345. package/dist/modules/storage/lib/proxy.server.mjs +0 -46
  346. package/dist/modules/storage/lib/proxy.server.mjs.map +0 -1
  347. package/dist/modules/storage/lib/router.server.d.mts +0 -31002
  348. package/dist/modules/storage/lib/router.server.d.mts.map +0 -1
  349. package/dist/modules/storage/lib/router.server.mjs +0 -86
  350. package/dist/modules/storage/lib/router.server.mjs.map +0 -1
  351. package/src/lib/config/constants.ts +0 -1
  352. package/src/lib/utils/time-picker.ts +0 -139
  353. package/src/modules/config/db/init.ts +0 -21
  354. package/src/modules/config/providers/email.ts +0 -13
  355. package/src/modules/storage/config/filters.ts +0 -12
  356. package/src/modules/storage/lib/create-client.server.ts +0 -14
  357. package/src/modules/storage/lib/create-upload.client.ts +0 -134
  358. package/src/modules/storage/lib/proxy.server.ts +0 -63
  359. package/src/modules/storage/lib/router.server.ts +0 -182
  360. /package/src/modules/{config/db → database/lib}/helpers.ts +0 -0
  361. /package/src/modules/{config/db → database/lib}/types.ts +0 -0
@@ -1,204 +1,2218 @@
1
- import { CreateFolderNodeSchema, FileNode, GetFileURLSchema, GetNodesByParentIdInput, Node, PresignFileSchema, PutObjectInput, UpdateNodeSchema, UploadFileSchema } from "./validators.mjs";
2
- import { BulkActionSchema } from "../../router/lib/validators.mjs";
3
- import "../../../router.mjs";
4
- import { TDatabaseSchema } from "../../config/db/types.mjs";
5
- import { DatabaseClient } from "../../config/db/init.mjs";
6
- import "../../../config/server.mjs";
7
- import "../../../config.mjs";
8
- import * as _aws_sdk_client_s30 from "@aws-sdk/client-s3";
9
- import { S3Client, S3ClientConfig } from "@aws-sdk/client-s3";
1
+ import { TDatabaseSchema } from "../../database/lib/types.mjs";
2
+ import { Database } from "../../database/lib/service.server.mjs";
3
+ import { GetObjectURLOptions } from "../providers/lib/validators.mjs";
4
+ import { StorageAdapter } from "../providers/lib/types.mjs";
5
+ import { ConfirmUploadInput, PresignUploadInput, UploadInput } from "./validators.mjs";
6
+ import * as drizzle_orm_pg_core0 from "drizzle-orm/pg-core";
7
+ import * as node_stream0 from "node:stream";
10
8
 
11
9
  //#region src/modules/storage/lib/service.server.d.ts
12
- /**
13
- * Storage Service Config
14
- */
15
- type StorageServiceConfig<TSchema extends TDatabaseSchema> = {
16
- db: DatabaseClient<TSchema>;
17
- config: S3ClientConfig;
10
+ type StorageConfig<TSchema extends TDatabaseSchema> = {
11
+ db: Database<TSchema>;
12
+ adapter: StorageAdapter;
13
+ prefix?: string;
18
14
  };
19
15
  /**
20
- * Storage Service
16
+ * Storage service for working with asset metadata and object storage.
17
+ *
18
+ * Use `Storage.init()` to create a fully configured instance in app code.
19
+ *
20
+ * @param props - Storage configuration, including `db` and `adapter`
21
+ * @returns A ready-to-use `Storage` instance
22
+ * @example
23
+ * const storage = Storage.init({
24
+ * db: drizzle(dbConnection),
25
+ * adapter: new StorageS3Adapter({
26
+ * bucketName: "my-app-uploads",
27
+ * region: "us-east-1",
28
+ * credentials: {
29
+ * accessKeyId: process.env.AWS_ACCESS_KEY_ID,
30
+ * secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
31
+ * },
32
+ * }),
33
+ * });
21
34
  */
22
- declare class StorageService<TSchema extends TDatabaseSchema> {
35
+ declare class Storage<TSchema extends TDatabaseSchema> {
23
36
  #private;
37
+ prefix: string;
38
+ private constructor();
24
39
  /**
25
- * Constructor
40
+ * Create a storage service instance.
41
+ *
42
+ * This keeps the public API aligned with other Tulip services such as
43
+ * `Database.init()`, `Email.init()`, and `Auth.init()`.
44
+ *
45
+ * @param props - Storage configuration, including `db` and `adapter`
46
+ * @returns A new `Storage` instance
47
+ * @example
48
+ * const storage = Storage.init({
49
+ * db: drizzle(dbConnection),
50
+ * adapter: new StorageS3Adapter({
51
+ * bucketName: "my-app-uploads",
52
+ * region: "us-east-1",
53
+ * credentials: {
54
+ * accessKeyId: process.env.AWS_ACCESS_KEY_ID,
55
+ * secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
56
+ * },
57
+ * }),
58
+ * });
26
59
  */
27
- constructor({
28
- db,
29
- config
30
- }: StorageServiceConfig<TSchema>);
60
+ static init<TSchema extends TDatabaseSchema>(props: StorageConfig<TSchema>): Storage<TSchema>;
31
61
  /**
32
- * Get Blob
62
+ * Builds a query to fetch a storage asset by its ID and the current adapter's provider.
63
+ * @param id - The asset ID to search for
64
+ * @returns A dynamic Drizzle query for fetching a single asset
65
+ * @example
66
+ * let query = storageService.getAssetByIdQuery("asset-123");
67
+ * query = query.where(eq(storageAssets.contentType, "image/png")); // Add additional conditions if needed
68
+ * const [asset] = await query;
33
69
  */
34
- blob(): S3Client;
70
+ getAssetByIdQuery(id: string): drizzle_orm_pg_core0.PgSelectBase<"storage_assets", {
71
+ provider: drizzle_orm_pg_core0.PgColumn<{
72
+ name: "provider";
73
+ tableName: "storage_assets";
74
+ dataType: "string";
75
+ columnType: "PgText";
76
+ data: "s3";
77
+ driverParam: string;
78
+ notNull: true;
79
+ hasDefault: false;
80
+ isPrimaryKey: false;
81
+ isAutoincrement: false;
82
+ hasRuntimeDefault: false;
83
+ enumValues: ["s3"];
84
+ baseColumn: never;
85
+ identity: undefined;
86
+ generated: undefined;
87
+ }, {}, {}>;
88
+ bucket: drizzle_orm_pg_core0.PgColumn<{
89
+ name: "bucket";
90
+ tableName: "storage_assets";
91
+ dataType: "string";
92
+ columnType: "PgText";
93
+ data: string;
94
+ driverParam: string;
95
+ notNull: true;
96
+ hasDefault: false;
97
+ isPrimaryKey: false;
98
+ isAutoincrement: false;
99
+ hasRuntimeDefault: false;
100
+ enumValues: [string, ...string[]];
101
+ baseColumn: never;
102
+ identity: undefined;
103
+ generated: undefined;
104
+ }, {}, {}>;
105
+ key: drizzle_orm_pg_core0.PgColumn<{
106
+ name: "key";
107
+ tableName: "storage_assets";
108
+ dataType: "string";
109
+ columnType: "PgText";
110
+ data: string;
111
+ driverParam: string;
112
+ notNull: true;
113
+ hasDefault: false;
114
+ isPrimaryKey: false;
115
+ isAutoincrement: false;
116
+ hasRuntimeDefault: false;
117
+ enumValues: [string, ...string[]];
118
+ baseColumn: never;
119
+ identity: undefined;
120
+ generated: undefined;
121
+ }, {}, {}>;
122
+ status: drizzle_orm_pg_core0.PgColumn<{
123
+ name: "status";
124
+ tableName: "storage_assets";
125
+ dataType: "string";
126
+ columnType: "PgEnumColumn";
127
+ data: "error" | "pending" | "ready";
128
+ driverParam: string;
129
+ notNull: true;
130
+ hasDefault: false;
131
+ isPrimaryKey: false;
132
+ isAutoincrement: false;
133
+ hasRuntimeDefault: false;
134
+ enumValues: ["pending", "ready", "error"];
135
+ baseColumn: never;
136
+ identity: undefined;
137
+ generated: undefined;
138
+ }, {}, {}>;
139
+ visibility: drizzle_orm_pg_core0.PgColumn<{
140
+ name: "visibility";
141
+ tableName: "storage_assets";
142
+ dataType: "string";
143
+ columnType: "PgEnumColumn";
144
+ data: "private" | "public";
145
+ driverParam: string;
146
+ notNull: true;
147
+ hasDefault: true;
148
+ isPrimaryKey: false;
149
+ isAutoincrement: false;
150
+ hasRuntimeDefault: false;
151
+ enumValues: ["private", "public"];
152
+ baseColumn: never;
153
+ identity: undefined;
154
+ generated: undefined;
155
+ }, {}, {}>;
156
+ size: drizzle_orm_pg_core0.PgColumn<{
157
+ name: "size";
158
+ tableName: "storage_assets";
159
+ dataType: "number";
160
+ columnType: "PgInteger";
161
+ data: number;
162
+ driverParam: string | number;
163
+ notNull: false;
164
+ hasDefault: true;
165
+ isPrimaryKey: false;
166
+ isAutoincrement: false;
167
+ hasRuntimeDefault: false;
168
+ enumValues: undefined;
169
+ baseColumn: never;
170
+ identity: undefined;
171
+ generated: undefined;
172
+ }, {}, {}>;
173
+ contentType: drizzle_orm_pg_core0.PgColumn<{
174
+ name: "contentType";
175
+ tableName: "storage_assets";
176
+ dataType: "string";
177
+ columnType: "PgVarchar";
178
+ data: string;
179
+ driverParam: string;
180
+ notNull: false;
181
+ hasDefault: false;
182
+ isPrimaryKey: false;
183
+ isAutoincrement: false;
184
+ hasRuntimeDefault: false;
185
+ enumValues: [string, ...string[]];
186
+ baseColumn: never;
187
+ identity: undefined;
188
+ generated: undefined;
189
+ }, {}, {
190
+ length: 255;
191
+ }>;
192
+ uploadId: drizzle_orm_pg_core0.PgColumn<{
193
+ name: "uploadId";
194
+ tableName: "storage_assets";
195
+ dataType: "string";
196
+ columnType: "PgUUID";
197
+ data: string;
198
+ driverParam: string;
199
+ notNull: true;
200
+ hasDefault: true;
201
+ isPrimaryKey: false;
202
+ isAutoincrement: false;
203
+ hasRuntimeDefault: false;
204
+ enumValues: undefined;
205
+ baseColumn: never;
206
+ identity: undefined;
207
+ generated: undefined;
208
+ }, {}, {}>;
209
+ name: drizzle_orm_pg_core0.PgColumn<{
210
+ name: "name";
211
+ tableName: "storage_assets";
212
+ dataType: "string";
213
+ columnType: "PgText";
214
+ data: string;
215
+ driverParam: string;
216
+ notNull: false;
217
+ hasDefault: false;
218
+ isPrimaryKey: false;
219
+ isAutoincrement: false;
220
+ hasRuntimeDefault: false;
221
+ enumValues: [string, ...string[]];
222
+ baseColumn: never;
223
+ identity: undefined;
224
+ generated: undefined;
225
+ }, {}, {}>;
226
+ metadata: drizzle_orm_pg_core0.PgColumn<{
227
+ name: "metadata";
228
+ tableName: "storage_assets";
229
+ dataType: "json";
230
+ columnType: "PgJsonb";
231
+ data: unknown;
232
+ driverParam: unknown;
233
+ notNull: false;
234
+ hasDefault: false;
235
+ isPrimaryKey: false;
236
+ isAutoincrement: false;
237
+ hasRuntimeDefault: false;
238
+ enumValues: undefined;
239
+ baseColumn: never;
240
+ identity: undefined;
241
+ generated: undefined;
242
+ }, {}, {}>;
243
+ etag: drizzle_orm_pg_core0.PgColumn<{
244
+ name: "etag";
245
+ tableName: "storage_assets";
246
+ dataType: "string";
247
+ columnType: "PgText";
248
+ data: string;
249
+ driverParam: string;
250
+ notNull: false;
251
+ hasDefault: false;
252
+ isPrimaryKey: false;
253
+ isAutoincrement: false;
254
+ hasRuntimeDefault: false;
255
+ enumValues: [string, ...string[]];
256
+ baseColumn: never;
257
+ identity: undefined;
258
+ generated: undefined;
259
+ }, {}, {}>;
260
+ uploadedAt: drizzle_orm_pg_core0.PgColumn<{
261
+ name: "uploadedAt";
262
+ tableName: "storage_assets";
263
+ dataType: "date";
264
+ columnType: "PgTimestamp";
265
+ data: Date;
266
+ driverParam: string;
267
+ notNull: true;
268
+ hasDefault: true;
269
+ isPrimaryKey: false;
270
+ isAutoincrement: false;
271
+ hasRuntimeDefault: false;
272
+ enumValues: undefined;
273
+ baseColumn: never;
274
+ identity: undefined;
275
+ generated: undefined;
276
+ }, {}, {}>;
277
+ deletedAt: drizzle_orm_pg_core0.PgColumn<{
278
+ name: "deletedAt";
279
+ tableName: "storage_assets";
280
+ dataType: "date";
281
+ columnType: "PgTimestamp";
282
+ data: Date;
283
+ driverParam: string;
284
+ notNull: false;
285
+ hasDefault: false;
286
+ isPrimaryKey: false;
287
+ isAutoincrement: false;
288
+ hasRuntimeDefault: false;
289
+ enumValues: undefined;
290
+ baseColumn: never;
291
+ identity: undefined;
292
+ generated: undefined;
293
+ }, {}, {}>;
294
+ id: drizzle_orm_pg_core0.PgColumn<{
295
+ name: "id";
296
+ tableName: "storage_assets";
297
+ dataType: "string";
298
+ columnType: "PgUUID";
299
+ data: string;
300
+ driverParam: string;
301
+ notNull: true;
302
+ hasDefault: true;
303
+ isPrimaryKey: true;
304
+ isAutoincrement: false;
305
+ hasRuntimeDefault: true;
306
+ enumValues: undefined;
307
+ baseColumn: never;
308
+ identity: undefined;
309
+ generated: undefined;
310
+ }, {}, {}>;
311
+ createdAt: drizzle_orm_pg_core0.PgColumn<{
312
+ name: "createdAt";
313
+ tableName: "storage_assets";
314
+ dataType: "date";
315
+ columnType: "PgTimestamp";
316
+ data: Date;
317
+ driverParam: string;
318
+ notNull: true;
319
+ hasDefault: true;
320
+ isPrimaryKey: false;
321
+ isAutoincrement: false;
322
+ hasRuntimeDefault: false;
323
+ enumValues: undefined;
324
+ baseColumn: never;
325
+ identity: undefined;
326
+ generated: undefined;
327
+ }, {}, {}>;
328
+ updatedAt: drizzle_orm_pg_core0.PgColumn<{
329
+ name: "updatedAt";
330
+ tableName: "storage_assets";
331
+ dataType: "date";
332
+ columnType: "PgTimestamp";
333
+ data: Date;
334
+ driverParam: string;
335
+ notNull: true;
336
+ hasDefault: true;
337
+ isPrimaryKey: false;
338
+ isAutoincrement: false;
339
+ hasRuntimeDefault: false;
340
+ enumValues: undefined;
341
+ baseColumn: never;
342
+ identity: undefined;
343
+ generated: undefined;
344
+ }, {}, {}>;
345
+ }, "single", Record<"storage_assets", "not-null">, true, never, {
346
+ provider: "s3";
347
+ bucket: string;
348
+ key: string;
349
+ status: "error" | "pending" | "ready";
350
+ visibility: "private" | "public";
351
+ size: number | null;
352
+ contentType: string | null;
353
+ uploadId: string;
354
+ name: string | null;
355
+ metadata: unknown;
356
+ etag: string | null;
357
+ uploadedAt: Date;
358
+ deletedAt: Date | null;
359
+ id: string;
360
+ createdAt: Date;
361
+ updatedAt: Date;
362
+ }[], {
363
+ provider: drizzle_orm_pg_core0.PgColumn<{
364
+ name: "provider";
365
+ tableName: "storage_assets";
366
+ dataType: "string";
367
+ columnType: "PgText";
368
+ data: "s3";
369
+ driverParam: string;
370
+ notNull: true;
371
+ hasDefault: false;
372
+ isPrimaryKey: false;
373
+ isAutoincrement: false;
374
+ hasRuntimeDefault: false;
375
+ enumValues: ["s3"];
376
+ baseColumn: never;
377
+ identity: undefined;
378
+ generated: undefined;
379
+ }, {}, {}>;
380
+ bucket: drizzle_orm_pg_core0.PgColumn<{
381
+ name: "bucket";
382
+ tableName: "storage_assets";
383
+ dataType: "string";
384
+ columnType: "PgText";
385
+ data: string;
386
+ driverParam: string;
387
+ notNull: true;
388
+ hasDefault: false;
389
+ isPrimaryKey: false;
390
+ isAutoincrement: false;
391
+ hasRuntimeDefault: false;
392
+ enumValues: [string, ...string[]];
393
+ baseColumn: never;
394
+ identity: undefined;
395
+ generated: undefined;
396
+ }, {}, {}>;
397
+ key: drizzle_orm_pg_core0.PgColumn<{
398
+ name: "key";
399
+ tableName: "storage_assets";
400
+ dataType: "string";
401
+ columnType: "PgText";
402
+ data: string;
403
+ driverParam: string;
404
+ notNull: true;
405
+ hasDefault: false;
406
+ isPrimaryKey: false;
407
+ isAutoincrement: false;
408
+ hasRuntimeDefault: false;
409
+ enumValues: [string, ...string[]];
410
+ baseColumn: never;
411
+ identity: undefined;
412
+ generated: undefined;
413
+ }, {}, {}>;
414
+ status: drizzle_orm_pg_core0.PgColumn<{
415
+ name: "status";
416
+ tableName: "storage_assets";
417
+ dataType: "string";
418
+ columnType: "PgEnumColumn";
419
+ data: "error" | "pending" | "ready";
420
+ driverParam: string;
421
+ notNull: true;
422
+ hasDefault: false;
423
+ isPrimaryKey: false;
424
+ isAutoincrement: false;
425
+ hasRuntimeDefault: false;
426
+ enumValues: ["pending", "ready", "error"];
427
+ baseColumn: never;
428
+ identity: undefined;
429
+ generated: undefined;
430
+ }, {}, {}>;
431
+ visibility: drizzle_orm_pg_core0.PgColumn<{
432
+ name: "visibility";
433
+ tableName: "storage_assets";
434
+ dataType: "string";
435
+ columnType: "PgEnumColumn";
436
+ data: "private" | "public";
437
+ driverParam: string;
438
+ notNull: true;
439
+ hasDefault: true;
440
+ isPrimaryKey: false;
441
+ isAutoincrement: false;
442
+ hasRuntimeDefault: false;
443
+ enumValues: ["private", "public"];
444
+ baseColumn: never;
445
+ identity: undefined;
446
+ generated: undefined;
447
+ }, {}, {}>;
448
+ size: drizzle_orm_pg_core0.PgColumn<{
449
+ name: "size";
450
+ tableName: "storage_assets";
451
+ dataType: "number";
452
+ columnType: "PgInteger";
453
+ data: number;
454
+ driverParam: string | number;
455
+ notNull: false;
456
+ hasDefault: true;
457
+ isPrimaryKey: false;
458
+ isAutoincrement: false;
459
+ hasRuntimeDefault: false;
460
+ enumValues: undefined;
461
+ baseColumn: never;
462
+ identity: undefined;
463
+ generated: undefined;
464
+ }, {}, {}>;
465
+ contentType: drizzle_orm_pg_core0.PgColumn<{
466
+ name: "contentType";
467
+ tableName: "storage_assets";
468
+ dataType: "string";
469
+ columnType: "PgVarchar";
470
+ data: string;
471
+ driverParam: string;
472
+ notNull: false;
473
+ hasDefault: false;
474
+ isPrimaryKey: false;
475
+ isAutoincrement: false;
476
+ hasRuntimeDefault: false;
477
+ enumValues: [string, ...string[]];
478
+ baseColumn: never;
479
+ identity: undefined;
480
+ generated: undefined;
481
+ }, {}, {
482
+ length: 255;
483
+ }>;
484
+ uploadId: drizzle_orm_pg_core0.PgColumn<{
485
+ name: "uploadId";
486
+ tableName: "storage_assets";
487
+ dataType: "string";
488
+ columnType: "PgUUID";
489
+ data: string;
490
+ driverParam: string;
491
+ notNull: true;
492
+ hasDefault: true;
493
+ isPrimaryKey: false;
494
+ isAutoincrement: false;
495
+ hasRuntimeDefault: false;
496
+ enumValues: undefined;
497
+ baseColumn: never;
498
+ identity: undefined;
499
+ generated: undefined;
500
+ }, {}, {}>;
501
+ name: drizzle_orm_pg_core0.PgColumn<{
502
+ name: "name";
503
+ tableName: "storage_assets";
504
+ dataType: "string";
505
+ columnType: "PgText";
506
+ data: string;
507
+ driverParam: string;
508
+ notNull: false;
509
+ hasDefault: false;
510
+ isPrimaryKey: false;
511
+ isAutoincrement: false;
512
+ hasRuntimeDefault: false;
513
+ enumValues: [string, ...string[]];
514
+ baseColumn: never;
515
+ identity: undefined;
516
+ generated: undefined;
517
+ }, {}, {}>;
518
+ metadata: drizzle_orm_pg_core0.PgColumn<{
519
+ name: "metadata";
520
+ tableName: "storage_assets";
521
+ dataType: "json";
522
+ columnType: "PgJsonb";
523
+ data: unknown;
524
+ driverParam: unknown;
525
+ notNull: false;
526
+ hasDefault: false;
527
+ isPrimaryKey: false;
528
+ isAutoincrement: false;
529
+ hasRuntimeDefault: false;
530
+ enumValues: undefined;
531
+ baseColumn: never;
532
+ identity: undefined;
533
+ generated: undefined;
534
+ }, {}, {}>;
535
+ etag: drizzle_orm_pg_core0.PgColumn<{
536
+ name: "etag";
537
+ tableName: "storage_assets";
538
+ dataType: "string";
539
+ columnType: "PgText";
540
+ data: string;
541
+ driverParam: string;
542
+ notNull: false;
543
+ hasDefault: false;
544
+ isPrimaryKey: false;
545
+ isAutoincrement: false;
546
+ hasRuntimeDefault: false;
547
+ enumValues: [string, ...string[]];
548
+ baseColumn: never;
549
+ identity: undefined;
550
+ generated: undefined;
551
+ }, {}, {}>;
552
+ uploadedAt: drizzle_orm_pg_core0.PgColumn<{
553
+ name: "uploadedAt";
554
+ tableName: "storage_assets";
555
+ dataType: "date";
556
+ columnType: "PgTimestamp";
557
+ data: Date;
558
+ driverParam: string;
559
+ notNull: true;
560
+ hasDefault: true;
561
+ isPrimaryKey: false;
562
+ isAutoincrement: false;
563
+ hasRuntimeDefault: false;
564
+ enumValues: undefined;
565
+ baseColumn: never;
566
+ identity: undefined;
567
+ generated: undefined;
568
+ }, {}, {}>;
569
+ deletedAt: drizzle_orm_pg_core0.PgColumn<{
570
+ name: "deletedAt";
571
+ tableName: "storage_assets";
572
+ dataType: "date";
573
+ columnType: "PgTimestamp";
574
+ data: Date;
575
+ driverParam: string;
576
+ notNull: false;
577
+ hasDefault: false;
578
+ isPrimaryKey: false;
579
+ isAutoincrement: false;
580
+ hasRuntimeDefault: false;
581
+ enumValues: undefined;
582
+ baseColumn: never;
583
+ identity: undefined;
584
+ generated: undefined;
585
+ }, {}, {}>;
586
+ id: drizzle_orm_pg_core0.PgColumn<{
587
+ name: "id";
588
+ tableName: "storage_assets";
589
+ dataType: "string";
590
+ columnType: "PgUUID";
591
+ data: string;
592
+ driverParam: string;
593
+ notNull: true;
594
+ hasDefault: true;
595
+ isPrimaryKey: true;
596
+ isAutoincrement: false;
597
+ hasRuntimeDefault: true;
598
+ enumValues: undefined;
599
+ baseColumn: never;
600
+ identity: undefined;
601
+ generated: undefined;
602
+ }, {}, {}>;
603
+ createdAt: drizzle_orm_pg_core0.PgColumn<{
604
+ name: "createdAt";
605
+ tableName: "storage_assets";
606
+ dataType: "date";
607
+ columnType: "PgTimestamp";
608
+ data: Date;
609
+ driverParam: string;
610
+ notNull: true;
611
+ hasDefault: true;
612
+ isPrimaryKey: false;
613
+ isAutoincrement: false;
614
+ hasRuntimeDefault: false;
615
+ enumValues: undefined;
616
+ baseColumn: never;
617
+ identity: undefined;
618
+ generated: undefined;
619
+ }, {}, {}>;
620
+ updatedAt: drizzle_orm_pg_core0.PgColumn<{
621
+ name: "updatedAt";
622
+ tableName: "storage_assets";
623
+ dataType: "date";
624
+ columnType: "PgTimestamp";
625
+ data: Date;
626
+ driverParam: string;
627
+ notNull: true;
628
+ hasDefault: true;
629
+ isPrimaryKey: false;
630
+ isAutoincrement: false;
631
+ hasRuntimeDefault: false;
632
+ enumValues: undefined;
633
+ baseColumn: never;
634
+ identity: undefined;
635
+ generated: undefined;
636
+ }, {}, {}>;
637
+ }>;
35
638
  /**
36
- * Get object
639
+ * Fetches a storage asset by its ID.
640
+ * @param id - The asset ID to retrieve
641
+ * @returns The asset object if found, otherwise null
642
+ * @example
643
+ * const asset = await storageService.getAssetById("asset-123");
644
+ * if (asset) {
645
+ * console.log(asset.key, asset.contentType);
646
+ * }
37
647
  */
38
- getObject(id: string, options?: GetFileURLSchema): Promise<_aws_sdk_client_s30.GetObjectCommandOutput>;
648
+ getAssetById(id: string): Promise<{
649
+ provider: "s3";
650
+ bucket: string;
651
+ key: string;
652
+ status: "error" | "pending" | "ready";
653
+ visibility: "private" | "public";
654
+ size: number | null;
655
+ contentType: string | null;
656
+ uploadId: string;
657
+ name: string | null;
658
+ metadata: unknown;
659
+ etag: string | null;
660
+ uploadedAt: Date;
661
+ deletedAt: Date | null;
662
+ id: string;
663
+ createdAt: Date;
664
+ updatedAt: Date;
665
+ } | null>;
39
666
  /**
40
- * Get node by id
667
+ * Builds a query to fetch a single ready storage asset by key
668
+ * within the current adapter provider scope.
669
+ *
670
+ * Notes:
671
+ * - Scoped to `this.#adapter.key` to avoid cross-provider leakage.
672
+ * - Targets ready assets by default.
673
+ * - Uniqueness is expected on `(provider, bucket, key)`.
674
+ *
675
+ * @param key - The object key stored in `storage_assets.key`
676
+ * @returns A dynamic Drizzle query returning max 1 row
677
+ * @example
678
+ * let query = storageService.getAssetByKeyQuery("uploads/abc/main");
679
+ * query = query.leftJoin(otherTable, eq(otherTable.assetId, storageAssets.id));
680
+ * const [asset] = await query;
41
681
  */
42
- getNodeById(id: string): Promise<{
43
- name: string;
44
- namespace: string;
45
- type: "file" | "folder" | null;
46
- mode: "private" | "public" | null;
47
- subtype: "image" | "document" | "spreadsheet" | "video" | "audio" | "archive" | "other";
682
+ getAssetByKeyQuery(key: string): drizzle_orm_pg_core0.PgSelectBase<"storage_assets", {
683
+ provider: drizzle_orm_pg_core0.PgColumn<{
684
+ name: "provider";
685
+ tableName: "storage_assets";
686
+ dataType: "string";
687
+ columnType: "PgText";
688
+ data: "s3";
689
+ driverParam: string;
690
+ notNull: true;
691
+ hasDefault: false;
692
+ isPrimaryKey: false;
693
+ isAutoincrement: false;
694
+ hasRuntimeDefault: false;
695
+ enumValues: ["s3"];
696
+ baseColumn: never;
697
+ identity: undefined;
698
+ generated: undefined;
699
+ }, {}, {}>;
700
+ bucket: drizzle_orm_pg_core0.PgColumn<{
701
+ name: "bucket";
702
+ tableName: "storage_assets";
703
+ dataType: "string";
704
+ columnType: "PgText";
705
+ data: string;
706
+ driverParam: string;
707
+ notNull: true;
708
+ hasDefault: false;
709
+ isPrimaryKey: false;
710
+ isAutoincrement: false;
711
+ hasRuntimeDefault: false;
712
+ enumValues: [string, ...string[]];
713
+ baseColumn: never;
714
+ identity: undefined;
715
+ generated: undefined;
716
+ }, {}, {}>;
717
+ key: drizzle_orm_pg_core0.PgColumn<{
718
+ name: "key";
719
+ tableName: "storage_assets";
720
+ dataType: "string";
721
+ columnType: "PgText";
722
+ data: string;
723
+ driverParam: string;
724
+ notNull: true;
725
+ hasDefault: false;
726
+ isPrimaryKey: false;
727
+ isAutoincrement: false;
728
+ hasRuntimeDefault: false;
729
+ enumValues: [string, ...string[]];
730
+ baseColumn: never;
731
+ identity: undefined;
732
+ generated: undefined;
733
+ }, {}, {}>;
734
+ status: drizzle_orm_pg_core0.PgColumn<{
735
+ name: "status";
736
+ tableName: "storage_assets";
737
+ dataType: "string";
738
+ columnType: "PgEnumColumn";
739
+ data: "error" | "pending" | "ready";
740
+ driverParam: string;
741
+ notNull: true;
742
+ hasDefault: false;
743
+ isPrimaryKey: false;
744
+ isAutoincrement: false;
745
+ hasRuntimeDefault: false;
746
+ enumValues: ["pending", "ready", "error"];
747
+ baseColumn: never;
748
+ identity: undefined;
749
+ generated: undefined;
750
+ }, {}, {}>;
751
+ visibility: drizzle_orm_pg_core0.PgColumn<{
752
+ name: "visibility";
753
+ tableName: "storage_assets";
754
+ dataType: "string";
755
+ columnType: "PgEnumColumn";
756
+ data: "private" | "public";
757
+ driverParam: string;
758
+ notNull: true;
759
+ hasDefault: true;
760
+ isPrimaryKey: false;
761
+ isAutoincrement: false;
762
+ hasRuntimeDefault: false;
763
+ enumValues: ["private", "public"];
764
+ baseColumn: never;
765
+ identity: undefined;
766
+ generated: undefined;
767
+ }, {}, {}>;
768
+ size: drizzle_orm_pg_core0.PgColumn<{
769
+ name: "size";
770
+ tableName: "storage_assets";
771
+ dataType: "number";
772
+ columnType: "PgInteger";
773
+ data: number;
774
+ driverParam: string | number;
775
+ notNull: false;
776
+ hasDefault: true;
777
+ isPrimaryKey: false;
778
+ isAutoincrement: false;
779
+ hasRuntimeDefault: false;
780
+ enumValues: undefined;
781
+ baseColumn: never;
782
+ identity: undefined;
783
+ generated: undefined;
784
+ }, {}, {}>;
785
+ contentType: drizzle_orm_pg_core0.PgColumn<{
786
+ name: "contentType";
787
+ tableName: "storage_assets";
788
+ dataType: "string";
789
+ columnType: "PgVarchar";
790
+ data: string;
791
+ driverParam: string;
792
+ notNull: false;
793
+ hasDefault: false;
794
+ isPrimaryKey: false;
795
+ isAutoincrement: false;
796
+ hasRuntimeDefault: false;
797
+ enumValues: [string, ...string[]];
798
+ baseColumn: never;
799
+ identity: undefined;
800
+ generated: undefined;
801
+ }, {}, {
802
+ length: 255;
803
+ }>;
804
+ uploadId: drizzle_orm_pg_core0.PgColumn<{
805
+ name: "uploadId";
806
+ tableName: "storage_assets";
807
+ dataType: "string";
808
+ columnType: "PgUUID";
809
+ data: string;
810
+ driverParam: string;
811
+ notNull: true;
812
+ hasDefault: true;
813
+ isPrimaryKey: false;
814
+ isAutoincrement: false;
815
+ hasRuntimeDefault: false;
816
+ enumValues: undefined;
817
+ baseColumn: never;
818
+ identity: undefined;
819
+ generated: undefined;
820
+ }, {}, {}>;
821
+ name: drizzle_orm_pg_core0.PgColumn<{
822
+ name: "name";
823
+ tableName: "storage_assets";
824
+ dataType: "string";
825
+ columnType: "PgText";
826
+ data: string;
827
+ driverParam: string;
828
+ notNull: false;
829
+ hasDefault: false;
830
+ isPrimaryKey: false;
831
+ isAutoincrement: false;
832
+ hasRuntimeDefault: false;
833
+ enumValues: [string, ...string[]];
834
+ baseColumn: never;
835
+ identity: undefined;
836
+ generated: undefined;
837
+ }, {}, {}>;
838
+ metadata: drizzle_orm_pg_core0.PgColumn<{
839
+ name: "metadata";
840
+ tableName: "storage_assets";
841
+ dataType: "json";
842
+ columnType: "PgJsonb";
843
+ data: unknown;
844
+ driverParam: unknown;
845
+ notNull: false;
846
+ hasDefault: false;
847
+ isPrimaryKey: false;
848
+ isAutoincrement: false;
849
+ hasRuntimeDefault: false;
850
+ enumValues: undefined;
851
+ baseColumn: never;
852
+ identity: undefined;
853
+ generated: undefined;
854
+ }, {}, {}>;
855
+ etag: drizzle_orm_pg_core0.PgColumn<{
856
+ name: "etag";
857
+ tableName: "storage_assets";
858
+ dataType: "string";
859
+ columnType: "PgText";
860
+ data: string;
861
+ driverParam: string;
862
+ notNull: false;
863
+ hasDefault: false;
864
+ isPrimaryKey: false;
865
+ isAutoincrement: false;
866
+ hasRuntimeDefault: false;
867
+ enumValues: [string, ...string[]];
868
+ baseColumn: never;
869
+ identity: undefined;
870
+ generated: undefined;
871
+ }, {}, {}>;
872
+ uploadedAt: drizzle_orm_pg_core0.PgColumn<{
873
+ name: "uploadedAt";
874
+ tableName: "storage_assets";
875
+ dataType: "date";
876
+ columnType: "PgTimestamp";
877
+ data: Date;
878
+ driverParam: string;
879
+ notNull: true;
880
+ hasDefault: true;
881
+ isPrimaryKey: false;
882
+ isAutoincrement: false;
883
+ hasRuntimeDefault: false;
884
+ enumValues: undefined;
885
+ baseColumn: never;
886
+ identity: undefined;
887
+ generated: undefined;
888
+ }, {}, {}>;
889
+ deletedAt: drizzle_orm_pg_core0.PgColumn<{
890
+ name: "deletedAt";
891
+ tableName: "storage_assets";
892
+ dataType: "date";
893
+ columnType: "PgTimestamp";
894
+ data: Date;
895
+ driverParam: string;
896
+ notNull: false;
897
+ hasDefault: false;
898
+ isPrimaryKey: false;
899
+ isAutoincrement: false;
900
+ hasRuntimeDefault: false;
901
+ enumValues: undefined;
902
+ baseColumn: never;
903
+ identity: undefined;
904
+ generated: undefined;
905
+ }, {}, {}>;
906
+ id: drizzle_orm_pg_core0.PgColumn<{
907
+ name: "id";
908
+ tableName: "storage_assets";
909
+ dataType: "string";
910
+ columnType: "PgUUID";
911
+ data: string;
912
+ driverParam: string;
913
+ notNull: true;
914
+ hasDefault: true;
915
+ isPrimaryKey: true;
916
+ isAutoincrement: false;
917
+ hasRuntimeDefault: true;
918
+ enumValues: undefined;
919
+ baseColumn: never;
920
+ identity: undefined;
921
+ generated: undefined;
922
+ }, {}, {}>;
923
+ createdAt: drizzle_orm_pg_core0.PgColumn<{
924
+ name: "createdAt";
925
+ tableName: "storage_assets";
926
+ dataType: "date";
927
+ columnType: "PgTimestamp";
928
+ data: Date;
929
+ driverParam: string;
930
+ notNull: true;
931
+ hasDefault: true;
932
+ isPrimaryKey: false;
933
+ isAutoincrement: false;
934
+ hasRuntimeDefault: false;
935
+ enumValues: undefined;
936
+ baseColumn: never;
937
+ identity: undefined;
938
+ generated: undefined;
939
+ }, {}, {}>;
940
+ updatedAt: drizzle_orm_pg_core0.PgColumn<{
941
+ name: "updatedAt";
942
+ tableName: "storage_assets";
943
+ dataType: "date";
944
+ columnType: "PgTimestamp";
945
+ data: Date;
946
+ driverParam: string;
947
+ notNull: true;
948
+ hasDefault: true;
949
+ isPrimaryKey: false;
950
+ isAutoincrement: false;
951
+ hasRuntimeDefault: false;
952
+ enumValues: undefined;
953
+ baseColumn: never;
954
+ identity: undefined;
955
+ generated: undefined;
956
+ }, {}, {}>;
957
+ }, "single", Record<"storage_assets", "not-null">, true, never, {
958
+ provider: "s3";
959
+ bucket: string;
960
+ key: string;
961
+ status: "error" | "pending" | "ready";
962
+ visibility: "private" | "public";
48
963
  size: number | null;
49
964
  contentType: string | null;
50
- readonly: boolean | null;
51
- hidden: boolean | null;
52
- createdBy: string | null;
53
- isPending: boolean;
54
- isDeleted: boolean;
55
- orphanedAt: Date | null;
56
- parentId: string | null;
965
+ uploadId: string;
966
+ name: string | null;
967
+ metadata: unknown;
968
+ etag: string | null;
969
+ uploadedAt: Date;
970
+ deletedAt: Date | null;
57
971
  id: string;
58
972
  createdAt: Date;
59
973
  updatedAt: Date;
60
- }[]>;
974
+ }[], {
975
+ provider: drizzle_orm_pg_core0.PgColumn<{
976
+ name: "provider";
977
+ tableName: "storage_assets";
978
+ dataType: "string";
979
+ columnType: "PgText";
980
+ data: "s3";
981
+ driverParam: string;
982
+ notNull: true;
983
+ hasDefault: false;
984
+ isPrimaryKey: false;
985
+ isAutoincrement: false;
986
+ hasRuntimeDefault: false;
987
+ enumValues: ["s3"];
988
+ baseColumn: never;
989
+ identity: undefined;
990
+ generated: undefined;
991
+ }, {}, {}>;
992
+ bucket: drizzle_orm_pg_core0.PgColumn<{
993
+ name: "bucket";
994
+ tableName: "storage_assets";
995
+ dataType: "string";
996
+ columnType: "PgText";
997
+ data: string;
998
+ driverParam: string;
999
+ notNull: true;
1000
+ hasDefault: false;
1001
+ isPrimaryKey: false;
1002
+ isAutoincrement: false;
1003
+ hasRuntimeDefault: false;
1004
+ enumValues: [string, ...string[]];
1005
+ baseColumn: never;
1006
+ identity: undefined;
1007
+ generated: undefined;
1008
+ }, {}, {}>;
1009
+ key: drizzle_orm_pg_core0.PgColumn<{
1010
+ name: "key";
1011
+ tableName: "storage_assets";
1012
+ dataType: "string";
1013
+ columnType: "PgText";
1014
+ data: string;
1015
+ driverParam: string;
1016
+ notNull: true;
1017
+ hasDefault: false;
1018
+ isPrimaryKey: false;
1019
+ isAutoincrement: false;
1020
+ hasRuntimeDefault: false;
1021
+ enumValues: [string, ...string[]];
1022
+ baseColumn: never;
1023
+ identity: undefined;
1024
+ generated: undefined;
1025
+ }, {}, {}>;
1026
+ status: drizzle_orm_pg_core0.PgColumn<{
1027
+ name: "status";
1028
+ tableName: "storage_assets";
1029
+ dataType: "string";
1030
+ columnType: "PgEnumColumn";
1031
+ data: "error" | "pending" | "ready";
1032
+ driverParam: string;
1033
+ notNull: true;
1034
+ hasDefault: false;
1035
+ isPrimaryKey: false;
1036
+ isAutoincrement: false;
1037
+ hasRuntimeDefault: false;
1038
+ enumValues: ["pending", "ready", "error"];
1039
+ baseColumn: never;
1040
+ identity: undefined;
1041
+ generated: undefined;
1042
+ }, {}, {}>;
1043
+ visibility: drizzle_orm_pg_core0.PgColumn<{
1044
+ name: "visibility";
1045
+ tableName: "storage_assets";
1046
+ dataType: "string";
1047
+ columnType: "PgEnumColumn";
1048
+ data: "private" | "public";
1049
+ driverParam: string;
1050
+ notNull: true;
1051
+ hasDefault: true;
1052
+ isPrimaryKey: false;
1053
+ isAutoincrement: false;
1054
+ hasRuntimeDefault: false;
1055
+ enumValues: ["private", "public"];
1056
+ baseColumn: never;
1057
+ identity: undefined;
1058
+ generated: undefined;
1059
+ }, {}, {}>;
1060
+ size: drizzle_orm_pg_core0.PgColumn<{
1061
+ name: "size";
1062
+ tableName: "storage_assets";
1063
+ dataType: "number";
1064
+ columnType: "PgInteger";
1065
+ data: number;
1066
+ driverParam: string | number;
1067
+ notNull: false;
1068
+ hasDefault: true;
1069
+ isPrimaryKey: false;
1070
+ isAutoincrement: false;
1071
+ hasRuntimeDefault: false;
1072
+ enumValues: undefined;
1073
+ baseColumn: never;
1074
+ identity: undefined;
1075
+ generated: undefined;
1076
+ }, {}, {}>;
1077
+ contentType: drizzle_orm_pg_core0.PgColumn<{
1078
+ name: "contentType";
1079
+ tableName: "storage_assets";
1080
+ dataType: "string";
1081
+ columnType: "PgVarchar";
1082
+ data: string;
1083
+ driverParam: string;
1084
+ notNull: false;
1085
+ hasDefault: false;
1086
+ isPrimaryKey: false;
1087
+ isAutoincrement: false;
1088
+ hasRuntimeDefault: false;
1089
+ enumValues: [string, ...string[]];
1090
+ baseColumn: never;
1091
+ identity: undefined;
1092
+ generated: undefined;
1093
+ }, {}, {
1094
+ length: 255;
1095
+ }>;
1096
+ uploadId: drizzle_orm_pg_core0.PgColumn<{
1097
+ name: "uploadId";
1098
+ tableName: "storage_assets";
1099
+ dataType: "string";
1100
+ columnType: "PgUUID";
1101
+ data: string;
1102
+ driverParam: string;
1103
+ notNull: true;
1104
+ hasDefault: true;
1105
+ isPrimaryKey: false;
1106
+ isAutoincrement: false;
1107
+ hasRuntimeDefault: false;
1108
+ enumValues: undefined;
1109
+ baseColumn: never;
1110
+ identity: undefined;
1111
+ generated: undefined;
1112
+ }, {}, {}>;
1113
+ name: drizzle_orm_pg_core0.PgColumn<{
1114
+ name: "name";
1115
+ tableName: "storage_assets";
1116
+ dataType: "string";
1117
+ columnType: "PgText";
1118
+ data: string;
1119
+ driverParam: string;
1120
+ notNull: false;
1121
+ hasDefault: false;
1122
+ isPrimaryKey: false;
1123
+ isAutoincrement: false;
1124
+ hasRuntimeDefault: false;
1125
+ enumValues: [string, ...string[]];
1126
+ baseColumn: never;
1127
+ identity: undefined;
1128
+ generated: undefined;
1129
+ }, {}, {}>;
1130
+ metadata: drizzle_orm_pg_core0.PgColumn<{
1131
+ name: "metadata";
1132
+ tableName: "storage_assets";
1133
+ dataType: "json";
1134
+ columnType: "PgJsonb";
1135
+ data: unknown;
1136
+ driverParam: unknown;
1137
+ notNull: false;
1138
+ hasDefault: false;
1139
+ isPrimaryKey: false;
1140
+ isAutoincrement: false;
1141
+ hasRuntimeDefault: false;
1142
+ enumValues: undefined;
1143
+ baseColumn: never;
1144
+ identity: undefined;
1145
+ generated: undefined;
1146
+ }, {}, {}>;
1147
+ etag: drizzle_orm_pg_core0.PgColumn<{
1148
+ name: "etag";
1149
+ tableName: "storage_assets";
1150
+ dataType: "string";
1151
+ columnType: "PgText";
1152
+ data: string;
1153
+ driverParam: string;
1154
+ notNull: false;
1155
+ hasDefault: false;
1156
+ isPrimaryKey: false;
1157
+ isAutoincrement: false;
1158
+ hasRuntimeDefault: false;
1159
+ enumValues: [string, ...string[]];
1160
+ baseColumn: never;
1161
+ identity: undefined;
1162
+ generated: undefined;
1163
+ }, {}, {}>;
1164
+ uploadedAt: drizzle_orm_pg_core0.PgColumn<{
1165
+ name: "uploadedAt";
1166
+ tableName: "storage_assets";
1167
+ dataType: "date";
1168
+ columnType: "PgTimestamp";
1169
+ data: Date;
1170
+ driverParam: string;
1171
+ notNull: true;
1172
+ hasDefault: true;
1173
+ isPrimaryKey: false;
1174
+ isAutoincrement: false;
1175
+ hasRuntimeDefault: false;
1176
+ enumValues: undefined;
1177
+ baseColumn: never;
1178
+ identity: undefined;
1179
+ generated: undefined;
1180
+ }, {}, {}>;
1181
+ deletedAt: drizzle_orm_pg_core0.PgColumn<{
1182
+ name: "deletedAt";
1183
+ tableName: "storage_assets";
1184
+ dataType: "date";
1185
+ columnType: "PgTimestamp";
1186
+ data: Date;
1187
+ driverParam: string;
1188
+ notNull: false;
1189
+ hasDefault: false;
1190
+ isPrimaryKey: false;
1191
+ isAutoincrement: false;
1192
+ hasRuntimeDefault: false;
1193
+ enumValues: undefined;
1194
+ baseColumn: never;
1195
+ identity: undefined;
1196
+ generated: undefined;
1197
+ }, {}, {}>;
1198
+ id: drizzle_orm_pg_core0.PgColumn<{
1199
+ name: "id";
1200
+ tableName: "storage_assets";
1201
+ dataType: "string";
1202
+ columnType: "PgUUID";
1203
+ data: string;
1204
+ driverParam: string;
1205
+ notNull: true;
1206
+ hasDefault: true;
1207
+ isPrimaryKey: true;
1208
+ isAutoincrement: false;
1209
+ hasRuntimeDefault: true;
1210
+ enumValues: undefined;
1211
+ baseColumn: never;
1212
+ identity: undefined;
1213
+ generated: undefined;
1214
+ }, {}, {}>;
1215
+ createdAt: drizzle_orm_pg_core0.PgColumn<{
1216
+ name: "createdAt";
1217
+ tableName: "storage_assets";
1218
+ dataType: "date";
1219
+ columnType: "PgTimestamp";
1220
+ data: Date;
1221
+ driverParam: string;
1222
+ notNull: true;
1223
+ hasDefault: true;
1224
+ isPrimaryKey: false;
1225
+ isAutoincrement: false;
1226
+ hasRuntimeDefault: false;
1227
+ enumValues: undefined;
1228
+ baseColumn: never;
1229
+ identity: undefined;
1230
+ generated: undefined;
1231
+ }, {}, {}>;
1232
+ updatedAt: drizzle_orm_pg_core0.PgColumn<{
1233
+ name: "updatedAt";
1234
+ tableName: "storage_assets";
1235
+ dataType: "date";
1236
+ columnType: "PgTimestamp";
1237
+ data: Date;
1238
+ driverParam: string;
1239
+ notNull: true;
1240
+ hasDefault: true;
1241
+ isPrimaryKey: false;
1242
+ isAutoincrement: false;
1243
+ hasRuntimeDefault: false;
1244
+ enumValues: undefined;
1245
+ baseColumn: never;
1246
+ identity: undefined;
1247
+ generated: undefined;
1248
+ }, {}, {}>;
1249
+ }>;
61
1250
  /**
62
- * Get nodes by parent id
63
- */
64
- getNodesByParentId({
65
- filters,
66
- ...query
67
- }: GetNodesByParentIdInput): Promise<{
68
- name: string;
69
- namespace: string;
70
- type: "file" | "folder" | null;
71
- mode: "private" | "public" | null;
72
- subtype: "image" | "document" | "spreadsheet" | "video" | "audio" | "archive" | "other";
1251
+ * Fetches a single ready storage asset by key.
1252
+ *
1253
+ * This is the convenience wrapper around `getAssetByKeyQuery`.
1254
+ * Use this when you only need the result, not query composition.
1255
+ *
1256
+ * @param key - Asset key to look up
1257
+ * @returns The matching asset or `null` if none is found
1258
+ * @example
1259
+ * const asset = await storageService.getAssetByKey("uploads/abc/main");
1260
+ * if (!asset) return;
1261
+ */
1262
+ getAssetByKey(key: string): Promise<{
1263
+ provider: "s3";
1264
+ bucket: string;
1265
+ key: string;
1266
+ status: "error" | "pending" | "ready";
1267
+ visibility: "private" | "public";
73
1268
  size: number | null;
74
1269
  contentType: string | null;
75
- readonly: boolean | null;
76
- hidden: boolean | null;
77
- createdBy: string | null;
78
- isPending: boolean;
79
- isDeleted: boolean;
80
- orphanedAt: Date | null;
81
- parentId: string | null;
1270
+ uploadId: string;
1271
+ name: string | null;
1272
+ metadata: unknown;
1273
+ etag: string | null;
1274
+ uploadedAt: Date;
1275
+ deletedAt: Date | null;
82
1276
  id: string;
83
1277
  createdAt: Date;
84
1278
  updatedAt: Date;
85
- }[]>;
1279
+ } | null>;
86
1280
  /**
87
- * Get file url
1281
+ * Builds a base query for listing storage assets.
1282
+ *
1283
+ * Scope and defaults:
1284
+ * - Scoped to the current adapter provider (`this.#adapter.key`)
1285
+ * - Orders by newest first (`createdAt DESC`)
1286
+ *
1287
+ * This method returns a dynamic query so callers can extend it with
1288
+ * custom filters, joins, pagination, and limits.
1289
+ *
1290
+ * @returns A dynamic Drizzle query for listing assets
1291
+ * @example
1292
+ * const query = storageService
1293
+ * .listAssetsQuery()
1294
+ * .limit(50);
1295
+ * const assets = await query;
88
1296
  */
89
- getSignedURL(node: Node, options?: GetFileURLSchema): Promise<string>;
1297
+ listAssetsQuery(): drizzle_orm_pg_core0.PgSelectBase<"storage_assets", {
1298
+ provider: drizzle_orm_pg_core0.PgColumn<{
1299
+ name: "provider";
1300
+ tableName: "storage_assets";
1301
+ dataType: "string";
1302
+ columnType: "PgText";
1303
+ data: "s3";
1304
+ driverParam: string;
1305
+ notNull: true;
1306
+ hasDefault: false;
1307
+ isPrimaryKey: false;
1308
+ isAutoincrement: false;
1309
+ hasRuntimeDefault: false;
1310
+ enumValues: ["s3"];
1311
+ baseColumn: never;
1312
+ identity: undefined;
1313
+ generated: undefined;
1314
+ }, {}, {}>;
1315
+ bucket: drizzle_orm_pg_core0.PgColumn<{
1316
+ name: "bucket";
1317
+ tableName: "storage_assets";
1318
+ dataType: "string";
1319
+ columnType: "PgText";
1320
+ data: string;
1321
+ driverParam: string;
1322
+ notNull: true;
1323
+ hasDefault: false;
1324
+ isPrimaryKey: false;
1325
+ isAutoincrement: false;
1326
+ hasRuntimeDefault: false;
1327
+ enumValues: [string, ...string[]];
1328
+ baseColumn: never;
1329
+ identity: undefined;
1330
+ generated: undefined;
1331
+ }, {}, {}>;
1332
+ key: drizzle_orm_pg_core0.PgColumn<{
1333
+ name: "key";
1334
+ tableName: "storage_assets";
1335
+ dataType: "string";
1336
+ columnType: "PgText";
1337
+ data: string;
1338
+ driverParam: string;
1339
+ notNull: true;
1340
+ hasDefault: false;
1341
+ isPrimaryKey: false;
1342
+ isAutoincrement: false;
1343
+ hasRuntimeDefault: false;
1344
+ enumValues: [string, ...string[]];
1345
+ baseColumn: never;
1346
+ identity: undefined;
1347
+ generated: undefined;
1348
+ }, {}, {}>;
1349
+ status: drizzle_orm_pg_core0.PgColumn<{
1350
+ name: "status";
1351
+ tableName: "storage_assets";
1352
+ dataType: "string";
1353
+ columnType: "PgEnumColumn";
1354
+ data: "error" | "pending" | "ready";
1355
+ driverParam: string;
1356
+ notNull: true;
1357
+ hasDefault: false;
1358
+ isPrimaryKey: false;
1359
+ isAutoincrement: false;
1360
+ hasRuntimeDefault: false;
1361
+ enumValues: ["pending", "ready", "error"];
1362
+ baseColumn: never;
1363
+ identity: undefined;
1364
+ generated: undefined;
1365
+ }, {}, {}>;
1366
+ visibility: drizzle_orm_pg_core0.PgColumn<{
1367
+ name: "visibility";
1368
+ tableName: "storage_assets";
1369
+ dataType: "string";
1370
+ columnType: "PgEnumColumn";
1371
+ data: "private" | "public";
1372
+ driverParam: string;
1373
+ notNull: true;
1374
+ hasDefault: true;
1375
+ isPrimaryKey: false;
1376
+ isAutoincrement: false;
1377
+ hasRuntimeDefault: false;
1378
+ enumValues: ["private", "public"];
1379
+ baseColumn: never;
1380
+ identity: undefined;
1381
+ generated: undefined;
1382
+ }, {}, {}>;
1383
+ size: drizzle_orm_pg_core0.PgColumn<{
1384
+ name: "size";
1385
+ tableName: "storage_assets";
1386
+ dataType: "number";
1387
+ columnType: "PgInteger";
1388
+ data: number;
1389
+ driverParam: string | number;
1390
+ notNull: false;
1391
+ hasDefault: true;
1392
+ isPrimaryKey: false;
1393
+ isAutoincrement: false;
1394
+ hasRuntimeDefault: false;
1395
+ enumValues: undefined;
1396
+ baseColumn: never;
1397
+ identity: undefined;
1398
+ generated: undefined;
1399
+ }, {}, {}>;
1400
+ contentType: drizzle_orm_pg_core0.PgColumn<{
1401
+ name: "contentType";
1402
+ tableName: "storage_assets";
1403
+ dataType: "string";
1404
+ columnType: "PgVarchar";
1405
+ data: string;
1406
+ driverParam: string;
1407
+ notNull: false;
1408
+ hasDefault: false;
1409
+ isPrimaryKey: false;
1410
+ isAutoincrement: false;
1411
+ hasRuntimeDefault: false;
1412
+ enumValues: [string, ...string[]];
1413
+ baseColumn: never;
1414
+ identity: undefined;
1415
+ generated: undefined;
1416
+ }, {}, {
1417
+ length: 255;
1418
+ }>;
1419
+ uploadId: drizzle_orm_pg_core0.PgColumn<{
1420
+ name: "uploadId";
1421
+ tableName: "storage_assets";
1422
+ dataType: "string";
1423
+ columnType: "PgUUID";
1424
+ data: string;
1425
+ driverParam: string;
1426
+ notNull: true;
1427
+ hasDefault: true;
1428
+ isPrimaryKey: false;
1429
+ isAutoincrement: false;
1430
+ hasRuntimeDefault: false;
1431
+ enumValues: undefined;
1432
+ baseColumn: never;
1433
+ identity: undefined;
1434
+ generated: undefined;
1435
+ }, {}, {}>;
1436
+ name: drizzle_orm_pg_core0.PgColumn<{
1437
+ name: "name";
1438
+ tableName: "storage_assets";
1439
+ dataType: "string";
1440
+ columnType: "PgText";
1441
+ data: string;
1442
+ driverParam: string;
1443
+ notNull: false;
1444
+ hasDefault: false;
1445
+ isPrimaryKey: false;
1446
+ isAutoincrement: false;
1447
+ hasRuntimeDefault: false;
1448
+ enumValues: [string, ...string[]];
1449
+ baseColumn: never;
1450
+ identity: undefined;
1451
+ generated: undefined;
1452
+ }, {}, {}>;
1453
+ metadata: drizzle_orm_pg_core0.PgColumn<{
1454
+ name: "metadata";
1455
+ tableName: "storage_assets";
1456
+ dataType: "json";
1457
+ columnType: "PgJsonb";
1458
+ data: unknown;
1459
+ driverParam: unknown;
1460
+ notNull: false;
1461
+ hasDefault: false;
1462
+ isPrimaryKey: false;
1463
+ isAutoincrement: false;
1464
+ hasRuntimeDefault: false;
1465
+ enumValues: undefined;
1466
+ baseColumn: never;
1467
+ identity: undefined;
1468
+ generated: undefined;
1469
+ }, {}, {}>;
1470
+ etag: drizzle_orm_pg_core0.PgColumn<{
1471
+ name: "etag";
1472
+ tableName: "storage_assets";
1473
+ dataType: "string";
1474
+ columnType: "PgText";
1475
+ data: string;
1476
+ driverParam: string;
1477
+ notNull: false;
1478
+ hasDefault: false;
1479
+ isPrimaryKey: false;
1480
+ isAutoincrement: false;
1481
+ hasRuntimeDefault: false;
1482
+ enumValues: [string, ...string[]];
1483
+ baseColumn: never;
1484
+ identity: undefined;
1485
+ generated: undefined;
1486
+ }, {}, {}>;
1487
+ uploadedAt: drizzle_orm_pg_core0.PgColumn<{
1488
+ name: "uploadedAt";
1489
+ tableName: "storage_assets";
1490
+ dataType: "date";
1491
+ columnType: "PgTimestamp";
1492
+ data: Date;
1493
+ driverParam: string;
1494
+ notNull: true;
1495
+ hasDefault: true;
1496
+ isPrimaryKey: false;
1497
+ isAutoincrement: false;
1498
+ hasRuntimeDefault: false;
1499
+ enumValues: undefined;
1500
+ baseColumn: never;
1501
+ identity: undefined;
1502
+ generated: undefined;
1503
+ }, {}, {}>;
1504
+ deletedAt: drizzle_orm_pg_core0.PgColumn<{
1505
+ name: "deletedAt";
1506
+ tableName: "storage_assets";
1507
+ dataType: "date";
1508
+ columnType: "PgTimestamp";
1509
+ data: Date;
1510
+ driverParam: string;
1511
+ notNull: false;
1512
+ hasDefault: false;
1513
+ isPrimaryKey: false;
1514
+ isAutoincrement: false;
1515
+ hasRuntimeDefault: false;
1516
+ enumValues: undefined;
1517
+ baseColumn: never;
1518
+ identity: undefined;
1519
+ generated: undefined;
1520
+ }, {}, {}>;
1521
+ id: drizzle_orm_pg_core0.PgColumn<{
1522
+ name: "id";
1523
+ tableName: "storage_assets";
1524
+ dataType: "string";
1525
+ columnType: "PgUUID";
1526
+ data: string;
1527
+ driverParam: string;
1528
+ notNull: true;
1529
+ hasDefault: true;
1530
+ isPrimaryKey: true;
1531
+ isAutoincrement: false;
1532
+ hasRuntimeDefault: true;
1533
+ enumValues: undefined;
1534
+ baseColumn: never;
1535
+ identity: undefined;
1536
+ generated: undefined;
1537
+ }, {}, {}>;
1538
+ createdAt: drizzle_orm_pg_core0.PgColumn<{
1539
+ name: "createdAt";
1540
+ tableName: "storage_assets";
1541
+ dataType: "date";
1542
+ columnType: "PgTimestamp";
1543
+ data: Date;
1544
+ driverParam: string;
1545
+ notNull: true;
1546
+ hasDefault: true;
1547
+ isPrimaryKey: false;
1548
+ isAutoincrement: false;
1549
+ hasRuntimeDefault: false;
1550
+ enumValues: undefined;
1551
+ baseColumn: never;
1552
+ identity: undefined;
1553
+ generated: undefined;
1554
+ }, {}, {}>;
1555
+ updatedAt: drizzle_orm_pg_core0.PgColumn<{
1556
+ name: "updatedAt";
1557
+ tableName: "storage_assets";
1558
+ dataType: "date";
1559
+ columnType: "PgTimestamp";
1560
+ data: Date;
1561
+ driverParam: string;
1562
+ notNull: true;
1563
+ hasDefault: true;
1564
+ isPrimaryKey: false;
1565
+ isAutoincrement: false;
1566
+ hasRuntimeDefault: false;
1567
+ enumValues: undefined;
1568
+ baseColumn: never;
1569
+ identity: undefined;
1570
+ generated: undefined;
1571
+ }, {}, {}>;
1572
+ }, "single", Record<"storage_assets", "not-null">, true, never, {
1573
+ provider: "s3";
1574
+ bucket: string;
1575
+ key: string;
1576
+ status: "error" | "pending" | "ready";
1577
+ visibility: "private" | "public";
1578
+ size: number | null;
1579
+ contentType: string | null;
1580
+ uploadId: string;
1581
+ name: string | null;
1582
+ metadata: unknown;
1583
+ etag: string | null;
1584
+ uploadedAt: Date;
1585
+ deletedAt: Date | null;
1586
+ id: string;
1587
+ createdAt: Date;
1588
+ updatedAt: Date;
1589
+ }[], {
1590
+ provider: drizzle_orm_pg_core0.PgColumn<{
1591
+ name: "provider";
1592
+ tableName: "storage_assets";
1593
+ dataType: "string";
1594
+ columnType: "PgText";
1595
+ data: "s3";
1596
+ driverParam: string;
1597
+ notNull: true;
1598
+ hasDefault: false;
1599
+ isPrimaryKey: false;
1600
+ isAutoincrement: false;
1601
+ hasRuntimeDefault: false;
1602
+ enumValues: ["s3"];
1603
+ baseColumn: never;
1604
+ identity: undefined;
1605
+ generated: undefined;
1606
+ }, {}, {}>;
1607
+ bucket: drizzle_orm_pg_core0.PgColumn<{
1608
+ name: "bucket";
1609
+ tableName: "storage_assets";
1610
+ dataType: "string";
1611
+ columnType: "PgText";
1612
+ data: string;
1613
+ driverParam: string;
1614
+ notNull: true;
1615
+ hasDefault: false;
1616
+ isPrimaryKey: false;
1617
+ isAutoincrement: false;
1618
+ hasRuntimeDefault: false;
1619
+ enumValues: [string, ...string[]];
1620
+ baseColumn: never;
1621
+ identity: undefined;
1622
+ generated: undefined;
1623
+ }, {}, {}>;
1624
+ key: drizzle_orm_pg_core0.PgColumn<{
1625
+ name: "key";
1626
+ tableName: "storage_assets";
1627
+ dataType: "string";
1628
+ columnType: "PgText";
1629
+ data: string;
1630
+ driverParam: string;
1631
+ notNull: true;
1632
+ hasDefault: false;
1633
+ isPrimaryKey: false;
1634
+ isAutoincrement: false;
1635
+ hasRuntimeDefault: false;
1636
+ enumValues: [string, ...string[]];
1637
+ baseColumn: never;
1638
+ identity: undefined;
1639
+ generated: undefined;
1640
+ }, {}, {}>;
1641
+ status: drizzle_orm_pg_core0.PgColumn<{
1642
+ name: "status";
1643
+ tableName: "storage_assets";
1644
+ dataType: "string";
1645
+ columnType: "PgEnumColumn";
1646
+ data: "error" | "pending" | "ready";
1647
+ driverParam: string;
1648
+ notNull: true;
1649
+ hasDefault: false;
1650
+ isPrimaryKey: false;
1651
+ isAutoincrement: false;
1652
+ hasRuntimeDefault: false;
1653
+ enumValues: ["pending", "ready", "error"];
1654
+ baseColumn: never;
1655
+ identity: undefined;
1656
+ generated: undefined;
1657
+ }, {}, {}>;
1658
+ visibility: drizzle_orm_pg_core0.PgColumn<{
1659
+ name: "visibility";
1660
+ tableName: "storage_assets";
1661
+ dataType: "string";
1662
+ columnType: "PgEnumColumn";
1663
+ data: "private" | "public";
1664
+ driverParam: string;
1665
+ notNull: true;
1666
+ hasDefault: true;
1667
+ isPrimaryKey: false;
1668
+ isAutoincrement: false;
1669
+ hasRuntimeDefault: false;
1670
+ enumValues: ["private", "public"];
1671
+ baseColumn: never;
1672
+ identity: undefined;
1673
+ generated: undefined;
1674
+ }, {}, {}>;
1675
+ size: drizzle_orm_pg_core0.PgColumn<{
1676
+ name: "size";
1677
+ tableName: "storage_assets";
1678
+ dataType: "number";
1679
+ columnType: "PgInteger";
1680
+ data: number;
1681
+ driverParam: string | number;
1682
+ notNull: false;
1683
+ hasDefault: true;
1684
+ isPrimaryKey: false;
1685
+ isAutoincrement: false;
1686
+ hasRuntimeDefault: false;
1687
+ enumValues: undefined;
1688
+ baseColumn: never;
1689
+ identity: undefined;
1690
+ generated: undefined;
1691
+ }, {}, {}>;
1692
+ contentType: drizzle_orm_pg_core0.PgColumn<{
1693
+ name: "contentType";
1694
+ tableName: "storage_assets";
1695
+ dataType: "string";
1696
+ columnType: "PgVarchar";
1697
+ data: string;
1698
+ driverParam: string;
1699
+ notNull: false;
1700
+ hasDefault: false;
1701
+ isPrimaryKey: false;
1702
+ isAutoincrement: false;
1703
+ hasRuntimeDefault: false;
1704
+ enumValues: [string, ...string[]];
1705
+ baseColumn: never;
1706
+ identity: undefined;
1707
+ generated: undefined;
1708
+ }, {}, {
1709
+ length: 255;
1710
+ }>;
1711
+ uploadId: drizzle_orm_pg_core0.PgColumn<{
1712
+ name: "uploadId";
1713
+ tableName: "storage_assets";
1714
+ dataType: "string";
1715
+ columnType: "PgUUID";
1716
+ data: string;
1717
+ driverParam: string;
1718
+ notNull: true;
1719
+ hasDefault: true;
1720
+ isPrimaryKey: false;
1721
+ isAutoincrement: false;
1722
+ hasRuntimeDefault: false;
1723
+ enumValues: undefined;
1724
+ baseColumn: never;
1725
+ identity: undefined;
1726
+ generated: undefined;
1727
+ }, {}, {}>;
1728
+ name: drizzle_orm_pg_core0.PgColumn<{
1729
+ name: "name";
1730
+ tableName: "storage_assets";
1731
+ dataType: "string";
1732
+ columnType: "PgText";
1733
+ data: string;
1734
+ driverParam: string;
1735
+ notNull: false;
1736
+ hasDefault: false;
1737
+ isPrimaryKey: false;
1738
+ isAutoincrement: false;
1739
+ hasRuntimeDefault: false;
1740
+ enumValues: [string, ...string[]];
1741
+ baseColumn: never;
1742
+ identity: undefined;
1743
+ generated: undefined;
1744
+ }, {}, {}>;
1745
+ metadata: drizzle_orm_pg_core0.PgColumn<{
1746
+ name: "metadata";
1747
+ tableName: "storage_assets";
1748
+ dataType: "json";
1749
+ columnType: "PgJsonb";
1750
+ data: unknown;
1751
+ driverParam: unknown;
1752
+ notNull: false;
1753
+ hasDefault: false;
1754
+ isPrimaryKey: false;
1755
+ isAutoincrement: false;
1756
+ hasRuntimeDefault: false;
1757
+ enumValues: undefined;
1758
+ baseColumn: never;
1759
+ identity: undefined;
1760
+ generated: undefined;
1761
+ }, {}, {}>;
1762
+ etag: drizzle_orm_pg_core0.PgColumn<{
1763
+ name: "etag";
1764
+ tableName: "storage_assets";
1765
+ dataType: "string";
1766
+ columnType: "PgText";
1767
+ data: string;
1768
+ driverParam: string;
1769
+ notNull: false;
1770
+ hasDefault: false;
1771
+ isPrimaryKey: false;
1772
+ isAutoincrement: false;
1773
+ hasRuntimeDefault: false;
1774
+ enumValues: [string, ...string[]];
1775
+ baseColumn: never;
1776
+ identity: undefined;
1777
+ generated: undefined;
1778
+ }, {}, {}>;
1779
+ uploadedAt: drizzle_orm_pg_core0.PgColumn<{
1780
+ name: "uploadedAt";
1781
+ tableName: "storage_assets";
1782
+ dataType: "date";
1783
+ columnType: "PgTimestamp";
1784
+ data: Date;
1785
+ driverParam: string;
1786
+ notNull: true;
1787
+ hasDefault: true;
1788
+ isPrimaryKey: false;
1789
+ isAutoincrement: false;
1790
+ hasRuntimeDefault: false;
1791
+ enumValues: undefined;
1792
+ baseColumn: never;
1793
+ identity: undefined;
1794
+ generated: undefined;
1795
+ }, {}, {}>;
1796
+ deletedAt: drizzle_orm_pg_core0.PgColumn<{
1797
+ name: "deletedAt";
1798
+ tableName: "storage_assets";
1799
+ dataType: "date";
1800
+ columnType: "PgTimestamp";
1801
+ data: Date;
1802
+ driverParam: string;
1803
+ notNull: false;
1804
+ hasDefault: false;
1805
+ isPrimaryKey: false;
1806
+ isAutoincrement: false;
1807
+ hasRuntimeDefault: false;
1808
+ enumValues: undefined;
1809
+ baseColumn: never;
1810
+ identity: undefined;
1811
+ generated: undefined;
1812
+ }, {}, {}>;
1813
+ id: drizzle_orm_pg_core0.PgColumn<{
1814
+ name: "id";
1815
+ tableName: "storage_assets";
1816
+ dataType: "string";
1817
+ columnType: "PgUUID";
1818
+ data: string;
1819
+ driverParam: string;
1820
+ notNull: true;
1821
+ hasDefault: true;
1822
+ isPrimaryKey: true;
1823
+ isAutoincrement: false;
1824
+ hasRuntimeDefault: true;
1825
+ enumValues: undefined;
1826
+ baseColumn: never;
1827
+ identity: undefined;
1828
+ generated: undefined;
1829
+ }, {}, {}>;
1830
+ createdAt: drizzle_orm_pg_core0.PgColumn<{
1831
+ name: "createdAt";
1832
+ tableName: "storage_assets";
1833
+ dataType: "date";
1834
+ columnType: "PgTimestamp";
1835
+ data: Date;
1836
+ driverParam: string;
1837
+ notNull: true;
1838
+ hasDefault: true;
1839
+ isPrimaryKey: false;
1840
+ isAutoincrement: false;
1841
+ hasRuntimeDefault: false;
1842
+ enumValues: undefined;
1843
+ baseColumn: never;
1844
+ identity: undefined;
1845
+ generated: undefined;
1846
+ }, {}, {}>;
1847
+ updatedAt: drizzle_orm_pg_core0.PgColumn<{
1848
+ name: "updatedAt";
1849
+ tableName: "storage_assets";
1850
+ dataType: "date";
1851
+ columnType: "PgTimestamp";
1852
+ data: Date;
1853
+ driverParam: string;
1854
+ notNull: true;
1855
+ hasDefault: true;
1856
+ isPrimaryKey: false;
1857
+ isAutoincrement: false;
1858
+ hasRuntimeDefault: false;
1859
+ enumValues: undefined;
1860
+ baseColumn: never;
1861
+ identity: undefined;
1862
+ generated: undefined;
1863
+ }, {}, {}>;
1864
+ }>;
90
1865
  /**
91
- * Upload file to S3 and add it to the database
92
- **/
93
- uploadFile(input: UploadFileSchema & Pick<PutObjectInput, "body">): Promise<{
1866
+ * Lists storage assets using safe default pagination.
1867
+ *
1868
+ * This is the convenience wrapper around `listAssetsQuery`.
1869
+ * Use `listAssetsQuery()` directly when you need custom query composition.
1870
+ *
1871
+ * @returns Up to 100 storage assets sorted by newest first
1872
+ * @example
1873
+ * const assets = await storageService.listAssets();
1874
+ */
1875
+ listAssets(): Promise<{
1876
+ provider: "s3";
1877
+ bucket: string;
1878
+ key: string;
1879
+ status: "error" | "pending" | "ready";
1880
+ visibility: "private" | "public";
1881
+ size: number | null;
1882
+ contentType: string | null;
1883
+ uploadId: string;
1884
+ name: string | null;
1885
+ metadata: unknown;
1886
+ etag: string | null;
1887
+ uploadedAt: Date;
1888
+ deletedAt: Date | null;
94
1889
  id: string;
95
- readonly: boolean | null;
96
- type: "file" | "folder" | null;
97
1890
  createdAt: Date;
98
1891
  updatedAt: Date;
99
- name: string;
100
- mode: "private" | "public" | null;
101
- isPending: boolean;
102
- namespace: string;
103
- subtype: "image" | "document" | "spreadsheet" | "video" | "audio" | "archive" | "other";
1892
+ }[]>;
1893
+ /**
1894
+ * Creates a pending storage asset record and generates a presigned upload URL.
1895
+ *
1896
+ * Flow:
1897
+ * - Validates the input payload
1898
+ * - Inserts a `pending` asset in the catalog (`storage_assets`)
1899
+ * - Requests a presigned PUT URL from the storage adapter
1900
+ * - Marks the asset as `error` if URL generation fails
1901
+ *
1902
+ * This method is intended for direct-to-storage browser uploads.
1903
+ * The upload should be finalized later via a confirm step.
1904
+ *
1905
+ * @param props - Presign upload input (contentType, size, metadata)
1906
+ * @returns The created asset id, key, and presigned URL
1907
+ * @throws {ServerError} If intent creation or URL generation fails
1908
+ * @example
1909
+ * const result = await storageService.presignUpload({
1910
+ * contentType: "image/png",
1911
+ * size: 120_000,
1912
+ * metadata: { uploadToken: crypto.randomUUID() },
1913
+ * });
1914
+ * // result => { id, uploadId, key, presignedUrl }
1915
+ */
1916
+ presignUpload(props: PresignUploadInput): Promise<{
1917
+ presignedUrl: string;
1918
+ key: string;
1919
+ id: string;
1920
+ createdAt: Date;
1921
+ updatedAt: Date;
1922
+ name: string | null;
1923
+ metadata: unknown;
1924
+ provider: "s3";
1925
+ status: "error" | "pending" | "ready";
104
1926
  size: number | null;
1927
+ uploadId: string;
1928
+ visibility: "private" | "public";
105
1929
  contentType: string | null;
106
- hidden: boolean | null;
107
- createdBy: string | null;
108
- isDeleted: boolean;
109
- orphanedAt: Date | null;
110
- parentId: string | null;
1930
+ bucket: string;
1931
+ etag: string | null;
1932
+ uploadedAt: Date;
1933
+ deletedAt: Date | null;
111
1934
  }>;
112
1935
  /**
113
- * Presign a new upload
1936
+ * Confirms a direct-to-storage upload by verifying object existence
1937
+ * and transitioning the asset from `pending` to `ready`.
1938
+ *
1939
+ * Flow:
1940
+ * - Validates confirm input
1941
+ * - Loads the asset record scoped to the current adapter provider
1942
+ * - Returns early if asset is already `ready` (idempotent behavior)
1943
+ * - Verifies object existence/metadata via `adapter.headObject`
1944
+ * - Marks asset as `error` if verification fails
1945
+ * - Updates status to `ready` and stores upload metadata
1946
+ *
1947
+ * @param props - Confirm upload payload containing the asset uploadId
1948
+ * @returns The updated storage asset record
1949
+ * @throws {ServerError} If the asset is missing, verification fails, or update fails
1950
+ * @example
1951
+ * const asset = await storageService.confirmUpload("019d0051-2c0d-741e-9e3c-e5a5bc4d16a2");
1952
+ * // asset.status === "ready"
114
1953
  */
115
- presignUpload(input: PresignFileSchema): Promise<{
1954
+ confirmUpload(props: ConfirmUploadInput): Promise<{
1955
+ provider: "s3";
1956
+ bucket: string;
1957
+ key: string;
1958
+ status: "error" | "pending" | "ready";
1959
+ visibility: "private" | "public";
1960
+ size: number | null;
1961
+ contentType: string | null;
1962
+ uploadId: string;
1963
+ name: string | null;
1964
+ metadata: unknown;
1965
+ etag: string | null;
1966
+ uploadedAt: Date;
1967
+ deletedAt: Date | null;
116
1968
  id: string;
117
- presignedUrl: string;
118
- node: {
119
- id: string;
120
- readonly: boolean | null;
121
- type: "file" | "folder" | null;
122
- createdAt: Date;
123
- updatedAt: Date;
124
- name: string;
125
- mode: "private" | "public" | null;
126
- isPending: boolean;
127
- namespace: string;
128
- subtype: "image" | "document" | "spreadsheet" | "video" | "audio" | "archive" | "other";
129
- size: number | null;
130
- contentType: string | null;
131
- hidden: boolean | null;
132
- createdBy: string | null;
133
- isDeleted: boolean;
134
- orphanedAt: Date | null;
135
- parentId: string | null;
136
- };
1969
+ createdAt: Date;
1970
+ updatedAt: Date;
137
1971
  }>;
138
1972
  /**
139
- * Confirm a new upload
1973
+ * Uploads an asset directly from the server and persists its catalog record.
1974
+ *
1975
+ * Flow:
1976
+ * - Validates upload input
1977
+ * - Creates a `pending` asset record in `storage_assets`
1978
+ * - Uploads the object bytes through the storage adapter
1979
+ * - Marks the record as `ready` and stores upload metadata
1980
+ * - Marks the record as `error` if upload fails
1981
+ *
1982
+ * This method is intended for server-side uploads (non-presigned flow).
1983
+ * For browser direct uploads, use `presignUpload` + `confirmUpload`.
1984
+ *
1985
+ * @param props - Upload payload (body, contentType, size)
1986
+ * @returns The finalized storage asset record
1987
+ * @throws {ServerError} If record creation, upload, or finalization fails
1988
+ * @example
1989
+ * const asset = await storageService.upload({
1990
+ * body: fileBuffer,
1991
+ * contentType: "application/pdf",
1992
+ * size: fileBuffer.byteLength,
1993
+ * });
140
1994
  */
141
- confirmUpload(input: {
1995
+ upload(props: UploadInput): Promise<{
1996
+ provider: "s3";
1997
+ bucket: string;
1998
+ key: string;
1999
+ status: "error" | "pending" | "ready";
2000
+ visibility: "private" | "public";
2001
+ size: number | null;
2002
+ contentType: string | null;
2003
+ uploadId: string;
2004
+ name: string | null;
2005
+ metadata: unknown;
2006
+ etag: string | null;
2007
+ uploadedAt: Date;
2008
+ deletedAt: Date | null;
142
2009
  id: string;
143
- }): Promise<FileNode>;
2010
+ createdAt: Date;
2011
+ updatedAt: Date;
2012
+ }>;
144
2013
  /**
145
- * Generate preview version of the file
2014
+ * Retrieves the object content for a ready storage asset.
2015
+ *
2016
+ * Flow:
2017
+ * - Looks up the asset record by id, scoped to the current adapter provider
2018
+ * - Ensures the asset is in `ready` status
2019
+ * - Fetches object content from the storage adapter using the stored key
2020
+ *
2021
+ * @param id - The storage asset id
2022
+ * @returns The adapter object response (stream/body + metadata)
2023
+ * @throws {ServerError} If the asset does not exist or is not ready
2024
+ * @example
2025
+ * const object = await storageService.getObject("asset-123");
2026
+ * // object.body can be streamed/consumed by caller
146
2027
  */
147
- generatePreviews(input: {
148
- id: string;
149
- }): Promise<void>;
2028
+ getObject(input: string): Promise<{
2029
+ body: node_stream0.Readable;
2030
+ contentType?: string | null | undefined;
2031
+ size?: number | null | undefined;
2032
+ metadata?: Record<string, string> | undefined;
2033
+ }>;
2034
+ /**
2035
+ * Generates a presigned read URL for a ready storage asset.
2036
+ *
2037
+ * Flow:
2038
+ * - Validates the asset id
2039
+ * - Resolves the asset record scoped to the current adapter provider
2040
+ * - Ensures the asset is in `ready` status
2041
+ * - Delegates URL signing to the storage adapter using the stored key
2042
+ *
2043
+ * @param input - Storage asset id (UUID)
2044
+ * @param options - Optional URL options (for example expiration/disposition)
2045
+ * @returns A presigned URL for reading the object
2046
+ * @throws {ServerError} If the asset does not exist or is not ready
2047
+ * @example
2048
+ * const url = await storageService.getObjectURL("019d0051-2c0d-741e-9e3c-e5a5bc4d16a2", {
2049
+ * expiresIn: 3600,
2050
+ * });
2051
+ */
2052
+ getObjectURL(input: string, options?: GetObjectURLOptions): Promise<string>;
150
2053
  /**
151
- * Create a new folder
2054
+ * Soft deletes a single storage asset by id.
2055
+ *
2056
+ * This is a convenience wrapper around `deleteAssets`.
2057
+ *
2058
+ * @param input - Storage asset id (UUID)
2059
+ * @returns The soft-deleted asset record, or null if not found/already deleted
152
2060
  */
153
- createFolder(input: CreateFolderNodeSchema): Promise<{
2061
+ deleteAsset(input: string): Promise<{
2062
+ provider: "s3";
2063
+ bucket: string;
2064
+ key: string;
2065
+ status: "error" | "pending" | "ready";
2066
+ visibility: "private" | "public";
2067
+ size: number | null;
2068
+ contentType: string | null;
2069
+ uploadId: string;
2070
+ name: string | null;
2071
+ metadata: unknown;
2072
+ etag: string | null;
2073
+ uploadedAt: Date;
2074
+ deletedAt: Date | null;
154
2075
  id: string;
155
- readonly: boolean | null;
156
- type: "file" | "folder" | null;
157
2076
  createdAt: Date;
158
2077
  updatedAt: Date;
159
- name: string;
160
- mode: "private" | "public" | null;
161
- isPending: boolean;
162
- namespace: string;
163
- subtype: "image" | "document" | "spreadsheet" | "video" | "audio" | "archive" | "other";
2078
+ } | null>;
2079
+ /**
2080
+ * Soft deletes multiple storage assets by setting `deletedAt`.
2081
+ *
2082
+ * Flow:
2083
+ * - Validates and de-duplicates ids
2084
+ * - Resolves provider-scoped active records
2085
+ * - Marks matching rows as deleted by setting `deletedAt`
2086
+ *
2087
+ * @param input - Storage asset ids (UUID[])
2088
+ * @returns Soft-deleted asset records
2089
+ */
2090
+ deleteAssets(input: string[]): Promise<{
2091
+ provider: "s3";
2092
+ bucket: string;
2093
+ key: string;
2094
+ status: "error" | "pending" | "ready";
2095
+ visibility: "private" | "public";
164
2096
  size: number | null;
165
2097
  contentType: string | null;
166
- hidden: boolean | null;
167
- createdBy: string | null;
168
- isDeleted: boolean;
169
- orphanedAt: Date | null;
170
- parentId: string | null;
171
- }>;
2098
+ uploadId: string;
2099
+ name: string | null;
2100
+ metadata: unknown;
2101
+ etag: string | null;
2102
+ uploadedAt: Date;
2103
+ deletedAt: Date | null;
2104
+ id: string;
2105
+ createdAt: Date;
2106
+ updatedAt: Date;
2107
+ }[]>;
172
2108
  /**
173
- * Update a node
2109
+ * Restores a single soft-deleted storage asset.
2110
+ *
2111
+ * This is a convenience wrapper around `restoreAssets`.
2112
+ *
2113
+ * @param input - Storage asset id (UUID)
2114
+ * @returns The restored asset record, or null if not found/not deleted
174
2115
  */
175
- updateNode(input: {
2116
+ restoreAsset(input: string): Promise<{
2117
+ provider: "s3";
2118
+ bucket: string;
2119
+ key: string;
2120
+ status: "error" | "pending" | "ready";
2121
+ visibility: "private" | "public";
2122
+ size: number | null;
2123
+ contentType: string | null;
2124
+ uploadId: string;
2125
+ name: string | null;
2126
+ metadata: unknown;
2127
+ etag: string | null;
2128
+ uploadedAt: Date;
2129
+ deletedAt: Date | null;
176
2130
  id: string;
177
- data: UpdateNodeSchema;
178
- }): Promise<{
179
- name: string;
180
- namespace: string;
181
- type: "file" | "folder" | null;
182
- mode: "private" | "public" | null;
183
- subtype: "image" | "document" | "spreadsheet" | "video" | "audio" | "archive" | "other";
2131
+ createdAt: Date;
2132
+ updatedAt: Date;
2133
+ } | null>;
2134
+ /**
2135
+ * Restores multiple soft-deleted storage assets by clearing `deletedAt`.
2136
+ *
2137
+ * @param input - Storage asset ids (UUID[])
2138
+ * @returns Restored asset records
2139
+ */
2140
+ restoreAssets(input: string[]): Promise<{
2141
+ provider: "s3";
2142
+ bucket: string;
2143
+ key: string;
2144
+ status: "error" | "pending" | "ready";
2145
+ visibility: "private" | "public";
184
2146
  size: number | null;
185
2147
  contentType: string | null;
186
- readonly: boolean | null;
187
- hidden: boolean | null;
188
- createdBy: string | null;
189
- isPending: boolean;
190
- isDeleted: boolean;
191
- orphanedAt: Date | null;
192
- parentId: string | null;
2148
+ uploadId: string;
2149
+ name: string | null;
2150
+ metadata: unknown;
2151
+ etag: string | null;
2152
+ uploadedAt: Date;
2153
+ deletedAt: Date | null;
193
2154
  id: string;
194
2155
  createdAt: Date;
195
2156
  updatedAt: Date;
196
- }>;
2157
+ }[]>;
197
2158
  /**
198
- * Delete nodes
2159
+ * Hard deletes a single storage asset.
2160
+ *
2161
+ * This is a convenience wrapper around `purgeAssets`.
2162
+ *
2163
+ * @param input - Storage asset id (UUID)
2164
+ * @returns The purged asset record, or null if not found
199
2165
  */
200
- deleteNodes(input: BulkActionSchema): Promise<void>;
2166
+ purgeAsset(input: string): Promise<{
2167
+ key: string;
2168
+ id: string;
2169
+ createdAt: Date;
2170
+ updatedAt: Date;
2171
+ name: string | null;
2172
+ metadata: unknown;
2173
+ provider: "s3";
2174
+ status: "error" | "pending" | "ready";
2175
+ size: number | null;
2176
+ uploadId: string;
2177
+ visibility: "private" | "public";
2178
+ contentType: string | null;
2179
+ bucket: string;
2180
+ etag: string | null;
2181
+ uploadedAt: Date;
2182
+ deletedAt: Date | null;
2183
+ } | null>;
2184
+ /**
2185
+ * Hard deletes multiple storage assets.
2186
+ *
2187
+ * Flow:
2188
+ * - Validates and de-duplicates ids
2189
+ * - Resolves provider-scoped records
2190
+ * - Deletes physical objects from the adapter by key
2191
+ * - Hard deletes DB records
2192
+ *
2193
+ * @param input - Storage asset ids (UUID[])
2194
+ * @returns Purged asset records
2195
+ * @throws {ServerError} If provider deletion fails
2196
+ */
2197
+ purgeAssets(input: string[]): Promise<{
2198
+ key: string;
2199
+ id: string;
2200
+ createdAt: Date;
2201
+ updatedAt: Date;
2202
+ name: string | null;
2203
+ metadata: unknown;
2204
+ provider: "s3";
2205
+ status: "error" | "pending" | "ready";
2206
+ size: number | null;
2207
+ uploadId: string;
2208
+ visibility: "private" | "public";
2209
+ contentType: string | null;
2210
+ bucket: string;
2211
+ etag: string | null;
2212
+ uploadedAt: Date;
2213
+ deletedAt: Date | null;
2214
+ }[]>;
201
2215
  }
202
2216
  //#endregion
203
- export { StorageService, StorageServiceConfig };
2217
+ export { Storage, StorageConfig };
204
2218
  //# sourceMappingURL=service.server.d.mts.map