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,167 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Base HTTP client for the ListBee SDK.
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.BaseClient = exports.CursorPage = void 0;
|
|
7
|
+
const constants_1 = require("./constants");
|
|
8
|
+
const errors_1 = require("./errors");
|
|
9
|
+
const SDK_VERSION = '0.1.0';
|
|
10
|
+
/** A cursor page holding one page of results. */
|
|
11
|
+
class CursorPage {
|
|
12
|
+
constructor(body) {
|
|
13
|
+
this.object = 'list';
|
|
14
|
+
this.data = body.data;
|
|
15
|
+
this.has_more = body.has_more;
|
|
16
|
+
this.cursor = body.cursor;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
exports.CursorPage = CursorPage;
|
|
20
|
+
/**
|
|
21
|
+
* Low-level HTTP client with auth, retries, and error handling.
|
|
22
|
+
*/
|
|
23
|
+
class BaseClient {
|
|
24
|
+
constructor(opts = {}) {
|
|
25
|
+
var _a, _b, _c, _d;
|
|
26
|
+
this._apiKey = (_a = opts.apiKey) !== null && _a !== void 0 ? _a : process.env['LISTBEE_API_KEY'];
|
|
27
|
+
this._baseUrl = ((_b = opts.baseUrl) !== null && _b !== void 0 ? _b : constants_1.DEFAULT_BASE_URL).replace(/\/$/, '');
|
|
28
|
+
this._timeoutMs = (_c = opts.timeoutMs) !== null && _c !== void 0 ? _c : constants_1.DEFAULT_TIMEOUT_MS;
|
|
29
|
+
this._maxRetries = (_d = opts.maxRetries) !== null && _d !== void 0 ? _d : constants_1.DEFAULT_MAX_RETRIES;
|
|
30
|
+
}
|
|
31
|
+
_ensureApiKey() {
|
|
32
|
+
if (!this._apiKey) {
|
|
33
|
+
throw new errors_1.ListBeeError('No API key provided. Set apiKey= or the LISTBEE_API_KEY environment variable.');
|
|
34
|
+
}
|
|
35
|
+
return this._apiKey;
|
|
36
|
+
}
|
|
37
|
+
_buildHeaders(authenticated = true) {
|
|
38
|
+
const headers = {
|
|
39
|
+
'Content-Type': 'application/json',
|
|
40
|
+
'User-Agent': `listbee-typescript/${SDK_VERSION}`,
|
|
41
|
+
};
|
|
42
|
+
if (authenticated) {
|
|
43
|
+
const key = this._ensureApiKey();
|
|
44
|
+
headers['Authorization'] = `Bearer ${key}`;
|
|
45
|
+
}
|
|
46
|
+
return headers;
|
|
47
|
+
}
|
|
48
|
+
_shouldRetry(status, attempt) {
|
|
49
|
+
return constants_1.RETRY_STATUS_CODES.has(status) && attempt < this._maxRetries;
|
|
50
|
+
}
|
|
51
|
+
_retryDelayMs(attempt, headers) {
|
|
52
|
+
const retryAfter = headers['retry-after'];
|
|
53
|
+
if (retryAfter != null) {
|
|
54
|
+
const parsed = parseFloat(retryAfter);
|
|
55
|
+
if (!isNaN(parsed)) {
|
|
56
|
+
return Math.min(parsed * 1000, constants_1.MAX_RETRY_DELAY_MS);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
const delay = constants_1.INITIAL_RETRY_DELAY_MS * Math.pow(2, attempt);
|
|
60
|
+
const capped = Math.min(delay, constants_1.MAX_RETRY_DELAY_MS);
|
|
61
|
+
const jitter = capped * 0.25 * (Math.random() * 2 - 1);
|
|
62
|
+
return Math.max(0, capped + jitter);
|
|
63
|
+
}
|
|
64
|
+
/** Perform an HTTP request with retry logic. */
|
|
65
|
+
async _request(method, path, opts = {}) {
|
|
66
|
+
var _a;
|
|
67
|
+
const { body, params, authenticated = true } = opts;
|
|
68
|
+
const effectiveTimeout = (_a = opts.timeoutMs) !== null && _a !== void 0 ? _a : this._timeoutMs;
|
|
69
|
+
const headers = this._buildHeaders(authenticated);
|
|
70
|
+
let url = `${this._baseUrl}${path}`;
|
|
71
|
+
if (params && Object.keys(params).length > 0) {
|
|
72
|
+
const entries = {};
|
|
73
|
+
for (const [k, v] of Object.entries(params)) {
|
|
74
|
+
entries[k] = String(v);
|
|
75
|
+
}
|
|
76
|
+
const qs = new URLSearchParams(entries).toString();
|
|
77
|
+
url = `${url}?${qs}`;
|
|
78
|
+
}
|
|
79
|
+
let attempt = 0;
|
|
80
|
+
while (true) {
|
|
81
|
+
let response;
|
|
82
|
+
try {
|
|
83
|
+
const controller = new AbortController();
|
|
84
|
+
const timeoutId = setTimeout(() => controller.abort(), effectiveTimeout);
|
|
85
|
+
let fetchResponse;
|
|
86
|
+
try {
|
|
87
|
+
fetchResponse = await fetch(url, {
|
|
88
|
+
method,
|
|
89
|
+
headers,
|
|
90
|
+
body: body !== undefined ? JSON.stringify(body) : undefined,
|
|
91
|
+
signal: controller.signal,
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
finally {
|
|
95
|
+
clearTimeout(timeoutId);
|
|
96
|
+
}
|
|
97
|
+
// Convert fetch Response to our internal shape
|
|
98
|
+
const responseHeaders = {};
|
|
99
|
+
fetchResponse.headers.forEach((value, key) => {
|
|
100
|
+
responseHeaders[key.toLowerCase()] = value;
|
|
101
|
+
});
|
|
102
|
+
const responseText = await fetchResponse.text();
|
|
103
|
+
response = {
|
|
104
|
+
status: fetchResponse.status,
|
|
105
|
+
headers: responseHeaders,
|
|
106
|
+
json: async () => JSON.parse(responseText),
|
|
107
|
+
text: async () => responseText,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
catch (err) {
|
|
111
|
+
if (err instanceof Error && err.name === 'AbortError') {
|
|
112
|
+
throw new errors_1.APITimeoutError(`Request timed out after ${effectiveTimeout}ms`);
|
|
113
|
+
}
|
|
114
|
+
throw new errors_1.APIConnectionError(`Connection error: ${String(err)}`);
|
|
115
|
+
}
|
|
116
|
+
if (response.status >= 400) {
|
|
117
|
+
if (this._shouldRetry(response.status, attempt)) {
|
|
118
|
+
const delay = this._retryDelayMs(attempt, response.headers);
|
|
119
|
+
await new Promise((resolve) => setTimeout(resolve, delay));
|
|
120
|
+
attempt++;
|
|
121
|
+
continue;
|
|
122
|
+
}
|
|
123
|
+
let errorBody = {};
|
|
124
|
+
try {
|
|
125
|
+
errorBody = (await response.json());
|
|
126
|
+
}
|
|
127
|
+
catch {
|
|
128
|
+
// ignore parse errors
|
|
129
|
+
}
|
|
130
|
+
(0, errors_1.raiseForStatus)(response.status, errorBody, response.headers);
|
|
131
|
+
}
|
|
132
|
+
return response;
|
|
133
|
+
}
|
|
134
|
+
// Exhausted retries — should not be reached in normal flow
|
|
135
|
+
/* istanbul ignore next */
|
|
136
|
+
throw new errors_1.APIConnectionError('Request failed');
|
|
137
|
+
}
|
|
138
|
+
async get(path, params, options) {
|
|
139
|
+
return this._request('GET', path, { params, ...options });
|
|
140
|
+
}
|
|
141
|
+
async post(path, body, options) {
|
|
142
|
+
return this._request('POST', path, { body, ...options });
|
|
143
|
+
}
|
|
144
|
+
async put(path, body, options) {
|
|
145
|
+
return this._request('PUT', path, { body, ...options });
|
|
146
|
+
}
|
|
147
|
+
async patch(path, body, options) {
|
|
148
|
+
return this._request('PATCH', path, { body, ...options });
|
|
149
|
+
}
|
|
150
|
+
async delete(path, options) {
|
|
151
|
+
return this._request('DELETE', path, { ...options });
|
|
152
|
+
}
|
|
153
|
+
async getPage(path, params, parse, options) {
|
|
154
|
+
var _a, _b, _c;
|
|
155
|
+
const response = await this.get(path, params, options);
|
|
156
|
+
const raw = (await response.json());
|
|
157
|
+
const data = ((_a = raw.data) !== null && _a !== void 0 ? _a : []).map(parse);
|
|
158
|
+
return new CursorPage({
|
|
159
|
+
object: 'list',
|
|
160
|
+
data,
|
|
161
|
+
has_more: (_b = raw.has_more) !== null && _b !== void 0 ? _b : false,
|
|
162
|
+
cursor: (_c = raw.cursor) !== null && _c !== void 0 ? _c : null,
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
exports.BaseClient = BaseClient;
|
|
167
|
+
//# 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,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* ListBee TypeScript SDK — top-level client.
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.ListBee = void 0;
|
|
7
|
+
const base_client_1 = require("./base-client");
|
|
8
|
+
const account_1 = require("./resources/account");
|
|
9
|
+
const listings_1 = require("./resources/listings");
|
|
10
|
+
const api_keys_1 = require("./resources/api-keys");
|
|
11
|
+
const orders_1 = require("./resources/orders");
|
|
12
|
+
const signup_1 = require("./resources/signup");
|
|
13
|
+
const stripe_1 = require("./resources/stripe");
|
|
14
|
+
const stores_1 = require("./resources/stores");
|
|
15
|
+
const webhooks_1 = require("./resources/webhooks");
|
|
16
|
+
/**
|
|
17
|
+
* ListBee API client.
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```typescript
|
|
21
|
+
* import { ListBee } from 'listbee';
|
|
22
|
+
*
|
|
23
|
+
* const client = new ListBee({ apiKey: 'lb_...' });
|
|
24
|
+
*
|
|
25
|
+
* const listing = await client.listings.create({
|
|
26
|
+
* name: 'SEO Playbook',
|
|
27
|
+
* price: 2999,
|
|
28
|
+
* content: 'https://example.com/ebook.pdf',
|
|
29
|
+
* });
|
|
30
|
+
* console.log(listing.url);
|
|
31
|
+
* ```
|
|
32
|
+
*
|
|
33
|
+
* The client reads LISTBEE_API_KEY from the environment if no apiKey is provided.
|
|
34
|
+
*/
|
|
35
|
+
class ListBee extends base_client_1.BaseClient {
|
|
36
|
+
/** Account resource — get and update your account. */
|
|
37
|
+
get account() { var _a; return ((_a = this._account) !== null && _a !== void 0 ? _a : (this._account = new account_1.AccountResource(this))); }
|
|
38
|
+
/** Listings resource — create, read, update, delete, pause, resume listings. */
|
|
39
|
+
get listings() { var _a; return ((_a = this._listings) !== null && _a !== void 0 ? _a : (this._listings = new listings_1.ListingsResource(this))); }
|
|
40
|
+
/** API Keys resource — list, create, delete API keys. */
|
|
41
|
+
get apiKeys() { var _a; return ((_a = this._apiKeys) !== null && _a !== void 0 ? _a : (this._apiKeys = new api_keys_1.ApiKeysResource(this))); }
|
|
42
|
+
/** Orders resource — get and list orders. */
|
|
43
|
+
get orders() { var _a; return ((_a = this._orders) !== null && _a !== void 0 ? _a : (this._orders = new orders_1.OrdersResource(this))); }
|
|
44
|
+
/** Signup resource — create account and verify OTP (unauthenticated). */
|
|
45
|
+
get signup() { var _a; return ((_a = this._signup) !== null && _a !== void 0 ? _a : (this._signup = new signup_1.SignupResource(this))); }
|
|
46
|
+
/** Stripe resource — set key, connect, disconnect Stripe. */
|
|
47
|
+
get stripe() { var _a; return ((_a = this._stripe) !== null && _a !== void 0 ? _a : (this._stripe = new stripe_1.StripeResource(this))); }
|
|
48
|
+
/** Stores resource — create, read, update, delete stores, connect Stripe, manage domains. */
|
|
49
|
+
get stores() { var _a; return ((_a = this._stores) !== null && _a !== void 0 ? _a : (this._stores = new stores_1.StoresResource(this))); }
|
|
50
|
+
/** Webhooks resource — create, list, update, delete, list events, test. */
|
|
51
|
+
get webhooks() { var _a; return ((_a = this._webhooks) !== null && _a !== void 0 ? _a : (this._webhooks = new webhooks_1.WebhooksResource(this))); }
|
|
52
|
+
}
|
|
53
|
+
exports.ListBee = ListBee;
|
|
54
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,+CAA+D;AAC/D,iDAAsD;AACtD,mDAAwD;AACxD,mDAAuD;AACvD,+CAAoD;AACpD,+CAAoD;AACpD,+CAAoD;AACpD,+CAAoD;AACpD,mDAAwD;AAIxD;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAa,OAAQ,SAAQ,wBAAU;IAUrC,sDAAsD;IACtD,IAAI,OAAO,aAAsB,OAAO,OAAC,IAAI,CAAC,QAAQ,oCAAb,IAAI,CAAC,QAAQ,GAAK,IAAI,yBAAe,CAAC,IAAI,CAAC,EAAC,CAAC,CAAC,CAAC;IACxF,gFAAgF;IAChF,IAAI,QAAQ,aAAuB,OAAO,OAAC,IAAI,CAAC,SAAS,oCAAd,IAAI,CAAC,SAAS,GAAK,IAAI,2BAAgB,CAAC,IAAI,CAAC,EAAC,CAAC,CAAC,CAAC;IAC5F,yDAAyD;IACzD,IAAI,OAAO,aAAsB,OAAO,OAAC,IAAI,CAAC,QAAQ,oCAAb,IAAI,CAAC,QAAQ,GAAK,IAAI,0BAAe,CAAC,IAAI,CAAC,EAAC,CAAC,CAAC,CAAC;IACxF,6CAA6C;IAC7C,IAAI,MAAM,aAAqB,OAAO,OAAC,IAAI,CAAC,OAAO,oCAAZ,IAAI,CAAC,OAAO,GAAK,IAAI,uBAAc,CAAC,IAAI,CAAC,EAAC,CAAC,CAAC,CAAC;IACpF,yEAAyE;IACzE,IAAI,MAAM,aAAqB,OAAO,OAAC,IAAI,CAAC,OAAO,oCAAZ,IAAI,CAAC,OAAO,GAAK,IAAI,uBAAc,CAAC,IAAI,CAAC,EAAC,CAAC,CAAC,CAAC;IACpF,6DAA6D;IAC7D,IAAI,MAAM,aAAqB,OAAO,OAAC,IAAI,CAAC,OAAO,oCAAZ,IAAI,CAAC,OAAO,GAAK,IAAI,uBAAc,CAAC,IAAI,CAAC,EAAC,CAAC,CAAC,CAAC;IACpF,6FAA6F;IAC7F,IAAI,MAAM,aAAqB,OAAO,OAAC,IAAI,CAAC,OAAO,oCAAZ,IAAI,CAAC,OAAO,GAAK,IAAI,uBAAc,CAAC,IAAI,CAAC,EAAC,CAAC,CAAC,CAAC;IACpF,2EAA2E;IAC3E,IAAI,QAAQ,aAAuB,OAAO,OAAC,IAAI,CAAC,SAAS,oCAAd,IAAI,CAAC,SAAS,GAAK,IAAI,2BAAgB,CAAC,IAAI,CAAC,EAAC,CAAC,CAAC,CAAC;CAC7F;AA1BD,0BA0BC"}
|
|
@@ -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,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* SDK-wide constants.
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.RETRY_STATUS_CODES = exports.MAX_RETRY_DELAY_MS = exports.INITIAL_RETRY_DELAY_MS = exports.LISTING_CREATE_TIMEOUT_MS = exports.DEFAULT_MAX_RETRIES = exports.DEFAULT_TIMEOUT_MS = exports.DEFAULT_BASE_URL = void 0;
|
|
7
|
+
/** Default API base URL. */
|
|
8
|
+
exports.DEFAULT_BASE_URL = 'https://api.listbee.so';
|
|
9
|
+
/** Default request timeout in milliseconds. */
|
|
10
|
+
exports.DEFAULT_TIMEOUT_MS = 30000;
|
|
11
|
+
/** Default maximum retries on 429/5xx responses. */
|
|
12
|
+
exports.DEFAULT_MAX_RETRIES = 3;
|
|
13
|
+
/** Extended timeout for listing create (cover processing can be slow). */
|
|
14
|
+
exports.LISTING_CREATE_TIMEOUT_MS = 120000;
|
|
15
|
+
/** Initial retry backoff delay in milliseconds. */
|
|
16
|
+
exports.INITIAL_RETRY_DELAY_MS = 500;
|
|
17
|
+
/** Maximum retry backoff delay in milliseconds. */
|
|
18
|
+
exports.MAX_RETRY_DELAY_MS = 30000;
|
|
19
|
+
/** HTTP status codes that should trigger a retry. */
|
|
20
|
+
exports.RETRY_STATUS_CODES = new Set([429, 500, 502, 503, 504]);
|
|
21
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,4BAA4B;AACf,QAAA,gBAAgB,GAAG,wBAAwB,CAAC;AAEzD,+CAA+C;AAClC,QAAA,kBAAkB,GAAG,KAAM,CAAC;AAEzC,oDAAoD;AACvC,QAAA,mBAAmB,GAAG,CAAC,CAAC;AAErC,0EAA0E;AAC7D,QAAA,yBAAyB,GAAG,MAAO,CAAC;AAEjD,mDAAmD;AACtC,QAAA,sBAAsB,GAAG,GAAG,CAAC;AAE1C,mDAAmD;AACtC,QAAA,kBAAkB,GAAG,KAAM,CAAC;AAEzC,qDAAqD;AACxC,QAAA,kBAAkB,GAAwB,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Typed exception hierarchy for the ListBee SDK (RFC 9457).
|
|
3
|
+
*/
|
|
4
|
+
/** Base class for all ListBee SDK errors. */
|
|
5
|
+
export declare class ListBeeError extends Error {
|
|
6
|
+
constructor(message: string);
|
|
7
|
+
}
|
|
8
|
+
/** Raised when a network error prevents the request from completing. */
|
|
9
|
+
export declare class APIConnectionError extends ListBeeError {
|
|
10
|
+
constructor(message: string);
|
|
11
|
+
}
|
|
12
|
+
/** Raised when a request times out. */
|
|
13
|
+
export declare class APITimeoutError extends ListBeeError {
|
|
14
|
+
constructor(message: string);
|
|
15
|
+
}
|
|
16
|
+
/** Raised when the API returns an error response (4xx/5xx). */
|
|
17
|
+
export declare class APIStatusError extends ListBeeError {
|
|
18
|
+
/** URI identifying the error type. */
|
|
19
|
+
readonly type: string;
|
|
20
|
+
/** Short, stable label for the error category. */
|
|
21
|
+
readonly title: string;
|
|
22
|
+
/** HTTP status code. */
|
|
23
|
+
readonly status: number;
|
|
24
|
+
/** Specific explanation of what went wrong. */
|
|
25
|
+
readonly detail: string;
|
|
26
|
+
/** Machine-readable error code. */
|
|
27
|
+
readonly code: string;
|
|
28
|
+
/** Request field that caused the error, if applicable. */
|
|
29
|
+
readonly param: string | null;
|
|
30
|
+
constructor(opts: {
|
|
31
|
+
type: string;
|
|
32
|
+
title: string;
|
|
33
|
+
status: number;
|
|
34
|
+
detail: string;
|
|
35
|
+
code: string;
|
|
36
|
+
param?: string | null;
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
/** Raised on 401 responses — invalid or missing API key. */
|
|
40
|
+
export declare class AuthenticationError extends APIStatusError {
|
|
41
|
+
constructor(opts: ConstructorParameters<typeof APIStatusError>[0]);
|
|
42
|
+
}
|
|
43
|
+
/** Raised on 404 responses — resource not found. */
|
|
44
|
+
export declare class NotFoundError extends APIStatusError {
|
|
45
|
+
constructor(opts: ConstructorParameters<typeof APIStatusError>[0]);
|
|
46
|
+
}
|
|
47
|
+
/** Raised on 409 responses — resource conflict. */
|
|
48
|
+
export declare class ConflictError extends APIStatusError {
|
|
49
|
+
constructor(opts: ConstructorParameters<typeof APIStatusError>[0]);
|
|
50
|
+
}
|
|
51
|
+
/** Raised on 422 responses — request validation failed. */
|
|
52
|
+
export declare class ValidationError extends APIStatusError {
|
|
53
|
+
constructor(opts: ConstructorParameters<typeof APIStatusError>[0]);
|
|
54
|
+
}
|
|
55
|
+
/** Raised on 429 responses — rate limit exceeded. */
|
|
56
|
+
export declare class RateLimitError extends APIStatusError {
|
|
57
|
+
/** Max requests per window. */
|
|
58
|
+
readonly limit: number | null;
|
|
59
|
+
/** Requests remaining in current window. */
|
|
60
|
+
readonly remaining: number | null;
|
|
61
|
+
/** When the current window resets (Unix timestamp). */
|
|
62
|
+
readonly reset: number | null;
|
|
63
|
+
constructor(opts: ConstructorParameters<typeof APIStatusError>[0] & {
|
|
64
|
+
limit?: number | null;
|
|
65
|
+
remaining?: number | null;
|
|
66
|
+
reset?: number | null;
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
/** Raised on 500+ responses — server-side error. */
|
|
70
|
+
export declare class InternalServerError extends APIStatusError {
|
|
71
|
+
constructor(opts: ConstructorParameters<typeof APIStatusError>[0]);
|
|
72
|
+
}
|
|
73
|
+
/** Raised when webhook signature verification fails. */
|
|
74
|
+
export declare class WebhookVerificationError extends ListBeeError {
|
|
75
|
+
constructor(message: string);
|
|
76
|
+
}
|
|
77
|
+
type ErrorBody = {
|
|
78
|
+
type?: unknown;
|
|
79
|
+
title?: unknown;
|
|
80
|
+
status?: unknown;
|
|
81
|
+
detail?: unknown;
|
|
82
|
+
code?: unknown;
|
|
83
|
+
param?: unknown;
|
|
84
|
+
};
|
|
85
|
+
/**
|
|
86
|
+
* Parse an RFC 9457 error body and throw the appropriate typed exception.
|
|
87
|
+
*/
|
|
88
|
+
export declare function raiseForStatus(statusCode: number, body: ErrorBody, headers: Record<string, string>): never;
|
|
89
|
+
export {};
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Typed exception hierarchy for the ListBee SDK (RFC 9457).
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.raiseForStatus = exports.WebhookVerificationError = exports.InternalServerError = exports.RateLimitError = exports.ValidationError = exports.ConflictError = exports.NotFoundError = exports.AuthenticationError = exports.APIStatusError = exports.APITimeoutError = exports.APIConnectionError = exports.ListBeeError = void 0;
|
|
7
|
+
/** Base class for all ListBee SDK errors. */
|
|
8
|
+
class ListBeeError extends Error {
|
|
9
|
+
constructor(message) {
|
|
10
|
+
super(message);
|
|
11
|
+
this.name = 'ListBeeError';
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
exports.ListBeeError = ListBeeError;
|
|
15
|
+
/** Raised when a network error prevents the request from completing. */
|
|
16
|
+
class APIConnectionError extends ListBeeError {
|
|
17
|
+
constructor(message) {
|
|
18
|
+
super(message);
|
|
19
|
+
this.name = 'APIConnectionError';
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
exports.APIConnectionError = APIConnectionError;
|
|
23
|
+
/** Raised when a request times out. */
|
|
24
|
+
class APITimeoutError extends ListBeeError {
|
|
25
|
+
constructor(message) {
|
|
26
|
+
super(message);
|
|
27
|
+
this.name = 'APITimeoutError';
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
exports.APITimeoutError = APITimeoutError;
|
|
31
|
+
/** Raised when the API returns an error response (4xx/5xx). */
|
|
32
|
+
class APIStatusError extends ListBeeError {
|
|
33
|
+
constructor(opts) {
|
|
34
|
+
var _a;
|
|
35
|
+
super(opts.detail);
|
|
36
|
+
this.name = 'APIStatusError';
|
|
37
|
+
this.type = opts.type;
|
|
38
|
+
this.title = opts.title;
|
|
39
|
+
this.status = opts.status;
|
|
40
|
+
this.detail = opts.detail;
|
|
41
|
+
this.code = opts.code;
|
|
42
|
+
this.param = (_a = opts.param) !== null && _a !== void 0 ? _a : null;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
exports.APIStatusError = APIStatusError;
|
|
46
|
+
/** Raised on 401 responses — invalid or missing API key. */
|
|
47
|
+
class AuthenticationError extends APIStatusError {
|
|
48
|
+
constructor(opts) {
|
|
49
|
+
super(opts);
|
|
50
|
+
this.name = 'AuthenticationError';
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
exports.AuthenticationError = AuthenticationError;
|
|
54
|
+
/** Raised on 404 responses — resource not found. */
|
|
55
|
+
class NotFoundError extends APIStatusError {
|
|
56
|
+
constructor(opts) {
|
|
57
|
+
super(opts);
|
|
58
|
+
this.name = 'NotFoundError';
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
exports.NotFoundError = NotFoundError;
|
|
62
|
+
/** Raised on 409 responses — resource conflict. */
|
|
63
|
+
class ConflictError extends APIStatusError {
|
|
64
|
+
constructor(opts) {
|
|
65
|
+
super(opts);
|
|
66
|
+
this.name = 'ConflictError';
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
exports.ConflictError = ConflictError;
|
|
70
|
+
/** Raised on 422 responses — request validation failed. */
|
|
71
|
+
class ValidationError extends APIStatusError {
|
|
72
|
+
constructor(opts) {
|
|
73
|
+
super(opts);
|
|
74
|
+
this.name = 'ValidationError';
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
exports.ValidationError = ValidationError;
|
|
78
|
+
/** Raised on 429 responses — rate limit exceeded. */
|
|
79
|
+
class RateLimitError extends APIStatusError {
|
|
80
|
+
constructor(opts) {
|
|
81
|
+
var _a, _b, _c;
|
|
82
|
+
super(opts);
|
|
83
|
+
this.name = 'RateLimitError';
|
|
84
|
+
this.limit = (_a = opts.limit) !== null && _a !== void 0 ? _a : null;
|
|
85
|
+
this.remaining = (_b = opts.remaining) !== null && _b !== void 0 ? _b : null;
|
|
86
|
+
this.reset = (_c = opts.reset) !== null && _c !== void 0 ? _c : null;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
exports.RateLimitError = RateLimitError;
|
|
90
|
+
/** Raised on 500+ responses — server-side error. */
|
|
91
|
+
class InternalServerError extends APIStatusError {
|
|
92
|
+
constructor(opts) {
|
|
93
|
+
super(opts);
|
|
94
|
+
this.name = 'InternalServerError';
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
exports.InternalServerError = InternalServerError;
|
|
98
|
+
/** Raised when webhook signature verification fails. */
|
|
99
|
+
class WebhookVerificationError extends ListBeeError {
|
|
100
|
+
constructor(message) {
|
|
101
|
+
super(message);
|
|
102
|
+
this.name = 'WebhookVerificationError';
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
exports.WebhookVerificationError = WebhookVerificationError;
|
|
106
|
+
/**
|
|
107
|
+
* Parse an RFC 9457 error body and throw the appropriate typed exception.
|
|
108
|
+
*/
|
|
109
|
+
function raiseForStatus(statusCode, body, headers) {
|
|
110
|
+
const type = typeof body.type === 'string' ? body.type : '';
|
|
111
|
+
const title = typeof body.title === 'string' ? body.title : '';
|
|
112
|
+
const status = typeof body.status === 'number' ? body.status : statusCode;
|
|
113
|
+
const detail = typeof body.detail === 'string' ? body.detail : '';
|
|
114
|
+
const code = typeof body.code === 'string' ? body.code : '';
|
|
115
|
+
const param = typeof body.param === 'string' ? body.param : null;
|
|
116
|
+
const base = { type, title, status, detail, code, param };
|
|
117
|
+
if (statusCode === 401)
|
|
118
|
+
throw new AuthenticationError(base);
|
|
119
|
+
if (statusCode === 404)
|
|
120
|
+
throw new NotFoundError(base);
|
|
121
|
+
if (statusCode === 409)
|
|
122
|
+
throw new ConflictError(base);
|
|
123
|
+
if (statusCode === 422)
|
|
124
|
+
throw new ValidationError(base);
|
|
125
|
+
if (statusCode === 429) {
|
|
126
|
+
const limitStr = headers['x-ratelimit-limit'];
|
|
127
|
+
const remainingStr = headers['x-ratelimit-remaining'];
|
|
128
|
+
const resetStr = headers['x-ratelimit-reset'];
|
|
129
|
+
throw new RateLimitError({
|
|
130
|
+
...base,
|
|
131
|
+
limit: limitStr != null ? parseInt(limitStr, 10) : null,
|
|
132
|
+
remaining: remainingStr != null ? parseInt(remainingStr, 10) : null,
|
|
133
|
+
reset: resetStr != null ? parseFloat(resetStr) : null,
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
if (statusCode >= 500)
|
|
137
|
+
throw new InternalServerError(base);
|
|
138
|
+
throw new APIStatusError(base);
|
|
139
|
+
}
|
|
140
|
+
exports.raiseForStatus = raiseForStatus;
|
|
141
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ListBee TypeScript SDK — public exports.
|
|
3
|
+
*/
|
|
4
|
+
export { ListBee } from './client';
|
|
5
|
+
export type { ClientOptions } from './client';
|
|
6
|
+
export { CursorPage } from './base-client';
|
|
7
|
+
export type { RequestOptions } from './base-client';
|
|
8
|
+
export { APIConnectionError, APIStatusError, APITimeoutError, AuthenticationError, ConflictError, InternalServerError, ListBeeError, NotFoundError, RateLimitError, ValidationError, WebhookVerificationError, } from './errors';
|
|
9
|
+
export { AccountResource } from './resources/account';
|
|
10
|
+
export { ListingsResource } from './resources/listings';
|
|
11
|
+
export { ApiKeysResource } from './resources/api-keys';
|
|
12
|
+
export { OrdersResource } from './resources/orders';
|
|
13
|
+
export { SignupResource } from './resources/signup';
|
|
14
|
+
export { StripeResource } from './resources/stripe';
|
|
15
|
+
export { StoresResource } from './resources/stores';
|
|
16
|
+
export { WebhooksResource } from './resources/webhooks';
|
|
17
|
+
export { ContentType, OrderStatus, WebhookEventType, ActionKind, ActionCode } from './types/shared';
|
|
18
|
+
export type { AccountReadiness, ListingReadiness, ReadinessAction, ListResponse, } from './types/shared';
|
|
19
|
+
export type { AccountResponse, UpdateAccountParams, AccountStats } from './types/account';
|
|
20
|
+
export type { BlurMode, CreateListingParams, FaqItem, ListingResponse, ListingStatus, Review, UpdateListingParams, } from './types/listing';
|
|
21
|
+
export type { ApiKeyResponse } from './types/api-key';
|
|
22
|
+
export type { OrderResponse, ListOrdersParams } from './types/order';
|
|
23
|
+
export type { SignupResponse, VerifyResponse } from './types/signup';
|
|
24
|
+
export type { StripeConnectSessionResponse } from './types/stripe';
|
|
25
|
+
export type { WebhookResponse, CreateWebhookParams, UpdateWebhookParams, WebhookEventResponse, ListWebhookEventsParams, WebhookTestResponse, } from './types/webhook';
|
|
26
|
+
export type { StoreResponse, StoreListResponse, DomainResponse, DomainStatus, CreateStoreParams, UpdateStoreParams } from './types/store';
|