+163
| # @buckt/sdk | ||
| Official TypeScript SDK for the Buckt API. Zero runtime dependencies, uses native `fetch`. | ||
| ## Installation | ||
| ```bash | ||
| npm install @buckt/sdk | ||
| ``` | ||
| ## Quick Start | ||
| ```ts | ||
| import { Buckt } from '@buckt/sdk' | ||
| const client = new Buckt({ apiKey: 'bkt_...' }) | ||
| const bucket = await client.buckets.create({ | ||
| name: 'Assets', | ||
| customDomain: 'assets.acme.com', | ||
| }) | ||
| ``` | ||
| ## Configuration | ||
| ```ts | ||
| const client = new Buckt({ | ||
| apiKey: 'bkt_...', // required | ||
| baseUrl: 'https://api.buckt.dev', // optional, this is the default | ||
| }) | ||
| ``` | ||
| ## Resources | ||
| ### Buckets (`client.buckets`) | ||
| ```ts | ||
| // Create | ||
| const bucket = await client.buckets.create({ | ||
| name: 'Assets', | ||
| customDomain: 'assets.acme.com', | ||
| region: 'us-east-1', // optional | ||
| visibility: 'public', // optional: 'public' | 'private' | ||
| cachePreset: 'aggressive', // optional: 'no-cache' | 'short' | 'standard' | 'aggressive' | 'immutable' | ||
| corsOrigins: ['https://acme.com'], // optional | ||
| lifecycleTtlDays: 90, // optional | ||
| optimizationMode: 'balanced', // optional: 'none' | 'light' | 'balanced' | 'maximum' | ||
| }) | ||
| // List (cursor-based pagination) | ||
| const { data: buckets, meta } = await client.buckets.list({ | ||
| cursor: undefined, // optional | ||
| limit: 20, // optional | ||
| status: 'active', // optional filter | ||
| }) | ||
| // Get | ||
| const bucket = await client.buckets.get('bucket-id') | ||
| // Update | ||
| const updated = await client.buckets.update('bucket-id', { | ||
| name: 'New Name', | ||
| cachePreset: 'immutable', | ||
| }) | ||
| // Delete | ||
| await client.buckets.delete('bucket-id') | ||
| ``` | ||
| ### Files (`client.files`) | ||
| ```ts | ||
| // Upload | ||
| await client.files.upload('bucket-id', 'images/logo.png', buffer, 'image/png', { | ||
| optimization: 'balanced', // optional: triggers server-side image optimization | ||
| }) | ||
| // List | ||
| const { data: files, meta } = await client.files.list('bucket-id', { | ||
| prefix: 'images/', // optional | ||
| cursor: undefined, // optional | ||
| limit: 50, // optional | ||
| }) | ||
| // Get metadata | ||
| const file = await client.files.get('bucket-id', 'images/logo.png') | ||
| // Delete | ||
| await client.files.delete('bucket-id', 'images/logo.png') | ||
| ``` | ||
| ### Keys (`client.keys`) | ||
| ```ts | ||
| // Create | ||
| const key = await client.keys.create({ | ||
| name: 'Read-only key', | ||
| permissions: ['buckets:read', 'files:read'], | ||
| expiresAt: '2025-12-31T00:00:00Z', // optional | ||
| }) | ||
| // key.secret contains the raw key (only shown once) | ||
| // List (summary fields only: id, name, prefix, lastUsedAt, createdAt) | ||
| const { data: keys, meta } = await client.keys.list() | ||
| // Get (full detail: adds permissions, bucketIds, expiresAt) | ||
| const key = await client.keys.get('key-id') | ||
| // Delete | ||
| await client.keys.delete('key-id') | ||
| ``` | ||
| ## Permissions | ||
| `buckets:read` `buckets:write` `buckets:delete` `files:read` `files:write` `files:delete` `keys:read` `keys:write` | ||
| ## Error Handling | ||
| All errors extend `BucktError` with `.status` and `.message` properties: | ||
| | Class | Status | | ||
| |---|---| | ||
| | `ValidationError` | 400 | | ||
| | `UnauthorizedError` | 401 | | ||
| | `PaymentRequiredError` | 402 | | ||
| | `ForbiddenError` | 403 | | ||
| | `NotFoundError` | 404 | | ||
| | `TimeoutError` | 408 | | ||
| | `ConflictError` | 409 | | ||
| | `RateLimitError` | 429 | | ||
| ```ts | ||
| import { Buckt, NotFoundError, RateLimitError } from '@buckt/sdk' | ||
| try { | ||
| await client.buckets.get('nonexistent') | ||
| } catch (err) { | ||
| if (err instanceof NotFoundError) { | ||
| // handle 404 | ||
| } | ||
| if (err instanceof RateLimitError) { | ||
| // back off and retry | ||
| } | ||
| } | ||
| ``` | ||
| ## Pagination | ||
| All list methods return cursor-based pagination: | ||
| ```ts | ||
| let cursor: string | undefined | ||
| do { | ||
| const { data, meta } = await client.buckets.list({ cursor }) | ||
| // process data | ||
| cursor = meta.nextCursor | ||
| } while (cursor) | ||
| ``` | ||
| ## Build | ||
| Built with tsup. Outputs ESM (`dist/index.js`), CJS (`dist/index.cjs`), and type declarations. |
+157
-11
@@ -155,8 +155,9 @@ "use strict"; | ||
| } | ||
| async put(path, body, contentType) { | ||
| async put(path, body, contentType, extraHeaders) { | ||
| const res = await fetch(new URL(path, this.baseUrl).toString(), { | ||
| method: "PUT", | ||
| headers: this.headers( | ||
| contentType ? { "Content-Type": contentType } : void 0 | ||
| ), | ||
| headers: this.headers({ | ||
| ...contentType ? { "Content-Type": contentType } : void 0, | ||
| ...extraHeaders | ||
| }), | ||
| body | ||
@@ -183,2 +184,86 @@ }); | ||
| // src/resources/aws-accounts.ts | ||
| var AwsAccountsClient = class { | ||
| http; | ||
| constructor(http) { | ||
| this.http = http; | ||
| } | ||
| async connect(opts) { | ||
| const { data } = await this.http.post( | ||
| "/v1/aws-accounts", | ||
| opts ?? {} | ||
| ); | ||
| return data; | ||
| } | ||
| async list(opts) { | ||
| const { data, meta } = await this.http.get( | ||
| "/v1/aws-accounts", | ||
| { | ||
| cursor: opts?.cursor, | ||
| limit: opts?.limit?.toString() | ||
| } | ||
| ); | ||
| return { data, meta }; | ||
| } | ||
| async get(id) { | ||
| const { data } = await this.http.get(`/v1/aws-accounts/${id}`); | ||
| return data; | ||
| } | ||
| async update(id, opts) { | ||
| const { data } = await this.http.patch( | ||
| `/v1/aws-accounts/${id}`, | ||
| opts | ||
| ); | ||
| return data; | ||
| } | ||
| async validate(id) { | ||
| const { data } = await this.http.post( | ||
| `/v1/aws-accounts/${id}/validate`, | ||
| {} | ||
| ); | ||
| return data; | ||
| } | ||
| async disconnect(id) { | ||
| const { data } = await this.http.delete( | ||
| `/v1/aws-accounts/${id}` | ||
| ); | ||
| return data; | ||
| } | ||
| async listS3Buckets(id, opts) { | ||
| const { data, meta } = await this.http.get( | ||
| `/v1/aws-accounts/${id}/s3-buckets`, | ||
| { | ||
| cursor: opts?.cursor, | ||
| limit: opts?.limit?.toString() | ||
| } | ||
| ); | ||
| return { data, meta }; | ||
| } | ||
| async importBuckets(id, opts) { | ||
| const { data } = await this.http.post( | ||
| `/v1/aws-accounts/${id}/import`, | ||
| opts | ||
| ); | ||
| return data; | ||
| } | ||
| }; | ||
| // src/resources/billing.ts | ||
| var BillingClient = class { | ||
| http; | ||
| constructor(http) { | ||
| this.http = http; | ||
| } | ||
| async getUsage() { | ||
| const { data } = await this.http.get("/v1/billing/usage"); | ||
| return data; | ||
| } | ||
| async getSubscription() { | ||
| const { data } = await this.http.get( | ||
| "/v1/billing/subscription" | ||
| ); | ||
| return data; | ||
| } | ||
| }; | ||
| // src/resources/buckets.ts | ||
@@ -191,3 +276,6 @@ var BucketsClient = class { | ||
| async create(opts) { | ||
| const { data } = await this.http.post("/v1/buckets", opts); | ||
| const { data } = await this.http.post( | ||
| "/v1/buckets", | ||
| opts | ||
| ); | ||
| return data; | ||
@@ -208,8 +296,19 @@ } | ||
| async update(id, opts) { | ||
| const { data } = await this.http.patch(`/v1/buckets/${id}`, opts); | ||
| const { data } = await this.http.patch( | ||
| `/v1/buckets/${id}`, | ||
| opts | ||
| ); | ||
| return data; | ||
| } | ||
| async delete(id) { | ||
| await this.http.delete(`/v1/buckets/${id}`); | ||
| const { data } = await this.http.delete(`/v1/buckets/${id}`); | ||
| return data; | ||
| } | ||
| async retry(id) { | ||
| const { data } = await this.http.post( | ||
| `/v1/buckets/${id}/retry`, | ||
| {} | ||
| ); | ||
| return data; | ||
| } | ||
| }; | ||
@@ -223,7 +322,12 @@ | ||
| } | ||
| async upload(bucketId, path, body, contentType) { | ||
| async upload(bucketId, path, body, contentType, options) { | ||
| const extraHeaders = {}; | ||
| if (options?.optimization) { | ||
| extraHeaders["X-Buckt-Optimization"] = options.optimization; | ||
| } | ||
| const { data } = await this.http.put( | ||
| `/v1/buckets/${bucketId}/files/${path}`, | ||
| body, | ||
| contentType | ||
| contentType, | ||
| extraHeaders | ||
| ); | ||
@@ -250,3 +354,6 @@ return data; | ||
| async delete(bucketId, path) { | ||
| await this.http.delete(`/v1/buckets/${bucketId}/files/${path}`); | ||
| const { data } = await this.http.delete( | ||
| `/v1/buckets/${bucketId}/files/${path}` | ||
| ); | ||
| return data; | ||
| } | ||
@@ -275,18 +382,57 @@ }; | ||
| } | ||
| async get(id) { | ||
| const { data } = await this.http.get(`/v1/keys/${id}`); | ||
| return data; | ||
| } | ||
| async delete(id) { | ||
| await this.http.delete(`/v1/keys/${id}`); | ||
| const { data } = await this.http.delete( | ||
| `/v1/keys/${id}` | ||
| ); | ||
| return data; | ||
| } | ||
| }; | ||
| // src/resources/logs.ts | ||
| var LogsClient = class { | ||
| http; | ||
| constructor(http) { | ||
| this.http = http; | ||
| } | ||
| async list(opts) { | ||
| const { data, meta } = await this.http.get("/v1/logs", { | ||
| cursor: opts?.cursor, | ||
| limit: opts?.limit?.toString(), | ||
| method: opts?.method, | ||
| status: opts?.status, | ||
| path: opts?.path, | ||
| apiKeyId: opts?.apiKeyId, | ||
| bucketId: opts?.bucketId, | ||
| from: opts?.from?.toISOString(), | ||
| to: opts?.to?.toISOString() | ||
| }); | ||
| return { data, meta }; | ||
| } | ||
| async get(id) { | ||
| const { data } = await this.http.get(`/v1/logs/${id}`); | ||
| return data; | ||
| } | ||
| }; | ||
| // src/index.ts | ||
| var Buckt = class { | ||
| awsAccounts; | ||
| billing; | ||
| buckets; | ||
| files; | ||
| keys; | ||
| logs; | ||
| constructor(opts) { | ||
| const baseUrl = opts.baseUrl ?? "https://api.buckt.dev"; | ||
| const http = new HttpClient(baseUrl, opts.apiKey); | ||
| this.awsAccounts = new AwsAccountsClient(http); | ||
| this.billing = new BillingClient(http); | ||
| this.buckets = new BucketsClient(http); | ||
| this.files = new FilesClient(http); | ||
| this.keys = new KeysClient(http); | ||
| this.logs = new LogsClient(http); | ||
| } | ||
@@ -293,0 +439,0 @@ }; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../src/index.ts","../src/errors.ts","../src/http.ts","../src/resources/buckets.ts","../src/resources/files.ts","../src/resources/keys.ts"],"sourcesContent":["import { HttpClient } from \"./http\";\nimport { BucketsClient } from \"./resources/buckets\";\nimport { FilesClient } from \"./resources/files\";\nimport { KeysClient } from \"./resources/keys\";\nimport type { BucktOptions } from \"./types\";\n\nexport class Buckt {\n readonly buckets: BucketsClient;\n readonly files: FilesClient;\n readonly keys: KeysClient;\n\n constructor(opts: BucktOptions) {\n const baseUrl = opts.baseUrl ?? \"https://api.buckt.dev\";\n const http = new HttpClient(baseUrl, opts.apiKey);\n\n this.buckets = new BucketsClient(http);\n this.files = new FilesClient(http);\n this.keys = new KeysClient(http);\n }\n}\n\n// biome-ignore lint/performance/noBarrelFile: intentional SDK entry point\nexport {\n BucktError,\n ConflictError,\n ForbiddenError,\n NotFoundError,\n PaymentRequiredError,\n RateLimitError,\n TimeoutError,\n UnauthorizedError,\n ValidationError,\n} from \"./errors\";\nexport type {\n ApiKey,\n ApiKeyWithSecret,\n Bucket,\n BucketStatus,\n BucktOptions,\n CursorMeta,\n FileInfo,\n Permission,\n} from \"./types\";\n","export class BucktError extends Error {\n readonly status: number;\n\n constructor(message: string, status: number) {\n super(message);\n this.name = \"BucktError\";\n this.status = status;\n }\n}\n\nexport class NotFoundError extends BucktError {\n constructor(message = \"Not found\") {\n super(message, 404);\n this.name = \"NotFoundError\";\n }\n}\n\nexport class ForbiddenError extends BucktError {\n constructor(message = \"Forbidden\") {\n super(message, 403);\n this.name = \"ForbiddenError\";\n }\n}\n\nexport class UnauthorizedError extends BucktError {\n constructor(message = \"Unauthorized\") {\n super(message, 401);\n this.name = \"UnauthorizedError\";\n }\n}\n\nexport class ValidationError extends BucktError {\n constructor(message = \"Validation failed\") {\n super(message, 400);\n this.name = \"ValidationError\";\n }\n}\n\nexport class PaymentRequiredError extends BucktError {\n constructor(message = \"Payment required\") {\n super(message, 402);\n this.name = \"PaymentRequiredError\";\n }\n}\n\nexport class TimeoutError extends BucktError {\n constructor(message = \"Request timeout\") {\n super(message, 408);\n this.name = \"TimeoutError\";\n }\n}\n\nexport class ConflictError extends BucktError {\n constructor(message = \"Conflict\") {\n super(message, 409);\n this.name = \"ConflictError\";\n }\n}\n\nexport class RateLimitError extends BucktError {\n constructor(message = \"Rate limit exceeded\") {\n super(message, 429);\n this.name = \"RateLimitError\";\n }\n}\n","import {\n BucktError,\n ConflictError,\n ForbiddenError,\n NotFoundError,\n PaymentRequiredError,\n RateLimitError,\n TimeoutError,\n UnauthorizedError,\n ValidationError,\n} from \"./errors\";\nimport type { ApiErrorResponse, ApiResponse } from \"./types\";\n\nexport class HttpClient {\n private readonly baseUrl: string;\n private readonly apiKey: string;\n\n constructor(baseUrl: string, apiKey: string) {\n this.baseUrl = baseUrl;\n this.apiKey = apiKey;\n }\n\n private headers(extra?: Record<string, string>): Record<string, string> {\n return {\n Authorization: `Bearer ${this.apiKey}`,\n ...extra,\n };\n }\n\n private async handleResponse<T>(res: Response): Promise<ApiResponse<T>> {\n const body = (await res.json()) as ApiResponse<T> | ApiErrorResponse;\n\n if (!res.ok) {\n const message =\n (body as ApiErrorResponse).error?.message ?? res.statusText;\n switch (res.status) {\n case 400:\n throw new ValidationError(message);\n case 401:\n throw new UnauthorizedError(message);\n case 402:\n throw new PaymentRequiredError(message);\n case 403:\n throw new ForbiddenError(message);\n case 404:\n throw new NotFoundError(message);\n case 408:\n throw new TimeoutError(message);\n case 409:\n throw new ConflictError(message);\n case 429:\n throw new RateLimitError(message);\n default:\n throw new BucktError(message, res.status);\n }\n }\n\n return body as ApiResponse<T>;\n }\n\n async get<T>(\n path: string,\n params?: Record<string, string | undefined>\n ): Promise<ApiResponse<T>> {\n const url = new URL(path, this.baseUrl);\n if (params) {\n for (const [k, v] of Object.entries(params)) {\n if (v !== undefined) {\n url.searchParams.set(k, v);\n }\n }\n }\n const res = await fetch(url.toString(), { headers: this.headers() });\n return this.handleResponse<T>(res);\n }\n\n async post<T>(path: string, body: unknown): Promise<ApiResponse<T>> {\n const res = await fetch(new URL(path, this.baseUrl).toString(), {\n method: \"POST\",\n headers: this.headers({ \"Content-Type\": \"application/json\" }),\n body: JSON.stringify(body),\n });\n return this.handleResponse<T>(res);\n }\n\n async put<T>(\n path: string,\n body: BodyInit,\n contentType?: string\n ): Promise<ApiResponse<T>> {\n const res = await fetch(new URL(path, this.baseUrl).toString(), {\n method: \"PUT\",\n headers: this.headers(\n contentType ? { \"Content-Type\": contentType } : undefined\n ),\n body,\n });\n return this.handleResponse<T>(res);\n }\n\n async patch<T>(path: string, body: unknown): Promise<ApiResponse<T>> {\n const res = await fetch(new URL(path, this.baseUrl).toString(), {\n method: \"PATCH\",\n headers: this.headers({ \"Content-Type\": \"application/json\" }),\n body: JSON.stringify(body),\n });\n return this.handleResponse<T>(res);\n }\n\n async delete<T>(path: string): Promise<ApiResponse<T>> {\n const res = await fetch(new URL(path, this.baseUrl).toString(), {\n method: \"DELETE\",\n headers: this.headers(),\n });\n return this.handleResponse<T>(res);\n }\n}\n","import type { HttpClient } from \"../http\";\nimport type { Bucket, BucketStatus, CursorMeta } from \"../types\";\n\nexport class BucketsClient {\n private readonly http: HttpClient;\n\n constructor(http: HttpClient) {\n this.http = http;\n }\n\n async create(opts: { name: string; customDomain: string }): Promise<Bucket> {\n const { data } = await this.http.post<Bucket>(\"/v1/buckets\", opts);\n return data;\n }\n\n async list(opts?: {\n cursor?: string;\n limit?: number;\n status?: BucketStatus;\n }): Promise<{ data: Bucket[]; meta: CursorMeta }> {\n const { data, meta } = await this.http.get<Bucket[]>(\"/v1/buckets\", {\n cursor: opts?.cursor,\n limit: opts?.limit?.toString(),\n status: opts?.status,\n });\n return { data, meta: meta as CursorMeta };\n }\n\n async get(id: string): Promise<Bucket> {\n const { data } = await this.http.get<Bucket>(`/v1/buckets/${id}`);\n return data;\n }\n\n async update(id: string, opts: { name: string }): Promise<Bucket> {\n const { data } = await this.http.patch<Bucket>(`/v1/buckets/${id}`, opts);\n return data;\n }\n\n async delete(id: string): Promise<void> {\n await this.http.delete(`/v1/buckets/${id}`);\n }\n}\n","import type { HttpClient } from \"../http\";\nimport type { CursorMeta, FileInfo } from \"../types\";\n\nexport class FilesClient {\n private readonly http: HttpClient;\n\n constructor(http: HttpClient) {\n this.http = http;\n }\n\n async upload(\n bucketId: string,\n path: string,\n body: BodyInit,\n contentType?: string\n ): Promise<FileInfo> {\n const { data } = await this.http.put<FileInfo>(\n `/v1/buckets/${bucketId}/files/${path}`,\n body,\n contentType\n );\n return data;\n }\n\n async list(\n bucketId: string,\n opts?: { prefix?: string; cursor?: string; limit?: number }\n ): Promise<{ data: FileInfo[]; meta: CursorMeta }> {\n const { data, meta } = await this.http.get<FileInfo[]>(\n `/v1/buckets/${bucketId}/files`,\n {\n prefix: opts?.prefix,\n cursor: opts?.cursor,\n limit: opts?.limit?.toString(),\n }\n );\n return { data, meta: meta as CursorMeta };\n }\n\n async get(bucketId: string, path: string): Promise<FileInfo> {\n const { data } = await this.http.get<FileInfo>(\n `/v1/buckets/${bucketId}/files/${path}`\n );\n return data;\n }\n\n async delete(bucketId: string, path: string): Promise<void> {\n await this.http.delete(`/v1/buckets/${bucketId}/files/${path}`);\n }\n}\n","import type { HttpClient } from \"../http\";\nimport type {\n ApiKey,\n ApiKeyWithSecret,\n CursorMeta,\n Permission,\n} from \"../types\";\n\nexport class KeysClient {\n private readonly http: HttpClient;\n\n constructor(http: HttpClient) {\n this.http = http;\n }\n\n async create(opts: {\n name: string;\n permissions: Permission[];\n expiresAt?: Date;\n }): Promise<ApiKeyWithSecret> {\n const { data } = await this.http.post<ApiKeyWithSecret>(\"/v1/keys\", {\n ...opts,\n expiresAt: opts.expiresAt?.toISOString(),\n });\n return data;\n }\n\n async list(opts?: {\n cursor?: string;\n limit?: number;\n }): Promise<{ data: ApiKey[]; meta: CursorMeta }> {\n const { data, meta } = await this.http.get<ApiKey[]>(\"/v1/keys\", {\n cursor: opts?.cursor,\n limit: opts?.limit?.toString(),\n });\n return { data, meta: meta as CursorMeta };\n }\n\n async delete(id: string): Promise<void> {\n await this.http.delete(`/v1/keys/${id}`);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAO,IAAM,aAAN,cAAyB,MAAM;AAAA,EAC3B;AAAA,EAET,YAAY,SAAiB,QAAgB;AAC3C,UAAM,OAAO;AACb,SAAK,OAAO;AACZ,SAAK,SAAS;AAAA,EAChB;AACF;AAEO,IAAM,gBAAN,cAA4B,WAAW;AAAA,EAC5C,YAAY,UAAU,aAAa;AACjC,UAAM,SAAS,GAAG;AAClB,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,iBAAN,cAA6B,WAAW;AAAA,EAC7C,YAAY,UAAU,aAAa;AACjC,UAAM,SAAS,GAAG;AAClB,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,oBAAN,cAAgC,WAAW;AAAA,EAChD,YAAY,UAAU,gBAAgB;AACpC,UAAM,SAAS,GAAG;AAClB,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,kBAAN,cAA8B,WAAW;AAAA,EAC9C,YAAY,UAAU,qBAAqB;AACzC,UAAM,SAAS,GAAG;AAClB,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,uBAAN,cAAmC,WAAW;AAAA,EACnD,YAAY,UAAU,oBAAoB;AACxC,UAAM,SAAS,GAAG;AAClB,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,eAAN,cAA2B,WAAW;AAAA,EAC3C,YAAY,UAAU,mBAAmB;AACvC,UAAM,SAAS,GAAG;AAClB,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,gBAAN,cAA4B,WAAW;AAAA,EAC5C,YAAY,UAAU,YAAY;AAChC,UAAM,SAAS,GAAG;AAClB,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,iBAAN,cAA6B,WAAW;AAAA,EAC7C,YAAY,UAAU,uBAAuB;AAC3C,UAAM,SAAS,GAAG;AAClB,SAAK,OAAO;AAAA,EACd;AACF;;;ACnDO,IAAM,aAAN,MAAiB;AAAA,EACL;AAAA,EACA;AAAA,EAEjB,YAAY,SAAiB,QAAgB;AAC3C,SAAK,UAAU;AACf,SAAK,SAAS;AAAA,EAChB;AAAA,EAEQ,QAAQ,OAAwD;AACtE,WAAO;AAAA,MACL,eAAe,UAAU,KAAK,MAAM;AAAA,MACpC,GAAG;AAAA,IACL;AAAA,EACF;AAAA,EAEA,MAAc,eAAkB,KAAwC;AACtE,UAAM,OAAQ,MAAM,IAAI,KAAK;AAE7B,QAAI,CAAC,IAAI,IAAI;AACX,YAAM,UACH,KAA0B,OAAO,WAAW,IAAI;AACnD,cAAQ,IAAI,QAAQ;AAAA,QAClB,KAAK;AACH,gBAAM,IAAI,gBAAgB,OAAO;AAAA,QACnC,KAAK;AACH,gBAAM,IAAI,kBAAkB,OAAO;AAAA,QACrC,KAAK;AACH,gBAAM,IAAI,qBAAqB,OAAO;AAAA,QACxC,KAAK;AACH,gBAAM,IAAI,eAAe,OAAO;AAAA,QAClC,KAAK;AACH,gBAAM,IAAI,cAAc,OAAO;AAAA,QACjC,KAAK;AACH,gBAAM,IAAI,aAAa,OAAO;AAAA,QAChC,KAAK;AACH,gBAAM,IAAI,cAAc,OAAO;AAAA,QACjC,KAAK;AACH,gBAAM,IAAI,eAAe,OAAO;AAAA,QAClC;AACE,gBAAM,IAAI,WAAW,SAAS,IAAI,MAAM;AAAA,MAC5C;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,IACJ,MACA,QACyB;AACzB,UAAM,MAAM,IAAI,IAAI,MAAM,KAAK,OAAO;AACtC,QAAI,QAAQ;AACV,iBAAW,CAAC,GAAG,CAAC,KAAK,OAAO,QAAQ,MAAM,GAAG;AAC3C,YAAI,MAAM,QAAW;AACnB,cAAI,aAAa,IAAI,GAAG,CAAC;AAAA,QAC3B;AAAA,MACF;AAAA,IACF;AACA,UAAM,MAAM,MAAM,MAAM,IAAI,SAAS,GAAG,EAAE,SAAS,KAAK,QAAQ,EAAE,CAAC;AACnE,WAAO,KAAK,eAAkB,GAAG;AAAA,EACnC;AAAA,EAEA,MAAM,KAAQ,MAAc,MAAwC;AAClE,UAAM,MAAM,MAAM,MAAM,IAAI,IAAI,MAAM,KAAK,OAAO,EAAE,SAAS,GAAG;AAAA,MAC9D,QAAQ;AAAA,MACR,SAAS,KAAK,QAAQ,EAAE,gBAAgB,mBAAmB,CAAC;AAAA,MAC5D,MAAM,KAAK,UAAU,IAAI;AAAA,IAC3B,CAAC;AACD,WAAO,KAAK,eAAkB,GAAG;AAAA,EACnC;AAAA,EAEA,MAAM,IACJ,MACA,MACA,aACyB;AACzB,UAAM,MAAM,MAAM,MAAM,IAAI,IAAI,MAAM,KAAK,OAAO,EAAE,SAAS,GAAG;AAAA,MAC9D,QAAQ;AAAA,MACR,SAAS,KAAK;AAAA,QACZ,cAAc,EAAE,gBAAgB,YAAY,IAAI;AAAA,MAClD;AAAA,MACA;AAAA,IACF,CAAC;AACD,WAAO,KAAK,eAAkB,GAAG;AAAA,EACnC;AAAA,EAEA,MAAM,MAAS,MAAc,MAAwC;AACnE,UAAM,MAAM,MAAM,MAAM,IAAI,IAAI,MAAM,KAAK,OAAO,EAAE,SAAS,GAAG;AAAA,MAC9D,QAAQ;AAAA,MACR,SAAS,KAAK,QAAQ,EAAE,gBAAgB,mBAAmB,CAAC;AAAA,MAC5D,MAAM,KAAK,UAAU,IAAI;AAAA,IAC3B,CAAC;AACD,WAAO,KAAK,eAAkB,GAAG;AAAA,EACnC;AAAA,EAEA,MAAM,OAAU,MAAuC;AACrD,UAAM,MAAM,MAAM,MAAM,IAAI,IAAI,MAAM,KAAK,OAAO,EAAE,SAAS,GAAG;AAAA,MAC9D,QAAQ;AAAA,MACR,SAAS,KAAK,QAAQ;AAAA,IACxB,CAAC;AACD,WAAO,KAAK,eAAkB,GAAG;AAAA,EACnC;AACF;;;ACjHO,IAAM,gBAAN,MAAoB;AAAA,EACR;AAAA,EAEjB,YAAY,MAAkB;AAC5B,SAAK,OAAO;AAAA,EACd;AAAA,EAEA,MAAM,OAAO,MAA+D;AAC1E,UAAM,EAAE,KAAK,IAAI,MAAM,KAAK,KAAK,KAAa,eAAe,IAAI;AACjE,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,KAAK,MAIuC;AAChD,UAAM,EAAE,MAAM,KAAK,IAAI,MAAM,KAAK,KAAK,IAAc,eAAe;AAAA,MAClE,QAAQ,MAAM;AAAA,MACd,OAAO,MAAM,OAAO,SAAS;AAAA,MAC7B,QAAQ,MAAM;AAAA,IAChB,CAAC;AACD,WAAO,EAAE,MAAM,KAAyB;AAAA,EAC1C;AAAA,EAEA,MAAM,IAAI,IAA6B;AACrC,UAAM,EAAE,KAAK,IAAI,MAAM,KAAK,KAAK,IAAY,eAAe,EAAE,EAAE;AAChE,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,OAAO,IAAY,MAAyC;AAChE,UAAM,EAAE,KAAK,IAAI,MAAM,KAAK,KAAK,MAAc,eAAe,EAAE,IAAI,IAAI;AACxE,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,OAAO,IAA2B;AACtC,UAAM,KAAK,KAAK,OAAO,eAAe,EAAE,EAAE;AAAA,EAC5C;AACF;;;ACtCO,IAAM,cAAN,MAAkB;AAAA,EACN;AAAA,EAEjB,YAAY,MAAkB;AAC5B,SAAK,OAAO;AAAA,EACd;AAAA,EAEA,MAAM,OACJ,UACA,MACA,MACA,aACmB;AACnB,UAAM,EAAE,KAAK,IAAI,MAAM,KAAK,KAAK;AAAA,MAC/B,eAAe,QAAQ,UAAU,IAAI;AAAA,MACrC;AAAA,MACA;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,KACJ,UACA,MACiD;AACjD,UAAM,EAAE,MAAM,KAAK,IAAI,MAAM,KAAK,KAAK;AAAA,MACrC,eAAe,QAAQ;AAAA,MACvB;AAAA,QACE,QAAQ,MAAM;AAAA,QACd,QAAQ,MAAM;AAAA,QACd,OAAO,MAAM,OAAO,SAAS;AAAA,MAC/B;AAAA,IACF;AACA,WAAO,EAAE,MAAM,KAAyB;AAAA,EAC1C;AAAA,EAEA,MAAM,IAAI,UAAkB,MAAiC;AAC3D,UAAM,EAAE,KAAK,IAAI,MAAM,KAAK,KAAK;AAAA,MAC/B,eAAe,QAAQ,UAAU,IAAI;AAAA,IACvC;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,OAAO,UAAkB,MAA6B;AAC1D,UAAM,KAAK,KAAK,OAAO,eAAe,QAAQ,UAAU,IAAI,EAAE;AAAA,EAChE;AACF;;;ACzCO,IAAM,aAAN,MAAiB;AAAA,EACL;AAAA,EAEjB,YAAY,MAAkB;AAC5B,SAAK,OAAO;AAAA,EACd;AAAA,EAEA,MAAM,OAAO,MAIiB;AAC5B,UAAM,EAAE,KAAK,IAAI,MAAM,KAAK,KAAK,KAAuB,YAAY;AAAA,MAClE,GAAG;AAAA,MACH,WAAW,KAAK,WAAW,YAAY;AAAA,IACzC,CAAC;AACD,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,KAAK,MAGuC;AAChD,UAAM,EAAE,MAAM,KAAK,IAAI,MAAM,KAAK,KAAK,IAAc,YAAY;AAAA,MAC/D,QAAQ,MAAM;AAAA,MACd,OAAO,MAAM,OAAO,SAAS;AAAA,IAC/B,CAAC;AACD,WAAO,EAAE,MAAM,KAAyB;AAAA,EAC1C;AAAA,EAEA,MAAM,OAAO,IAA2B;AACtC,UAAM,KAAK,KAAK,OAAO,YAAY,EAAE,EAAE;AAAA,EACzC;AACF;;;ALnCO,IAAM,QAAN,MAAY;AAAA,EACR;AAAA,EACA;AAAA,EACA;AAAA,EAET,YAAY,MAAoB;AAC9B,UAAM,UAAU,KAAK,WAAW;AAChC,UAAM,OAAO,IAAI,WAAW,SAAS,KAAK,MAAM;AAEhD,SAAK,UAAU,IAAI,cAAc,IAAI;AACrC,SAAK,QAAQ,IAAI,YAAY,IAAI;AACjC,SAAK,OAAO,IAAI,WAAW,IAAI;AAAA,EACjC;AACF;","names":[]} | ||
| {"version":3,"sources":["../src/index.ts","../src/errors.ts","../src/http.ts","../src/resources/aws-accounts.ts","../src/resources/billing.ts","../src/resources/buckets.ts","../src/resources/files.ts","../src/resources/keys.ts","../src/resources/logs.ts"],"sourcesContent":["import { HttpClient } from \"./http\";\nimport { AwsAccountsClient } from \"./resources/aws-accounts\";\nimport { BillingClient } from \"./resources/billing\";\nimport { BucketsClient } from \"./resources/buckets\";\nimport { FilesClient } from \"./resources/files\";\nimport { KeysClient } from \"./resources/keys\";\nimport { LogsClient } from \"./resources/logs\";\nimport type { BucktOptions } from \"./types\";\n\nexport class Buckt {\n readonly awsAccounts: AwsAccountsClient;\n readonly billing: BillingClient;\n readonly buckets: BucketsClient;\n readonly files: FilesClient;\n readonly keys: KeysClient;\n readonly logs: LogsClient;\n\n constructor(opts: BucktOptions) {\n const baseUrl = opts.baseUrl ?? \"https://api.buckt.dev\";\n const http = new HttpClient(baseUrl, opts.apiKey);\n\n this.awsAccounts = new AwsAccountsClient(http);\n this.billing = new BillingClient(http);\n this.buckets = new BucketsClient(http);\n this.files = new FilesClient(http);\n this.keys = new KeysClient(http);\n this.logs = new LogsClient(http);\n }\n}\n\n// biome-ignore lint/performance/noBarrelFile: intentional SDK entry point\nexport {\n BucktError,\n ConflictError,\n ForbiddenError,\n NotFoundError,\n PaymentRequiredError,\n RateLimitError,\n TimeoutError,\n UnauthorizedError,\n ValidationError,\n} from \"./errors\";\nexport type {\n ApiKey,\n ApiKeyCreateResponse,\n ApiKeyDetail,\n ApiKeyWithSecret,\n AwsAccount,\n AwsAccountStatus,\n Bucket,\n BucketCountUsage,\n BucketStatus,\n BucktOptions,\n ByteUsage,\n CursorMeta,\n FileInfo,\n LogListFilters,\n LogRecord,\n LogSummary,\n ManagedSettings,\n OptimizationMode,\n Permission,\n PlanLimits,\n PlanName,\n ResourceObject,\n S3BucketInfo,\n Subscription,\n Usage,\n WriteResponse,\n} from \"./types\";\n","export class BucktError extends Error {\n readonly status: number;\n\n constructor(message: string, status: number) {\n super(message);\n this.name = \"BucktError\";\n this.status = status;\n }\n}\n\nexport class NotFoundError extends BucktError {\n constructor(message = \"Not found\") {\n super(message, 404);\n this.name = \"NotFoundError\";\n }\n}\n\nexport class ForbiddenError extends BucktError {\n constructor(message = \"Forbidden\") {\n super(message, 403);\n this.name = \"ForbiddenError\";\n }\n}\n\nexport class UnauthorizedError extends BucktError {\n constructor(message = \"Unauthorized\") {\n super(message, 401);\n this.name = \"UnauthorizedError\";\n }\n}\n\nexport class ValidationError extends BucktError {\n constructor(message = \"Validation failed\") {\n super(message, 400);\n this.name = \"ValidationError\";\n }\n}\n\nexport class PaymentRequiredError extends BucktError {\n constructor(message = \"Payment required\") {\n super(message, 402);\n this.name = \"PaymentRequiredError\";\n }\n}\n\nexport class TimeoutError extends BucktError {\n constructor(message = \"Request timeout\") {\n super(message, 408);\n this.name = \"TimeoutError\";\n }\n}\n\nexport class ConflictError extends BucktError {\n constructor(message = \"Conflict\") {\n super(message, 409);\n this.name = \"ConflictError\";\n }\n}\n\nexport class RateLimitError extends BucktError {\n constructor(message = \"Rate limit exceeded\") {\n super(message, 429);\n this.name = \"RateLimitError\";\n }\n}\n","import {\n BucktError,\n ConflictError,\n ForbiddenError,\n NotFoundError,\n PaymentRequiredError,\n RateLimitError,\n TimeoutError,\n UnauthorizedError,\n ValidationError,\n} from \"./errors\";\nimport type { ApiErrorResponse, ApiResponse } from \"./types\";\n\nexport class HttpClient {\n private readonly baseUrl: string;\n private readonly apiKey: string;\n\n constructor(baseUrl: string, apiKey: string) {\n this.baseUrl = baseUrl;\n this.apiKey = apiKey;\n }\n\n private headers(extra?: Record<string, string>): Record<string, string> {\n return {\n Authorization: `Bearer ${this.apiKey}`,\n ...extra,\n };\n }\n\n private async handleResponse<T>(res: Response): Promise<ApiResponse<T>> {\n const body = (await res.json()) as ApiResponse<T> | ApiErrorResponse;\n\n if (!res.ok) {\n const message =\n (body as ApiErrorResponse).error?.message ?? res.statusText;\n switch (res.status) {\n case 400:\n throw new ValidationError(message);\n case 401:\n throw new UnauthorizedError(message);\n case 402:\n throw new PaymentRequiredError(message);\n case 403:\n throw new ForbiddenError(message);\n case 404:\n throw new NotFoundError(message);\n case 408:\n throw new TimeoutError(message);\n case 409:\n throw new ConflictError(message);\n case 429:\n throw new RateLimitError(message);\n default:\n throw new BucktError(message, res.status);\n }\n }\n\n return body as ApiResponse<T>;\n }\n\n async get<T>(\n path: string,\n params?: Record<string, string | undefined>\n ): Promise<ApiResponse<T>> {\n const url = new URL(path, this.baseUrl);\n if (params) {\n for (const [k, v] of Object.entries(params)) {\n if (v !== undefined) {\n url.searchParams.set(k, v);\n }\n }\n }\n const res = await fetch(url.toString(), { headers: this.headers() });\n return this.handleResponse<T>(res);\n }\n\n async post<T>(path: string, body: unknown): Promise<ApiResponse<T>> {\n const res = await fetch(new URL(path, this.baseUrl).toString(), {\n method: \"POST\",\n headers: this.headers({ \"Content-Type\": \"application/json\" }),\n body: JSON.stringify(body),\n });\n return this.handleResponse<T>(res);\n }\n\n async put<T>(\n path: string,\n body: BodyInit,\n contentType?: string,\n extraHeaders?: Record<string, string>\n ): Promise<ApiResponse<T>> {\n const res = await fetch(new URL(path, this.baseUrl).toString(), {\n method: \"PUT\",\n headers: this.headers({\n ...(contentType ? { \"Content-Type\": contentType } : undefined),\n ...extraHeaders,\n }),\n body,\n });\n return this.handleResponse<T>(res);\n }\n\n async patch<T>(path: string, body: unknown): Promise<ApiResponse<T>> {\n const res = await fetch(new URL(path, this.baseUrl).toString(), {\n method: \"PATCH\",\n headers: this.headers({ \"Content-Type\": \"application/json\" }),\n body: JSON.stringify(body),\n });\n return this.handleResponse<T>(res);\n }\n\n async delete<T>(path: string): Promise<ApiResponse<T>> {\n const res = await fetch(new URL(path, this.baseUrl).toString(), {\n method: \"DELETE\",\n headers: this.headers(),\n });\n return this.handleResponse<T>(res);\n }\n}\n","import type { HttpClient } from \"../http\";\nimport type {\n AwsAccount,\n CursorMeta,\n S3BucketInfo,\n WriteResponse,\n} from \"../types\";\n\nexport class AwsAccountsClient {\n private readonly http: HttpClient;\n\n constructor(http: HttpClient) {\n this.http = http;\n }\n\n async connect(opts?: {\n label?: string;\n }): Promise<WriteResponse<\"aws_account\">> {\n const { data } = await this.http.post<WriteResponse<\"aws_account\">>(\n \"/v1/aws-accounts\",\n opts ?? {}\n );\n return data;\n }\n\n async list(opts?: {\n cursor?: string;\n limit?: number;\n }): Promise<{ data: AwsAccount[]; meta: CursorMeta }> {\n const { data, meta } = await this.http.get<AwsAccount[]>(\n \"/v1/aws-accounts\",\n {\n cursor: opts?.cursor,\n limit: opts?.limit?.toString(),\n }\n );\n return { data, meta: meta as CursorMeta };\n }\n\n async get(id: string): Promise<AwsAccount> {\n const { data } = await this.http.get<AwsAccount>(`/v1/aws-accounts/${id}`);\n return data;\n }\n\n async update(\n id: string,\n opts: { roleArn?: string; stackId?: string; label?: string }\n ): Promise<WriteResponse<\"aws_account\">> {\n const { data } = await this.http.patch<WriteResponse<\"aws_account\">>(\n `/v1/aws-accounts/${id}`,\n opts\n );\n return data;\n }\n\n async validate(id: string): Promise<WriteResponse<\"aws_account\">> {\n const { data } = await this.http.post<WriteResponse<\"aws_account\">>(\n `/v1/aws-accounts/${id}/validate`,\n {}\n );\n return data;\n }\n\n async disconnect(id: string): Promise<WriteResponse<\"aws_account\">> {\n const { data } = await this.http.delete<WriteResponse<\"aws_account\">>(\n `/v1/aws-accounts/${id}`\n );\n return data;\n }\n\n async listS3Buckets(\n id: string,\n opts?: { cursor?: string; limit?: number }\n ): Promise<{ data: S3BucketInfo[]; meta: CursorMeta }> {\n const { data, meta } = await this.http.get<S3BucketInfo[]>(\n `/v1/aws-accounts/${id}/s3-buckets`,\n {\n cursor: opts?.cursor,\n limit: opts?.limit?.toString(),\n }\n );\n return { data, meta: meta as CursorMeta };\n }\n\n async importBuckets(\n id: string,\n opts: { bucketNames: string[] }\n ): Promise<WriteResponse<\"bucket\">[]> {\n const { data } = await this.http.post<WriteResponse<\"bucket\">[]>(\n `/v1/aws-accounts/${id}/import`,\n opts\n );\n return data;\n }\n}\n","import type { HttpClient } from \"../http\";\nimport type { Subscription, Usage } from \"../types\";\n\nexport class BillingClient {\n private readonly http: HttpClient;\n\n constructor(http: HttpClient) {\n this.http = http;\n }\n\n async getUsage(): Promise<Usage> {\n const { data } = await this.http.get<Usage>(\"/v1/billing/usage\");\n return data;\n }\n\n async getSubscription(): Promise<Subscription> {\n const { data } = await this.http.get<Subscription>(\n \"/v1/billing/subscription\"\n );\n return data;\n }\n}\n","import type { HttpClient } from \"../http\";\nimport type {\n Bucket,\n BucketStatus,\n BucketVisibility,\n CachePreset,\n CursorMeta,\n OptimizationMode,\n WriteResponse,\n} from \"../types\";\n\nexport class BucketsClient {\n private readonly http: HttpClient;\n\n constructor(http: HttpClient) {\n this.http = http;\n }\n\n async create(opts: {\n name: string;\n customDomain: string;\n region?: string;\n visibility?: BucketVisibility;\n cachePreset?: CachePreset;\n corsOrigins?: string[];\n lifecycleTtlDays?: number | null;\n maxFileSizeBytes?: number | null;\n allowedMimeTypes?: string[] | null;\n optimizationMode?: OptimizationMode;\n awsAccountId?: string;\n }): Promise<WriteResponse<\"bucket\">> {\n const { data } = await this.http.post<WriteResponse<\"bucket\">>(\n \"/v1/buckets\",\n opts\n );\n return data;\n }\n\n async list(opts?: {\n cursor?: string;\n limit?: number;\n status?: BucketStatus;\n }): Promise<{ data: Bucket[]; meta: CursorMeta }> {\n const { data, meta } = await this.http.get<Bucket[]>(\"/v1/buckets\", {\n cursor: opts?.cursor,\n limit: opts?.limit?.toString(),\n status: opts?.status,\n });\n return { data, meta: meta as CursorMeta };\n }\n\n async get(id: string): Promise<Bucket> {\n const { data } = await this.http.get<Bucket>(`/v1/buckets/${id}`);\n return data;\n }\n\n async update(\n id: string,\n opts: {\n name?: string;\n visibility?: BucketVisibility;\n cachePreset?: CachePreset;\n cacheControlOverride?: string | null;\n corsOrigins?: string[];\n lifecycleTtlDays?: number | null;\n maxFileSizeBytes?: number | null;\n allowedMimeTypes?: string[] | null;\n optimizationMode?: OptimizationMode;\n }\n ): Promise<WriteResponse<\"bucket\">> {\n const { data } = await this.http.patch<WriteResponse<\"bucket\">>(\n `/v1/buckets/${id}`,\n opts\n );\n return data;\n }\n\n async delete(\n id: string\n ): Promise<WriteResponse<\"bucket\"> & { status: \"deleting\" }> {\n const { data } = await this.http.delete<\n WriteResponse<\"bucket\"> & { status: \"deleting\" }\n >(`/v1/buckets/${id}`);\n return data;\n }\n\n async retry(id: string): Promise<WriteResponse<\"bucket\">> {\n const { data } = await this.http.post<WriteResponse<\"bucket\">>(\n `/v1/buckets/${id}/retry`,\n {}\n );\n return data;\n }\n}\n","import type { HttpClient } from \"../http\";\nimport type {\n CursorMeta,\n FileInfo,\n OptimizationMode,\n WriteResponse,\n} from \"../types\";\n\nexport class FilesClient {\n private readonly http: HttpClient;\n\n constructor(http: HttpClient) {\n this.http = http;\n }\n\n async upload(\n bucketId: string,\n path: string,\n body: BodyInit,\n contentType?: string,\n options?: { optimization?: OptimizationMode }\n ): Promise<FileInfo> {\n const extraHeaders: Record<string, string> = {};\n if (options?.optimization) {\n extraHeaders[\"X-Buckt-Optimization\"] = options.optimization;\n }\n const { data } = await this.http.put<FileInfo>(\n `/v1/buckets/${bucketId}/files/${path}`,\n body,\n contentType,\n extraHeaders\n );\n return data;\n }\n\n async list(\n bucketId: string,\n opts?: { prefix?: string; cursor?: string; limit?: number }\n ): Promise<{ data: FileInfo[]; meta: CursorMeta }> {\n const { data, meta } = await this.http.get<FileInfo[]>(\n `/v1/buckets/${bucketId}/files`,\n {\n prefix: opts?.prefix,\n cursor: opts?.cursor,\n limit: opts?.limit?.toString(),\n }\n );\n return { data, meta: meta as CursorMeta };\n }\n\n async get(bucketId: string, path: string): Promise<FileInfo> {\n const { data } = await this.http.get<FileInfo>(\n `/v1/buckets/${bucketId}/files/${path}`\n );\n return data;\n }\n\n async delete(bucketId: string, path: string): Promise<WriteResponse<\"file\">> {\n const { data } = await this.http.delete<WriteResponse<\"file\">>(\n `/v1/buckets/${bucketId}/files/${path}`\n );\n return data;\n }\n}\n","import type { HttpClient } from \"../http\";\nimport type {\n ApiKey,\n ApiKeyCreateResponse,\n ApiKeyDetail,\n CursorMeta,\n Permission,\n WriteResponse,\n} from \"../types\";\n\nexport class KeysClient {\n private readonly http: HttpClient;\n\n constructor(http: HttpClient) {\n this.http = http;\n }\n\n async create(opts: {\n name: string;\n permissions: Permission[];\n expiresAt?: Date;\n bucketIds?: string[];\n }): Promise<ApiKeyCreateResponse> {\n const { data } = await this.http.post<ApiKeyCreateResponse>(\"/v1/keys\", {\n ...opts,\n expiresAt: opts.expiresAt?.toISOString(),\n });\n return data;\n }\n\n async list(opts?: {\n cursor?: string;\n limit?: number;\n }): Promise<{ data: ApiKey[]; meta: CursorMeta }> {\n const { data, meta } = await this.http.get<ApiKey[]>(\"/v1/keys\", {\n cursor: opts?.cursor,\n limit: opts?.limit?.toString(),\n });\n return { data, meta: meta as CursorMeta };\n }\n\n async get(id: string): Promise<ApiKeyDetail> {\n const { data } = await this.http.get<ApiKeyDetail>(`/v1/keys/${id}`);\n return data;\n }\n\n async delete(id: string): Promise<WriteResponse<\"api_key\">> {\n const { data } = await this.http.delete<WriteResponse<\"api_key\">>(\n `/v1/keys/${id}`\n );\n return data;\n }\n}\n","import type { HttpClient } from \"../http\";\nimport type {\n CursorMeta,\n LogListFilters,\n LogRecord,\n LogSummary,\n} from \"../types\";\n\nexport class LogsClient {\n private readonly http: HttpClient;\n\n constructor(http: HttpClient) {\n this.http = http;\n }\n\n async list(\n opts?: LogListFilters\n ): Promise<{ data: LogSummary[]; meta: CursorMeta }> {\n const { data, meta } = await this.http.get<LogSummary[]>(\"/v1/logs\", {\n cursor: opts?.cursor,\n limit: opts?.limit?.toString(),\n method: opts?.method,\n status: opts?.status,\n path: opts?.path,\n apiKeyId: opts?.apiKeyId,\n bucketId: opts?.bucketId,\n from: opts?.from?.toISOString(),\n to: opts?.to?.toISOString(),\n });\n return { data, meta: meta as CursorMeta };\n }\n\n async get(id: string): Promise<LogRecord> {\n const { data } = await this.http.get<LogRecord>(`/v1/logs/${id}`);\n return data;\n }\n}\n"],"mappings":"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","names":[]} |
+211
-21
| type BucketStatus = "pending" | "provisioning" | "active" | "failed" | "deleting"; | ||
| type Permission = "buckets:read" | "buckets:write" | "buckets:delete" | "files:read" | "files:write" | "files:delete"; | ||
| type Permission = "buckets:read" | "buckets:write" | "buckets:delete" | "files:read" | "files:write" | "files:delete" | "aws-accounts:read" | "aws-accounts:write" | "aws-accounts:delete" | "logs:read"; | ||
| type BucketVisibility = "public" | "private"; | ||
| type CachePreset = "no-cache" | "short" | "standard" | "aggressive" | "immutable"; | ||
| type OptimizationMode = "none" | "light" | "balanced" | "maximum"; | ||
| interface ManagedSettings { | ||
| allowedMimeTypes?: boolean; | ||
| cache?: boolean; | ||
| cors?: boolean; | ||
| lifecycle?: boolean; | ||
| maxFileSize?: boolean; | ||
| optimization?: boolean; | ||
| visibility?: boolean; | ||
| } | ||
| interface Bucket { | ||
| acmCertArn: string | null; | ||
| allowedMimeTypes: string[] | null; | ||
| awsAccountId: string | null; | ||
| bandwidthUsedBytes: number; | ||
| cloudfrontDistributionId: string | null; | ||
| cacheControlOverride: string | null; | ||
| cachePreset: CachePreset; | ||
| corsOrigins: string[]; | ||
| createdAt: string; | ||
| customDomain: string; | ||
| dnsRecords: unknown | null; | ||
| domainConnectProvider: string | null; | ||
| id: string; | ||
| isImported: boolean; | ||
| isManagedDomain: boolean; | ||
| lifecycleTtlDays: number | null; | ||
| managedSettings: ManagedSettings | null; | ||
| maxFileSizeBytes: number | null; | ||
| name: string; | ||
| orgId: string; | ||
| provisioningJobId: string | null; | ||
| object: "bucket"; | ||
| optimizationMode: OptimizationMode; | ||
| region: string; | ||
| s3BucketName: string; | ||
| slug: string; | ||
| status: BucketStatus; | ||
| storageUsedBytes: number; | ||
| updatedAt: string; | ||
| visibility: BucketVisibility; | ||
| } | ||
| type AwsAccountStatus = "pending" | "validating" | "active" | "failed"; | ||
| interface AwsAccount { | ||
| awsAccountId: string; | ||
| createdAt: string; | ||
| externalId: string; | ||
| id: string; | ||
| label: string | null; | ||
| lastValidatedAt: string | null; | ||
| object: "aws_account"; | ||
| roleArn: string; | ||
| stackId: string | null; | ||
| status: AwsAccountStatus; | ||
| updatedAt: string; | ||
| } | ||
| interface S3BucketInfo { | ||
| creationDate: string; | ||
| id: string; | ||
| object: "s3_bucket"; | ||
| } | ||
| interface ApiKey { | ||
| createdAt: string; | ||
| expiresAt: string | null; | ||
| id: string; | ||
| lastUsedAt: string | null; | ||
| name: string; | ||
| permissions: Permission[]; | ||
| object: "api_key"; | ||
| prefix: string; | ||
| } | ||
| interface ApiKeyWithSecret extends ApiKey { | ||
| interface ApiKeyDetail extends ApiKey { | ||
| bucketIds: string[] | null; | ||
| expiresAt: string | null; | ||
| permissions: Permission[]; | ||
| } | ||
| interface ApiKeyWithSecret extends ApiKeyDetail { | ||
| hashedKey: string; | ||
@@ -36,5 +79,7 @@ key: string; | ||
| interface FileInfo { | ||
| contentType: string; | ||
| contentType?: string; | ||
| id: string; | ||
| key: string; | ||
| lastModified: string; | ||
| object: "file"; | ||
| size: number; | ||
@@ -47,2 +92,42 @@ url?: string; | ||
| } | ||
| type ResourceObject = "bucket" | "aws_account" | "api_key" | "file" | "s3_bucket" | "log"; | ||
| interface LogSummary { | ||
| apiKeyId: string | null; | ||
| bucketId: string | null; | ||
| createdAt: string; | ||
| durationMs: number; | ||
| errorMessage: string | null; | ||
| id: string; | ||
| method: string; | ||
| object: "log"; | ||
| path: string; | ||
| statusCode: number; | ||
| } | ||
| interface LogRecord extends LogSummary { | ||
| ip: string | null; | ||
| requestBody: unknown; | ||
| requestHeaders: Record<string, string> | null; | ||
| requestId: string; | ||
| responseBody: unknown; | ||
| routePattern: string | null; | ||
| userAgent: string | null; | ||
| } | ||
| interface LogListFilters { | ||
| apiKeyId?: string; | ||
| bucketId?: string; | ||
| cursor?: string; | ||
| from?: Date; | ||
| limit?: number; | ||
| method?: string; | ||
| path?: string; | ||
| status?: string; | ||
| to?: Date; | ||
| } | ||
| interface WriteResponse<T extends ResourceObject> { | ||
| id: string; | ||
| object: T; | ||
| } | ||
| interface ApiKeyCreateResponse extends WriteResponse<"api_key"> { | ||
| key: string; | ||
| } | ||
| interface ApiResponse<T> { | ||
@@ -57,2 +142,30 @@ data: T; | ||
| } | ||
| type PlanName = "free" | "pro" | "enterprise"; | ||
| interface PlanLimits { | ||
| maxBandwidthBytesPerMonth: number | null; | ||
| maxBuckets: number | null; | ||
| maxRequestsPerMinute: number | null; | ||
| maxStorageBytes: number | null; | ||
| } | ||
| interface Subscription { | ||
| cancelAtPeriodEnd: boolean; | ||
| limits: PlanLimits; | ||
| periodEnd: string | null; | ||
| periodStart: string | null; | ||
| plan: PlanName; | ||
| status: string; | ||
| } | ||
| interface BucketCountUsage { | ||
| limit: number; | ||
| used: number; | ||
| } | ||
| interface ByteUsage { | ||
| limitBytes: number; | ||
| usedBytes: number; | ||
| } | ||
| interface Usage { | ||
| bandwidth: ByteUsage; | ||
| bucketCount: BucketCountUsage; | ||
| storage: ByteUsage; | ||
| } | ||
@@ -67,3 +180,3 @@ declare class HttpClient { | ||
| post<T>(path: string, body: unknown): Promise<ApiResponse<T>>; | ||
| put<T>(path: string, body: BodyInit, contentType?: string): Promise<ApiResponse<T>>; | ||
| put<T>(path: string, body: BodyInit, contentType?: string, extraHeaders?: Record<string, string>): Promise<ApiResponse<T>>; | ||
| patch<T>(path: string, body: unknown): Promise<ApiResponse<T>>; | ||
@@ -73,2 +186,42 @@ delete<T>(path: string): Promise<ApiResponse<T>>; | ||
| declare class AwsAccountsClient { | ||
| private readonly http; | ||
| constructor(http: HttpClient); | ||
| connect(opts?: { | ||
| label?: string; | ||
| }): Promise<WriteResponse<"aws_account">>; | ||
| list(opts?: { | ||
| cursor?: string; | ||
| limit?: number; | ||
| }): Promise<{ | ||
| data: AwsAccount[]; | ||
| meta: CursorMeta; | ||
| }>; | ||
| get(id: string): Promise<AwsAccount>; | ||
| update(id: string, opts: { | ||
| roleArn?: string; | ||
| stackId?: string; | ||
| label?: string; | ||
| }): Promise<WriteResponse<"aws_account">>; | ||
| validate(id: string): Promise<WriteResponse<"aws_account">>; | ||
| disconnect(id: string): Promise<WriteResponse<"aws_account">>; | ||
| listS3Buckets(id: string, opts?: { | ||
| cursor?: string; | ||
| limit?: number; | ||
| }): Promise<{ | ||
| data: S3BucketInfo[]; | ||
| meta: CursorMeta; | ||
| }>; | ||
| importBuckets(id: string, opts: { | ||
| bucketNames: string[]; | ||
| }): Promise<WriteResponse<"bucket">[]>; | ||
| } | ||
| declare class BillingClient { | ||
| private readonly http; | ||
| constructor(http: HttpClient); | ||
| getUsage(): Promise<Usage>; | ||
| getSubscription(): Promise<Subscription>; | ||
| } | ||
| declare class BucketsClient { | ||
@@ -80,3 +233,12 @@ private readonly http; | ||
| customDomain: string; | ||
| }): Promise<Bucket>; | ||
| region?: string; | ||
| visibility?: BucketVisibility; | ||
| cachePreset?: CachePreset; | ||
| corsOrigins?: string[]; | ||
| lifecycleTtlDays?: number | null; | ||
| maxFileSizeBytes?: number | null; | ||
| allowedMimeTypes?: string[] | null; | ||
| optimizationMode?: OptimizationMode; | ||
| awsAccountId?: string; | ||
| }): Promise<WriteResponse<"bucket">>; | ||
| list(opts?: { | ||
@@ -92,5 +254,16 @@ cursor?: string; | ||
| update(id: string, opts: { | ||
| name: string; | ||
| }): Promise<Bucket>; | ||
| delete(id: string): Promise<void>; | ||
| name?: string; | ||
| visibility?: BucketVisibility; | ||
| cachePreset?: CachePreset; | ||
| cacheControlOverride?: string | null; | ||
| corsOrigins?: string[]; | ||
| lifecycleTtlDays?: number | null; | ||
| maxFileSizeBytes?: number | null; | ||
| allowedMimeTypes?: string[] | null; | ||
| optimizationMode?: OptimizationMode; | ||
| }): Promise<WriteResponse<"bucket">>; | ||
| delete(id: string): Promise<WriteResponse<"bucket"> & { | ||
| status: "deleting"; | ||
| }>; | ||
| retry(id: string): Promise<WriteResponse<"bucket">>; | ||
| } | ||
@@ -101,3 +274,5 @@ | ||
| constructor(http: HttpClient); | ||
| upload(bucketId: string, path: string, body: BodyInit, contentType?: string): Promise<FileInfo>; | ||
| upload(bucketId: string, path: string, body: BodyInit, contentType?: string, options?: { | ||
| optimization?: OptimizationMode; | ||
| }): Promise<FileInfo>; | ||
| list(bucketId: string, opts?: { | ||
@@ -112,3 +287,3 @@ prefix?: string; | ||
| get(bucketId: string, path: string): Promise<FileInfo>; | ||
| delete(bucketId: string, path: string): Promise<void>; | ||
| delete(bucketId: string, path: string): Promise<WriteResponse<"file">>; | ||
| } | ||
@@ -123,3 +298,4 @@ | ||
| expiresAt?: Date; | ||
| }): Promise<ApiKeyWithSecret>; | ||
| bucketIds?: string[]; | ||
| }): Promise<ApiKeyCreateResponse>; | ||
| list(opts?: { | ||
@@ -132,5 +308,16 @@ cursor?: string; | ||
| }>; | ||
| delete(id: string): Promise<void>; | ||
| get(id: string): Promise<ApiKeyDetail>; | ||
| delete(id: string): Promise<WriteResponse<"api_key">>; | ||
| } | ||
| declare class LogsClient { | ||
| private readonly http; | ||
| constructor(http: HttpClient); | ||
| list(opts?: LogListFilters): Promise<{ | ||
| data: LogSummary[]; | ||
| meta: CursorMeta; | ||
| }>; | ||
| get(id: string): Promise<LogRecord>; | ||
| } | ||
| declare class BucktError extends Error { | ||
@@ -166,8 +353,11 @@ readonly status: number; | ||
| declare class Buckt { | ||
| readonly awsAccounts: AwsAccountsClient; | ||
| readonly billing: BillingClient; | ||
| readonly buckets: BucketsClient; | ||
| readonly files: FilesClient; | ||
| readonly keys: KeysClient; | ||
| readonly logs: LogsClient; | ||
| constructor(opts: BucktOptions); | ||
| } | ||
| export { type ApiKey, type ApiKeyWithSecret, type Bucket, type BucketStatus, Buckt, BucktError, type BucktOptions, ConflictError, type CursorMeta, type FileInfo, ForbiddenError, NotFoundError, PaymentRequiredError, type Permission, RateLimitError, TimeoutError, UnauthorizedError, ValidationError }; | ||
| export { type ApiKey, type ApiKeyCreateResponse, type ApiKeyDetail, type ApiKeyWithSecret, type AwsAccount, type AwsAccountStatus, type Bucket, type BucketCountUsage, type BucketStatus, Buckt, BucktError, type BucktOptions, type ByteUsage, ConflictError, type CursorMeta, type FileInfo, ForbiddenError, type LogListFilters, type LogRecord, type LogSummary, type ManagedSettings, NotFoundError, type OptimizationMode, PaymentRequiredError, type Permission, type PlanLimits, type PlanName, RateLimitError, type ResourceObject, type S3BucketInfo, type Subscription, TimeoutError, UnauthorizedError, type Usage, ValidationError, type WriteResponse }; |
+211
-21
| type BucketStatus = "pending" | "provisioning" | "active" | "failed" | "deleting"; | ||
| type Permission = "buckets:read" | "buckets:write" | "buckets:delete" | "files:read" | "files:write" | "files:delete"; | ||
| type Permission = "buckets:read" | "buckets:write" | "buckets:delete" | "files:read" | "files:write" | "files:delete" | "aws-accounts:read" | "aws-accounts:write" | "aws-accounts:delete" | "logs:read"; | ||
| type BucketVisibility = "public" | "private"; | ||
| type CachePreset = "no-cache" | "short" | "standard" | "aggressive" | "immutable"; | ||
| type OptimizationMode = "none" | "light" | "balanced" | "maximum"; | ||
| interface ManagedSettings { | ||
| allowedMimeTypes?: boolean; | ||
| cache?: boolean; | ||
| cors?: boolean; | ||
| lifecycle?: boolean; | ||
| maxFileSize?: boolean; | ||
| optimization?: boolean; | ||
| visibility?: boolean; | ||
| } | ||
| interface Bucket { | ||
| acmCertArn: string | null; | ||
| allowedMimeTypes: string[] | null; | ||
| awsAccountId: string | null; | ||
| bandwidthUsedBytes: number; | ||
| cloudfrontDistributionId: string | null; | ||
| cacheControlOverride: string | null; | ||
| cachePreset: CachePreset; | ||
| corsOrigins: string[]; | ||
| createdAt: string; | ||
| customDomain: string; | ||
| dnsRecords: unknown | null; | ||
| domainConnectProvider: string | null; | ||
| id: string; | ||
| isImported: boolean; | ||
| isManagedDomain: boolean; | ||
| lifecycleTtlDays: number | null; | ||
| managedSettings: ManagedSettings | null; | ||
| maxFileSizeBytes: number | null; | ||
| name: string; | ||
| orgId: string; | ||
| provisioningJobId: string | null; | ||
| object: "bucket"; | ||
| optimizationMode: OptimizationMode; | ||
| region: string; | ||
| s3BucketName: string; | ||
| slug: string; | ||
| status: BucketStatus; | ||
| storageUsedBytes: number; | ||
| updatedAt: string; | ||
| visibility: BucketVisibility; | ||
| } | ||
| type AwsAccountStatus = "pending" | "validating" | "active" | "failed"; | ||
| interface AwsAccount { | ||
| awsAccountId: string; | ||
| createdAt: string; | ||
| externalId: string; | ||
| id: string; | ||
| label: string | null; | ||
| lastValidatedAt: string | null; | ||
| object: "aws_account"; | ||
| roleArn: string; | ||
| stackId: string | null; | ||
| status: AwsAccountStatus; | ||
| updatedAt: string; | ||
| } | ||
| interface S3BucketInfo { | ||
| creationDate: string; | ||
| id: string; | ||
| object: "s3_bucket"; | ||
| } | ||
| interface ApiKey { | ||
| createdAt: string; | ||
| expiresAt: string | null; | ||
| id: string; | ||
| lastUsedAt: string | null; | ||
| name: string; | ||
| permissions: Permission[]; | ||
| object: "api_key"; | ||
| prefix: string; | ||
| } | ||
| interface ApiKeyWithSecret extends ApiKey { | ||
| interface ApiKeyDetail extends ApiKey { | ||
| bucketIds: string[] | null; | ||
| expiresAt: string | null; | ||
| permissions: Permission[]; | ||
| } | ||
| interface ApiKeyWithSecret extends ApiKeyDetail { | ||
| hashedKey: string; | ||
@@ -36,5 +79,7 @@ key: string; | ||
| interface FileInfo { | ||
| contentType: string; | ||
| contentType?: string; | ||
| id: string; | ||
| key: string; | ||
| lastModified: string; | ||
| object: "file"; | ||
| size: number; | ||
@@ -47,2 +92,42 @@ url?: string; | ||
| } | ||
| type ResourceObject = "bucket" | "aws_account" | "api_key" | "file" | "s3_bucket" | "log"; | ||
| interface LogSummary { | ||
| apiKeyId: string | null; | ||
| bucketId: string | null; | ||
| createdAt: string; | ||
| durationMs: number; | ||
| errorMessage: string | null; | ||
| id: string; | ||
| method: string; | ||
| object: "log"; | ||
| path: string; | ||
| statusCode: number; | ||
| } | ||
| interface LogRecord extends LogSummary { | ||
| ip: string | null; | ||
| requestBody: unknown; | ||
| requestHeaders: Record<string, string> | null; | ||
| requestId: string; | ||
| responseBody: unknown; | ||
| routePattern: string | null; | ||
| userAgent: string | null; | ||
| } | ||
| interface LogListFilters { | ||
| apiKeyId?: string; | ||
| bucketId?: string; | ||
| cursor?: string; | ||
| from?: Date; | ||
| limit?: number; | ||
| method?: string; | ||
| path?: string; | ||
| status?: string; | ||
| to?: Date; | ||
| } | ||
| interface WriteResponse<T extends ResourceObject> { | ||
| id: string; | ||
| object: T; | ||
| } | ||
| interface ApiKeyCreateResponse extends WriteResponse<"api_key"> { | ||
| key: string; | ||
| } | ||
| interface ApiResponse<T> { | ||
@@ -57,2 +142,30 @@ data: T; | ||
| } | ||
| type PlanName = "free" | "pro" | "enterprise"; | ||
| interface PlanLimits { | ||
| maxBandwidthBytesPerMonth: number | null; | ||
| maxBuckets: number | null; | ||
| maxRequestsPerMinute: number | null; | ||
| maxStorageBytes: number | null; | ||
| } | ||
| interface Subscription { | ||
| cancelAtPeriodEnd: boolean; | ||
| limits: PlanLimits; | ||
| periodEnd: string | null; | ||
| periodStart: string | null; | ||
| plan: PlanName; | ||
| status: string; | ||
| } | ||
| interface BucketCountUsage { | ||
| limit: number; | ||
| used: number; | ||
| } | ||
| interface ByteUsage { | ||
| limitBytes: number; | ||
| usedBytes: number; | ||
| } | ||
| interface Usage { | ||
| bandwidth: ByteUsage; | ||
| bucketCount: BucketCountUsage; | ||
| storage: ByteUsage; | ||
| } | ||
@@ -67,3 +180,3 @@ declare class HttpClient { | ||
| post<T>(path: string, body: unknown): Promise<ApiResponse<T>>; | ||
| put<T>(path: string, body: BodyInit, contentType?: string): Promise<ApiResponse<T>>; | ||
| put<T>(path: string, body: BodyInit, contentType?: string, extraHeaders?: Record<string, string>): Promise<ApiResponse<T>>; | ||
| patch<T>(path: string, body: unknown): Promise<ApiResponse<T>>; | ||
@@ -73,2 +186,42 @@ delete<T>(path: string): Promise<ApiResponse<T>>; | ||
| declare class AwsAccountsClient { | ||
| private readonly http; | ||
| constructor(http: HttpClient); | ||
| connect(opts?: { | ||
| label?: string; | ||
| }): Promise<WriteResponse<"aws_account">>; | ||
| list(opts?: { | ||
| cursor?: string; | ||
| limit?: number; | ||
| }): Promise<{ | ||
| data: AwsAccount[]; | ||
| meta: CursorMeta; | ||
| }>; | ||
| get(id: string): Promise<AwsAccount>; | ||
| update(id: string, opts: { | ||
| roleArn?: string; | ||
| stackId?: string; | ||
| label?: string; | ||
| }): Promise<WriteResponse<"aws_account">>; | ||
| validate(id: string): Promise<WriteResponse<"aws_account">>; | ||
| disconnect(id: string): Promise<WriteResponse<"aws_account">>; | ||
| listS3Buckets(id: string, opts?: { | ||
| cursor?: string; | ||
| limit?: number; | ||
| }): Promise<{ | ||
| data: S3BucketInfo[]; | ||
| meta: CursorMeta; | ||
| }>; | ||
| importBuckets(id: string, opts: { | ||
| bucketNames: string[]; | ||
| }): Promise<WriteResponse<"bucket">[]>; | ||
| } | ||
| declare class BillingClient { | ||
| private readonly http; | ||
| constructor(http: HttpClient); | ||
| getUsage(): Promise<Usage>; | ||
| getSubscription(): Promise<Subscription>; | ||
| } | ||
| declare class BucketsClient { | ||
@@ -80,3 +233,12 @@ private readonly http; | ||
| customDomain: string; | ||
| }): Promise<Bucket>; | ||
| region?: string; | ||
| visibility?: BucketVisibility; | ||
| cachePreset?: CachePreset; | ||
| corsOrigins?: string[]; | ||
| lifecycleTtlDays?: number | null; | ||
| maxFileSizeBytes?: number | null; | ||
| allowedMimeTypes?: string[] | null; | ||
| optimizationMode?: OptimizationMode; | ||
| awsAccountId?: string; | ||
| }): Promise<WriteResponse<"bucket">>; | ||
| list(opts?: { | ||
@@ -92,5 +254,16 @@ cursor?: string; | ||
| update(id: string, opts: { | ||
| name: string; | ||
| }): Promise<Bucket>; | ||
| delete(id: string): Promise<void>; | ||
| name?: string; | ||
| visibility?: BucketVisibility; | ||
| cachePreset?: CachePreset; | ||
| cacheControlOverride?: string | null; | ||
| corsOrigins?: string[]; | ||
| lifecycleTtlDays?: number | null; | ||
| maxFileSizeBytes?: number | null; | ||
| allowedMimeTypes?: string[] | null; | ||
| optimizationMode?: OptimizationMode; | ||
| }): Promise<WriteResponse<"bucket">>; | ||
| delete(id: string): Promise<WriteResponse<"bucket"> & { | ||
| status: "deleting"; | ||
| }>; | ||
| retry(id: string): Promise<WriteResponse<"bucket">>; | ||
| } | ||
@@ -101,3 +274,5 @@ | ||
| constructor(http: HttpClient); | ||
| upload(bucketId: string, path: string, body: BodyInit, contentType?: string): Promise<FileInfo>; | ||
| upload(bucketId: string, path: string, body: BodyInit, contentType?: string, options?: { | ||
| optimization?: OptimizationMode; | ||
| }): Promise<FileInfo>; | ||
| list(bucketId: string, opts?: { | ||
@@ -112,3 +287,3 @@ prefix?: string; | ||
| get(bucketId: string, path: string): Promise<FileInfo>; | ||
| delete(bucketId: string, path: string): Promise<void>; | ||
| delete(bucketId: string, path: string): Promise<WriteResponse<"file">>; | ||
| } | ||
@@ -123,3 +298,4 @@ | ||
| expiresAt?: Date; | ||
| }): Promise<ApiKeyWithSecret>; | ||
| bucketIds?: string[]; | ||
| }): Promise<ApiKeyCreateResponse>; | ||
| list(opts?: { | ||
@@ -132,5 +308,16 @@ cursor?: string; | ||
| }>; | ||
| delete(id: string): Promise<void>; | ||
| get(id: string): Promise<ApiKeyDetail>; | ||
| delete(id: string): Promise<WriteResponse<"api_key">>; | ||
| } | ||
| declare class LogsClient { | ||
| private readonly http; | ||
| constructor(http: HttpClient); | ||
| list(opts?: LogListFilters): Promise<{ | ||
| data: LogSummary[]; | ||
| meta: CursorMeta; | ||
| }>; | ||
| get(id: string): Promise<LogRecord>; | ||
| } | ||
| declare class BucktError extends Error { | ||
@@ -166,8 +353,11 @@ readonly status: number; | ||
| declare class Buckt { | ||
| readonly awsAccounts: AwsAccountsClient; | ||
| readonly billing: BillingClient; | ||
| readonly buckets: BucketsClient; | ||
| readonly files: FilesClient; | ||
| readonly keys: KeysClient; | ||
| readonly logs: LogsClient; | ||
| constructor(opts: BucktOptions); | ||
| } | ||
| export { type ApiKey, type ApiKeyWithSecret, type Bucket, type BucketStatus, Buckt, BucktError, type BucktOptions, ConflictError, type CursorMeta, type FileInfo, ForbiddenError, NotFoundError, PaymentRequiredError, type Permission, RateLimitError, TimeoutError, UnauthorizedError, ValidationError }; | ||
| export { type ApiKey, type ApiKeyCreateResponse, type ApiKeyDetail, type ApiKeyWithSecret, type AwsAccount, type AwsAccountStatus, type Bucket, type BucketCountUsage, type BucketStatus, Buckt, BucktError, type BucktOptions, type ByteUsage, ConflictError, type CursorMeta, type FileInfo, ForbiddenError, type LogListFilters, type LogRecord, type LogSummary, type ManagedSettings, NotFoundError, type OptimizationMode, PaymentRequiredError, type Permission, type PlanLimits, type PlanName, RateLimitError, type ResourceObject, type S3BucketInfo, type Subscription, TimeoutError, UnauthorizedError, type Usage, ValidationError, type WriteResponse }; |
+157
-11
@@ -120,8 +120,9 @@ // src/errors.ts | ||
| } | ||
| async put(path, body, contentType) { | ||
| async put(path, body, contentType, extraHeaders) { | ||
| const res = await fetch(new URL(path, this.baseUrl).toString(), { | ||
| method: "PUT", | ||
| headers: this.headers( | ||
| contentType ? { "Content-Type": contentType } : void 0 | ||
| ), | ||
| headers: this.headers({ | ||
| ...contentType ? { "Content-Type": contentType } : void 0, | ||
| ...extraHeaders | ||
| }), | ||
| body | ||
@@ -148,2 +149,86 @@ }); | ||
| // src/resources/aws-accounts.ts | ||
| var AwsAccountsClient = class { | ||
| http; | ||
| constructor(http) { | ||
| this.http = http; | ||
| } | ||
| async connect(opts) { | ||
| const { data } = await this.http.post( | ||
| "/v1/aws-accounts", | ||
| opts ?? {} | ||
| ); | ||
| return data; | ||
| } | ||
| async list(opts) { | ||
| const { data, meta } = await this.http.get( | ||
| "/v1/aws-accounts", | ||
| { | ||
| cursor: opts?.cursor, | ||
| limit: opts?.limit?.toString() | ||
| } | ||
| ); | ||
| return { data, meta }; | ||
| } | ||
| async get(id) { | ||
| const { data } = await this.http.get(`/v1/aws-accounts/${id}`); | ||
| return data; | ||
| } | ||
| async update(id, opts) { | ||
| const { data } = await this.http.patch( | ||
| `/v1/aws-accounts/${id}`, | ||
| opts | ||
| ); | ||
| return data; | ||
| } | ||
| async validate(id) { | ||
| const { data } = await this.http.post( | ||
| `/v1/aws-accounts/${id}/validate`, | ||
| {} | ||
| ); | ||
| return data; | ||
| } | ||
| async disconnect(id) { | ||
| const { data } = await this.http.delete( | ||
| `/v1/aws-accounts/${id}` | ||
| ); | ||
| return data; | ||
| } | ||
| async listS3Buckets(id, opts) { | ||
| const { data, meta } = await this.http.get( | ||
| `/v1/aws-accounts/${id}/s3-buckets`, | ||
| { | ||
| cursor: opts?.cursor, | ||
| limit: opts?.limit?.toString() | ||
| } | ||
| ); | ||
| return { data, meta }; | ||
| } | ||
| async importBuckets(id, opts) { | ||
| const { data } = await this.http.post( | ||
| `/v1/aws-accounts/${id}/import`, | ||
| opts | ||
| ); | ||
| return data; | ||
| } | ||
| }; | ||
| // src/resources/billing.ts | ||
| var BillingClient = class { | ||
| http; | ||
| constructor(http) { | ||
| this.http = http; | ||
| } | ||
| async getUsage() { | ||
| const { data } = await this.http.get("/v1/billing/usage"); | ||
| return data; | ||
| } | ||
| async getSubscription() { | ||
| const { data } = await this.http.get( | ||
| "/v1/billing/subscription" | ||
| ); | ||
| return data; | ||
| } | ||
| }; | ||
| // src/resources/buckets.ts | ||
@@ -156,3 +241,6 @@ var BucketsClient = class { | ||
| async create(opts) { | ||
| const { data } = await this.http.post("/v1/buckets", opts); | ||
| const { data } = await this.http.post( | ||
| "/v1/buckets", | ||
| opts | ||
| ); | ||
| return data; | ||
@@ -173,8 +261,19 @@ } | ||
| async update(id, opts) { | ||
| const { data } = await this.http.patch(`/v1/buckets/${id}`, opts); | ||
| const { data } = await this.http.patch( | ||
| `/v1/buckets/${id}`, | ||
| opts | ||
| ); | ||
| return data; | ||
| } | ||
| async delete(id) { | ||
| await this.http.delete(`/v1/buckets/${id}`); | ||
| const { data } = await this.http.delete(`/v1/buckets/${id}`); | ||
| return data; | ||
| } | ||
| async retry(id) { | ||
| const { data } = await this.http.post( | ||
| `/v1/buckets/${id}/retry`, | ||
| {} | ||
| ); | ||
| return data; | ||
| } | ||
| }; | ||
@@ -188,7 +287,12 @@ | ||
| } | ||
| async upload(bucketId, path, body, contentType) { | ||
| async upload(bucketId, path, body, contentType, options) { | ||
| const extraHeaders = {}; | ||
| if (options?.optimization) { | ||
| extraHeaders["X-Buckt-Optimization"] = options.optimization; | ||
| } | ||
| const { data } = await this.http.put( | ||
| `/v1/buckets/${bucketId}/files/${path}`, | ||
| body, | ||
| contentType | ||
| contentType, | ||
| extraHeaders | ||
| ); | ||
@@ -215,3 +319,6 @@ return data; | ||
| async delete(bucketId, path) { | ||
| await this.http.delete(`/v1/buckets/${bucketId}/files/${path}`); | ||
| const { data } = await this.http.delete( | ||
| `/v1/buckets/${bucketId}/files/${path}` | ||
| ); | ||
| return data; | ||
| } | ||
@@ -240,18 +347,57 @@ }; | ||
| } | ||
| async get(id) { | ||
| const { data } = await this.http.get(`/v1/keys/${id}`); | ||
| return data; | ||
| } | ||
| async delete(id) { | ||
| await this.http.delete(`/v1/keys/${id}`); | ||
| const { data } = await this.http.delete( | ||
| `/v1/keys/${id}` | ||
| ); | ||
| return data; | ||
| } | ||
| }; | ||
| // src/resources/logs.ts | ||
| var LogsClient = class { | ||
| http; | ||
| constructor(http) { | ||
| this.http = http; | ||
| } | ||
| async list(opts) { | ||
| const { data, meta } = await this.http.get("/v1/logs", { | ||
| cursor: opts?.cursor, | ||
| limit: opts?.limit?.toString(), | ||
| method: opts?.method, | ||
| status: opts?.status, | ||
| path: opts?.path, | ||
| apiKeyId: opts?.apiKeyId, | ||
| bucketId: opts?.bucketId, | ||
| from: opts?.from?.toISOString(), | ||
| to: opts?.to?.toISOString() | ||
| }); | ||
| return { data, meta }; | ||
| } | ||
| async get(id) { | ||
| const { data } = await this.http.get(`/v1/logs/${id}`); | ||
| return data; | ||
| } | ||
| }; | ||
| // src/index.ts | ||
| var Buckt = class { | ||
| awsAccounts; | ||
| billing; | ||
| buckets; | ||
| files; | ||
| keys; | ||
| logs; | ||
| constructor(opts) { | ||
| const baseUrl = opts.baseUrl ?? "https://api.buckt.dev"; | ||
| const http = new HttpClient(baseUrl, opts.apiKey); | ||
| this.awsAccounts = new AwsAccountsClient(http); | ||
| this.billing = new BillingClient(http); | ||
| this.buckets = new BucketsClient(http); | ||
| this.files = new FilesClient(http); | ||
| this.keys = new KeysClient(http); | ||
| this.logs = new LogsClient(http); | ||
| } | ||
@@ -258,0 +404,0 @@ }; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../src/errors.ts","../src/http.ts","../src/resources/buckets.ts","../src/resources/files.ts","../src/resources/keys.ts","../src/index.ts"],"sourcesContent":["export class BucktError extends Error {\n readonly status: number;\n\n constructor(message: string, status: number) {\n super(message);\n this.name = \"BucktError\";\n this.status = status;\n }\n}\n\nexport class NotFoundError extends BucktError {\n constructor(message = \"Not found\") {\n super(message, 404);\n this.name = \"NotFoundError\";\n }\n}\n\nexport class ForbiddenError extends BucktError {\n constructor(message = \"Forbidden\") {\n super(message, 403);\n this.name = \"ForbiddenError\";\n }\n}\n\nexport class UnauthorizedError extends BucktError {\n constructor(message = \"Unauthorized\") {\n super(message, 401);\n this.name = \"UnauthorizedError\";\n }\n}\n\nexport class ValidationError extends BucktError {\n constructor(message = \"Validation failed\") {\n super(message, 400);\n this.name = \"ValidationError\";\n }\n}\n\nexport class PaymentRequiredError extends BucktError {\n constructor(message = \"Payment required\") {\n super(message, 402);\n this.name = \"PaymentRequiredError\";\n }\n}\n\nexport class TimeoutError extends BucktError {\n constructor(message = \"Request timeout\") {\n super(message, 408);\n this.name = \"TimeoutError\";\n }\n}\n\nexport class ConflictError extends BucktError {\n constructor(message = \"Conflict\") {\n super(message, 409);\n this.name = \"ConflictError\";\n }\n}\n\nexport class RateLimitError extends BucktError {\n constructor(message = \"Rate limit exceeded\") {\n super(message, 429);\n this.name = \"RateLimitError\";\n }\n}\n","import {\n BucktError,\n ConflictError,\n ForbiddenError,\n NotFoundError,\n PaymentRequiredError,\n RateLimitError,\n TimeoutError,\n UnauthorizedError,\n ValidationError,\n} from \"./errors\";\nimport type { ApiErrorResponse, ApiResponse } from \"./types\";\n\nexport class HttpClient {\n private readonly baseUrl: string;\n private readonly apiKey: string;\n\n constructor(baseUrl: string, apiKey: string) {\n this.baseUrl = baseUrl;\n this.apiKey = apiKey;\n }\n\n private headers(extra?: Record<string, string>): Record<string, string> {\n return {\n Authorization: `Bearer ${this.apiKey}`,\n ...extra,\n };\n }\n\n private async handleResponse<T>(res: Response): Promise<ApiResponse<T>> {\n const body = (await res.json()) as ApiResponse<T> | ApiErrorResponse;\n\n if (!res.ok) {\n const message =\n (body as ApiErrorResponse).error?.message ?? res.statusText;\n switch (res.status) {\n case 400:\n throw new ValidationError(message);\n case 401:\n throw new UnauthorizedError(message);\n case 402:\n throw new PaymentRequiredError(message);\n case 403:\n throw new ForbiddenError(message);\n case 404:\n throw new NotFoundError(message);\n case 408:\n throw new TimeoutError(message);\n case 409:\n throw new ConflictError(message);\n case 429:\n throw new RateLimitError(message);\n default:\n throw new BucktError(message, res.status);\n }\n }\n\n return body as ApiResponse<T>;\n }\n\n async get<T>(\n path: string,\n params?: Record<string, string | undefined>\n ): Promise<ApiResponse<T>> {\n const url = new URL(path, this.baseUrl);\n if (params) {\n for (const [k, v] of Object.entries(params)) {\n if (v !== undefined) {\n url.searchParams.set(k, v);\n }\n }\n }\n const res = await fetch(url.toString(), { headers: this.headers() });\n return this.handleResponse<T>(res);\n }\n\n async post<T>(path: string, body: unknown): Promise<ApiResponse<T>> {\n const res = await fetch(new URL(path, this.baseUrl).toString(), {\n method: \"POST\",\n headers: this.headers({ \"Content-Type\": \"application/json\" }),\n body: JSON.stringify(body),\n });\n return this.handleResponse<T>(res);\n }\n\n async put<T>(\n path: string,\n body: BodyInit,\n contentType?: string\n ): Promise<ApiResponse<T>> {\n const res = await fetch(new URL(path, this.baseUrl).toString(), {\n method: \"PUT\",\n headers: this.headers(\n contentType ? { \"Content-Type\": contentType } : undefined\n ),\n body,\n });\n return this.handleResponse<T>(res);\n }\n\n async patch<T>(path: string, body: unknown): Promise<ApiResponse<T>> {\n const res = await fetch(new URL(path, this.baseUrl).toString(), {\n method: \"PATCH\",\n headers: this.headers({ \"Content-Type\": \"application/json\" }),\n body: JSON.stringify(body),\n });\n return this.handleResponse<T>(res);\n }\n\n async delete<T>(path: string): Promise<ApiResponse<T>> {\n const res = await fetch(new URL(path, this.baseUrl).toString(), {\n method: \"DELETE\",\n headers: this.headers(),\n });\n return this.handleResponse<T>(res);\n }\n}\n","import type { HttpClient } from \"../http\";\nimport type { Bucket, BucketStatus, CursorMeta } from \"../types\";\n\nexport class BucketsClient {\n private readonly http: HttpClient;\n\n constructor(http: HttpClient) {\n this.http = http;\n }\n\n async create(opts: { name: string; customDomain: string }): Promise<Bucket> {\n const { data } = await this.http.post<Bucket>(\"/v1/buckets\", opts);\n return data;\n }\n\n async list(opts?: {\n cursor?: string;\n limit?: number;\n status?: BucketStatus;\n }): Promise<{ data: Bucket[]; meta: CursorMeta }> {\n const { data, meta } = await this.http.get<Bucket[]>(\"/v1/buckets\", {\n cursor: opts?.cursor,\n limit: opts?.limit?.toString(),\n status: opts?.status,\n });\n return { data, meta: meta as CursorMeta };\n }\n\n async get(id: string): Promise<Bucket> {\n const { data } = await this.http.get<Bucket>(`/v1/buckets/${id}`);\n return data;\n }\n\n async update(id: string, opts: { name: string }): Promise<Bucket> {\n const { data } = await this.http.patch<Bucket>(`/v1/buckets/${id}`, opts);\n return data;\n }\n\n async delete(id: string): Promise<void> {\n await this.http.delete(`/v1/buckets/${id}`);\n }\n}\n","import type { HttpClient } from \"../http\";\nimport type { CursorMeta, FileInfo } from \"../types\";\n\nexport class FilesClient {\n private readonly http: HttpClient;\n\n constructor(http: HttpClient) {\n this.http = http;\n }\n\n async upload(\n bucketId: string,\n path: string,\n body: BodyInit,\n contentType?: string\n ): Promise<FileInfo> {\n const { data } = await this.http.put<FileInfo>(\n `/v1/buckets/${bucketId}/files/${path}`,\n body,\n contentType\n );\n return data;\n }\n\n async list(\n bucketId: string,\n opts?: { prefix?: string; cursor?: string; limit?: number }\n ): Promise<{ data: FileInfo[]; meta: CursorMeta }> {\n const { data, meta } = await this.http.get<FileInfo[]>(\n `/v1/buckets/${bucketId}/files`,\n {\n prefix: opts?.prefix,\n cursor: opts?.cursor,\n limit: opts?.limit?.toString(),\n }\n );\n return { data, meta: meta as CursorMeta };\n }\n\n async get(bucketId: string, path: string): Promise<FileInfo> {\n const { data } = await this.http.get<FileInfo>(\n `/v1/buckets/${bucketId}/files/${path}`\n );\n return data;\n }\n\n async delete(bucketId: string, path: string): Promise<void> {\n await this.http.delete(`/v1/buckets/${bucketId}/files/${path}`);\n }\n}\n","import type { HttpClient } from \"../http\";\nimport type {\n ApiKey,\n ApiKeyWithSecret,\n CursorMeta,\n Permission,\n} from \"../types\";\n\nexport class KeysClient {\n private readonly http: HttpClient;\n\n constructor(http: HttpClient) {\n this.http = http;\n }\n\n async create(opts: {\n name: string;\n permissions: Permission[];\n expiresAt?: Date;\n }): Promise<ApiKeyWithSecret> {\n const { data } = await this.http.post<ApiKeyWithSecret>(\"/v1/keys\", {\n ...opts,\n expiresAt: opts.expiresAt?.toISOString(),\n });\n return data;\n }\n\n async list(opts?: {\n cursor?: string;\n limit?: number;\n }): Promise<{ data: ApiKey[]; meta: CursorMeta }> {\n const { data, meta } = await this.http.get<ApiKey[]>(\"/v1/keys\", {\n cursor: opts?.cursor,\n limit: opts?.limit?.toString(),\n });\n return { data, meta: meta as CursorMeta };\n }\n\n async delete(id: string): Promise<void> {\n await this.http.delete(`/v1/keys/${id}`);\n }\n}\n","import { HttpClient } from \"./http\";\nimport { BucketsClient } from \"./resources/buckets\";\nimport { FilesClient } from \"./resources/files\";\nimport { KeysClient } from \"./resources/keys\";\nimport type { BucktOptions } from \"./types\";\n\nexport class Buckt {\n readonly buckets: BucketsClient;\n readonly files: FilesClient;\n readonly keys: KeysClient;\n\n constructor(opts: BucktOptions) {\n const baseUrl = opts.baseUrl ?? \"https://api.buckt.dev\";\n const http = new HttpClient(baseUrl, opts.apiKey);\n\n this.buckets = new BucketsClient(http);\n this.files = new FilesClient(http);\n this.keys = new KeysClient(http);\n }\n}\n\n// biome-ignore lint/performance/noBarrelFile: intentional SDK entry point\nexport {\n BucktError,\n ConflictError,\n ForbiddenError,\n NotFoundError,\n PaymentRequiredError,\n RateLimitError,\n TimeoutError,\n UnauthorizedError,\n ValidationError,\n} from \"./errors\";\nexport type {\n ApiKey,\n ApiKeyWithSecret,\n Bucket,\n BucketStatus,\n BucktOptions,\n CursorMeta,\n FileInfo,\n Permission,\n} from \"./types\";\n"],"mappings":"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","names":[]} | ||
| {"version":3,"sources":["../src/errors.ts","../src/http.ts","../src/resources/aws-accounts.ts","../src/resources/billing.ts","../src/resources/buckets.ts","../src/resources/files.ts","../src/resources/keys.ts","../src/resources/logs.ts","../src/index.ts"],"sourcesContent":["export class BucktError extends Error {\n readonly status: number;\n\n constructor(message: string, status: number) {\n super(message);\n this.name = \"BucktError\";\n this.status = status;\n }\n}\n\nexport class NotFoundError extends BucktError {\n constructor(message = \"Not found\") {\n super(message, 404);\n this.name = \"NotFoundError\";\n }\n}\n\nexport class ForbiddenError extends BucktError {\n constructor(message = \"Forbidden\") {\n super(message, 403);\n this.name = \"ForbiddenError\";\n }\n}\n\nexport class UnauthorizedError extends BucktError {\n constructor(message = \"Unauthorized\") {\n super(message, 401);\n this.name = \"UnauthorizedError\";\n }\n}\n\nexport class ValidationError extends BucktError {\n constructor(message = \"Validation failed\") {\n super(message, 400);\n this.name = \"ValidationError\";\n }\n}\n\nexport class PaymentRequiredError extends BucktError {\n constructor(message = \"Payment required\") {\n super(message, 402);\n this.name = \"PaymentRequiredError\";\n }\n}\n\nexport class TimeoutError extends BucktError {\n constructor(message = \"Request timeout\") {\n super(message, 408);\n this.name = \"TimeoutError\";\n }\n}\n\nexport class ConflictError extends BucktError {\n constructor(message = \"Conflict\") {\n super(message, 409);\n this.name = \"ConflictError\";\n }\n}\n\nexport class RateLimitError extends BucktError {\n constructor(message = \"Rate limit exceeded\") {\n super(message, 429);\n this.name = \"RateLimitError\";\n }\n}\n","import {\n BucktError,\n ConflictError,\n ForbiddenError,\n NotFoundError,\n PaymentRequiredError,\n RateLimitError,\n TimeoutError,\n UnauthorizedError,\n ValidationError,\n} from \"./errors\";\nimport type { ApiErrorResponse, ApiResponse } from \"./types\";\n\nexport class HttpClient {\n private readonly baseUrl: string;\n private readonly apiKey: string;\n\n constructor(baseUrl: string, apiKey: string) {\n this.baseUrl = baseUrl;\n this.apiKey = apiKey;\n }\n\n private headers(extra?: Record<string, string>): Record<string, string> {\n return {\n Authorization: `Bearer ${this.apiKey}`,\n ...extra,\n };\n }\n\n private async handleResponse<T>(res: Response): Promise<ApiResponse<T>> {\n const body = (await res.json()) as ApiResponse<T> | ApiErrorResponse;\n\n if (!res.ok) {\n const message =\n (body as ApiErrorResponse).error?.message ?? res.statusText;\n switch (res.status) {\n case 400:\n throw new ValidationError(message);\n case 401:\n throw new UnauthorizedError(message);\n case 402:\n throw new PaymentRequiredError(message);\n case 403:\n throw new ForbiddenError(message);\n case 404:\n throw new NotFoundError(message);\n case 408:\n throw new TimeoutError(message);\n case 409:\n throw new ConflictError(message);\n case 429:\n throw new RateLimitError(message);\n default:\n throw new BucktError(message, res.status);\n }\n }\n\n return body as ApiResponse<T>;\n }\n\n async get<T>(\n path: string,\n params?: Record<string, string | undefined>\n ): Promise<ApiResponse<T>> {\n const url = new URL(path, this.baseUrl);\n if (params) {\n for (const [k, v] of Object.entries(params)) {\n if (v !== undefined) {\n url.searchParams.set(k, v);\n }\n }\n }\n const res = await fetch(url.toString(), { headers: this.headers() });\n return this.handleResponse<T>(res);\n }\n\n async post<T>(path: string, body: unknown): Promise<ApiResponse<T>> {\n const res = await fetch(new URL(path, this.baseUrl).toString(), {\n method: \"POST\",\n headers: this.headers({ \"Content-Type\": \"application/json\" }),\n body: JSON.stringify(body),\n });\n return this.handleResponse<T>(res);\n }\n\n async put<T>(\n path: string,\n body: BodyInit,\n contentType?: string,\n extraHeaders?: Record<string, string>\n ): Promise<ApiResponse<T>> {\n const res = await fetch(new URL(path, this.baseUrl).toString(), {\n method: \"PUT\",\n headers: this.headers({\n ...(contentType ? { \"Content-Type\": contentType } : undefined),\n ...extraHeaders,\n }),\n body,\n });\n return this.handleResponse<T>(res);\n }\n\n async patch<T>(path: string, body: unknown): Promise<ApiResponse<T>> {\n const res = await fetch(new URL(path, this.baseUrl).toString(), {\n method: \"PATCH\",\n headers: this.headers({ \"Content-Type\": \"application/json\" }),\n body: JSON.stringify(body),\n });\n return this.handleResponse<T>(res);\n }\n\n async delete<T>(path: string): Promise<ApiResponse<T>> {\n const res = await fetch(new URL(path, this.baseUrl).toString(), {\n method: \"DELETE\",\n headers: this.headers(),\n });\n return this.handleResponse<T>(res);\n }\n}\n","import type { HttpClient } from \"../http\";\nimport type {\n AwsAccount,\n CursorMeta,\n S3BucketInfo,\n WriteResponse,\n} from \"../types\";\n\nexport class AwsAccountsClient {\n private readonly http: HttpClient;\n\n constructor(http: HttpClient) {\n this.http = http;\n }\n\n async connect(opts?: {\n label?: string;\n }): Promise<WriteResponse<\"aws_account\">> {\n const { data } = await this.http.post<WriteResponse<\"aws_account\">>(\n \"/v1/aws-accounts\",\n opts ?? {}\n );\n return data;\n }\n\n async list(opts?: {\n cursor?: string;\n limit?: number;\n }): Promise<{ data: AwsAccount[]; meta: CursorMeta }> {\n const { data, meta } = await this.http.get<AwsAccount[]>(\n \"/v1/aws-accounts\",\n {\n cursor: opts?.cursor,\n limit: opts?.limit?.toString(),\n }\n );\n return { data, meta: meta as CursorMeta };\n }\n\n async get(id: string): Promise<AwsAccount> {\n const { data } = await this.http.get<AwsAccount>(`/v1/aws-accounts/${id}`);\n return data;\n }\n\n async update(\n id: string,\n opts: { roleArn?: string; stackId?: string; label?: string }\n ): Promise<WriteResponse<\"aws_account\">> {\n const { data } = await this.http.patch<WriteResponse<\"aws_account\">>(\n `/v1/aws-accounts/${id}`,\n opts\n );\n return data;\n }\n\n async validate(id: string): Promise<WriteResponse<\"aws_account\">> {\n const { data } = await this.http.post<WriteResponse<\"aws_account\">>(\n `/v1/aws-accounts/${id}/validate`,\n {}\n );\n return data;\n }\n\n async disconnect(id: string): Promise<WriteResponse<\"aws_account\">> {\n const { data } = await this.http.delete<WriteResponse<\"aws_account\">>(\n `/v1/aws-accounts/${id}`\n );\n return data;\n }\n\n async listS3Buckets(\n id: string,\n opts?: { cursor?: string; limit?: number }\n ): Promise<{ data: S3BucketInfo[]; meta: CursorMeta }> {\n const { data, meta } = await this.http.get<S3BucketInfo[]>(\n `/v1/aws-accounts/${id}/s3-buckets`,\n {\n cursor: opts?.cursor,\n limit: opts?.limit?.toString(),\n }\n );\n return { data, meta: meta as CursorMeta };\n }\n\n async importBuckets(\n id: string,\n opts: { bucketNames: string[] }\n ): Promise<WriteResponse<\"bucket\">[]> {\n const { data } = await this.http.post<WriteResponse<\"bucket\">[]>(\n `/v1/aws-accounts/${id}/import`,\n opts\n );\n return data;\n }\n}\n","import type { HttpClient } from \"../http\";\nimport type { Subscription, Usage } from \"../types\";\n\nexport class BillingClient {\n private readonly http: HttpClient;\n\n constructor(http: HttpClient) {\n this.http = http;\n }\n\n async getUsage(): Promise<Usage> {\n const { data } = await this.http.get<Usage>(\"/v1/billing/usage\");\n return data;\n }\n\n async getSubscription(): Promise<Subscription> {\n const { data } = await this.http.get<Subscription>(\n \"/v1/billing/subscription\"\n );\n return data;\n }\n}\n","import type { HttpClient } from \"../http\";\nimport type {\n Bucket,\n BucketStatus,\n BucketVisibility,\n CachePreset,\n CursorMeta,\n OptimizationMode,\n WriteResponse,\n} from \"../types\";\n\nexport class BucketsClient {\n private readonly http: HttpClient;\n\n constructor(http: HttpClient) {\n this.http = http;\n }\n\n async create(opts: {\n name: string;\n customDomain: string;\n region?: string;\n visibility?: BucketVisibility;\n cachePreset?: CachePreset;\n corsOrigins?: string[];\n lifecycleTtlDays?: number | null;\n maxFileSizeBytes?: number | null;\n allowedMimeTypes?: string[] | null;\n optimizationMode?: OptimizationMode;\n awsAccountId?: string;\n }): Promise<WriteResponse<\"bucket\">> {\n const { data } = await this.http.post<WriteResponse<\"bucket\">>(\n \"/v1/buckets\",\n opts\n );\n return data;\n }\n\n async list(opts?: {\n cursor?: string;\n limit?: number;\n status?: BucketStatus;\n }): Promise<{ data: Bucket[]; meta: CursorMeta }> {\n const { data, meta } = await this.http.get<Bucket[]>(\"/v1/buckets\", {\n cursor: opts?.cursor,\n limit: opts?.limit?.toString(),\n status: opts?.status,\n });\n return { data, meta: meta as CursorMeta };\n }\n\n async get(id: string): Promise<Bucket> {\n const { data } = await this.http.get<Bucket>(`/v1/buckets/${id}`);\n return data;\n }\n\n async update(\n id: string,\n opts: {\n name?: string;\n visibility?: BucketVisibility;\n cachePreset?: CachePreset;\n cacheControlOverride?: string | null;\n corsOrigins?: string[];\n lifecycleTtlDays?: number | null;\n maxFileSizeBytes?: number | null;\n allowedMimeTypes?: string[] | null;\n optimizationMode?: OptimizationMode;\n }\n ): Promise<WriteResponse<\"bucket\">> {\n const { data } = await this.http.patch<WriteResponse<\"bucket\">>(\n `/v1/buckets/${id}`,\n opts\n );\n return data;\n }\n\n async delete(\n id: string\n ): Promise<WriteResponse<\"bucket\"> & { status: \"deleting\" }> {\n const { data } = await this.http.delete<\n WriteResponse<\"bucket\"> & { status: \"deleting\" }\n >(`/v1/buckets/${id}`);\n return data;\n }\n\n async retry(id: string): Promise<WriteResponse<\"bucket\">> {\n const { data } = await this.http.post<WriteResponse<\"bucket\">>(\n `/v1/buckets/${id}/retry`,\n {}\n );\n return data;\n }\n}\n","import type { HttpClient } from \"../http\";\nimport type {\n CursorMeta,\n FileInfo,\n OptimizationMode,\n WriteResponse,\n} from \"../types\";\n\nexport class FilesClient {\n private readonly http: HttpClient;\n\n constructor(http: HttpClient) {\n this.http = http;\n }\n\n async upload(\n bucketId: string,\n path: string,\n body: BodyInit,\n contentType?: string,\n options?: { optimization?: OptimizationMode }\n ): Promise<FileInfo> {\n const extraHeaders: Record<string, string> = {};\n if (options?.optimization) {\n extraHeaders[\"X-Buckt-Optimization\"] = options.optimization;\n }\n const { data } = await this.http.put<FileInfo>(\n `/v1/buckets/${bucketId}/files/${path}`,\n body,\n contentType,\n extraHeaders\n );\n return data;\n }\n\n async list(\n bucketId: string,\n opts?: { prefix?: string; cursor?: string; limit?: number }\n ): Promise<{ data: FileInfo[]; meta: CursorMeta }> {\n const { data, meta } = await this.http.get<FileInfo[]>(\n `/v1/buckets/${bucketId}/files`,\n {\n prefix: opts?.prefix,\n cursor: opts?.cursor,\n limit: opts?.limit?.toString(),\n }\n );\n return { data, meta: meta as CursorMeta };\n }\n\n async get(bucketId: string, path: string): Promise<FileInfo> {\n const { data } = await this.http.get<FileInfo>(\n `/v1/buckets/${bucketId}/files/${path}`\n );\n return data;\n }\n\n async delete(bucketId: string, path: string): Promise<WriteResponse<\"file\">> {\n const { data } = await this.http.delete<WriteResponse<\"file\">>(\n `/v1/buckets/${bucketId}/files/${path}`\n );\n return data;\n }\n}\n","import type { HttpClient } from \"../http\";\nimport type {\n ApiKey,\n ApiKeyCreateResponse,\n ApiKeyDetail,\n CursorMeta,\n Permission,\n WriteResponse,\n} from \"../types\";\n\nexport class KeysClient {\n private readonly http: HttpClient;\n\n constructor(http: HttpClient) {\n this.http = http;\n }\n\n async create(opts: {\n name: string;\n permissions: Permission[];\n expiresAt?: Date;\n bucketIds?: string[];\n }): Promise<ApiKeyCreateResponse> {\n const { data } = await this.http.post<ApiKeyCreateResponse>(\"/v1/keys\", {\n ...opts,\n expiresAt: opts.expiresAt?.toISOString(),\n });\n return data;\n }\n\n async list(opts?: {\n cursor?: string;\n limit?: number;\n }): Promise<{ data: ApiKey[]; meta: CursorMeta }> {\n const { data, meta } = await this.http.get<ApiKey[]>(\"/v1/keys\", {\n cursor: opts?.cursor,\n limit: opts?.limit?.toString(),\n });\n return { data, meta: meta as CursorMeta };\n }\n\n async get(id: string): Promise<ApiKeyDetail> {\n const { data } = await this.http.get<ApiKeyDetail>(`/v1/keys/${id}`);\n return data;\n }\n\n async delete(id: string): Promise<WriteResponse<\"api_key\">> {\n const { data } = await this.http.delete<WriteResponse<\"api_key\">>(\n `/v1/keys/${id}`\n );\n return data;\n }\n}\n","import type { HttpClient } from \"../http\";\nimport type {\n CursorMeta,\n LogListFilters,\n LogRecord,\n LogSummary,\n} from \"../types\";\n\nexport class LogsClient {\n private readonly http: HttpClient;\n\n constructor(http: HttpClient) {\n this.http = http;\n }\n\n async list(\n opts?: LogListFilters\n ): Promise<{ data: LogSummary[]; meta: CursorMeta }> {\n const { data, meta } = await this.http.get<LogSummary[]>(\"/v1/logs\", {\n cursor: opts?.cursor,\n limit: opts?.limit?.toString(),\n method: opts?.method,\n status: opts?.status,\n path: opts?.path,\n apiKeyId: opts?.apiKeyId,\n bucketId: opts?.bucketId,\n from: opts?.from?.toISOString(),\n to: opts?.to?.toISOString(),\n });\n return { data, meta: meta as CursorMeta };\n }\n\n async get(id: string): Promise<LogRecord> {\n const { data } = await this.http.get<LogRecord>(`/v1/logs/${id}`);\n return data;\n }\n}\n","import { HttpClient } from \"./http\";\nimport { AwsAccountsClient } from \"./resources/aws-accounts\";\nimport { BillingClient } from \"./resources/billing\";\nimport { BucketsClient } from \"./resources/buckets\";\nimport { FilesClient } from \"./resources/files\";\nimport { KeysClient } from \"./resources/keys\";\nimport { LogsClient } from \"./resources/logs\";\nimport type { BucktOptions } from \"./types\";\n\nexport class Buckt {\n readonly awsAccounts: AwsAccountsClient;\n readonly billing: BillingClient;\n readonly buckets: BucketsClient;\n readonly files: FilesClient;\n readonly keys: KeysClient;\n readonly logs: LogsClient;\n\n constructor(opts: BucktOptions) {\n const baseUrl = opts.baseUrl ?? \"https://api.buckt.dev\";\n const http = new HttpClient(baseUrl, opts.apiKey);\n\n this.awsAccounts = new AwsAccountsClient(http);\n this.billing = new BillingClient(http);\n this.buckets = new BucketsClient(http);\n this.files = new FilesClient(http);\n this.keys = new KeysClient(http);\n this.logs = new LogsClient(http);\n }\n}\n\n// biome-ignore lint/performance/noBarrelFile: intentional SDK entry point\nexport {\n BucktError,\n ConflictError,\n ForbiddenError,\n NotFoundError,\n PaymentRequiredError,\n RateLimitError,\n TimeoutError,\n UnauthorizedError,\n ValidationError,\n} from \"./errors\";\nexport type {\n ApiKey,\n ApiKeyCreateResponse,\n ApiKeyDetail,\n ApiKeyWithSecret,\n AwsAccount,\n AwsAccountStatus,\n Bucket,\n BucketCountUsage,\n BucketStatus,\n BucktOptions,\n ByteUsage,\n CursorMeta,\n FileInfo,\n LogListFilters,\n LogRecord,\n LogSummary,\n ManagedSettings,\n OptimizationMode,\n Permission,\n PlanLimits,\n PlanName,\n ResourceObject,\n S3BucketInfo,\n Subscription,\n Usage,\n WriteResponse,\n} from \"./types\";\n"],"mappings":"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","names":[]} |
+3
-3
| { | ||
| "name": "@buckt/sdk", | ||
| "version": "0.0.0", | ||
| "version": "1.0.0", | ||
| "type": "module", | ||
@@ -23,3 +23,2 @@ "repository": { | ||
| "main": "./dist/index.cjs", | ||
| "module": "./dist/index.js", | ||
| "types": "./dist/index.d.ts", | ||
@@ -41,3 +40,4 @@ "files": [ | ||
| "test": "vitest run" | ||
| } | ||
| }, | ||
| "module": "./dist/index.js" | ||
| } |
No README
QualityPackage does not have a README. This may indicate a failed publish or a low quality package.
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
95665
75.18%8
14.29%1179
67.23%1
-50%0
-100%164
Infinity%