@cavuno/board 4.56.1 → 4.56.2
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/CHANGELOG.md +48 -0
- package/dist/{_spec-DS4-nx__.d.mts → _spec-CDYDY0hB.d.mts} +310 -0
- package/dist/{_spec-DS4-nx__.d.ts → _spec-CDYDY0hB.d.ts} +310 -0
- package/dist/bin.mjs +26 -4
- package/dist/{blog-By6dc-Ce.d.ts → blog-DNGOmaKI.d.ts} +1 -1
- package/dist/{blog-BcjUrzqE.d.mts → blog-WupXypHv.d.mts} +1 -1
- package/dist/{board-B7104o4G.d.ts → board-CmQox8FZ.d.ts} +2 -2
- package/dist/{board-BboonvQM.d.mts → board-DbBBz7Pv.d.mts} +2 -2
- package/dist/{breadcrumbs-CfRlf9_7.d.ts → breadcrumbs-DpXiAo9j.d.ts} +2 -2
- package/dist/{breadcrumbs-DmnLLDr9.d.mts → breadcrumbs-mQTz0vZo.d.mts} +2 -2
- package/dist/browser/cavuno-board.global.min.js +1 -1
- package/dist/{chunk-VERFP5OF.mjs → chunk-GUXSUQCP.mjs} +18 -4
- package/dist/{chunk-DZD3DAEY.mjs → chunk-M4CX64RC.mjs} +25 -1
- package/dist/{chunk-ENQ4ZIO2.mjs → chunk-MSY7ERBY.mjs} +13 -1
- package/dist/{chunk-EWD4PIOM.mjs → chunk-R3QB3WM6.mjs} +1 -1
- package/dist/doctor.js +26 -4
- package/dist/doctor.mjs +26 -4
- package/dist/filters.d.mts +2 -2
- package/dist/filters.d.ts +2 -2
- package/dist/format.d.mts +4 -4
- package/dist/format.d.ts +4 -4
- package/dist/format.js +5 -1
- package/dist/format.mjs +2 -2
- package/dist/go.js +5 -1
- package/dist/go.mjs +1 -1
- package/dist/index.d.mts +241 -13
- package/dist/index.d.ts +241 -13
- package/dist/index.js +226 -2
- package/dist/index.mjs +202 -2
- package/dist/{jobs-DkDmvx2n.d.ts → jobs-B-NPmaV0.d.ts} +1 -1
- package/dist/{jobs-D70pujRc.d.mts → jobs-CgmHLS8j.d.mts} +1 -1
- package/dist/paths.d.mts +16 -1
- package/dist/paths.d.ts +16 -1
- package/dist/paths.js +13 -1
- package/dist/paths.mjs +5 -1
- package/dist/{roles-Bh3WNF9u.d.mts → roles-B_d0igKI.d.mts} +5 -1
- package/dist/{roles-Bh3WNF9u.d.ts → roles-B_d0igKI.d.ts} +5 -1
- package/dist/route-contract.d.mts +2 -2
- package/dist/route-contract.d.ts +2 -2
- package/dist/route-contract.js +26 -4
- package/dist/route-contract.mjs +2 -2
- package/dist/{search-DCNHOZQK.d.mts → search--bO1b3RJ.d.mts} +1 -1
- package/dist/{search-DAwVPHKk.d.ts → search-BvhQ92ZO.d.ts} +1 -1
- package/dist/{seo-Duj1plPG.d.mts → seo-C7HjUu_z.d.mts} +1 -1
- package/dist/{seo-BH3Ryx7D.d.ts → seo-CBRBS8Mc.d.ts} +1 -1
- package/dist/seo-files.d.mts +2 -2
- package/dist/seo-files.d.ts +2 -2
- package/dist/seo-files.js +5 -0
- package/dist/seo-files.mjs +5 -0
- package/dist/seo.d.mts +6 -6
- package/dist/seo.d.ts +6 -6
- package/dist/seo.js +5 -1
- package/dist/seo.mjs +2 -2
- package/dist/server.d.mts +6 -6
- package/dist/server.d.ts +6 -6
- package/dist/server.mjs +1 -1
- package/dist/sitemap.d.mts +6 -6
- package/dist/sitemap.d.ts +6 -6
- package/dist/sitemap.js +5 -1
- package/dist/sitemap.mjs +2 -2
- package/dist/suggest.d.mts +2 -2
- package/dist/suggest.d.ts +2 -2
- package/dist/well-known.d.mts +1 -1
- package/dist/well-known.d.ts +1 -1
- package/dist/well-known.js +26 -4
- package/dist/well-known.mjs +2 -2
- package/package.json +1 -1
- package/skills/manifest.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,54 @@
|
|
|
3
3
|
This changelog records changes that affect Board API compatibility, exported
|
|
4
4
|
types, runtime behavior, or supported integration patterns.
|
|
5
5
|
|
|
6
|
+
## 4.57.0 — 2026-10-28
|
|
7
|
+
|
|
8
|
+
- Digital products. `board.products` lists a board's products (`list`, with
|
|
9
|
+
`q`, `price`, `sort` and cursor pages), reads a product page (`get`) and its
|
|
10
|
+
reviews (`reviews`), and starts a purchase (`checkout`): a free product
|
|
11
|
+
returns `status: 'complete'` with the download page path, a paid one an
|
|
12
|
+
embedded Stripe Checkout mount kit (`status: 'open'`) that lasts 30 minutes;
|
|
13
|
+
read it back after Stripe returns the buyer with `getCheckout`.
|
|
14
|
+
- A product page carries `descriptionHtml`, the seller's formatted
|
|
15
|
+
description as sanitized HTML (headings, lists, quotes, dividers, links and
|
|
16
|
+
the board's own images), with `description` as its plain text; and
|
|
17
|
+
`salesCount`, set only when the seller shows the number of sales. Each row
|
|
18
|
+
of `details` (`ProductDetailRow`) names its `kind`: `text` rows carry
|
|
19
|
+
`value`; `check` rows are yes/no facts with `checked`, to show as a tick
|
|
20
|
+
or a cross.
|
|
21
|
+
- `board.purchases` serves the download page by purchase token: `get`,
|
|
22
|
+
`confirmEmail` (shared links), `download` (a signed link per file),
|
|
23
|
+
`downloadAll` (one ZIP), `review`, `resend` ("email me this link again",
|
|
24
|
+
always accepted) and `mine` (the signed-in user's library). Responses that
|
|
25
|
+
pass the shared-link check return `confirmationToken`; pass it back as the
|
|
26
|
+
`confirmationToken` option (the `X-Cavuno-Purchase-Confirmation` header,
|
|
27
|
+
exported as `PURCHASE_CONFIRMATION_HEADER`). The page's
|
|
28
|
+
`downloadAllAvailable` says whether to offer Download all: the ready files
|
|
29
|
+
must total at most 500 MB, and above that `downloadAll` is refused with
|
|
30
|
+
`409 purchase_download_all_unavailable` and nothing counted.
|
|
31
|
+
- Paths and route roles: `productPath(slug)`, `purchasePath(token)`,
|
|
32
|
+
`BOARD_PATHS.products` (`/products`) and `BOARD_PATHS.mePurchases`
|
|
33
|
+
(`/me/purchases`), with the route manifest roles `product`, `purchase`,
|
|
34
|
+
`products` and `mePurchases`.
|
|
35
|
+
- New error codes for products and purchases, listed in
|
|
36
|
+
`BOARD_API_ERROR_CODES`: `products_not_found`,
|
|
37
|
+
`product_checkout_not_found`, `product_reviews_disabled`,
|
|
38
|
+
`product_sold_out`, `product_email_invalid`, `product_email_blocked`,
|
|
39
|
+
`product_amount_below_minimum`, `product_amount_invalid`,
|
|
40
|
+
`product_answers_invalid`, `purchases_not_found`,
|
|
41
|
+
`purchase_file_not_found`, `purchase_unavailable`,
|
|
42
|
+
`purchase_access_removed`, `purchase_awaiting_payment`,
|
|
43
|
+
`purchase_refunded`, `purchase_email_confirmation_required`,
|
|
44
|
+
`purchase_email_mismatch`, `purchase_file_preparing`,
|
|
45
|
+
`purchase_download_limit_reached`, `purchase_review_invalid` and
|
|
46
|
+
`purchase_download_all_unavailable`. A file out of downloads is
|
|
47
|
+
`409 purchase_download_limit_reached`, a permanent limit rather than a rate
|
|
48
|
+
limit, so `isRateLimited` is false for it and `isConflict` is true.
|
|
49
|
+
|
|
50
|
+
## 4.56.2 — 2026-10-28
|
|
51
|
+
|
|
52
|
+
- No changes to Board API types or runtime behavior.
|
|
53
|
+
|
|
6
54
|
## 4.56.1 — 2026-10-28
|
|
7
55
|
|
|
8
56
|
- Market suggestions from `search.suggest` carry `displayName` and
|
|
@@ -2292,6 +2292,174 @@ interface components {
|
|
|
2292
2292
|
/** @description The `token` query parameter from the invite link (`/employers/invites/accept?token=…`). */
|
|
2293
2293
|
token: string;
|
|
2294
2294
|
};
|
|
2295
|
+
ProductCard: {
|
|
2296
|
+
/** @enum {string} */
|
|
2297
|
+
object: "product";
|
|
2298
|
+
slug: string;
|
|
2299
|
+
name: string;
|
|
2300
|
+
summary: string | null;
|
|
2301
|
+
coverImageUrl: string | null;
|
|
2302
|
+
price: components["schemas"]["ProductPrice"];
|
|
2303
|
+
rating: components["schemas"]["ProductRatingSummary"];
|
|
2304
|
+
soldOut: boolean;
|
|
2305
|
+
/** @description The product page path on the board (its route manifest words). */
|
|
2306
|
+
url: string;
|
|
2307
|
+
};
|
|
2308
|
+
ProductCheckout: {
|
|
2309
|
+
/** @enum {string} */
|
|
2310
|
+
object: "product_checkout";
|
|
2311
|
+
/**
|
|
2312
|
+
* @description `complete`: a free claim was recorded; send the buyer to `downloadUrl`. `open`: mount the embedded Stripe Checkout with the mount kit fields.
|
|
2313
|
+
* @enum {string}
|
|
2314
|
+
*/
|
|
2315
|
+
status: "complete" | "open";
|
|
2316
|
+
/** @description `complete` only: the download page path on the board, with its token. */
|
|
2317
|
+
downloadUrl: string | null;
|
|
2318
|
+
/** @description `complete` only: the purchase token for `GET /purchases/{token}`. */
|
|
2319
|
+
purchaseToken: string | null;
|
|
2320
|
+
sessionId: string | null;
|
|
2321
|
+
/** @description `open` only: the Checkout Session client secret. The session expires after 30 minutes. */
|
|
2322
|
+
clientSecret: string | null;
|
|
2323
|
+
/** @description `open` only: the board’s connected Stripe account. */
|
|
2324
|
+
stripeAccountId: string | null;
|
|
2325
|
+
/** @description `open` only: the Stripe publishable key for `loadStripe`. */
|
|
2326
|
+
publishableKey: string | null;
|
|
2327
|
+
};
|
|
2328
|
+
ProductCheckoutBody: {
|
|
2329
|
+
/** @description Where the download link and receipt are sent. */
|
|
2330
|
+
email: string;
|
|
2331
|
+
/**
|
|
2332
|
+
* @description Answers to the product’s `questions`, by question id.
|
|
2333
|
+
* @default []
|
|
2334
|
+
*/
|
|
2335
|
+
answers: {
|
|
2336
|
+
questionId: string;
|
|
2337
|
+
value: string | boolean;
|
|
2338
|
+
}[];
|
|
2339
|
+
/** @description Pay what you want: the amount the buyer chose, in cents. Omit to let the buyer choose on the Stripe page. `0` on a $0+ product claims it for free. */
|
|
2340
|
+
amountCents?: number;
|
|
2341
|
+
/** @description Free products: also subscribe the email to the board’s job alerts. Show it unticked. */
|
|
2342
|
+
jobAlertOptIn?: boolean;
|
|
2343
|
+
/** @description Paid products: the relative path Stripe returns the buyer to (`session_id` is appended). Defaults to the product page. */
|
|
2344
|
+
returnPath?: string;
|
|
2345
|
+
/** @description Honeypot. Render it hidden and leave it empty; a filled value is answered like a success and nothing is recorded or sent. */
|
|
2346
|
+
website?: string;
|
|
2347
|
+
};
|
|
2348
|
+
ProductCheckoutStatus: {
|
|
2349
|
+
/** @enum {string} */
|
|
2350
|
+
object: "product_checkout_status";
|
|
2351
|
+
/**
|
|
2352
|
+
* @description `awaiting_payment` until the payment webhook lands (poll briefly), then `paid` with the download page.
|
|
2353
|
+
* @enum {string}
|
|
2354
|
+
*/
|
|
2355
|
+
status: "awaiting_payment" | "paid" | "free" | "access_removed";
|
|
2356
|
+
/** @description `paid` only: the download page path on the board, with its token. */
|
|
2357
|
+
downloadUrl: string | null;
|
|
2358
|
+
/** @description `paid` only: the purchase token for `GET /purchases/{token}`. */
|
|
2359
|
+
purchaseToken: string | null;
|
|
2360
|
+
};
|
|
2361
|
+
ProductDetail: {
|
|
2362
|
+
/** @enum {string} */
|
|
2363
|
+
object: "product";
|
|
2364
|
+
slug: string;
|
|
2365
|
+
name: string;
|
|
2366
|
+
/** @description Plain-text description. When `descriptionHtml` is set, this is its text. */
|
|
2367
|
+
description: string | null;
|
|
2368
|
+
/** @description Formatted description as sanitized HTML: `h2`, `h3`, `p`, `br`, `strong`, `em`, `u`, `s`, `ul`, `ol`, `li`, `blockquote`, `hr`, `a` (`rel="noopener nofollow ugc"`, new tab) and `img` (images uploaded to this board only). `null` when the seller wrote none; show `description` instead. */
|
|
2369
|
+
descriptionHtml: string | null;
|
|
2370
|
+
summary: string | null;
|
|
2371
|
+
/** @description Operator facts shown on the product page. */
|
|
2372
|
+
details: components["schemas"]["ProductDetailRow"][];
|
|
2373
|
+
images: string[];
|
|
2374
|
+
price: components["schemas"]["ProductPrice"];
|
|
2375
|
+
soldOut: boolean;
|
|
2376
|
+
/** @description Sales so far, when the seller shows the number of sales; otherwise `null`. */
|
|
2377
|
+
salesCount: number | null;
|
|
2378
|
+
refundPolicy: string | null;
|
|
2379
|
+
questions: components["schemas"]["ProductQuestion"][];
|
|
2380
|
+
contents: {
|
|
2381
|
+
displayName: string;
|
|
2382
|
+
description: string | null;
|
|
2383
|
+
/** @enum {string} */
|
|
2384
|
+
kind: "file" | "link";
|
|
2385
|
+
/** @description File extension (`pdf`, `zip`, …) or `link`. */
|
|
2386
|
+
fileType: string;
|
|
2387
|
+
pageCount: number | null;
|
|
2388
|
+
sizeBytes: number | null;
|
|
2389
|
+
}[];
|
|
2390
|
+
facts: {
|
|
2391
|
+
fileCount: number;
|
|
2392
|
+
linkCount: number;
|
|
2393
|
+
fileTypes: string[];
|
|
2394
|
+
pageCount: number | null;
|
|
2395
|
+
totalSizeBytes: number;
|
|
2396
|
+
};
|
|
2397
|
+
/** @description `false` for an unlisted (link-only) product: keep it out of listings, sitemaps and search indexes. */
|
|
2398
|
+
isListed: boolean;
|
|
2399
|
+
ratingsEnabled: boolean;
|
|
2400
|
+
rating: {
|
|
2401
|
+
average: number | null;
|
|
2402
|
+
count: number;
|
|
2403
|
+
/** @description Counted reviews per star, 1 star first. */
|
|
2404
|
+
histogram: number[];
|
|
2405
|
+
} | null;
|
|
2406
|
+
/** @description The product page path on the board. */
|
|
2407
|
+
url: string;
|
|
2408
|
+
};
|
|
2409
|
+
/** @description A facts box row: `text` shows `value`; `check` is a yes/no row shown as a tick or a cross. */
|
|
2410
|
+
ProductDetailRow: {
|
|
2411
|
+
/** @enum {string} */
|
|
2412
|
+
kind: "text";
|
|
2413
|
+
label: string;
|
|
2414
|
+
value: string;
|
|
2415
|
+
} | {
|
|
2416
|
+
/** @enum {string} */
|
|
2417
|
+
kind: "check";
|
|
2418
|
+
label: string;
|
|
2419
|
+
/** @description Yes/no: show a tick for `true` and a cross for `false`, not a word. */
|
|
2420
|
+
checked: boolean;
|
|
2421
|
+
};
|
|
2422
|
+
ProductPrice: {
|
|
2423
|
+
/**
|
|
2424
|
+
* @description `free`: claimed with an email. `fixed`: one price. `pay_what_you_want`: the buyer chooses at least `minimumCents`.
|
|
2425
|
+
* @enum {string}
|
|
2426
|
+
*/
|
|
2427
|
+
kind: "free" | "fixed" | "pay_what_you_want";
|
|
2428
|
+
/** @description Lowercase ISO currency code; `null` for free products. */
|
|
2429
|
+
currency: string | null;
|
|
2430
|
+
/** @description The price (fixed), the minimum (pay what you want), or 0 (free). */
|
|
2431
|
+
amountCents: number;
|
|
2432
|
+
minimumCents?: number;
|
|
2433
|
+
suggestedCents?: number | null;
|
|
2434
|
+
};
|
|
2435
|
+
ProductQuestion: {
|
|
2436
|
+
id: string;
|
|
2437
|
+
/** @enum {string} */
|
|
2438
|
+
kind: "text" | "checkbox" | "dropdown";
|
|
2439
|
+
label: string;
|
|
2440
|
+
required: boolean;
|
|
2441
|
+
/** @description Dropdown choices; `null` for the other kinds. */
|
|
2442
|
+
options: string[] | null;
|
|
2443
|
+
};
|
|
2444
|
+
/** @description `null` when ratings are off for the product. */
|
|
2445
|
+
ProductRatingSummary: {
|
|
2446
|
+
/** @description Average stars, 1 to 5; `null` with no counted reviews. */
|
|
2447
|
+
average: number | null;
|
|
2448
|
+
count: number;
|
|
2449
|
+
} | null;
|
|
2450
|
+
ProductReview: {
|
|
2451
|
+
id: string;
|
|
2452
|
+
/** @enum {string} */
|
|
2453
|
+
object: "product_review";
|
|
2454
|
+
stars: number;
|
|
2455
|
+
comment: string | null;
|
|
2456
|
+
displayName: string | null;
|
|
2457
|
+
/** @description The operator’s public reply. */
|
|
2458
|
+
reply: string | null;
|
|
2459
|
+
replyAt: string | null;
|
|
2460
|
+
createdAt: string;
|
|
2461
|
+
updatedAt: string;
|
|
2462
|
+
};
|
|
2295
2463
|
ProfileChoiceList: {
|
|
2296
2464
|
data: {
|
|
2297
2465
|
id: string;
|
|
@@ -3169,6 +3337,148 @@ interface components {
|
|
|
3169
3337
|
/** @description The board password. */
|
|
3170
3338
|
password: string;
|
|
3171
3339
|
};
|
|
3340
|
+
Purchase: {
|
|
3341
|
+
/** @enum {string} */
|
|
3342
|
+
object: "purchase";
|
|
3343
|
+
/** @enum {string} */
|
|
3344
|
+
status: "awaiting_payment" | "paid" | "free";
|
|
3345
|
+
product: {
|
|
3346
|
+
slug: string;
|
|
3347
|
+
name: string;
|
|
3348
|
+
thankYouMessage: string | null;
|
|
3349
|
+
};
|
|
3350
|
+
email: string;
|
|
3351
|
+
purchasedAt: string;
|
|
3352
|
+
amountCents: number;
|
|
3353
|
+
currency: string;
|
|
3354
|
+
/** @description Downloads allowed per file. */
|
|
3355
|
+
downloadCap: number;
|
|
3356
|
+
files: ({
|
|
3357
|
+
/** @enum {string} */
|
|
3358
|
+
kind: "file";
|
|
3359
|
+
fileId: string;
|
|
3360
|
+
displayName: string;
|
|
3361
|
+
description: string | null;
|
|
3362
|
+
contentType: string | null;
|
|
3363
|
+
sizeBytes: number | null;
|
|
3364
|
+
pageCount: number | null;
|
|
3365
|
+
/**
|
|
3366
|
+
* @description `preparing`: the buyer’s personal stamped copy is being made (they are emailed when it is ready). `limit_reached`: no downloads left.
|
|
3367
|
+
* @enum {string}
|
|
3368
|
+
*/
|
|
3369
|
+
state: "ready" | "preparing" | "limit_reached";
|
|
3370
|
+
downloadsUsed: number;
|
|
3371
|
+
downloadsLeft: number;
|
|
3372
|
+
/** @description The buyer gets their own stamped copy of this PDF. */
|
|
3373
|
+
stamped: boolean;
|
|
3374
|
+
} | {
|
|
3375
|
+
/** @enum {string} */
|
|
3376
|
+
kind: "link";
|
|
3377
|
+
fileId: string;
|
|
3378
|
+
displayName: string;
|
|
3379
|
+
description: string | null;
|
|
3380
|
+
url: string;
|
|
3381
|
+
})[];
|
|
3382
|
+
/** @description Whether to offer Download all: a file is ready to download and the ready files total at most 500 MB. Above 500 MB the buyer downloads the files one by one. */
|
|
3383
|
+
downloadAllAvailable: boolean;
|
|
3384
|
+
/** @enum {string} */
|
|
3385
|
+
stamping: "off" | "ready" | "preparing";
|
|
3386
|
+
/** @description The Stripe receipt or paid invoice; `null` for free claims. */
|
|
3387
|
+
receiptUrl: string | null;
|
|
3388
|
+
refundPolicy: string | null;
|
|
3389
|
+
ratingsEnabled: boolean;
|
|
3390
|
+
/** @description The buyer’s own review, if any. */
|
|
3391
|
+
review: {
|
|
3392
|
+
stars: number;
|
|
3393
|
+
comment: string | null;
|
|
3394
|
+
displayName: string | null;
|
|
3395
|
+
hidden: boolean;
|
|
3396
|
+
reply: string | null;
|
|
3397
|
+
updatedAt: string;
|
|
3398
|
+
} | null;
|
|
3399
|
+
purchaseToken: string;
|
|
3400
|
+
/** @description Send it back in `X-Cavuno-Purchase-Confirmation` on later requests for this purchase; `null` when the request already carried it. */
|
|
3401
|
+
confirmationToken: string | null;
|
|
3402
|
+
};
|
|
3403
|
+
PurchaseConfirmBody: {
|
|
3404
|
+
email: string;
|
|
3405
|
+
};
|
|
3406
|
+
PurchaseConfirmation: {
|
|
3407
|
+
/** @enum {string} */
|
|
3408
|
+
object: "purchase_confirmation";
|
|
3409
|
+
confirmationToken: string;
|
|
3410
|
+
};
|
|
3411
|
+
PurchaseDownload: {
|
|
3412
|
+
/** @enum {string} */
|
|
3413
|
+
object: "purchase_download";
|
|
3414
|
+
/** @description A signed, short-lived link that downloads as an attachment. */
|
|
3415
|
+
url: string;
|
|
3416
|
+
expiresAt: string;
|
|
3417
|
+
/** @description The name it downloads under: the file's `displayName`, with the file's extension added when that name has none. */
|
|
3418
|
+
fileName: string;
|
|
3419
|
+
downloadsLeft: number;
|
|
3420
|
+
confirmationToken: string | null;
|
|
3421
|
+
};
|
|
3422
|
+
PurchaseDownloadAll: {
|
|
3423
|
+
/** @enum {string} */
|
|
3424
|
+
object: "purchase_download_all";
|
|
3425
|
+
/** @description A short-lived link to the streamed ZIP of every ready file. */
|
|
3426
|
+
url: string;
|
|
3427
|
+
expiresAt: string;
|
|
3428
|
+
fileCount: number;
|
|
3429
|
+
totalBytes: number;
|
|
3430
|
+
/** @description File ids left out while their stamped copy is made. */
|
|
3431
|
+
preparing: string[];
|
|
3432
|
+
/** @description File ids left out because no downloads are left. */
|
|
3433
|
+
limitReached: string[];
|
|
3434
|
+
confirmationToken: string | null;
|
|
3435
|
+
};
|
|
3436
|
+
PurchaseResendBody: {
|
|
3437
|
+
email: string;
|
|
3438
|
+
/** @description Only this product’s purchases; omit for all of them. */
|
|
3439
|
+
productSlug?: string;
|
|
3440
|
+
/** @description Honeypot. Render it hidden and leave it empty. */
|
|
3441
|
+
website?: string;
|
|
3442
|
+
};
|
|
3443
|
+
PurchaseResendResult: {
|
|
3444
|
+
/** @enum {string} */
|
|
3445
|
+
object: "purchase_resend";
|
|
3446
|
+
/** @enum {boolean} */
|
|
3447
|
+
accepted: true;
|
|
3448
|
+
};
|
|
3449
|
+
PurchaseReviewBody: {
|
|
3450
|
+
stars: number;
|
|
3451
|
+
comment?: string;
|
|
3452
|
+
/** @description The name shown with the review; omit to stay anonymous. */
|
|
3453
|
+
displayName?: string;
|
|
3454
|
+
};
|
|
3455
|
+
PurchaseReviewResult: {
|
|
3456
|
+
id: string;
|
|
3457
|
+
/** @enum {string} */
|
|
3458
|
+
object: "purchase_review";
|
|
3459
|
+
/** @description Whether the stars count toward the product rating. */
|
|
3460
|
+
counted: boolean;
|
|
3461
|
+
};
|
|
3462
|
+
PurchaseSummary: {
|
|
3463
|
+
id: string;
|
|
3464
|
+
/** @enum {string} */
|
|
3465
|
+
object: "purchase_summary";
|
|
3466
|
+
product: {
|
|
3467
|
+
slug: string;
|
|
3468
|
+
name: string;
|
|
3469
|
+
coverImageUrl: string | null;
|
|
3470
|
+
};
|
|
3471
|
+
/** @enum {string} */
|
|
3472
|
+
status: "paid" | "free";
|
|
3473
|
+
purchasedAt: string;
|
|
3474
|
+
amountCents: number;
|
|
3475
|
+
currency: string;
|
|
3476
|
+
/** @description `false` while the product cannot be delivered (taken down, or the board is closed). */
|
|
3477
|
+
available: boolean;
|
|
3478
|
+
purchaseToken: string;
|
|
3479
|
+
/** @description The download page path on the board. */
|
|
3480
|
+
downloadUrl: string;
|
|
3481
|
+
};
|
|
3172
3482
|
ReadReceipt: {
|
|
3173
3483
|
/** @enum {string} */
|
|
3174
3484
|
object: "read_receipt";
|