@panorama-industries/effect-vercel-blob 0.0.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (143) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +12 -1
  3. package/dist/client.d.ts +8 -0
  4. package/dist/client.d.ts.map +1 -0
  5. package/dist/client.js +8 -0
  6. package/dist/client.js.map +1 -0
  7. package/dist/contracts/blob-client.d.ts +67 -0
  8. package/dist/contracts/blob-client.d.ts.map +1 -0
  9. package/dist/contracts/blob-client.js +11 -0
  10. package/dist/contracts/blob-client.js.map +1 -0
  11. package/dist/contracts/blob-config.d.ts +114 -0
  12. package/dist/contracts/blob-config.d.ts.map +1 -0
  13. package/dist/contracts/blob-config.js +7 -0
  14. package/dist/contracts/blob-config.js.map +1 -0
  15. package/dist/contracts/blob-domain.d.ts +336 -0
  16. package/dist/contracts/blob-domain.d.ts.map +1 -0
  17. package/dist/contracts/blob-domain.js +152 -0
  18. package/dist/contracts/blob-domain.js.map +1 -0
  19. package/dist/contracts/blob-errors.d.ts +125 -0
  20. package/dist/contracts/blob-errors.d.ts.map +1 -0
  21. package/dist/contracts/blob-errors.js +114 -0
  22. package/dist/contracts/blob-errors.js.map +1 -0
  23. package/dist/contracts/blob-signed-urls.d.ts +83 -0
  24. package/dist/contracts/blob-signed-urls.d.ts.map +1 -0
  25. package/dist/contracts/blob-signed-urls.js +10 -0
  26. package/dist/contracts/blob-signed-urls.js.map +1 -0
  27. package/dist/contracts/blob-store.d.ts +153 -0
  28. package/dist/contracts/blob-store.d.ts.map +1 -0
  29. package/dist/contracts/blob-store.js +15 -0
  30. package/dist/contracts/blob-store.js.map +1 -0
  31. package/dist/contracts/blob-uploads.d.ts +101 -0
  32. package/dist/contracts/blob-uploads.d.ts.map +1 -0
  33. package/dist/contracts/blob-uploads.js +17 -0
  34. package/dist/contracts/blob-uploads.js.map +1 -0
  35. package/dist/implementation/blob-client-live.d.ts +37 -0
  36. package/dist/implementation/blob-client-live.d.ts.map +1 -0
  37. package/dist/implementation/blob-client-live.js +213 -0
  38. package/dist/implementation/blob-client-live.js.map +1 -0
  39. package/dist/implementation/blob-config-live.d.ts +49 -0
  40. package/dist/implementation/blob-config-live.d.ts.map +1 -0
  41. package/dist/implementation/blob-config-live.js +82 -0
  42. package/dist/implementation/blob-config-live.js.map +1 -0
  43. package/dist/implementation/blob-live.d.ts +16 -0
  44. package/dist/implementation/blob-live.d.ts.map +1 -0
  45. package/dist/implementation/blob-live.js +16 -0
  46. package/dist/implementation/blob-live.js.map +1 -0
  47. package/dist/implementation/blob-signed-urls-live.d.ts +12 -0
  48. package/dist/implementation/blob-signed-urls-live.d.ts.map +1 -0
  49. package/dist/implementation/blob-signed-urls-live.js +92 -0
  50. package/dist/implementation/blob-signed-urls-live.js.map +1 -0
  51. package/dist/implementation/blob-store-live.d.ts +18 -0
  52. package/dist/implementation/blob-store-live.d.ts.map +1 -0
  53. package/dist/implementation/blob-store-live.js +364 -0
  54. package/dist/implementation/blob-store-live.js.map +1 -0
  55. package/dist/implementation/blob-uploads-live.d.ts +11 -0
  56. package/dist/implementation/blob-uploads-live.d.ts.map +1 -0
  57. package/dist/implementation/blob-uploads-live.js +218 -0
  58. package/dist/implementation/blob-uploads-live.js.map +1 -0
  59. package/dist/index.d.ts +15 -0
  60. package/dist/index.d.ts.map +1 -0
  61. package/dist/index.js +15 -0
  62. package/dist/index.js.map +1 -0
  63. package/dist/internal/blob-errors.d.ts +79 -0
  64. package/dist/internal/blob-errors.d.ts.map +1 -0
  65. package/dist/internal/blob-errors.js +196 -0
  66. package/dist/internal/blob-errors.js.map +1 -0
  67. package/dist/internal/blob-request.d.ts +255 -0
  68. package/dist/internal/blob-request.d.ts.map +1 -0
  69. package/dist/internal/blob-request.js +291 -0
  70. package/dist/internal/blob-request.js.map +1 -0
  71. package/dist/internal/callback.d.ts +70 -0
  72. package/dist/internal/callback.d.ts.map +1 -0
  73. package/dist/internal/callback.js +141 -0
  74. package/dist/internal/callback.js.map +1 -0
  75. package/dist/internal/client-token.d.ts +65 -0
  76. package/dist/internal/client-token.d.ts.map +1 -0
  77. package/dist/internal/client-token.js +80 -0
  78. package/dist/internal/client-token.js.map +1 -0
  79. package/dist/internal/env.d.ts +34 -0
  80. package/dist/internal/env.d.ts.map +1 -0
  81. package/dist/internal/env.js +61 -0
  82. package/dist/internal/env.js.map +1 -0
  83. package/dist/internal/multipart.d.ts +110 -0
  84. package/dist/internal/multipart.d.ts.map +1 -0
  85. package/dist/internal/multipart.js +290 -0
  86. package/dist/internal/multipart.js.map +1 -0
  87. package/dist/internal/presign.d.ts +123 -0
  88. package/dist/internal/presign.d.ts.map +1 -0
  89. package/dist/internal/presign.js +345 -0
  90. package/dist/internal/presign.js.map +1 -0
  91. package/dist/internal/store-id.d.ts +38 -0
  92. package/dist/internal/store-id.d.ts.map +1 -0
  93. package/dist/internal/store-id.js +54 -0
  94. package/dist/internal/store-id.js.map +1 -0
  95. package/dist/internal/urls.d.ts +26 -0
  96. package/dist/internal/urls.d.ts.map +1 -0
  97. package/dist/internal/urls.js +33 -0
  98. package/dist/internal/urls.js.map +1 -0
  99. package/dist/internal/wire.d.ts +55 -0
  100. package/dist/internal/wire.d.ts.map +1 -0
  101. package/dist/internal/wire.js +64 -0
  102. package/dist/internal/wire.js.map +1 -0
  103. package/dist/internal/write-headers.d.ts +56 -0
  104. package/dist/internal/write-headers.d.ts.map +1 -0
  105. package/dist/internal/write-headers.js +82 -0
  106. package/dist/internal/write-headers.js.map +1 -0
  107. package/dist/testing/index.d.ts +2 -0
  108. package/dist/testing/index.d.ts.map +1 -0
  109. package/dist/testing/index.js +2 -0
  110. package/dist/testing/index.js.map +1 -0
  111. package/dist/testing/test-blob-store.d.ts +134 -0
  112. package/dist/testing/test-blob-store.d.ts.map +1 -0
  113. package/dist/testing/test-blob-store.js +718 -0
  114. package/dist/testing/test-blob-store.js.map +1 -0
  115. package/package.json +58 -4
  116. package/src/client.ts +11 -0
  117. package/src/contracts/blob-client.ts +121 -0
  118. package/src/contracts/blob-config.ts +64 -0
  119. package/src/contracts/blob-domain.ts +304 -0
  120. package/src/contracts/blob-errors.ts +161 -0
  121. package/src/contracts/blob-signed-urls.ts +112 -0
  122. package/src/contracts/blob-store.ts +258 -0
  123. package/src/contracts/blob-uploads.ts +151 -0
  124. package/src/implementation/blob-client-live.ts +387 -0
  125. package/src/implementation/blob-config-live.ts +145 -0
  126. package/src/implementation/blob-live.ts +30 -0
  127. package/src/implementation/blob-signed-urls-live.ts +121 -0
  128. package/src/implementation/blob-store-live.ts +528 -0
  129. package/src/implementation/blob-uploads-live.ts +326 -0
  130. package/src/index.ts +18 -0
  131. package/src/internal/blob-errors.ts +325 -0
  132. package/src/internal/blob-request.ts +617 -0
  133. package/src/internal/callback.ts +200 -0
  134. package/src/internal/client-token.ts +132 -0
  135. package/src/internal/env.ts +128 -0
  136. package/src/internal/multipart.ts +526 -0
  137. package/src/internal/presign.ts +477 -0
  138. package/src/internal/store-id.ts +69 -0
  139. package/src/internal/urls.ts +42 -0
  140. package/src/internal/wire.ts +80 -0
  141. package/src/internal/write-headers.ts +118 -0
  142. package/src/testing/index.ts +1 -0
  143. package/src/testing/test-blob-store.ts +1136 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-blob-store.js","sourceRoot":"","sources":["../../src/testing/test-blob-store.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,14 +1,68 @@
1
1
  {
2
+ "$schema": "../../.vscode/schemas/package.schema.json",
2
3
  "name": "@panorama-industries/effect-vercel-blob",
3
- "version": "0.0.0",
4
- "description": "Placeholder for @panorama-industries/effect-vercel-blob. Real releases are published from CI.",
4
+ "version": "0.2.0",
5
+ "description": "Effect-native client for Vercel Blob: uploads, downloads, listing, multipart, signed URLs and browser uploads.",
6
+ "keywords": [
7
+ "blob",
8
+ "effect",
9
+ "sdk",
10
+ "storage",
11
+ "typescript",
12
+ "vercel",
13
+ "vercel-blob"
14
+ ],
5
15
  "license": "MIT",
16
+ "author": {
17
+ "name": "Santiago Galán",
18
+ "email": "santiago@panorama.industries",
19
+ "url": "https://sgalanb.com"
20
+ },
6
21
  "repository": {
7
22
  "type": "git",
8
23
  "url": "git+https://github.com/panorama-industries/effect-vercel.git",
9
24
  "directory": "packages/blob"
10
25
  },
26
+ "files": [
27
+ "src/**/*.ts",
28
+ "!src/**/*.test.ts",
29
+ "dist/**/*.js",
30
+ "dist/**/*.js.map",
31
+ "dist/**/*.d.ts",
32
+ "dist/**/*.d.ts.map"
33
+ ],
34
+ "type": "module",
35
+ "sideEffects": false,
36
+ "exports": {
37
+ "./package.json": "./package.json",
38
+ ".": {
39
+ "effect-vercel-source": "./src/index.ts",
40
+ "types": "./dist/index.d.ts",
41
+ "default": "./dist/index.js"
42
+ },
43
+ "./client": {
44
+ "effect-vercel-source": "./src/client.ts",
45
+ "types": "./dist/client.d.ts",
46
+ "default": "./dist/client.js"
47
+ },
48
+ "./testing": {
49
+ "effect-vercel-source": "./src/testing/index.ts",
50
+ "types": "./dist/testing/index.d.ts",
51
+ "default": "./dist/testing/index.js"
52
+ }
53
+ },
11
54
  "publishConfig": {
12
- "access": "public"
55
+ "access": "public",
56
+ "provenance": true
57
+ },
58
+ "dependencies": {
59
+ "@panorama-industries/effect-vercel-core": "^0.2.0"
60
+ },
61
+ "devDependencies": {
62
+ "@vercel/blob": "2.8.2",
63
+ "effect": "4.0.6"
64
+ },
65
+ "peerDependencies": {
66
+ "effect": "^4.0.6"
13
67
  }
14
- }
68
+ }
package/src/client.ts ADDED
@@ -0,0 +1,11 @@
1
+ export * from "./contracts/blob-client.ts";
2
+ export * from "./contracts/blob-domain.ts";
3
+ export * from "./contracts/blob-errors.ts";
4
+ export { storeIdFromDelegationToken } from "./internal/store-id.ts";
5
+ export { downloadUrl } from "./internal/urls.ts";
6
+ export {
7
+ type BlobClientOptions,
8
+ BlobClientLive,
9
+ blobClientLayer,
10
+ } from "./implementation/blob-client-live.ts";
11
+ export { ClientTokenPayload, getPayloadFromClientToken } from "./internal/client-token.ts";
@@ -0,0 +1,121 @@
1
+ import type { VercelApiError } from "@panorama-industries/effect-vercel-core";
2
+ import type { Array, Effect } from "effect";
3
+
4
+ import { Context } from "effect";
5
+
6
+ import type {
7
+ BlobAccess,
8
+ BlobBody,
9
+ BlobPathname,
10
+ ClientToken,
11
+ MultipartUpload,
12
+ OnUploadProgress,
13
+ PartNumber,
14
+ PutBlobResult,
15
+ UploadedPart,
16
+ } from "./blob-domain.ts";
17
+ import type {
18
+ BlobClientTokenNotAllowed,
19
+ BlobPreconditionFailed,
20
+ BlobStoreUnavailable,
21
+ BlobUploadAuthorizationFailed,
22
+ BlobUploadRejected,
23
+ } from "./blob-errors.ts";
24
+
25
+ /** Failures of uploading from a browser with a client token or presigned URL. */
26
+ export type BlobClientError =
27
+ | VercelApiError
28
+ | BlobStoreUnavailable
29
+ | BlobUploadRejected
30
+ | BlobPreconditionFailed
31
+ | BlobClientTokenNotAllowed;
32
+
33
+ /**
34
+ * Options a browser may set on an upload. Overwriting, random suffixes and cache lifetime are
35
+ * decided by the server when it authorizes the upload.
36
+ */
37
+ export interface ClientUploadOptions {
38
+ /** Must match the store's access mode. */
39
+ readonly access: BlobAccess;
40
+
41
+ readonly contentType?: string | undefined;
42
+
43
+ /** Upload in 8 MiB parts, six at a time; use it for large files. */
44
+ readonly multipart?: boolean | undefined;
45
+
46
+ /**
47
+ * Byte-level progress where `fetch` can stream request bodies (Chromium); elsewhere 0 % before
48
+ * the upload, one event per finished part, and 100 % at the end.
49
+ */
50
+ readonly onUploadProgress?: OnUploadProgress | undefined;
51
+ }
52
+
53
+ /** How a browser asks the application's upload route to authorize an upload. */
54
+ export interface UploadRouteOptions {
55
+ /** The upload route, absolute or relative to the page. */
56
+ readonly handleUploadUrl: string;
57
+
58
+ /** Sent to the route's `onBeforeGenerateToken` or `getSignedToken`; untrusted there. */
59
+ readonly clientPayload?: string | undefined;
60
+
61
+ /** Extra headers for the request to the upload route, such as an anti-CSRF token. */
62
+ readonly headers?: Readonly<Record<string, string>> | undefined;
63
+ }
64
+
65
+ /**
66
+ * Browser uploads straight to Vercel Blob, bypassing the 4.5 MB function body limit. The
67
+ * application's upload route (see `BlobUploads`) authorizes each upload.
68
+ *
69
+ * Import from `@panorama-industries/effect-vercel-blob/client`. `BlobClientLive` needs only an
70
+ * `HttpClient`, such as `FetchHttpClient.layer`.
71
+ */
72
+ export class BlobClient extends Context.Service<
73
+ BlobClient,
74
+ {
75
+ /** Get a client token from the upload route, then upload with it. */
76
+ readonly upload: <E = never, R = never>(
77
+ pathname: BlobPathname,
78
+ body: BlobBody<E, R>,
79
+ options: ClientUploadOptions & UploadRouteOptions,
80
+ ) => Effect.Effect<PutBlobResult, BlobClientError | BlobUploadAuthorizationFailed | E, R>;
81
+
82
+ /** Get a presigned URL from the upload route, then upload with it; sends no credentials. */
83
+ readonly uploadPresigned: <E = never, R = never>(
84
+ pathname: BlobPathname,
85
+ body: BlobBody<E, R>,
86
+ options: ClientUploadOptions & UploadRouteOptions,
87
+ ) => Effect.Effect<PutBlobResult, BlobClientError | BlobUploadAuthorizationFailed | E, R>;
88
+
89
+ /** Upload with a client token the application obtained itself. */
90
+ readonly put: <E = never, R = never>(
91
+ pathname: BlobPathname,
92
+ body: BlobBody<E, R>,
93
+ options: ClientUploadOptions & { readonly token: ClientToken },
94
+ ) => Effect.Effect<PutBlobResult, BlobClientError | E, R>;
95
+
96
+ /** Start a multipart upload with a client token issued for multipart uploads. */
97
+ readonly createMultipartUpload: (
98
+ pathname: BlobPathname,
99
+ options: {
100
+ readonly token: ClientToken;
101
+ readonly access: BlobAccess;
102
+ readonly contentType?: string | undefined;
103
+ },
104
+ ) => Effect.Effect<MultipartUpload, BlobClientError>;
105
+
106
+ /** Upload one part of a multipart upload. */
107
+ readonly uploadPart: <E = never, R = never>(
108
+ upload: MultipartUpload,
109
+ partNumber: PartNumber,
110
+ body: BlobBody<E, R>,
111
+ options: { readonly token: ClientToken },
112
+ ) => Effect.Effect<UploadedPart, BlobClientError | E, R>;
113
+
114
+ /** Assemble the uploaded parts into the blob. */
115
+ readonly completeMultipartUpload: (
116
+ upload: MultipartUpload,
117
+ parts: Array.NonEmptyReadonlyArray<UploadedPart>,
118
+ options: { readonly token: ClientToken },
119
+ ) => Effect.Effect<PutBlobResult, BlobClientError>;
120
+ }
121
+ >()("@effect-vercel/blob/BlobClient") {}
@@ -0,0 +1,64 @@
1
+ import type { Option, Redacted } from "effect";
2
+
3
+ import { Context, Data } from "effect";
4
+
5
+ import type { BlobAccess, StoreId } from "./blob-domain.ts";
6
+
7
+ /** How server-side calls authenticate to the Blob API. */
8
+ export type BlobAuth = Data.TaggedEnum<{
9
+ /**
10
+ * Use the Vercel OIDC token of the current request with the store's id. When no OIDC token is
11
+ * available and `BlobConfig.readWriteToken` is set, a request falls back to that token, as the
12
+ * SDK does.
13
+ */
14
+ Oidc: { readonly storeId: StoreId };
15
+ /** Use a store's read-write token (`vercel_blob_rw_<storeId>_…`). */
16
+ ReadWrite: { readonly token: Redacted.Redacted<string>; readonly storeId: StoreId };
17
+ }>;
18
+
19
+ /** Constructors and matchers for {@link BlobAuth}. */
20
+ export const BlobAuth = Data.taggedEnum<BlobAuth>();
21
+
22
+ /** Where and as whom the server-side Blob client talks to Vercel Blob. */
23
+ export class BlobConfig extends Context.Service<
24
+ BlobConfig,
25
+ {
26
+ /** Blob API base URL, `https://vercel.com/api/blob` unless overridden for an emulator. */
27
+ readonly apiUrl: URL;
28
+
29
+ readonly auth: BlobAuth;
30
+
31
+ /**
32
+ * The store's read-write token, when one is configured. Besides the OIDC fallback, it signs
33
+ * client tokens and verifies upload-completed callbacks, which OIDC cannot do.
34
+ */
35
+ readonly readWriteToken: Option.Option<Redacted.Redacted<string>>;
36
+
37
+ /** Sent as `x-api-version`; selects the server's response format. */
38
+ readonly apiVersion: string;
39
+
40
+ /** Retries after the first attempt for network failures and retryable server errors. */
41
+ readonly retries: number;
42
+
43
+ /** Send `x-content-length` with every body, which local development servers need for streams. */
44
+ readonly sendContentLength: boolean;
45
+
46
+ /** Extra headers sent with every API request. */
47
+ readonly headers: Readonly<Record<string, string>>;
48
+
49
+ /**
50
+ * Origin and path under which a store serves its blobs; `get` appends the pathname. Defaults to
51
+ * `https://<storeId>.<access>.blob.vercel-storage.com/`.
52
+ */
53
+ readonly blobBaseUrl: (storeId: StoreId, access: BlobAccess) => URL;
54
+
55
+ /** Ed25519 public key (PEM) that verifies presigned-upload callbacks. */
56
+ readonly webhookPublicKey: Option.Option<string>;
57
+
58
+ /**
59
+ * Origin that upload-completed callbacks are sent to, such as a tunnel in local development
60
+ * (`VERCEL_BLOB_CALLBACK_URL`); the upload route's path is appended.
61
+ */
62
+ readonly callbackBaseUrl: Option.Option<string>;
63
+ }
64
+ >()("@effect-vercel/blob/BlobConfig") {}
@@ -0,0 +1,304 @@
1
+ import type { VercelApiError } from "@panorama-industries/effect-vercel-core";
2
+ import type { DateTime, Duration, Effect, Stream } from "effect";
3
+
4
+ import { Data, Schema } from "effect";
5
+
6
+ /** Whether a blob is readable by anyone with its URL (`public`) or only with credentials. */
7
+ export const BlobAccess = Schema.Literals(["public", "private"]);
8
+
9
+ /** Whether a blob is readable by anyone with its URL (`public`) or only with credentials. */
10
+ export type BlobAccess = typeof BlobAccess.Type;
11
+
12
+ /**
13
+ * Identifier of a Blob store without its `store_` prefix, as sent in `x-vercel-blob-store-id` and
14
+ * used in blob host names. Case-sensitive.
15
+ */
16
+ export const StoreId = Schema.String.check(Schema.isPattern(/^(?!store_)[^\s_]+$/)).pipe(
17
+ Schema.brand("StoreId"),
18
+ );
19
+
20
+ /** Identifier of a Blob store without its `store_` prefix. */
21
+ export type StoreId = typeof StoreId.Type;
22
+
23
+ /** Longest pathname a write accepts: the provider limit minus room for Vercel's suffixes. */
24
+ export const maximumPathnameLength = 950;
25
+
26
+ /**
27
+ * Where a write stores a blob inside its store, such as `avatars/user-1.png`: non-empty, at most
28
+ * {@link maximumPathnameLength} characters, and without `//`.
29
+ *
30
+ * Reads and deletes take any pathname or blob URL as a plain string, because stored pathnames may
31
+ * be longer once a random suffix is added.
32
+ */
33
+ export const BlobPathname = Schema.String.check(
34
+ Schema.isMinLength(1),
35
+ Schema.isMaxLength(maximumPathnameLength),
36
+ Schema.makeFilter((pathname: string) => !pathname.includes("//"), {
37
+ expected: 'a pathname without "//"',
38
+ }),
39
+ ).pipe(Schema.brand("BlobPathname"));
40
+
41
+ /** Where a write stores a blob inside its store. */
42
+ export type BlobPathname = typeof BlobPathname.Type;
43
+
44
+ /** A blob to read or delete: its pathname in the store, or its full URL. */
45
+ export type BlobLocator = string | URL;
46
+
47
+ /** Version tag of a blob's content, used for conditional writes, deletes and reads. */
48
+ export const ETag = Schema.NonEmptyString.pipe(Schema.brand("ETag"));
49
+
50
+ /** Version tag of a blob's content. */
51
+ export type ETag = typeof ETag.Type;
52
+
53
+ /** Position of a part in a multipart upload: an integer from 1 to 10000. */
54
+ export const PartNumber = Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: 10_000 })).pipe(
55
+ Schema.brand("PartNumber"),
56
+ );
57
+
58
+ /** Position of a part in a multipart upload: an integer from 1 to 10000. */
59
+ export type PartNumber = typeof PartNumber.Type;
60
+
61
+ /**
62
+ * Content to upload. A stream is sent as it is produced; its failures and requirements become the
63
+ * operation's. Convert a Node `Readable` with `NodeStream.fromReadable` and a web `ReadableStream`
64
+ * with `Stream.fromReadableStream`.
65
+ */
66
+ export type BlobBody<E = never, R = never> =
67
+ | string
68
+ | Uint8Array
69
+ | globalThis.Blob
70
+ | Stream.Stream<Uint8Array, E, R>;
71
+
72
+ /** Bytes sent so far during an upload. */
73
+ export interface UploadProgress {
74
+ readonly loaded: number;
75
+
76
+ /** Bytes to send in total; equals `loaded` when the size of a streamed body is unknown. */
77
+ readonly total: number;
78
+
79
+ /** Completion from 0 to 100 with two decimals; 100 is reported only once the upload finished. */
80
+ readonly percentage: number;
81
+ }
82
+
83
+ /** Callback for upload progress events, throttled like `@vercel/blob`. */
84
+ export type OnUploadProgress = (progress: UploadProgress) => Effect.Effect<void>;
85
+
86
+ /**
87
+ * Whether a write may replace an existing blob. Either set `allowOverwrite`, or make the write
88
+ * conditional with `ifMatch`, which implies overwriting.
89
+ */
90
+ export type OverwriteOptions =
91
+ | {
92
+ /** Replace a blob already stored at the pathname instead of failing. Defaults to false. */
93
+ readonly allowOverwrite?: boolean | undefined;
94
+ readonly ifMatch?: undefined;
95
+ }
96
+ | {
97
+ readonly allowOverwrite?: true | undefined;
98
+ /** Write only if the current blob has this ETag; otherwise fail with `BlobPreconditionFailed`. */
99
+ readonly ifMatch: ETag;
100
+ };
101
+
102
+ /** Options shared by every operation that creates a blob. */
103
+ export type CreateBlobOptions = OverwriteOptions & {
104
+ readonly access: BlobAccess;
105
+
106
+ /** Append a random suffix to the pathname so it never collides. */
107
+ readonly addRandomSuffix?: boolean | undefined;
108
+
109
+ /** Media type served with the blob; inferred from the pathname extension by default. */
110
+ readonly contentType?: string | undefined;
111
+
112
+ /** How long browsers and the CDN cache the blob: at least one minute, one month by default. */
113
+ readonly cacheControlMaxAge?: Duration.Input | undefined;
114
+ };
115
+
116
+ /** A stored blob as returned by writes. */
117
+ export class PutBlobResult extends Schema.Class<PutBlobResult>("@effect-vercel/blob/PutBlobResult")(
118
+ {
119
+ url: Schema.URL,
120
+ /** The URL with `?download=1`, which makes browsers download instead of display. */
121
+ downloadUrl: Schema.URL,
122
+ pathname: Schema.String,
123
+ contentType: Schema.String,
124
+ contentDisposition: Schema.String,
125
+ etag: ETag,
126
+ },
127
+ ) {}
128
+
129
+ /** Everything known about a stored blob. */
130
+ export class BlobMetadata extends Schema.Class<BlobMetadata>("@effect-vercel/blob/BlobMetadata")({
131
+ url: Schema.URL,
132
+ downloadUrl: Schema.URL,
133
+ pathname: Schema.String,
134
+ /** Size in bytes. */
135
+ size: Schema.Int,
136
+ uploadedAt: Schema.DateTimeUtc,
137
+ contentType: Schema.String,
138
+ contentDisposition: Schema.String,
139
+ cacheControl: Schema.String,
140
+ etag: ETag,
141
+ }) {}
142
+
143
+ /** One entry of a listing. */
144
+ export class ListedBlob extends Schema.Class<ListedBlob>("@effect-vercel/blob/ListedBlob")({
145
+ url: Schema.URL,
146
+ downloadUrl: Schema.URL,
147
+ pathname: Schema.String,
148
+ size: Schema.Int,
149
+ uploadedAt: Schema.DateTimeUtc,
150
+ etag: ETag,
151
+ }) {}
152
+
153
+ /** One page of a listing, in lexicographic pathname order. */
154
+ export class ListPage extends Schema.Class<ListPage>("@effect-vercel/blob/ListPage")({
155
+ blobs: Schema.Array(ListedBlob),
156
+ /** Fully qualified folder pathnames directly under the prefix; empty unless `mode` is `folded`. */
157
+ folders: Schema.Array(Schema.String),
158
+ /** Pass to the next `list` call to continue; none on the last page. */
159
+ cursor: Schema.Option(Schema.String),
160
+ hasMore: Schema.Boolean,
161
+ }) {}
162
+
163
+ /** A folder created with `createFolder`. */
164
+ export class CreateFolderResult extends Schema.Class<CreateFolderResult>(
165
+ "@effect-vercel/blob/CreateFolderResult",
166
+ )({
167
+ url: Schema.URL,
168
+ /** The folder pathname, ending in `/`. */
169
+ pathname: Schema.String,
170
+ }) {}
171
+
172
+ /** Metadata of a blob read with `get`, from its response headers. */
173
+ export class FetchedBlob extends Schema.Class<FetchedBlob>("@effect-vercel/blob/FetchedBlob")({
174
+ url: Schema.URL,
175
+ downloadUrl: Schema.URL,
176
+ pathname: Schema.String,
177
+ contentDisposition: Schema.String,
178
+ cacheControl: Schema.String,
179
+ /** `Last-Modified`, or the time of the read when the response had none. */
180
+ uploadedAt: Schema.DateTimeUtc,
181
+ etag: Schema.String,
182
+ }) {}
183
+
184
+ /** Outcome of `get`. */
185
+ export type GetBlobResult = Data.TaggedEnum<{
186
+ /** The blob's content (HTTP 200). */
187
+ Found: {
188
+ readonly blob: FetchedBlob;
189
+ readonly contentType: string;
190
+ /** `Content-Length`, or 0 when the response had none. */
191
+ readonly size: number;
192
+ /** Response headers, for anything not in `blob`. */
193
+ readonly headers: Readonly<Record<string, string>>;
194
+ /** The content, read as it arrives. Read it at most once. */
195
+ readonly body: Stream.Stream<Uint8Array, VercelApiError>;
196
+ };
197
+ /** The blob still has the ETag given as `ifNoneMatch` (HTTP 304). */
198
+ NotModified: {
199
+ readonly blob: FetchedBlob;
200
+ readonly headers: Readonly<Record<string, string>>;
201
+ };
202
+ }>;
203
+
204
+ /** Constructors and matchers for {@link GetBlobResult}. */
205
+ export const GetBlobResult = Data.taggedEnum<GetBlobResult>();
206
+
207
+ /**
208
+ * A multipart upload in progress. Every write option is kept so parts and completion send the same
209
+ * headers as creation; the value can be serialized and resumed by another process.
210
+ */
211
+ export class MultipartUpload extends Schema.Class<MultipartUpload>(
212
+ "@effect-vercel/blob/MultipartUpload",
213
+ )({
214
+ pathname: BlobPathname,
215
+ /** Identifies the blob object being assembled. */
216
+ key: Schema.String,
217
+ uploadId: Schema.String,
218
+ access: BlobAccess,
219
+ addRandomSuffix: Schema.optionalKey(Schema.Boolean),
220
+ allowOverwrite: Schema.optionalKey(Schema.Boolean),
221
+ contentType: Schema.optionalKey(Schema.String),
222
+ /** In seconds, as sent on the wire. */
223
+ cacheControlMaxAge: Schema.optionalKey(Schema.Int),
224
+ }) {}
225
+
226
+ /** A part uploaded to a multipart upload, needed to complete it. */
227
+ export class UploadedPart extends Schema.Class<UploadedPart>("@effect-vercel/blob/UploadedPart")({
228
+ etag: Schema.String,
229
+ partNumber: PartNumber,
230
+ }) {}
231
+
232
+ /** Operations a signed token can delegate. */
233
+ export const DelegationOperation = Schema.Literals(["get", "head", "put", "delete"]);
234
+
235
+ /** Operations a signed token can delegate. */
236
+ export type DelegationOperation = typeof DelegationOperation.Type;
237
+
238
+ /** Query parameters that authorize one presigned request instead of a bearer token. */
239
+ export class PresignedUrlPayload extends Schema.Class<PresignedUrlPayload>(
240
+ "@effect-vercel/blob/PresignedUrlPayload",
241
+ )({
242
+ /** Public part of the signed token; the store id is read from it. */
243
+ delegationToken: Schema.String,
244
+ /** HMAC-SHA256 (base64url) of the request's canonical string, keyed by the client signing token. */
245
+ signature: Schema.String,
246
+ /** Signed constraints, sent as query parameters. */
247
+ params: Schema.Record(Schema.String, Schema.String),
248
+ }) {}
249
+
250
+ /** A short-lived token, issued by the Blob API, from which presigned URLs are signed locally. */
251
+ export class SignedToken extends Schema.Class<SignedToken>("@effect-vercel/blob/SignedToken")({
252
+ /** Public; embedded in every presigned URL. */
253
+ delegationToken: Schema.String,
254
+ /** Secret HMAC key for presigning. Never send it to clients. */
255
+ clientSigningToken: Schema.Redacted(Schema.String),
256
+ validUntil: Schema.DateTimeUtc,
257
+ }) {}
258
+
259
+ /** A token that lets a browser upload one pathname directly (`vercel_blob_client_…`). */
260
+ export const ClientToken = Schema.String.check(Schema.isPattern(/^vercel_blob_client_/)).pipe(
261
+ Schema.brand("ClientToken"),
262
+ );
263
+
264
+ /** A token that lets a browser upload one pathname directly. */
265
+ export type ClientToken = typeof ClientToken.Type;
266
+
267
+ /**
268
+ * Constraints a server places on a browser upload when it issues a client token. As for writes,
269
+ * `ifMatch` implies `allowOverwrite`.
270
+ */
271
+ export type ClientTokenConstraints = OverwriteOptions & {
272
+ /** Largest accepted file, at most 5 TB. */
273
+ readonly maximumSizeInBytes?: number | undefined;
274
+
275
+ /** Accepted media types; wildcards such as `image/*` are allowed. */
276
+ readonly allowedContentTypes?: ReadonlyArray<string> | undefined;
277
+
278
+ /** Expiry; defaults depend on the caller (one hour for upload routes). */
279
+ readonly validUntil?: DateTime.Utc | undefined;
280
+
281
+ readonly addRandomSuffix?: boolean | undefined;
282
+
283
+ /** In seconds. */
284
+ readonly cacheControlMaxAge?: number | undefined;
285
+ };
286
+
287
+ /** The blob store's notification that a browser upload finished. */
288
+ export class UploadCompleted extends Schema.Class<UploadCompleted>(
289
+ "@effect-vercel/blob/UploadCompleted",
290
+ )({
291
+ blob: PutBlobResult,
292
+ /** Data the server attached when it authorized the upload. */
293
+ tokenPayload: Schema.Option(Schema.String),
294
+ }) {}
295
+
296
+ /** What a browser asks for when it starts an upload through an upload route. */
297
+ export class UploadRequest extends Schema.Class<UploadRequest>("@effect-vercel/blob/UploadRequest")(
298
+ {
299
+ pathname: Schema.String,
300
+ /** Data the browser sent along, such as a form id; untrusted. */
301
+ clientPayload: Schema.Option(Schema.String),
302
+ multipart: Schema.Boolean,
303
+ },
304
+ ) {}