get-db9 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/dist/admin.js ADDED
@@ -0,0 +1,240 @@
1
+ // src/errors.ts
2
+ var Db9Error = class _Db9Error extends Error {
3
+ statusCode;
4
+ response;
5
+ constructor(message, statusCode, response) {
6
+ super(message);
7
+ this.name = "Db9Error";
8
+ this.statusCode = statusCode;
9
+ this.response = response;
10
+ }
11
+ static async fromResponse(response) {
12
+ let message;
13
+ try {
14
+ const body = await response.json();
15
+ message = body.message || response.statusText;
16
+ } catch {
17
+ message = response.statusText;
18
+ }
19
+ switch (response.status) {
20
+ case 401:
21
+ return new Db9AuthError(message, response);
22
+ case 404:
23
+ return new Db9NotFoundError(message, response);
24
+ case 409:
25
+ return new Db9ConflictError(message, response);
26
+ default:
27
+ return new _Db9Error(message, response.status, response);
28
+ }
29
+ }
30
+ };
31
+ var Db9AuthError = class extends Db9Error {
32
+ constructor(message, response) {
33
+ super(message, 401, response);
34
+ this.name = "Db9AuthError";
35
+ }
36
+ };
37
+ var Db9NotFoundError = class extends Db9Error {
38
+ constructor(message, response) {
39
+ super(message, 404, response);
40
+ this.name = "Db9NotFoundError";
41
+ }
42
+ };
43
+ var Db9ConflictError = class extends Db9Error {
44
+ constructor(message, response) {
45
+ super(message, 409, response);
46
+ this.name = "Db9ConflictError";
47
+ }
48
+ };
49
+
50
+ // src/http.ts
51
+ function createHttpClient(options) {
52
+ const fetchFn = options.fetch ?? globalThis.fetch;
53
+ const baseUrl = options.baseUrl.replace(/\/$/, "");
54
+ async function request(method, path, body, params) {
55
+ let url = `${baseUrl}${path}`;
56
+ if (params) {
57
+ const searchParams = new URLSearchParams();
58
+ for (const [key, value] of Object.entries(params)) {
59
+ if (value !== void 0) {
60
+ searchParams.set(key, value);
61
+ }
62
+ }
63
+ const qs = searchParams.toString();
64
+ if (qs) url += `?${qs}`;
65
+ }
66
+ const headers = {
67
+ "Content-Type": "application/json",
68
+ ...options.headers
69
+ };
70
+ const init = { method, headers };
71
+ if (body !== void 0) {
72
+ init.body = JSON.stringify(body);
73
+ }
74
+ const response = await fetchFn(url, init);
75
+ if (!response.ok) {
76
+ throw await Db9Error.fromResponse(response);
77
+ }
78
+ if (response.status === 204) {
79
+ return void 0;
80
+ }
81
+ return response.json();
82
+ }
83
+ return {
84
+ get: (path, params) => request("GET", path, void 0, params),
85
+ post: (path, body) => request("POST", path, body),
86
+ put: (path, body) => request("PUT", path, body),
87
+ del: (path) => request("DELETE", path)
88
+ };
89
+ }
90
+
91
+ // src/admin.ts
92
+ function createAdminClient(options = {}) {
93
+ const baseUrl = options.baseUrl ?? "https://db9.shared.aws.tidbcloud.com/api";
94
+ const headers = {};
95
+ if (options.apiKey) {
96
+ headers["X-API-Key"] = options.apiKey;
97
+ }
98
+ const client = createHttpClient({
99
+ baseUrl,
100
+ fetch: options.fetch,
101
+ headers
102
+ });
103
+ return {
104
+ tenants: {
105
+ list: (params) => {
106
+ const queryParams = {};
107
+ if (params) {
108
+ if (params.page !== void 0)
109
+ queryParams.page = String(params.page);
110
+ if (params.size !== void 0)
111
+ queryParams.size = String(params.size);
112
+ if (params.state !== void 0) queryParams.state = params.state;
113
+ if (params.q !== void 0) queryParams.q = params.q;
114
+ if (params.cursor !== void 0) queryParams.cursor = params.cursor;
115
+ if (params.tag !== void 0) queryParams.tag = params.tag;
116
+ }
117
+ return client.get("/tenants", queryParams);
118
+ },
119
+ create: (req) => client.post("/tenants", req),
120
+ get: (tenantId) => client.get(`/tenants/${tenantId}`),
121
+ update: (tenantId, req) => client.put(`/tenants/${tenantId}`, req),
122
+ delete: (tenantId) => client.del(`/tenants/${tenantId}`),
123
+ remove: (tenantId) => client.post(`/tenants/${tenantId}/remove`),
124
+ batchCreate: (req) => client.post("/tenants/batch", req),
125
+ batchDelete: (req) => client.post("/tenants/batch/delete", req),
126
+ batchUpdate: (req) => client.put("/tenants/batch", req),
127
+ connect: (tenantId, req) => client.post(
128
+ `/tenants/${tenantId}/connect`,
129
+ req
130
+ ),
131
+ // query() needs X-Tenant-Session header — create a one-off client
132
+ query: async (tenantId, sessionId, req) => {
133
+ const sessionClient = createHttpClient({
134
+ baseUrl,
135
+ fetch: options.fetch,
136
+ headers: {
137
+ ...headers,
138
+ "X-Tenant-Session": sessionId
139
+ }
140
+ });
141
+ return sessionClient.post(
142
+ `/tenants/${tenantId}/query`,
143
+ req
144
+ );
145
+ }
146
+ },
147
+ system: {
148
+ health: () => client.get("/health"),
149
+ info: () => client.get("/info")
150
+ },
151
+ users: {
152
+ list: async (tenantId, sessionId) => {
153
+ const sessionClient = createHttpClient({
154
+ baseUrl,
155
+ fetch: options.fetch,
156
+ headers: {
157
+ ...headers,
158
+ "X-Tenant-Session": sessionId
159
+ }
160
+ });
161
+ return sessionClient.get(
162
+ `/tenants/${tenantId}/users`
163
+ );
164
+ },
165
+ create: async (tenantId, sessionId, req) => {
166
+ const sessionClient = createHttpClient({
167
+ baseUrl,
168
+ fetch: options.fetch,
169
+ headers: {
170
+ ...headers,
171
+ "X-Tenant-Session": sessionId
172
+ }
173
+ });
174
+ return sessionClient.post(
175
+ `/tenants/${tenantId}/users`,
176
+ req
177
+ );
178
+ },
179
+ delete: async (tenantId, sessionId, username) => {
180
+ const sessionClient = createHttpClient({
181
+ baseUrl,
182
+ fetch: options.fetch,
183
+ headers: {
184
+ ...headers,
185
+ "X-Tenant-Session": sessionId
186
+ }
187
+ });
188
+ return sessionClient.del(
189
+ `/tenants/${tenantId}/users/${username}`
190
+ );
191
+ },
192
+ resetPassword: async (tenantId, sessionId, username) => {
193
+ const sessionClient = createHttpClient({
194
+ baseUrl,
195
+ fetch: options.fetch,
196
+ headers: {
197
+ ...headers,
198
+ "X-Tenant-Session": sessionId
199
+ }
200
+ });
201
+ return sessionClient.post(
202
+ `/tenants/${tenantId}/users/${username}/password`
203
+ );
204
+ }
205
+ },
206
+ observability: {
207
+ get: (tenantId) => client.get(
208
+ `/tenants/${tenantId}/observability`
209
+ ),
210
+ bootstrap: (tenantId, req) => client.post(
211
+ `/tenants/${tenantId}/observability/bootstrap`,
212
+ req
213
+ )
214
+ },
215
+ audit: {
216
+ list: (params) => {
217
+ const queryParams = {};
218
+ if (params) {
219
+ if (params.tenant_id !== void 0)
220
+ queryParams.tenant_id = params.tenant_id;
221
+ if (params.operation_type !== void 0)
222
+ queryParams.operation_type = params.operation_type;
223
+ if (params.resource_type !== void 0)
224
+ queryParams.resource_type = params.resource_type;
225
+ if (params.success !== void 0)
226
+ queryParams.success = String(params.success);
227
+ if (params.limit !== void 0)
228
+ queryParams.limit = String(params.limit);
229
+ if (params.offset !== void 0)
230
+ queryParams.offset = String(params.offset);
231
+ }
232
+ return client.get("/audit-logs", queryParams);
233
+ }
234
+ }
235
+ };
236
+ }
237
+ export {
238
+ createAdminClient
239
+ };
240
+ //# sourceMappingURL=admin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/errors.ts","../src/http.ts","../src/admin.ts"],"sourcesContent":["export class Db9Error extends Error {\n readonly statusCode: number;\n readonly response?: Response;\n\n constructor(message: string, statusCode: number, response?: Response) {\n super(message);\n this.name = 'Db9Error';\n this.statusCode = statusCode;\n this.response = response;\n }\n\n static async fromResponse(response: Response): Promise<Db9Error> {\n // Parse { \"message\": string } body — the ONLY error format from the API\n let message: string;\n try {\n const body = (await response.json()) as { message?: string };\n message = body.message || response.statusText;\n } catch {\n message = response.statusText;\n }\n\n // Return specific subclass based on status code\n switch (response.status) {\n case 401:\n return new Db9AuthError(message, response);\n case 404:\n return new Db9NotFoundError(message, response);\n case 409:\n return new Db9ConflictError(message, response);\n default:\n return new Db9Error(message, response.status, response);\n }\n }\n}\n\nexport class Db9AuthError extends Db9Error {\n constructor(message: string, response?: Response) {\n super(message, 401, response);\n this.name = 'Db9AuthError';\n }\n}\n\nexport class Db9NotFoundError extends Db9Error {\n constructor(message: string, response?: Response) {\n super(message, 404, response);\n this.name = 'Db9NotFoundError';\n }\n}\n\nexport class Db9ConflictError extends Db9Error {\n constructor(message: string, response?: Response) {\n super(message, 409, response);\n this.name = 'Db9ConflictError';\n }\n}\n","import { Db9Error } from './errors';\n\nexport type FetchFn = typeof globalThis.fetch;\n\nexport interface HttpClientOptions {\n baseUrl: string;\n fetch?: FetchFn;\n headers?: Record<string, string>;\n}\n\nexport interface HttpClient {\n get<T>(path: string, params?: Record<string, string | undefined>): Promise<T>;\n post<T>(path: string, body?: unknown): Promise<T>;\n put<T>(path: string, body?: unknown): Promise<T>;\n del<T>(path: string): Promise<T>;\n}\n\nexport function createHttpClient(options: HttpClientOptions): HttpClient {\n const fetchFn = options.fetch ?? globalThis.fetch;\n const baseUrl = options.baseUrl.replace(/\\/$/, ''); // strip trailing slash\n\n async function request<T>(\n method: string,\n path: string,\n body?: unknown,\n params?: Record<string, string | undefined>\n ): Promise<T> {\n let url = `${baseUrl}${path}`;\n\n // Append query params for GET requests\n if (params) {\n const searchParams = new URLSearchParams();\n for (const [key, value] of Object.entries(params)) {\n if (value !== undefined) {\n searchParams.set(key, value);\n }\n }\n const qs = searchParams.toString();\n if (qs) url += `?${qs}`;\n }\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n ...options.headers,\n };\n\n const init: RequestInit = { method, headers };\n if (body !== undefined) {\n init.body = JSON.stringify(body);\n }\n\n const response = await fetchFn(url, init);\n\n if (!response.ok) {\n throw await Db9Error.fromResponse(response);\n }\n\n // Handle 204 No Content\n if (response.status === 204) {\n return undefined as T;\n }\n\n return response.json() as Promise<T>;\n }\n\n return {\n get: <T>(path: string, params?: Record<string, string | undefined>) =>\n request<T>('GET', path, undefined, params),\n post: <T>(path: string, body?: unknown) => request<T>('POST', path, body),\n put: <T>(path: string, body?: unknown) => request<T>('PUT', path, body),\n del: <T>(path: string) => request<T>('DELETE', path),\n };\n}\n","import { createHttpClient, type FetchFn } from './http';\nimport type {\n CreateTenantRequest,\n CreateTenantResponse,\n TenantResponse,\n TenantListResponse,\n TenantUpdateRequest,\n TenantConnectRequest,\n TenantConnectResponse,\n SqlQueryRequest,\n SqlQueryResponse,\n ListTenantsParams,\n MessageResponse,\n HealthResponse,\n BatchCreateRequest,\n BatchCreateResponse,\n BatchDeleteRequest,\n BatchDeleteResponse,\n BatchUpdateRequest,\n BatchUpdateResponse,\n UserResponse,\n UserCreateResponse,\n AdminCreateUserRequest,\n PasswordResetResponse,\n TenantObservabilityResponse,\n AuditLogParams,\n AuditLogResponse,\n} from './types';\n\nexport interface AdminClientOptions {\n baseUrl?: string;\n apiKey?: string;\n fetch?: FetchFn;\n}\n\nexport function createAdminClient(options: AdminClientOptions = {}) {\n const baseUrl =\n options.baseUrl ?? 'https://db9.shared.aws.tidbcloud.com/api';\n const headers: Record<string, string> = {};\n if (options.apiKey) {\n headers['X-API-Key'] = options.apiKey;\n }\n\n const client = createHttpClient({\n baseUrl,\n fetch: options.fetch,\n headers,\n });\n\n return {\n tenants: {\n list: (params?: ListTenantsParams) => {\n const queryParams: Record<string, string | undefined> = {};\n if (params) {\n if (params.page !== undefined)\n queryParams.page = String(params.page);\n if (params.size !== undefined)\n queryParams.size = String(params.size);\n if (params.state !== undefined) queryParams.state = params.state;\n if (params.q !== undefined) queryParams.q = params.q;\n if (params.cursor !== undefined) queryParams.cursor = params.cursor;\n if (params.tag !== undefined) queryParams.tag = params.tag;\n }\n return client.get<TenantListResponse>('/tenants', queryParams);\n },\n create: (req?: CreateTenantRequest) =>\n client.post<CreateTenantResponse>('/tenants', req),\n get: (tenantId: string) =>\n client.get<TenantResponse>(`/tenants/${tenantId}`),\n update: (tenantId: string, req: TenantUpdateRequest) =>\n client.put<TenantResponse>(`/tenants/${tenantId}`, req),\n delete: (tenantId: string) =>\n client.del<MessageResponse>(`/tenants/${tenantId}`),\n remove: (tenantId: string) =>\n client.post<MessageResponse>(`/tenants/${tenantId}/remove`),\n\n batchCreate: (req: BatchCreateRequest) =>\n client.post<BatchCreateResponse>('/tenants/batch', req),\n batchDelete: (req: BatchDeleteRequest) =>\n client.post<BatchDeleteResponse>('/tenants/batch/delete', req),\n batchUpdate: (req: BatchUpdateRequest) =>\n client.put<BatchUpdateResponse>('/tenants/batch', req),\n\n connect: (tenantId: string, req: TenantConnectRequest) =>\n client.post<TenantConnectResponse>(\n `/tenants/${tenantId}/connect`,\n req\n ),\n\n // query() needs X-Tenant-Session header — create a one-off client\n query: async (\n tenantId: string,\n sessionId: string,\n req: SqlQueryRequest\n ) => {\n const sessionClient = createHttpClient({\n baseUrl,\n fetch: options.fetch,\n headers: {\n ...headers,\n 'X-Tenant-Session': sessionId,\n },\n });\n return sessionClient.post<SqlQueryResponse>(\n `/tenants/${tenantId}/query`,\n req\n );\n },\n },\n\n system: {\n health: () => client.get<HealthResponse>('/health'),\n info: () =>\n client.get<{ name: string; version: string; docs: string }>('/info'),\n },\n\n users: {\n list: async (tenantId: string, sessionId: string) => {\n const sessionClient = createHttpClient({\n baseUrl,\n fetch: options.fetch,\n headers: {\n ...headers,\n 'X-Tenant-Session': sessionId,\n },\n });\n return sessionClient.get<UserResponse[]>(\n `/tenants/${tenantId}/users`\n );\n },\n\n create: async (\n tenantId: string,\n sessionId: string,\n req: AdminCreateUserRequest\n ) => {\n const sessionClient = createHttpClient({\n baseUrl,\n fetch: options.fetch,\n headers: {\n ...headers,\n 'X-Tenant-Session': sessionId,\n },\n });\n return sessionClient.post<UserCreateResponse>(\n `/tenants/${tenantId}/users`,\n req\n );\n },\n\n delete: async (\n tenantId: string,\n sessionId: string,\n username: string\n ) => {\n const sessionClient = createHttpClient({\n baseUrl,\n fetch: options.fetch,\n headers: {\n ...headers,\n 'X-Tenant-Session': sessionId,\n },\n });\n return sessionClient.del<MessageResponse>(\n `/tenants/${tenantId}/users/${username}`\n );\n },\n\n resetPassword: async (\n tenantId: string,\n sessionId: string,\n username: string\n ) => {\n const sessionClient = createHttpClient({\n baseUrl,\n fetch: options.fetch,\n headers: {\n ...headers,\n 'X-Tenant-Session': sessionId,\n },\n });\n return sessionClient.post<PasswordResetResponse>(\n `/tenants/${tenantId}/users/${username}/password`\n );\n },\n },\n\n observability: {\n get: (tenantId: string) =>\n client.get<TenantObservabilityResponse>(\n `/tenants/${tenantId}/observability`\n ),\n\n bootstrap: (tenantId: string, req: TenantConnectRequest) =>\n client.post<MessageResponse>(\n `/tenants/${tenantId}/observability/bootstrap`,\n req\n ),\n },\n\n audit: {\n list: (params?: AuditLogParams) => {\n const queryParams: Record<string, string | undefined> = {};\n if (params) {\n if (params.tenant_id !== undefined)\n queryParams.tenant_id = params.tenant_id;\n if (params.operation_type !== undefined)\n queryParams.operation_type = params.operation_type;\n if (params.resource_type !== undefined)\n queryParams.resource_type = params.resource_type;\n if (params.success !== undefined)\n queryParams.success = String(params.success);\n if (params.limit !== undefined)\n queryParams.limit = String(params.limit);\n if (params.offset !== undefined)\n queryParams.offset = String(params.offset);\n }\n return client.get<AuditLogResponse[]>('/audit-logs', queryParams);\n },\n },\n };\n}\n\nexport type AdminClient = ReturnType<typeof createAdminClient>;"],"mappings":"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","names":[]}
@@ -0,0 +1,81 @@
1
+ import { F as FetchFn, R as RegisterRequest, v as CustomerResponse, G as LoginRequest, I as LoginResponse, c as AnonymousRegisterResponse, a as AnonymousRefreshRequest, b as AnonymousRefreshResponse, d as AnonymousSecretResponse, C as ClaimRequest, n as ClaimResponse, a3 as TokenResponse, M as MessageResponse, q as CreateDatabaseRequest, D as DatabaseResponse, u as CustomerPasswordResetResponse, $ as TenantObservabilityResponse, W as SqlResult, S as SchemaResponse, w as DumpRequest, x as DumpResponse, J as MigrationApplyRequest, K as MigrationApplyResponse, N as MigrationMetadata, m as BranchRequest, a5 as UserResponse, t as CreateUserRequest } from './types-ktbIiH5T.cjs';
2
+
3
+ /** Credential fields stored in `~/.db9/credentials` (TOML). */
4
+ interface Credentials {
5
+ token: string;
6
+ is_anonymous?: boolean;
7
+ anonymous_id?: string;
8
+ anonymous_secret?: string;
9
+ }
10
+ /** Async credential persistence abstraction. */
11
+ interface CredentialStore {
12
+ load(): Promise<Credentials | null>;
13
+ save(credentials: Credentials): Promise<void>;
14
+ clear(): Promise<void>;
15
+ }
16
+ declare class FileCredentialStore implements CredentialStore {
17
+ private readonly customPath;
18
+ /**
19
+ * @param path — Override the credential file location.
20
+ * Defaults to `~/.db9/credentials` (resolved lazily).
21
+ */
22
+ constructor(path?: string);
23
+ /** Resolve the credential file path (lazy to avoid top-level `os` import). */
24
+ private resolvePath;
25
+ load(): Promise<Credentials | null>;
26
+ save(credentials: Credentials): Promise<void>;
27
+ clear(): Promise<void>;
28
+ }
29
+ declare class MemoryCredentialStore implements CredentialStore {
30
+ private credentials;
31
+ load(): Promise<Credentials | null>;
32
+ save(credentials: Credentials): Promise<void>;
33
+ clear(): Promise<void>;
34
+ }
35
+ /** Returns a FileCredentialStore with the default path (`~/.db9/credentials`). */
36
+ declare function defaultCredentialStore(): CredentialStore;
37
+
38
+ interface CustomerClientOptions {
39
+ baseUrl?: string;
40
+ token?: string;
41
+ fetch?: FetchFn;
42
+ credentialStore?: CredentialStore;
43
+ }
44
+ declare function createCustomerClient(options?: CustomerClientOptions): {
45
+ auth: {
46
+ register: (req: RegisterRequest) => Promise<CustomerResponse>;
47
+ login: (req: LoginRequest) => Promise<LoginResponse>;
48
+ anonymousRegister: () => Promise<AnonymousRegisterResponse>;
49
+ anonymousRefresh: (req: AnonymousRefreshRequest) => Promise<AnonymousRefreshResponse>;
50
+ me: () => Promise<CustomerResponse>;
51
+ getAnonymousSecret: () => Promise<AnonymousSecretResponse>;
52
+ claim: (req: ClaimRequest) => Promise<ClaimResponse>;
53
+ };
54
+ tokens: {
55
+ list: () => Promise<TokenResponse[]>;
56
+ revoke: (tokenId: string) => Promise<MessageResponse>;
57
+ };
58
+ databases: {
59
+ create: (req: CreateDatabaseRequest) => Promise<DatabaseResponse>;
60
+ list: () => Promise<DatabaseResponse[]>;
61
+ get: (databaseId: string) => Promise<DatabaseResponse>;
62
+ delete: (databaseId: string) => Promise<MessageResponse>;
63
+ resetPassword: (databaseId: string) => Promise<CustomerPasswordResetResponse>;
64
+ observability: (databaseId: string) => Promise<TenantObservabilityResponse>;
65
+ sql: (databaseId: string, query: string) => Promise<SqlResult>;
66
+ sqlFile: (databaseId: string, fileContent: string) => Promise<SqlResult>;
67
+ schema: (databaseId: string) => Promise<SchemaResponse>;
68
+ dump: (databaseId: string, req?: DumpRequest) => Promise<DumpResponse>;
69
+ applyMigration: (databaseId: string, req: MigrationApplyRequest) => Promise<MigrationApplyResponse>;
70
+ listMigrations: (databaseId: string) => Promise<MigrationMetadata[]>;
71
+ branch: (databaseId: string, req: BranchRequest) => Promise<DatabaseResponse>;
72
+ users: {
73
+ list: (databaseId: string) => Promise<UserResponse[]>;
74
+ create: (databaseId: string, req: CreateUserRequest) => Promise<MessageResponse>;
75
+ delete: (databaseId: string, username: string) => Promise<MessageResponse>;
76
+ };
77
+ };
78
+ };
79
+ type CustomerClient = ReturnType<typeof createCustomerClient>;
80
+
81
+ export { type CredentialStore as C, FileCredentialStore as F, MemoryCredentialStore as M, type Credentials as a, type CustomerClient as b, type CustomerClientOptions as c, createCustomerClient as d, defaultCredentialStore as e };
@@ -0,0 +1,81 @@
1
+ import { F as FetchFn, R as RegisterRequest, v as CustomerResponse, G as LoginRequest, I as LoginResponse, c as AnonymousRegisterResponse, a as AnonymousRefreshRequest, b as AnonymousRefreshResponse, d as AnonymousSecretResponse, C as ClaimRequest, n as ClaimResponse, a3 as TokenResponse, M as MessageResponse, q as CreateDatabaseRequest, D as DatabaseResponse, u as CustomerPasswordResetResponse, $ as TenantObservabilityResponse, W as SqlResult, S as SchemaResponse, w as DumpRequest, x as DumpResponse, J as MigrationApplyRequest, K as MigrationApplyResponse, N as MigrationMetadata, m as BranchRequest, a5 as UserResponse, t as CreateUserRequest } from './types-ktbIiH5T.js';
2
+
3
+ /** Credential fields stored in `~/.db9/credentials` (TOML). */
4
+ interface Credentials {
5
+ token: string;
6
+ is_anonymous?: boolean;
7
+ anonymous_id?: string;
8
+ anonymous_secret?: string;
9
+ }
10
+ /** Async credential persistence abstraction. */
11
+ interface CredentialStore {
12
+ load(): Promise<Credentials | null>;
13
+ save(credentials: Credentials): Promise<void>;
14
+ clear(): Promise<void>;
15
+ }
16
+ declare class FileCredentialStore implements CredentialStore {
17
+ private readonly customPath;
18
+ /**
19
+ * @param path — Override the credential file location.
20
+ * Defaults to `~/.db9/credentials` (resolved lazily).
21
+ */
22
+ constructor(path?: string);
23
+ /** Resolve the credential file path (lazy to avoid top-level `os` import). */
24
+ private resolvePath;
25
+ load(): Promise<Credentials | null>;
26
+ save(credentials: Credentials): Promise<void>;
27
+ clear(): Promise<void>;
28
+ }
29
+ declare class MemoryCredentialStore implements CredentialStore {
30
+ private credentials;
31
+ load(): Promise<Credentials | null>;
32
+ save(credentials: Credentials): Promise<void>;
33
+ clear(): Promise<void>;
34
+ }
35
+ /** Returns a FileCredentialStore with the default path (`~/.db9/credentials`). */
36
+ declare function defaultCredentialStore(): CredentialStore;
37
+
38
+ interface CustomerClientOptions {
39
+ baseUrl?: string;
40
+ token?: string;
41
+ fetch?: FetchFn;
42
+ credentialStore?: CredentialStore;
43
+ }
44
+ declare function createCustomerClient(options?: CustomerClientOptions): {
45
+ auth: {
46
+ register: (req: RegisterRequest) => Promise<CustomerResponse>;
47
+ login: (req: LoginRequest) => Promise<LoginResponse>;
48
+ anonymousRegister: () => Promise<AnonymousRegisterResponse>;
49
+ anonymousRefresh: (req: AnonymousRefreshRequest) => Promise<AnonymousRefreshResponse>;
50
+ me: () => Promise<CustomerResponse>;
51
+ getAnonymousSecret: () => Promise<AnonymousSecretResponse>;
52
+ claim: (req: ClaimRequest) => Promise<ClaimResponse>;
53
+ };
54
+ tokens: {
55
+ list: () => Promise<TokenResponse[]>;
56
+ revoke: (tokenId: string) => Promise<MessageResponse>;
57
+ };
58
+ databases: {
59
+ create: (req: CreateDatabaseRequest) => Promise<DatabaseResponse>;
60
+ list: () => Promise<DatabaseResponse[]>;
61
+ get: (databaseId: string) => Promise<DatabaseResponse>;
62
+ delete: (databaseId: string) => Promise<MessageResponse>;
63
+ resetPassword: (databaseId: string) => Promise<CustomerPasswordResetResponse>;
64
+ observability: (databaseId: string) => Promise<TenantObservabilityResponse>;
65
+ sql: (databaseId: string, query: string) => Promise<SqlResult>;
66
+ sqlFile: (databaseId: string, fileContent: string) => Promise<SqlResult>;
67
+ schema: (databaseId: string) => Promise<SchemaResponse>;
68
+ dump: (databaseId: string, req?: DumpRequest) => Promise<DumpResponse>;
69
+ applyMigration: (databaseId: string, req: MigrationApplyRequest) => Promise<MigrationApplyResponse>;
70
+ listMigrations: (databaseId: string) => Promise<MigrationMetadata[]>;
71
+ branch: (databaseId: string, req: BranchRequest) => Promise<DatabaseResponse>;
72
+ users: {
73
+ list: (databaseId: string) => Promise<UserResponse[]>;
74
+ create: (databaseId: string, req: CreateUserRequest) => Promise<MessageResponse>;
75
+ delete: (databaseId: string, username: string) => Promise<MessageResponse>;
76
+ };
77
+ };
78
+ };
79
+ type CustomerClient = ReturnType<typeof createCustomerClient>;
80
+
81
+ export { type CredentialStore as C, FileCredentialStore as F, MemoryCredentialStore as M, type Credentials as a, type CustomerClient as b, type CustomerClientOptions as c, createCustomerClient as d, defaultCredentialStore as e };