@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.
- package/LICENSE +18 -0
- package/README.md +95 -2
- package/dist/analyzers/frame-guard.d.ts +6 -0
- package/dist/analyzers/frame-guard.d.ts.map +1 -0
- package/dist/analyzers/frame-guard.js +10 -0
- package/dist/analyzers/frame-guard.js.map +1 -0
- package/dist/analyzers/motion-math.d.ts +66 -0
- package/dist/analyzers/motion-math.d.ts.map +1 -0
- package/dist/analyzers/motion-math.js +356 -0
- package/dist/analyzers/motion-math.js.map +1 -0
- package/dist/analyzers/reference-motion-analyzer.impl.d.ts +23 -0
- package/dist/analyzers/reference-motion-analyzer.impl.d.ts.map +1 -0
- package/dist/analyzers/reference-motion-analyzer.impl.js +69 -0
- package/dist/analyzers/reference-motion-analyzer.impl.js.map +1 -0
- package/dist/analyzers/reference-motion.descriptor.d.ts +11 -0
- package/dist/analyzers/reference-motion.descriptor.d.ts.map +1 -0
- package/dist/analyzers/reference-motion.descriptor.js +21 -0
- package/dist/analyzers/reference-motion.descriptor.js.map +1 -0
- package/dist/capture-client.d.ts +34 -0
- package/dist/capture-client.d.ts.map +1 -0
- package/dist/capture-client.js +163 -0
- package/dist/capture-client.js.map +1 -0
- package/dist/config/media.uploads.config.descriptor.d.ts +27 -0
- package/dist/config/media.uploads.config.descriptor.d.ts.map +1 -0
- package/dist/config/media.uploads.config.descriptor.js +46 -0
- package/dist/config/media.uploads.config.descriptor.js.map +1 -0
- package/dist/config/uploads.d.ts +11 -0
- package/dist/config/uploads.d.ts.map +1 -0
- package/dist/config/uploads.js +25 -0
- package/dist/config/uploads.js.map +1 -0
- package/dist/docs/artifact-references.docs.descriptor.d.ts +4 -0
- package/dist/docs/artifact-references.docs.descriptor.d.ts.map +1 -0
- package/dist/docs/artifact-references.docs.descriptor.js +69 -0
- package/dist/docs/artifact-references.docs.descriptor.js.map +1 -0
- package/dist/docs/image-transform.docs.descriptor.d.ts +4 -0
- package/dist/docs/image-transform.docs.descriptor.d.ts.map +1 -0
- package/dist/docs/image-transform.docs.descriptor.js +52 -0
- package/dist/docs/image-transform.docs.descriptor.js.map +1 -0
- package/dist/index.d.ts +48 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +49 -0
- package/dist/index.js.map +1 -0
- package/dist/interfaces/capture-provider.d.ts +33 -0
- package/dist/interfaces/capture-provider.d.ts.map +1 -0
- package/dist/interfaces/capture-provider.js +10 -0
- package/dist/interfaces/capture-provider.js.map +1 -0
- package/dist/interfaces/image-transformer.d.ts +7 -0
- package/dist/interfaces/image-transformer.d.ts.map +1 -0
- package/dist/interfaces/image-transformer.js +2 -0
- package/dist/interfaces/image-transformer.js.map +1 -0
- package/dist/interfaces/index.d.ts +7 -0
- package/dist/interfaces/index.d.ts.map +1 -0
- package/dist/interfaces/index.js +5 -0
- package/dist/interfaces/index.js.map +1 -0
- package/dist/interfaces/motion-analyzer.d.ts +55 -0
- package/dist/interfaces/motion-analyzer.d.ts.map +1 -0
- package/dist/interfaces/motion-analyzer.js +14 -0
- package/dist/interfaces/motion-analyzer.js.map +1 -0
- package/dist/kinds/capture.d.ts +58 -0
- package/dist/kinds/capture.d.ts.map +1 -0
- package/dist/kinds/capture.js +34 -0
- package/dist/kinds/capture.js.map +1 -0
- package/dist/kinds/image-transform.d.ts +91 -0
- package/dist/kinds/image-transform.d.ts.map +1 -0
- package/dist/kinds/image-transform.js +12 -0
- package/dist/kinds/image-transform.js.map +1 -0
- package/dist/kinds/index.d.ts +10 -0
- package/dist/kinds/index.d.ts.map +1 -0
- package/dist/kinds/index.js +7 -0
- package/dist/kinds/index.js.map +1 -0
- package/dist/kinds/motion.d.ts +57 -0
- package/dist/kinds/motion.d.ts.map +1 -0
- package/dist/kinds/motion.js +34 -0
- package/dist/kinds/motion.js.map +1 -0
- package/dist/media.plugin.d.ts +23 -0
- package/dist/media.plugin.d.ts.map +1 -0
- package/dist/media.plugin.js +48 -0
- package/dist/media.plugin.js.map +1 -0
- package/dist/schemas/artifact-reference.d.ts +59 -0
- package/dist/schemas/artifact-reference.d.ts.map +1 -0
- package/dist/schemas/artifact-reference.js +77 -0
- package/dist/schemas/artifact-reference.js.map +1 -0
- package/dist/schemas/capture-descriptor.d.ts +71 -0
- package/dist/schemas/capture-descriptor.d.ts.map +1 -0
- package/dist/schemas/capture-descriptor.js +74 -0
- package/dist/schemas/capture-descriptor.js.map +1 -0
- package/dist/schemas/capture-options.d.ts +51 -0
- package/dist/schemas/capture-options.d.ts.map +1 -0
- package/dist/schemas/capture-options.js +68 -0
- package/dist/schemas/capture-options.js.map +1 -0
- package/dist/schemas/capture-parse.d.ts +10 -0
- package/dist/schemas/capture-parse.d.ts.map +1 -0
- package/dist/schemas/capture-parse.js +30 -0
- package/dist/schemas/capture-parse.js.map +1 -0
- package/dist/schemas/capture-state.d.ts +77 -0
- package/dist/schemas/capture-state.d.ts.map +1 -0
- package/dist/schemas/capture-state.js +25 -0
- package/dist/schemas/capture-state.js.map +1 -0
- package/dist/schemas/image-transform.d.ts +269 -0
- package/dist/schemas/image-transform.d.ts.map +1 -0
- package/dist/schemas/image-transform.js +161 -0
- package/dist/schemas/image-transform.js.map +1 -0
- package/dist/schemas/index.d.ts +20 -0
- package/dist/schemas/index.d.ts.map +1 -0
- package/dist/schemas/index.js +17 -0
- package/dist/schemas/index.js.map +1 -0
- package/dist/schemas/motion-analysis.d.ts +187 -0
- package/dist/schemas/motion-analysis.d.ts.map +1 -0
- package/dist/schemas/motion-analysis.js +213 -0
- package/dist/schemas/motion-analysis.js.map +1 -0
- package/dist/schemas/motion-descriptor.d.ts +53 -0
- package/dist/schemas/motion-descriptor.d.ts.map +1 -0
- package/dist/schemas/motion-descriptor.js +47 -0
- package/dist/schemas/motion-descriptor.js.map +1 -0
- package/dist/schemas/motion-frame.d.ts +63 -0
- package/dist/schemas/motion-frame.d.ts.map +1 -0
- package/dist/schemas/motion-frame.js +86 -0
- package/dist/schemas/motion-frame.js.map +1 -0
- package/dist/schemas/opaque-id.d.ts +10 -0
- package/dist/schemas/opaque-id.d.ts.map +1 -0
- package/dist/schemas/opaque-id.js +24 -0
- package/dist/schemas/opaque-id.js.map +1 -0
- package/dist/schemas/sharing-state.d.ts +43 -0
- package/dist/schemas/sharing-state.d.ts.map +1 -0
- package/dist/schemas/sharing-state.js +11 -0
- package/dist/schemas/sharing-state.js.map +1 -0
- package/dist/svelte/CaptureLoader.svelte +29 -0
- package/dist/svelte/CaptureLoader.svelte.d.ts +11 -0
- package/dist/svelte/CaptureLoader.svelte.d.ts.map +1 -0
- package/dist/svelte/CapturePanel.svelte +189 -0
- package/dist/svelte/CapturePanel.svelte.d.ts +12 -0
- package/dist/svelte/CapturePanel.svelte.d.ts.map +1 -0
- package/dist/svelte/MediaUploader.svelte +109 -0
- package/dist/svelte/MediaUploader.svelte.d.ts +5 -0
- package/dist/svelte/MediaUploader.svelte.d.ts.map +1 -0
- package/dist/svelte/capture-parse.d.ts +2 -0
- package/dist/svelte/capture-parse.d.ts.map +1 -0
- package/dist/svelte/capture-parse.js +1 -0
- package/dist/svelte/failure-message.d.ts +2 -0
- package/dist/svelte/failure-message.d.ts.map +1 -0
- package/dist/svelte/failure-message.js +1 -0
- package/dist/svelte/index.d.ts +8 -0
- package/dist/svelte/index.d.ts.map +1 -0
- package/dist/svelte/index.js +6 -0
- package/dist/svelte/runtime-log.d.ts +14 -0
- package/dist/svelte/runtime-log.d.ts.map +1 -0
- package/dist/svelte/runtime-log.js +19 -0
- package/dist/svelte/runtime.d.ts +9 -0
- package/dist/svelte/runtime.d.ts.map +1 -0
- package/dist/svelte/runtime.js +27 -0
- package/dist/svelte/sharing/README.md +38 -0
- package/dist/svelte/sharing/components/ShareButton.svelte +57 -0
- package/dist/svelte/sharing/components/ShareButton.svelte.d.ts +11 -0
- package/dist/svelte/sharing/components/ShareButton.svelte.d.ts.map +1 -0
- package/dist/svelte/sharing/components/ShareDialog.svelte +222 -0
- package/dist/svelte/sharing/components/ShareDialog.svelte.d.ts +8 -0
- package/dist/svelte/sharing/components/ShareDialog.svelte.d.ts.map +1 -0
- package/dist/svelte/sharing/components/ShareLoader.svelte +19 -0
- package/dist/svelte/sharing/components/ShareLoader.svelte.d.ts +7 -0
- package/dist/svelte/sharing/components/ShareLoader.svelte.d.ts.map +1 -0
- package/dist/svelte/sharing/index.d.ts +20 -0
- package/dist/svelte/sharing/index.d.ts.map +1 -0
- package/dist/svelte/sharing/index.js +19 -0
- package/dist/svelte/sharing/runtime.d.ts +44 -0
- package/dist/svelte/sharing/runtime.d.ts.map +1 -0
- package/dist/svelte/sharing/runtime.js +81 -0
- package/dist/svelte/sharing/state.svelte.d.ts +28 -0
- package/dist/svelte/sharing/state.svelte.d.ts.map +1 -0
- package/dist/svelte/sharing/state.svelte.js +101 -0
- package/dist/svelte/sharing/styles.css +8 -0
- package/dist/svelte/state.svelte.d.ts +38 -0
- package/dist/svelte/state.svelte.d.ts.map +1 -0
- package/dist/svelte/state.svelte.js +102 -0
- package/dist/svelte/styles.css +2 -0
- package/dist/svelte/uploader.d.ts +17 -0
- package/dist/svelte/uploader.d.ts.map +1 -0
- package/dist/svelte/uploader.js +9 -0
- package/dist/uploads/adapters/local/index.d.ts +9 -0
- package/dist/uploads/adapters/local/index.d.ts.map +1 -0
- package/dist/uploads/adapters/local/index.js +12 -0
- package/dist/uploads/adapters/local/index.js.map +1 -0
- package/dist/uploads/adapters/local/local-storage.descriptor.d.ts +24 -0
- package/dist/uploads/adapters/local/local-storage.descriptor.d.ts.map +1 -0
- package/dist/uploads/adapters/local/local-storage.descriptor.js +20 -0
- package/dist/uploads/adapters/local/local-storage.descriptor.js.map +1 -0
- package/dist/uploads/adapters/local/local-storage.impl.d.ts +123 -0
- package/dist/uploads/adapters/local/local-storage.impl.d.ts.map +1 -0
- package/dist/uploads/adapters/local/local-storage.impl.js +231 -0
- package/dist/uploads/adapters/local/local-storage.impl.js.map +1 -0
- package/dist/uploads/adapters/local/uploads-adapter-local.plugin.d.ts +9 -0
- package/dist/uploads/adapters/local/uploads-adapter-local.plugin.d.ts.map +1 -0
- package/dist/uploads/adapters/local/uploads-adapter-local.plugin.js +41 -0
- package/dist/uploads/adapters/local/uploads-adapter-local.plugin.js.map +1 -0
- package/dist/uploads/client/helper.d.ts +26 -0
- package/dist/uploads/client/helper.d.ts.map +1 -0
- package/dist/uploads/client/helper.js +27 -0
- package/dist/uploads/client/helper.js.map +1 -0
- package/dist/uploads/client/index.d.ts +11 -0
- package/dist/uploads/client/index.d.ts.map +1 -0
- package/dist/uploads/client/index.js +9 -0
- package/dist/uploads/client/index.js.map +1 -0
- package/dist/uploads/client/sharing-client.d.ts +45 -0
- package/dist/uploads/client/sharing-client.d.ts.map +1 -0
- package/dist/uploads/client/sharing-client.js +153 -0
- package/dist/uploads/client/sharing-client.js.map +1 -0
- package/dist/uploads/client/uploads-client.d.ts +200 -0
- package/dist/uploads/client/uploads-client.d.ts.map +1 -0
- package/dist/uploads/client/uploads-client.js +487 -0
- package/dist/uploads/client/uploads-client.js.map +1 -0
- package/dist/uploads/docs/uploads.docs.descriptor.d.ts +4 -0
- package/dist/uploads/docs/uploads.docs.descriptor.d.ts.map +1 -0
- package/dist/uploads/docs/uploads.docs.descriptor.js +65 -0
- package/dist/uploads/docs/uploads.docs.descriptor.js.map +1 -0
- package/dist/uploads/docs/uploads.share-links.docs.descriptor.d.ts +22 -0
- package/dist/uploads/docs/uploads.share-links.docs.descriptor.d.ts.map +1 -0
- package/dist/uploads/docs/uploads.share-links.docs.descriptor.js +86 -0
- package/dist/uploads/docs/uploads.share-links.docs.descriptor.js.map +1 -0
- package/dist/uploads/index.d.ts +12 -0
- package/dist/uploads/index.d.ts.map +1 -0
- package/dist/uploads/index.js +13 -0
- package/dist/uploads/index.js.map +1 -0
- package/dist/uploads/schemas/common.d.ts +135 -0
- package/dist/uploads/schemas/common.d.ts.map +1 -0
- package/dist/uploads/schemas/common.js +152 -0
- package/dist/uploads/schemas/common.js.map +1 -0
- package/dist/uploads/schemas/forms.d.ts +59 -0
- package/dist/uploads/schemas/forms.d.ts.map +1 -0
- package/dist/uploads/schemas/forms.js +41 -0
- package/dist/uploads/schemas/forms.js.map +1 -0
- package/dist/uploads/schemas/index.d.ts +18 -0
- package/dist/uploads/schemas/index.d.ts.map +1 -0
- package/dist/uploads/schemas/index.js +13 -0
- package/dist/uploads/schemas/index.js.map +1 -0
- package/dist/uploads/schemas/records.d.ts +81 -0
- package/dist/uploads/schemas/records.d.ts.map +1 -0
- package/dist/uploads/schemas/records.js +82 -0
- package/dist/uploads/schemas/records.js.map +1 -0
- package/dist/uploads/schemas/requests.d.ts +32 -0
- package/dist/uploads/schemas/requests.d.ts.map +1 -0
- package/dist/uploads/schemas/requests.js +30 -0
- package/dist/uploads/schemas/requests.js.map +1 -0
- package/dist/uploads/schemas/shares.d.ts +67 -0
- package/dist/uploads/schemas/shares.d.ts.map +1 -0
- package/dist/uploads/schemas/shares.js +39 -0
- package/dist/uploads/schemas/shares.js.map +1 -0
- package/dist/uploads/server/backend.d.ts +8 -0
- package/dist/uploads/server/backend.d.ts.map +1 -0
- package/dist/uploads/server/backend.js +11 -0
- package/dist/uploads/server/backend.js.map +1 -0
- package/dist/uploads/server/config.d.ts +5 -0
- package/dist/uploads/server/config.d.ts.map +1 -0
- package/dist/uploads/server/config.js +38 -0
- package/dist/uploads/server/config.js.map +1 -0
- package/dist/uploads/server/service.d.ts +77 -0
- package/dist/uploads/server/service.d.ts.map +1 -0
- package/dist/uploads/server/service.js +152 -0
- package/dist/uploads/server/service.js.map +1 -0
- package/dist/uploads/server/storage-client.d.ts +11 -0
- package/dist/uploads/server/storage-client.d.ts.map +1 -0
- package/dist/uploads/server/storage-client.js +23 -0
- package/dist/uploads/server/storage-client.js.map +1 -0
- package/dist/uploads/server/storage.d.ts +40 -0
- package/dist/uploads/server/storage.d.ts.map +1 -0
- package/dist/uploads/server/storage.js +59 -0
- package/dist/uploads/server/storage.js.map +1 -0
- package/dist/uploads/uploads.plugin.d.ts +11 -0
- package/dist/uploads/uploads.plugin.d.ts.map +1 -0
- package/dist/uploads/uploads.plugin.js +89 -0
- package/dist/uploads/uploads.plugin.js.map +1 -0
- package/dist/utils/attempt.d.ts +27 -0
- package/dist/utils/attempt.d.ts.map +1 -0
- package/dist/utils/attempt.js +39 -0
- package/dist/utils/attempt.js.map +1 -0
- package/dist/utils/failure-message.d.ts +8 -0
- package/dist/utils/failure-message.d.ts.map +1 -0
- package/dist/utils/failure-message.js +28 -0
- package/dist/utils/failure-message.js.map +1 -0
- package/package.json +257 -4
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Descriptor for uploads.share-links
|
|
3
|
+
*/
|
|
4
|
+
const uploadsShareLinksMarkdown = `---
|
|
5
|
+
title: Uploads Share Links
|
|
6
|
+
summary: Revocable, owner-funded public share links for uploaded media
|
|
7
|
+
tags: [uploads, sharing, media, links]
|
|
8
|
+
parent: uploads
|
|
9
|
+
order: 2
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Uploads Share Links
|
|
13
|
+
|
|
14
|
+
Share links turn a private media item into an anonymously-fetchable URL without
|
|
15
|
+
making the file public. Each link is opaque, high-entropy, and individually
|
|
16
|
+
revocable. Egress on share downloads is billed to the media **owner** — a share
|
|
17
|
+
link is owner-funded distribution, not free public egress — and \`maxDownloads\`
|
|
18
|
+
is the owner's hard cost cap.
|
|
19
|
+
|
|
20
|
+
## What this provides
|
|
21
|
+
|
|
22
|
+
- **\`UploadsClient.createShareLink(fileId, { label?, expiresIn?, maxDownloads? })\`**
|
|
23
|
+
— creates a link, returns a \`ShareLink\` with an absolute public \`shareUrl\`.
|
|
24
|
+
- **\`UploadsClient.listShareLinks(fileId)\`** — lists a file's active + revoked links.
|
|
25
|
+
- **\`UploadsClient.revokeShareLink(fileId, shareId)\`** — soft-revokes a link.
|
|
26
|
+
- **\`ShareLink\` / \`CreateShareLinkOptions\`** wire types (\`@vibesdotdev/media/uploads/schemas\`).
|
|
27
|
+
|
|
28
|
+
## Usage
|
|
29
|
+
|
|
30
|
+
\`\`\`ts
|
|
31
|
+
import { getVibesUploadsClient } from '@vibesdotdev/media/uploads/client';
|
|
32
|
+
|
|
33
|
+
const uploads = await getVibesUploadsClient(runtime);
|
|
34
|
+
const link = await uploads.createShareLink(fileId, { label: 'Twitter' });
|
|
35
|
+
// link.shareUrl → https://platform.vibes.dev/api/storage/shared/<token>
|
|
36
|
+
await uploads.revokeShareLink(fileId, link.id); // revocation is immediate at origin
|
|
37
|
+
\`\`\`
|
|
38
|
+
|
|
39
|
+
Before serialization, \`createShareLinkOptionsSchema\` validates label length
|
|
40
|
+
(at most 120 characters), positive integer expiry seconds and download caps.
|
|
41
|
+
Only parsed fields are serialized. Malformed or throwing options refuse with
|
|
42
|
+
\`INVALID_INPUT/upload-share-options-invalid\` before transport, without
|
|
43
|
+
retaining rejected values or accessor errors.
|
|
44
|
+
|
|
45
|
+
## Routing
|
|
46
|
+
|
|
47
|
+
The canonical row (\`media_share_tokens\`) and HTTP routes live in
|
|
48
|
+
\`apps/platform-web\`:
|
|
49
|
+
|
|
50
|
+
- \`POST/GET /api/storage/files/[id]/shares\` — owner-only create / list.
|
|
51
|
+
- \`DELETE /api/storage/files/[id]/shares/[shareId]\` — owner-only revoke.
|
|
52
|
+
- \`GET /api/storage/shared/[token]\` — public, session-bypassed serving route.
|
|
53
|
+
|
|
54
|
+
The reusable UI (\`<ShareButton>\` / \`<ShareDialog>\`) lives in
|
|
55
|
+
\`@vibesdotdev/media/svelte/sharing\`.
|
|
56
|
+
|
|
57
|
+
## Caveats
|
|
58
|
+
|
|
59
|
+
- A revoked token is immediately rejected at the origin, but a CDN copy cached
|
|
60
|
+
under the token may persist until its short \`max-age\` TTL expires.
|
|
61
|
+
- Tokens appear in URL paths, so they can land in CDN/access logs and browser
|
|
62
|
+
history. Treat a leaked token as a leaked file until revoked.
|
|
63
|
+
|
|
64
|
+
## Related topics
|
|
65
|
+
|
|
66
|
+
- [\`uploads\`](uploads) — the uploads/store kind and client surface
|
|
67
|
+
`;
|
|
68
|
+
const descriptor = {
|
|
69
|
+
kind: 'docs/topic',
|
|
70
|
+
id: 'uploads.share-links',
|
|
71
|
+
title: 'Uploads Share Links',
|
|
72
|
+
summary: 'Revocable, owner-funded public share links for uploaded media',
|
|
73
|
+
body: {
|
|
74
|
+
type: 'markdown',
|
|
75
|
+
sourceType: 'raw',
|
|
76
|
+
source: uploadsShareLinksMarkdown
|
|
77
|
+
},
|
|
78
|
+
parent: 'uploads',
|
|
79
|
+
order: 2,
|
|
80
|
+
tags: ['uploads', 'sharing', 'media', 'links'],
|
|
81
|
+
surfaces: ['cli', 'web', 'in-app'],
|
|
82
|
+
hardware: ['consumer', 'cloud'],
|
|
83
|
+
enabled: true
|
|
84
|
+
};
|
|
85
|
+
export default descriptor;
|
|
86
|
+
//# sourceMappingURL=uploads.share-links.docs.descriptor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uploads.share-links.docs.descriptor.js","sourceRoot":"","sources":["../../../src/uploads/docs/uploads.share-links.docs.descriptor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,yBAAyB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+DjC,CAAC;AAEF,MAAM,UAAU,GAAG;IAClB,IAAI,EAAE,YAAqB;IAC3B,EAAE,EAAE,qBAAqB;IACzB,KAAK,EAAE,qBAAqB;IAC5B,OAAO,EAAE,+DAA+D;IACxE,IAAI,EAAE;QACL,IAAI,EAAE,UAAmB;QACzB,UAAU,EAAE,KAAc;QAC1B,MAAM,EAAE,yBAAyB;KACjC;IACD,MAAM,EAAE,SAAS;IACjB,KAAK,EAAE,CAAC;IACR,IAAI,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC;IAC9C,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAU;IAC3C,QAAQ,EAAE,CAAC,UAAU,EAAE,OAAO,CAAU;IACxC,OAAO,EAAE,IAAI;CACb,CAAC;AAEF,eAAe,UAAU,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Uploads Module - Exports
|
|
3
|
+
*
|
|
4
|
+
* Runtime-resolved file/object storage. Provides the uploads/store kind,
|
|
5
|
+
* validation primitives, schemas, and the UploadsClient runtime client.
|
|
6
|
+
*/
|
|
7
|
+
export { uploadKinds, uploadKindSchema, storageBackends, allowedMimeTypeSchema, MAX_FILE_SIZE, ALLOWED_MIME_TYPES, mimeTypeToExtension, extensionToMimeType, resolveMimeTypeFromExtension, resolveExtensionFromMimeType, UploadValidationError, validateUpload, uploadRequestSchema, uploadFileSchema, uploadResponseSchema, uploadServerResponseSchema, getUploadUrlRequestSchema, deleteUploadRequestSchema, shareLinkSchema, createShareLinkOptionsSchema, shareLinkResultSchema, shareLinkListResultSchema, } from './schemas/index.ts';
|
|
8
|
+
export type { UploadKind, StorageBackend, StorageResult, UploadOptions, StorageConfig, UploadServerResponse, UploadRequest, UploadFile, UploadResponse, GetUploadUrlRequest, DeleteUploadRequest, Upload, NewUpload, ShareLink, CreateShareLinkOptions, } from './schemas/index.ts';
|
|
9
|
+
export { UploadsClient, createUploadsClient, getVibesUploadsClient } from './client/index.ts';
|
|
10
|
+
export type { UploadResult, FileRecord, StorageUsageResult, } from './client/index.ts';
|
|
11
|
+
export { uploadsPlugin } from './uploads.plugin.ts';
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/uploads/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACN,WAAW,EACX,gBAAgB,EAChB,eAAe,EACf,qBAAqB,EACrB,aAAa,EACb,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,4BAA4B,EAC5B,4BAA4B,EAC5B,qBAAqB,EACrB,cAAc,EACd,mBAAmB,EACnB,gBAAgB,EAChB,oBAAoB,EACpB,0BAA0B,EAC1B,yBAAyB,EACzB,yBAAyB,EACzB,eAAe,EACf,4BAA4B,EAC5B,qBAAqB,EACrB,yBAAyB,GACzB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACX,UAAU,EACV,cAAc,EACd,aAAa,EACb,aAAa,EACb,aAAa,EACb,oBAAoB,EACpB,aAAa,EACb,UAAU,EACV,cAAc,EACd,mBAAmB,EACnB,mBAAmB,EACnB,MAAM,EACN,SAAS,EACT,SAAS,EACT,sBAAsB,GACtB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC9F,YAAY,EACX,YAAY,EACZ,UAAU,EACV,kBAAkB,GAClB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Uploads Module - Exports
|
|
3
|
+
*
|
|
4
|
+
* Runtime-resolved file/object storage. Provides the uploads/store kind,
|
|
5
|
+
* validation primitives, schemas, and the UploadsClient runtime client.
|
|
6
|
+
*/
|
|
7
|
+
// Schemas (browser-safe)
|
|
8
|
+
export { uploadKinds, uploadKindSchema, storageBackends, allowedMimeTypeSchema, MAX_FILE_SIZE, ALLOWED_MIME_TYPES, mimeTypeToExtension, extensionToMimeType, resolveMimeTypeFromExtension, resolveExtensionFromMimeType, UploadValidationError, validateUpload, uploadRequestSchema, uploadFileSchema, uploadResponseSchema, uploadServerResponseSchema, getUploadUrlRequestSchema, deleteUploadRequestSchema, shareLinkSchema, createShareLinkOptionsSchema, shareLinkResultSchema, shareLinkListResultSchema, } from "./schemas/index.js";
|
|
9
|
+
// Client
|
|
10
|
+
export { UploadsClient, createUploadsClient, getVibesUploadsClient } from "./client/index.js";
|
|
11
|
+
// Plugin
|
|
12
|
+
export { uploadsPlugin } from "./uploads.plugin.js";
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/uploads/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,yBAAyB;AACzB,OAAO,EACN,WAAW,EACX,gBAAgB,EAChB,eAAe,EACf,qBAAqB,EACrB,aAAa,EACb,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,4BAA4B,EAC5B,4BAA4B,EAC5B,qBAAqB,EACrB,cAAc,EACd,mBAAmB,EACnB,gBAAgB,EAChB,oBAAoB,EACpB,0BAA0B,EAC1B,yBAAyB,EACzB,yBAAyB,EACzB,eAAe,EACf,4BAA4B,EAC5B,qBAAqB,EACrB,yBAAyB,GACzB,MAAM,oBAAoB,CAAC;AAmB5B,SAAS;AACT,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAO9F,SAAS;AACT,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Upload Schema - Common Types
|
|
3
|
+
*
|
|
4
|
+
* Shared types and utilities for file uploads.
|
|
5
|
+
*/
|
|
6
|
+
import * as z from 'zod/v4';
|
|
7
|
+
import { CapabilityError } from '@vibesdotdev/kernel';
|
|
8
|
+
/**
|
|
9
|
+
* A caller's own limits for one upload. Owned here so the exported
|
|
10
|
+
* `validateUpload` primitive enforces the same contract the HTTP client
|
|
11
|
+
* request schema enforces: a size cap must be a positive safe integer
|
|
12
|
+
* (never NaN, negative, fractional, infinite, or unsafe), and an allowlist
|
|
13
|
+
* must be strings. `validateUpload` refuses non-conforming caps with
|
|
14
|
+
* `upload-limits-invalid` rather than silently comparing against them.
|
|
15
|
+
*/
|
|
16
|
+
export declare const uploadLimitsSchema: z.ZodObject<{
|
|
17
|
+
maxSize: z.ZodOptional<z.ZodNumber>;
|
|
18
|
+
allowList: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
19
|
+
}, z.core.$strip>;
|
|
20
|
+
export declare const uploadKinds: readonly ["media", "chat", "avatar", "document"];
|
|
21
|
+
export type UploadKind = z.infer<typeof uploadKindSchema>;
|
|
22
|
+
export declare const uploadKindSchema: z.ZodEnum<{
|
|
23
|
+
document: "document";
|
|
24
|
+
media: "media";
|
|
25
|
+
chat: "chat";
|
|
26
|
+
avatar: "avatar";
|
|
27
|
+
}>;
|
|
28
|
+
export declare const storageBackends: readonly ["local", "s3", "r2"];
|
|
29
|
+
export type StorageBackend = z.infer<typeof storageConfigSchema>['backend'];
|
|
30
|
+
export declare const storageResultSchema: z.ZodObject<{
|
|
31
|
+
storagePath: z.ZodString;
|
|
32
|
+
key: z.ZodOptional<z.ZodString>;
|
|
33
|
+
bucket: z.ZodOptional<z.ZodString>;
|
|
34
|
+
size: z.ZodNumber;
|
|
35
|
+
backend: z.ZodEnum<{
|
|
36
|
+
local: "local";
|
|
37
|
+
s3: "s3";
|
|
38
|
+
r2: "r2";
|
|
39
|
+
}>;
|
|
40
|
+
}, z.core.$strip>;
|
|
41
|
+
export type StorageResult = z.infer<typeof storageResultSchema>;
|
|
42
|
+
export declare const uploadBytesSchema: z.ZodPipe<z.ZodCustom<Uint8Array<ArrayBufferLike>, Uint8Array<ArrayBufferLike>>, z.ZodTransform<Uint8Array<ArrayBufferLike>, Uint8Array<ArrayBufferLike>>>;
|
|
43
|
+
export declare const uploadStorageOptionsSchema: z.ZodObject<{
|
|
44
|
+
kind: z.ZodEnum<{
|
|
45
|
+
document: "document";
|
|
46
|
+
media: "media";
|
|
47
|
+
chat: "chat";
|
|
48
|
+
avatar: "avatar";
|
|
49
|
+
}>;
|
|
50
|
+
userId: z.ZodString;
|
|
51
|
+
buffer: z.ZodPipe<z.ZodCustom<Uint8Array<ArrayBufferLike>, Uint8Array<ArrayBufferLike>>, z.ZodTransform<Uint8Array<ArrayBufferLike>, Uint8Array<ArrayBufferLike>>>;
|
|
52
|
+
contentType: z.ZodOptional<z.ZodString>;
|
|
53
|
+
originalName: z.ZodOptional<z.ZodString>;
|
|
54
|
+
conversationId: z.ZodOptional<z.ZodString>;
|
|
55
|
+
publicUpload: z.ZodOptional<z.ZodBoolean>;
|
|
56
|
+
}, z.core.$strip>;
|
|
57
|
+
export type UploadOptions = z.infer<typeof uploadStorageOptionsSchema>;
|
|
58
|
+
export declare const storageConfigSchema: z.ZodObject<{
|
|
59
|
+
backend: z.ZodEnum<{
|
|
60
|
+
local: "local";
|
|
61
|
+
s3: "s3";
|
|
62
|
+
r2: "r2";
|
|
63
|
+
}>;
|
|
64
|
+
localPath: z.ZodOptional<z.ZodString>;
|
|
65
|
+
s3Config: z.ZodOptional<z.ZodObject<{
|
|
66
|
+
bucket: z.ZodString;
|
|
67
|
+
region: z.ZodString;
|
|
68
|
+
endpoint: z.ZodOptional<z.ZodString>;
|
|
69
|
+
forcePathStyle: z.ZodOptional<z.ZodBoolean>;
|
|
70
|
+
publicBaseUrl: z.ZodOptional<z.ZodString>;
|
|
71
|
+
credentials: z.ZodOptional<z.ZodObject<{
|
|
72
|
+
accessKeyId: z.ZodString;
|
|
73
|
+
secretAccessKey: z.ZodString;
|
|
74
|
+
sessionToken: z.ZodOptional<z.ZodString>;
|
|
75
|
+
}, z.core.$strip>>;
|
|
76
|
+
}, z.core.$strip>>;
|
|
77
|
+
}, z.core.$strip>;
|
|
78
|
+
export type StorageConfig = z.infer<typeof storageConfigSchema>;
|
|
79
|
+
export declare const MAX_FILE_SIZE: number;
|
|
80
|
+
export declare const ALLOWED_MIME_TYPES: readonly ["image/jpeg", "image/png", "image/gif", "image/webp", "application/pdf", "text/plain", "text/markdown", "application/json"];
|
|
81
|
+
export declare const allowedMimeTypeSchema: z.ZodEnum<{
|
|
82
|
+
"image/jpeg": "image/jpeg";
|
|
83
|
+
"image/png": "image/png";
|
|
84
|
+
"image/gif": "image/gif";
|
|
85
|
+
"image/webp": "image/webp";
|
|
86
|
+
"application/pdf": "application/pdf";
|
|
87
|
+
"text/plain": "text/plain";
|
|
88
|
+
"text/markdown": "text/markdown";
|
|
89
|
+
"application/json": "application/json";
|
|
90
|
+
}>;
|
|
91
|
+
export declare const mimeTypeToExtension: {
|
|
92
|
+
readonly 'image/jpeg': "jpg";
|
|
93
|
+
readonly 'image/png': "png";
|
|
94
|
+
readonly 'image/gif': "gif";
|
|
95
|
+
readonly 'image/webp': "webp";
|
|
96
|
+
readonly 'application/pdf': "pdf";
|
|
97
|
+
readonly 'text/plain': "txt";
|
|
98
|
+
readonly 'text/markdown': "md";
|
|
99
|
+
readonly 'application/json': "json";
|
|
100
|
+
};
|
|
101
|
+
type AllowedMimeType = (typeof ALLOWED_MIME_TYPES)[number];
|
|
102
|
+
export declare const extensionToMimeType: Record<string, AllowedMimeType>;
|
|
103
|
+
export declare function resolveMimeTypeFromExtension(extension: string | undefined): string | null;
|
|
104
|
+
export declare function resolveExtensionFromMimeType(contentType: string | undefined): string | null;
|
|
105
|
+
/** The old validation codes, kept as `legacyCode`, and the typed refusal reason each now carries. */
|
|
106
|
+
declare const UPLOAD_VALIDATION_REASONS: {
|
|
107
|
+
readonly EMPTY_FILE: "upload-file-empty";
|
|
108
|
+
readonly FILE_TOO_LARGE: "upload-file-too-large";
|
|
109
|
+
readonly INVALID_MIME_TYPE: "upload-type-not-allowed";
|
|
110
|
+
readonly INVALID_SIZE: "upload-size-invalid";
|
|
111
|
+
readonly INVALID_LIMITS: "upload-limits-invalid";
|
|
112
|
+
};
|
|
113
|
+
export type UploadValidationLegacyCode = keyof typeof UPLOAD_VALIDATION_REASONS;
|
|
114
|
+
/** An upload that fails validation: `INVALID_INPUT` with the reason and the old code, naming no value. */
|
|
115
|
+
export declare class UploadValidationError extends CapabilityError {
|
|
116
|
+
readonly legacyCode: UploadValidationLegacyCode;
|
|
117
|
+
constructor(message: string, legacyCode: UploadValidationLegacyCode, options?: {
|
|
118
|
+
cause?: Error;
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
/** A caller's own limits for one upload: a size cap and a media-type allowlist, each replacing the package default. */
|
|
122
|
+
export type UploadLimits = z.input<typeof uploadLimitsSchema>;
|
|
123
|
+
/**
|
|
124
|
+
* Validates file metadata against constraints. The size must be a finite
|
|
125
|
+
* integer; the content type is compared by its media type alone. `limits`
|
|
126
|
+
* replaces the package size cap and allowlist for this one upload.
|
|
127
|
+
*/
|
|
128
|
+
export declare function validateUpload(size: number, contentType?: string, limits?: UploadLimits): {
|
|
129
|
+
valid: true;
|
|
130
|
+
} | {
|
|
131
|
+
valid: false;
|
|
132
|
+
error: UploadValidationError;
|
|
133
|
+
};
|
|
134
|
+
export {};
|
|
135
|
+
//# sourceMappingURL=common.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../../src/uploads/schemas/common.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAGtD;;;;;;;GAOG;AACH,eAAO,MAAM,kBAAkB;;;iBAG7B,CAAC;AAEH,eAAO,MAAM,WAAW,kDAAmD,CAAC;AAC5E,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D,eAAO,MAAM,gBAAgB;;;;;EAAsB,CAAC;AAEpD,eAAO,MAAM,eAAe,gCAAiC,CAAC;AAC9D,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC,SAAS,CAAC,CAAC;AAE5E,eAAO,MAAM,mBAAmB;;;;;;;;;;iBAG9B,CAAC;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE,eAAO,MAAM,iBAAiB,4JAC2B,CAAC;AAE1D,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;iBAQrC,CAAC;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAEvE,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;iBAW9B,CAAC;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE,eAAO,MAAM,aAAa,QAAmB,CAAC;AAC9C,eAAO,MAAM,kBAAkB,uIASrB,CAAC;AAEX,eAAO,MAAM,qBAAqB;;;;;;;;;EAA6B,CAAC;AAEhE,eAAO,MAAM,mBAAmB;;;;;;;;;CASwC,CAAC;AAEzE,KAAK,eAAe,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;AAM3D,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAwC,CAAC;AAEzG,wBAAgB,4BAA4B,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAGzF;AAED,wBAAgB,4BAA4B,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAI3F;AAED,qGAAqG;AACrG,QAAA,MAAM,yBAAyB;;;;;;CAMrB,CAAC;AAEX,MAAM,MAAM,0BAA0B,GAAG,MAAM,OAAO,yBAAyB,CAAC;AAEhF,0GAA0G;AAC1G,qBAAa,qBAAsB,SAAQ,eAAe;IACzD,SAAgB,UAAU,EAAE,0BAA0B,CAAC;gBAE3C,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,0BAA0B,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,KAAK,CAAA;KAAE;CAUhG;AAOD,uHAAuH;AACvH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D;;;;GAIG;AACH,wBAAgB,cAAc,CAC7B,IAAI,EAAE,MAAM,EACZ,WAAW,CAAC,EAAE,MAAM,EACpB,MAAM,GAAE,YAAiB,GACvB;IAAE,KAAK,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,qBAAqB,CAAA;CAAE,CAuClE"}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Upload Schema - Common Types
|
|
3
|
+
*
|
|
4
|
+
* Shared types and utilities for file uploads.
|
|
5
|
+
*/
|
|
6
|
+
import * as z from 'zod/v4';
|
|
7
|
+
import { CapabilityError } from '@vibesdotdev/kernel';
|
|
8
|
+
import { attemptSync } from "../../utils/attempt.js";
|
|
9
|
+
/**
|
|
10
|
+
* A caller's own limits for one upload. Owned here so the exported
|
|
11
|
+
* `validateUpload` primitive enforces the same contract the HTTP client
|
|
12
|
+
* request schema enforces: a size cap must be a positive safe integer
|
|
13
|
+
* (never NaN, negative, fractional, infinite, or unsafe), and an allowlist
|
|
14
|
+
* must be strings. `validateUpload` refuses non-conforming caps with
|
|
15
|
+
* `upload-limits-invalid` rather than silently comparing against them.
|
|
16
|
+
*/
|
|
17
|
+
export const uploadLimitsSchema = z.object({
|
|
18
|
+
maxSize: z.number().int().positive().max(Number.MAX_SAFE_INTEGER).optional(),
|
|
19
|
+
allowList: z.array(z.string()).optional()
|
|
20
|
+
});
|
|
21
|
+
export const uploadKinds = ['media', 'chat', 'avatar', 'document'];
|
|
22
|
+
export const uploadKindSchema = z.enum(uploadKinds);
|
|
23
|
+
export const storageBackends = ['local', 's3', 'r2'];
|
|
24
|
+
export const storageResultSchema = z.object({
|
|
25
|
+
storagePath: z.string(), key: z.string().optional(), bucket: z.string().optional(),
|
|
26
|
+
size: z.number().int().nonnegative(), backend: z.enum(storageBackends)
|
|
27
|
+
});
|
|
28
|
+
export const uploadBytesSchema = z.custom(value => value instanceof Uint8Array)
|
|
29
|
+
.transform((value) => new Uint8Array(value));
|
|
30
|
+
export const uploadStorageOptionsSchema = z.object({
|
|
31
|
+
kind: uploadKindSchema,
|
|
32
|
+
userId: z.string(),
|
|
33
|
+
buffer: uploadBytesSchema,
|
|
34
|
+
contentType: z.string().optional(),
|
|
35
|
+
originalName: z.string().optional(),
|
|
36
|
+
conversationId: z.string().optional(),
|
|
37
|
+
publicUpload: z.boolean().optional()
|
|
38
|
+
});
|
|
39
|
+
export const storageConfigSchema = z.object({
|
|
40
|
+
backend: z.enum(storageBackends),
|
|
41
|
+
localPath: z.string().optional(),
|
|
42
|
+
s3Config: z.object({
|
|
43
|
+
bucket: z.string(), region: z.string(),
|
|
44
|
+
endpoint: z.string().optional(), forcePathStyle: z.boolean().optional(),
|
|
45
|
+
publicBaseUrl: z.string().optional(),
|
|
46
|
+
credentials: z.object({
|
|
47
|
+
accessKeyId: z.string(), secretAccessKey: z.string(), sessionToken: z.string().optional()
|
|
48
|
+
}).optional()
|
|
49
|
+
}).optional()
|
|
50
|
+
});
|
|
51
|
+
export const MAX_FILE_SIZE = 50 * 1024 * 1024; // 50MB
|
|
52
|
+
export const ALLOWED_MIME_TYPES = [
|
|
53
|
+
'image/jpeg',
|
|
54
|
+
'image/png',
|
|
55
|
+
'image/gif',
|
|
56
|
+
'image/webp',
|
|
57
|
+
'application/pdf',
|
|
58
|
+
'text/plain',
|
|
59
|
+
'text/markdown',
|
|
60
|
+
'application/json'
|
|
61
|
+
];
|
|
62
|
+
export const allowedMimeTypeSchema = z.enum(ALLOWED_MIME_TYPES);
|
|
63
|
+
export const mimeTypeToExtension = {
|
|
64
|
+
'image/jpeg': 'jpg',
|
|
65
|
+
'image/png': 'png',
|
|
66
|
+
'image/gif': 'gif',
|
|
67
|
+
'image/webp': 'webp',
|
|
68
|
+
'application/pdf': 'pdf',
|
|
69
|
+
'text/plain': 'txt',
|
|
70
|
+
'text/markdown': 'md',
|
|
71
|
+
'application/json': 'json'
|
|
72
|
+
};
|
|
73
|
+
const extensionEntries = ALLOWED_MIME_TYPES.map((mimeType) => [mimeTypeToExtension[mimeType], mimeType]);
|
|
74
|
+
export const extensionToMimeType = Object.fromEntries(extensionEntries);
|
|
75
|
+
export function resolveMimeTypeFromExtension(extension) {
|
|
76
|
+
if (!extension)
|
|
77
|
+
return null;
|
|
78
|
+
return extensionToMimeType[extension.toLowerCase()] ?? null;
|
|
79
|
+
}
|
|
80
|
+
export function resolveExtensionFromMimeType(contentType) {
|
|
81
|
+
if (!contentType)
|
|
82
|
+
return null;
|
|
83
|
+
const mimeType = allowedMimeTypeSchema.safeParse(mediaTypeOf(contentType));
|
|
84
|
+
return mimeType.success ? mimeTypeToExtension[mimeType.data] : null;
|
|
85
|
+
}
|
|
86
|
+
/** The old validation codes, kept as `legacyCode`, and the typed refusal reason each now carries. */
|
|
87
|
+
const UPLOAD_VALIDATION_REASONS = {
|
|
88
|
+
EMPTY_FILE: 'upload-file-empty',
|
|
89
|
+
FILE_TOO_LARGE: 'upload-file-too-large',
|
|
90
|
+
INVALID_MIME_TYPE: 'upload-type-not-allowed',
|
|
91
|
+
INVALID_SIZE: 'upload-size-invalid',
|
|
92
|
+
INVALID_LIMITS: 'upload-limits-invalid'
|
|
93
|
+
};
|
|
94
|
+
/** An upload that fails validation: `INVALID_INPUT` with the reason and the old code, naming no value. */
|
|
95
|
+
export class UploadValidationError extends CapabilityError {
|
|
96
|
+
legacyCode;
|
|
97
|
+
constructor(message, legacyCode, options) {
|
|
98
|
+
super(message, 'INVALID_INPUT', {
|
|
99
|
+
reason: UPLOAD_VALIDATION_REASONS[legacyCode],
|
|
100
|
+
retryable: false,
|
|
101
|
+
details: { legacyCode },
|
|
102
|
+
cause: options?.cause
|
|
103
|
+
});
|
|
104
|
+
this.name = 'UploadValidationError';
|
|
105
|
+
this.legacyCode = legacyCode;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
/** The media type alone: parameters after `;` dropped, trimmed and lower-cased. */
|
|
109
|
+
function mediaTypeOf(contentType) {
|
|
110
|
+
return (contentType.split(';')[0] ?? '').trim().toLowerCase();
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Validates file metadata against constraints. The size must be a finite
|
|
114
|
+
* integer; the content type is compared by its media type alone. `limits`
|
|
115
|
+
* replaces the package size cap and allowlist for this one upload.
|
|
116
|
+
*/
|
|
117
|
+
export function validateUpload(size, contentType, limits = {}) {
|
|
118
|
+
// Limits are validated through the owning schema, the same one the HTTP
|
|
119
|
+
// client request uses, so a NaN, negative, fractional, infinite, or unsafe
|
|
120
|
+
// cap is refused instead of silently loosening the comparison below.
|
|
121
|
+
const checkedLimits = attemptSync(() => uploadLimitsSchema.safeParse(limits));
|
|
122
|
+
if (!checkedLimits.ok || !checkedLimits.value.success) {
|
|
123
|
+
return {
|
|
124
|
+
valid: false,
|
|
125
|
+
error: new UploadValidationError('The upload limits are invalid.', 'INVALID_LIMITS')
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
if (!Number.isSafeInteger(size) || size < 0) {
|
|
129
|
+
return {
|
|
130
|
+
valid: false,
|
|
131
|
+
error: new UploadValidationError('The upload size is not a whole number of bytes.', 'INVALID_SIZE')
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
if (size === 0) {
|
|
135
|
+
return { valid: false, error: new UploadValidationError('The upload is empty.', 'EMPTY_FILE') };
|
|
136
|
+
}
|
|
137
|
+
if (size > (checkedLimits.value.data.maxSize ?? MAX_FILE_SIZE)) {
|
|
138
|
+
return {
|
|
139
|
+
valid: false,
|
|
140
|
+
error: new UploadValidationError('The upload is larger than the maximum size.', 'FILE_TOO_LARGE')
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
const allowList = checkedLimits.value.data.allowList?.map(mediaTypeOf) ?? ALLOWED_MIME_TYPES;
|
|
144
|
+
if (contentType && !allowList.some((allowed) => allowed === mediaTypeOf(contentType))) {
|
|
145
|
+
return {
|
|
146
|
+
valid: false,
|
|
147
|
+
error: new UploadValidationError('The upload type is not allowed.', 'INVALID_MIME_TYPE')
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
return { valid: true };
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=common.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../../src/uploads/schemas/common.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Upload Schema - Form Validation
|
|
3
|
+
*
|
|
4
|
+
* Form schemas for file upload validation.
|
|
5
|
+
*/
|
|
6
|
+
import * as z from 'zod/v4';
|
|
7
|
+
export declare const uploadRequestSchema: z.ZodObject<{
|
|
8
|
+
kind: z.ZodEnum<{
|
|
9
|
+
document: "document";
|
|
10
|
+
media: "media";
|
|
11
|
+
chat: "chat";
|
|
12
|
+
avatar: "avatar";
|
|
13
|
+
}>;
|
|
14
|
+
conversationId: z.ZodOptional<z.ZodUUID>;
|
|
15
|
+
publicUpload: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
16
|
+
}, z.core.$strip>;
|
|
17
|
+
export declare const uploadFileSchema: z.ZodObject<{
|
|
18
|
+
name: z.ZodString;
|
|
19
|
+
size: z.ZodNumber;
|
|
20
|
+
type: z.ZodOptional<z.ZodEnum<{
|
|
21
|
+
"image/jpeg": "image/jpeg";
|
|
22
|
+
"image/png": "image/png";
|
|
23
|
+
"image/gif": "image/gif";
|
|
24
|
+
"image/webp": "image/webp";
|
|
25
|
+
"application/pdf": "application/pdf";
|
|
26
|
+
"text/plain": "text/plain";
|
|
27
|
+
"text/markdown": "text/markdown";
|
|
28
|
+
"application/json": "application/json";
|
|
29
|
+
}>>;
|
|
30
|
+
}, z.core.$strip>;
|
|
31
|
+
export declare const uploadResponseSchema: z.ZodObject<{
|
|
32
|
+
id: z.ZodUUID;
|
|
33
|
+
storagePath: z.ZodString;
|
|
34
|
+
size: z.ZodNumber;
|
|
35
|
+
originalName: z.ZodOptional<z.ZodString>;
|
|
36
|
+
contentType: z.ZodOptional<z.ZodString>;
|
|
37
|
+
publicUrl: z.ZodOptional<z.ZodString>;
|
|
38
|
+
}, z.core.$strip>;
|
|
39
|
+
export declare const uploadServerResponseSchema: z.ZodObject<{
|
|
40
|
+
id: z.ZodString;
|
|
41
|
+
url: z.ZodString;
|
|
42
|
+
filename: z.ZodOptional<z.ZodString>;
|
|
43
|
+
mediaType: z.ZodOptional<z.ZodString>;
|
|
44
|
+
fileSize: z.ZodNumber;
|
|
45
|
+
}, z.core.$strip>;
|
|
46
|
+
export type UploadServerResponse = z.infer<typeof uploadServerResponseSchema>;
|
|
47
|
+
export declare const getUploadUrlRequestSchema: z.ZodObject<{
|
|
48
|
+
uploadId: z.ZodUUID;
|
|
49
|
+
expiresIn: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
50
|
+
}, z.core.$strip>;
|
|
51
|
+
export declare const deleteUploadRequestSchema: z.ZodObject<{
|
|
52
|
+
uploadId: z.ZodUUID;
|
|
53
|
+
}, z.core.$strip>;
|
|
54
|
+
export type UploadRequest = z.infer<typeof uploadRequestSchema>;
|
|
55
|
+
export type UploadFile = z.infer<typeof uploadFileSchema>;
|
|
56
|
+
export type UploadResponse = z.infer<typeof uploadResponseSchema>;
|
|
57
|
+
export type GetUploadUrlRequest = z.infer<typeof getUploadUrlRequestSchema>;
|
|
58
|
+
export type DeleteUploadRequest = z.infer<typeof deleteUploadRequestSchema>;
|
|
59
|
+
//# sourceMappingURL=forms.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"forms.d.ts","sourceRoot":"","sources":["../../../src/uploads/schemas/forms.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAG5B,eAAO,MAAM,mBAAmB;;;;;;;;;iBAI9B,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;iBAI3B,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;;;;iBAO/B,CAAC;AAGH,eAAO,MAAM,0BAA0B;;;;;;iBAMrC,CAAC;AAEH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAE9E,eAAO,MAAM,yBAAyB;;;iBAGpC,CAAC;AAEH,eAAO,MAAM,yBAAyB;;iBAEpC,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAChE,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAC1D,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAClE,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAC5E,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Upload Schema - Form Validation
|
|
3
|
+
*
|
|
4
|
+
* Form schemas for file upload validation.
|
|
5
|
+
*/
|
|
6
|
+
import * as z from 'zod/v4';
|
|
7
|
+
import { uploadKindSchema, allowedMimeTypeSchema, MAX_FILE_SIZE } from "./common.js";
|
|
8
|
+
export const uploadRequestSchema = z.object({
|
|
9
|
+
kind: uploadKindSchema,
|
|
10
|
+
conversationId: z.uuid().optional(),
|
|
11
|
+
publicUpload: z.boolean().optional().default(false)
|
|
12
|
+
});
|
|
13
|
+
export const uploadFileSchema = z.object({
|
|
14
|
+
name: z.string().min(1).max(255),
|
|
15
|
+
size: z.number().int().min(1).max(MAX_FILE_SIZE),
|
|
16
|
+
type: allowedMimeTypeSchema.optional()
|
|
17
|
+
});
|
|
18
|
+
export const uploadResponseSchema = z.object({
|
|
19
|
+
id: z.uuid(),
|
|
20
|
+
storagePath: z.string(),
|
|
21
|
+
size: z.number().int(),
|
|
22
|
+
originalName: z.string().optional(),
|
|
23
|
+
contentType: z.string().optional(),
|
|
24
|
+
publicUrl: z.string().optional()
|
|
25
|
+
});
|
|
26
|
+
// Server response from platform-web /api/storage/upload
|
|
27
|
+
export const uploadServerResponseSchema = z.object({
|
|
28
|
+
id: z.string().uuid(),
|
|
29
|
+
url: z.string().url(),
|
|
30
|
+
filename: z.string().optional(),
|
|
31
|
+
mediaType: z.string().optional(),
|
|
32
|
+
fileSize: z.number().int()
|
|
33
|
+
});
|
|
34
|
+
export const getUploadUrlRequestSchema = z.object({
|
|
35
|
+
uploadId: z.uuid(),
|
|
36
|
+
expiresIn: z.number().int().min(60).max(3600).optional().default(3600)
|
|
37
|
+
});
|
|
38
|
+
export const deleteUploadRequestSchema = z.object({
|
|
39
|
+
uploadId: z.uuid()
|
|
40
|
+
});
|
|
41
|
+
//# sourceMappingURL=forms.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"forms.js","sourceRoot":"","sources":["../../../src/uploads/schemas/forms.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAErF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,IAAI,EAAE,gBAAgB;IACtB,cAAc,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;IACnC,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;CACnD,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IAChC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC;IAChD,IAAI,EAAE,qBAAqB,CAAC,QAAQ,EAAE;CACtC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE;IACZ,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;IACvB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;IACtB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACnC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAChC,CAAC,CAAC;AAEH,wDAAwD;AACxD,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC;IAClD,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE;IACrB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;IACrB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;CAC1B,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IACjD,QAAQ,EAAE,CAAC,CAAC,IAAI,EAAE;IAClB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;CACtE,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IACjD,QAAQ,EAAE,CAAC,CAAC,IAAI,EAAE;CAClB,CAAC,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Upload Schemas - Exports
|
|
3
|
+
*
|
|
4
|
+
* Browser-safe schema types and validation utilities.
|
|
5
|
+
* Table definitions are server-only and not exported here.
|
|
6
|
+
*/
|
|
7
|
+
export { uploadStorageOptionsSchema, storageConfigSchema, storageResultSchema, uploadKinds, uploadKindSchema, storageBackends, allowedMimeTypeSchema, MAX_FILE_SIZE, ALLOWED_MIME_TYPES, mimeTypeToExtension, extensionToMimeType, resolveMimeTypeFromExtension, resolveExtensionFromMimeType, UploadValidationError, validateUpload, } from './common.ts';
|
|
8
|
+
export type { UploadKind, StorageBackend, StorageResult, UploadOptions, StorageConfig, } from './common.ts';
|
|
9
|
+
export { uploadRequestSchema, uploadFileSchema, uploadResponseSchema, uploadServerResponseSchema, getUploadUrlRequestSchema, deleteUploadRequestSchema, } from './forms.ts';
|
|
10
|
+
export type { UploadServerResponse, UploadRequest, UploadFile, UploadResponse, GetUploadUrlRequest, DeleteUploadRequest, } from './forms.ts';
|
|
11
|
+
export type { Upload, NewUpload, UploadUpdate } from './records.ts';
|
|
12
|
+
export { shareLinkSchema, createShareLinkOptionsSchema, shareLinkResultSchema, shareLinkListResultSchema, } from './shares.ts';
|
|
13
|
+
export type { ShareLink, CreateShareLinkOptions } from './shares.ts';
|
|
14
|
+
export { uploadClientOptionsSchema, uploadPayloadSchema } from './requests.ts';
|
|
15
|
+
export type { UploadClientOptions } from './requests.ts';
|
|
16
|
+
export { uploadLimitsSchema } from './common.ts';
|
|
17
|
+
export type { UploadLimits } from './common.ts';
|
|
18
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/uploads/schemas/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACN,0BAA0B,EAC1B,mBAAmB,EACnB,mBAAmB,EACnB,WAAW,EACX,gBAAgB,EAChB,eAAe,EACf,qBAAqB,EACrB,aAAa,EACb,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,4BAA4B,EAC5B,4BAA4B,EAC5B,qBAAqB,EACrB,cAAc,GACd,MAAM,aAAa,CAAC;AACrB,YAAY,EACX,UAAU,EACV,cAAc,EACd,aAAa,EACb,aAAa,EACb,aAAa,GACb,MAAM,aAAa,CAAC;AACrB,OAAO,EACN,mBAAmB,EACnB,gBAAgB,EAChB,oBAAoB,EACpB,0BAA0B,EAC1B,yBAAyB,EACzB,yBAAyB,GACzB,MAAM,YAAY,CAAC;AACpB,YAAY,EACX,oBAAoB,EACpB,aAAa,EACb,UAAU,EACV,cAAc,EACd,mBAAmB,EACnB,mBAAmB,GACnB,MAAM,YAAY,CAAC;AAGpB,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAGpE,OAAO,EACN,eAAe,EACf,4BAA4B,EAC5B,qBAAqB,EACrB,yBAAyB,GACzB,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,SAAS,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAErE,OAAO,EAAE,yBAAyB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAC/E,YAAY,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Upload Schemas - Exports
|
|
3
|
+
*
|
|
4
|
+
* Browser-safe schema types and validation utilities.
|
|
5
|
+
* Table definitions are server-only and not exported here.
|
|
6
|
+
*/
|
|
7
|
+
export { uploadStorageOptionsSchema, storageConfigSchema, storageResultSchema, uploadKinds, uploadKindSchema, storageBackends, allowedMimeTypeSchema, MAX_FILE_SIZE, ALLOWED_MIME_TYPES, mimeTypeToExtension, extensionToMimeType, resolveMimeTypeFromExtension, resolveExtensionFromMimeType, UploadValidationError, validateUpload, } from "./common.js";
|
|
8
|
+
export { uploadRequestSchema, uploadFileSchema, uploadResponseSchema, uploadServerResponseSchema, getUploadUrlRequestSchema, deleteUploadRequestSchema, } from "./forms.js";
|
|
9
|
+
// Revocable share-link wire shapes (canonical row lives in platform-web)
|
|
10
|
+
export { shareLinkSchema, createShareLinkOptionsSchema, shareLinkResultSchema, shareLinkListResultSchema, } from "./shares.js";
|
|
11
|
+
export { uploadClientOptionsSchema, uploadPayloadSchema } from "./requests.js";
|
|
12
|
+
export { uploadLimitsSchema } from "./common.js";
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/uploads/schemas/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACN,0BAA0B,EAC1B,mBAAmB,EACnB,mBAAmB,EACnB,WAAW,EACX,gBAAgB,EAChB,eAAe,EACf,qBAAqB,EACrB,aAAa,EACb,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,4BAA4B,EAC5B,4BAA4B,EAC5B,qBAAqB,EACrB,cAAc,GACd,MAAM,aAAa,CAAC;AAQrB,OAAO,EACN,mBAAmB,EACnB,gBAAgB,EAChB,oBAAoB,EACpB,0BAA0B,EAC1B,yBAAyB,EACzB,yBAAyB,GACzB,MAAM,YAAY,CAAC;AAapB,yEAAyE;AACzE,OAAO,EACN,eAAe,EACf,4BAA4B,EAC5B,qBAAqB,EACrB,yBAAyB,GACzB,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,yBAAyB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAE/E,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC"}
|