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.
Files changed (43) hide show
  1. package/README.md +169 -103
  2. package/bin/clefbase.js +15 -0
  3. package/dist/app.d.ts +16 -32
  4. package/dist/app.d.ts.map +1 -1
  5. package/dist/app.js +29 -44
  6. package/dist/app.js.map +1 -1
  7. package/dist/auth/index.d.ts +16 -44
  8. package/dist/auth/index.d.ts.map +1 -1
  9. package/dist/auth/index.js +40 -95
  10. package/dist/auth/index.js.map +1 -1
  11. package/dist/cli-src/cli/api.js +183 -0
  12. package/dist/cli-src/cli/commands/deploy.js +285 -0
  13. package/dist/cli-src/cli/commands/info.js +67 -0
  14. package/dist/cli-src/cli/commands/init.js +226 -0
  15. package/dist/cli-src/cli/config.js +82 -0
  16. package/dist/cli-src/cli/index.js +110 -0
  17. package/dist/cli-src/types.js +17 -0
  18. package/dist/cli.js +34383 -0
  19. package/dist/db/index.d.ts +26 -62
  20. package/dist/db/index.d.ts.map +1 -1
  21. package/dist/db/index.js +34 -70
  22. package/dist/db/index.js.map +1 -1
  23. package/dist/hosting/index.d.ts +120 -0
  24. package/dist/hosting/index.d.ts.map +1 -0
  25. package/dist/hosting/index.js +214 -0
  26. package/dist/hosting/index.js.map +1 -0
  27. package/dist/http.d.ts +2 -4
  28. package/dist/http.d.ts.map +1 -1
  29. package/dist/http.js +8 -22
  30. package/dist/http.js.map +1 -1
  31. package/dist/index.d.ts +11 -7
  32. package/dist/index.d.ts.map +1 -1
  33. package/dist/index.js +13 -6
  34. package/dist/index.js.map +1 -1
  35. package/dist/storage/index.d.ts +8 -50
  36. package/dist/storage/index.d.ts.map +1 -1
  37. package/dist/storage/index.js +9 -59
  38. package/dist/storage/index.js.map +1 -1
  39. package/dist/types.d.ts +10 -4
  40. package/dist/types.d.ts.map +1 -1
  41. package/dist/types.js +0 -1
  42. package/dist/types.js.map +1 -1
  43. 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":"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"}
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 a FormData instance.
8
- * Prevents the client from JSON-encoding the body or
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
  }
@@ -1 +1 @@
1
- {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AA8BA,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,2DAA2D;IAC3D,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC;;;;OAIG;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;IAed,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,cAAmB,GAAG,OAAO,CAAC,CAAC,CAAC;IA4CrE,UAAU,IAAI,MAAM;IAIpB,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"}
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
- ...this.defaultHeaders,
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 body = (await res.json());
102
- if (body.error)
103
- message = body.error;
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":"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"}
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: "https://your-server.com",
9
- * projectId: "my_project_1abc",
10
- * apiKey: "cfx_abc123...",
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
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,EACL,WAAW,EACX,YAAY,EACZ,MAAM,EACN,WAAW,EACX,OAAO,EACP,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;AAG/E,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;AAGjB,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAE7C,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC"}
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: "https://your-server.com",
10
- * projectId: "my_project_1abc",
11
- * apiKey: "cfx_abc123...",
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;;;;;;;;;;;;;;;GAeG;;;AAEH,iFAAiF;AACjF,6BAOe;AANb,kGAAA,WAAW,OAAA;AACX,mGAAA,YAAY,OAAA;AACZ,6FAAA,MAAM,OAAA;AACN,kGAAA,WAAW,OAAA;AACX,8FAAA,OAAO,OAAA;AACP,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;AAmB3D,iCAAwC;AAA/B,sGAAA,aAAa,OAAA"}
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"}
@@ -10,7 +10,7 @@ export interface StorageFile {
10
10
  md5?: string;
11
11
  createdAt: string;
12
12
  metadata?: Record<string, unknown>;
13
- /** Only present on /resolve response */
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 to this path.
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
- * const meta = await ref.upload(fs.readFileSync("photo.jpg"), { contentType: "image/jpeg" });
34
+ * await ref.upload(fs.readFileSync("photo.jpg"), { contentType: "image/jpeg" });
36
35
  * // Browser
37
- * const meta = await ref.upload(fileInput.files[0]);
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 for this file. */
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":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"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"}