listbee 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +552 -0
- package/dist/cjs/base-client.d.ts +65 -0
- package/dist/cjs/base-client.js +167 -0
- package/dist/cjs/base-client.js.map +1 -0
- package/dist/cjs/client.d.ts +58 -0
- package/dist/cjs/client.js +54 -0
- package/dist/cjs/client.js.map +1 -0
- package/dist/cjs/constants.d.ts +17 -0
- package/dist/cjs/constants.js +21 -0
- package/dist/cjs/constants.js.map +1 -0
- package/dist/cjs/errors.d.ts +89 -0
- package/dist/cjs/errors.js +141 -0
- package/dist/cjs/errors.js.map +1 -0
- package/dist/cjs/index.d.ts +26 -0
- package/dist/cjs/index.js +49 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/resources/account.d.ts +25 -0
- package/dist/cjs/resources/account.js +39 -0
- package/dist/cjs/resources/account.js.map +1 -0
- package/dist/cjs/resources/api-keys.d.ts +14 -0
- package/dist/cjs/resources/api-keys.js +26 -0
- package/dist/cjs/resources/api-keys.js.map +1 -0
- package/dist/cjs/resources/index.d.ts +7 -0
- package/dist/cjs/resources/index.js +18 -0
- package/dist/cjs/resources/index.js.map +1 -0
- package/dist/cjs/resources/listings.d.ts +70 -0
- package/dist/cjs/resources/listings.js +161 -0
- package/dist/cjs/resources/listings.js.map +1 -0
- package/dist/cjs/resources/orders.d.ts +11 -0
- package/dist/cjs/resources/orders.js +36 -0
- package/dist/cjs/resources/orders.js.map +1 -0
- package/dist/cjs/resources/signup.d.ts +16 -0
- package/dist/cjs/resources/signup.js +21 -0
- package/dist/cjs/resources/signup.js.map +1 -0
- package/dist/cjs/resources/stores.d.ts +31 -0
- package/dist/cjs/resources/stores.js +67 -0
- package/dist/cjs/resources/stores.js.map +1 -0
- package/dist/cjs/resources/stripe.d.ts +15 -0
- package/dist/cjs/resources/stripe.js +25 -0
- package/dist/cjs/resources/stripe.js.map +1 -0
- package/dist/cjs/resources/webhooks.d.ts +15 -0
- package/dist/cjs/resources/webhooks.js +55 -0
- package/dist/cjs/resources/webhooks.js.map +1 -0
- package/dist/cjs/types/account.d.ts +47 -0
- package/dist/cjs/types/account.js +6 -0
- package/dist/cjs/types/account.js.map +1 -0
- package/dist/cjs/types/api-key.d.ts +18 -0
- package/dist/cjs/types/api-key.js +6 -0
- package/dist/cjs/types/api-key.js.map +1 -0
- package/dist/cjs/types/index.d.ts +10 -0
- package/dist/cjs/types/index.js +10 -0
- package/dist/cjs/types/index.js.map +1 -0
- package/dist/cjs/types/listing.d.ts +177 -0
- package/dist/cjs/types/listing.js +6 -0
- package/dist/cjs/types/listing.js.map +1 -0
- package/dist/cjs/types/order.d.ts +42 -0
- package/dist/cjs/types/order.js +6 -0
- package/dist/cjs/types/order.js.map +1 -0
- package/dist/cjs/types/shared.d.ts +87 -0
- package/dist/cjs/types/shared.js +41 -0
- package/dist/cjs/types/shared.js.map +1 -0
- package/dist/cjs/types/signup.d.ts +24 -0
- package/dist/cjs/types/signup.js +6 -0
- package/dist/cjs/types/signup.js.map +1 -0
- package/dist/cjs/types/store.d.ts +70 -0
- package/dist/cjs/types/store.js +6 -0
- package/dist/cjs/types/store.js.map +1 -0
- package/dist/cjs/types/stripe.d.ts +12 -0
- package/dist/cjs/types/stripe.js +6 -0
- package/dist/cjs/types/stripe.js.map +1 -0
- package/dist/cjs/types/webhook.d.ts +88 -0
- package/dist/cjs/types/webhook.js +6 -0
- package/dist/cjs/types/webhook.js.map +1 -0
- package/dist/esm/base-client.d.ts +65 -0
- package/dist/esm/base-client.js +159 -0
- package/dist/esm/base-client.js.map +1 -0
- package/dist/esm/client.d.ts +58 -0
- package/dist/esm/client.js +50 -0
- package/dist/esm/client.js.map +1 -0
- package/dist/esm/constants.d.ts +17 -0
- package/dist/esm/constants.js +18 -0
- package/dist/esm/constants.js.map +1 -0
- package/dist/esm/errors.d.ts +89 -0
- package/dist/esm/errors.js +124 -0
- package/dist/esm/errors.js.map +1 -0
- package/dist/esm/index.d.ts +26 -0
- package/dist/esm/index.js +20 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/resources/account.d.ts +25 -0
- package/dist/esm/resources/account.js +35 -0
- package/dist/esm/resources/account.js.map +1 -0
- package/dist/esm/resources/api-keys.d.ts +14 -0
- package/dist/esm/resources/api-keys.js +21 -0
- package/dist/esm/resources/api-keys.js.map +1 -0
- package/dist/esm/resources/index.d.ts +7 -0
- package/dist/esm/resources/index.js +8 -0
- package/dist/esm/resources/index.js.map +1 -0
- package/dist/esm/resources/listings.d.ts +70 -0
- package/dist/esm/resources/listings.js +156 -0
- package/dist/esm/resources/listings.js.map +1 -0
- package/dist/esm/resources/orders.d.ts +11 -0
- package/dist/esm/resources/orders.js +31 -0
- package/dist/esm/resources/orders.js.map +1 -0
- package/dist/esm/resources/signup.d.ts +16 -0
- package/dist/esm/resources/signup.js +17 -0
- package/dist/esm/resources/signup.js.map +1 -0
- package/dist/esm/resources/stores.d.ts +31 -0
- package/dist/esm/resources/stores.js +63 -0
- package/dist/esm/resources/stores.js.map +1 -0
- package/dist/esm/resources/stripe.d.ts +15 -0
- package/dist/esm/resources/stripe.js +21 -0
- package/dist/esm/resources/stripe.js.map +1 -0
- package/dist/esm/resources/webhooks.d.ts +15 -0
- package/dist/esm/resources/webhooks.js +49 -0
- package/dist/esm/resources/webhooks.js.map +1 -0
- package/dist/esm/types/account.d.ts +47 -0
- package/dist/esm/types/account.js +5 -0
- package/dist/esm/types/account.js.map +1 -0
- package/dist/esm/types/api-key.d.ts +18 -0
- package/dist/esm/types/api-key.js +5 -0
- package/dist/esm/types/api-key.js.map +1 -0
- package/dist/esm/types/index.d.ts +10 -0
- package/dist/esm/types/index.js +2 -0
- package/dist/esm/types/index.js.map +1 -0
- package/dist/esm/types/listing.d.ts +177 -0
- package/dist/esm/types/listing.js +5 -0
- package/dist/esm/types/listing.js.map +1 -0
- package/dist/esm/types/order.d.ts +42 -0
- package/dist/esm/types/order.js +5 -0
- package/dist/esm/types/order.js.map +1 -0
- package/dist/esm/types/shared.d.ts +87 -0
- package/dist/esm/types/shared.js +38 -0
- package/dist/esm/types/shared.js.map +1 -0
- package/dist/esm/types/signup.d.ts +24 -0
- package/dist/esm/types/signup.js +5 -0
- package/dist/esm/types/signup.js.map +1 -0
- package/dist/esm/types/store.d.ts +70 -0
- package/dist/esm/types/store.js +5 -0
- package/dist/esm/types/store.js.map +1 -0
- package/dist/esm/types/stripe.d.ts +12 -0
- package/dist/esm/types/stripe.js +5 -0
- package/dist/esm/types/stripe.js.map +1 -0
- package/dist/esm/types/webhook.d.ts +88 -0
- package/dist/esm/types/webhook.js +5 -0
- package/dist/esm/types/webhook.js.map +1 -0
- package/package.json +136 -0
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Store and domain response types.
|
|
3
|
+
*/
|
|
4
|
+
/** Domain verification status. */
|
|
5
|
+
export type DomainStatus = 'pending' | 'verified' | 'stale';
|
|
6
|
+
/** Store object returned by the ListBee API. */
|
|
7
|
+
export interface StoreResponse {
|
|
8
|
+
/** Object type discriminator. Always "store". */
|
|
9
|
+
object: 'store';
|
|
10
|
+
/** Unique store identifier. */
|
|
11
|
+
id: string;
|
|
12
|
+
/** URL-safe handle used in platform URLs. */
|
|
13
|
+
handle: string;
|
|
14
|
+
/** Store display name. Falls back to @handle if not set. */
|
|
15
|
+
name: string | null;
|
|
16
|
+
/** Resolved display name: name if set, otherwise @handle. */
|
|
17
|
+
display_name: string;
|
|
18
|
+
/** Short store bio. */
|
|
19
|
+
bio: string | null;
|
|
20
|
+
/** Social media URLs. */
|
|
21
|
+
social_links: string[];
|
|
22
|
+
/** True when the store has a payment provider configured. */
|
|
23
|
+
payment_connected: boolean;
|
|
24
|
+
/** Payment provider name or null if not configured. */
|
|
25
|
+
payment_provider: string | null;
|
|
26
|
+
/** Default currency code (ISO 4217, lowercase). Null until payment configured. */
|
|
27
|
+
currency: string | null;
|
|
28
|
+
/** Custom domain configured on this store. Null if not set. */
|
|
29
|
+
domain: string | null;
|
|
30
|
+
/** Domain verification status. Null if no domain configured. */
|
|
31
|
+
domain_status: DomainStatus | null;
|
|
32
|
+
/** Number of listings in this store. */
|
|
33
|
+
listing_count: number;
|
|
34
|
+
/** ISO 8601 timestamp of when the store was created. */
|
|
35
|
+
created_at: string;
|
|
36
|
+
}
|
|
37
|
+
/** Non-paginated list of stores. */
|
|
38
|
+
export interface StoreListResponse {
|
|
39
|
+
object: 'list';
|
|
40
|
+
data: StoreResponse[];
|
|
41
|
+
}
|
|
42
|
+
/** Custom domain object returned by the ListBee API. */
|
|
43
|
+
export interface DomainResponse {
|
|
44
|
+
/** Object type discriminator. Always "domain". */
|
|
45
|
+
object: 'domain';
|
|
46
|
+
/** The custom domain. */
|
|
47
|
+
domain: string;
|
|
48
|
+
/** Verification status: pending, verified, or stale. */
|
|
49
|
+
status: DomainStatus;
|
|
50
|
+
/** The CNAME target the domain must point to. */
|
|
51
|
+
cname_target: string;
|
|
52
|
+
/** Timestamp when domain was verified. Null if not yet verified. */
|
|
53
|
+
verified_at: string | null;
|
|
54
|
+
}
|
|
55
|
+
/** Parameters for creating a store. */
|
|
56
|
+
export interface CreateStoreParams {
|
|
57
|
+
/** URL-safe handle, unique globally. */
|
|
58
|
+
handle: string;
|
|
59
|
+
/** Optional display name. */
|
|
60
|
+
name?: string;
|
|
61
|
+
}
|
|
62
|
+
/** Parameters for updating a store. */
|
|
63
|
+
export interface UpdateStoreParams {
|
|
64
|
+
/** Store display name. */
|
|
65
|
+
name?: string;
|
|
66
|
+
/** Short store bio. */
|
|
67
|
+
bio?: string;
|
|
68
|
+
/** Social media URLs (HTTPS only, max 5). */
|
|
69
|
+
social_links?: string[];
|
|
70
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/types/store.ts"],"names":[],"mappings":";AAAA;;GAEG"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stripe resource response types.
|
|
3
|
+
*/
|
|
4
|
+
/** Response from the Stripe Connect session endpoint. */
|
|
5
|
+
export interface StripeConnectSessionResponse {
|
|
6
|
+
/** Object type discriminator. Always "stripe_connect_session". */
|
|
7
|
+
object: 'stripe_connect_session';
|
|
8
|
+
/** Stripe Connect onboarding URL — redirect the user here. */
|
|
9
|
+
url: string;
|
|
10
|
+
/** ISO 8601 timestamp when this session expires. */
|
|
11
|
+
expires_at: string;
|
|
12
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stripe.js","sourceRoot":"","sources":["../../../src/types/stripe.ts"],"names":[],"mappings":";AAAA;;GAEG"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Webhook response types.
|
|
3
|
+
*/
|
|
4
|
+
import type { WebhookEventType } from './shared';
|
|
5
|
+
/** Full webhook object returned by the ListBee API. */
|
|
6
|
+
export interface WebhookResponse {
|
|
7
|
+
/** Object type discriminator. Always "webhook". */
|
|
8
|
+
object: 'webhook';
|
|
9
|
+
/** Unique webhook identifier. */
|
|
10
|
+
id: string;
|
|
11
|
+
/** Display name. */
|
|
12
|
+
name: string;
|
|
13
|
+
/** HTTPS endpoint URL. */
|
|
14
|
+
url: string;
|
|
15
|
+
/** HMAC signing secret for verifying payloads. */
|
|
16
|
+
secret: string;
|
|
17
|
+
/** Event types to subscribe to. Empty array = all events. */
|
|
18
|
+
events: WebhookEventType[];
|
|
19
|
+
/** Whether this webhook is currently active. */
|
|
20
|
+
enabled: boolean;
|
|
21
|
+
/** ISO 8601 timestamp of when the webhook was created. */
|
|
22
|
+
created_at: string;
|
|
23
|
+
}
|
|
24
|
+
/** Parameters for creating a webhook. */
|
|
25
|
+
export interface CreateWebhookParams {
|
|
26
|
+
/** Display name. */
|
|
27
|
+
name: string;
|
|
28
|
+
/** HTTPS endpoint URL. */
|
|
29
|
+
url: string;
|
|
30
|
+
/** Event types to subscribe to. Omit or empty = all events. */
|
|
31
|
+
events?: WebhookEventType[];
|
|
32
|
+
}
|
|
33
|
+
/** Parameters for updating a webhook. All fields optional. */
|
|
34
|
+
export interface UpdateWebhookParams {
|
|
35
|
+
/** Display name. */
|
|
36
|
+
name?: string;
|
|
37
|
+
/** HTTPS endpoint URL. */
|
|
38
|
+
url?: string;
|
|
39
|
+
/** Event types to subscribe to. */
|
|
40
|
+
events?: WebhookEventType[];
|
|
41
|
+
/** Whether this webhook is active. */
|
|
42
|
+
enabled?: boolean;
|
|
43
|
+
}
|
|
44
|
+
/** A single webhook delivery event. */
|
|
45
|
+
export interface WebhookEventResponse {
|
|
46
|
+
/** Object type discriminator. Always "webhook_event". */
|
|
47
|
+
object: 'webhook_event';
|
|
48
|
+
/** Unique event identifier. */
|
|
49
|
+
id: string;
|
|
50
|
+
/** The event type that triggered this delivery. */
|
|
51
|
+
event_type: WebhookEventType;
|
|
52
|
+
/** Delivery status. */
|
|
53
|
+
status: 'pending' | 'delivered' | 'failed';
|
|
54
|
+
/** Number of delivery attempts so far. */
|
|
55
|
+
attempts: number;
|
|
56
|
+
/** Maximum delivery attempts before marking as failed. */
|
|
57
|
+
max_retries: number;
|
|
58
|
+
/** HTTP status code from the last delivery attempt. */
|
|
59
|
+
response_status: number | null;
|
|
60
|
+
/** Error message from the last failed delivery attempt. */
|
|
61
|
+
last_error: string | null;
|
|
62
|
+
/** ISO 8601 timestamp of when the event was created. */
|
|
63
|
+
created_at: string;
|
|
64
|
+
/** ISO 8601 timestamp of successful delivery. */
|
|
65
|
+
delivered_at: string | null;
|
|
66
|
+
}
|
|
67
|
+
/** Parameters for listing webhook events. */
|
|
68
|
+
export interface ListWebhookEventsParams {
|
|
69
|
+
/** Filter by delivery status. */
|
|
70
|
+
status?: 'pending' | 'delivered' | 'failed';
|
|
71
|
+
/** Maximum items per page (default 20). */
|
|
72
|
+
limit?: number;
|
|
73
|
+
/** Pagination cursor from a previous response. */
|
|
74
|
+
cursor?: string;
|
|
75
|
+
}
|
|
76
|
+
/** Response from the webhook test endpoint. */
|
|
77
|
+
export interface WebhookTestResponse {
|
|
78
|
+
/** Object type discriminator. Always "webhook_test". */
|
|
79
|
+
object: 'webhook_test';
|
|
80
|
+
/** Whether the test delivery succeeded (endpoint returned 2xx). */
|
|
81
|
+
success: boolean;
|
|
82
|
+
/** HTTP status code from the endpoint. */
|
|
83
|
+
status_code: number | null;
|
|
84
|
+
/** Response body from the endpoint (truncated to 2000 chars). */
|
|
85
|
+
response_body: string | null;
|
|
86
|
+
/** Error message if delivery failed. */
|
|
87
|
+
error: string | null;
|
|
88
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhook.js","sourceRoot":"","sources":["../../../src/types/webhook.ts"],"names":[],"mappings":";AAAA;;GAEG"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base HTTP client for the ListBee SDK.
|
|
3
|
+
*/
|
|
4
|
+
import type { ListResponse } from './types/shared';
|
|
5
|
+
/** Options accepted by the ListBee client constructor. */
|
|
6
|
+
export interface ClientOptions {
|
|
7
|
+
/** Your ListBee API key (lb_...). Falls back to LISTBEE_API_KEY env var. */
|
|
8
|
+
apiKey?: string;
|
|
9
|
+
/** API base URL. Default: https://api.listbee.so */
|
|
10
|
+
baseUrl?: string;
|
|
11
|
+
/** Default request timeout in milliseconds. Default: 30000 */
|
|
12
|
+
timeoutMs?: number;
|
|
13
|
+
/** Max retries on 429/5xx responses. Default: 3 */
|
|
14
|
+
maxRetries?: number;
|
|
15
|
+
}
|
|
16
|
+
/** Options for individual HTTP requests. */
|
|
17
|
+
export interface RequestOptions {
|
|
18
|
+
/** Request timeout in milliseconds. */
|
|
19
|
+
timeoutMs?: number;
|
|
20
|
+
/** Whether to include the Authorization header. Default: true. */
|
|
21
|
+
authenticated?: boolean;
|
|
22
|
+
}
|
|
23
|
+
/** A cursor page holding one page of results. */
|
|
24
|
+
export declare class CursorPage<T> {
|
|
25
|
+
readonly object: "list";
|
|
26
|
+
readonly data: T[];
|
|
27
|
+
readonly has_more: boolean;
|
|
28
|
+
readonly cursor: string | null;
|
|
29
|
+
constructor(body: ListResponse<T>);
|
|
30
|
+
}
|
|
31
|
+
/** Internal HTTP response wrapper. */
|
|
32
|
+
interface HttpResponse {
|
|
33
|
+
status: number;
|
|
34
|
+
headers: Record<string, string>;
|
|
35
|
+
json(): Promise<unknown>;
|
|
36
|
+
text(): Promise<string>;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Low-level HTTP client with auth, retries, and error handling.
|
|
40
|
+
*/
|
|
41
|
+
export declare class BaseClient {
|
|
42
|
+
protected readonly _apiKey: string | undefined;
|
|
43
|
+
protected readonly _baseUrl: string;
|
|
44
|
+
protected readonly _timeoutMs: number;
|
|
45
|
+
protected readonly _maxRetries: number;
|
|
46
|
+
constructor(opts?: ClientOptions);
|
|
47
|
+
protected _ensureApiKey(): string;
|
|
48
|
+
protected _buildHeaders(authenticated?: boolean): Record<string, string>;
|
|
49
|
+
protected _shouldRetry(status: number, attempt: number): boolean;
|
|
50
|
+
protected _retryDelayMs(attempt: number, headers: Record<string, string>): number;
|
|
51
|
+
/** Perform an HTTP request with retry logic. */
|
|
52
|
+
_request(method: string, path: string, opts?: {
|
|
53
|
+
body?: unknown;
|
|
54
|
+
params?: Record<string, string | number | boolean>;
|
|
55
|
+
timeoutMs?: number;
|
|
56
|
+
authenticated?: boolean;
|
|
57
|
+
}): Promise<HttpResponse>;
|
|
58
|
+
get(path: string, params?: Record<string, string | number | boolean>, options?: RequestOptions): Promise<HttpResponse>;
|
|
59
|
+
post(path: string, body?: unknown, options?: RequestOptions): Promise<HttpResponse>;
|
|
60
|
+
put(path: string, body?: unknown, options?: RequestOptions): Promise<HttpResponse>;
|
|
61
|
+
patch(path: string, body?: unknown, options?: RequestOptions): Promise<HttpResponse>;
|
|
62
|
+
delete(path: string, options?: RequestOptions): Promise<HttpResponse>;
|
|
63
|
+
getPage<T>(path: string, params: Record<string, string | number | boolean>, parse: (item: unknown) => T, options?: RequestOptions): Promise<CursorPage<T>>;
|
|
64
|
+
}
|
|
65
|
+
export {};
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base HTTP client for the ListBee SDK.
|
|
3
|
+
*/
|
|
4
|
+
import { DEFAULT_BASE_URL, DEFAULT_MAX_RETRIES, DEFAULT_TIMEOUT_MS, INITIAL_RETRY_DELAY_MS, MAX_RETRY_DELAY_MS, RETRY_STATUS_CODES, } from './constants';
|
|
5
|
+
import { APIConnectionError, APITimeoutError, ListBeeError, raiseForStatus } from './errors';
|
|
6
|
+
const SDK_VERSION = '0.1.0';
|
|
7
|
+
/** A cursor page holding one page of results. */
|
|
8
|
+
export class CursorPage {
|
|
9
|
+
constructor(body) {
|
|
10
|
+
this.object = 'list';
|
|
11
|
+
this.data = body.data;
|
|
12
|
+
this.has_more = body.has_more;
|
|
13
|
+
this.cursor = body.cursor;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Low-level HTTP client with auth, retries, and error handling.
|
|
18
|
+
*/
|
|
19
|
+
export class BaseClient {
|
|
20
|
+
constructor(opts = {}) {
|
|
21
|
+
this._apiKey = opts.apiKey ?? process.env['LISTBEE_API_KEY'];
|
|
22
|
+
this._baseUrl = (opts.baseUrl ?? DEFAULT_BASE_URL).replace(/\/$/, '');
|
|
23
|
+
this._timeoutMs = opts.timeoutMs ?? DEFAULT_TIMEOUT_MS;
|
|
24
|
+
this._maxRetries = opts.maxRetries ?? DEFAULT_MAX_RETRIES;
|
|
25
|
+
}
|
|
26
|
+
_ensureApiKey() {
|
|
27
|
+
if (!this._apiKey) {
|
|
28
|
+
throw new ListBeeError('No API key provided. Set apiKey= or the LISTBEE_API_KEY environment variable.');
|
|
29
|
+
}
|
|
30
|
+
return this._apiKey;
|
|
31
|
+
}
|
|
32
|
+
_buildHeaders(authenticated = true) {
|
|
33
|
+
const headers = {
|
|
34
|
+
'Content-Type': 'application/json',
|
|
35
|
+
'User-Agent': `listbee-typescript/${SDK_VERSION}`,
|
|
36
|
+
};
|
|
37
|
+
if (authenticated) {
|
|
38
|
+
const key = this._ensureApiKey();
|
|
39
|
+
headers['Authorization'] = `Bearer ${key}`;
|
|
40
|
+
}
|
|
41
|
+
return headers;
|
|
42
|
+
}
|
|
43
|
+
_shouldRetry(status, attempt) {
|
|
44
|
+
return RETRY_STATUS_CODES.has(status) && attempt < this._maxRetries;
|
|
45
|
+
}
|
|
46
|
+
_retryDelayMs(attempt, headers) {
|
|
47
|
+
const retryAfter = headers['retry-after'];
|
|
48
|
+
if (retryAfter != null) {
|
|
49
|
+
const parsed = parseFloat(retryAfter);
|
|
50
|
+
if (!isNaN(parsed)) {
|
|
51
|
+
return Math.min(parsed * 1000, MAX_RETRY_DELAY_MS);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
const delay = INITIAL_RETRY_DELAY_MS * Math.pow(2, attempt);
|
|
55
|
+
const capped = Math.min(delay, MAX_RETRY_DELAY_MS);
|
|
56
|
+
const jitter = capped * 0.25 * (Math.random() * 2 - 1);
|
|
57
|
+
return Math.max(0, capped + jitter);
|
|
58
|
+
}
|
|
59
|
+
/** Perform an HTTP request with retry logic. */
|
|
60
|
+
async _request(method, path, opts = {}) {
|
|
61
|
+
const { body, params, authenticated = true } = opts;
|
|
62
|
+
const effectiveTimeout = opts.timeoutMs ?? this._timeoutMs;
|
|
63
|
+
const headers = this._buildHeaders(authenticated);
|
|
64
|
+
let url = `${this._baseUrl}${path}`;
|
|
65
|
+
if (params && Object.keys(params).length > 0) {
|
|
66
|
+
const entries = {};
|
|
67
|
+
for (const [k, v] of Object.entries(params)) {
|
|
68
|
+
entries[k] = String(v);
|
|
69
|
+
}
|
|
70
|
+
const qs = new URLSearchParams(entries).toString();
|
|
71
|
+
url = `${url}?${qs}`;
|
|
72
|
+
}
|
|
73
|
+
let attempt = 0;
|
|
74
|
+
while (true) {
|
|
75
|
+
let response;
|
|
76
|
+
try {
|
|
77
|
+
const controller = new AbortController();
|
|
78
|
+
const timeoutId = setTimeout(() => controller.abort(), effectiveTimeout);
|
|
79
|
+
let fetchResponse;
|
|
80
|
+
try {
|
|
81
|
+
fetchResponse = await fetch(url, {
|
|
82
|
+
method,
|
|
83
|
+
headers,
|
|
84
|
+
body: body !== undefined ? JSON.stringify(body) : undefined,
|
|
85
|
+
signal: controller.signal,
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
finally {
|
|
89
|
+
clearTimeout(timeoutId);
|
|
90
|
+
}
|
|
91
|
+
// Convert fetch Response to our internal shape
|
|
92
|
+
const responseHeaders = {};
|
|
93
|
+
fetchResponse.headers.forEach((value, key) => {
|
|
94
|
+
responseHeaders[key.toLowerCase()] = value;
|
|
95
|
+
});
|
|
96
|
+
const responseText = await fetchResponse.text();
|
|
97
|
+
response = {
|
|
98
|
+
status: fetchResponse.status,
|
|
99
|
+
headers: responseHeaders,
|
|
100
|
+
json: async () => JSON.parse(responseText),
|
|
101
|
+
text: async () => responseText,
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
catch (err) {
|
|
105
|
+
if (err instanceof Error && err.name === 'AbortError') {
|
|
106
|
+
throw new APITimeoutError(`Request timed out after ${effectiveTimeout}ms`);
|
|
107
|
+
}
|
|
108
|
+
throw new APIConnectionError(`Connection error: ${String(err)}`);
|
|
109
|
+
}
|
|
110
|
+
if (response.status >= 400) {
|
|
111
|
+
if (this._shouldRetry(response.status, attempt)) {
|
|
112
|
+
const delay = this._retryDelayMs(attempt, response.headers);
|
|
113
|
+
await new Promise((resolve) => setTimeout(resolve, delay));
|
|
114
|
+
attempt++;
|
|
115
|
+
continue;
|
|
116
|
+
}
|
|
117
|
+
let errorBody = {};
|
|
118
|
+
try {
|
|
119
|
+
errorBody = (await response.json());
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
// ignore parse errors
|
|
123
|
+
}
|
|
124
|
+
raiseForStatus(response.status, errorBody, response.headers);
|
|
125
|
+
}
|
|
126
|
+
return response;
|
|
127
|
+
}
|
|
128
|
+
// Exhausted retries — should not be reached in normal flow
|
|
129
|
+
/* istanbul ignore next */
|
|
130
|
+
throw new APIConnectionError('Request failed');
|
|
131
|
+
}
|
|
132
|
+
async get(path, params, options) {
|
|
133
|
+
return this._request('GET', path, { params, ...options });
|
|
134
|
+
}
|
|
135
|
+
async post(path, body, options) {
|
|
136
|
+
return this._request('POST', path, { body, ...options });
|
|
137
|
+
}
|
|
138
|
+
async put(path, body, options) {
|
|
139
|
+
return this._request('PUT', path, { body, ...options });
|
|
140
|
+
}
|
|
141
|
+
async patch(path, body, options) {
|
|
142
|
+
return this._request('PATCH', path, { body, ...options });
|
|
143
|
+
}
|
|
144
|
+
async delete(path, options) {
|
|
145
|
+
return this._request('DELETE', path, { ...options });
|
|
146
|
+
}
|
|
147
|
+
async getPage(path, params, parse, options) {
|
|
148
|
+
const response = await this.get(path, params, options);
|
|
149
|
+
const raw = (await response.json());
|
|
150
|
+
const data = (raw.data ?? []).map(parse);
|
|
151
|
+
return new CursorPage({
|
|
152
|
+
object: 'list',
|
|
153
|
+
data,
|
|
154
|
+
has_more: raw.has_more ?? false,
|
|
155
|
+
cursor: raw.cursor ?? null,
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=base-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-client.js","sourceRoot":"","sources":["../../src/base-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ListBee TypeScript SDK — top-level client.
|
|
3
|
+
*/
|
|
4
|
+
import { BaseClient, type ClientOptions } from './base-client';
|
|
5
|
+
import { AccountResource } from './resources/account';
|
|
6
|
+
import { ListingsResource } from './resources/listings';
|
|
7
|
+
import { ApiKeysResource } from './resources/api-keys';
|
|
8
|
+
import { OrdersResource } from './resources/orders';
|
|
9
|
+
import { SignupResource } from './resources/signup';
|
|
10
|
+
import { StripeResource } from './resources/stripe';
|
|
11
|
+
import { StoresResource } from './resources/stores';
|
|
12
|
+
import { WebhooksResource } from './resources/webhooks';
|
|
13
|
+
export type { ClientOptions };
|
|
14
|
+
/**
|
|
15
|
+
* ListBee API client.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```typescript
|
|
19
|
+
* import { ListBee } from 'listbee';
|
|
20
|
+
*
|
|
21
|
+
* const client = new ListBee({ apiKey: 'lb_...' });
|
|
22
|
+
*
|
|
23
|
+
* const listing = await client.listings.create({
|
|
24
|
+
* name: 'SEO Playbook',
|
|
25
|
+
* price: 2999,
|
|
26
|
+
* content: 'https://example.com/ebook.pdf',
|
|
27
|
+
* });
|
|
28
|
+
* console.log(listing.url);
|
|
29
|
+
* ```
|
|
30
|
+
*
|
|
31
|
+
* The client reads LISTBEE_API_KEY from the environment if no apiKey is provided.
|
|
32
|
+
*/
|
|
33
|
+
export declare class ListBee extends BaseClient {
|
|
34
|
+
private _account?;
|
|
35
|
+
private _listings?;
|
|
36
|
+
private _apiKeys?;
|
|
37
|
+
private _orders?;
|
|
38
|
+
private _signup?;
|
|
39
|
+
private _stripe?;
|
|
40
|
+
private _stores?;
|
|
41
|
+
private _webhooks?;
|
|
42
|
+
/** Account resource — get and update your account. */
|
|
43
|
+
get account(): AccountResource;
|
|
44
|
+
/** Listings resource — create, read, update, delete, pause, resume listings. */
|
|
45
|
+
get listings(): ListingsResource;
|
|
46
|
+
/** API Keys resource — list, create, delete API keys. */
|
|
47
|
+
get apiKeys(): ApiKeysResource;
|
|
48
|
+
/** Orders resource — get and list orders. */
|
|
49
|
+
get orders(): OrdersResource;
|
|
50
|
+
/** Signup resource — create account and verify OTP (unauthenticated). */
|
|
51
|
+
get signup(): SignupResource;
|
|
52
|
+
/** Stripe resource — set key, connect, disconnect Stripe. */
|
|
53
|
+
get stripe(): StripeResource;
|
|
54
|
+
/** Stores resource — create, read, update, delete stores, connect Stripe, manage domains. */
|
|
55
|
+
get stores(): StoresResource;
|
|
56
|
+
/** Webhooks resource — create, list, update, delete, list events, test. */
|
|
57
|
+
get webhooks(): WebhooksResource;
|
|
58
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ListBee TypeScript SDK — top-level client.
|
|
3
|
+
*/
|
|
4
|
+
import { BaseClient } from './base-client';
|
|
5
|
+
import { AccountResource } from './resources/account';
|
|
6
|
+
import { ListingsResource } from './resources/listings';
|
|
7
|
+
import { ApiKeysResource } from './resources/api-keys';
|
|
8
|
+
import { OrdersResource } from './resources/orders';
|
|
9
|
+
import { SignupResource } from './resources/signup';
|
|
10
|
+
import { StripeResource } from './resources/stripe';
|
|
11
|
+
import { StoresResource } from './resources/stores';
|
|
12
|
+
import { WebhooksResource } from './resources/webhooks';
|
|
13
|
+
/**
|
|
14
|
+
* ListBee API client.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```typescript
|
|
18
|
+
* import { ListBee } from 'listbee';
|
|
19
|
+
*
|
|
20
|
+
* const client = new ListBee({ apiKey: 'lb_...' });
|
|
21
|
+
*
|
|
22
|
+
* const listing = await client.listings.create({
|
|
23
|
+
* name: 'SEO Playbook',
|
|
24
|
+
* price: 2999,
|
|
25
|
+
* content: 'https://example.com/ebook.pdf',
|
|
26
|
+
* });
|
|
27
|
+
* console.log(listing.url);
|
|
28
|
+
* ```
|
|
29
|
+
*
|
|
30
|
+
* The client reads LISTBEE_API_KEY from the environment if no apiKey is provided.
|
|
31
|
+
*/
|
|
32
|
+
export class ListBee extends BaseClient {
|
|
33
|
+
/** Account resource — get and update your account. */
|
|
34
|
+
get account() { return (this._account ?? (this._account = new AccountResource(this))); }
|
|
35
|
+
/** Listings resource — create, read, update, delete, pause, resume listings. */
|
|
36
|
+
get listings() { return (this._listings ?? (this._listings = new ListingsResource(this))); }
|
|
37
|
+
/** API Keys resource — list, create, delete API keys. */
|
|
38
|
+
get apiKeys() { return (this._apiKeys ?? (this._apiKeys = new ApiKeysResource(this))); }
|
|
39
|
+
/** Orders resource — get and list orders. */
|
|
40
|
+
get orders() { return (this._orders ?? (this._orders = new OrdersResource(this))); }
|
|
41
|
+
/** Signup resource — create account and verify OTP (unauthenticated). */
|
|
42
|
+
get signup() { return (this._signup ?? (this._signup = new SignupResource(this))); }
|
|
43
|
+
/** Stripe resource — set key, connect, disconnect Stripe. */
|
|
44
|
+
get stripe() { return (this._stripe ?? (this._stripe = new StripeResource(this))); }
|
|
45
|
+
/** Stores resource — create, read, update, delete stores, connect Stripe, manage domains. */
|
|
46
|
+
get stores() { return (this._stores ?? (this._stores = new StoresResource(this))); }
|
|
47
|
+
/** Webhooks resource — create, list, update, delete, list events, test. */
|
|
48
|
+
get webhooks() { return (this._webhooks ?? (this._webhooks = new WebhooksResource(this))); }
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAsB,MAAM,eAAe,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAIxD;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,OAAO,OAAQ,SAAQ,UAAU;IAUrC,sDAAsD;IACtD,IAAI,OAAO,KAAsB,OAAO,CAAC,IAAI,CAAC,QAAQ,KAAb,IAAI,CAAC,QAAQ,GAAK,IAAI,eAAe,CAAC,IAAI,CAAC,EAAC,CAAC,CAAC,CAAC;IACxF,gFAAgF;IAChF,IAAI,QAAQ,KAAuB,OAAO,CAAC,IAAI,CAAC,SAAS,KAAd,IAAI,CAAC,SAAS,GAAK,IAAI,gBAAgB,CAAC,IAAI,CAAC,EAAC,CAAC,CAAC,CAAC;IAC5F,yDAAyD;IACzD,IAAI,OAAO,KAAsB,OAAO,CAAC,IAAI,CAAC,QAAQ,KAAb,IAAI,CAAC,QAAQ,GAAK,IAAI,eAAe,CAAC,IAAI,CAAC,EAAC,CAAC,CAAC,CAAC;IACxF,6CAA6C;IAC7C,IAAI,MAAM,KAAqB,OAAO,CAAC,IAAI,CAAC,OAAO,KAAZ,IAAI,CAAC,OAAO,GAAK,IAAI,cAAc,CAAC,IAAI,CAAC,EAAC,CAAC,CAAC,CAAC;IACpF,yEAAyE;IACzE,IAAI,MAAM,KAAqB,OAAO,CAAC,IAAI,CAAC,OAAO,KAAZ,IAAI,CAAC,OAAO,GAAK,IAAI,cAAc,CAAC,IAAI,CAAC,EAAC,CAAC,CAAC,CAAC;IACpF,6DAA6D;IAC7D,IAAI,MAAM,KAAqB,OAAO,CAAC,IAAI,CAAC,OAAO,KAAZ,IAAI,CAAC,OAAO,GAAK,IAAI,cAAc,CAAC,IAAI,CAAC,EAAC,CAAC,CAAC,CAAC;IACpF,6FAA6F;IAC7F,IAAI,MAAM,KAAqB,OAAO,CAAC,IAAI,CAAC,OAAO,KAAZ,IAAI,CAAC,OAAO,GAAK,IAAI,cAAc,CAAC,IAAI,CAAC,EAAC,CAAC,CAAC,CAAC;IACpF,2EAA2E;IAC3E,IAAI,QAAQ,KAAuB,OAAO,CAAC,IAAI,CAAC,SAAS,KAAd,IAAI,CAAC,SAAS,GAAK,IAAI,gBAAgB,CAAC,IAAI,CAAC,EAAC,CAAC,CAAC,CAAC;CAC7F"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SDK-wide constants.
|
|
3
|
+
*/
|
|
4
|
+
/** Default API base URL. */
|
|
5
|
+
export declare const DEFAULT_BASE_URL = "https://api.listbee.so";
|
|
6
|
+
/** Default request timeout in milliseconds. */
|
|
7
|
+
export declare const DEFAULT_TIMEOUT_MS = 30000;
|
|
8
|
+
/** Default maximum retries on 429/5xx responses. */
|
|
9
|
+
export declare const DEFAULT_MAX_RETRIES = 3;
|
|
10
|
+
/** Extended timeout for listing create (cover processing can be slow). */
|
|
11
|
+
export declare const LISTING_CREATE_TIMEOUT_MS = 120000;
|
|
12
|
+
/** Initial retry backoff delay in milliseconds. */
|
|
13
|
+
export declare const INITIAL_RETRY_DELAY_MS = 500;
|
|
14
|
+
/** Maximum retry backoff delay in milliseconds. */
|
|
15
|
+
export declare const MAX_RETRY_DELAY_MS = 30000;
|
|
16
|
+
/** HTTP status codes that should trigger a retry. */
|
|
17
|
+
export declare const RETRY_STATUS_CODES: ReadonlySet<number>;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SDK-wide constants.
|
|
3
|
+
*/
|
|
4
|
+
/** Default API base URL. */
|
|
5
|
+
export const DEFAULT_BASE_URL = 'https://api.listbee.so';
|
|
6
|
+
/** Default request timeout in milliseconds. */
|
|
7
|
+
export const DEFAULT_TIMEOUT_MS = 30000;
|
|
8
|
+
/** Default maximum retries on 429/5xx responses. */
|
|
9
|
+
export const DEFAULT_MAX_RETRIES = 3;
|
|
10
|
+
/** Extended timeout for listing create (cover processing can be slow). */
|
|
11
|
+
export const LISTING_CREATE_TIMEOUT_MS = 120000;
|
|
12
|
+
/** Initial retry backoff delay in milliseconds. */
|
|
13
|
+
export const INITIAL_RETRY_DELAY_MS = 500;
|
|
14
|
+
/** Maximum retry backoff delay in milliseconds. */
|
|
15
|
+
export const MAX_RETRY_DELAY_MS = 30000;
|
|
16
|
+
/** HTTP status codes that should trigger a retry. */
|
|
17
|
+
export const RETRY_STATUS_CODES = new Set([429, 500, 502, 503, 504]);
|
|
18
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,4BAA4B;AAC5B,MAAM,CAAC,MAAM,gBAAgB,GAAG,wBAAwB,CAAC;AAEzD,+CAA+C;AAC/C,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAM,CAAC;AAEzC,oDAAoD;AACpD,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC;AAErC,0EAA0E;AAC1E,MAAM,CAAC,MAAM,yBAAyB,GAAG,MAAO,CAAC;AAEjD,mDAAmD;AACnD,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,CAAC;AAE1C,mDAAmD;AACnD,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAM,CAAC;AAEzC,qDAAqD;AACrD,MAAM,CAAC,MAAM,kBAAkB,GAAwB,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC"}
|