@polardbx/pxbaas-client 0.0.0-stage → 0.1.0-beta.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/dist/drivers/apps.driver.d.ts +95 -0
- package/dist/drivers/apps.driver.d.ts.map +1 -0
- package/dist/drivers/apps.driver.js +82 -0
- package/dist/drivers/apps.driver.js.map +1 -0
- package/dist/drivers/auth-admin.driver.d.ts +78 -0
- package/dist/drivers/auth-admin.driver.d.ts.map +1 -0
- package/dist/drivers/auth-admin.driver.js +145 -0
- package/dist/drivers/auth-admin.driver.js.map +1 -0
- package/dist/drivers/functions.driver.d.ts +75 -0
- package/dist/drivers/functions.driver.d.ts.map +1 -0
- package/dist/drivers/functions.driver.js +173 -0
- package/dist/drivers/functions.driver.js.map +1 -0
- package/dist/drivers/meta.driver.d.ts +77 -0
- package/dist/drivers/meta.driver.d.ts.map +1 -0
- package/dist/drivers/meta.driver.js +191 -0
- package/dist/drivers/meta.driver.js.map +1 -0
- package/dist/drivers/share-links.driver.d.ts +42 -0
- package/dist/drivers/share-links.driver.d.ts.map +1 -0
- package/dist/drivers/share-links.driver.js +53 -0
- package/dist/drivers/share-links.driver.js.map +1 -0
- package/dist/drivers/storage.driver.d.ts +72 -0
- package/dist/drivers/storage.driver.d.ts.map +1 -0
- package/dist/drivers/storage.driver.js +171 -0
- package/dist/drivers/storage.driver.js.map +1 -0
- package/dist/drivers/zero.driver.d.ts +78 -0
- package/dist/drivers/zero.driver.d.ts.map +1 -0
- package/dist/drivers/zero.driver.js +117 -0
- package/dist/drivers/zero.driver.js.map +1 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +32 -0
- package/dist/index.js.map +1 -0
- package/dist/types.d.ts +26 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/package.json +57 -3
- package/README.md +0 -3
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Storage Driver - Supabase Storage API client
|
|
3
|
+
*
|
|
4
|
+
* Endpoints:
|
|
5
|
+
* - GET /storage/v1/bucket - List buckets
|
|
6
|
+
* - GET /storage/v1/object/list/{bucket} - List objects
|
|
7
|
+
* - POST /storage/v1/object/{bucket}/{path} - Upload object
|
|
8
|
+
* - GET /storage/v1/object/{bucket}/{path} - Download object
|
|
9
|
+
* - DELETE /storage/v1/object/{bucket}/{path} - Delete object
|
|
10
|
+
* - POST /storage/v1/object/move - Move object
|
|
11
|
+
* - POST /storage/v1/object/copy - Copy object
|
|
12
|
+
*/
|
|
13
|
+
import axios from 'axios';
|
|
14
|
+
import { writeFile, stat } from 'node:fs/promises';
|
|
15
|
+
import { basename } from 'node:path';
|
|
16
|
+
import { createReadStream } from 'node:fs';
|
|
17
|
+
export class StorageDriver {
|
|
18
|
+
client;
|
|
19
|
+
serviceRoleKey;
|
|
20
|
+
tenantId;
|
|
21
|
+
constructor(options) {
|
|
22
|
+
this.serviceRoleKey = options.serviceRoleKey;
|
|
23
|
+
this.tenantId = options.tenantId;
|
|
24
|
+
this.client = axios.create({
|
|
25
|
+
baseURL: `${options.endpoint}/storage/v1`,
|
|
26
|
+
timeout: options.timeout ?? 60000,
|
|
27
|
+
headers: {
|
|
28
|
+
'Authorization': `Bearer ${this.serviceRoleKey}`,
|
|
29
|
+
'apikey': this.serviceRoleKey,
|
|
30
|
+
},
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
getHeaders() {
|
|
34
|
+
const headers = {
|
|
35
|
+
'Authorization': `Bearer ${this.serviceRoleKey}`,
|
|
36
|
+
'apikey': this.serviceRoleKey,
|
|
37
|
+
};
|
|
38
|
+
if (this.tenantId) {
|
|
39
|
+
headers['X-Tenant-Id'] = this.tenantId;
|
|
40
|
+
}
|
|
41
|
+
return headers;
|
|
42
|
+
}
|
|
43
|
+
handleError(error) {
|
|
44
|
+
if (axios.isAxiosError(error)) {
|
|
45
|
+
const axiosError = error;
|
|
46
|
+
const status = axiosError.response?.status;
|
|
47
|
+
const data = axiosError.response?.data;
|
|
48
|
+
let message = axiosError.message;
|
|
49
|
+
if (status === 401) {
|
|
50
|
+
message = 'Authentication failed. Please check your service_role key and run "pxbaas login" again.';
|
|
51
|
+
}
|
|
52
|
+
else if (status === 403) {
|
|
53
|
+
message = 'Permission denied. Storage operations require service_role key.';
|
|
54
|
+
}
|
|
55
|
+
else if (status === 404) {
|
|
56
|
+
message = 'Object or bucket not found. Please check the path and try again.';
|
|
57
|
+
}
|
|
58
|
+
else if (data?.error) {
|
|
59
|
+
message = String(data.error);
|
|
60
|
+
}
|
|
61
|
+
else if (data?.message) {
|
|
62
|
+
message = String(data.message);
|
|
63
|
+
}
|
|
64
|
+
throw new Error(`Storage API error (${status ?? 'unknown'}): ${message}`);
|
|
65
|
+
}
|
|
66
|
+
throw error;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* List all buckets
|
|
70
|
+
*/
|
|
71
|
+
async listBuckets() {
|
|
72
|
+
try {
|
|
73
|
+
const response = await this.client.get('/bucket', { headers: this.getHeaders() });
|
|
74
|
+
return response.data ?? [];
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
this.handleError(error);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* List objects in a bucket
|
|
82
|
+
*/
|
|
83
|
+
async listObjects(bucket, prefix) {
|
|
84
|
+
try {
|
|
85
|
+
const response = await this.client.post(`/object/list/${bucket}`, { prefix, limit: 1000 }, { headers: this.getHeaders() });
|
|
86
|
+
return response.data ?? [];
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
this.handleError(error);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Upload a file to storage
|
|
94
|
+
*/
|
|
95
|
+
async upload(bucket, remotePath, localPath) {
|
|
96
|
+
try {
|
|
97
|
+
const fileStream = createReadStream(localPath);
|
|
98
|
+
const stats = await stat(localPath);
|
|
99
|
+
const filename = basename(localPath);
|
|
100
|
+
await this.client.post(`/object/${bucket}/${remotePath}`, fileStream, {
|
|
101
|
+
headers: {
|
|
102
|
+
...this.getHeaders(),
|
|
103
|
+
'Content-Type': 'application/octet-stream',
|
|
104
|
+
'Content-Length': stats.size,
|
|
105
|
+
},
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
catch (error) {
|
|
109
|
+
this.handleError(error);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Download a file from storage
|
|
114
|
+
*/
|
|
115
|
+
async download(bucket, remotePath, localPath) {
|
|
116
|
+
try {
|
|
117
|
+
const response = await this.client.get(`/object/${bucket}/${remotePath}`, {
|
|
118
|
+
headers: this.getHeaders(),
|
|
119
|
+
responseType: 'arraybuffer',
|
|
120
|
+
});
|
|
121
|
+
await writeFile(localPath, response.data);
|
|
122
|
+
}
|
|
123
|
+
catch (error) {
|
|
124
|
+
this.handleError(error);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Delete an object from storage
|
|
129
|
+
*/
|
|
130
|
+
async delete(bucket, remotePath) {
|
|
131
|
+
try {
|
|
132
|
+
await this.client.delete(`/object/${bucket}/${remotePath}`, { headers: this.getHeaders() });
|
|
133
|
+
}
|
|
134
|
+
catch (error) {
|
|
135
|
+
this.handleError(error);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Move/rename an object
|
|
140
|
+
*/
|
|
141
|
+
async move(sourceBucket, sourcePath, destBucket, destPath) {
|
|
142
|
+
try {
|
|
143
|
+
await this.client.post('/object/move', {
|
|
144
|
+
bucketId: sourceBucket,
|
|
145
|
+
sourceKey: sourcePath,
|
|
146
|
+
destinationBucket: destBucket,
|
|
147
|
+
destinationKey: destPath,
|
|
148
|
+
}, { headers: this.getHeaders() });
|
|
149
|
+
}
|
|
150
|
+
catch (error) {
|
|
151
|
+
this.handleError(error);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Copy an object
|
|
156
|
+
*/
|
|
157
|
+
async copy(sourceBucket, sourcePath, destBucket, destPath) {
|
|
158
|
+
try {
|
|
159
|
+
await this.client.post('/object/copy', {
|
|
160
|
+
bucketId: sourceBucket,
|
|
161
|
+
sourceKey: sourcePath,
|
|
162
|
+
destinationBucket: destBucket,
|
|
163
|
+
destinationKey: destPath,
|
|
164
|
+
}, { headers: this.getHeaders() });
|
|
165
|
+
}
|
|
166
|
+
catch (error) {
|
|
167
|
+
this.handleError(error);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=storage.driver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.driver.js","sourceRoot":"","sources":["../../src/drivers/storage.driver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Zero Driver — PolarDB-X Zero PXBaas provisioning client.
|
|
3
|
+
*
|
|
4
|
+
* Wraps the unauthenticated Zero API that claims a disposable, Supabase-compatible
|
|
5
|
+
* BaaS instance from a pre-warmed pool (15-day TTL, no renewal).
|
|
6
|
+
*
|
|
7
|
+
* Contract source: https://zero.polardbx.com/BAAS-SKILL.md (polardbx-zero-pxbaas v0.1.0)
|
|
8
|
+
*
|
|
9
|
+
* Endpoints:
|
|
10
|
+
* - POST /api/v1/supabase/instances claim (body: { whitelistIp? })
|
|
11
|
+
* - GET /api/v1/supabase/instances list (needs pxz_token cookie)
|
|
12
|
+
* - DELETE /api/v1/supabase/instances/{id} release (needs pxz_token cookie)
|
|
13
|
+
*
|
|
14
|
+
* Ownership: the claim response returns a `token` (also set as the `pxz_token`
|
|
15
|
+
* cookie). list/release must send it back via `Cookie: pxz_token=<token>`.
|
|
16
|
+
*/
|
|
17
|
+
import { AxiosError } from 'axios';
|
|
18
|
+
export interface ZeroInstance {
|
|
19
|
+
id: string;
|
|
20
|
+
status: string;
|
|
21
|
+
region?: string;
|
|
22
|
+
zoneId?: string;
|
|
23
|
+
aliyunInstanceId?: string;
|
|
24
|
+
/** host:8000 WITHOUT scheme, e.g. "pxsp-xxxhttp.polardbxaisupabase.rds.aliyuncs.com:8000" */
|
|
25
|
+
publicEndpoint: string;
|
|
26
|
+
dashboardUrl?: string;
|
|
27
|
+
/** Canonical App origin returned by the platform; clients must not derive it. */
|
|
28
|
+
appEndpoint?: string;
|
|
29
|
+
appDomain?: {
|
|
30
|
+
hostname: string;
|
|
31
|
+
status: string;
|
|
32
|
+
tlsStatus: string;
|
|
33
|
+
};
|
|
34
|
+
apiKey: string;
|
|
35
|
+
serviceRoleKey: string;
|
|
36
|
+
dbPassword?: string;
|
|
37
|
+
dashboardPassword?: string;
|
|
38
|
+
whitelistIp?: string;
|
|
39
|
+
assignedAt?: string;
|
|
40
|
+
expiresAt?: string;
|
|
41
|
+
createdAt?: string;
|
|
42
|
+
}
|
|
43
|
+
export interface ZeroClaimResponse {
|
|
44
|
+
instance: ZeroInstance;
|
|
45
|
+
token: string;
|
|
46
|
+
}
|
|
47
|
+
export interface ZeroDriverOptions {
|
|
48
|
+
/** Zero API base URL. Defaults to https://zero.polardbx.com (override via BAAS_ZERO_ENDPOINT). */
|
|
49
|
+
baseUrl?: string;
|
|
50
|
+
timeout?: number;
|
|
51
|
+
}
|
|
52
|
+
/** Error codes returned by Zero (`{ error: { code, message } }`). */
|
|
53
|
+
export type ZeroErrorCode = 'INVALID_WHITELIST_IP' | 'INSTANCE_NOT_FOUND' | 'RATE_LIMIT_EXCEEDED' | 'SUPABASE_LIMIT_REACHED' | 'SUPABASE_POOL_EXHAUSTED' | 'SUPABASE_DISABLED' | 'INTERNAL_ERROR' | 'NETWORK_ERROR' | 'UNKNOWN';
|
|
54
|
+
export declare class ZeroError extends Error {
|
|
55
|
+
code: ZeroErrorCode;
|
|
56
|
+
status?: number;
|
|
57
|
+
constructor(code: ZeroErrorCode, message: string, status?: number);
|
|
58
|
+
}
|
|
59
|
+
export declare class ZeroDriver {
|
|
60
|
+
private client;
|
|
61
|
+
constructor(options?: ZeroDriverOptions);
|
|
62
|
+
/** Claim a new instance. Unauthenticated. Optionally whitelist extra IPs. */
|
|
63
|
+
claim(whitelistIp?: string): Promise<ZeroClaimResponse>;
|
|
64
|
+
/** List the caller's non-released instances. Requires the ownership token. */
|
|
65
|
+
list(token: string): Promise<ZeroInstance[]>;
|
|
66
|
+
/** Release (destroy) an instance. Requires the ownership token. */
|
|
67
|
+
release(id: string, token: string): Promise<void>;
|
|
68
|
+
/**
|
|
69
|
+
* Normalize the publicEndpoint (host:8000, no scheme) into a base URL.
|
|
70
|
+
* Prefers dashboardUrl when it already carries a scheme.
|
|
71
|
+
*/
|
|
72
|
+
static toEndpoint(instance: ZeroInstance, scheme?: string): string;
|
|
73
|
+
private toError;
|
|
74
|
+
private codeFromStatus;
|
|
75
|
+
}
|
|
76
|
+
/** Wrap a network-level axios failure into a ZeroError. */
|
|
77
|
+
export declare function isZeroNetworkError(e: unknown): e is AxiosError;
|
|
78
|
+
//# sourceMappingURL=zero.driver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zero.driver.d.ts","sourceRoot":"","sources":["../../src/drivers/zero.driver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAc,EAAiB,UAAU,EAAE,MAAM,OAAO,CAAC;AAEzD,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,6FAA6F;IAC7F,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iFAAiF;IACjF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE;QACV,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,YAAY,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,kGAAkG;IAClG,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qEAAqE;AACrE,MAAM,MAAM,aAAa,GACrB,sBAAsB,GACtB,oBAAoB,GACpB,qBAAqB,GACrB,wBAAwB,GACxB,yBAAyB,GACzB,mBAAmB,GACnB,gBAAgB,GAChB,eAAe,GACf,SAAS,CAAC;AAEd,qBAAa,SAAU,SAAQ,KAAK;IAClC,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;gBACJ,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM;CAMlE;AAID,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAgB;gBAElB,OAAO,GAAE,iBAAsB;IAa3C,6EAA6E;IACvE,KAAK,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAe7D,8EAA8E;IACxE,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAalD,mEAAmE;IAC7D,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASvD;;;OAGG;IACH,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,GAAG,MAAM;IAQlE,OAAO,CAAC,OAAO;IAOf,OAAO,CAAC,cAAc;CAUvB;AAED,2DAA2D;AAC3D,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,UAAU,CAE9D"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Zero Driver — PolarDB-X Zero PXBaas provisioning client.
|
|
3
|
+
*
|
|
4
|
+
* Wraps the unauthenticated Zero API that claims a disposable, Supabase-compatible
|
|
5
|
+
* BaaS instance from a pre-warmed pool (15-day TTL, no renewal).
|
|
6
|
+
*
|
|
7
|
+
* Contract source: https://zero.polardbx.com/BAAS-SKILL.md (polardbx-zero-pxbaas v0.1.0)
|
|
8
|
+
*
|
|
9
|
+
* Endpoints:
|
|
10
|
+
* - POST /api/v1/supabase/instances claim (body: { whitelistIp? })
|
|
11
|
+
* - GET /api/v1/supabase/instances list (needs pxz_token cookie)
|
|
12
|
+
* - DELETE /api/v1/supabase/instances/{id} release (needs pxz_token cookie)
|
|
13
|
+
*
|
|
14
|
+
* Ownership: the claim response returns a `token` (also set as the `pxz_token`
|
|
15
|
+
* cookie). list/release must send it back via `Cookie: pxz_token=<token>`.
|
|
16
|
+
*/
|
|
17
|
+
import axios from 'axios';
|
|
18
|
+
export class ZeroError extends Error {
|
|
19
|
+
code;
|
|
20
|
+
status;
|
|
21
|
+
constructor(code, message, status) {
|
|
22
|
+
super(message);
|
|
23
|
+
this.name = 'ZeroError';
|
|
24
|
+
this.code = code;
|
|
25
|
+
this.status = status;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
const DEFAULT_BASE_URL = 'https://zero.polardbx.com';
|
|
29
|
+
export class ZeroDriver {
|
|
30
|
+
client;
|
|
31
|
+
constructor(options = {}) {
|
|
32
|
+
const baseUrl = options.baseUrl ?? process.env.BAAS_ZERO_ENDPOINT ?? DEFAULT_BASE_URL;
|
|
33
|
+
this.client = axios.create({
|
|
34
|
+
baseURL: baseUrl.replace(/\/$/, ''),
|
|
35
|
+
timeout: options.timeout ?? 30000,
|
|
36
|
+
// NOTE: do NOT set a default Content-Type. axios adds application/json
|
|
37
|
+
// automatically for the claim() POST object body, but a DELETE/GET carrying
|
|
38
|
+
// Content-Type: application/json with no body makes Zero return HTTP 400.
|
|
39
|
+
// Do not throw on non-2xx; we map errors ourselves.
|
|
40
|
+
validateStatus: () => true,
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
/** Claim a new instance. Unauthenticated. Optionally whitelist extra IPs. */
|
|
44
|
+
async claim(whitelistIp) {
|
|
45
|
+
const body = {};
|
|
46
|
+
if (whitelistIp)
|
|
47
|
+
body.whitelistIp = whitelistIp;
|
|
48
|
+
const res = await this.client.post('/api/v1/supabase/instances', body);
|
|
49
|
+
if (res.status !== 200 && res.status !== 201) {
|
|
50
|
+
throw this.toError(res.status, res.data);
|
|
51
|
+
}
|
|
52
|
+
const data = res.data;
|
|
53
|
+
if (!data?.instance?.id || !data?.token) {
|
|
54
|
+
throw new ZeroError('UNKNOWN', 'Malformed claim response: missing instance.id or token', res.status);
|
|
55
|
+
}
|
|
56
|
+
return data;
|
|
57
|
+
}
|
|
58
|
+
/** List the caller's non-released instances. Requires the ownership token. */
|
|
59
|
+
async list(token) {
|
|
60
|
+
const res = await this.client.get('/api/v1/supabase/instances', {
|
|
61
|
+
headers: { Cookie: `pxz_token=${token}` },
|
|
62
|
+
});
|
|
63
|
+
if (res.status !== 200) {
|
|
64
|
+
throw this.toError(res.status, res.data);
|
|
65
|
+
}
|
|
66
|
+
const data = res.data;
|
|
67
|
+
if (Array.isArray(data))
|
|
68
|
+
return data;
|
|
69
|
+
const obj = data;
|
|
70
|
+
return obj?.instances ?? [];
|
|
71
|
+
}
|
|
72
|
+
/** Release (destroy) an instance. Requires the ownership token. */
|
|
73
|
+
async release(id, token) {
|
|
74
|
+
const res = await this.client.delete(`/api/v1/supabase/instances/${encodeURIComponent(id)}`, {
|
|
75
|
+
headers: { Cookie: `pxz_token=${token}` },
|
|
76
|
+
});
|
|
77
|
+
if (res.status !== 200 && res.status !== 204) {
|
|
78
|
+
throw this.toError(res.status, res.data);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Normalize the publicEndpoint (host:8000, no scheme) into a base URL.
|
|
83
|
+
* Prefers dashboardUrl when it already carries a scheme.
|
|
84
|
+
*/
|
|
85
|
+
static toEndpoint(instance, scheme = 'http') {
|
|
86
|
+
if (instance.dashboardUrl && /^https?:\/\//.test(instance.dashboardUrl)) {
|
|
87
|
+
return instance.dashboardUrl.replace(/\/$/, '');
|
|
88
|
+
}
|
|
89
|
+
const host = instance.publicEndpoint.replace(/^https?:\/\//, '').replace(/\/$/, '');
|
|
90
|
+
return `${scheme}://${host}`;
|
|
91
|
+
}
|
|
92
|
+
toError(status, data) {
|
|
93
|
+
const err = data?.error;
|
|
94
|
+
const code = err?.code ?? this.codeFromStatus(status);
|
|
95
|
+
const message = err?.message ?? `Zero API error (HTTP ${status})`;
|
|
96
|
+
return new ZeroError(code, message, status);
|
|
97
|
+
}
|
|
98
|
+
codeFromStatus(status) {
|
|
99
|
+
if (status === 429)
|
|
100
|
+
return 'RATE_LIMIT_EXCEEDED';
|
|
101
|
+
if (status === 503)
|
|
102
|
+
return 'SUPABASE_POOL_EXHAUSTED';
|
|
103
|
+
if (status === 404)
|
|
104
|
+
return 'INSTANCE_NOT_FOUND';
|
|
105
|
+
if (status >= 500)
|
|
106
|
+
return 'INTERNAL_ERROR';
|
|
107
|
+
// 400 is not mapped to a specific code: INVALID_WHITELIST_IP is claim-only and
|
|
108
|
+
// comes from the response body's error.code (preferred in toError). A bare 400
|
|
109
|
+
// on other calls (e.g. release) must not be mislabeled as a whitelist error.
|
|
110
|
+
return 'UNKNOWN';
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
/** Wrap a network-level axios failure into a ZeroError. */
|
|
114
|
+
export function isZeroNetworkError(e) {
|
|
115
|
+
return axios.isAxiosError(e);
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=zero.driver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zero.driver.js","sourceRoot":"","sources":["../../src/drivers/zero.driver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAoC,MAAM,OAAO,CAAC;AAmDzD,MAAM,OAAO,SAAU,SAAQ,KAAK;IAClC,IAAI,CAAgB;IACpB,MAAM,CAAU;IAChB,YAAY,IAAmB,EAAE,OAAe,EAAE,MAAe;QAC/D,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CACF;AAED,MAAM,gBAAgB,GAAG,2BAA2B,CAAC;AAErD,MAAM,OAAO,UAAU;IACb,MAAM,CAAgB;IAE9B,YAAY,UAA6B,EAAE;QACzC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,gBAAgB,CAAC;QACtF,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;YACzB,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;YACnC,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,KAAK;YACjC,uEAAuE;YACvE,4EAA4E;YAC5E,0EAA0E;YAC1E,oDAAoD;YACpD,cAAc,EAAE,GAAG,EAAE,CAAC,IAAI;SAC3B,CAAC,CAAC;IACL,CAAC;IAED,6EAA6E;IAC7E,KAAK,CAAC,KAAK,CAAC,WAAoB;QAC9B,MAAM,IAAI,GAA4B,EAAE,CAAC;QACzC,IAAI,WAAW;YAAE,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAEhD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,4BAA4B,EAAE,IAAI,CAAC,CAAC;QACvE,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC7C,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAC3C,CAAC;QACD,MAAM,IAAI,GAAG,GAAG,CAAC,IAAyB,CAAC;QAC3C,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;YACxC,MAAM,IAAI,SAAS,CAAC,SAAS,EAAE,wDAAwD,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;QACvG,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,8EAA8E;IAC9E,KAAK,CAAC,IAAI,CAAC,KAAa;QACtB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,4BAA4B,EAAE;YAC9D,OAAO,EAAE,EAAE,MAAM,EAAE,aAAa,KAAK,EAAE,EAAE;SAC1C,CAAC,CAAC;QACH,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACvB,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAC3C,CAAC;QACD,MAAM,IAAI,GAAG,GAAG,CAAC,IAAe,CAAC;QACjC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;YAAE,OAAO,IAAsB,CAAC;QACvD,MAAM,GAAG,GAAG,IAAsC,CAAC;QACnD,OAAO,GAAG,EAAE,SAAS,IAAI,EAAE,CAAC;IAC9B,CAAC;IAED,mEAAmE;IACnE,KAAK,CAAC,OAAO,CAAC,EAAU,EAAE,KAAa;QACrC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,8BAA8B,kBAAkB,CAAC,EAAE,CAAC,EAAE,EAAE;YAC3F,OAAO,EAAE,EAAE,MAAM,EAAE,aAAa,KAAK,EAAE,EAAE;SAC1C,CAAC,CAAC;QACH,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC7C,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,UAAU,CAAC,QAAsB,EAAE,MAAM,GAAG,MAAM;QACvD,IAAI,QAAQ,CAAC,YAAY,IAAI,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YACxE,OAAO,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAClD,CAAC;QACD,MAAM,IAAI,GAAG,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACpF,OAAO,GAAG,MAAM,MAAM,IAAI,EAAE,CAAC;IAC/B,CAAC;IAEO,OAAO,CAAC,MAAc,EAAE,IAAa;QAC3C,MAAM,GAAG,GAAI,IAAwD,EAAE,KAAK,CAAC;QAC7E,MAAM,IAAI,GAAI,GAAG,EAAE,IAAsB,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QACzE,MAAM,OAAO,GAAG,GAAG,EAAE,OAAO,IAAI,wBAAwB,MAAM,GAAG,CAAC;QAClE,OAAO,IAAI,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAC9C,CAAC;IAEO,cAAc,CAAC,MAAc;QACnC,IAAI,MAAM,KAAK,GAAG;YAAE,OAAO,qBAAqB,CAAC;QACjD,IAAI,MAAM,KAAK,GAAG;YAAE,OAAO,yBAAyB,CAAC;QACrD,IAAI,MAAM,KAAK,GAAG;YAAE,OAAO,oBAAoB,CAAC;QAChD,IAAI,MAAM,IAAI,GAAG;YAAE,OAAO,gBAAgB,CAAC;QAC3C,+EAA+E;QAC/E,+EAA+E;QAC/E,6EAA6E;QAC7E,OAAO,SAAS,CAAC;IACnB,CAAC;CACF;AAED,2DAA2D;AAC3D,MAAM,UAAU,kBAAkB,CAAC,CAAU;IAC3C,OAAO,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;AAC/B,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @polardbx/pxbaas-client
|
|
3
|
+
*
|
|
4
|
+
* Shared HTTP client SDK for PolarDB-X BaaS data plane APIs.
|
|
5
|
+
*
|
|
6
|
+
* This package provides typed clients for:
|
|
7
|
+
* - Kong gateway routing
|
|
8
|
+
* - Meta API (/pg/*)
|
|
9
|
+
* - Functions Management API (/v1/projects/*)
|
|
10
|
+
* - Storage API (/storage/v1/*)
|
|
11
|
+
* - Auth Admin API (/auth/v1/admin/*)
|
|
12
|
+
* - REST API (/rest/v1/*)
|
|
13
|
+
*
|
|
14
|
+
* @packageDocumentation
|
|
15
|
+
*/
|
|
16
|
+
export * from "./types.js";
|
|
17
|
+
export * from "./drivers/meta.driver.js";
|
|
18
|
+
export * from "./drivers/functions.driver.js";
|
|
19
|
+
export * from "./drivers/apps.driver.js";
|
|
20
|
+
export * from "./drivers/share-links.driver.js";
|
|
21
|
+
export * from "./drivers/storage.driver.js";
|
|
22
|
+
export * from "./drivers/auth-admin.driver.js";
|
|
23
|
+
export * from "./drivers/zero.driver.js";
|
|
24
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,cAAc,YAAY,CAAC;AAM3B,cAAc,0BAA0B,CAAC;AAGzC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,0BAA0B,CAAC;AACzC,cAAc,iCAAiC,CAAC;AAChD,cAAc,6BAA6B,CAAC;AAG5C,cAAc,gCAAgC,CAAC;AAG/C,cAAc,0BAA0B,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @polardbx/pxbaas-client
|
|
3
|
+
*
|
|
4
|
+
* Shared HTTP client SDK for PolarDB-X BaaS data plane APIs.
|
|
5
|
+
*
|
|
6
|
+
* This package provides typed clients for:
|
|
7
|
+
* - Kong gateway routing
|
|
8
|
+
* - Meta API (/pg/*)
|
|
9
|
+
* - Functions Management API (/v1/projects/*)
|
|
10
|
+
* - Storage API (/storage/v1/*)
|
|
11
|
+
* - Auth Admin API (/auth/v1/admin/*)
|
|
12
|
+
* - REST API (/rest/v1/*)
|
|
13
|
+
*
|
|
14
|
+
* @packageDocumentation
|
|
15
|
+
*/
|
|
16
|
+
export * from "./types.js";
|
|
17
|
+
// TODO: M1 - Add Kong client
|
|
18
|
+
// export * from './kong.js';
|
|
19
|
+
// M3 - Meta API driver
|
|
20
|
+
export * from "./drivers/meta.driver.js";
|
|
21
|
+
// M4 - Functions, Apps, and Storage drivers
|
|
22
|
+
export * from "./drivers/functions.driver.js";
|
|
23
|
+
export * from "./drivers/apps.driver.js";
|
|
24
|
+
export * from "./drivers/share-links.driver.js";
|
|
25
|
+
export * from "./drivers/storage.driver.js";
|
|
26
|
+
// M5 - Auth Admin driver
|
|
27
|
+
export * from "./drivers/auth-admin.driver.js";
|
|
28
|
+
// Zero provisioning driver (PolarDB-X Zero PXBaas)
|
|
29
|
+
export * from "./drivers/zero.driver.js";
|
|
30
|
+
// TODO: M5 - Add REST driver
|
|
31
|
+
// export * from './drivers/rest.driver.js';
|
|
32
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,cAAc,YAAY,CAAC;AAE3B,6BAA6B;AAC7B,6BAA6B;AAE7B,uBAAuB;AACvB,cAAc,0BAA0B,CAAC;AAEzC,4CAA4C;AAC5C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,0BAA0B,CAAC;AACzC,cAAc,iCAAiC,CAAC;AAChD,cAAc,6BAA6B,CAAC;AAE5C,yBAAyB;AACzB,cAAc,gCAAgC,CAAC;AAE/C,mDAAmD;AACnD,cAAc,0BAA0B,CAAC;AAEzC,6BAA6B;AAC7B,4CAA4C"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core types for @polardbx/pxbaas-client
|
|
3
|
+
*/
|
|
4
|
+
export interface TenantProfile {
|
|
5
|
+
endpoint: string;
|
|
6
|
+
tenantId?: string;
|
|
7
|
+
anonKey: string;
|
|
8
|
+
serviceRoleKey: string;
|
|
9
|
+
}
|
|
10
|
+
export interface JwtPayload {
|
|
11
|
+
role: 'anon' | 'service_role';
|
|
12
|
+
tenant_id?: string;
|
|
13
|
+
iss: string;
|
|
14
|
+
iat: number;
|
|
15
|
+
exp: number;
|
|
16
|
+
}
|
|
17
|
+
export interface ApiResponse<T = unknown> {
|
|
18
|
+
data: T;
|
|
19
|
+
error?: string;
|
|
20
|
+
}
|
|
21
|
+
export interface PaginatedResponse<T> extends ApiResponse<T[]> {
|
|
22
|
+
count: number;
|
|
23
|
+
offset: number;
|
|
24
|
+
limit: number;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,GAAG,cAAc,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,WAAW,CAAC,CAAC,GAAG,OAAO;IACtC,IAAI,EAAE,CAAC,CAAC;IACR,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB,CAAC,CAAC,CAAE,SAAQ,WAAW,CAAC,CAAC,EAAE,CAAC;IAC5D,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,60 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@polardbx/pxbaas-client",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
3
|
+
"version": "0.1.0-beta.1",
|
|
4
|
+
"description": "Shared HTTP client SDK for PolarDB-X BaaS data plane APIs",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"polardbx",
|
|
7
|
+
"baas",
|
|
8
|
+
"client",
|
|
9
|
+
"sdk",
|
|
10
|
+
"http"
|
|
11
|
+
],
|
|
12
|
+
"license": "MIT",
|
|
13
|
+
"repository": {
|
|
14
|
+
"type": "git",
|
|
15
|
+
"url": "https://github.com/polardbx/mysql-supabase.git",
|
|
16
|
+
"directory": "cli/packages/baas-client"
|
|
17
|
+
},
|
|
18
|
+
"publishConfig": {
|
|
19
|
+
"access": "public",
|
|
20
|
+
"registry": "https://registry.npmjs.org"
|
|
21
|
+
},
|
|
22
|
+
"type": "module",
|
|
23
|
+
"main": "./dist/index.js",
|
|
24
|
+
"types": "./dist/index.d.ts",
|
|
25
|
+
"exports": {
|
|
26
|
+
".": {
|
|
27
|
+
"import": "./dist/index.js",
|
|
28
|
+
"types": "./dist/index.d.ts"
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
"files": [
|
|
32
|
+
"dist"
|
|
33
|
+
],
|
|
34
|
+
"dependencies": {
|
|
35
|
+
"axios": "^1.6.0",
|
|
36
|
+
"form-data": "^4.0.0"
|
|
37
|
+
},
|
|
38
|
+
"devDependencies": {
|
|
39
|
+
"@types/node": "^20.11.0",
|
|
40
|
+
"@typescript-eslint/eslint-plugin": "^7.0.0",
|
|
41
|
+
"@typescript-eslint/parser": "^7.0.0",
|
|
42
|
+
"eslint": "^8.56.0",
|
|
43
|
+
"msw": "^2.2.0",
|
|
44
|
+
"typescript": "^5.3.0",
|
|
45
|
+
"vitest": "^1.2.0"
|
|
46
|
+
},
|
|
47
|
+
"engines": {
|
|
48
|
+
"node": ">=20.0.0"
|
|
49
|
+
},
|
|
50
|
+
"scripts": {
|
|
51
|
+
"build": "tsc --build",
|
|
52
|
+
"dev": "tsc --watch",
|
|
53
|
+
"test": "vitest run",
|
|
54
|
+
"test:unit": "vitest run",
|
|
55
|
+
"lint": "eslint src --ext .ts",
|
|
56
|
+
"lint:fix": "eslint src --ext .ts --fix",
|
|
57
|
+
"typecheck": "tsc --noEmit",
|
|
58
|
+
"clean": "rm -rf dist *.tsbuildinfo"
|
|
59
|
+
}
|
|
6
60
|
}
|
package/README.md
DELETED