listbee 0.7.0 → 0.8.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.
Files changed (52) hide show
  1. package/README.md +55 -69
  2. package/dist/cjs/deliverable.d.ts +57 -0
  3. package/dist/cjs/deliverable.js +90 -0
  4. package/dist/cjs/deliverable.js.map +1 -0
  5. package/dist/cjs/errors.d.ts +11 -0
  6. package/dist/cjs/errors.js +16 -1
  7. package/dist/cjs/errors.js.map +1 -1
  8. package/dist/cjs/generated/api-types.d.ts +177 -2
  9. package/dist/cjs/generated/enums.d.ts +1 -0
  10. package/dist/cjs/generated/enums.js +1 -0
  11. package/dist/cjs/generated/enums.js.map +1 -1
  12. package/dist/cjs/index.d.ts +2 -1
  13. package/dist/cjs/index.js +5 -1
  14. package/dist/cjs/index.js.map +1 -1
  15. package/dist/cjs/resources/customers.d.ts +0 -9
  16. package/dist/cjs/resources/customers.js +0 -13
  17. package/dist/cjs/resources/customers.js.map +1 -1
  18. package/dist/cjs/resources/listings.d.ts +35 -17
  19. package/dist/cjs/resources/listings.js +65 -22
  20. package/dist/cjs/resources/listings.js.map +1 -1
  21. package/dist/cjs/resources/orders.d.ts +9 -21
  22. package/dist/cjs/resources/orders.js +24 -25
  23. package/dist/cjs/resources/orders.js.map +1 -1
  24. package/dist/cjs/resources/webhooks.d.ts +0 -9
  25. package/dist/cjs/resources/webhooks.js +0 -17
  26. package/dist/cjs/resources/webhooks.js.map +1 -1
  27. package/dist/esm/deliverable.d.ts +57 -0
  28. package/dist/esm/deliverable.js +86 -0
  29. package/dist/esm/deliverable.js.map +1 -0
  30. package/dist/esm/errors.d.ts +11 -0
  31. package/dist/esm/errors.js +14 -0
  32. package/dist/esm/errors.js.map +1 -1
  33. package/dist/esm/generated/api-types.d.ts +177 -2
  34. package/dist/esm/generated/enums.d.ts +1 -0
  35. package/dist/esm/generated/enums.js +1 -0
  36. package/dist/esm/generated/enums.js.map +1 -1
  37. package/dist/esm/index.d.ts +2 -1
  38. package/dist/esm/index.js +3 -1
  39. package/dist/esm/index.js.map +1 -1
  40. package/dist/esm/resources/customers.d.ts +0 -9
  41. package/dist/esm/resources/customers.js +0 -12
  42. package/dist/esm/resources/customers.js.map +1 -1
  43. package/dist/esm/resources/listings.d.ts +35 -17
  44. package/dist/esm/resources/listings.js +65 -22
  45. package/dist/esm/resources/listings.js.map +1 -1
  46. package/dist/esm/resources/orders.d.ts +9 -21
  47. package/dist/esm/resources/orders.js +24 -25
  48. package/dist/esm/resources/orders.js.map +1 -1
  49. package/dist/esm/resources/webhooks.d.ts +0 -9
  50. package/dist/esm/resources/webhooks.js +0 -17
  51. package/dist/esm/resources/webhooks.js.map +1 -1
  52. package/package.json +1 -1
package/README.md CHANGED
@@ -26,20 +26,17 @@ pnpm add listbee
26
26
  ## Quick start
27
27
 
28
28
  ```typescript
29
- import { ListBee } from 'listbee';
29
+ import { ListBee, Deliverable } from 'listbee';
30
30
 
31
31
  const client = new ListBee({ apiKey: 'lb_...' });
32
32
 
33
- // Create a listing, set a deliverable, publish
34
- const listing = await client.listings.create({
33
+ // Create a listing, attach a deliverable, and publish in one call
34
+ const listing = await client.listings.createComplete({
35
35
  name: 'SEO Playbook',
36
36
  price: 2900, // $29.00 in cents
37
37
  description: 'A comprehensive guide to modern SEO.',
38
- });
39
-
40
- await client.listings.setDeliverables(listing.id, {
41
38
  deliverables: [
42
- { type: 'url', value: 'https://example.com/seo-playbook.pdf' },
39
+ Deliverable.url('https://example.com/seo-playbook.pdf'),
43
40
  ],
44
41
  });
45
42
 
@@ -72,7 +69,7 @@ The key is validated lazily — an `AuthenticationError` is raised only when you
72
69
 
73
70
  | Resource | Methods |
74
71
  |----------|---------|
75
- | `listings` | `create`, `get`, `list`, `update`, `publish`, `setDeliverables`, `removeDeliverables`, `delete` |
72
+ | `listings` | `create`, `get`, `list`, `update`, `publish`, `setDeliverables`, `removeDeliverables`, `addDeliverable`, `removeDeliverable`, `createComplete`, `delete` |
76
73
  | `orders` | `get`, `list`, `deliver`, `ship`, `refund` |
77
74
  | `customers` | `get`, `list` |
78
75
  | `files` | `upload` |
@@ -100,9 +97,11 @@ const listing = await client.listings.create({
100
97
  console.log(listing.id); // lst_r7kq2xy9m3pR5tW1
101
98
 
102
99
  // Set deliverables (file, URL, or text)
100
+ import { Deliverable } from 'listbee';
101
+
103
102
  await client.listings.setDeliverables(listing.id, {
104
103
  deliverables: [
105
- { type: 'url', value: 'https://example.com/seo-playbook.pdf' },
104
+ Deliverable.url('https://example.com/seo-playbook.pdf'),
106
105
  ],
107
106
  });
108
107
 
@@ -129,6 +128,26 @@ await client.listings.update('lst_r7kq2xy9m3pR5tW1', { price: 3900 });
129
128
  // Remove deliverables (revert to external fulfillment)
130
129
  await client.listings.removeDeliverables('lst_r7kq2xy9m3pR5tW1');
131
130
 
131
+ // Add a single deliverable using the Deliverable class
132
+ import { Deliverable } from 'listbee';
133
+
134
+ await client.listings.addDeliverable('lst_r7kq2xy9m3pR5tW1', Deliverable.url('https://example.com/playbook.pdf'));
135
+ await client.listings.addDeliverable('lst_r7kq2xy9m3pR5tW1', Deliverable.text('Your license key: XXXX-XXXX'));
136
+ await client.listings.addDeliverable('lst_r7kq2xy9m3pR5tW1', Deliverable.fromToken(file.token));
137
+
138
+ // Remove a single deliverable by del_ ID
139
+ await client.listings.removeDeliverable('lst_r7kq2xy9m3pR5tW1', 'del_4hR9nK2mQ7tV5wX1');
140
+
141
+ // Create a listing and attach deliverables in one call
142
+ const listing = await client.listings.createComplete({
143
+ name: 'SEO Playbook',
144
+ price: 2900,
145
+ deliverables: [
146
+ Deliverable.url('https://example.com/seo-playbook.pdf'),
147
+ ],
148
+ });
149
+ await client.listings.publish(listing.id);
150
+
132
151
  // Delete
133
152
  await client.listings.delete('lst_r7kq2xy9m3pR5tW1');
134
153
  ```
@@ -152,17 +171,19 @@ console.log(order.checkout_data); // custom checkout field values
152
171
  console.log(order.paid_at); // ISO 8601 timestamp
153
172
 
154
173
  // Deliver — push content to the buyer (external fulfillment)
174
+ import { Deliverable } from 'listbee';
175
+
155
176
  const fulfilled = await client.orders.deliver('ord_9xM4kP7nR2qT5wY1', {
156
177
  deliverables: [
157
- { type: 'text', value: 'Your AI-generated report is ready.' },
178
+ Deliverable.text('Your AI-generated report is ready.'),
158
179
  ],
159
180
  });
160
181
  console.log(fulfilled.status); // "fulfilled"
161
182
 
162
- // Or deliver a file or URL
183
+ // Or deliver a URL
163
184
  await client.orders.deliver('ord_9xM4kP7nR2qT5wY1', {
164
185
  deliverables: [
165
- { type: 'url', value: 'https://example.com/report.pdf' },
186
+ Deliverable.url('https://example.com/report.pdf'),
166
187
  ],
167
188
  });
168
189
 
@@ -197,18 +218,19 @@ console.log(customer.email, customer.order_count);
197
218
 
198
219
  ```typescript
199
220
  import { createReadStream } from 'fs';
221
+ import { Deliverable } from 'listbee';
200
222
 
201
223
  // Upload a file (multipart, native FormData)
202
224
  const file = await client.files.upload({
203
225
  file: createReadStream('/path/to/report.pdf'),
204
226
  filename: 'report.pdf',
205
227
  });
206
- console.log(file.id); // use this ID in setDeliverables
228
+ console.log(file.token); // use this token in setDeliverables / Deliverable.fromToken()
207
229
 
208
230
  // Then attach to a listing
209
231
  await client.listings.setDeliverables(listing.id, {
210
232
  deliverables: [
211
- { type: 'file', token: file.id },
233
+ Deliverable.fromToken(file.token),
212
234
  ],
213
235
  });
214
236
  ```
@@ -300,68 +322,30 @@ console.log(connect.url); // redirect seller here
300
322
  await client.stripe.disconnect();
301
323
  ```
302
324
 
303
- ## Convenience Helpers
304
-
305
- Composite methods that chain multiple API calls into one.
325
+ ## Fulfillment modes
306
326
 
307
- ### Create and Publish
327
+ - **Managed** ListBee delivers digital content automatically. Call `setDeliverables()` on the listing, then `publish()`.
328
+ - **External** — ListBee fires `order.paid` webhook, your app handles delivery. Call `orders.deliver()` to push content back.
308
329
 
309
330
  ```typescript
310
- // Managed fulfillment one call does create + set deliverables + publish
311
- const listing = await client.listings.createAndPublish({
331
+ import { Deliverable } from 'listbee';
332
+
333
+ // One-shot: create listing + attach deliverables
334
+ const listing = await client.listings.createComplete({
312
335
  name: 'SEO Playbook',
313
336
  price: 2900,
314
- deliverables: [{ type: 'url', value: 'https://example.com/ebook.pdf' }],
315
- });
316
-
317
- // External fulfillment — no deliverables needed
318
- const listing = await client.listings.createAndPublish({
319
- name: 'Custom Report',
320
- price: 4900,
321
- fulfillment: 'external',
322
- });
323
- ```
324
-
325
- ### Upload and Set Deliverable
326
-
327
- ```typescript
328
- const listing = await client.listings.uploadAndSetDeliverable('lst_abc123', {
329
- file: new File([buffer], 'ebook.pdf', { type: 'application/pdf' }),
330
- });
331
- ```
332
-
333
- ### Upload and Deliver
334
-
335
- ```typescript
336
- const order = await client.orders.uploadAndDeliver('ord_abc123', {
337
- file: new File([content], 'report.pdf', { type: 'application/pdf' }),
337
+ deliverables: [
338
+ Deliverable.url('https://example.com/seo-playbook.pdf'),
339
+ ],
338
340
  });
339
- ```
340
-
341
- ### Get Customer by Email
342
-
343
- ```typescript
344
- const customer = await client.customers.getByEmail('buyer@example.com');
345
- if (customer) {
346
- console.log(`Total spent: ${customer.total_spent}`);
347
- }
348
- ```
349
-
350
- ### Retry Failed Webhook Events
351
-
352
- ```typescript
353
- const retried = await client.webhooks.retryFailedEvents('wh_abc123');
354
- console.log(`Retried ${retried.length} events`);
355
- ```
356
-
357
- ## Fulfillment modes
341
+ await client.listings.publish(listing.id);
358
342
 
359
- - **Managed** ListBee delivers digital content automatically. Call `setDeliverables()` on the listing, then `publish()`.
360
- - **External** — ListBee fires `order.paid` webhook, your app handles delivery. Call `orders.deliver()` to push content back.
343
+ // Add or remove individual deliverables after creation
344
+ await client.listings.addDeliverable(listing.id, Deliverable.text('Bonus: license key XXXX-XXXX'));
345
+ await client.listings.removeDeliverable(listing.id, 'del_4hR9nK2mQ7tV5wX1');
361
346
 
362
- ```typescript
363
347
  // External fulfillment — AI-generated content
364
- const listing = await client.listings.create({
348
+ const external = await client.listings.create({
365
349
  name: 'Custom SEO Report',
366
350
  price: 4900,
367
351
  fulfillment: 'external',
@@ -369,12 +353,12 @@ const listing = await client.listings.create({
369
353
  { type: 'text', key: 'website_url', label: 'Your website URL', required: true },
370
354
  ],
371
355
  });
372
- await client.listings.publish(listing.id);
356
+ await client.listings.publish(external.id);
373
357
 
374
358
  // On order.paid webhook:
375
359
  await client.orders.deliver(order.id, {
376
360
  deliverables: [
377
- { type: 'text', value: generatedReport },
361
+ Deliverable.text(generatedReport),
378
362
  ],
379
363
  });
380
364
  ```
@@ -477,6 +461,8 @@ import {
477
461
  ListBee,
478
462
  CursorPage,
479
463
  ErrorCode,
464
+ Deliverable, // input class: .file() | .url() | .text() | .fromToken()
465
+ PartialCreationError, // thrown when listing is created but deliverable attachment fails
480
466
 
481
467
  // Response types
482
468
  type ListingResponse,
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Deliverable input builder — type-safe file handling for SDK methods.
3
+ */
4
+ /// <reference types="node" />
5
+ /// <reference types="node" />
6
+ type FileSource = Buffer | Blob | string;
7
+ /**
8
+ * Input builder for deliverables. Use static factory methods.
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * Deliverable.file(Buffer.from('pdf'), 'guide.pdf')
13
+ * Deliverable.fromToken('file_tok_abc')
14
+ * Deliverable.url('https://example.com/secret')
15
+ * Deliverable.text('License key: ABCD-1234')
16
+ * ```
17
+ */
18
+ export declare class Deliverable {
19
+ /** @internal */ readonly _type: 'file' | 'url' | 'text';
20
+ /** @internal */ readonly _fileData?: Buffer | Blob;
21
+ /** @internal */ readonly _filename?: string;
22
+ /** @internal */ readonly _value?: string;
23
+ /** @internal */ readonly _token?: string;
24
+ private constructor();
25
+ /**
26
+ * Create a file deliverable from a Buffer, Blob, or file path.
27
+ *
28
+ * @param source - File content or path.
29
+ * @param filename - Filename (required for Buffer/Blob, auto-detected for paths).
30
+ */
31
+ static file(source: FileSource, filename?: string): Deliverable;
32
+ /**
33
+ * Create a file deliverable from a pre-uploaded file token.
34
+ *
35
+ * @param token - File token from `client.files.upload()` (valid 24 hours).
36
+ */
37
+ static fromToken(token: string): Deliverable;
38
+ /**
39
+ * Create a URL redirect deliverable.
40
+ *
41
+ * @param url - HTTPS URL buyers will be redirected to after purchase.
42
+ */
43
+ static url(url: string): Deliverable;
44
+ /**
45
+ * Create a plain text deliverable.
46
+ *
47
+ * @param content - Text content delivered to the buyer.
48
+ */
49
+ static text(content: string): Deliverable;
50
+ /** True if this deliverable has file data that must be uploaded first. */
51
+ get needsUpload(): boolean;
52
+ /** @internal Returns file data for upload. */
53
+ toUploadData(): Buffer | Blob;
54
+ /** @internal Returns JSON body for the API. */
55
+ toApiBody(token?: string): Record<string, string>;
56
+ }
57
+ export {};
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ /**
3
+ * Deliverable input builder — type-safe file handling for SDK methods.
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Deliverable = void 0;
7
+ const node_fs_1 = require("node:fs");
8
+ const node_path_1 = require("node:path");
9
+ /**
10
+ * Input builder for deliverables. Use static factory methods.
11
+ *
12
+ * @example
13
+ * ```ts
14
+ * Deliverable.file(Buffer.from('pdf'), 'guide.pdf')
15
+ * Deliverable.fromToken('file_tok_abc')
16
+ * Deliverable.url('https://example.com/secret')
17
+ * Deliverable.text('License key: ABCD-1234')
18
+ * ```
19
+ */
20
+ class Deliverable {
21
+ constructor(fields) {
22
+ this._type = fields._type;
23
+ this._fileData = fields._fileData;
24
+ this._filename = fields._filename;
25
+ this._value = fields._value;
26
+ this._token = fields._token;
27
+ }
28
+ /**
29
+ * Create a file deliverable from a Buffer, Blob, or file path.
30
+ *
31
+ * @param source - File content or path.
32
+ * @param filename - Filename (required for Buffer/Blob, auto-detected for paths).
33
+ */
34
+ static file(source, filename) {
35
+ if (typeof source === 'string') {
36
+ return new Deliverable({
37
+ _type: 'file',
38
+ _fileData: (0, node_fs_1.readFileSync)(source),
39
+ _filename: filename !== null && filename !== void 0 ? filename : (0, node_path_1.basename)(source),
40
+ });
41
+ }
42
+ if (!filename)
43
+ throw new Error('filename is required when source is Buffer or Blob');
44
+ return new Deliverable({
45
+ _type: 'file',
46
+ _fileData: source,
47
+ _filename: filename,
48
+ });
49
+ }
50
+ /**
51
+ * Create a file deliverable from a pre-uploaded file token.
52
+ *
53
+ * @param token - File token from `client.files.upload()` (valid 24 hours).
54
+ */
55
+ static fromToken(token) {
56
+ return new Deliverable({ _type: 'file', _token: token });
57
+ }
58
+ /**
59
+ * Create a URL redirect deliverable.
60
+ *
61
+ * @param url - HTTPS URL buyers will be redirected to after purchase.
62
+ */
63
+ static url(url) {
64
+ return new Deliverable({ _type: 'url', _value: url });
65
+ }
66
+ /**
67
+ * Create a plain text deliverable.
68
+ *
69
+ * @param content - Text content delivered to the buyer.
70
+ */
71
+ static text(content) {
72
+ return new Deliverable({ _type: 'text', _value: content });
73
+ }
74
+ /** True if this deliverable has file data that must be uploaded first. */
75
+ get needsUpload() {
76
+ return this._type === 'file' && this._fileData != null;
77
+ }
78
+ /** @internal Returns file data for upload. */
79
+ toUploadData() {
80
+ return this._fileData;
81
+ }
82
+ /** @internal Returns JSON body for the API. */
83
+ toApiBody(token) {
84
+ if (this._type === 'file')
85
+ return { type: 'file', token: token !== null && token !== void 0 ? token : this._token };
86
+ return { type: this._type, value: this._value };
87
+ }
88
+ }
89
+ exports.Deliverable = Deliverable;
90
+ //# sourceMappingURL=deliverable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deliverable.js","sourceRoot":"","sources":["../../src/deliverable.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,qCAAuC;AACvC,yCAAqC;AAIrC;;;;;;;;;;GAUG;AACH,MAAa,WAAW;IAOtB,YAAoB,MAA2H;QAC7I,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC1B,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;QAClC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;QAClC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAC9B,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,IAAI,CAAC,MAAkB,EAAE,QAAiB;QAC/C,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC/B,OAAO,IAAI,WAAW,CAAC;gBACrB,KAAK,EAAE,MAAM;gBACb,SAAS,EAAE,IAAA,sBAAY,EAAC,MAAM,CAAC;gBAC/B,SAAS,EAAE,QAAQ,aAAR,QAAQ,cAAR,QAAQ,GAAI,IAAA,oBAAQ,EAAC,MAAM,CAAC;aACxC,CAAC,CAAC;QACL,CAAC;QACD,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;QACrF,OAAO,IAAI,WAAW,CAAC;YACrB,KAAK,EAAE,MAAM;YACb,SAAS,EAAE,MAAM;YACjB,SAAS,EAAE,QAAQ;SACpB,CAAC,CAAC;IACL,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,SAAS,CAAC,KAAa;QAC5B,OAAO,IAAI,WAAW,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,GAAG,CAAC,GAAW;QACpB,OAAO,IAAI,WAAW,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;IACxD,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,IAAI,CAAC,OAAe;QACzB,OAAO,IAAI,WAAW,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,0EAA0E;IAC1E,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,KAAK,KAAK,MAAM,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC;IACzD,CAAC;IAED,8CAA8C;IAC9C,YAAY;QACV,OAAO,IAAI,CAAC,SAAU,CAAC;IACzB,CAAC;IAED,+CAA+C;IAC/C,SAAS,CAAC,KAAc;QACtB,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM;YAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,aAAL,KAAK,cAAL,KAAK,GAAI,IAAI,CAAC,MAAO,EAAE,CAAC;QACjF,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,MAAO,EAAE,CAAC;IACnD,CAAC;CACF;AA/ED,kCA+EC"}
@@ -86,6 +86,17 @@ export declare class InternalServerError extends APIStatusError {
86
86
  export declare class WebhookVerificationError extends ListBeeError {
87
87
  constructor(message: string);
88
88
  }
89
+ /**
90
+ * Raised when createComplete creates the listing but fails during file upload
91
+ * or deliverable attachment.
92
+ *
93
+ * The `listingId` property contains the draft that was created, so the caller
94
+ * can resume with individual `addDeliverable` calls.
95
+ */
96
+ export declare class PartialCreationError extends ListBeeError {
97
+ readonly listingId: string;
98
+ constructor(listingId: string, message: string);
99
+ }
89
100
  type ErrorBody = {
90
101
  type?: unknown;
91
102
  title?: unknown;
@@ -3,7 +3,7 @@
3
3
  * Typed exception hierarchy for the ListBee SDK (RFC 9457).
4
4
  */
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.raiseForStatus = exports.WebhookVerificationError = exports.InternalServerError = exports.RateLimitError = exports.PayloadTooLargeError = exports.ValidationError = exports.ConflictError = exports.NotFoundError = exports.ForbiddenError = exports.AuthenticationError = exports.BadRequestError = exports.APIStatusError = exports.APITimeoutError = exports.APIConnectionError = exports.ListBeeError = void 0;
6
+ exports.raiseForStatus = exports.PartialCreationError = exports.WebhookVerificationError = exports.InternalServerError = exports.RateLimitError = exports.PayloadTooLargeError = exports.ValidationError = exports.ConflictError = exports.NotFoundError = exports.ForbiddenError = exports.AuthenticationError = exports.BadRequestError = exports.APIStatusError = exports.APITimeoutError = exports.APIConnectionError = exports.ListBeeError = void 0;
7
7
  /** Base class for all ListBee SDK errors. */
8
8
  class ListBeeError extends Error {
9
9
  constructor(message) {
@@ -127,6 +127,21 @@ class WebhookVerificationError extends ListBeeError {
127
127
  }
128
128
  }
129
129
  exports.WebhookVerificationError = WebhookVerificationError;
130
+ /**
131
+ * Raised when createComplete creates the listing but fails during file upload
132
+ * or deliverable attachment.
133
+ *
134
+ * The `listingId` property contains the draft that was created, so the caller
135
+ * can resume with individual `addDeliverable` calls.
136
+ */
137
+ class PartialCreationError extends ListBeeError {
138
+ constructor(listingId, message) {
139
+ super(message);
140
+ this.name = 'PartialCreationError';
141
+ this.listingId = listingId;
142
+ }
143
+ }
144
+ exports.PartialCreationError = PartialCreationError;
130
145
  /**
131
146
  * Parse an RFC 9457 error body and throw the appropriate typed exception.
132
147
  */
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,6CAA6C;AAC7C,MAAa,YAAa,SAAQ,KAAK;IACrC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;IAC7B,CAAC;CACF;AALD,oCAKC;AAED,wEAAwE;AACxE,MAAa,kBAAmB,SAAQ,YAAY;IAClD,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF;AALD,gDAKC;AAED,uCAAuC;AACvC,MAAa,eAAgB,SAAQ,YAAY;IAC/C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF;AALD,0CAKC;AAED,+DAA+D;AAC/D,MAAa,cAAe,SAAQ,YAAY;IAc9C,YAAY,IAOX;;QACC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnB,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACxB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC1B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC1B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,KAAK,GAAG,MAAA,IAAI,CAAC,KAAK,mCAAI,IAAI,CAAC;IAClC,CAAC;CACF;AA/BD,wCA+BC;AAED,mEAAmE;AACnE,MAAa,eAAgB,SAAQ,cAAc;IACjD,YAAY,IAAqD;QAC/D,KAAK,CAAC,IAAI,CAAC,CAAC;QACZ,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF;AALD,0CAKC;AAED,4DAA4D;AAC5D,MAAa,mBAAoB,SAAQ,cAAc;IACrD,YAAY,IAAqD;QAC/D,KAAK,CAAC,IAAI,CAAC,CAAC;QACZ,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AALD,kDAKC;AAED,+CAA+C;AAC/C,MAAa,cAAe,SAAQ,cAAc;IAChD,YAAY,IAAqD;QAC/D,KAAK,CAAC,IAAI,CAAC,CAAC;QACZ,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF;AALD,wCAKC;AAED,oDAAoD;AACpD,MAAa,aAAc,SAAQ,cAAc;IAC/C,YAAY,IAAqD;QAC/D,KAAK,CAAC,IAAI,CAAC,CAAC;QACZ,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAC9B,CAAC;CACF;AALD,sCAKC;AAED,mDAAmD;AACnD,MAAa,aAAc,SAAQ,cAAc;IAC/C,YAAY,IAAqD;QAC/D,KAAK,CAAC,IAAI,CAAC,CAAC;QACZ,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAC9B,CAAC;CACF;AALD,sCAKC;AAED,2DAA2D;AAC3D,MAAa,eAAgB,SAAQ,cAAc;IACjD,YAAY,IAAqD;QAC/D,KAAK,CAAC,IAAI,CAAC,CAAC;QACZ,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF;AALD,0CAKC;AAED,2DAA2D;AAC3D,MAAa,oBAAqB,SAAQ,cAAc;IACtD,YAAY,IAAqD;QAC/D,KAAK,CAAC,IAAI,CAAC,CAAC;QACZ,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACrC,CAAC;CACF;AALD,oDAKC;AAED,qDAAqD;AACrD,MAAa,cAAe,SAAQ,cAAc;IAQhD,YACE,IAIC;;QAED,KAAK,CAAC,IAAI,CAAC,CAAC;QACZ,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;QAC7B,IAAI,CAAC,KAAK,GAAG,MAAA,IAAI,CAAC,KAAK,mCAAI,IAAI,CAAC;QAChC,IAAI,CAAC,SAAS,GAAG,MAAA,IAAI,CAAC,SAAS,mCAAI,IAAI,CAAC;QACxC,IAAI,CAAC,KAAK,GAAG,MAAA,IAAI,CAAC,KAAK,mCAAI,IAAI,CAAC;IAClC,CAAC;CACF;AArBD,wCAqBC;AAED,oDAAoD;AACpD,MAAa,mBAAoB,SAAQ,cAAc;IACrD,YAAY,IAAqD;QAC/D,KAAK,CAAC,IAAI,CAAC,CAAC;QACZ,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AALD,kDAKC;AAED,wDAAwD;AACxD,MAAa,wBAAyB,SAAQ,YAAY;IACxD,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAC;IACzC,CAAC;CACF;AALD,4DAKC;AAED;;;;;;GAMG;AACH,MAAa,oBAAqB,SAAQ,YAAY;IAGpD,YAAY,SAAiB,EAAE,OAAe;QAC5C,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;QACnC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;CACF;AARD,oDAQC;AAWD;;GAEG;AACH,SAAgB,cAAc,CAAC,UAAkB,EAAE,IAAe,EAAE,OAA+B;IACjG,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5D,MAAM,KAAK,GAAG,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/D,MAAM,MAAM,GAAG,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC;IAC1E,MAAM,MAAM,GAAG,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IAClE,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5D,MAAM,KAAK,GAAG,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;IAEjE,MAAM,IAAI,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IAE1D,IAAI,UAAU,KAAK,GAAG;QAAE,MAAM,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;IACxD,IAAI,UAAU,KAAK,GAAG;QAAE,MAAM,IAAI,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC5D,IAAI,UAAU,KAAK,GAAG;QAAE,MAAM,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC;IACvD,IAAI,UAAU,KAAK,GAAG;QAAE,MAAM,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC;IACtD,IAAI,UAAU,KAAK,GAAG;QAAE,MAAM,IAAI,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAC7D,IAAI,UAAU,KAAK,GAAG;QAAE,MAAM,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC;IACtD,IAAI,UAAU,KAAK,GAAG;QAAE,MAAM,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;IACxD,IAAI,UAAU,KAAK,GAAG,EAAE,CAAC;QACvB,MAAM,QAAQ,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;QAC9C,MAAM,YAAY,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAC;QACtD,MAAM,QAAQ,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;QAC9C,MAAM,IAAI,cAAc,CAAC;YACvB,GAAG,IAAI;YACP,KAAK,EAAE,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI;YACvD,SAAS,EAAE,YAAY,IAAI,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI;YACnE,KAAK,EAAE,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI;SACtD,CAAC,CAAC;IACL,CAAC;IACD,IAAI,UAAU,IAAI,GAAG;QAAE,MAAM,IAAI,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAE3D,MAAM,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC;AACjC,CAAC;AA/BD,wCA+BC"}
@@ -224,7 +224,11 @@ export interface paths {
224
224
  * @description Replace all deliverables on a draft listing. Accepts an array of up to 3 deliverables (file, url, text). File tokens must be obtained via POST /v1/files first. Old file deliverables are automatically cleaned up from storage.
225
225
  */
226
226
  put: operations["set_deliverables"];
227
- post?: never;
227
+ /**
228
+ * Add deliverable
229
+ * @description Add a single deliverable to a draft listing. Appends to the existing array. Returns the new deliverable with a unique del_ prefixed ID. Max 3 deliverables per listing — returns 409 if at capacity.
230
+ */
231
+ post: operations["add_deliverable"];
228
232
  /**
229
233
  * Remove deliverables
230
234
  * @description Remove all deliverables from a draft listing. Demotes the listing to external fulfillment. Draft only — returns 409 if the listing is published.
@@ -235,6 +239,26 @@ export interface paths {
235
239
  patch?: never;
236
240
  trace?: never;
237
241
  };
242
+ "/v1/listings/{listing_id}/deliverables/{deliverable_id}": {
243
+ parameters: {
244
+ query?: never;
245
+ header?: never;
246
+ path?: never;
247
+ cookie?: never;
248
+ };
249
+ get?: never;
250
+ put?: never;
251
+ post?: never;
252
+ /**
253
+ * Remove deliverable
254
+ * @description Remove a single deliverable by its del_ ID from a draft listing. If the deliverable is a file, the CDN content is cleaned up.
255
+ */
256
+ delete: operations["remove_deliverable"];
257
+ options?: never;
258
+ head?: never;
259
+ patch?: never;
260
+ trace?: never;
261
+ };
238
262
  "/v1/listings/{listing_id}/publish": {
239
263
  parameters: {
240
264
  query?: never;
@@ -697,6 +721,29 @@ export interface components {
697
721
  [key: string]: unknown;
698
722
  } | null;
699
723
  };
724
+ /**
725
+ * AddDeliverableRequest
726
+ * @description Add a single deliverable to a listing.
727
+ */
728
+ AddDeliverableRequest: {
729
+ /**
730
+ * @description Deliverable type: `file` (uploaded via POST /v1/files), `url` (redirect), or `text` (literal string).
731
+ * @example file
732
+ */
733
+ type: components["schemas"]["DeliverableType"];
734
+ /**
735
+ * Token
736
+ * @description File token from POST /v1/files. Required when type is `file`.
737
+ * @example file_7kQ2xY9mN3pR5tW1vB8a01
738
+ */
739
+ token?: string | null;
740
+ /**
741
+ * Value
742
+ * @description URL (https required) or text content. Required when type is `url` or `text`.
743
+ * @example https://example.com/secret-area
744
+ */
745
+ value?: string | null;
746
+ };
700
747
  /** ApiKeyListResponse */
701
748
  ApiKeyListResponse: {
702
749
  /**
@@ -1219,6 +1266,12 @@ export interface components {
1219
1266
  * @constant
1220
1267
  */
1221
1268
  object: "deliverable";
1269
+ /**
1270
+ * Id
1271
+ * @description Unique deliverable identifier (del_ prefixed).
1272
+ * @example del_7kQ2xY9mN3pR5tW1vB8a01
1273
+ */
1274
+ id: string;
1222
1275
  /**
1223
1276
  * @description Deliverable type.
1224
1277
  * @example file
@@ -2363,7 +2416,7 @@ export interface components {
2363
2416
  * WebhookEventType
2364
2417
  * @enum {string}
2365
2418
  */
2366
- WebhookEventType: "order.paid" | "order.fulfilled" | "order.shipped" | "order.refunded" | "order.disputed" | "order.dispute_closed" | "order.canceled" | "listing.created" | "listing.updated" | "listing.out_of_stock" | "listing.deleted" | "customer.created";
2419
+ WebhookEventType: "order.paid" | "order.fulfilled" | "order.shipped" | "order.refunded" | "order.disputed" | "order.dispute_closed" | "order.canceled" | "listing.created" | "listing.updated" | "listing.published" | "listing.out_of_stock" | "listing.deleted" | "customer.created";
2367
2420
  /** WebhookListResponse */
2368
2421
  WebhookListResponse: {
2369
2422
  /**
@@ -3297,6 +3350,69 @@ export interface operations {
3297
3350
  };
3298
3351
  };
3299
3352
  };
3353
+ add_deliverable: {
3354
+ parameters: {
3355
+ query?: never;
3356
+ header?: never;
3357
+ path: {
3358
+ /** @description Listing ID. */
3359
+ listing_id: string;
3360
+ };
3361
+ cookie?: never;
3362
+ };
3363
+ requestBody: {
3364
+ content: {
3365
+ "application/json": components["schemas"]["AddDeliverableRequest"];
3366
+ };
3367
+ };
3368
+ responses: {
3369
+ /** @description Successful Response */
3370
+ 201: {
3371
+ headers: {
3372
+ [name: string]: unknown;
3373
+ };
3374
+ content: {
3375
+ "application/json": components["schemas"]["DeliverableResponse"];
3376
+ };
3377
+ };
3378
+ /** @description Invalid or missing API key. */
3379
+ 401: {
3380
+ headers: {
3381
+ [name: string]: unknown;
3382
+ };
3383
+ content: {
3384
+ "application/json": components["schemas"]["ProblemDetail"];
3385
+ };
3386
+ };
3387
+ /** @description Listing not found. */
3388
+ 404: {
3389
+ headers: {
3390
+ [name: string]: unknown;
3391
+ };
3392
+ content: {
3393
+ "application/json": components["schemas"]["ProblemDetail"];
3394
+ };
3395
+ };
3396
+ /** @description Listing not in draft, or at max capacity. */
3397
+ 409: {
3398
+ headers: {
3399
+ [name: string]: unknown;
3400
+ };
3401
+ content: {
3402
+ "application/json": components["schemas"]["ProblemDetail"];
3403
+ };
3404
+ };
3405
+ /** @description Validation error. */
3406
+ 422: {
3407
+ headers: {
3408
+ [name: string]: unknown;
3409
+ };
3410
+ content: {
3411
+ "application/json": components["schemas"]["ProblemDetail"];
3412
+ };
3413
+ };
3414
+ };
3415
+ };
3300
3416
  remove_deliverables: {
3301
3417
  parameters: {
3302
3418
  query?: never;
@@ -3356,6 +3472,65 @@ export interface operations {
3356
3472
  };
3357
3473
  };
3358
3474
  };
3475
+ remove_deliverable: {
3476
+ parameters: {
3477
+ query?: never;
3478
+ header?: never;
3479
+ path: {
3480
+ /** @description Listing ID. */
3481
+ listing_id: string;
3482
+ /** @description Deliverable ID. */
3483
+ deliverable_id: string;
3484
+ };
3485
+ cookie?: never;
3486
+ };
3487
+ requestBody?: never;
3488
+ responses: {
3489
+ /** @description Successful Response */
3490
+ 204: {
3491
+ headers: {
3492
+ [name: string]: unknown;
3493
+ };
3494
+ content?: never;
3495
+ };
3496
+ /** @description Invalid or missing API key. */
3497
+ 401: {
3498
+ headers: {
3499
+ [name: string]: unknown;
3500
+ };
3501
+ content: {
3502
+ "application/json": components["schemas"]["ProblemDetail"];
3503
+ };
3504
+ };
3505
+ /** @description Listing or deliverable not found. */
3506
+ 404: {
3507
+ headers: {
3508
+ [name: string]: unknown;
3509
+ };
3510
+ content: {
3511
+ "application/json": components["schemas"]["ProblemDetail"];
3512
+ };
3513
+ };
3514
+ /** @description Listing is not in draft status. */
3515
+ 409: {
3516
+ headers: {
3517
+ [name: string]: unknown;
3518
+ };
3519
+ content: {
3520
+ "application/json": components["schemas"]["ProblemDetail"];
3521
+ };
3522
+ };
3523
+ /** @description Validation Error */
3524
+ 422: {
3525
+ headers: {
3526
+ [name: string]: unknown;
3527
+ };
3528
+ content: {
3529
+ "application/json": components["schemas"]["HTTPValidationError"];
3530
+ };
3531
+ };
3532
+ };
3533
+ };
3359
3534
  publish_listing: {
3360
3535
  parameters: {
3361
3536
  query?: never;