@vibesdotdev/media 0.0.0-stage → 1.0.0-rc.3

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 (278) hide show
  1. package/LICENSE +18 -0
  2. package/README.md +95 -2
  3. package/dist/analyzers/frame-guard.d.ts +6 -0
  4. package/dist/analyzers/frame-guard.d.ts.map +1 -0
  5. package/dist/analyzers/frame-guard.js +10 -0
  6. package/dist/analyzers/frame-guard.js.map +1 -0
  7. package/dist/analyzers/motion-math.d.ts +66 -0
  8. package/dist/analyzers/motion-math.d.ts.map +1 -0
  9. package/dist/analyzers/motion-math.js +356 -0
  10. package/dist/analyzers/motion-math.js.map +1 -0
  11. package/dist/analyzers/reference-motion-analyzer.impl.d.ts +23 -0
  12. package/dist/analyzers/reference-motion-analyzer.impl.d.ts.map +1 -0
  13. package/dist/analyzers/reference-motion-analyzer.impl.js +69 -0
  14. package/dist/analyzers/reference-motion-analyzer.impl.js.map +1 -0
  15. package/dist/analyzers/reference-motion.descriptor.d.ts +11 -0
  16. package/dist/analyzers/reference-motion.descriptor.d.ts.map +1 -0
  17. package/dist/analyzers/reference-motion.descriptor.js +21 -0
  18. package/dist/analyzers/reference-motion.descriptor.js.map +1 -0
  19. package/dist/capture-client.d.ts +34 -0
  20. package/dist/capture-client.d.ts.map +1 -0
  21. package/dist/capture-client.js +163 -0
  22. package/dist/capture-client.js.map +1 -0
  23. package/dist/config/media.uploads.config.descriptor.d.ts +27 -0
  24. package/dist/config/media.uploads.config.descriptor.d.ts.map +1 -0
  25. package/dist/config/media.uploads.config.descriptor.js +46 -0
  26. package/dist/config/media.uploads.config.descriptor.js.map +1 -0
  27. package/dist/config/uploads.d.ts +11 -0
  28. package/dist/config/uploads.d.ts.map +1 -0
  29. package/dist/config/uploads.js +25 -0
  30. package/dist/config/uploads.js.map +1 -0
  31. package/dist/docs/artifact-references.docs.descriptor.d.ts +4 -0
  32. package/dist/docs/artifact-references.docs.descriptor.d.ts.map +1 -0
  33. package/dist/docs/artifact-references.docs.descriptor.js +69 -0
  34. package/dist/docs/artifact-references.docs.descriptor.js.map +1 -0
  35. package/dist/docs/image-transform.docs.descriptor.d.ts +4 -0
  36. package/dist/docs/image-transform.docs.descriptor.d.ts.map +1 -0
  37. package/dist/docs/image-transform.docs.descriptor.js +52 -0
  38. package/dist/docs/image-transform.docs.descriptor.js.map +1 -0
  39. package/dist/index.d.ts +48 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +49 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/interfaces/capture-provider.d.ts +33 -0
  44. package/dist/interfaces/capture-provider.d.ts.map +1 -0
  45. package/dist/interfaces/capture-provider.js +10 -0
  46. package/dist/interfaces/capture-provider.js.map +1 -0
  47. package/dist/interfaces/image-transformer.d.ts +7 -0
  48. package/dist/interfaces/image-transformer.d.ts.map +1 -0
  49. package/dist/interfaces/image-transformer.js +2 -0
  50. package/dist/interfaces/image-transformer.js.map +1 -0
  51. package/dist/interfaces/index.d.ts +7 -0
  52. package/dist/interfaces/index.d.ts.map +1 -0
  53. package/dist/interfaces/index.js +5 -0
  54. package/dist/interfaces/index.js.map +1 -0
  55. package/dist/interfaces/motion-analyzer.d.ts +55 -0
  56. package/dist/interfaces/motion-analyzer.d.ts.map +1 -0
  57. package/dist/interfaces/motion-analyzer.js +14 -0
  58. package/dist/interfaces/motion-analyzer.js.map +1 -0
  59. package/dist/kinds/capture.d.ts +58 -0
  60. package/dist/kinds/capture.d.ts.map +1 -0
  61. package/dist/kinds/capture.js +34 -0
  62. package/dist/kinds/capture.js.map +1 -0
  63. package/dist/kinds/image-transform.d.ts +91 -0
  64. package/dist/kinds/image-transform.d.ts.map +1 -0
  65. package/dist/kinds/image-transform.js +12 -0
  66. package/dist/kinds/image-transform.js.map +1 -0
  67. package/dist/kinds/index.d.ts +10 -0
  68. package/dist/kinds/index.d.ts.map +1 -0
  69. package/dist/kinds/index.js +7 -0
  70. package/dist/kinds/index.js.map +1 -0
  71. package/dist/kinds/motion.d.ts +57 -0
  72. package/dist/kinds/motion.d.ts.map +1 -0
  73. package/dist/kinds/motion.js +34 -0
  74. package/dist/kinds/motion.js.map +1 -0
  75. package/dist/media.plugin.d.ts +23 -0
  76. package/dist/media.plugin.d.ts.map +1 -0
  77. package/dist/media.plugin.js +48 -0
  78. package/dist/media.plugin.js.map +1 -0
  79. package/dist/schemas/artifact-reference.d.ts +59 -0
  80. package/dist/schemas/artifact-reference.d.ts.map +1 -0
  81. package/dist/schemas/artifact-reference.js +77 -0
  82. package/dist/schemas/artifact-reference.js.map +1 -0
  83. package/dist/schemas/capture-descriptor.d.ts +71 -0
  84. package/dist/schemas/capture-descriptor.d.ts.map +1 -0
  85. package/dist/schemas/capture-descriptor.js +74 -0
  86. package/dist/schemas/capture-descriptor.js.map +1 -0
  87. package/dist/schemas/capture-options.d.ts +51 -0
  88. package/dist/schemas/capture-options.d.ts.map +1 -0
  89. package/dist/schemas/capture-options.js +68 -0
  90. package/dist/schemas/capture-options.js.map +1 -0
  91. package/dist/schemas/capture-parse.d.ts +10 -0
  92. package/dist/schemas/capture-parse.d.ts.map +1 -0
  93. package/dist/schemas/capture-parse.js +30 -0
  94. package/dist/schemas/capture-parse.js.map +1 -0
  95. package/dist/schemas/capture-state.d.ts +77 -0
  96. package/dist/schemas/capture-state.d.ts.map +1 -0
  97. package/dist/schemas/capture-state.js +25 -0
  98. package/dist/schemas/capture-state.js.map +1 -0
  99. package/dist/schemas/image-transform.d.ts +269 -0
  100. package/dist/schemas/image-transform.d.ts.map +1 -0
  101. package/dist/schemas/image-transform.js +161 -0
  102. package/dist/schemas/image-transform.js.map +1 -0
  103. package/dist/schemas/index.d.ts +20 -0
  104. package/dist/schemas/index.d.ts.map +1 -0
  105. package/dist/schemas/index.js +17 -0
  106. package/dist/schemas/index.js.map +1 -0
  107. package/dist/schemas/motion-analysis.d.ts +187 -0
  108. package/dist/schemas/motion-analysis.d.ts.map +1 -0
  109. package/dist/schemas/motion-analysis.js +213 -0
  110. package/dist/schemas/motion-analysis.js.map +1 -0
  111. package/dist/schemas/motion-descriptor.d.ts +53 -0
  112. package/dist/schemas/motion-descriptor.d.ts.map +1 -0
  113. package/dist/schemas/motion-descriptor.js +47 -0
  114. package/dist/schemas/motion-descriptor.js.map +1 -0
  115. package/dist/schemas/motion-frame.d.ts +63 -0
  116. package/dist/schemas/motion-frame.d.ts.map +1 -0
  117. package/dist/schemas/motion-frame.js +86 -0
  118. package/dist/schemas/motion-frame.js.map +1 -0
  119. package/dist/schemas/opaque-id.d.ts +10 -0
  120. package/dist/schemas/opaque-id.d.ts.map +1 -0
  121. package/dist/schemas/opaque-id.js +24 -0
  122. package/dist/schemas/opaque-id.js.map +1 -0
  123. package/dist/schemas/sharing-state.d.ts +43 -0
  124. package/dist/schemas/sharing-state.d.ts.map +1 -0
  125. package/dist/schemas/sharing-state.js +11 -0
  126. package/dist/schemas/sharing-state.js.map +1 -0
  127. package/dist/svelte/CaptureLoader.svelte +29 -0
  128. package/dist/svelte/CaptureLoader.svelte.d.ts +11 -0
  129. package/dist/svelte/CaptureLoader.svelte.d.ts.map +1 -0
  130. package/dist/svelte/CapturePanel.svelte +189 -0
  131. package/dist/svelte/CapturePanel.svelte.d.ts +12 -0
  132. package/dist/svelte/CapturePanel.svelte.d.ts.map +1 -0
  133. package/dist/svelte/MediaUploader.svelte +109 -0
  134. package/dist/svelte/MediaUploader.svelte.d.ts +5 -0
  135. package/dist/svelte/MediaUploader.svelte.d.ts.map +1 -0
  136. package/dist/svelte/capture-parse.d.ts +2 -0
  137. package/dist/svelte/capture-parse.d.ts.map +1 -0
  138. package/dist/svelte/capture-parse.js +1 -0
  139. package/dist/svelte/failure-message.d.ts +2 -0
  140. package/dist/svelte/failure-message.d.ts.map +1 -0
  141. package/dist/svelte/failure-message.js +1 -0
  142. package/dist/svelte/index.d.ts +8 -0
  143. package/dist/svelte/index.d.ts.map +1 -0
  144. package/dist/svelte/index.js +6 -0
  145. package/dist/svelte/runtime-log.d.ts +14 -0
  146. package/dist/svelte/runtime-log.d.ts.map +1 -0
  147. package/dist/svelte/runtime-log.js +19 -0
  148. package/dist/svelte/runtime.d.ts +9 -0
  149. package/dist/svelte/runtime.d.ts.map +1 -0
  150. package/dist/svelte/runtime.js +27 -0
  151. package/dist/svelte/sharing/README.md +38 -0
  152. package/dist/svelte/sharing/components/ShareButton.svelte +57 -0
  153. package/dist/svelte/sharing/components/ShareButton.svelte.d.ts +11 -0
  154. package/dist/svelte/sharing/components/ShareButton.svelte.d.ts.map +1 -0
  155. package/dist/svelte/sharing/components/ShareDialog.svelte +222 -0
  156. package/dist/svelte/sharing/components/ShareDialog.svelte.d.ts +8 -0
  157. package/dist/svelte/sharing/components/ShareDialog.svelte.d.ts.map +1 -0
  158. package/dist/svelte/sharing/components/ShareLoader.svelte +19 -0
  159. package/dist/svelte/sharing/components/ShareLoader.svelte.d.ts +7 -0
  160. package/dist/svelte/sharing/components/ShareLoader.svelte.d.ts.map +1 -0
  161. package/dist/svelte/sharing/index.d.ts +20 -0
  162. package/dist/svelte/sharing/index.d.ts.map +1 -0
  163. package/dist/svelte/sharing/index.js +19 -0
  164. package/dist/svelte/sharing/runtime.d.ts +44 -0
  165. package/dist/svelte/sharing/runtime.d.ts.map +1 -0
  166. package/dist/svelte/sharing/runtime.js +81 -0
  167. package/dist/svelte/sharing/state.svelte.d.ts +28 -0
  168. package/dist/svelte/sharing/state.svelte.d.ts.map +1 -0
  169. package/dist/svelte/sharing/state.svelte.js +101 -0
  170. package/dist/svelte/sharing/styles.css +8 -0
  171. package/dist/svelte/state.svelte.d.ts +38 -0
  172. package/dist/svelte/state.svelte.d.ts.map +1 -0
  173. package/dist/svelte/state.svelte.js +102 -0
  174. package/dist/svelte/styles.css +2 -0
  175. package/dist/svelte/uploader.d.ts +17 -0
  176. package/dist/svelte/uploader.d.ts.map +1 -0
  177. package/dist/svelte/uploader.js +9 -0
  178. package/dist/uploads/adapters/local/index.d.ts +9 -0
  179. package/dist/uploads/adapters/local/index.d.ts.map +1 -0
  180. package/dist/uploads/adapters/local/index.js +12 -0
  181. package/dist/uploads/adapters/local/index.js.map +1 -0
  182. package/dist/uploads/adapters/local/local-storage.descriptor.d.ts +24 -0
  183. package/dist/uploads/adapters/local/local-storage.descriptor.d.ts.map +1 -0
  184. package/dist/uploads/adapters/local/local-storage.descriptor.js +20 -0
  185. package/dist/uploads/adapters/local/local-storage.descriptor.js.map +1 -0
  186. package/dist/uploads/adapters/local/local-storage.impl.d.ts +123 -0
  187. package/dist/uploads/adapters/local/local-storage.impl.d.ts.map +1 -0
  188. package/dist/uploads/adapters/local/local-storage.impl.js +231 -0
  189. package/dist/uploads/adapters/local/local-storage.impl.js.map +1 -0
  190. package/dist/uploads/adapters/local/uploads-adapter-local.plugin.d.ts +9 -0
  191. package/dist/uploads/adapters/local/uploads-adapter-local.plugin.d.ts.map +1 -0
  192. package/dist/uploads/adapters/local/uploads-adapter-local.plugin.js +41 -0
  193. package/dist/uploads/adapters/local/uploads-adapter-local.plugin.js.map +1 -0
  194. package/dist/uploads/client/helper.d.ts +26 -0
  195. package/dist/uploads/client/helper.d.ts.map +1 -0
  196. package/dist/uploads/client/helper.js +27 -0
  197. package/dist/uploads/client/helper.js.map +1 -0
  198. package/dist/uploads/client/index.d.ts +11 -0
  199. package/dist/uploads/client/index.d.ts.map +1 -0
  200. package/dist/uploads/client/index.js +9 -0
  201. package/dist/uploads/client/index.js.map +1 -0
  202. package/dist/uploads/client/sharing-client.d.ts +45 -0
  203. package/dist/uploads/client/sharing-client.d.ts.map +1 -0
  204. package/dist/uploads/client/sharing-client.js +153 -0
  205. package/dist/uploads/client/sharing-client.js.map +1 -0
  206. package/dist/uploads/client/uploads-client.d.ts +200 -0
  207. package/dist/uploads/client/uploads-client.d.ts.map +1 -0
  208. package/dist/uploads/client/uploads-client.js +487 -0
  209. package/dist/uploads/client/uploads-client.js.map +1 -0
  210. package/dist/uploads/docs/uploads.docs.descriptor.d.ts +4 -0
  211. package/dist/uploads/docs/uploads.docs.descriptor.d.ts.map +1 -0
  212. package/dist/uploads/docs/uploads.docs.descriptor.js +65 -0
  213. package/dist/uploads/docs/uploads.docs.descriptor.js.map +1 -0
  214. package/dist/uploads/docs/uploads.share-links.docs.descriptor.d.ts +22 -0
  215. package/dist/uploads/docs/uploads.share-links.docs.descriptor.d.ts.map +1 -0
  216. package/dist/uploads/docs/uploads.share-links.docs.descriptor.js +86 -0
  217. package/dist/uploads/docs/uploads.share-links.docs.descriptor.js.map +1 -0
  218. package/dist/uploads/index.d.ts +12 -0
  219. package/dist/uploads/index.d.ts.map +1 -0
  220. package/dist/uploads/index.js +13 -0
  221. package/dist/uploads/index.js.map +1 -0
  222. package/dist/uploads/schemas/common.d.ts +135 -0
  223. package/dist/uploads/schemas/common.d.ts.map +1 -0
  224. package/dist/uploads/schemas/common.js +152 -0
  225. package/dist/uploads/schemas/common.js.map +1 -0
  226. package/dist/uploads/schemas/forms.d.ts +59 -0
  227. package/dist/uploads/schemas/forms.d.ts.map +1 -0
  228. package/dist/uploads/schemas/forms.js +41 -0
  229. package/dist/uploads/schemas/forms.js.map +1 -0
  230. package/dist/uploads/schemas/index.d.ts +18 -0
  231. package/dist/uploads/schemas/index.d.ts.map +1 -0
  232. package/dist/uploads/schemas/index.js +13 -0
  233. package/dist/uploads/schemas/index.js.map +1 -0
  234. package/dist/uploads/schemas/records.d.ts +81 -0
  235. package/dist/uploads/schemas/records.d.ts.map +1 -0
  236. package/dist/uploads/schemas/records.js +82 -0
  237. package/dist/uploads/schemas/records.js.map +1 -0
  238. package/dist/uploads/schemas/requests.d.ts +32 -0
  239. package/dist/uploads/schemas/requests.d.ts.map +1 -0
  240. package/dist/uploads/schemas/requests.js +30 -0
  241. package/dist/uploads/schemas/requests.js.map +1 -0
  242. package/dist/uploads/schemas/shares.d.ts +67 -0
  243. package/dist/uploads/schemas/shares.d.ts.map +1 -0
  244. package/dist/uploads/schemas/shares.js +39 -0
  245. package/dist/uploads/schemas/shares.js.map +1 -0
  246. package/dist/uploads/server/backend.d.ts +8 -0
  247. package/dist/uploads/server/backend.d.ts.map +1 -0
  248. package/dist/uploads/server/backend.js +11 -0
  249. package/dist/uploads/server/backend.js.map +1 -0
  250. package/dist/uploads/server/config.d.ts +5 -0
  251. package/dist/uploads/server/config.d.ts.map +1 -0
  252. package/dist/uploads/server/config.js +38 -0
  253. package/dist/uploads/server/config.js.map +1 -0
  254. package/dist/uploads/server/service.d.ts +77 -0
  255. package/dist/uploads/server/service.d.ts.map +1 -0
  256. package/dist/uploads/server/service.js +152 -0
  257. package/dist/uploads/server/service.js.map +1 -0
  258. package/dist/uploads/server/storage-client.d.ts +11 -0
  259. package/dist/uploads/server/storage-client.d.ts.map +1 -0
  260. package/dist/uploads/server/storage-client.js +23 -0
  261. package/dist/uploads/server/storage-client.js.map +1 -0
  262. package/dist/uploads/server/storage.d.ts +40 -0
  263. package/dist/uploads/server/storage.d.ts.map +1 -0
  264. package/dist/uploads/server/storage.js +59 -0
  265. package/dist/uploads/server/storage.js.map +1 -0
  266. package/dist/uploads/uploads.plugin.d.ts +11 -0
  267. package/dist/uploads/uploads.plugin.d.ts.map +1 -0
  268. package/dist/uploads/uploads.plugin.js +89 -0
  269. package/dist/uploads/uploads.plugin.js.map +1 -0
  270. package/dist/utils/attempt.d.ts +27 -0
  271. package/dist/utils/attempt.d.ts.map +1 -0
  272. package/dist/utils/attempt.js +39 -0
  273. package/dist/utils/attempt.js.map +1 -0
  274. package/dist/utils/failure-message.d.ts +8 -0
  275. package/dist/utils/failure-message.d.ts.map +1 -0
  276. package/dist/utils/failure-message.js +28 -0
  277. package/dist/utils/failure-message.js.map +1 -0
  278. package/package.json +257 -4
@@ -0,0 +1,81 @@
1
+ /**
2
+ * Upload Record Schemas
3
+ *
4
+ * Pure Zod schemas for upload records. These are the canonical source of truth
5
+ * for upload data shapes, replacing the previous drizzle-orm/pg-core table
6
+ * definitions. Apps that need persistence define their own drizzle tables in
7
+ * app-level db/ directories and map to/from these wire shapes via
8
+ * storage/transform registrations.
9
+ */
10
+ import * as z from 'zod/v4';
11
+ export declare const uploadRecordSchema: z.ZodObject<{
12
+ id: z.ZodUUID;
13
+ userId: z.ZodUUID;
14
+ kind: z.ZodEnum<{
15
+ document: "document";
16
+ media: "media";
17
+ chat: "chat";
18
+ avatar: "avatar";
19
+ }>;
20
+ storagePath: z.ZodString;
21
+ bucket: z.ZodOptional<z.ZodNullable<z.ZodString>>;
22
+ key: z.ZodOptional<z.ZodNullable<z.ZodString>>;
23
+ originalName: z.ZodOptional<z.ZodNullable<z.ZodString>>;
24
+ contentType: z.ZodOptional<z.ZodNullable<z.ZodString>>;
25
+ size: z.ZodNumber;
26
+ conversationId: z.ZodOptional<z.ZodNullable<z.ZodUUID>>;
27
+ isPublic: z.ZodDefault<z.ZodBoolean>;
28
+ createdAt: z.ZodDate;
29
+ updatedAt: z.ZodDate;
30
+ deletedAt: z.ZodOptional<z.ZodNullable<z.ZodDate>>;
31
+ }, z.core.$strip>;
32
+ export type Upload = z.infer<typeof uploadRecordSchema>;
33
+ export declare const newUploadSchema: z.ZodObject<{
34
+ userId: z.ZodUUID;
35
+ kind: z.ZodEnum<{
36
+ document: "document";
37
+ media: "media";
38
+ chat: "chat";
39
+ avatar: "avatar";
40
+ }>;
41
+ storagePath: z.ZodString;
42
+ bucket: z.ZodOptional<z.ZodNullable<z.ZodString>>;
43
+ key: z.ZodOptional<z.ZodNullable<z.ZodString>>;
44
+ originalName: z.ZodOptional<z.ZodNullable<z.ZodString>>;
45
+ contentType: z.ZodOptional<z.ZodNullable<z.ZodString>>;
46
+ size: z.ZodNumber;
47
+ conversationId: z.ZodOptional<z.ZodNullable<z.ZodUUID>>;
48
+ isPublic: z.ZodOptional<z.ZodBoolean>;
49
+ }, z.core.$strip>;
50
+ export type NewUpload = z.infer<typeof newUploadSchema>;
51
+ export declare const uploadUpdateSchema: z.ZodObject<{
52
+ key: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodString>>>;
53
+ size: z.ZodOptional<z.ZodNumber>;
54
+ isPublic: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
55
+ contentType: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodString>>>;
56
+ updatedAt: z.ZodOptional<z.ZodDate>;
57
+ bucket: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodString>>>;
58
+ storagePath: z.ZodOptional<z.ZodString>;
59
+ originalName: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodString>>>;
60
+ conversationId: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodUUID>>>;
61
+ deletedAt: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodDate>>>;
62
+ }, z.core.$strip>;
63
+ export type UploadUpdate = z.infer<typeof uploadUpdateSchema>;
64
+ export interface UploadFilter {
65
+ id?: string;
66
+ userId?: string;
67
+ kind?: 'media' | 'chat' | 'avatar' | 'document';
68
+ conversationId?: string | null;
69
+ isPublic?: boolean;
70
+ includeDeleted?: boolean;
71
+ }
72
+ /**
73
+ * Apply a filter to an array of uploads (in-memory or client-side filtering).
74
+ * Server-side persistence should use the app's storage adapter / CRUD endpoint.
75
+ */
76
+ export declare function filterUploads(uploads: Upload[], filter: UploadFilter): Upload[];
77
+ /**
78
+ * Sort uploads by createdAt descending (newest first).
79
+ */
80
+ export declare function sortUploadsByCreatedAt(uploads: Upload[]): Upload[];
81
+ //# sourceMappingURL=records.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"records.d.ts","sourceRoot":"","sources":["../../../src/uploads/schemas/records.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAK5B,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;iBAe7B,CAAC;AAEH,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAIxD,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;iBAW1B,CAAC;AAEH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAIxD,eAAO,MAAM,kBAAkB;;;;;;;;;;;iBAW7B,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAI9D,MAAM,WAAW,YAAY;IAC5B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,UAAU,CAAC;IAChD,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,YAAY,GAAG,MAAM,EAAE,CAW/E;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAElE"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Upload Record Schemas
3
+ *
4
+ * Pure Zod schemas for upload records. These are the canonical source of truth
5
+ * for upload data shapes, replacing the previous drizzle-orm/pg-core table
6
+ * definitions. Apps that need persistence define their own drizzle tables in
7
+ * app-level db/ directories and map to/from these wire shapes via
8
+ * storage/transform registrations.
9
+ */
10
+ import * as z from 'zod/v4';
11
+ import { uploadKindSchema } from "./common.js";
12
+ // ── Core upload record schema ──────────────────────────────────────────────
13
+ export const uploadRecordSchema = z.object({
14
+ id: z.uuid(),
15
+ userId: z.uuid(),
16
+ kind: uploadKindSchema,
17
+ storagePath: z.string().min(1),
18
+ bucket: z.string().nullable().optional(),
19
+ key: z.string().nullable().optional(),
20
+ originalName: z.string().nullable().optional(),
21
+ contentType: z.string().nullable().optional(),
22
+ size: z.number().int().min(0),
23
+ conversationId: z.uuid().nullable().optional(),
24
+ isPublic: z.boolean().default(false),
25
+ createdAt: z.date(),
26
+ updatedAt: z.date(),
27
+ deletedAt: z.date().nullable().optional()
28
+ });
29
+ // ── New upload (insert) schema ───────────────────────────────────────────────
30
+ export const newUploadSchema = z.object({
31
+ userId: z.uuid(),
32
+ kind: uploadKindSchema,
33
+ storagePath: z.string().min(1),
34
+ bucket: z.string().nullable().optional(),
35
+ key: z.string().nullable().optional(),
36
+ originalName: z.string().nullable().optional(),
37
+ contentType: z.string().nullable().optional(),
38
+ size: z.number().int().min(0),
39
+ conversationId: z.uuid().nullable().optional(),
40
+ isPublic: z.boolean().optional()
41
+ });
42
+ // ── Partial update schema ───────────────────────────────────────────────────
43
+ export const uploadUpdateSchema = uploadRecordSchema.partial().pick({
44
+ storagePath: true,
45
+ bucket: true,
46
+ key: true,
47
+ originalName: true,
48
+ contentType: true,
49
+ size: true,
50
+ conversationId: true,
51
+ isPublic: true,
52
+ deletedAt: true,
53
+ updatedAt: true
54
+ });
55
+ /**
56
+ * Apply a filter to an array of uploads (in-memory or client-side filtering).
57
+ * Server-side persistence should use the app's storage adapter / CRUD endpoint.
58
+ */
59
+ export function filterUploads(uploads, filter) {
60
+ return uploads.filter((u) => {
61
+ if (filter.id !== undefined && u.id !== filter.id)
62
+ return false;
63
+ if (filter.userId !== undefined && u.userId !== filter.userId)
64
+ return false;
65
+ if (filter.kind !== undefined && u.kind !== filter.kind)
66
+ return false;
67
+ if (filter.conversationId !== undefined && u.conversationId !== filter.conversationId)
68
+ return false;
69
+ if (filter.isPublic !== undefined && u.isPublic !== filter.isPublic)
70
+ return false;
71
+ if (!filter.includeDeleted && u.deletedAt != null)
72
+ return false;
73
+ return true;
74
+ });
75
+ }
76
+ /**
77
+ * Sort uploads by createdAt descending (newest first).
78
+ */
79
+ export function sortUploadsByCreatedAt(uploads) {
80
+ return [...uploads].sort((a, b) => b.createdAt.getTime() - a.createdAt.getTime());
81
+ }
82
+ //# sourceMappingURL=records.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"records.js","sourceRoot":"","sources":["../../../src/uploads/schemas/records.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import * as z from 'zod/v4';
2
+ /** Copy native payloads while parsing so later reads use trusted intrinsic metadata. */
3
+ export declare const uploadPayloadSchema: z.ZodUnion<readonly [z.ZodPipe<z.ZodCustom<Uint8Array<ArrayBufferLike>, Uint8Array<ArrayBufferLike>>, z.ZodTransform<Uint8Array<ArrayBufferLike>, Uint8Array<ArrayBufferLike>>>, z.ZodPipe<z.ZodInstanceOf<Blob>, z.ZodTransform<Blob, Blob>>]>;
4
+ export declare const uploadClientOptionsSchema: z.ZodObject<{
5
+ maxSize: z.ZodOptional<z.ZodNumber>;
6
+ allowList: z.ZodOptional<z.ZodArray<z.ZodString>>;
7
+ file: z.ZodUnion<readonly [z.ZodPipe<z.ZodCustom<Uint8Array<ArrayBufferLike>, Uint8Array<ArrayBufferLike>>, z.ZodTransform<Uint8Array<ArrayBufferLike>, Uint8Array<ArrayBufferLike>>>, z.ZodPipe<z.ZodInstanceOf<Blob>, z.ZodTransform<Blob, Blob>>]>;
8
+ kind: z.ZodEnum<{
9
+ document: "document";
10
+ media: "media";
11
+ chat: "chat";
12
+ avatar: "avatar";
13
+ }>;
14
+ sourceApp: z.ZodString;
15
+ sourceId: z.ZodString;
16
+ originalName: z.ZodOptional<z.ZodString>;
17
+ contentType: z.ZodOptional<z.ZodString>;
18
+ isPublic: z.ZodOptional<z.ZodBoolean>;
19
+ serviceToken: z.ZodOptional<z.ZodString>;
20
+ userId: z.ZodOptional<z.ZodString>;
21
+ organizationId: z.ZodOptional<z.ZodString>;
22
+ }, z.core.$strip>;
23
+ export type UploadClientOptions = z.infer<typeof uploadClientOptionsSchema>;
24
+ /** Zod can encounter throwing accessors or proxies; rejected values never become causes. */
25
+ export declare function parseRequest<S extends z.ZodType>(schema: S, value: z.input<S>): {
26
+ success: true;
27
+ data: z.output<S>;
28
+ } | {
29
+ success: false;
30
+ field?: PropertyKey;
31
+ };
32
+ //# sourceMappingURL=requests.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"requests.d.ts","sourceRoot":"","sources":["../../../src/uploads/schemas/requests.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAI5B,wFAAwF;AACxF,eAAO,MAAM,mBAAmB,iPAG9B,CAAC;AAEH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;iBAWpC,CAAC;AACH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAE5E,4FAA4F;AAC5F,wBAAgB,YAAY,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAC7E;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,KAAK,CAAC,EAAE,WAAW,CAAA;CAAE,CAM9E"}
@@ -0,0 +1,30 @@
1
+ import * as z from 'zod/v4';
2
+ import { attemptSync } from "../../utils/attempt.js";
3
+ import { uploadBytesSchema, uploadKindSchema, uploadLimitsSchema } from "./common.js";
4
+ /** Copy native payloads while parsing so later reads use trusted intrinsic metadata. */
5
+ export const uploadPayloadSchema = z.union([
6
+ uploadBytesSchema,
7
+ z.instanceof(Blob).transform(value => Blob.prototype.slice.call(value, 0, undefined, value.type))
8
+ ]);
9
+ export const uploadClientOptionsSchema = uploadLimitsSchema.extend({
10
+ file: uploadPayloadSchema,
11
+ kind: uploadKindSchema,
12
+ sourceApp: z.string().trim().min(1),
13
+ sourceId: z.string().trim().min(1),
14
+ originalName: z.string().optional(),
15
+ contentType: z.string().optional(),
16
+ isPublic: z.boolean().optional(),
17
+ serviceToken: z.string().optional(),
18
+ userId: z.string().optional(),
19
+ organizationId: z.string().optional()
20
+ });
21
+ /** Zod can encounter throwing accessors or proxies; rejected values never become causes. */
22
+ export function parseRequest(schema, value) {
23
+ const checked = attemptSync(() => schema.safeParse(value));
24
+ // Unreadable input follows the caller's typed refusal path, without attaching accessor failures.
25
+ if (!checked.ok)
26
+ return { success: false };
27
+ const parsed = checked.value;
28
+ return parsed.success ? parsed : { success: false, field: parsed.error.issues[0]?.path[0] };
29
+ }
30
+ //# sourceMappingURL=requests.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"requests.js","sourceRoot":"","sources":["../../../src/uploads/schemas/requests.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEtF,wFAAwF;AACxF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC;IAC1C,iBAAiB;IACjB,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;CACjG,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,yBAAyB,GAAG,kBAAkB,CAAC,MAAM,CAAC;IAClE,IAAI,EAAE,mBAAmB;IACzB,IAAI,EAAE,gBAAgB;IACtB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACnC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAClC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACnC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAChC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACnC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACrC,CAAC,CAAC;AAGH,4FAA4F;AAC5F,MAAM,UAAU,YAAY,CAAsB,MAAS,EAAE,KAAiB;IAE7E,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3D,iGAAiG;IACjG,IAAI,CAAC,OAAO,CAAC,EAAE;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC3C,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAC7B,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;AAC7F,CAAC"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Share Link Schemas
3
+ *
4
+ * Wire shapes for revocable media share links. The canonical row + HTTP routes
5
+ * live in apps/platform-web (`media_share_tokens` + `/api/storage/files/[id]/
6
+ * shares` + `/api/storage/shared/[token]`); this package owns only the TS wire
7
+ * types consumed by the UploadsClient and `@vibesdotdev/media/svelte/sharing`.
8
+ */
9
+ import * as z from 'zod/v4';
10
+ /** A share link as returned by platform-web's owner endpoints. */
11
+ export declare const shareLinkSchema: z.ZodObject<{
12
+ id: z.ZodString;
13
+ token: z.ZodString;
14
+ shareUrl: z.ZodString;
15
+ mediaItemId: z.ZodString;
16
+ label: z.ZodNullable<z.ZodString>;
17
+ expiresAt: z.ZodNullable<z.ZodString>;
18
+ revokedAt: z.ZodNullable<z.ZodString>;
19
+ maxDownloads: z.ZodNullable<z.ZodNumber>;
20
+ downloadCount: z.ZodNumber;
21
+ lastAccessedAt: z.ZodNullable<z.ZodString>;
22
+ createdAt: z.ZodString;
23
+ updatedAt: z.ZodString;
24
+ }, z.core.$strip>;
25
+ export type ShareLink = z.infer<typeof shareLinkSchema>;
26
+ /** Options for creating a share link. */
27
+ export declare const createShareLinkOptionsSchema: z.ZodObject<{
28
+ label: z.ZodOptional<z.ZodString>;
29
+ expiresIn: z.ZodOptional<z.ZodNumber>;
30
+ maxDownloads: z.ZodOptional<z.ZodNumber>;
31
+ }, z.core.$strip>;
32
+ export type CreateShareLinkOptions = z.infer<typeof createShareLinkOptionsSchema>;
33
+ /** `POST .../shares` response envelope. */
34
+ export declare const shareLinkResultSchema: z.ZodObject<{
35
+ result: z.ZodObject<{
36
+ id: z.ZodString;
37
+ token: z.ZodString;
38
+ shareUrl: z.ZodString;
39
+ mediaItemId: z.ZodString;
40
+ label: z.ZodNullable<z.ZodString>;
41
+ expiresAt: z.ZodNullable<z.ZodString>;
42
+ revokedAt: z.ZodNullable<z.ZodString>;
43
+ maxDownloads: z.ZodNullable<z.ZodNumber>;
44
+ downloadCount: z.ZodNumber;
45
+ lastAccessedAt: z.ZodNullable<z.ZodString>;
46
+ createdAt: z.ZodString;
47
+ updatedAt: z.ZodString;
48
+ }, z.core.$strip>;
49
+ }, z.core.$strip>;
50
+ /** `GET .../shares` response envelope. */
51
+ export declare const shareLinkListResultSchema: z.ZodObject<{
52
+ results: z.ZodArray<z.ZodObject<{
53
+ id: z.ZodString;
54
+ token: z.ZodString;
55
+ shareUrl: z.ZodString;
56
+ mediaItemId: z.ZodString;
57
+ label: z.ZodNullable<z.ZodString>;
58
+ expiresAt: z.ZodNullable<z.ZodString>;
59
+ revokedAt: z.ZodNullable<z.ZodString>;
60
+ maxDownloads: z.ZodNullable<z.ZodNumber>;
61
+ downloadCount: z.ZodNumber;
62
+ lastAccessedAt: z.ZodNullable<z.ZodString>;
63
+ createdAt: z.ZodString;
64
+ updatedAt: z.ZodString;
65
+ }, z.core.$strip>>;
66
+ }, z.core.$strip>;
67
+ //# sourceMappingURL=shares.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shares.d.ts","sourceRoot":"","sources":["../../../src/uploads/schemas/shares.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAE5B,kEAAkE;AAClE,eAAO,MAAM,eAAe;;;;;;;;;;;;;iBAgB1B,CAAC;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAExD,yCAAyC;AACzC,eAAO,MAAM,4BAA4B;;;;iBAKvC,CAAC;AACH,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAElF,2CAA2C;AAC3C,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;iBAAwC,CAAC;AAC3E,0CAA0C;AAC1C,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;iBAAkD,CAAC"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Share Link Schemas
3
+ *
4
+ * Wire shapes for revocable media share links. The canonical row + HTTP routes
5
+ * live in apps/platform-web (`media_share_tokens` + `/api/storage/files/[id]/
6
+ * shares` + `/api/storage/shared/[token]`); this package owns only the TS wire
7
+ * types consumed by the UploadsClient and `@vibesdotdev/media/svelte/sharing`.
8
+ */
9
+ import * as z from 'zod/v4';
10
+ /** A share link as returned by platform-web's owner endpoints. */
11
+ export const shareLinkSchema = z.object({
12
+ id: z.string(),
13
+ token: z.string(),
14
+ /** Absolute public URL: `${platformOrigin}/api/storage/shared/${token}`. */
15
+ shareUrl: z.string(),
16
+ mediaItemId: z.string(),
17
+ label: z.string().nullable(),
18
+ /** ISO timestamp or null for never-expires. */
19
+ expiresAt: z.string().nullable(),
20
+ /** ISO timestamp or null when active. */
21
+ revokedAt: z.string().nullable(),
22
+ maxDownloads: z.number().nullable(),
23
+ downloadCount: z.number(),
24
+ lastAccessedAt: z.string().nullable(),
25
+ createdAt: z.string(),
26
+ updatedAt: z.string()
27
+ });
28
+ /** Options for creating a share link. */
29
+ export const createShareLinkOptionsSchema = z.object({
30
+ label: z.string().max(120).optional(),
31
+ /** Seconds until expiry; omit for never-expires. */
32
+ expiresIn: z.number().int().positive().optional(),
33
+ maxDownloads: z.number().int().positive().optional()
34
+ });
35
+ /** `POST .../shares` response envelope. */
36
+ export const shareLinkResultSchema = z.object({ result: shareLinkSchema });
37
+ /** `GET .../shares` response envelope. */
38
+ export const shareLinkListResultSchema = z.object({ results: z.array(shareLinkSchema) });
39
+ //# sourceMappingURL=shares.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shares.js","sourceRoot":"","sources":["../../../src/uploads/schemas/shares.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAE5B,kEAAkE;AAClE,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,4EAA4E;IAC5E,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;IACvB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,+CAA+C;IAC/C,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,yCAAyC;IACzC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACnC,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE;IACzB,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACrC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;CACrB,CAAC,CAAC;AAGH,yCAAyC;AACzC,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC,MAAM,CAAC;IACpD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;IACrC,oDAAoD;IACpD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACjD,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;CACpD,CAAC,CAAC;AAGH,2CAA2C;AAC3C,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC,CAAC;AAC3E,0CAA0C;AAC1C,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { RuntimeRef } from '@vibesdotdev/kernel';
2
+ import type { StorageConfig } from '../schemas/index.ts';
3
+ export type DeclaredBackend = StorageConfig['backend'];
4
+ /** Schema default when a constructor has no explicit backend and has not loaded the manifest. */
5
+ export declare function defaultUploadsBackend(): DeclaredBackend;
6
+ /** The upload backend from the media.uploads manifest (schema default `local`). */
7
+ export declare function loadDeclaredBackend(runtime: RuntimeRef): Promise<DeclaredBackend>;
8
+ //# sourceMappingURL=backend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../../../src/uploads/server/backend.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAIzD,MAAM,MAAM,eAAe,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;AAEvD,iGAAiG;AACjG,wBAAgB,qBAAqB,IAAI,eAAe,CAEvD;AAED,mFAAmF;AACnF,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,eAAe,CAAC,CAEvF"}
@@ -0,0 +1,11 @@
1
+ import { loadUploadsConfig } from "../../config/uploads.js";
2
+ import { UploadsConfigSchema } from "../../config/media.uploads.config.descriptor.js";
3
+ /** Schema default when a constructor has no explicit backend and has not loaded the manifest. */
4
+ export function defaultUploadsBackend() {
5
+ return UploadsConfigSchema.parse({}).backend;
6
+ }
7
+ /** The upload backend from the media.uploads manifest (schema default `local`). */
8
+ export async function loadDeclaredBackend(runtime) {
9
+ return (await loadUploadsConfig(runtime)).backend;
10
+ }
11
+ //# sourceMappingURL=backend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backend.js","sourceRoot":"","sources":["../../../src/uploads/server/backend.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,iDAAiD,CAAC;AAItF,iGAAiG;AACjG,MAAM,UAAU,qBAAqB;IACpC,OAAO,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC;AAC9C,CAAC;AAED,mFAAmF;AACnF,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,OAAmB;IAC5D,OAAO,CAAC,MAAM,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;AACnD,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { type RuntimeRef } from '@vibesdotdev/kernel';
2
+ import type { StorageConfig } from '../schemas/common.ts';
3
+ export declare function requireBucket(bucket: string | undefined): string;
4
+ export declare function buildConfig(runtime: RuntimeRef): Promise<Partial<StorageConfig>>;
5
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/uploads/server/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEvE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAShE;AAQD,wBAAsB,WAAW,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAiBtF"}
@@ -0,0 +1,38 @@
1
+ import { CapabilityError } from '@vibesdotdev/kernel';
2
+ import { loadUploadsConfig } from "../../config/uploads.js";
3
+ export function requireBucket(bucket) {
4
+ if (bucket === undefined || bucket === '') {
5
+ throw new CapabilityError('S3_BUCKET is required for the s3 uploads backend but is not declared.', 'UNAVAILABLE', {
6
+ reason: 'uploads-s3-config-missing',
7
+ recoveryHint: 'Declare S3_BUCKET for this deployment environment.',
8
+ details: { key: 'S3_BUCKET' }
9
+ });
10
+ }
11
+ return bucket;
12
+ }
13
+ async function requireCredential(runtime, key) {
14
+ const resolved = await runtime.resolveCredential({ source: 'secret', key });
15
+ if (!resolved.ok)
16
+ throw resolved.error;
17
+ return resolved.value;
18
+ }
19
+ export async function buildConfig(runtime) {
20
+ const uploads = await loadUploadsConfig(runtime);
21
+ if (uploads.backend !== 's3')
22
+ return { backend: uploads.backend };
23
+ const bucket = requireBucket(uploads.s3Bucket);
24
+ const accessKeyId = await requireCredential(runtime, 'AWS_ACCESS_KEY_ID');
25
+ const secretAccessKey = await requireCredential(runtime, 'AWS_SECRET_ACCESS_KEY');
26
+ return {
27
+ backend: uploads.backend,
28
+ s3Config: {
29
+ bucket,
30
+ region: uploads.s3Region,
31
+ endpoint: uploads.s3Endpoint,
32
+ forcePathStyle: uploads.s3ForcePathStyle,
33
+ publicBaseUrl: uploads.s3PublicBaseUrl,
34
+ credentials: { accessKeyId, secretAccessKey }
35
+ }
36
+ };
37
+ }
38
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/uploads/server/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAmB,MAAM,qBAAqB,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAG5D,MAAM,UAAU,aAAa,CAAC,MAA0B;IACvD,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,EAAE,EAAE,CAAC;QAC3C,MAAM,IAAI,eAAe,CAAC,uEAAuE,EAAE,aAAa,EAAE;YACjH,MAAM,EAAE,2BAA2B;YACnC,YAAY,EAAE,oDAAoD;YAClE,OAAO,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE;SAC7B,CAAC,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC;AACf,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,OAAmB,EAAE,GAAW;IAChE,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;IAC5E,IAAI,CAAC,QAAQ,CAAC,EAAE;QAAE,MAAM,QAAQ,CAAC,KAAK,CAAC;IACvC,OAAO,QAAQ,CAAC,KAAK,CAAC;AACvB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAAmB;IACpD,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACjD,IAAI,OAAO,CAAC,OAAO,KAAK,IAAI;QAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;IAClE,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC/C,MAAM,WAAW,GAAG,MAAM,iBAAiB,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC;IAC1E,MAAM,eAAe,GAAG,MAAM,iBAAiB,CAAC,OAAO,EAAE,uBAAuB,CAAC,CAAC;IAClF,OAAO;QACN,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,QAAQ,EAAE;YACT,MAAM;YACN,MAAM,EAAE,OAAO,CAAC,QAAQ;YACxB,QAAQ,EAAE,OAAO,CAAC,UAAU;YAC5B,cAAc,EAAE,OAAO,CAAC,gBAAgB;YACxC,aAAa,EAAE,OAAO,CAAC,eAAe;YACtC,WAAW,EAAE,EAAE,WAAW,EAAE,eAAe,EAAE;SAC7C;KACD,CAAC;AACH,CAAC"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Upload Storage Service
3
+ *
4
+ * Core service class for handling file uploads.
5
+ * Delegates backend operations to adapter packages via runtime resolution:
6
+ * - uploads-adapter-s3 for S3 backend
7
+ * - uploads-adapter-local for local filesystem backend
8
+ * - uploads-adapter-r2 for Cloudflare R2 backend
9
+ *
10
+ * Adapters are resolved via runtime.query('uploads/store').withId(backend).resolve()
11
+ * NOT via if (config.backend === 's3') branching.
12
+ */
13
+ import { type RuntimeRef } from '@vibesdotdev/kernel';
14
+ import type { UploadOptions, StorageResult, StorageConfig } from '../schemas/index.ts';
15
+ export declare class UploadStorageService {
16
+ private readonly runtime;
17
+ private config;
18
+ private adapter;
19
+ private readonly backendWasExplicit;
20
+ private backendFromManifest;
21
+ constructor(runtime: RuntimeRef, config?: Partial<StorageConfig>);
22
+ /**
23
+ * Get or create the storage adapter instance via runtime resolution.
24
+ *
25
+ * Uses runtime.query('uploads/store').withId(backend).resolve() to select
26
+ * the appropriate adapter based on config.backend ('local', 's3', 'r2').
27
+ * This replaces the prior if (config.backend === 's3') branching pattern.
28
+ *
29
+ * Adapters (uploads-adapter-local, uploads-adapter-s3, uploads-adapter-r2)
30
+ * self-register with ids 'local', 's3', 'r2' matching config.backend values.
31
+ */
32
+ private getAdapter;
33
+ /**
34
+ * Validates file size and MIME type before storage
35
+ */
36
+ validateFile(buffer: Uint8Array, contentType?: string): {
37
+ valid: true;
38
+ } | {
39
+ valid: false;
40
+ error: Error;
41
+ };
42
+ /**
43
+ * Saves a file to storage (local or S3)
44
+ */
45
+ saveFile(input: UploadOptions): Promise<StorageResult>;
46
+ /**
47
+ * Retrieves file content from storage
48
+ */
49
+ getFile(storagePath: string): Promise<Buffer | null>;
50
+ /**
51
+ * Deletes a file from storage
52
+ */
53
+ deleteFile(storagePath: string): Promise<boolean>;
54
+ /**
55
+ * Generates a signed URL for temporary access to private S3 objects
56
+ */
57
+ getSignedUrl(storagePath: string, expiresSeconds?: number): Promise<string | null>;
58
+ /**
59
+ * Returns a public URL for accessing the file
60
+ */
61
+ getPublicUrl(storagePath: string): Promise<string | null>;
62
+ /**
63
+ * Checks if a storage path is a local path
64
+ */
65
+ isLocalPath(storagePath: string): boolean;
66
+ /**
67
+ * Parses an s3:// URI into bucket and key components
68
+ */
69
+ parseS3Path(storagePath: string): {
70
+ bucket: string;
71
+ key: string;
72
+ } | null;
73
+ getConfig(): StorageConfig;
74
+ getMaxFileSize(): number;
75
+ getAllowedMimeTypes(): readonly string[];
76
+ }
77
+ //# sourceMappingURL=service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../src/uploads/server/service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAA2C,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAG/F,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAqBvF,qBAAa,oBAAoB;IAO/B,OAAO,CAAC,QAAQ,CAAC,OAAO;IANzB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,OAAO,CAA+B;IAC9C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAU;IAC7C,OAAO,CAAC,mBAAmB,CAAS;gBAGlB,OAAO,EAAE,UAAU,EACpC,MAAM,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC;IAUhC;;;;;;;;;OASG;YACW,UAAU;IAoBxB;;OAEG;IACH,YAAY,CACX,MAAM,EAAE,UAAU,EAClB,WAAW,CAAC,EAAE,MAAM,GAClB;QAAE,KAAK,EAAE,IAAI,CAAA;KAAE,GAAG;QAAE,KAAK,EAAE,KAAK,CAAC;QAAC,KAAK,EAAE,KAAK,CAAA;KAAE;IAYnD;;OAEG;IACG,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;IAgB5D;;OAEG;IACG,OAAO,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAK1D;;OAEG;IACG,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKvD;;OAEG;IACG,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,cAAc,SAAO,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAKtF;;OAEG;IACG,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAK/D;;OAEG;IACH,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IAIzC;;OAEG;IACH,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAcxE,SAAS,IAAI,aAAa;IAI1B,cAAc,IAAI,MAAM;IAIxB,mBAAmB,IAAI,SAAS,MAAM,EAAE;CAGxC"}