🎩 You're Invited:Meet the Socket team at Black Hat in Las Vegas, August 3-6.RSVP
Sign In

@buckt/sdk

Package Overview
Dependencies
Maintainers
1
Versions
2
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@buckt/sdk - npm Package Compare versions

Comparing version
0.0.0
to
1.0.0
+163
README.md
# @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

@@ -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":"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","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":[]}
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 };
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 };

@@ -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":[]}
{
"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"
}