clefbase 1.1.6 → 1.2.1
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 +169 -103
- package/bin/clefbase.js +15 -0
- package/dist/app.d.ts +16 -32
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +29 -44
- package/dist/app.js.map +1 -1
- package/dist/auth/index.d.ts +16 -44
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +40 -95
- package/dist/auth/index.js.map +1 -1
- package/dist/cli-src/cli/api.js +183 -0
- package/dist/cli-src/cli/commands/deploy.js +285 -0
- package/dist/cli-src/cli/commands/info.js +67 -0
- package/dist/cli-src/cli/commands/init.js +226 -0
- package/dist/cli-src/cli/config.js +82 -0
- package/dist/cli-src/cli/index.js +110 -0
- package/dist/cli-src/types.js +17 -0
- package/dist/cli.js +34383 -0
- package/dist/db/index.d.ts +26 -62
- package/dist/db/index.d.ts.map +1 -1
- package/dist/db/index.js +34 -70
- package/dist/db/index.js.map +1 -1
- package/dist/hosting/index.d.ts +120 -0
- package/dist/hosting/index.d.ts.map +1 -0
- package/dist/hosting/index.js +214 -0
- package/dist/hosting/index.js.map +1 -0
- package/dist/http.d.ts +2 -4
- package/dist/http.d.ts.map +1 -1
- package/dist/http.js +8 -22
- package/dist/http.js.map +1 -1
- package/dist/index.d.ts +11 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -6
- package/dist/index.js.map +1 -1
- package/dist/storage/index.d.ts +8 -50
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +9 -59
- package/dist/storage/index.js.map +1 -1
- package/dist/types.d.ts +10 -4
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +0 -1
- package/dist/types.js.map +1 -1
- package/package.json +21 -5
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.ClefbaseHosting = exports.SiteReference = void 0;
|
|
37
|
+
// ─── SiteReference ────────────────────────────────────────────────────────────
|
|
38
|
+
/**
|
|
39
|
+
* A reference to a hosted site.
|
|
40
|
+
*
|
|
41
|
+
* @example
|
|
42
|
+
* const site = hosting.site("my-site-id");
|
|
43
|
+
* const result = await site.deployFiles({ "index.html": htmlBuffer, "app.js": jsBuffer });
|
|
44
|
+
* console.log(`Live at ${result.url}`);
|
|
45
|
+
*/
|
|
46
|
+
class SiteReference {
|
|
47
|
+
constructor(hosting, siteId) {
|
|
48
|
+
this.hosting = hosting;
|
|
49
|
+
this.siteId = siteId;
|
|
50
|
+
}
|
|
51
|
+
/** Get site metadata. */
|
|
52
|
+
async get() {
|
|
53
|
+
return this.hosting._getSite(this.siteId);
|
|
54
|
+
}
|
|
55
|
+
/** Get the currently live deploy, or null if none. */
|
|
56
|
+
async getActiveDeploy() {
|
|
57
|
+
return this.hosting._getActiveDeploy(this.siteId);
|
|
58
|
+
}
|
|
59
|
+
/** List all deploys for this site (newest first). */
|
|
60
|
+
async listDeploys() {
|
|
61
|
+
return this.hosting._listDeploys(this.siteId);
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Deploy a map of { "filePath": Buffer } to this site.
|
|
65
|
+
* Creates a deploy, uploads all files in batches, then goes live.
|
|
66
|
+
*
|
|
67
|
+
* @example
|
|
68
|
+
* import fs from "fs";
|
|
69
|
+
*
|
|
70
|
+
* const result = await site.deployFiles({
|
|
71
|
+
* "index.html": fs.readFileSync("dist/index.html"),
|
|
72
|
+
* "app.js": fs.readFileSync("dist/app.js"),
|
|
73
|
+
* }, {
|
|
74
|
+
* message: "v1.2.0",
|
|
75
|
+
* onProgress: (done, total) => console.log(`${done}/${total}`),
|
|
76
|
+
* });
|
|
77
|
+
*/
|
|
78
|
+
async deployFiles(files, opts) {
|
|
79
|
+
return this.hosting._deployFiles(this.siteId, files, opts);
|
|
80
|
+
}
|
|
81
|
+
/** The public URL for this site. */
|
|
82
|
+
get url() {
|
|
83
|
+
return this.hosting._siteUrl(this.siteId);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
exports.SiteReference = SiteReference;
|
|
87
|
+
// ─── ClefbaseHosting ──────────────────────────────────────────────────────────
|
|
88
|
+
/**
|
|
89
|
+
* Hosting service. Obtain via `getHosting(app)`.
|
|
90
|
+
*
|
|
91
|
+
* @example
|
|
92
|
+
* const hosting = getHosting(app);
|
|
93
|
+
* const site = await hosting.createSite("my-app");
|
|
94
|
+
* const result = await hosting.site(site.id).deployFiles(files);
|
|
95
|
+
* console.log(result.url);
|
|
96
|
+
*/
|
|
97
|
+
class ClefbaseHosting {
|
|
98
|
+
constructor(http, dbId, serverUrl) {
|
|
99
|
+
this.http = http;
|
|
100
|
+
this.dbId = dbId;
|
|
101
|
+
this.serverUrl = serverUrl;
|
|
102
|
+
}
|
|
103
|
+
/** List all sites for this project. */
|
|
104
|
+
async listSites() {
|
|
105
|
+
return this.http.get(`/databases/${this.dbId}/sites`);
|
|
106
|
+
}
|
|
107
|
+
/** Create a new hosted site. */
|
|
108
|
+
async createSite(name, description) {
|
|
109
|
+
return this.http.post(`/databases/${this.dbId}/sites`, { name, description });
|
|
110
|
+
}
|
|
111
|
+
/** Update site metadata. */
|
|
112
|
+
async updateSite(siteId, patch) {
|
|
113
|
+
return this.http.patch(`/databases/${this.dbId}/sites/${siteId}`, patch);
|
|
114
|
+
}
|
|
115
|
+
/** Delete a site and all its deploys permanently. */
|
|
116
|
+
async deleteSite(siteId) {
|
|
117
|
+
await this.http.delete(`/databases/${this.dbId}/sites/${siteId}`);
|
|
118
|
+
}
|
|
119
|
+
/** Return a SiteReference for a specific site ID. */
|
|
120
|
+
site(siteId) {
|
|
121
|
+
return new SiteReference(this, siteId);
|
|
122
|
+
}
|
|
123
|
+
// ─── Internals ─────────────────────────────────────────────────────────────
|
|
124
|
+
_siteUrl(siteId) {
|
|
125
|
+
return `${this.serverUrl.replace(/\/+$/, "")}/hosted/${this.dbId}/${siteId}`;
|
|
126
|
+
}
|
|
127
|
+
async _getSite(siteId) {
|
|
128
|
+
try {
|
|
129
|
+
return await this.http.get(`/databases/${this.dbId}/sites/${siteId}`);
|
|
130
|
+
}
|
|
131
|
+
catch (err) {
|
|
132
|
+
if (err.status === 404)
|
|
133
|
+
return null;
|
|
134
|
+
throw err;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
async _getActiveDeploy(siteId) {
|
|
138
|
+
try {
|
|
139
|
+
const r = await this.http.get(`/databases/${this.dbId}/sites/${siteId}/active`);
|
|
140
|
+
return r.deploy;
|
|
141
|
+
}
|
|
142
|
+
catch (err) {
|
|
143
|
+
if (err.status === 404)
|
|
144
|
+
return null;
|
|
145
|
+
throw err;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
async _listDeploys(siteId) {
|
|
149
|
+
return this.http.get(`/databases/${this.dbId}/sites/${siteId}/deploys`);
|
|
150
|
+
}
|
|
151
|
+
async _deployFiles(siteId, files, opts = {}) {
|
|
152
|
+
const { entrypoint = "index.html", deployedBy, message, batchSize = 20, onProgress } = opts;
|
|
153
|
+
// 1. Create pending deploy
|
|
154
|
+
const pending = await this.http.post(`/databases/${this.dbId}/sites/${siteId}/deploys`, { deployedBy, entrypoint });
|
|
155
|
+
const filePaths = Object.keys(files);
|
|
156
|
+
const fileBuffers = Object.values(files);
|
|
157
|
+
const errors = [];
|
|
158
|
+
let uploaded = 0;
|
|
159
|
+
// 2. Detect whether we have native FormData (Node 18+) or need form-data pkg
|
|
160
|
+
const hasNativeFormData = typeof FormData !== "undefined";
|
|
161
|
+
let FormDataLegacy;
|
|
162
|
+
if (!hasNativeFormData) {
|
|
163
|
+
const mod = await Promise.resolve().then(() => __importStar(require("form-data")));
|
|
164
|
+
FormDataLegacy = mod.default;
|
|
165
|
+
}
|
|
166
|
+
// 3. Upload in batches
|
|
167
|
+
for (let i = 0; i < filePaths.length; i += batchSize) {
|
|
168
|
+
const batchPaths = filePaths.slice(i, i + batchSize);
|
|
169
|
+
const batchBuffers = fileBuffers.slice(i, i + batchSize);
|
|
170
|
+
try {
|
|
171
|
+
if (hasNativeFormData) {
|
|
172
|
+
// Node 18+ native FormData: Buffers must be wrapped in Blob/File
|
|
173
|
+
const form = new FormData();
|
|
174
|
+
for (let j = 0; j < batchPaths.length; j++) {
|
|
175
|
+
const filename = batchPaths[j].split("/").pop() ?? batchPaths[j];
|
|
176
|
+
const buf = batchBuffers[j];
|
|
177
|
+
const ab = buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);
|
|
178
|
+
const blob = new Blob([ab], { type: "application/octet-stream" });
|
|
179
|
+
form.append("files[]", new File([blob], filename, { type: "application/octet-stream" }));
|
|
180
|
+
form.append("filePaths", batchPaths[j]);
|
|
181
|
+
}
|
|
182
|
+
await this.http.request(`/databases/${this.dbId}/deploys/${pending.id}/files/batch`, { method: "POST", body: form, isFormData: true });
|
|
183
|
+
}
|
|
184
|
+
else {
|
|
185
|
+
// Older Node: form-data package accepts Buffers natively
|
|
186
|
+
const form = new FormDataLegacy();
|
|
187
|
+
for (let j = 0; j < batchPaths.length; j++) {
|
|
188
|
+
form.append("files[]", batchBuffers[j], {
|
|
189
|
+
filename: batchPaths[j].split("/").pop() ?? batchPaths[j],
|
|
190
|
+
contentType: "application/octet-stream",
|
|
191
|
+
});
|
|
192
|
+
form.append("filePaths", batchPaths[j]);
|
|
193
|
+
}
|
|
194
|
+
await this.http.request(`/databases/${this.dbId}/deploys/${pending.id}/files/batch`, { method: "POST", body: form, isFormData: true });
|
|
195
|
+
}
|
|
196
|
+
uploaded += batchPaths.length;
|
|
197
|
+
}
|
|
198
|
+
catch (err) {
|
|
199
|
+
errors.push(`Batch ${i}–${i + batchSize}: ${err.message}`);
|
|
200
|
+
}
|
|
201
|
+
onProgress?.(Math.min(i + batchSize, filePaths.length), filePaths.length);
|
|
202
|
+
}
|
|
203
|
+
// 4. Finalize → go live
|
|
204
|
+
const live = await this.http.post(`/databases/${this.dbId}/deploys/${pending.id}/finalize`, { message: message ?? "Deployed via clefbase SDK" });
|
|
205
|
+
return {
|
|
206
|
+
deploy: live,
|
|
207
|
+
filesUploaded: uploaded,
|
|
208
|
+
errors,
|
|
209
|
+
url: this._siteUrl(siteId),
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
exports.ClefbaseHosting = ClefbaseHosting;
|
|
214
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hosting/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6DA,iFAAiF;AAEjF;;;;;;;GAOG;AACH,MAAa,aAAa;IACxB,YACmB,OAAwB,EACzB,MAAc;QADb,YAAO,GAAP,OAAO,CAAiB;QACzB,WAAM,GAAN,MAAM,CAAQ;IAC7B,CAAC;IAEJ,yBAAyB;IACzB,KAAK,CAAC,GAAG;QACP,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5C,CAAC;IAED,sDAAsD;IACtD,KAAK,CAAC,eAAe;QACnB,OAAO,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACpD,CAAC;IAED,qDAAqD;IACrD,KAAK,CAAC,WAAW;QACf,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAChD,CAAC;IAED;;;;;;;;;;;;;;OAcG;IACH,KAAK,CAAC,WAAW,CACf,KAA6B,EAC7B,IAAoB;QAEpB,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAC7D,CAAC;IAED,oCAAoC;IACpC,IAAI,GAAG;QACL,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5C,CAAC;CACF;AA/CD,sCA+CC;AAED,iFAAiF;AAEjF;;;;;;;;GAQG;AACH,MAAa,eAAe;IAC1B,YACmB,IAAgB,EAChB,IAAY,EACZ,SAAiB;QAFjB,SAAI,GAAJ,IAAI,CAAY;QAChB,SAAI,GAAJ,IAAI,CAAQ;QACZ,cAAS,GAAT,SAAS,CAAQ;IACjC,CAAC;IAEJ,uCAAuC;IACvC,KAAK,CAAC,SAAS;QACb,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAgB,cAAc,IAAI,CAAC,IAAI,QAAQ,CAAC,CAAC;IACvE,CAAC;IAED,gCAAgC;IAChC,KAAK,CAAC,UAAU,CAAC,IAAY,EAAE,WAAoB;QACjD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAc,cAAc,IAAI,CAAC,IAAI,QAAQ,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;IAC7F,CAAC;IAED,4BAA4B;IAC5B,KAAK,CAAC,UAAU,CACd,MAAc,EACd,KAAqF;QAErF,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAc,cAAc,IAAI,CAAC,IAAI,UAAU,MAAM,EAAE,EAAE,KAAK,CAAC,CAAC;IACxF,CAAC;IAED,qDAAqD;IACrD,KAAK,CAAC,UAAU,CAAC,MAAc;QAC7B,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,IAAI,CAAC,IAAI,UAAU,MAAM,EAAE,CAAC,CAAC;IACpE,CAAC;IAED,qDAAqD;IACrD,IAAI,CAAC,MAAc;QACjB,OAAO,IAAI,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACzC,CAAC;IAED,8EAA8E;IAE9E,QAAQ,CAAC,MAAc;QACrB,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,WAAW,IAAI,CAAC,IAAI,IAAI,MAAM,EAAE,CAAC;IAC/E,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,MAAc;QAC3B,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAc,cAAc,IAAI,CAAC,IAAI,UAAU,MAAM,EAAE,CAAC,CAAC;QACrF,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,IAAK,GAA2B,CAAC,MAAM,KAAK,GAAG;gBAAE,OAAO,IAAI,CAAC;YAC7D,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,MAAc;QACnC,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAC3B,cAAc,IAAI,CAAC,IAAI,UAAU,MAAM,SAAS,CACjD,CAAC;YACF,OAAO,CAAC,CAAC,MAAM,CAAC;QAClB,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,IAAK,GAA2B,CAAC,MAAM,KAAK,GAAG;gBAAE,OAAO,IAAI,CAAC;YAC7D,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,MAAc;QAC/B,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAClB,cAAc,IAAI,CAAC,IAAI,UAAU,MAAM,UAAU,CAClD,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,YAAY,CAChB,MAAc,EACd,KAA6B,EAC7B,OAAsB,EAAE;QAExB,MAAM,EAAE,UAAU,GAAG,YAAY,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,GAAG,EAAE,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;QAE5F,2BAA2B;QAC3B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAClC,cAAc,IAAI,CAAC,IAAI,UAAU,MAAM,UAAU,EACjD,EAAE,UAAU,EAAE,UAAU,EAAE,CAC3B,CAAC;QAEF,MAAM,SAAS,GAAK,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvC,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACzC,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,IAAI,QAAQ,GAAG,CAAC,CAAC;QAEjB,6EAA6E;QAC7E,MAAM,iBAAiB,GAAG,OAAO,QAAQ,KAAK,WAAW,CAAC;QAC1D,IAAI,cAAuH,CAAC;QAC5H,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACvB,MAAM,GAAG,GAAG,wDAAa,WAAW,GAAC,CAAC;YACtC,cAAc,GAAG,GAAG,CAAC,OAA2C,CAAC;QACnE,CAAC;QAED,uBAAuB;QACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC;YACrD,MAAM,UAAU,GAAK,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC;YACvD,MAAM,YAAY,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC;YAEzD,IAAI,CAAC;gBACH,IAAI,iBAAiB,EAAE,CAAC;oBACtB,iEAAiE;oBACjE,MAAM,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;oBAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;wBAC3C,MAAM,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;wBACjE,MAAM,GAAG,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;wBAC5B,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,CAAgB,CAAC;wBAC5F,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,0BAA0B,EAAE,CAAC,CAAC;wBAClE,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,0BAA0B,EAAE,CAAC,CAAC,CAAC;wBACzF,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC1C,CAAC;oBACD,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CACrB,cAAc,IAAI,CAAC,IAAI,YAAY,OAAO,CAAC,EAAE,cAAc,EAC3D,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CACjD,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,yDAAyD;oBACzD,MAAM,IAAI,GAAG,IAAI,cAAe,EAAE,CAAC;oBACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;wBAC1C,IAAI,CAAC,MAAuD,CAC3D,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,EAC1B;4BACE,QAAQ,EAAK,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,UAAU,CAAC,CAAC,CAAC;4BAC5D,WAAW,EAAE,0BAA0B;yBACxC,CACF,CAAC;wBACF,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC1C,CAAC;oBACD,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CACrB,cAAc,IAAI,CAAC,IAAI,YAAY,OAAO,CAAC,EAAE,cAAc,EAC3D,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CACjD,CAAC;gBACJ,CAAC;gBACD,QAAQ,IAAI,UAAU,CAAC,MAAM,CAAC;YAChC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,CAAC,IAAI,CACT,SAAS,CAAC,IAAI,CAAC,GAAG,SAAS,KAAM,GAAa,CAAC,OAAO,EAAE,CACzD,CAAC;YACJ,CAAC;YAED,UAAU,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,EAAE,SAAS,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QAC5E,CAAC;QAED,wBAAwB;QACxB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAC/B,cAAc,IAAI,CAAC,IAAI,YAAY,OAAO,CAAC,EAAE,WAAW,EACxD,EAAE,OAAO,EAAE,OAAO,IAAI,2BAA2B,EAAE,CACpD,CAAC;QAEF,OAAO;YACL,MAAM,EAAE,IAAI;YACZ,aAAa,EAAE,QAAQ;YACvB,MAAM;YACN,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;SAC3B,CAAC;IACJ,CAAC;CACF;AA5JD,0CA4JC"}
|
package/dist/http.d.ts
CHANGED
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
export interface RequestOptions {
|
|
2
2
|
method?: string;
|
|
3
3
|
body?: unknown;
|
|
4
|
-
/** Extra headers merged on top of the instance defaults */
|
|
5
4
|
headers?: Record<string, string>;
|
|
6
5
|
/**
|
|
7
|
-
* Set to true when body is
|
|
8
|
-
*
|
|
9
|
-
* setting Content-Type (the browser/node-fetch sets it with the boundary).
|
|
6
|
+
* Set to true when body is FormData — prevents JSON-encoding and lets
|
|
7
|
+
* the browser/node-fetch set the Content-Type + boundary automatically.
|
|
10
8
|
*/
|
|
11
9
|
isFormData?: boolean;
|
|
12
10
|
}
|
package/dist/http.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AA2BA,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAID,qBAAa,UAAU;IAEnB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,cAAc;gBADd,OAAO,EAAE,MAAM,EACf,cAAc,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM;IAG9D,OAAO,CAAC,YAAY;IASd,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,cAAmB,GAAG,OAAO,CAAC,CAAC,CAAC;IAyCrE,UAAU,IAAI,MAAM;IAEpB,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAIlE,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAInF,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAIlF,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAIpF,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;CAGtE"}
|
package/dist/http.js
CHANGED
|
@@ -36,22 +36,18 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
36
36
|
exports.HttpClient = void 0;
|
|
37
37
|
const types_1 = require("./types");
|
|
38
38
|
// ─── Fetch resolution ─────────────────────────────────────────────────────────
|
|
39
|
-
// Node 18+ ships native fetch. Older Node falls back to node-fetch v3.
|
|
40
39
|
async function resolveFetch() {
|
|
41
|
-
// Native fetch available (Node 18+, all browsers)
|
|
42
40
|
if (typeof globalThis.fetch === "function") {
|
|
43
41
|
return globalThis.fetch.bind(globalThis);
|
|
44
42
|
}
|
|
45
|
-
// Fallback: node-fetch (listed as a dependency)
|
|
46
43
|
try {
|
|
47
44
|
const mod = await Promise.resolve().then(() => __importStar(require("node-fetch")));
|
|
48
45
|
return mod.default;
|
|
49
46
|
}
|
|
50
47
|
catch {
|
|
51
|
-
throw new types_1.ClefbaseError("No fetch implementation found. Use Node 18+ or ensure node-fetch is installed.");
|
|
48
|
+
throw new types_1.ClefbaseError("No fetch implementation found. Use Node 18+ or ensure node-fetch is installed.", "NETWORK_ERROR");
|
|
52
49
|
}
|
|
53
50
|
}
|
|
54
|
-
// Cache the resolved fetch so we only do the dynamic import once
|
|
55
51
|
let _fetchCache = null;
|
|
56
52
|
async function getFetch() {
|
|
57
53
|
if (!_fetchCache)
|
|
@@ -65,14 +61,9 @@ class HttpClient {
|
|
|
65
61
|
this.defaultHeaders = defaultHeaders;
|
|
66
62
|
}
|
|
67
63
|
mergeHeaders(extra, isFormData) {
|
|
68
|
-
const merged = {
|
|
69
|
-
|
|
70
|
-
...extra,
|
|
71
|
-
};
|
|
72
|
-
// Let fetch set the Content-Type (+ boundary) automatically for FormData
|
|
73
|
-
if (!isFormData) {
|
|
64
|
+
const merged = { ...this.defaultHeaders, ...extra };
|
|
65
|
+
if (!isFormData)
|
|
74
66
|
merged["Content-Type"] = "application/json";
|
|
75
|
-
}
|
|
76
67
|
return merged;
|
|
77
68
|
}
|
|
78
69
|
async request(path, opts = {}) {
|
|
@@ -84,9 +75,7 @@ class HttpClient {
|
|
|
84
75
|
headers: this.mergeHeaders(headers, isFormData),
|
|
85
76
|
};
|
|
86
77
|
if (body !== undefined) {
|
|
87
|
-
init.body = isFormData
|
|
88
|
-
? body
|
|
89
|
-
: JSON.stringify(body);
|
|
78
|
+
init.body = isFormData ? body : JSON.stringify(body);
|
|
90
79
|
}
|
|
91
80
|
let res;
|
|
92
81
|
try {
|
|
@@ -98,23 +87,20 @@ class HttpClient {
|
|
|
98
87
|
if (!res.ok) {
|
|
99
88
|
let message = `Request failed: ${res.status} ${res.statusText}`;
|
|
100
89
|
try {
|
|
101
|
-
const
|
|
102
|
-
if (
|
|
103
|
-
message =
|
|
90
|
+
const errBody = (await res.json());
|
|
91
|
+
if (errBody.error)
|
|
92
|
+
message = errBody.error;
|
|
104
93
|
}
|
|
105
94
|
catch { /* keep default message */ }
|
|
106
95
|
throw new types_1.ClefbaseError(message, String(res.status), res.status);
|
|
107
96
|
}
|
|
108
|
-
// 204 No Content or empty body — return undefined
|
|
109
97
|
const contentLength = res.headers.get("content-length");
|
|
110
98
|
if (res.status === 204 || contentLength === "0") {
|
|
111
99
|
return undefined;
|
|
112
100
|
}
|
|
113
101
|
return res.json();
|
|
114
102
|
}
|
|
115
|
-
getBaseUrl() {
|
|
116
|
-
return this.baseUrl;
|
|
117
|
-
}
|
|
103
|
+
getBaseUrl() { return this.baseUrl; }
|
|
118
104
|
get(path, headers) {
|
|
119
105
|
return this.request(path, { method: "GET", headers });
|
|
120
106
|
}
|
package/dist/http.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mCAAwC;AAExC,iFAAiF;
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,24 +1,28 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* clefbase — Firebase-style SDK for Clefbase
|
|
2
|
+
* clefbase — Firebase-style SDK for Clefbase / Cleforyx
|
|
3
3
|
*
|
|
4
4
|
* @example
|
|
5
|
-
* import { initClefbase, getDatabase, getAuth, getStorage } from "clefbase";
|
|
5
|
+
* import { initClefbase, getDatabase, getAuth, getStorage, getHosting } from "clefbase";
|
|
6
6
|
*
|
|
7
7
|
* const app = initClefbase({
|
|
8
|
-
* serverUrl:
|
|
9
|
-
* projectId:
|
|
10
|
-
* apiKey:
|
|
8
|
+
* serverUrl: "https://api.cleforyx.com",
|
|
9
|
+
* projectId: "my_project_abc",
|
|
10
|
+
* apiKey: "cfx_...",
|
|
11
|
+
* adminSecret: "...", // only needed for hosting
|
|
11
12
|
* });
|
|
12
13
|
*
|
|
13
14
|
* const db = getDatabase(app);
|
|
14
15
|
* const auth = getAuth(app);
|
|
15
16
|
* const storage = getStorage(app);
|
|
17
|
+
* const hosting = getHosting(app);
|
|
16
18
|
*/
|
|
17
|
-
export { ClefbaseApp, initClefbase, getApp, getDatabase, getAuth, getStorage, } from "./app";
|
|
19
|
+
export { ClefbaseApp, initClefbase, getApp, getDatabase, getAuth, getStorage, getHosting, } from "./app";
|
|
18
20
|
export { Database, CollectionReference, DocumentReference, Query } from "./db";
|
|
19
21
|
export { Auth } from "./auth";
|
|
20
22
|
export { ClefbaseStorage, StorageReference, BucketReference } from "./storage";
|
|
21
|
-
export type { ClefbaseConfig, ClefbaseDocument, QueryOptions, QueryResult, FilterOperator, WhereClause, WhereValue, AuthUser, AuthSession, AuthResult, } from "./types";
|
|
22
23
|
export type { StorageFile } from "./storage";
|
|
24
|
+
export { ClefbaseHosting, SiteReference } from "./hosting";
|
|
25
|
+
export type { HostingSite, HostingDeploy, HostingFile, DeployResult, DeployOptions, HostingStatus, DeployStatus, } from "./hosting";
|
|
26
|
+
export type { ClefbaseConfig, ClefbaseDocument, QueryOptions, QueryResult, FilterOperator, WhereClause, WhereValue, AuthUser, AuthSession, AuthResult, } from "./types";
|
|
23
27
|
export { ClefbaseError } from "./types";
|
|
24
28
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,EACL,WAAW,EACX,YAAY,EACZ,MAAM,EACN,WAAW,EACX,OAAO,EACP,UAAU,EACV,UAAU,GACX,MAAM,OAAO,CAAC;AAGf,OAAO,EAAE,QAAQ,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAG/E,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAG9B,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC/E,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAG7C,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC3D,YAAY,EACV,WAAW,EACX,aAAa,EACb,WAAW,EACX,YAAY,EACZ,aAAa,EACb,aAAa,EACb,YAAY,GACb,MAAM,WAAW,CAAC;AAGnB,YAAY,EACV,cAAc,EACd,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,cAAc,EACd,WAAW,EACX,UAAU,EACV,QAAQ,EACR,WAAW,EACX,UAAU,GACX,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,22 +1,24 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
|
-
* clefbase — Firebase-style SDK for Clefbase
|
|
3
|
+
* clefbase — Firebase-style SDK for Clefbase / Cleforyx
|
|
4
4
|
*
|
|
5
5
|
* @example
|
|
6
|
-
* import { initClefbase, getDatabase, getAuth, getStorage } from "clefbase";
|
|
6
|
+
* import { initClefbase, getDatabase, getAuth, getStorage, getHosting } from "clefbase";
|
|
7
7
|
*
|
|
8
8
|
* const app = initClefbase({
|
|
9
|
-
* serverUrl:
|
|
10
|
-
* projectId:
|
|
11
|
-
* apiKey:
|
|
9
|
+
* serverUrl: "https://api.cleforyx.com",
|
|
10
|
+
* projectId: "my_project_abc",
|
|
11
|
+
* apiKey: "cfx_...",
|
|
12
|
+
* adminSecret: "...", // only needed for hosting
|
|
12
13
|
* });
|
|
13
14
|
*
|
|
14
15
|
* const db = getDatabase(app);
|
|
15
16
|
* const auth = getAuth(app);
|
|
16
17
|
* const storage = getStorage(app);
|
|
18
|
+
* const hosting = getHosting(app);
|
|
17
19
|
*/
|
|
18
20
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
-
exports.ClefbaseError = exports.BucketReference = exports.StorageReference = exports.ClefbaseStorage = exports.Auth = exports.Query = exports.DocumentReference = exports.CollectionReference = exports.Database = exports.getStorage = exports.getAuth = exports.getDatabase = exports.getApp = exports.initClefbase = exports.ClefbaseApp = void 0;
|
|
21
|
+
exports.ClefbaseError = exports.SiteReference = exports.ClefbaseHosting = exports.BucketReference = exports.StorageReference = exports.ClefbaseStorage = exports.Auth = exports.Query = exports.DocumentReference = exports.CollectionReference = exports.Database = exports.getHosting = exports.getStorage = exports.getAuth = exports.getDatabase = exports.getApp = exports.initClefbase = exports.ClefbaseApp = void 0;
|
|
20
22
|
// ─── App ──────────────────────────────────────────────────────────────────────
|
|
21
23
|
var app_1 = require("./app");
|
|
22
24
|
Object.defineProperty(exports, "ClefbaseApp", { enumerable: true, get: function () { return app_1.ClefbaseApp; } });
|
|
@@ -25,6 +27,7 @@ Object.defineProperty(exports, "getApp", { enumerable: true, get: function () {
|
|
|
25
27
|
Object.defineProperty(exports, "getDatabase", { enumerable: true, get: function () { return app_1.getDatabase; } });
|
|
26
28
|
Object.defineProperty(exports, "getAuth", { enumerable: true, get: function () { return app_1.getAuth; } });
|
|
27
29
|
Object.defineProperty(exports, "getStorage", { enumerable: true, get: function () { return app_1.getStorage; } });
|
|
30
|
+
Object.defineProperty(exports, "getHosting", { enumerable: true, get: function () { return app_1.getHosting; } });
|
|
28
31
|
// ─── Database ─────────────────────────────────────────────────────────────────
|
|
29
32
|
var db_1 = require("./db");
|
|
30
33
|
Object.defineProperty(exports, "Database", { enumerable: true, get: function () { return db_1.Database; } });
|
|
@@ -39,6 +42,10 @@ var storage_1 = require("./storage");
|
|
|
39
42
|
Object.defineProperty(exports, "ClefbaseStorage", { enumerable: true, get: function () { return storage_1.ClefbaseStorage; } });
|
|
40
43
|
Object.defineProperty(exports, "StorageReference", { enumerable: true, get: function () { return storage_1.StorageReference; } });
|
|
41
44
|
Object.defineProperty(exports, "BucketReference", { enumerable: true, get: function () { return storage_1.BucketReference; } });
|
|
45
|
+
// ─── Hosting ──────────────────────────────────────────────────────────────────
|
|
46
|
+
var hosting_1 = require("./hosting");
|
|
47
|
+
Object.defineProperty(exports, "ClefbaseHosting", { enumerable: true, get: function () { return hosting_1.ClefbaseHosting; } });
|
|
48
|
+
Object.defineProperty(exports, "SiteReference", { enumerable: true, get: function () { return hosting_1.SiteReference; } });
|
|
42
49
|
var types_1 = require("./types");
|
|
43
50
|
Object.defineProperty(exports, "ClefbaseError", { enumerable: true, get: function () { return types_1.ClefbaseError; } });
|
|
44
51
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;GAiBG;;;AAEH,iFAAiF;AACjF,6BAQe;AAPb,kGAAA,WAAW,OAAA;AACX,mGAAA,YAAY,OAAA;AACZ,6FAAA,MAAM,OAAA;AACN,kGAAA,WAAW,OAAA;AACX,8FAAA,OAAO,OAAA;AACP,iGAAA,UAAU,OAAA;AACV,iGAAA,UAAU,OAAA;AAGZ,iFAAiF;AACjF,2BAA+E;AAAtE,8FAAA,QAAQ,OAAA;AAAE,yGAAA,mBAAmB,OAAA;AAAE,uGAAA,iBAAiB,OAAA;AAAE,2FAAA,KAAK,OAAA;AAEhE,iFAAiF;AACjF,+BAA8B;AAArB,4FAAA,IAAI,OAAA;AAEb,iFAAiF;AACjF,qCAA+E;AAAtE,0GAAA,eAAe,OAAA;AAAE,2GAAA,gBAAgB,OAAA;AAAE,0GAAA,eAAe,OAAA;AAG3D,iFAAiF;AACjF,qCAA2D;AAAlD,0GAAA,eAAe,OAAA;AAAE,wGAAA,aAAa,OAAA;AAyBvC,iCAAwC;AAA/B,sGAAA,aAAa,OAAA"}
|
package/dist/storage/index.d.ts
CHANGED
|
@@ -10,7 +10,7 @@ export interface StorageFile {
|
|
|
10
10
|
md5?: string;
|
|
11
11
|
createdAt: string;
|
|
12
12
|
metadata?: Record<string, unknown>;
|
|
13
|
-
/**
|
|
13
|
+
/** Present on /resolve responses */
|
|
14
14
|
downloadUrl?: string;
|
|
15
15
|
}
|
|
16
16
|
/**
|
|
@@ -27,35 +27,25 @@ export declare class StorageReference {
|
|
|
27
27
|
readonly filePath: string;
|
|
28
28
|
constructor(storage: ClefbaseStorage, bucket: string, filePath: string);
|
|
29
29
|
/**
|
|
30
|
-
* Upload a file
|
|
31
|
-
* Accepts a Buffer (Node.js) or File/Blob (browser).
|
|
30
|
+
* Upload a file. Accepts Buffer (Node) or File/Blob (browser).
|
|
32
31
|
*
|
|
33
32
|
* @example
|
|
34
33
|
* // Node.js
|
|
35
|
-
*
|
|
34
|
+
* await ref.upload(fs.readFileSync("photo.jpg"), { contentType: "image/jpeg" });
|
|
36
35
|
* // Browser
|
|
37
|
-
*
|
|
36
|
+
* await ref.upload(fileInput.files[0]);
|
|
38
37
|
*/
|
|
39
38
|
upload(data: Buffer | Blob | File, opts?: {
|
|
40
39
|
contentType?: string;
|
|
41
40
|
metadata?: Record<string, unknown>;
|
|
42
41
|
}): Promise<StorageFile>;
|
|
43
|
-
/**
|
|
44
|
-
* Returns the public download URL for this file.
|
|
45
|
-
* Uses GET /storage/path/:bucket/:filePath which takes the path as URL
|
|
46
|
-
* segments — slashes are never percent-encoded unlike query params.
|
|
47
|
-
*/
|
|
42
|
+
/** Returns the public download URL for this file. */
|
|
48
43
|
getDownloadURL(): Promise<string>;
|
|
49
|
-
/** Fetch metadata including downloadUrl
|
|
44
|
+
/** Fetch file metadata including downloadUrl. */
|
|
50
45
|
getMetadata(): Promise<StorageFile>;
|
|
51
46
|
/** Delete this file. */
|
|
52
47
|
delete(): Promise<void>;
|
|
53
|
-
/**
|
|
54
|
-
* List files under this path prefix within the bucket.
|
|
55
|
-
*
|
|
56
|
-
* @example
|
|
57
|
-
* const files = await storage.ref("avatars/").list({ limit: 50 });
|
|
58
|
-
*/
|
|
48
|
+
/** List files under this path prefix. */
|
|
59
49
|
list(opts?: {
|
|
60
50
|
limit?: number;
|
|
61
51
|
offset?: number;
|
|
@@ -63,7 +53,6 @@ export declare class StorageReference {
|
|
|
63
53
|
}
|
|
64
54
|
/**
|
|
65
55
|
* A scoped helper for a named bucket.
|
|
66
|
-
* Obtain via storage.bucket("bucket-name").
|
|
67
56
|
*
|
|
68
57
|
* @example
|
|
69
58
|
* const ref = storage.bucket("user-uploads").ref("doc.pdf");
|
|
@@ -75,15 +64,11 @@ export declare class BucketReference {
|
|
|
75
64
|
ref(filePath: string): StorageReference;
|
|
76
65
|
}
|
|
77
66
|
/**
|
|
78
|
-
* File storage service. Obtain via getStorage(app)
|
|
67
|
+
* File storage service. Obtain via `getStorage(app)`.
|
|
79
68
|
*
|
|
80
69
|
* @example
|
|
81
70
|
* const storage = getStorage(app);
|
|
82
|
-
*
|
|
83
|
-
* // Resolve a stored path to a download URL (no auth required)
|
|
84
71
|
* const url = await storage.ref("products/image.jpg").getDownloadURL();
|
|
85
|
-
*
|
|
86
|
-
* // Upload (requires API key)
|
|
87
72
|
* await storage.bucket("media").ref("photo.jpg").upload(buffer, { contentType: "image/jpeg" });
|
|
88
73
|
*/
|
|
89
74
|
export declare class ClefbaseStorage {
|
|
@@ -99,40 +84,13 @@ export declare class ClefbaseStorage {
|
|
|
99
84
|
bucket(name: string): BucketReference;
|
|
100
85
|
/** Return a StorageReference in the default bucket. */
|
|
101
86
|
ref(filePath: string): StorageReference;
|
|
102
|
-
/**
|
|
103
|
-
* Build a direct inline download URL using the /storage/path/ endpoint.
|
|
104
|
-
* Server route: GET /storage/path/:bucket/:filePath?projectId=&inline=true
|
|
105
|
-
*
|
|
106
|
-
* This avoids all query-param encoding issues — the path is in URL segments
|
|
107
|
-
* so slashes are never percent-encoded by the browser or fetch.
|
|
108
|
-
*/
|
|
109
87
|
_directUrl(bucket: string, filePath: string): string;
|
|
110
|
-
/**
|
|
111
|
-
* Resolve a full path (bucketName/filePath) → metadata + downloadUrl.
|
|
112
|
-
* Server route: GET /storage/resolve?projectId=xxx&path=<fullPath>
|
|
113
|
-
* This is a PUBLIC endpoint — no API key needed.
|
|
114
|
-
*/
|
|
115
88
|
_resolve(bucket: string, filePath: string): Promise<StorageFile>;
|
|
116
|
-
/**
|
|
117
|
-
* Upload a file.
|
|
118
|
-
* Server route: POST /storage/buckets/:bucketId/files (requires x-cfx-key)
|
|
119
|
-
* Sent as multipart/form-data with field "file", optional "folder", optional "metadata".
|
|
120
|
-
*/
|
|
121
89
|
_upload(bucket: string, filePath: string, data: Buffer | Blob | File, opts?: {
|
|
122
90
|
contentType?: string;
|
|
123
91
|
metadata?: Record<string, unknown>;
|
|
124
92
|
}): Promise<StorageFile>;
|
|
125
|
-
/**
|
|
126
|
-
* Delete a file.
|
|
127
|
-
* Resolves the path to a fileId via _resolve, then calls:
|
|
128
|
-
* DELETE /storage/buckets/:bucketId/files/:fileId (requires x-cfx-key)
|
|
129
|
-
*/
|
|
130
93
|
_delete(bucket: string, filePath: string): Promise<void>;
|
|
131
|
-
/**
|
|
132
|
-
* List files in a bucket, optionally filtered by folder prefix.
|
|
133
|
-
* Server route: GET /storage/buckets/:bucketId/files?projectId=&folder=&limit=&offset=
|
|
134
|
-
* This is a PUBLIC endpoint.
|
|
135
|
-
*/
|
|
136
94
|
_list(bucket: string, prefix: string, opts?: {
|
|
137
95
|
limit?: number;
|
|
138
96
|
offset?: number;
|
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"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"}
|