clefbase 1.3.3 → 1.3.4
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 +1 -1
- package/dist/storage/index.d.ts +6 -39
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +32 -49
- package/dist/storage/index.js.map +1 -1
- package/package.json +1 -1
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.
|
|
34408
|
+
var version = "1.3.4";
|
|
34409
34409
|
|
|
34410
34410
|
// src/cli/index.ts
|
|
34411
34411
|
var program2 = new Command();
|
package/dist/storage/index.d.ts
CHANGED
|
@@ -13,77 +13,44 @@ 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. */
|
|
43
25
|
getDownloadURL(): Promise<string>;
|
|
44
|
-
/** Fetch file metadata including downloadUrl. */
|
|
45
26
|
getMetadata(): Promise<StorageFile>;
|
|
46
|
-
/** Delete this file. */
|
|
47
27
|
delete(): Promise<void>;
|
|
48
|
-
/** List files under this path prefix. */
|
|
49
28
|
list(opts?: {
|
|
50
29
|
limit?: number;
|
|
51
30
|
offset?: number;
|
|
52
31
|
}): Promise<StorageFile[]>;
|
|
53
32
|
}
|
|
54
|
-
/**
|
|
55
|
-
* A scoped helper for a named bucket.
|
|
56
|
-
*
|
|
57
|
-
* @example
|
|
58
|
-
* const ref = storage.bucket("user-uploads").ref("doc.pdf");
|
|
59
|
-
*/
|
|
60
33
|
export declare class BucketReference {
|
|
61
34
|
private readonly storage;
|
|
62
35
|
readonly name: string;
|
|
63
36
|
constructor(storage: ClefbaseStorage, name: string);
|
|
64
37
|
ref(filePath: string): StorageReference;
|
|
65
38
|
}
|
|
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
39
|
export declare class ClefbaseStorage {
|
|
75
40
|
private readonly http;
|
|
76
41
|
private readonly projectId;
|
|
77
42
|
private readonly auth;
|
|
78
|
-
|
|
43
|
+
/** @internal exposed so StorageImage can build URLs synchronously */
|
|
44
|
+
_defaultBucket: string;
|
|
45
|
+
/** In-memory cache: bucket name → UUID */
|
|
46
|
+
private _bucketIdCache;
|
|
79
47
|
constructor(http: HttpClient, projectId: string, auth?: Auth | null);
|
|
80
48
|
private authHeaders;
|
|
81
|
-
/** Override the default bucket name (default: "default"). */
|
|
82
49
|
setDefaultBucket(name: string): this;
|
|
83
|
-
/** Return a reference scoped to a named bucket. */
|
|
84
50
|
bucket(name: string): BucketReference;
|
|
85
|
-
/** Return a StorageReference in the default bucket. */
|
|
86
51
|
ref(filePath: string): StorageReference;
|
|
52
|
+
_resolveBucketId(bucketName: string): Promise<string>;
|
|
53
|
+
/** Synchronous direct URL — used by StorageImage to avoid a waterfall. */
|
|
87
54
|
_directUrl(bucket: string, filePath: string): string;
|
|
88
55
|
_resolve(bucket: string, filePath: string): Promise<StorageFile>;
|
|
89
56
|
_upload(bucket: string, filePath: string, data: Buffer | Blob | File, opts?: {
|
|
@@ -1 +1 @@
|
|
|
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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"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"}
|
package/dist/storage/index.js
CHANGED
|
@@ -35,57 +35,30 @@ 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. */
|
|
65
47
|
async getDownloadURL() {
|
|
66
48
|
return this.storage._directUrl(this.bucket, this.filePath);
|
|
67
49
|
}
|
|
68
|
-
/** Fetch file metadata including downloadUrl. */
|
|
69
50
|
async getMetadata() {
|
|
70
51
|
return this.storage._resolve(this.bucket, this.filePath);
|
|
71
52
|
}
|
|
72
|
-
/** Delete this file. */
|
|
73
53
|
async delete() {
|
|
74
54
|
return this.storage._delete(this.bucket, this.filePath);
|
|
75
55
|
}
|
|
76
|
-
/** List files under this path prefix. */
|
|
77
56
|
async list(opts) {
|
|
78
57
|
return this.storage._list(this.bucket, this.filePath, opts);
|
|
79
58
|
}
|
|
80
59
|
}
|
|
81
60
|
exports.StorageReference = StorageReference;
|
|
82
61
|
// ─── 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
62
|
class BucketReference {
|
|
90
63
|
constructor(storage, name) {
|
|
91
64
|
this.storage = storage;
|
|
@@ -97,38 +70,49 @@ class BucketReference {
|
|
|
97
70
|
}
|
|
98
71
|
exports.BucketReference = BucketReference;
|
|
99
72
|
// ─── 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
73
|
class ClefbaseStorage {
|
|
109
74
|
constructor(http, projectId, auth = null) {
|
|
110
75
|
this.http = http;
|
|
111
76
|
this.projectId = projectId;
|
|
112
77
|
this.auth = auth;
|
|
78
|
+
/** @internal exposed so StorageImage can build URLs synchronously */
|
|
113
79
|
this._defaultBucket = "default";
|
|
80
|
+
/** In-memory cache: bucket name → UUID */
|
|
81
|
+
this._bucketIdCache = new Map();
|
|
114
82
|
}
|
|
115
83
|
authHeaders() {
|
|
116
84
|
return this.auth?.getAuthHeaders() ?? {};
|
|
117
85
|
}
|
|
118
|
-
/** Override the default bucket name (default: "default"). */
|
|
119
86
|
setDefaultBucket(name) {
|
|
120
87
|
this._defaultBucket = name;
|
|
121
88
|
return this;
|
|
122
89
|
}
|
|
123
|
-
/** Return a reference scoped to a named bucket. */
|
|
124
90
|
bucket(name) {
|
|
125
91
|
return new BucketReference(this, name);
|
|
126
92
|
}
|
|
127
|
-
/** Return a StorageReference in the default bucket. */
|
|
128
93
|
ref(filePath) {
|
|
129
94
|
return new StorageReference(this, this._defaultBucket, filePath.replace(/^\/+/, ""));
|
|
130
95
|
}
|
|
96
|
+
// ─── Bucket UUID resolution ───────────────────────────────────────────────
|
|
97
|
+
//
|
|
98
|
+
// The external storage router identifies buckets by UUID, not by name.
|
|
99
|
+
// dbId comes from the API key (set by dbApiKeyMiddleware), so we just call
|
|
100
|
+
// GET /buckets (no projectId needed — the key carries that context).
|
|
101
|
+
async _resolveBucketId(bucketName) {
|
|
102
|
+
const cached = this._bucketIdCache.get(bucketName);
|
|
103
|
+
if (cached)
|
|
104
|
+
return cached;
|
|
105
|
+
const buckets = await this.http.get("/buckets");
|
|
106
|
+
for (const b of buckets) {
|
|
107
|
+
this._bucketIdCache.set(b.name, b.id);
|
|
108
|
+
}
|
|
109
|
+
const id = this._bucketIdCache.get(bucketName);
|
|
110
|
+
if (!id)
|
|
111
|
+
throw new Error(`Storage bucket "${bucketName}" not found`);
|
|
112
|
+
return id;
|
|
113
|
+
}
|
|
131
114
|
// ─── Internal methods called by StorageReference ──────────────────────────
|
|
115
|
+
/** Synchronous direct URL — used by StorageImage to avoid a waterfall. */
|
|
132
116
|
_directUrl(bucket, filePath) {
|
|
133
117
|
const cleanFile = filePath.replace(/^\/+/, "");
|
|
134
118
|
const base = this.http.getBaseUrl();
|
|
@@ -139,6 +123,8 @@ class ClefbaseStorage {
|
|
|
139
123
|
return this.http.get(`/resolve?projectId=${encodeURIComponent(this.projectId)}&path=${cleanFile}`);
|
|
140
124
|
}
|
|
141
125
|
async _upload(bucket, filePath, data, opts) {
|
|
126
|
+
// Resolve bucket name → UUID before building the URL
|
|
127
|
+
const bucketId = await this._resolveBucketId(bucket);
|
|
142
128
|
let FormDataImpl;
|
|
143
129
|
if (typeof FormData !== "undefined") {
|
|
144
130
|
FormDataImpl = FormData;
|
|
@@ -147,15 +133,11 @@ class ClefbaseStorage {
|
|
|
147
133
|
const mod = await Promise.resolve().then(() => __importStar(require("form-data")));
|
|
148
134
|
FormDataImpl = mod.default;
|
|
149
135
|
}
|
|
150
|
-
const form = new FormDataImpl();
|
|
151
136
|
const cleanPath = filePath.replace(/^\/+/, "");
|
|
152
137
|
const filename = cleanPath.split("/").pop() ?? "upload";
|
|
153
138
|
const parts = cleanPath.split("/");
|
|
154
139
|
const folder = parts.length > 1 ? parts.slice(0, -1).join("/") : undefined;
|
|
155
|
-
|
|
156
|
-
// resolve the correct project database and bucket UUID. ──────────
|
|
157
|
-
form.append("projectId", this.projectId);
|
|
158
|
-
form.append("bucketName", bucket);
|
|
140
|
+
const form = new FormDataImpl();
|
|
159
141
|
if (typeof Buffer !== "undefined" && Buffer.isBuffer(data)) {
|
|
160
142
|
form.append("file", data, { filename, contentType: opts?.contentType ?? "application/octet-stream" });
|
|
161
143
|
}
|
|
@@ -166,9 +148,7 @@ class ClefbaseStorage {
|
|
|
166
148
|
form.append("folder", folder);
|
|
167
149
|
if (opts?.metadata)
|
|
168
150
|
form.append("metadata", JSON.stringify(opts.metadata));
|
|
169
|
-
|
|
170
|
-
// authenticate/route even before reading the multipart body. ─────
|
|
171
|
-
return this.http.request(`/buckets/${encodeURIComponent(bucket)}/files?projectId=${encodeURIComponent(this.projectId)}`, {
|
|
151
|
+
return this.http.request(`/buckets/${bucketId}/files`, {
|
|
172
152
|
method: "POST",
|
|
173
153
|
body: form,
|
|
174
154
|
isFormData: true,
|
|
@@ -176,18 +156,21 @@ class ClefbaseStorage {
|
|
|
176
156
|
});
|
|
177
157
|
}
|
|
178
158
|
async _delete(bucket, filePath) {
|
|
159
|
+
const bucketId = await this._resolveBucketId(bucket);
|
|
179
160
|
const meta = await this._resolve(bucket, filePath);
|
|
180
|
-
await this.http.delete(`/buckets/${
|
|
161
|
+
await this.http.delete(`/buckets/${bucketId}/files/${meta.id}`, this.authHeaders());
|
|
181
162
|
}
|
|
182
163
|
async _list(bucket, prefix, opts) {
|
|
183
|
-
const
|
|
164
|
+
const bucketId = await this._resolveBucketId(bucket);
|
|
165
|
+
const qs = new URLSearchParams();
|
|
184
166
|
if (prefix)
|
|
185
167
|
qs.set("folder", prefix);
|
|
186
168
|
if (opts?.limit !== undefined)
|
|
187
169
|
qs.set("limit", String(opts.limit));
|
|
188
170
|
if (opts?.offset !== undefined)
|
|
189
171
|
qs.set("offset", String(opts.offset));
|
|
190
|
-
const
|
|
172
|
+
const query = qs.toString() ? `?${qs}` : "";
|
|
173
|
+
const result = await this.http.get(`/buckets/${bucketId}/files${query}`);
|
|
191
174
|
return Array.isArray(result) ? result : result.data;
|
|
192
175
|
}
|
|
193
176
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmBA,iFAAiF;AAEjF
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"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"}
|