@calculator-5329/cloud-proxy 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +243 -0
- package/dist/client.d.ts +32 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +51 -0
- package/dist/client.js.map +1 -0
- package/dist/errors.d.ts +13 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +34 -0
- package/dist/errors.js.map +1 -0
- package/dist/http.d.ts +29 -0
- package/dist/http.d.ts.map +1 -0
- package/dist/http.js +91 -0
- package/dist/http.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +24 -0
- package/dist/index.js.map +1 -0
- package/dist/modules/ai.d.ts +33 -0
- package/dist/modules/ai.d.ts.map +1 -0
- package/dist/modules/ai.js +140 -0
- package/dist/modules/ai.js.map +1 -0
- package/dist/modules/auth.d.ts +49 -0
- package/dist/modules/auth.d.ts.map +1 -0
- package/dist/modules/auth.js +80 -0
- package/dist/modules/auth.js.map +1 -0
- package/dist/modules/firestore.d.ts +56 -0
- package/dist/modules/firestore.d.ts.map +1 -0
- package/dist/modules/firestore.js +89 -0
- package/dist/modules/firestore.js.map +1 -0
- package/dist/modules/setup.d.ts +26 -0
- package/dist/modules/setup.d.ts.map +1 -0
- package/dist/modules/setup.js +43 -0
- package/dist/modules/setup.js.map +1 -0
- package/dist/modules/storage.d.ts +28 -0
- package/dist/modules/storage.d.ts.map +1 -0
- package/dist/modules/storage.js +62 -0
- package/dist/modules/storage.js.map +1 -0
- package/dist/modules/vectors.d.ts +27 -0
- package/dist/modules/vectors.d.ts.map +1 -0
- package/dist/modules/vectors.js +66 -0
- package/dist/modules/vectors.js.map +1 -0
- package/dist/types.d.ts +320 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +20 -0
- package/dist/types.js.map +1 -0
- package/package.json +31 -0
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AI provider proxy. Forwards requests to upstream providers
|
|
3
|
+
* (OpenAI, Anthropic, Gemini, OpenRouter) through the proxy,
|
|
4
|
+
* which injects its own API keys.
|
|
5
|
+
*/
|
|
6
|
+
export class AiModule {
|
|
7
|
+
http;
|
|
8
|
+
constructor(http) {
|
|
9
|
+
this.http = http;
|
|
10
|
+
}
|
|
11
|
+
/** Raw passthrough to OpenAI. Path is appended to `/ai/openai`. */
|
|
12
|
+
async openai(path, body, options) {
|
|
13
|
+
return this.providerRequest("openai", path, body, options);
|
|
14
|
+
}
|
|
15
|
+
/** Raw passthrough to Anthropic. Path is appended to `/ai/anthropic`. */
|
|
16
|
+
async anthropic(path, body, options) {
|
|
17
|
+
return this.providerRequest("anthropic", path, body, options);
|
|
18
|
+
}
|
|
19
|
+
/** Raw passthrough to Gemini. Path is appended to `/ai/gemini`. */
|
|
20
|
+
async gemini(path, body, options) {
|
|
21
|
+
return this.providerRequest("gemini", path, body, options);
|
|
22
|
+
}
|
|
23
|
+
/** Raw passthrough to OpenRouter. Path is appended to `/ai/openrouter`. */
|
|
24
|
+
async openrouter(path, body, options) {
|
|
25
|
+
return this.providerRequest("openrouter", path, body, options);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Convenience chat completion that normalizes the response across providers.
|
|
29
|
+
* The provider is auto-selected from `params.provider`.
|
|
30
|
+
*/
|
|
31
|
+
async chat(params) {
|
|
32
|
+
const { provider, ...rest } = params;
|
|
33
|
+
const { path, body } = this.buildChatRequest(provider, rest);
|
|
34
|
+
const raw = await this.http.request("POST", `/ai/${provider}${path}`, { body });
|
|
35
|
+
return this.normalizeChatResponse(provider, raw);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Streaming chat completion. Sets `stream: true` and returns
|
|
39
|
+
* a `ReadableStream<Uint8Array>` suitable for `for await...of`.
|
|
40
|
+
*/
|
|
41
|
+
async chatStream(params) {
|
|
42
|
+
const { provider, ...rest } = params;
|
|
43
|
+
const { path, body } = this.buildChatRequest(provider, rest);
|
|
44
|
+
body.stream = true;
|
|
45
|
+
return this.http.stream("POST", `/ai/${provider}${path}`, { body });
|
|
46
|
+
}
|
|
47
|
+
// ── Internal ──
|
|
48
|
+
async providerRequest(provider, path, body, options) {
|
|
49
|
+
const payload = options?.stream ? { ...body, stream: true } : body;
|
|
50
|
+
if (options?.stream) {
|
|
51
|
+
return this.http.stream("POST", `/ai/${provider}${path}`, { body: payload });
|
|
52
|
+
}
|
|
53
|
+
return this.http.request("POST", `/ai/${provider}${path}`, { body: payload });
|
|
54
|
+
}
|
|
55
|
+
buildChatRequest(provider, params) {
|
|
56
|
+
const { model, messages, temperature, maxTokens, ...extra } = params;
|
|
57
|
+
switch (provider) {
|
|
58
|
+
case "anthropic":
|
|
59
|
+
return {
|
|
60
|
+
path: "/v1/messages",
|
|
61
|
+
body: {
|
|
62
|
+
model,
|
|
63
|
+
messages,
|
|
64
|
+
max_tokens: maxTokens ?? 1024,
|
|
65
|
+
...(temperature !== undefined && { temperature }),
|
|
66
|
+
...extra,
|
|
67
|
+
},
|
|
68
|
+
};
|
|
69
|
+
case "gemini":
|
|
70
|
+
return {
|
|
71
|
+
path: "/v1/chat/completions",
|
|
72
|
+
body: {
|
|
73
|
+
model,
|
|
74
|
+
messages,
|
|
75
|
+
...(maxTokens !== undefined && { max_tokens: maxTokens }),
|
|
76
|
+
...(temperature !== undefined && { temperature }),
|
|
77
|
+
...extra,
|
|
78
|
+
},
|
|
79
|
+
};
|
|
80
|
+
case "openai":
|
|
81
|
+
case "openrouter":
|
|
82
|
+
default:
|
|
83
|
+
return {
|
|
84
|
+
path: "/v1/chat/completions",
|
|
85
|
+
body: {
|
|
86
|
+
model,
|
|
87
|
+
messages,
|
|
88
|
+
...(maxTokens !== undefined && { max_tokens: maxTokens }),
|
|
89
|
+
...(temperature !== undefined && { temperature }),
|
|
90
|
+
...extra,
|
|
91
|
+
},
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
normalizeChatResponse(provider, raw) {
|
|
96
|
+
switch (provider) {
|
|
97
|
+
case "anthropic": {
|
|
98
|
+
const content = Array.isArray(raw.content)
|
|
99
|
+
? raw.content.map((b) => b.text ?? "").join("")
|
|
100
|
+
: String(raw.content ?? "");
|
|
101
|
+
const usage = raw.usage;
|
|
102
|
+
return {
|
|
103
|
+
id: raw.id,
|
|
104
|
+
content,
|
|
105
|
+
model: raw.model ?? "",
|
|
106
|
+
usage: usage
|
|
107
|
+
? {
|
|
108
|
+
promptTokens: usage.input_tokens ?? 0,
|
|
109
|
+
completionTokens: usage.output_tokens ?? 0,
|
|
110
|
+
totalTokens: (usage.input_tokens ?? 0) + (usage.output_tokens ?? 0),
|
|
111
|
+
}
|
|
112
|
+
: undefined,
|
|
113
|
+
raw,
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
case "openai":
|
|
117
|
+
case "gemini":
|
|
118
|
+
case "openrouter":
|
|
119
|
+
default: {
|
|
120
|
+
const choices = raw.choices;
|
|
121
|
+
const content = choices?.[0]?.message?.content ?? "";
|
|
122
|
+
const usage = raw.usage;
|
|
123
|
+
return {
|
|
124
|
+
id: raw.id,
|
|
125
|
+
content,
|
|
126
|
+
model: raw.model ?? "",
|
|
127
|
+
usage: usage
|
|
128
|
+
? {
|
|
129
|
+
promptTokens: usage.prompt_tokens ?? 0,
|
|
130
|
+
completionTokens: usage.completion_tokens ?? 0,
|
|
131
|
+
totalTokens: usage.total_tokens ?? 0,
|
|
132
|
+
}
|
|
133
|
+
: undefined,
|
|
134
|
+
raw,
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=ai.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai.js","sourceRoot":"","sources":["../../src/modules/ai.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { HttpClient } from "../http.js";
|
|
2
|
+
import type { CreateUserParams, UpdateUserParams, UserRecord, UserListResult, DecodedToken } from "../types.js";
|
|
3
|
+
/**
|
|
4
|
+
* Firebase Auth operations — user management, token verification,
|
|
5
|
+
* email action links, and session cookies.
|
|
6
|
+
*/
|
|
7
|
+
export declare class AuthModule {
|
|
8
|
+
private readonly http;
|
|
9
|
+
constructor(http: HttpClient);
|
|
10
|
+
/** Create a new Firebase user. */
|
|
11
|
+
createUser(params: CreateUserParams): Promise<UserRecord>;
|
|
12
|
+
/** Get a user by UID. */
|
|
13
|
+
getUser(uid: string): Promise<UserRecord>;
|
|
14
|
+
/** Look up a user by email address. */
|
|
15
|
+
getUserByEmail(email: string): Promise<UserRecord>;
|
|
16
|
+
/** List users with optional pagination. */
|
|
17
|
+
listUsers(options?: {
|
|
18
|
+
limit?: number;
|
|
19
|
+
pageToken?: string;
|
|
20
|
+
}): Promise<UserListResult>;
|
|
21
|
+
/** Update user properties. */
|
|
22
|
+
updateUser(uid: string, params: UpdateUserParams): Promise<UserRecord>;
|
|
23
|
+
/** Delete a user by UID. */
|
|
24
|
+
deleteUser(uid: string): Promise<void>;
|
|
25
|
+
/** Set custom claims on a user. */
|
|
26
|
+
setClaims(uid: string, claims: Record<string, unknown>): Promise<void>;
|
|
27
|
+
/** Verify a Firebase ID token. */
|
|
28
|
+
verifyToken(idToken: string): Promise<DecodedToken>;
|
|
29
|
+
/** Generate a password-reset email link. */
|
|
30
|
+
generatePasswordResetLink(email: string, redirectUrl?: string): Promise<{
|
|
31
|
+
link: string;
|
|
32
|
+
}>;
|
|
33
|
+
/** Generate an email-verification link. */
|
|
34
|
+
generateEmailVerificationLink(email: string, redirectUrl?: string): Promise<{
|
|
35
|
+
link: string;
|
|
36
|
+
}>;
|
|
37
|
+
/** Generate a sign-in-with-email link. */
|
|
38
|
+
generateSignInLink(email: string, redirectUrl: string): Promise<{
|
|
39
|
+
link: string;
|
|
40
|
+
}>;
|
|
41
|
+
/** Create a session cookie from an ID token. */
|
|
42
|
+
createSessionCookie(idToken: string, expiresInMs?: number): Promise<{
|
|
43
|
+
cookie: string;
|
|
44
|
+
expiresIn: number;
|
|
45
|
+
}>;
|
|
46
|
+
/** Verify a session cookie, optionally checking for revocation. */
|
|
47
|
+
verifySessionCookie(cookie: string, checkRevoked?: boolean): Promise<DecodedToken>;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/modules/auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,KAAK,EACV,gBAAgB,EAChB,gBAAgB,EAChB,UAAU,EACV,cAAc,EACd,YAAY,EACb,MAAM,aAAa,CAAC;AAErB;;;GAGG;AACH,qBAAa,UAAU;IACT,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,UAAU;IAE7C,kCAAkC;IAC5B,UAAU,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,UAAU,CAAC;IAI/D,yBAAyB;IACnB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAI/C,uCAAuC;IACjC,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAMxD,2CAA2C;IACrC,SAAS,CAAC,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,cAAc,CAAC;IAO1F,8BAA8B;IACxB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,UAAU,CAAC;IAI5E,4BAA4B;IACtB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5C,mCAAmC;IAC7B,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5E,kCAAkC;IAC5B,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAMzD,4CAA4C;IACtC,yBAAyB,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAM/F,2CAA2C;IACrC,6BAA6B,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAMnG,0CAA0C;IACpC,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAMvF,gDAAgD;IAC1C,mBAAmB,CACvB,OAAO,EAAE,MAAM,EACf,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAQjD,mEAAmE;IAC7D,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC;CAKzF"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Firebase Auth operations — user management, token verification,
|
|
3
|
+
* email action links, and session cookies.
|
|
4
|
+
*/
|
|
5
|
+
export class AuthModule {
|
|
6
|
+
http;
|
|
7
|
+
constructor(http) {
|
|
8
|
+
this.http = http;
|
|
9
|
+
}
|
|
10
|
+
/** Create a new Firebase user. */
|
|
11
|
+
async createUser(params) {
|
|
12
|
+
return this.http.request("POST", "/auth/users", { body: params });
|
|
13
|
+
}
|
|
14
|
+
/** Get a user by UID. */
|
|
15
|
+
async getUser(uid) {
|
|
16
|
+
return this.http.request("GET", `/auth/users/${uid}`);
|
|
17
|
+
}
|
|
18
|
+
/** Look up a user by email address. */
|
|
19
|
+
async getUserByEmail(email) {
|
|
20
|
+
return this.http.request("GET", "/auth/users", {
|
|
21
|
+
query: { email },
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
/** List users with optional pagination. */
|
|
25
|
+
async listUsers(options) {
|
|
26
|
+
const query = {};
|
|
27
|
+
if (options?.limit !== undefined)
|
|
28
|
+
query.limit = String(options.limit);
|
|
29
|
+
if (options?.pageToken)
|
|
30
|
+
query.pageToken = options.pageToken;
|
|
31
|
+
return this.http.request("GET", "/auth/users/list", { query });
|
|
32
|
+
}
|
|
33
|
+
/** Update user properties. */
|
|
34
|
+
async updateUser(uid, params) {
|
|
35
|
+
return this.http.request("PUT", `/auth/users/${uid}`, { body: params });
|
|
36
|
+
}
|
|
37
|
+
/** Delete a user by UID. */
|
|
38
|
+
async deleteUser(uid) {
|
|
39
|
+
await this.http.request("DELETE", `/auth/users/${uid}`);
|
|
40
|
+
}
|
|
41
|
+
/** Set custom claims on a user. */
|
|
42
|
+
async setClaims(uid, claims) {
|
|
43
|
+
await this.http.request("POST", `/auth/users/${uid}/claims`, { body: claims });
|
|
44
|
+
}
|
|
45
|
+
/** Verify a Firebase ID token. */
|
|
46
|
+
async verifyToken(idToken) {
|
|
47
|
+
return this.http.request("POST", "/auth/verify-token", {
|
|
48
|
+
body: { idToken },
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
/** Generate a password-reset email link. */
|
|
52
|
+
async generatePasswordResetLink(email, redirectUrl) {
|
|
53
|
+
return this.http.request("POST", "/auth/email-link/password-reset", {
|
|
54
|
+
body: { email, ...(redirectUrl && { redirectUrl }) },
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
/** Generate an email-verification link. */
|
|
58
|
+
async generateEmailVerificationLink(email, redirectUrl) {
|
|
59
|
+
return this.http.request("POST", "/auth/email-link/verify-email", {
|
|
60
|
+
body: { email, ...(redirectUrl && { redirectUrl }) },
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
/** Generate a sign-in-with-email link. */
|
|
64
|
+
async generateSignInLink(email, redirectUrl) {
|
|
65
|
+
return this.http.request("POST", "/auth/email-link/sign-in", {
|
|
66
|
+
body: { email, redirectUrl },
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
/** Create a session cookie from an ID token. */
|
|
70
|
+
async createSessionCookie(idToken, expiresInMs) {
|
|
71
|
+
return this.http.request("POST", "/auth/session-cookie/create", { body: { idToken, ...(expiresInMs !== undefined && { expiresIn: expiresInMs }) } });
|
|
72
|
+
}
|
|
73
|
+
/** Verify a session cookie, optionally checking for revocation. */
|
|
74
|
+
async verifySessionCookie(cookie, checkRevoked) {
|
|
75
|
+
return this.http.request("POST", "/auth/session-cookie/verify", {
|
|
76
|
+
body: { cookie, ...(checkRevoked !== undefined && { checkRevoked }) },
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/modules/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type { HttpClient } from "../http.js";
|
|
2
|
+
import type { ListOptions, QueryParams, ListResult, BatchOperation, AggregateParams } from "../types.js";
|
|
3
|
+
/**
|
|
4
|
+
* Firestore CRUD, queries, batch writes, aggregations, and subcollection support.
|
|
5
|
+
*
|
|
6
|
+
* Path conventions:
|
|
7
|
+
* - Collection: `"posts"` or `"users/uid/posts"`
|
|
8
|
+
* - Document: `"posts/docId"` or `"users/uid/posts/docId"`
|
|
9
|
+
*/
|
|
10
|
+
export declare class FirestoreModule {
|
|
11
|
+
private readonly http;
|
|
12
|
+
private readonly prefix;
|
|
13
|
+
constructor(http: HttpClient, prefix?: string);
|
|
14
|
+
/**
|
|
15
|
+
* Returns a new FirestoreModule scoped to a parent document path.
|
|
16
|
+
* Useful for chaining subcollection operations.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```ts
|
|
20
|
+
* const userPosts = proxy.firestore.sub("users/uid123");
|
|
21
|
+
* await userPosts.list("posts");
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
sub(parentPath: string): FirestoreModule;
|
|
25
|
+
/** Create a document. If `docId` is provided, uses that ID; otherwise auto-generates. */
|
|
26
|
+
create<T extends Record<string, unknown>>(collection: string, data: T, docId?: string): Promise<T & {
|
|
27
|
+
id: string;
|
|
28
|
+
}>;
|
|
29
|
+
/** Get a single document by path (e.g. `"posts/abc123"`). */
|
|
30
|
+
get<T = Record<string, unknown>>(path: string): Promise<T & {
|
|
31
|
+
id: string;
|
|
32
|
+
}>;
|
|
33
|
+
/** Full update (PUT) of a document. */
|
|
34
|
+
update<T extends Record<string, unknown>>(path: string, data: T): Promise<T & {
|
|
35
|
+
id: string;
|
|
36
|
+
}>;
|
|
37
|
+
/** Partial update (PATCH) of a document. Supports FieldOp sentinels. */
|
|
38
|
+
patch<T extends Record<string, unknown>>(path: string, data: T): Promise<T & {
|
|
39
|
+
id: string;
|
|
40
|
+
}>;
|
|
41
|
+
/** Delete a document by path. */
|
|
42
|
+
delete(path: string): Promise<void>;
|
|
43
|
+
/** List documents in a collection with optional ordering and limit. */
|
|
44
|
+
list<T = Record<string, unknown>>(collection: string, options?: ListOptions): Promise<ListResult<T>>;
|
|
45
|
+
/** Run a structured query with filters, ordering, pagination. */
|
|
46
|
+
query<T = Record<string, unknown>>(collection: string, params: QueryParams): Promise<ListResult<T>>;
|
|
47
|
+
/** Execute a batch of create/update/delete operations atomically. */
|
|
48
|
+
batch(operations: BatchOperation[]): Promise<{
|
|
49
|
+
count: number;
|
|
50
|
+
}>;
|
|
51
|
+
/** Run aggregate queries (count, sum, average) without downloading documents. */
|
|
52
|
+
aggregate(collection: string, params: AggregateParams): Promise<Record<string, number | null>>;
|
|
53
|
+
private basePath;
|
|
54
|
+
private path;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=firestore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"firestore.d.ts","sourceRoot":"","sources":["../../src/modules/firestore.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,KAAK,EACV,WAAW,EACX,WAAW,EACX,UAAU,EACV,cAAc,EACd,eAAe,EAChB,MAAM,aAAa,CAAC;AAErB;;;;;;GAMG;AACH,qBAAa,eAAe;IAIxB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAHvB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBAGb,IAAI,EAAE,UAAU,EACjC,MAAM,SAAK;IAKb;;;;;;;;;OASG;IACH,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,eAAe;IAKxC,yFAAyF;IACnF,MAAM,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5C,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,CAAC,EACP,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,CAAC,GAAG;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IAK9B,6DAA6D;IACvD,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IAIjF,uCAAuC;IACjC,MAAM,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IAInG,wEAAwE;IAClE,KAAK,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IAIlG,iCAAiC;IAC3B,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzC,uEAAuE;IACjE,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpC,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAQzB,iEAAiE;IAC3D,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAMzB,qEAAqE;IAC/D,KAAK,CAAC,UAAU,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAMrE,iFAAiF;IAC3E,SAAS,CACb,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;IAUzC,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,IAAI;CAOb"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Firestore CRUD, queries, batch writes, aggregations, and subcollection support.
|
|
3
|
+
*
|
|
4
|
+
* Path conventions:
|
|
5
|
+
* - Collection: `"posts"` or `"users/uid/posts"`
|
|
6
|
+
* - Document: `"posts/docId"` or `"users/uid/posts/docId"`
|
|
7
|
+
*/
|
|
8
|
+
export class FirestoreModule {
|
|
9
|
+
http;
|
|
10
|
+
prefix;
|
|
11
|
+
constructor(http, prefix = "") {
|
|
12
|
+
this.http = http;
|
|
13
|
+
this.prefix = prefix ? prefix.replace(/\/+$/, "") : "";
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Returns a new FirestoreModule scoped to a parent document path.
|
|
17
|
+
* Useful for chaining subcollection operations.
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```ts
|
|
21
|
+
* const userPosts = proxy.firestore.sub("users/uid123");
|
|
22
|
+
* await userPosts.list("posts");
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
sub(parentPath) {
|
|
26
|
+
const combined = this.prefix ? `${this.prefix}/${parentPath}` : parentPath;
|
|
27
|
+
return new FirestoreModule(this.http, combined);
|
|
28
|
+
}
|
|
29
|
+
/** Create a document. If `docId` is provided, uses that ID; otherwise auto-generates. */
|
|
30
|
+
async create(collection, data, docId) {
|
|
31
|
+
const body = docId ? { data, docId } : { data };
|
|
32
|
+
return this.http.request("POST", this.path(collection), { body });
|
|
33
|
+
}
|
|
34
|
+
/** Get a single document by path (e.g. `"posts/abc123"`). */
|
|
35
|
+
async get(path) {
|
|
36
|
+
return this.http.request("GET", this.path(path));
|
|
37
|
+
}
|
|
38
|
+
/** Full update (PUT) of a document. */
|
|
39
|
+
async update(path, data) {
|
|
40
|
+
return this.http.request("PUT", this.path(path), { body: { data } });
|
|
41
|
+
}
|
|
42
|
+
/** Partial update (PATCH) of a document. Supports FieldOp sentinels. */
|
|
43
|
+
async patch(path, data) {
|
|
44
|
+
return this.http.request("PATCH", this.path(path), { body: { data } });
|
|
45
|
+
}
|
|
46
|
+
/** Delete a document by path. */
|
|
47
|
+
async delete(path) {
|
|
48
|
+
await this.http.request("DELETE", this.path(path));
|
|
49
|
+
}
|
|
50
|
+
/** List documents in a collection with optional ordering and limit. */
|
|
51
|
+
async list(collection, options) {
|
|
52
|
+
const query = {};
|
|
53
|
+
if (options?.limit !== undefined)
|
|
54
|
+
query.limit = String(options.limit);
|
|
55
|
+
if (options?.orderBy)
|
|
56
|
+
query.orderBy = options.orderBy;
|
|
57
|
+
if (options?.direction)
|
|
58
|
+
query.direction = options.direction;
|
|
59
|
+
return this.http.request("GET", this.path(collection), { query });
|
|
60
|
+
}
|
|
61
|
+
/** Run a structured query with filters, ordering, pagination. */
|
|
62
|
+
async query(collection, params) {
|
|
63
|
+
return this.http.request("POST", `${this.path(collection)}/query`, {
|
|
64
|
+
body: params,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
/** Execute a batch of create/update/delete operations atomically. */
|
|
68
|
+
async batch(operations) {
|
|
69
|
+
return this.http.request("POST", `${this.basePath()}/batch`, {
|
|
70
|
+
body: { operations },
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
/** Run aggregate queries (count, sum, average) without downloading documents. */
|
|
74
|
+
async aggregate(collection, params) {
|
|
75
|
+
return this.http.request("POST", `${this.path(collection)}/aggregate`, { body: params });
|
|
76
|
+
}
|
|
77
|
+
// ── Internal ──
|
|
78
|
+
basePath() {
|
|
79
|
+
return this.prefix ? `/firestore/${this.prefix}` : "/firestore";
|
|
80
|
+
}
|
|
81
|
+
path(relativePath) {
|
|
82
|
+
const base = "/firestore";
|
|
83
|
+
if (this.prefix) {
|
|
84
|
+
return `${base}/${this.prefix}/${relativePath}`;
|
|
85
|
+
}
|
|
86
|
+
return `${base}/${relativePath}`;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=firestore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"firestore.js","sourceRoot":"","sources":["../../src/modules/firestore.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { HttpClient } from "../http.js";
|
|
2
|
+
import type { CollectionSetup, SetupBucketParams, ProjectSetup, DatabaseStatus, CollectionsStatus, BucketSetupResult, AuthStatus, ProjectStatus, ProvisioningStatus } from "../types.js";
|
|
3
|
+
/**
|
|
4
|
+
* Provisioning and project bootstrap — verify/create databases,
|
|
5
|
+
* collections, buckets, and auth configuration.
|
|
6
|
+
*/
|
|
7
|
+
export declare class SetupModule {
|
|
8
|
+
private readonly http;
|
|
9
|
+
constructor(http: HttpClient);
|
|
10
|
+
/** Verify that a Firestore database exists and is reachable. */
|
|
11
|
+
verifyDatabase(options?: {
|
|
12
|
+
databaseId?: string;
|
|
13
|
+
locationId?: string;
|
|
14
|
+
}): Promise<DatabaseStatus>;
|
|
15
|
+
/** Create or verify collections (with optional vector indexes). */
|
|
16
|
+
setupCollections(collections: CollectionSetup[]): Promise<CollectionsStatus>;
|
|
17
|
+
/** Create a GCS bucket with optional CORS and public access. */
|
|
18
|
+
createBucket(params: SetupBucketParams): Promise<BucketSetupResult>;
|
|
19
|
+
/** Verify Firebase Auth is enabled and configured. */
|
|
20
|
+
verifyAuth(): Promise<AuthStatus>;
|
|
21
|
+
/** Bootstrap an entire project backend in one call. */
|
|
22
|
+
bootstrapProject(params: ProjectSetup): Promise<ProjectStatus>;
|
|
23
|
+
/** Get the current provisioning status of all services. */
|
|
24
|
+
getStatus(): Promise<ProvisioningStatus>;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=setup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/modules/setup.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,KAAK,EACV,eAAe,EACf,iBAAiB,EACjB,YAAY,EACZ,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,UAAU,EACV,aAAa,EACb,kBAAkB,EACnB,MAAM,aAAa,CAAC;AAErB;;;GAGG;AACH,qBAAa,WAAW;IACV,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,UAAU;IAE7C,gEAAgE;IAC1D,cAAc,CAAC,OAAO,CAAC,EAAE;QAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,GAAG,OAAO,CAAC,cAAc,CAAC;IAM3B,mEAAmE;IAC7D,gBAAgB,CAAC,WAAW,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAMlF,gEAAgE;IAC1D,YAAY,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAMzE,sDAAsD;IAChD,UAAU,IAAI,OAAO,CAAC,UAAU,CAAC;IAIvC,uDAAuD;IACjD,gBAAgB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC;IAMpE,2DAA2D;IACrD,SAAS,IAAI,OAAO,CAAC,kBAAkB,CAAC;CAG/C"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provisioning and project bootstrap — verify/create databases,
|
|
3
|
+
* collections, buckets, and auth configuration.
|
|
4
|
+
*/
|
|
5
|
+
export class SetupModule {
|
|
6
|
+
http;
|
|
7
|
+
constructor(http) {
|
|
8
|
+
this.http = http;
|
|
9
|
+
}
|
|
10
|
+
/** Verify that a Firestore database exists and is reachable. */
|
|
11
|
+
async verifyDatabase(options) {
|
|
12
|
+
return this.http.request("POST", "/setup/firestore/database", {
|
|
13
|
+
body: options ?? {},
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
/** Create or verify collections (with optional vector indexes). */
|
|
17
|
+
async setupCollections(collections) {
|
|
18
|
+
return this.http.request("POST", "/setup/firestore/collections", {
|
|
19
|
+
body: { collections },
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
/** Create a GCS bucket with optional CORS and public access. */
|
|
23
|
+
async createBucket(params) {
|
|
24
|
+
return this.http.request("POST", "/setup/storage/bucket", {
|
|
25
|
+
body: params,
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
/** Verify Firebase Auth is enabled and configured. */
|
|
29
|
+
async verifyAuth() {
|
|
30
|
+
return this.http.request("POST", "/setup/auth/config");
|
|
31
|
+
}
|
|
32
|
+
/** Bootstrap an entire project backend in one call. */
|
|
33
|
+
async bootstrapProject(params) {
|
|
34
|
+
return this.http.request("POST", "/setup/project", {
|
|
35
|
+
body: params,
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
/** Get the current provisioning status of all services. */
|
|
39
|
+
async getStatus() {
|
|
40
|
+
return this.http.request("GET", "/setup/status");
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/modules/setup.ts"],"names":[],"mappings":"AAaA;;;GAGG;AACH,MAAM,OAAO,WAAW;IACO;IAA7B,YAA6B,IAAgB;QAAhB,SAAI,GAAJ,IAAI,CAAY;IAAG,CAAC;IAEjD,gEAAgE;IAChE,KAAK,CAAC,cAAc,CAAC,OAGpB;QACC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAiB,MAAM,EAAE,2BAA2B,EAAE;YAC5E,IAAI,EAAE,OAAO,IAAI,EAAE;SACpB,CAAC,CAAC;IACL,CAAC;IAED,mEAAmE;IACnE,KAAK,CAAC,gBAAgB,CAAC,WAA8B;QACnD,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAoB,MAAM,EAAE,8BAA8B,EAAE;YAClF,IAAI,EAAE,EAAE,WAAW,EAAE;SACtB,CAAC,CAAC;IACL,CAAC;IAED,gEAAgE;IAChE,KAAK,CAAC,YAAY,CAAC,MAAyB;QAC1C,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAoB,MAAM,EAAE,uBAAuB,EAAE;YAC3E,IAAI,EAAE,MAAM;SACb,CAAC,CAAC;IACL,CAAC;IAED,sDAAsD;IACtD,KAAK,CAAC,UAAU;QACd,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAa,MAAM,EAAE,oBAAoB,CAAC,CAAC;IACrE,CAAC;IAED,uDAAuD;IACvD,KAAK,CAAC,gBAAgB,CAAC,MAAoB;QACzC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAgB,MAAM,EAAE,gBAAgB,EAAE;YAChE,IAAI,EAAE,MAAM;SACb,CAAC,CAAC;IACL,CAAC;IAED,2DAA2D;IAC3D,KAAK,CAAC,SAAS;QACb,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAqB,KAAK,EAAE,eAAe,CAAC,CAAC;IACvE,CAAC;CACF"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { HttpClient } from "../http.js";
|
|
2
|
+
import type { UploadOptions, UploadResult, UploadUrlParams, SignedUploadUrl, SignedDownloadUrl, ListFilesOptions, FileListResult, CreateBucketParams, BucketInfo } from "../types.js";
|
|
3
|
+
/**
|
|
4
|
+
* Google Cloud Storage operations — upload, download, signed URLs, and bucket management.
|
|
5
|
+
*/
|
|
6
|
+
export declare class StorageModule {
|
|
7
|
+
private readonly http;
|
|
8
|
+
constructor(http: HttpClient);
|
|
9
|
+
/** Upload a file directly through the proxy (best for files < 10 MB). */
|
|
10
|
+
upload(bucket: string, file: File | Blob, options?: UploadOptions): Promise<UploadResult>;
|
|
11
|
+
/** Get a signed upload URL for direct-to-GCS uploads (large files). */
|
|
12
|
+
getUploadUrl(bucket: string, params: UploadUrlParams): Promise<SignedUploadUrl>;
|
|
13
|
+
/** Get a signed download URL for a file. */
|
|
14
|
+
getDownloadUrl(bucket: string, filePath: string, expiresInMinutes?: number): Promise<SignedDownloadUrl>;
|
|
15
|
+
/** Stream-download a file through the proxy. Returns the raw Response. */
|
|
16
|
+
download(bucket: string, filePath: string): Promise<Response>;
|
|
17
|
+
/** Delete a file from a bucket. */
|
|
18
|
+
deleteFile(bucket: string, filePath: string): Promise<void>;
|
|
19
|
+
/** List files in a bucket with optional prefix filtering and pagination. */
|
|
20
|
+
listFiles(bucket: string, options?: ListFilesOptions): Promise<FileListResult>;
|
|
21
|
+
/** Create a new GCS bucket. */
|
|
22
|
+
createBucket(params: CreateBucketParams): Promise<BucketInfo>;
|
|
23
|
+
/** List all accessible buckets. */
|
|
24
|
+
listBuckets(): Promise<{
|
|
25
|
+
buckets: BucketInfo[];
|
|
26
|
+
}>;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=storage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/modules/storage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EACZ,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,kBAAkB,EAClB,UAAU,EACX,MAAM,aAAa,CAAC;AAErB;;GAEG;AACH,qBAAa,aAAa;IACZ,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,UAAU;IAE7C,yEAAyE;IACnE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IAQ/F,uEAAuE;IACjE,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC;IAMrF,4CAA4C;IACtC,cAAc,CAClB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,gBAAgB,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC,iBAAiB,CAAC;IAU7B,0EAA0E;IACpE,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAInE,mCAAmC;IAC7B,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjE,4EAA4E;IACtE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,cAAc,CAAC;IASpF,+BAA+B;IACzB,YAAY,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,CAAC;IAInE,mCAAmC;IAC7B,WAAW,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,UAAU,EAAE,CAAA;KAAE,CAAC;CAGxD"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Google Cloud Storage operations — upload, download, signed URLs, and bucket management.
|
|
3
|
+
*/
|
|
4
|
+
export class StorageModule {
|
|
5
|
+
http;
|
|
6
|
+
constructor(http) {
|
|
7
|
+
this.http = http;
|
|
8
|
+
}
|
|
9
|
+
/** Upload a file directly through the proxy (best for files < 10 MB). */
|
|
10
|
+
async upload(bucket, file, options) {
|
|
11
|
+
const formData = new FormData();
|
|
12
|
+
formData.append("file", file);
|
|
13
|
+
if (options?.path)
|
|
14
|
+
formData.append("path", options.path);
|
|
15
|
+
if (options?.public)
|
|
16
|
+
formData.append("public", "true");
|
|
17
|
+
return this.http.upload(`/storage/${bucket}/upload`, formData);
|
|
18
|
+
}
|
|
19
|
+
/** Get a signed upload URL for direct-to-GCS uploads (large files). */
|
|
20
|
+
async getUploadUrl(bucket, params) {
|
|
21
|
+
return this.http.request("POST", `/storage/${bucket}/upload-url`, {
|
|
22
|
+
body: params,
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
/** Get a signed download URL for a file. */
|
|
26
|
+
async getDownloadUrl(bucket, filePath, expiresInMinutes) {
|
|
27
|
+
const query = {};
|
|
28
|
+
if (expiresInMinutes !== undefined)
|
|
29
|
+
query.expiresInMinutes = String(expiresInMinutes);
|
|
30
|
+
return this.http.request("GET", `/storage/${bucket}/download-url/${filePath}`, { query });
|
|
31
|
+
}
|
|
32
|
+
/** Stream-download a file through the proxy. Returns the raw Response. */
|
|
33
|
+
async download(bucket, filePath) {
|
|
34
|
+
return this.http.raw("GET", `/storage/${bucket}/file/${filePath}`);
|
|
35
|
+
}
|
|
36
|
+
/** Delete a file from a bucket. */
|
|
37
|
+
async deleteFile(bucket, filePath) {
|
|
38
|
+
await this.http.request("DELETE", `/storage/${bucket}/file/${filePath}`);
|
|
39
|
+
}
|
|
40
|
+
/** List files in a bucket with optional prefix filtering and pagination. */
|
|
41
|
+
async listFiles(bucket, options) {
|
|
42
|
+
const query = {};
|
|
43
|
+
if (options?.prefix)
|
|
44
|
+
query.prefix = options.prefix;
|
|
45
|
+
if (options?.delimiter)
|
|
46
|
+
query.delimiter = options.delimiter;
|
|
47
|
+
if (options?.maxResults !== undefined)
|
|
48
|
+
query.maxResults = String(options.maxResults);
|
|
49
|
+
if (options?.pageToken)
|
|
50
|
+
query.pageToken = options.pageToken;
|
|
51
|
+
return this.http.request("GET", `/storage/${bucket}/list`, { query });
|
|
52
|
+
}
|
|
53
|
+
/** Create a new GCS bucket. */
|
|
54
|
+
async createBucket(params) {
|
|
55
|
+
return this.http.request("POST", "/storage/buckets", { body: params });
|
|
56
|
+
}
|
|
57
|
+
/** List all accessible buckets. */
|
|
58
|
+
async listBuckets() {
|
|
59
|
+
return this.http.request("GET", "/storage/buckets");
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=storage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/modules/storage.ts"],"names":[],"mappings":"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"}
|