@voyantjs/storage 0.74.1 → 0.75.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.
package/README.md CHANGED
@@ -29,6 +29,10 @@ const url = await storage.signedUrl({ key: "files/x.pdf", expiresIn: 300 })
29
29
 
30
30
  The S3 provider supports `forcePathStyle` and a custom `endpoint` for S3-compatible services (Wasabi, MinIO, etc.). SigV4 signing is verified against AWS canonical test vectors.
31
31
 
32
+ The R2 binding provider cannot mint signed URLs by itself. Configure either
33
+ `publicBaseUrl` or a custom `signer` before calling `signedUrl`; otherwise the
34
+ provider throws instead of returning a raw storage key.
35
+
32
36
  ## Exports
33
37
 
34
38
  | Entry | Description |
@@ -1,4 +1,5 @@
1
1
  import type { StorageProvider } from "../types.js";
2
+ export declare const R2_SIGNED_URL_CONFIGURATION_ERROR_MESSAGE = "R2 provider: signedUrl requires either `publicBaseUrl` or `signer` to be configured";
2
3
  /**
3
4
  * Subset of the Cloudflare Workers `R2Bucket` binding we depend on. Kept
4
5
  * as a minimal structural type so this package does not need a runtime
@@ -35,7 +36,9 @@ export interface R2ProviderOptions {
35
36
  * signed URLs directly; templates pass a custom signer that either:
36
37
  * - returns a short-lived Worker route URL, or
37
38
  * - calls R2's S3-compatible API with SigV4 credentials.
38
- * When omitted, `signedUrl` returns `${publicBaseUrl}${key}`.
39
+ * When omitted, `signedUrl` returns `${publicBaseUrl}${key}`. Calling
40
+ * `signedUrl` without either a signer or public base URL is a
41
+ * configuration error because a raw R2 object key is not a URL.
39
42
  */
40
43
  signer?: (key: string, expiresIn: number) => Promise<string> | string;
41
44
  /** Provider name (defaults to `"r2"`). */
@@ -1 +1 @@
1
- {"version":3,"file":"r2.d.ts","sourceRoot":"","sources":["../../src/providers/r2.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiB,eAAe,EAAoC,MAAM,aAAa,CAAA;AAEnG;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,GAAG,CACD,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,WAAW,GAAG,eAAe,GAAG,IAAI,GAAG,MAAM,GAAG,cAAc,GAAG,IAAI,EAC5E,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,OAAO,CAAC,CAAA;IACnB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC7C,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAA;CAC/C;AAED,MAAM,WAAW,gBAAgB;IAC/B,YAAY,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACvC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACxC;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC,CAAA;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,6DAA6D;IAC7D,MAAM,EAAE,YAAY,CAAA;IACpB;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAA;IACrE,0CAA0C;IAC1C,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,+DAA+D;IAC/D,WAAW,CAAC,EAAE,MAAM,MAAM,CAAA;CAC3B;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,GAAG,eAAe,CAuC5E"}
1
+ {"version":3,"file":"r2.d.ts","sourceRoot":"","sources":["../../src/providers/r2.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiB,eAAe,EAAoC,MAAM,aAAa,CAAA;AAEnG,eAAO,MAAM,yCAAyC,wFACiC,CAAA;AAEvF;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,GAAG,CACD,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,WAAW,GAAG,eAAe,GAAG,IAAI,GAAG,MAAM,GAAG,cAAc,GAAG,IAAI,EAC5E,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,OAAO,CAAC,CAAA;IACnB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC7C,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAA;CAC/C;AAED,MAAM,WAAW,gBAAgB;IAC/B,YAAY,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACvC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACxC;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC,CAAA;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,6DAA6D;IAC7D,MAAM,EAAE,YAAY,CAAA;IACpB;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB;;;;;;;;OAQG;IACH,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAA;IACrE,0CAA0C;IAC1C,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,+DAA+D;IAC/D,WAAW,CAAC,EAAE,MAAM,MAAM,CAAA;CAC3B;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,GAAG,eAAe,CA0C5E"}
@@ -1,3 +1,4 @@
1
+ export const R2_SIGNED_URL_CONFIGURATION_ERROR_MESSAGE = "R2 provider: signedUrl requires either `publicBaseUrl` or `signer` to be configured";
1
2
  /**
2
3
  * Create a Cloudflare R2 storage provider bound to an R2 bucket binding.
3
4
  * The R2 binding handles authentication transparently at the Worker
@@ -32,7 +33,10 @@ export function createR2Provider(options) {
32
33
  async signedUrl(key, expiresIn) {
33
34
  if (options.signer)
34
35
  return options.signer(key, expiresIn);
35
- return publicBaseUrl ? `${publicBaseUrl}${key}` : key;
36
+ if (!publicBaseUrl) {
37
+ throw new Error(R2_SIGNED_URL_CONFIGURATION_ERROR_MESSAGE);
38
+ }
39
+ return `${publicBaseUrl}${key}`;
36
40
  },
37
41
  async get(key) {
38
42
  const obj = await options.bucket.get(key);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@voyantjs/storage",
3
- "version": "0.74.1",
3
+ "version": "0.75.0",
4
4
  "license": "Apache-2.0",
5
5
  "type": "module",
6
6
  "exports": {