clefbase 1.3.3 → 1.3.5

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/dist/cli.js CHANGED
@@ -34405,7 +34405,7 @@ async function runSitesList(cwd = process.cwd()) {
34405
34405
  }
34406
34406
 
34407
34407
  // package.json
34408
- var version = "1.3.3";
34408
+ var version = "1.3.5";
34409
34409
 
34410
34410
  // src/cli/index.ts
34411
34411
  var program2 = new Command();
@@ -2,75 +2,24 @@ import React, { type ImgHTMLAttributes } from "react";
2
2
  import type { ClefbaseStorage } from "../storage";
3
3
  export type StorageImageStatus = "loading" | "loaded" | "error";
4
4
  export interface StorageImageProps extends Omit<ImgHTMLAttributes<HTMLImageElement>, "src"> {
5
- /**
6
- * The ClefbaseStorage instance returned by `getStorage(app)`.
7
- */
8
5
  storage: ClefbaseStorage;
9
- /**
10
- * Path inside the default bucket, e.g. `"avatars/user-123.jpg"`.
11
- * Mutually exclusive with `bucket` + `path`.
12
- */
6
+ /** Path inside the default bucket, e.g. "avatars/user-123.jpg". */
13
7
  src?: string;
14
- /**
15
- * Named bucket to read from. Pair with `path`.
16
- */
8
+ /** Named bucket to read from. Pair with `path`. */
17
9
  bucket?: string;
18
- /**
19
- * File path inside `bucket`.
20
- */
10
+ /** File path inside `bucket`. */
21
11
  path?: string;
22
- /**
23
- * Shown while the download URL is being resolved.
24
- * Accepts a URL string or any React node.
25
- */
12
+ /** Shown while the download URL is being resolved. */
26
13
  placeholder?: React.ReactNode | string;
27
- /**
28
- * Shown when the URL cannot be resolved or the image fails to load.
29
- * Accepts a URL string or any React node.
30
- */
14
+ /** Shown when the URL cannot be resolved or the image fails to load. */
31
15
  fallback?: React.ReactNode | string;
32
- /**
33
- * Called with the resolved download URL once ready.
34
- */
35
16
  onResolve?: (url: string) => void;
36
- /**
37
- * Called if URL resolution or image loading fails.
38
- */
39
17
  onError?: (err: unknown) => void;
40
- /**
41
- * Called whenever the loading status changes.
42
- */
43
18
  onStatusChange?: (status: StorageImageStatus) => void;
44
19
  }
45
20
  /**
46
- * A drop-in replacement for `<img>` that resolves Clefbase storage paths to
47
- * authenticated download URLs automatically.
48
- *
49
- * @example — default bucket
50
- * ```tsx
51
- * const storage = getStorage(app);
52
- *
53
- * <StorageImage
54
- * storage={storage}
55
- * src="avatars/user-123.jpg"
56
- * alt="User avatar"
57
- * width={64}
58
- * height={64}
59
- * style={{ borderRadius: "50%" }}
60
- * />
61
- * ```
62
- *
63
- * @example — named bucket
64
- * ```tsx
65
- * <StorageImage
66
- * storage={storage}
67
- * bucket="media"
68
- * path="products/shoe.webp"
69
- * alt="Product photo"
70
- * placeholder={<Spinner />}
71
- * fallback={<img src="/no-image.svg" alt="Not found" />}
72
- * />
73
- * ```
21
+ * Drop-in <img> replacement that resolves Clefbase storage paths to
22
+ * authenticated download URLs via /storage/resolve.
74
23
  */
75
24
  export declare const StorageImage: React.ForwardRefExoticComponent<StorageImageProps & React.RefAttributes<HTMLImageElement>>;
76
25
  export default StorageImage;
@@ -1 +1 @@
1
- {"version":3,"file":"StorageImage.d.ts","sourceRoot":"","sources":["../../src/react/StorageImage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAKZ,KAAK,iBAAiB,EACvB,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAIlD,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEhE,MAAM,WAAW,iBACf,SAAQ,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,EAAE,KAAK,CAAC;IACxD;;OAEG;IACH,OAAO,EAAE,eAAe,CAAC;IAEzB;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;;OAGG;IACH,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC;IAEvC;;;OAGG;IACH,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC;IAEpC;;OAEG;IACH,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAElC;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IAEjC;;OAEG;IACH,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,kBAAkB,KAAK,IAAI,CAAC;CACvD;AAID;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,eAAO,MAAM,YAAY,4FAuKxB,CAAC;AAIF,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"StorageImage.d.ts","sourceRoot":"","sources":["../../src/react/StorageImage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAKZ,KAAK,iBAAiB,EACvB,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAIlD,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEhE,MAAM,WAAW,iBACf,SAAQ,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,EAAE,KAAK,CAAC;IACxD,OAAO,EAAE,eAAe,CAAC;IACzB,mEAAmE;IACnE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,mDAAmD;IACnD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iCAAiC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,sDAAsD;IACtD,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC;IACvC,wEAAwE;IACxE,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC;IACpC,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IACjC,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,kBAAkB,KAAK,IAAI,CAAC;CACvD;AAID;;;GAGG;AACH,eAAO,MAAM,YAAY,4FAoIxB,CAAC;AAGF,eAAe,YAAY,CAAC"}
@@ -5,70 +5,20 @@ const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const react_1 = require("react");
6
6
  // ─── StorageImage ─────────────────────────────────────────────────────────────
7
7
  /**
8
- * A drop-in replacement for `<img>` that resolves Clefbase storage paths to
9
- * authenticated download URLs automatically.
10
- *
11
- * @example — default bucket
12
- * ```tsx
13
- * const storage = getStorage(app);
14
- *
15
- * <StorageImage
16
- * storage={storage}
17
- * src="avatars/user-123.jpg"
18
- * alt="User avatar"
19
- * width={64}
20
- * height={64}
21
- * style={{ borderRadius: "50%" }}
22
- * />
23
- * ```
24
- *
25
- * @example — named bucket
26
- * ```tsx
27
- * <StorageImage
28
- * storage={storage}
29
- * bucket="media"
30
- * path="products/shoe.webp"
31
- * alt="Product photo"
32
- * placeholder={<Spinner />}
33
- * fallback={<img src="/no-image.svg" alt="Not found" />}
34
- * />
35
- * ```
8
+ * Drop-in <img> replacement that resolves Clefbase storage paths to
9
+ * authenticated download URLs via /storage/resolve.
36
10
  */
37
11
  exports.StorageImage = (0, react_1.forwardRef)(function StorageImage({ storage, src, bucket, path, placeholder, fallback, onResolve, onError, onStatusChange, alt = "", ...imgProps }, ref) {
38
- // Resolve the URL synchronously where possible (_directUrl is pure/sync)
39
- // to avoid an async waterfall that exhausts the browser's per-host
40
- // connection pool (typically 6 connections) when many cards mount at once.
41
- const getDirectUrl = () => {
42
- try {
43
- if (bucket && path)
44
- return storage._directUrl(bucket, path);
45
- if (src)
46
- return storage._directUrl(storage["_defaultBucket"] ?? "default", src);
47
- return null;
48
- }
49
- catch {
50
- return null;
51
- }
52
- };
53
- const initialUrl = getDirectUrl();
54
- const [resolvedUrl, setResolvedUrl] = (0, react_1.useState)(initialUrl);
55
- const [status, setStatus] = (0, react_1.useState)(initialUrl ? "loaded" : "loading");
56
- // Keep a ref to the latest callbacks so the effect closure stays stable.
12
+ const [resolvedUrl, setResolvedUrl] = (0, react_1.useState)(null);
13
+ const [status, setStatus] = (0, react_1.useState)("loading");
57
14
  const onResolveRef = (0, react_1.useRef)(onResolve);
58
15
  const onErrorRef = (0, react_1.useRef)(onError);
59
16
  const onStatusRef = (0, react_1.useRef)(onStatusChange);
60
17
  onResolveRef.current = onResolve;
61
18
  onErrorRef.current = onError;
62
19
  onStatusRef.current = onStatusChange;
63
- // Determine the key that uniquely identifies the requested file.
64
20
  const fileKey = bucket && path ? `${bucket}::${path}` : src ?? null;
65
21
  (0, react_1.useEffect)(() => {
66
- // If we already resolved synchronously, notify callers and skip the
67
- // async effect entirely — no extra network round-trip needed.
68
- if (initialUrl) {
69
- onResolveRef.current?.(initialUrl);
70
- return;
71
- }
72
22
  if (!fileKey)
73
23
  return;
74
24
  let cancelled = false;
@@ -78,9 +28,7 @@ exports.StorageImage = (0, react_1.forwardRef)(function StorageImage({ storage,
78
28
  try {
79
29
  let url;
80
30
  if (bucket && path) {
81
- url = storage.bucket(bucket).ref(path).getDownloadURL
82
- ? await storage.bucket(bucket).ref(path).getDownloadURL()
83
- : storage._directUrl(bucket, path);
31
+ url = await storage.bucket(bucket).ref(path).getDownloadURL();
84
32
  }
85
33
  else if (src) {
86
34
  url = await storage.ref(src).getDownloadURL();
@@ -90,9 +38,11 @@ exports.StorageImage = (0, react_1.forwardRef)(function StorageImage({ storage,
90
38
  }
91
39
  if (cancelled)
92
40
  return;
41
+ if (!url)
42
+ throw new Error("StorageImage: empty download URL returned.");
93
43
  setResolvedUrl(url);
94
44
  onResolveRef.current?.(url);
95
- // status moves to "loaded" in the <img> onLoad handler below
45
+ // status "loaded" fires in the <img> onLoad handler
96
46
  }
97
47
  catch (err) {
98
48
  if (cancelled)
@@ -103,9 +53,7 @@ exports.StorageImage = (0, react_1.forwardRef)(function StorageImage({ storage,
103
53
  }
104
54
  };
105
55
  resolve();
106
- return () => {
107
- cancelled = true;
108
- };
56
+ return () => { cancelled = true; };
109
57
  // eslint-disable-next-line react-hooks/exhaustive-deps
110
58
  }, [fileKey]);
111
59
  // ── Render helpers ────────────────────────────────────────────────────────
@@ -118,18 +66,17 @@ exports.StorageImage = (0, react_1.forwardRef)(function StorageImage({ storage,
118
66
  onStatusRef.current?.("error");
119
67
  onErrorRef.current?.(e);
120
68
  };
121
- // Show placeholder while resolving URL
69
+ // Placeholder while resolving
122
70
  if (status === "loading" && !resolvedUrl) {
123
71
  if (placeholder === undefined) {
124
- // Invisible img keeps layout stable
125
72
  return ((0, jsx_runtime_1.jsx)("img", { ...imgProps, ref: ref, src: "", alt: alt, style: { ...imgProps.style, visibility: "hidden" } }));
126
73
  }
127
74
  if (typeof placeholder === "string") {
128
- return ((0, jsx_runtime_1.jsx)("img", { ...imgProps, ref: ref, src: placeholder, alt: alt }));
75
+ return (0, jsx_runtime_1.jsx)("img", { ...imgProps, ref: ref, src: placeholder, alt: alt });
129
76
  }
130
77
  return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: placeholder });
131
78
  }
132
- // Show fallback on error
79
+ // Fallback on error
133
80
  if (status === "error" || !resolvedUrl) {
134
81
  if (fallback === undefined) {
135
82
  return ((0, jsx_runtime_1.jsx)("img", { ...imgProps, ref: ref, src: "", alt: alt, style: { ...imgProps.style, visibility: "hidden" } }));
@@ -139,10 +86,6 @@ exports.StorageImage = (0, react_1.forwardRef)(function StorageImage({ storage,
139
86
  }
140
87
  return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: fallback });
141
88
  }
142
- // Resolved — render the real image.
143
- // `loading="lazy"` defers off-screen fetches so the browser never
144
- // saturates its per-host connection pool (typically 6) when many
145
- // cards render simultaneously. Callers may override with loading="eager".
146
89
  return ((0, jsx_runtime_1.jsx)("img", { loading: "lazy", ...imgProps, ref: ref, src: resolvedUrl, alt: alt, onLoad: handleLoad, onError: handleImgError }));
147
90
  });
148
91
  exports.StorageImage.displayName = "StorageImage";
@@ -1 +1 @@
1
- {"version":3,"file":"StorageImage.js","sourceRoot":"","sources":["../../src/react/StorageImage.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"StorageImage.js","sourceRoot":"","sources":["../../src/react/StorageImage.tsx"],"names":[],"mappings":"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"}
@@ -13,78 +13,63 @@ export interface StorageFile {
13
13
  /** Present on /resolve responses */
14
14
  downloadUrl?: string;
15
15
  }
16
- /**
17
- * A reference to a file at a given path inside a bucket.
18
- *
19
- * @example
20
- * const ref = storage.ref("avatars/user-123.jpg");
21
- * const url = await ref.getDownloadURL();
22
- * await ref.delete();
23
- */
24
16
  export declare class StorageReference {
25
17
  private readonly storage;
26
18
  readonly bucket: string;
27
19
  readonly filePath: string;
28
20
  constructor(storage: ClefbaseStorage, bucket: string, filePath: string);
29
- /**
30
- * Upload a file. Accepts Buffer (Node) or File/Blob (browser).
31
- *
32
- * @example
33
- * // Node.js
34
- * await ref.upload(fs.readFileSync("photo.jpg"), { contentType: "image/jpeg" });
35
- * // Browser
36
- * await ref.upload(fileInput.files[0]);
37
- */
38
21
  upload(data: Buffer | Blob | File, opts?: {
39
22
  contentType?: string;
40
23
  metadata?: Record<string, unknown>;
41
24
  }): Promise<StorageFile>;
42
- /** Returns the public download URL for this file. */
25
+ /**
26
+ * Returns the authenticated download URL for this file.
27
+ * Always resolves via /storage/resolve to get the real bucketId + fileId.
28
+ */
43
29
  getDownloadURL(): Promise<string>;
44
- /** Fetch file metadata including downloadUrl. */
45
30
  getMetadata(): Promise<StorageFile>;
46
- /** Delete this file. */
47
31
  delete(): Promise<void>;
48
- /** List files under this path prefix. */
49
32
  list(opts?: {
50
33
  limit?: number;
51
34
  offset?: number;
52
35
  }): Promise<StorageFile[]>;
53
36
  }
54
- /**
55
- * A scoped helper for a named bucket.
56
- *
57
- * @example
58
- * const ref = storage.bucket("user-uploads").ref("doc.pdf");
59
- */
60
37
  export declare class BucketReference {
61
38
  private readonly storage;
62
39
  readonly name: string;
63
40
  constructor(storage: ClefbaseStorage, name: string);
64
41
  ref(filePath: string): StorageReference;
65
42
  }
66
- /**
67
- * File storage service. Obtain via `getStorage(app)`.
68
- *
69
- * @example
70
- * const storage = getStorage(app);
71
- * const url = await storage.ref("products/image.jpg").getDownloadURL();
72
- * await storage.bucket("media").ref("photo.jpg").upload(buffer, { contentType: "image/jpeg" });
73
- */
74
43
  export declare class ClefbaseStorage {
75
44
  private readonly http;
76
45
  private readonly projectId;
77
46
  private readonly auth;
78
- private _defaultBucket;
47
+ /** @internal used by StorageImage — kept for compat but now returns empty string (no /path route exists) */
48
+ _defaultBucket: string;
49
+ /** In-memory cache: bucket name → UUID */
50
+ private _bucketIdCache;
51
+ /** In-memory cache: "bucket::filePath" → download URL */
52
+ private _urlCache;
79
53
  constructor(http: HttpClient, projectId: string, auth?: Auth | null);
80
54
  private authHeaders;
81
- /** Override the default bucket name (default: "default"). */
82
55
  setDefaultBucket(name: string): this;
83
- /** Return a reference scoped to a named bucket. */
84
56
  bucket(name: string): BucketReference;
85
- /** Return a StorageReference in the default bucket. */
86
57
  ref(filePath: string): StorageReference;
87
- _directUrl(bucket: string, filePath: string): string;
58
+ _resolveBucketId(bucketName: string): Promise<string>;
59
+ /**
60
+ * Resolves a storage path to an authenticated download URL via
61
+ * GET /storage/resolve?projectId=xxx&path=bucketName/folder/file.jpg
62
+ *
63
+ * The server returns { downloadUrl, id, bucketId, ... } — we use downloadUrl directly.
64
+ * Results are cached so repeated calls (e.g. many cards) only hit the server once per path.
65
+ */
66
+ _getDownloadURL(bucket: string, filePath: string): Promise<string>;
67
+ /**
68
+ * @deprecated No /path route exists on the server.
69
+ * Kept so StorageImage's synchronous fast-path gracefully returns ""
70
+ * (which makes StorageImage fall through to the async resolve path).
71
+ */
72
+ _directUrl(_bucket: string, _filePath: string): string;
88
73
  _resolve(bucket: string, filePath: string): Promise<StorageFile>;
89
74
  _upload(bucket: string, filePath: string, data: Buffer | Blob | File, opts?: {
90
75
  contentType?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAIpC,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,oCAAoC;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAID,qBAAa,gBAAgB;IAEzB,OAAO,CAAC,QAAQ,CAAC,OAAO;aACR,MAAM,EAAE,MAAM;aACd,QAAQ,EAAE,MAAM;gBAFf,OAAO,EAAE,eAAe,EACzB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM;IAG5B,MAAM,CACV,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,EAC1B,IAAI,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GAClE,OAAO,CAAC,WAAW,CAAC;IAIvB;;;OAGG;IACG,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;IAIjC,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC;IAInC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAIvB,IAAI,CAAC,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;CAG/E;AAID,qBAAa,eAAe;IAExB,OAAO,CAAC,QAAQ,CAAC,OAAO;aACR,IAAI,EAAE,MAAM;gBADX,OAAO,EAAE,eAAe,EACzB,IAAI,EAAE,MAAM;IAG9B,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB;CAGxC;AAID,qBAAa,eAAe;IAWxB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,IAAI;IAZvB,4GAA4G;IACrG,cAAc,SAAa;IAElC,0CAA0C;IAC1C,OAAO,CAAC,cAAc,CAAkC;IAExD,yDAAyD;IACzD,OAAO,CAAC,SAAS,CAAkC;gBAGhC,IAAI,EAAE,UAAU,EAChB,SAAS,EAAE,MAAM,EACjB,IAAI,GAAE,IAAI,GAAG,IAAW;IAG3C,OAAO,CAAC,WAAW;IAInB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKpC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe;IAIrC,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB;IAMjC,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAiB3D;;;;;;OAMG;IACG,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAexE;;;;OAIG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM;IAIhD,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAShE,OAAO,CACX,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,EAC1B,IAAI,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GAClE,OAAO,CAAC,WAAW,CAAC;IA0CjB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUxD,KAAK,CACT,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GACzC,OAAO,CAAC,WAAW,EAAE,CAAC;CAY1B"}
@@ -35,57 +35,34 @@ var __importStar = (this && this.__importStar) || (function () {
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.ClefbaseStorage = exports.BucketReference = exports.StorageReference = void 0;
37
37
  // ─── StorageReference ─────────────────────────────────────────────────────────
38
- /**
39
- * A reference to a file at a given path inside a bucket.
40
- *
41
- * @example
42
- * const ref = storage.ref("avatars/user-123.jpg");
43
- * const url = await ref.getDownloadURL();
44
- * await ref.delete();
45
- */
46
38
  class StorageReference {
47
39
  constructor(storage, bucket, filePath) {
48
40
  this.storage = storage;
49
41
  this.bucket = bucket;
50
42
  this.filePath = filePath;
51
43
  }
52
- /**
53
- * Upload a file. Accepts Buffer (Node) or File/Blob (browser).
54
- *
55
- * @example
56
- * // Node.js
57
- * await ref.upload(fs.readFileSync("photo.jpg"), { contentType: "image/jpeg" });
58
- * // Browser
59
- * await ref.upload(fileInput.files[0]);
60
- */
61
44
  async upload(data, opts) {
62
45
  return this.storage._upload(this.bucket, this.filePath, data, opts);
63
46
  }
64
- /** Returns the public download URL for this file. */
47
+ /**
48
+ * Returns the authenticated download URL for this file.
49
+ * Always resolves via /storage/resolve to get the real bucketId + fileId.
50
+ */
65
51
  async getDownloadURL() {
66
- return this.storage._directUrl(this.bucket, this.filePath);
52
+ return this.storage._getDownloadURL(this.bucket, this.filePath);
67
53
  }
68
- /** Fetch file metadata including downloadUrl. */
69
54
  async getMetadata() {
70
55
  return this.storage._resolve(this.bucket, this.filePath);
71
56
  }
72
- /** Delete this file. */
73
57
  async delete() {
74
58
  return this.storage._delete(this.bucket, this.filePath);
75
59
  }
76
- /** List files under this path prefix. */
77
60
  async list(opts) {
78
61
  return this.storage._list(this.bucket, this.filePath, opts);
79
62
  }
80
63
  }
81
64
  exports.StorageReference = StorageReference;
82
65
  // ─── BucketReference ──────────────────────────────────────────────────────────
83
- /**
84
- * A scoped helper for a named bucket.
85
- *
86
- * @example
87
- * const ref = storage.bucket("user-uploads").ref("doc.pdf");
88
- */
89
66
  class BucketReference {
90
67
  constructor(storage, name) {
91
68
  this.storage = storage;
@@ -97,48 +74,83 @@ class BucketReference {
97
74
  }
98
75
  exports.BucketReference = BucketReference;
99
76
  // ─── ClefbaseStorage ──────────────────────────────────────────────────────────
100
- /**
101
- * File storage service. Obtain via `getStorage(app)`.
102
- *
103
- * @example
104
- * const storage = getStorage(app);
105
- * const url = await storage.ref("products/image.jpg").getDownloadURL();
106
- * await storage.bucket("media").ref("photo.jpg").upload(buffer, { contentType: "image/jpeg" });
107
- */
108
77
  class ClefbaseStorage {
109
78
  constructor(http, projectId, auth = null) {
110
79
  this.http = http;
111
80
  this.projectId = projectId;
112
81
  this.auth = auth;
82
+ /** @internal used by StorageImage — kept for compat but now returns empty string (no /path route exists) */
113
83
  this._defaultBucket = "default";
84
+ /** In-memory cache: bucket name → UUID */
85
+ this._bucketIdCache = new Map();
86
+ /** In-memory cache: "bucket::filePath" → download URL */
87
+ this._urlCache = new Map();
114
88
  }
115
89
  authHeaders() {
116
90
  return this.auth?.getAuthHeaders() ?? {};
117
91
  }
118
- /** Override the default bucket name (default: "default"). */
119
92
  setDefaultBucket(name) {
120
93
  this._defaultBucket = name;
121
94
  return this;
122
95
  }
123
- /** Return a reference scoped to a named bucket. */
124
96
  bucket(name) {
125
97
  return new BucketReference(this, name);
126
98
  }
127
- /** Return a StorageReference in the default bucket. */
128
99
  ref(filePath) {
129
100
  return new StorageReference(this, this._defaultBucket, filePath.replace(/^\/+/, ""));
130
101
  }
131
- // ─── Internal methods called by StorageReference ──────────────────────────
132
- _directUrl(bucket, filePath) {
102
+ // ─── Bucket UUID resolution ───────────────────────────────────────────────
103
+ async _resolveBucketId(bucketName) {
104
+ const cached = this._bucketIdCache.get(bucketName);
105
+ if (cached)
106
+ return cached;
107
+ const buckets = await this.http.get("/buckets");
108
+ for (const b of buckets) {
109
+ this._bucketIdCache.set(b.name, b.id);
110
+ }
111
+ const id = this._bucketIdCache.get(bucketName);
112
+ if (!id)
113
+ throw new Error(`Storage bucket "${bucketName}" not found`);
114
+ return id;
115
+ }
116
+ // ─── Download URL ─────────────────────────────────────────────────────────
117
+ /**
118
+ * Resolves a storage path to an authenticated download URL via
119
+ * GET /storage/resolve?projectId=xxx&path=bucketName/folder/file.jpg
120
+ *
121
+ * The server returns { downloadUrl, id, bucketId, ... } — we use downloadUrl directly.
122
+ * Results are cached so repeated calls (e.g. many cards) only hit the server once per path.
123
+ */
124
+ async _getDownloadURL(bucket, filePath) {
133
125
  const cleanFile = filePath.replace(/^\/+/, "");
134
- const base = this.http.getBaseUrl();
135
- return `${base}/path/${cleanFile}?projectId=${encodeURIComponent(this.projectId)}&inline=true`;
126
+ // The resolve endpoint expects the full path including bucket name
127
+ const fullPath = `${bucket}/${cleanFile}`;
128
+ const cacheKey = fullPath;
129
+ const cached = this._urlCache.get(cacheKey);
130
+ if (cached)
131
+ return cached;
132
+ const meta = await this._resolve(bucket, cleanFile);
133
+ const url = meta.downloadUrl ?? "";
134
+ if (url)
135
+ this._urlCache.set(cacheKey, url);
136
+ return url;
137
+ }
138
+ /**
139
+ * @deprecated No /path route exists on the server.
140
+ * Kept so StorageImage's synchronous fast-path gracefully returns ""
141
+ * (which makes StorageImage fall through to the async resolve path).
142
+ */
143
+ _directUrl(_bucket, _filePath) {
144
+ return "";
136
145
  }
137
146
  async _resolve(bucket, filePath) {
138
147
  const cleanFile = filePath.replace(/^\/+/, "");
139
- return this.http.get(`/resolve?projectId=${encodeURIComponent(this.projectId)}&path=${cleanFile}`);
148
+ // The resolve endpoint matches by fullPath = "bucketName/folder/file.jpg"
149
+ const fullPath = `${bucket}/${cleanFile}`;
150
+ return this.http.get(`/resolve?projectId=${encodeURIComponent(this.projectId)}&path=${encodeURIComponent(fullPath)}`);
140
151
  }
141
152
  async _upload(bucket, filePath, data, opts) {
153
+ const bucketId = await this._resolveBucketId(bucket);
142
154
  let FormDataImpl;
143
155
  if (typeof FormData !== "undefined") {
144
156
  FormDataImpl = FormData;
@@ -147,15 +159,11 @@ class ClefbaseStorage {
147
159
  const mod = await Promise.resolve().then(() => __importStar(require("form-data")));
148
160
  FormDataImpl = mod.default;
149
161
  }
150
- const form = new FormDataImpl();
151
162
  const cleanPath = filePath.replace(/^\/+/, "");
152
163
  const filename = cleanPath.split("/").pop() ?? "upload";
153
164
  const parts = cleanPath.split("/");
154
165
  const folder = parts.length > 1 ? parts.slice(0, -1).join("/") : undefined;
155
- // ── FIX: always include projectId and bucketName so the server can
156
- // resolve the correct project database and bucket UUID. ──────────
157
- form.append("projectId", this.projectId);
158
- form.append("bucketName", bucket);
166
+ const form = new FormDataImpl();
159
167
  if (typeof Buffer !== "undefined" && Buffer.isBuffer(data)) {
160
168
  form.append("file", data, { filename, contentType: opts?.contentType ?? "application/octet-stream" });
161
169
  }
@@ -166,9 +174,10 @@ class ClefbaseStorage {
166
174
  form.append("folder", folder);
167
175
  if (opts?.metadata)
168
176
  form.append("metadata", JSON.stringify(opts.metadata));
169
- // ── FIX: send projectId as a query param too so server middleware can
170
- // authenticate/route even before reading the multipart body. ─────
171
- return this.http.request(`/buckets/${encodeURIComponent(bucket)}/files?projectId=${encodeURIComponent(this.projectId)}`, {
177
+ // Bust the URL cache for this path so a fresh URL is fetched after upload
178
+ const cacheKey = `${bucket}/${cleanPath}`;
179
+ this._urlCache.delete(cacheKey);
180
+ return this.http.request(`/buckets/${bucketId}/files`, {
172
181
  method: "POST",
173
182
  body: form,
174
183
  isFormData: true,
@@ -176,18 +185,22 @@ class ClefbaseStorage {
176
185
  });
177
186
  }
178
187
  async _delete(bucket, filePath) {
188
+ const bucketId = await this._resolveBucketId(bucket);
179
189
  const meta = await this._resolve(bucket, filePath);
180
- await this.http.delete(`/buckets/${encodeURIComponent(bucket)}/files/${meta.id}?projectId=${encodeURIComponent(this.projectId)}`, this.authHeaders());
190
+ this._urlCache.delete(`${bucket}/${filePath.replace(/^\/+/, "")}`);
191
+ await this.http.delete(`/buckets/${bucketId}/files/${meta.id}`, this.authHeaders());
181
192
  }
182
193
  async _list(bucket, prefix, opts) {
183
- const qs = new URLSearchParams({ projectId: this.projectId });
194
+ const bucketId = await this._resolveBucketId(bucket);
195
+ const qs = new URLSearchParams();
184
196
  if (prefix)
185
197
  qs.set("folder", prefix);
186
198
  if (opts?.limit !== undefined)
187
199
  qs.set("limit", String(opts.limit));
188
200
  if (opts?.offset !== undefined)
189
201
  qs.set("offset", String(opts.offset));
190
- const result = await this.http.get(`/buckets/${encodeURIComponent(bucket)}/files?${qs}`);
202
+ const query = qs.toString() ? `?${qs}` : "";
203
+ const result = await this.http.get(`/buckets/${bucketId}/files${query}`);
191
204
  return Array.isArray(result) ? result : result.data;
192
205
  }
193
206
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "clefbase",
3
- "version": "1.3.3",
3
+ "version": "1.3.5",
4
4
  "description": "Firebase-style SDK and CLI for Clefbase — database, auth, storage, and hosting",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",