stablevoy 1.2.0 → 1.4.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 (68) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/README.md +24 -4
  3. package/dist/ConnectionOptions.d.ts +16 -0
  4. package/dist/ConnectionOptions.d.ts.map +1 -0
  5. package/dist/ConnectionOptions.js +2 -0
  6. package/dist/ConnectionOptions.js.map +1 -0
  7. package/dist/Stablevoy.d.ts +2 -13
  8. package/dist/Stablevoy.d.ts.map +1 -1
  9. package/dist/Stablevoy.js +2 -21
  10. package/dist/Stablevoy.js.map +1 -1
  11. package/dist/StablevoyConnect.d.ts +25 -0
  12. package/dist/StablevoyConnect.d.ts.map +1 -0
  13. package/dist/StablevoyConnect.js +25 -0
  14. package/dist/StablevoyConnect.js.map +1 -0
  15. package/dist/errors/ApiError.d.ts +8 -0
  16. package/dist/errors/ApiError.d.ts.map +1 -1
  17. package/dist/errors/ApiError.js +8 -0
  18. package/dist/errors/ApiError.js.map +1 -1
  19. package/dist/http/ErrorFactory.d.ts.map +1 -1
  20. package/dist/http/ErrorFactory.js +1 -0
  21. package/dist/http/ErrorFactory.js.map +1 -1
  22. package/dist/http/FetchTransport.d.ts +9 -2
  23. package/dist/http/FetchTransport.d.ts.map +1 -1
  24. package/dist/http/FetchTransport.js +19 -12
  25. package/dist/http/FetchTransport.js.map +1 -1
  26. package/dist/http/RetryPolicy.d.ts +3 -3
  27. package/dist/http/RetryPolicy.js +3 -3
  28. package/dist/http/Transport.d.ts +2 -0
  29. package/dist/http/Transport.d.ts.map +1 -1
  30. package/dist/http/createFetchTransport.d.ts +5 -0
  31. package/dist/http/createFetchTransport.d.ts.map +1 -0
  32. package/dist/http/createFetchTransport.js +25 -0
  33. package/dist/http/createFetchTransport.js.map +1 -0
  34. package/dist/index.d.ts +4 -1
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +2 -1
  37. package/dist/index.js.map +1 -1
  38. package/dist/model/ConnectedStore.d.ts +10 -0
  39. package/dist/model/ConnectedStore.d.ts.map +1 -0
  40. package/dist/model/ConnectedStore.js +12 -0
  41. package/dist/model/ConnectedStore.js.map +1 -0
  42. package/dist/model/Fields.d.ts +2 -0
  43. package/dist/model/Fields.d.ts.map +1 -1
  44. package/dist/model/Fields.js +4 -0
  45. package/dist/model/Fields.js.map +1 -1
  46. package/dist/model/Invoice.d.ts +1 -1
  47. package/dist/model/Invoice.d.ts.map +1 -1
  48. package/dist/model/Platform.d.ts +33 -2
  49. package/dist/model/Platform.d.ts.map +1 -1
  50. package/dist/model/Platform.js +25 -3
  51. package/dist/model/Platform.js.map +1 -1
  52. package/dist/resources/Invoices.d.ts.map +1 -1
  53. package/dist/resources/Invoices.js +5 -0
  54. package/dist/resources/Invoices.js.map +1 -1
  55. package/dist/resources/Stores.d.ts +5 -0
  56. package/dist/resources/Stores.d.ts.map +1 -1
  57. package/dist/resources/Stores.js +7 -0
  58. package/dist/resources/Stores.js.map +1 -1
  59. package/dist/version.d.ts +1 -1
  60. package/dist/version.js +1 -1
  61. package/dist/webhook/WebhookEvent.d.ts +5 -1
  62. package/dist/webhook/WebhookEvent.d.ts.map +1 -1
  63. package/dist/webhook/WebhookEvent.js.map +1 -1
  64. package/dist/webhook/WebhookVerifier.d.ts +2 -0
  65. package/dist/webhook/WebhookVerifier.d.ts.map +1 -1
  66. package/dist/webhook/WebhookVerifier.js +10 -1
  67. package/dist/webhook/WebhookVerifier.js.map +1 -1
  68. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,24 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.4.0
4
+
5
+ - `Store` carries `evmPayoutStatus` (`plain`, `acknowledged`, `unacknowledged`, `unchecked`, or null without an EVM payout wallet, values in `EVM_PAYOUT_STATUS`) and `evmNetworksBlocked`: the enabled EVM networks new invoices leave out while the EVM payout wallet is not confirmed in the dashboard. `evmPayoutNeedsReview(store)` tells it.
6
+ - `canAcceptPayments(store)` also counts the blocked EVM networks, so it is false for a store whose only networks are blocked.
7
+ - `ApiError.PAYOUT_ADDRESS_UNACKNOWLEDGED` names the error code an invoice gets when the EVM payout wallet is not confirmed and the store has no other network.
8
+ - New webhook type `store.payout_attention`: the EVM payout wallet of the account became unconfirmed, or is fine again. It carries no invoice; the data has `store` and `payout` (status, blocked networks, dashboard link).
9
+
10
+ ## 1.3.0
11
+
12
+ - New webhook type `invoice.payment_flagged`: a payment of an invoice that is already paid, overpaid or paid late was flagged by sanctions screening. The invoice keeps its status; the flagged payment is in the event data under `payment`.
13
+ - `Store.connectedPlatform`: the plugin connected to the store in one click, or null. `Network` carries `forwarderImplementation`, `explorerAddressUrl` and `rpcUrl`. `ApiError.limitUsdCents` gives the limit an amount was refused for. All three were sent by the API and dropped.
14
+ - `WebhookVerifier.verify()` refuses a body of bytes that is not UTF-8 with `SignatureError`, like every other bad webhook. Before, it threw a plain `TypeError`, which a `catch (SignatureError)` did not cover. A leading byte order mark is kept, so the checked text is exactly what arrived.
15
+ - `invoices.create()` checks the idempotency key before sending: 1 to 255 printable ASCII characters without spaces, as the API requires. Before, a key with a non-Latin-1 letter made fetch throw, and the call was retried and reported as "Cannot reach the Stablevoy API".
16
+ - Webhook events now carry `source` on their invoice, as the API answers do. Events recorded before 3 November 2026 have none, and still verify.
17
+ - One-click connect: `StablevoyConnect.create().exchange({ code, codeVerifier, site })` redeems a connect code for the shop's API key and webhook secret (`ConnectedStore`). It needs no API key and is never retried, since the code works once.
18
+ - `stores.revokeCurrentKey()` revokes the key of the client, for a shop that disconnects. It is retried like a read.
19
+ - `Transport` has `delete()`. Your own implementation of `Transport` needs it too. The connection options shared by both clients are exported as `ConnectionOptions`.
20
+ - Reads, and creates that carry an idempotency key, are also retried on the gateway errors 502, 504 and 520 to 524. nginx and Cloudflare answer with them for the few seconds the API restarts, so a call made then no longer fails at once. A 500 is still not retried.
21
+
3
22
  ## 1.2.0
4
23
 
5
24
  - `Store` carries `networksWithoutPayout`: the enabled networks with no payout wallet for their family (EVM or Tron) on the account. Buyers are not offered them.
package/README.md CHANGED
@@ -54,10 +54,10 @@ for await (const invoice of stablevoy.invoices.all({ source: InvoiceSourceFilter
54
54
 
55
55
  ## Check the store before going live
56
56
 
57
- Invoices need a payout wallet for at least one network the store accepts; without one every invoice is refused with `payout_address_not_set`. Read the store of the key to find out in advance, and tell the merchant about networks buyers will not be offered:
57
+ Invoices need a payout wallet for at least one network the store accepts; without one every invoice is refused with `payout_address_not_set`. An EVM payout wallet that is a smart contract wallet or an EIP-7702 delegation must be confirmed in the dashboard, and confirmed again when it changes; until then new invoices leave out the EVM networks, and a store with nothing else is refused with `payout_address_unacknowledged`. Read the store of the key to find out in advance, and tell the merchant about networks buyers will not be offered:
58
58
 
59
59
  ```ts
60
- import { canAcceptPayments } from 'stablevoy';
60
+ import { canAcceptPayments, evmPayoutNeedsReview } from 'stablevoy';
61
61
 
62
62
  const store = await stablevoy.stores.current();
63
63
  if (!canAcceptPayments(store)) {
@@ -66,11 +66,31 @@ if (!canAcceptPayments(store)) {
66
66
  if (store.networksWithoutPayout.length > 0) {
67
67
  // These enabled networks have no payout wallet, so buyers do not see them.
68
68
  }
69
+ if (evmPayoutNeedsReview(store)) {
70
+ // The EVM payout wallet is not confirmed: store.evmNetworksBlocked are not offered until the merchant reviews it in the dashboard.
71
+ }
72
+ ```
73
+
74
+ ## Connect a shop in one click
75
+
76
+ A shop integration can get its API key and webhook secret without the merchant copying them: it sends the merchant to the Stablevoy dashboard with a PKCE challenge, gets a code back on its callback URL and redeems it. This call needs no API key, since the shop has none yet. The code works once, so the call is never retried.
77
+
78
+ ```ts
79
+ import { StablevoyConnect } from 'stablevoy';
80
+
81
+ const connected = await StablevoyConnect.create().exchange({ code, codeVerifier, site: 'https://shop.example.com' });
82
+ // Store connected.apiKey and connected.webhookSecret; connected.storeName is the store the merchant chose.
83
+ ```
84
+
85
+ When the merchant disconnects the shop, give the key up so it stops working at once. A key that is already revoked answers with `AuthenticationError`, which for a disconnect means the same:
86
+
87
+ ```ts
88
+ await stablevoy.stores.revokeCurrentKey();
69
89
  ```
70
90
 
71
91
  ## Verify webhooks
72
92
 
73
- Stablevoy posts an event to your webhook URL when an invoice is paid, overpaid, underpaid, expired, paid late or put on hold. Check the signature before you trust it, using the signing secret shown when you set the webhook in the dashboard. Pass the raw body, exactly as received: a body parsed to JSON and serialised again no longer matches the signature.
93
+ Stablevoy posts an event to your webhook URL when an invoice is paid, overpaid, underpaid, expired, paid late or put on hold. One more, `invoice.payment_flagged`, comes when a later transfer to an invoice that is already paid is flagged by sanctions screening: the invoice keeps its paid status, so this event is not a new payment; the flagged transfer is in `event.data.payment`. Another, `store.payout_attention`, comes when the EVM payout wallet of the account becomes unconfirmed and again when it is fine: it carries no invoice, `event.data.payout` has the new `status`, the `blockedNetworks` and a `dashboardUrl`; read `stablevoy.stores.current()` again for the current state. Check the signature before you trust it, using the signing secret shown when you set the webhook in the dashboard. Pass the raw body, exactly as received: a body parsed to JSON and serialised again no longer matches the signature.
74
94
 
75
95
  Express:
76
96
 
@@ -113,7 +133,7 @@ export async function POST(request: Request) {
113
133
 
114
134
  Every error extends `StablevoyError`. API errors are `ApiError` with the HTTP `status`, a stable `code`, a readable `detail` and a link to the [error catalog](https://stablevoy.com/docs/api/errors/); the ones you may want to handle on their own are `AuthenticationError`, `ValidationError` (with `issues`), `NotFoundError`, `RateLimitedError` and `MaintenanceError`. `TransportError` means no answer at all.
115
135
 
116
- Reads, and creates that carry an idempotency key, are retried on rate limits, maintenance and failed connections, at most twice and only for waits of up to 10 seconds. Anything longer reaches you with `retryAfterSeconds`, so a request never hangs.
136
+ Reads, and creates that carry an idempotency key, are retried on rate limits, maintenance, gateway errors while the API restarts (502, 504, 520 to 524) and failed connections, at most twice and only for waits of up to 10 seconds. Anything longer reaches you with `retryAfterSeconds`, so a request never hangs.
117
137
 
118
138
  ```ts
119
139
  import { RetryPolicy, Stablevoy } from 'stablevoy';
@@ -0,0 +1,16 @@
1
+ import type { RetryPolicy } from './http/RetryPolicy.js';
2
+ import type { Sleep } from './http/Sleep.js';
3
+ /** How a client talks to the API. The defaults are what production needs. */
4
+ export interface ConnectionOptions {
5
+ /** https://api.stablevoy.com by default. */
6
+ readonly baseUrl?: string;
7
+ readonly retries?: RetryPolicy;
8
+ /** The global fetch by default. */
9
+ readonly fetch?: typeof fetch;
10
+ readonly sleep?: Sleep;
11
+ /** Added to the User-Agent, e.g. "my-shop/2.1". */
12
+ readonly userAgentSuffix?: string;
13
+ /** Seconds before an attempt is given up, at most 600; 30 by default. */
14
+ readonly timeoutSeconds?: number;
15
+ }
16
+ //# sourceMappingURL=ConnectionOptions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConnectionOptions.d.ts","sourceRoot":"","sources":["../src/ConnectionOptions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAE7C,6EAA6E;AAC7E,MAAM,WAAW,iBAAiB;IAChC,4CAA4C;IAC5C,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC;IAC/B,mCAAmC;IACnC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IAC9B,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC;IACvB,mDAAmD;IACnD,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,yEAAyE;IACzE,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CAClC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ConnectionOptions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConnectionOptions.js","sourceRoot":"","sources":["../src/ConnectionOptions.ts"],"names":[],"mappings":""}
@@ -1,22 +1,11 @@
1
- import { RetryPolicy } from './http/RetryPolicy.js';
2
- import { type Sleep } from './http/Sleep.js';
1
+ import type { ConnectionOptions } from './ConnectionOptions.js';
3
2
  import type { Transport } from './http/Transport.js';
4
3
  import { Invoices } from './resources/Invoices.js';
5
4
  import { Platform } from './resources/Platform.js';
6
5
  import { Stores } from './resources/Stores.js';
7
- export interface StablevoyOptions {
6
+ export interface StablevoyOptions extends ConnectionOptions {
8
7
  /** The store's API key (sk_live_... or sk_test_...). */
9
8
  readonly apiKey: string;
10
- /** https://api.stablevoy.com by default. */
11
- readonly baseUrl?: string;
12
- readonly retries?: RetryPolicy;
13
- /** The global fetch by default. */
14
- readonly fetch?: typeof fetch;
15
- readonly sleep?: Sleep;
16
- /** Added to the User-Agent, e.g. "my-shop/2.1". */
17
- readonly userAgentSuffix?: string;
18
- /** Seconds before an attempt is given up, at most 600; 30 by default. */
19
- readonly timeoutSeconds?: number;
20
9
  }
21
10
  /** The Stablevoy API: `const stablevoy = Stablevoy.create({ apiKey: process.env.STABLEVOY_API_KEY })`. */
22
11
  export declare class Stablevoy {
@@ -1 +1 @@
1
- {"version":3,"file":"Stablevoy.d.ts","sourceRoot":"","sources":["../src/Stablevoy.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAa,KAAK,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAG/C,MAAM,WAAW,gBAAgB;IAC/B,wDAAwD;IACxD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,4CAA4C;IAC5C,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC;IAC/B,mCAAmC;IACnC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IAC9B,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC;IACvB,mDAAmD;IACnD,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,yEAAyE;IACzE,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CAClC;AAED,0GAA0G;AAC1G,qBAAa,SAAS;IAElB,QAAQ,CAAC,QAAQ,EAAE,QAAQ;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM;IACvB,QAAQ,CAAC,QAAQ,EAAE,QAAQ;gBAFlB,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,QAAQ;IAG7B,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,gBAAgB,GAAG,SAAS;IAmBnD,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,SAAS,GAAG,SAAS;CAGtD"}
1
+ {"version":3,"file":"Stablevoy.d.ts","sourceRoot":"","sources":["../src/Stablevoy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAEhE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE/C,MAAM,WAAW,gBAAiB,SAAQ,iBAAiB;IACzD,wDAAwD;IACxD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,0GAA0G;AAC1G,qBAAa,SAAS;IAElB,QAAQ,CAAC,QAAQ,EAAE,QAAQ;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM;IACvB,QAAQ,CAAC,QAAQ,EAAE,QAAQ;gBAFlB,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,QAAQ;IAG7B,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,gBAAgB,GAAG,SAAS;IAInD,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,SAAS,GAAG,SAAS;CAGtD"}
package/dist/Stablevoy.js CHANGED
@@ -1,12 +1,7 @@
1
- import { ErrorFactory } from './http/ErrorFactory.js';
2
- import { FetchTransport } from './http/FetchTransport.js';
3
- import { RetryPolicy } from './http/RetryPolicy.js';
4
- import { realSleep } from './http/Sleep.js';
5
- import { ConfigurationError } from './errors/ConfigurationError.js';
1
+ import { createFetchTransport } from './http/createFetchTransport.js';
6
2
  import { Invoices } from './resources/Invoices.js';
7
3
  import { Platform } from './resources/Platform.js';
8
4
  import { Stores } from './resources/Stores.js';
9
- import { VERSION } from './version.js';
10
5
  /** The Stablevoy API: `const stablevoy = Stablevoy.create({ apiKey: process.env.STABLEVOY_API_KEY })`. */
11
6
  export class Stablevoy {
12
7
  invoices;
@@ -18,21 +13,7 @@ export class Stablevoy {
18
13
  this.platform = platform;
19
14
  }
20
15
  static create(options) {
21
- const fetchFn = options.fetch ?? globalThis.fetch;
22
- if (typeof fetchFn !== 'function')
23
- throw new ConfigurationError('No fetch is available. Use Node 22 or newer, or pass one as options.fetch.');
24
- // Node 21+, Bun, Deno and edge runtimes all name themselves here, e.g. "Node.js/26".
25
- const runtime = typeof navigator === 'undefined' ? 'unknown-runtime' : navigator.userAgent;
26
- return Stablevoy.fromTransport(new FetchTransport({
27
- apiKey: options.apiKey,
28
- baseUrl: options.baseUrl ?? 'https://api.stablevoy.com',
29
- userAgent: `stablevoy-node/${VERSION} ${runtime}${options.userAgentSuffix === undefined ? '' : ` ${options.userAgentSuffix}`}`,
30
- retries: options.retries ?? new RetryPolicy(),
31
- fetch: fetchFn,
32
- sleep: options.sleep ?? realSleep,
33
- errors: new ErrorFactory(),
34
- timeoutSeconds: options.timeoutSeconds ?? 30,
35
- }));
16
+ return Stablevoy.fromTransport(createFetchTransport(options.apiKey, options));
36
17
  }
37
18
  static fromTransport(transport) {
38
19
  return new Stablevoy(new Invoices(transport), new Stores(transport), new Platform(transport));
@@ -1 +1 @@
1
- {"version":3,"file":"Stablevoy.js","sourceRoot":"","sources":["../src/Stablevoy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAc,MAAM,iBAAiB,CAAC;AAExD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAiBvC,0GAA0G;AAC1G,MAAM,OAAO,SAAS;IAET;IACA;IACA;IAHX,YACW,QAAkB,EAClB,MAAc,EACd,QAAkB;QAFlB,aAAQ,GAAR,QAAQ,CAAU;QAClB,WAAM,GAAN,MAAM,CAAQ;QACd,aAAQ,GAAR,QAAQ,CAAU;IAC1B,CAAC;IAEJ,MAAM,CAAC,MAAM,CAAC,OAAyB;QACrC,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,CAAC;QAClD,IAAI,OAAO,OAAO,KAAK,UAAU;YAAE,MAAM,IAAI,kBAAkB,CAAC,4EAA4E,CAAC,CAAC;QAC9I,qFAAqF;QACrF,MAAM,OAAO,GAAG,OAAO,SAAS,KAAK,WAAW,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC;QAC3F,OAAO,SAAS,CAAC,aAAa,CAC5B,IAAI,cAAc,CAAC;YACjB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,2BAA2B;YACvD,SAAS,EAAE,kBAAkB,OAAO,IAAI,OAAO,GAAG,OAAO,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,eAAe,EAAE,EAAE;YAC9H,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,IAAI,WAAW,EAAE;YAC7C,KAAK,EAAE,OAAO;YACd,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,SAAS;YACjC,MAAM,EAAE,IAAI,YAAY,EAAE;YAC1B,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,EAAE;SAC7C,CAAC,CACH,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,aAAa,CAAC,SAAoB;QACvC,OAAO,IAAI,SAAS,CAAC,IAAI,QAAQ,CAAC,SAAS,CAAC,EAAE,IAAI,MAAM,CAAC,SAAS,CAAC,EAAE,IAAI,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;IAChG,CAAC;CACF"}
1
+ {"version":3,"file":"Stablevoy.js","sourceRoot":"","sources":["../src/Stablevoy.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAEtE,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAO/C,0GAA0G;AAC1G,MAAM,OAAO,SAAS;IAET;IACA;IACA;IAHX,YACW,QAAkB,EAClB,MAAc,EACd,QAAkB;QAFlB,aAAQ,GAAR,QAAQ,CAAU;QAClB,WAAM,GAAN,MAAM,CAAQ;QACd,aAAQ,GAAR,QAAQ,CAAU;IAC1B,CAAC;IAEJ,MAAM,CAAC,MAAM,CAAC,OAAyB;QACrC,OAAO,SAAS,CAAC,aAAa,CAAC,oBAAoB,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAChF,CAAC;IAED,MAAM,CAAC,aAAa,CAAC,SAAoB;QACvC,OAAO,IAAI,SAAS,CAAC,IAAI,QAAQ,CAAC,SAAS,CAAC,EAAE,IAAI,MAAM,CAAC,SAAS,CAAC,EAAE,IAAI,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;IAChG,CAAC;CACF"}
@@ -0,0 +1,25 @@
1
+ import type { ConnectionOptions } from './ConnectionOptions.js';
2
+ import type { Transport } from './http/Transport.js';
3
+ import { type ConnectedStore } from './model/ConnectedStore.js';
4
+ /** A connect code to redeem: the code from the callback, the PKCE verifier kept for it, and the shop's own URL. */
5
+ export interface ExchangeInput {
6
+ readonly code: string;
7
+ readonly codeVerifier: string;
8
+ /** The same URL the shop sent when the connection was started. */
9
+ readonly site: string;
10
+ }
11
+ /**
12
+ * One-click connect: the shop sends the merchant to the Stablevoy dashboard with a PKCE challenge, gets a code back on its
13
+ * callback and redeems it here for its API key and webhook secret. Needs no API key, since the shop has none yet.
14
+ */
15
+ export declare class StablevoyConnect {
16
+ private readonly transport;
17
+ constructor(transport: Transport);
18
+ static create(options?: ConnectionOptions): StablevoyConnect;
19
+ /**
20
+ * Redeems the code. It works once, so this call is never retried: after a lost answer the merchant clicks Connect again.
21
+ * A refusal (invalid_connect_code, store_linked_to_other_site, store_connected_other_platform) is an ApiError with that code.
22
+ */
23
+ exchange(input: ExchangeInput): Promise<ConnectedStore>;
24
+ }
25
+ //# sourceMappingURL=StablevoyConnect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StablevoyConnect.d.ts","sourceRoot":"","sources":["../src/StablevoyConnect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAEhE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAuB,KAAK,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAGrF,mHAAmH;AACnH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,kEAAkE;IAClE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED;;;GAGG;AACH,qBAAa,gBAAgB;IACf,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAAT,SAAS,EAAE,SAAS;IAEjD,MAAM,CAAC,MAAM,CAAC,OAAO,GAAE,iBAAsB,GAAG,gBAAgB;IAIhE;;;OAGG;IACG,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC;CAI9D"}
@@ -0,0 +1,25 @@
1
+ import { createFetchTransport } from './http/createFetchTransport.js';
2
+ import { parseConnectedStore } from './model/ConnectedStore.js';
3
+ import { Fields } from './model/Fields.js';
4
+ /**
5
+ * One-click connect: the shop sends the merchant to the Stablevoy dashboard with a PKCE challenge, gets a code back on its
6
+ * callback and redeems it here for its API key and webhook secret. Needs no API key, since the shop has none yet.
7
+ */
8
+ export class StablevoyConnect {
9
+ transport;
10
+ constructor(transport) {
11
+ this.transport = transport;
12
+ }
13
+ static create(options = {}) {
14
+ return new StablevoyConnect(createFetchTransport(null, options));
15
+ }
16
+ /**
17
+ * Redeems the code. It works once, so this call is never retried: after a lost answer the merchant clicks Connect again.
18
+ * A refusal (invalid_connect_code, store_linked_to_other_site, store_connected_other_platform) is an ApiError with that code.
19
+ */
20
+ async exchange(input) {
21
+ const body = { code: input.code, codeVerifier: input.codeVerifier, site: input.site };
22
+ return parseConnectedStore(Fields.of(await this.transport.post('/v1/connect/exchange', body), 'connected'));
23
+ }
24
+ }
25
+ //# sourceMappingURL=StablevoyConnect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StablevoyConnect.js","sourceRoot":"","sources":["../src/StablevoyConnect.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAEtE,OAAO,EAAE,mBAAmB,EAAuB,MAAM,2BAA2B,CAAC;AACrF,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAU3C;;;GAGG;AACH,MAAM,OAAO,gBAAgB;IACE;IAA7B,YAA6B,SAAoB;QAApB,cAAS,GAAT,SAAS,CAAW;IAAG,CAAC;IAErD,MAAM,CAAC,MAAM,CAAC,UAA6B,EAAE;QAC3C,OAAO,IAAI,gBAAgB,CAAC,oBAAoB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IACnE,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,QAAQ,CAAC,KAAoB;QACjC,MAAM,IAAI,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;QACtF,OAAO,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,sBAAsB,EAAE,IAAI,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC;IAC9G,CAAC;CACF"}
@@ -10,6 +10,7 @@ export interface ApiErrorDetails {
10
10
  readonly type: string | null;
11
11
  readonly issues: readonly ProblemIssue[];
12
12
  readonly retryAfterSeconds: number | null;
13
+ readonly limitUsdCents: number | null;
13
14
  }
14
15
  /**
15
16
  * The API answered with an error: an RFC 7807 problem document with a stable code, a readable detail and a link to the
@@ -18,6 +19,11 @@ export interface ApiErrorDetails {
18
19
  export declare class ApiError extends StablevoyError {
19
20
  /** No enabled network of the store has a payout wallet; canAcceptPayments(store) tells it in advance. */
20
21
  static readonly PAYOUT_ADDRESS_NOT_SET = "payout_address_not_set";
22
+ /**
23
+ * The EVM payout wallet is not confirmed in the dashboard (or changed since) and the store has no other network to offer;
24
+ * evmPayoutNeedsReview(store) and canAcceptPayments(store) tell it in advance.
25
+ */
26
+ static readonly PAYOUT_ADDRESS_UNACKNOWLEDGED = "payout_address_unacknowledged";
21
27
  readonly status: number;
22
28
  readonly code: string;
23
29
  readonly detail: string;
@@ -26,6 +32,8 @@ export declare class ApiError extends StablevoyError {
26
32
  readonly issues: readonly ProblemIssue[];
27
33
  /** From the Retry-After header of a 429 or 503, else null. */
28
34
  readonly retryAfterSeconds: number | null;
35
+ /** For an amount refused by a limit (amount_below_minimum, amount_above_store_limit, ...): that limit in US cents. */
36
+ readonly limitUsdCents: number | null;
29
37
  constructor(details: ApiErrorDetails);
30
38
  }
31
39
  //# sourceMappingURL=ApiError.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ApiError.d.ts","sourceRoot":"","sources":["../../src/errors/ApiError.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE,CAAC;IACzC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3C;AAED;;;GAGG;AACH,qBAAa,QAAS,SAAQ,cAAc;IAC1C,yGAAyG;IACzG,MAAM,CAAC,QAAQ,CAAC,sBAAsB,4BAA4B;IAElE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,2CAA2C;IAC3C,QAAQ,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE,CAAC;IACzC,8DAA8D;IAC9D,QAAQ,CAAC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;gBAE9B,OAAO,EAAE,eAAe;CASrC"}
1
+ {"version":3,"file":"ApiError.d.ts","sourceRoot":"","sources":["../../src/errors/ApiError.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE,CAAC;IACzC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1C,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CACvC;AAED;;;GAGG;AACH,qBAAa,QAAS,SAAQ,cAAc;IAC1C,yGAAyG;IACzG,MAAM,CAAC,QAAQ,CAAC,sBAAsB,4BAA4B;IAClE;;;OAGG;IACH,MAAM,CAAC,QAAQ,CAAC,6BAA6B,mCAAmC;IAEhF,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,2CAA2C;IAC3C,QAAQ,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE,CAAC;IACzC,8DAA8D;IAC9D,QAAQ,CAAC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1C,sHAAsH;IACtH,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;gBAE1B,OAAO,EAAE,eAAe;CAUrC"}
@@ -6,6 +6,11 @@ import { StablevoyError } from './StablevoyError.js';
6
6
  export class ApiError extends StablevoyError {
7
7
  /** No enabled network of the store has a payout wallet; canAcceptPayments(store) tells it in advance. */
8
8
  static PAYOUT_ADDRESS_NOT_SET = 'payout_address_not_set';
9
+ /**
10
+ * The EVM payout wallet is not confirmed in the dashboard (or changed since) and the store has no other network to offer;
11
+ * evmPayoutNeedsReview(store) and canAcceptPayments(store) tell it in advance.
12
+ */
13
+ static PAYOUT_ADDRESS_UNACKNOWLEDGED = 'payout_address_unacknowledged';
9
14
  status;
10
15
  code;
11
16
  detail;
@@ -14,6 +19,8 @@ export class ApiError extends StablevoyError {
14
19
  issues;
15
20
  /** From the Retry-After header of a 429 or 503, else null. */
16
21
  retryAfterSeconds;
22
+ /** For an amount refused by a limit (amount_below_minimum, amount_above_store_limit, ...): that limit in US cents. */
23
+ limitUsdCents;
17
24
  constructor(details) {
18
25
  super(`${details.detail} (HTTP ${details.status}, ${details.code})`);
19
26
  this.status = details.status;
@@ -22,6 +29,7 @@ export class ApiError extends StablevoyError {
22
29
  this.type = details.type;
23
30
  this.issues = details.issues;
24
31
  this.retryAfterSeconds = details.retryAfterSeconds;
32
+ this.limitUsdCents = details.limitUsdCents;
25
33
  }
26
34
  }
27
35
  //# sourceMappingURL=ApiError.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ApiError.js","sourceRoot":"","sources":["../../src/errors/ApiError.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAgBrD;;;GAGG;AACH,MAAM,OAAO,QAAS,SAAQ,cAAc;IAC1C,yGAAyG;IACzG,MAAM,CAAU,sBAAsB,GAAG,wBAAwB,CAAC;IAEzD,MAAM,CAAS;IACf,IAAI,CAAS;IACb,MAAM,CAAS;IACf,IAAI,CAAgB;IAC7B,2CAA2C;IAClC,MAAM,CAA0B;IACzC,8DAA8D;IACrD,iBAAiB,CAAgB;IAE1C,YAAY,OAAwB;QAClC,KAAK,CAAC,GAAG,OAAO,CAAC,MAAM,UAAU,OAAO,CAAC,MAAM,KAAK,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC;QACrE,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IACrD,CAAC"}
1
+ {"version":3,"file":"ApiError.js","sourceRoot":"","sources":["../../src/errors/ApiError.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAiBrD;;;GAGG;AACH,MAAM,OAAO,QAAS,SAAQ,cAAc;IAC1C,yGAAyG;IACzG,MAAM,CAAU,sBAAsB,GAAG,wBAAwB,CAAC;IAClE;;;OAGG;IACH,MAAM,CAAU,6BAA6B,GAAG,+BAA+B,CAAC;IAEvE,MAAM,CAAS;IACf,IAAI,CAAS;IACb,MAAM,CAAS;IACf,IAAI,CAAgB;IAC7B,2CAA2C;IAClC,MAAM,CAA0B;IACzC,8DAA8D;IACrD,iBAAiB,CAAgB;IAC1C,sHAAsH;IAC7G,aAAa,CAAgB;IAEtC,YAAY,OAAwB;QAClC,KAAK,CAAC,GAAG,OAAO,CAAC,MAAM,UAAU,OAAO,CAAC,MAAM,KAAK,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC;QACrE,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC;QACnD,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;IAC7C,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ErrorFactory.d.ts","sourceRoot":"","sources":["../../src/http/ErrorFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAA2C,MAAM,uBAAuB,CAAC;AAS1F,+FAA+F;AAC/F,qBAAa,YAAY;IACvB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,GAAG,IAAI,GAAG,QAAQ;IAmBrF,OAAO,CAAC,MAAM,CAAC,KAAK;IASpB,OAAO,CAAC,MAAM,CAAC,MAAM;CAQtB"}
1
+ {"version":3,"file":"ErrorFactory.d.ts","sourceRoot":"","sources":["../../src/http/ErrorFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAA2C,MAAM,uBAAuB,CAAC;AAS1F,+FAA+F;AAC/F,qBAAa,YAAY;IACvB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,GAAG,IAAI,GAAG,QAAQ;IAoBrF,OAAO,CAAC,MAAM,CAAC,KAAK;IASpB,OAAO,CAAC,MAAM,CAAC,MAAM;CAQtB"}
@@ -17,6 +17,7 @@ export class ErrorFactory {
17
17
  type: stringOr(problem['type'], null),
18
18
  issues: ErrorFactory.issues(problem['issues']),
19
19
  retryAfterSeconds,
20
+ limitUsdCents: Number.isSafeInteger(problem['limitUsdCents']) ? problem['limitUsdCents'] : null,
20
21
  };
21
22
  if (status === 401)
22
23
  return new AuthenticationError(details);
@@ -1 +1 @@
1
- {"version":3,"file":"ErrorFactory.js","sourceRoot":"","sources":["../../src/http/ErrorFactory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ErrorFactory.js","sourceRoot":"","sources":["../../src/http/ErrorFactory.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,8 @@ import type { RetryPolicy } from './RetryPolicy.js';
3
3
  import type { Sleep } from './Sleep.js';
4
4
  import type { Query, Transport } from './Transport.js';
5
5
  export interface FetchTransportOptions {
6
- readonly apiKey: string;
6
+ /** null only for the one call made before a shop has a key, the connect exchange: then no Authorization is sent. */
7
+ readonly apiKey: string | null;
7
8
  readonly baseUrl: string;
8
9
  readonly userAgent: string;
9
10
  readonly retries: RetryPolicy;
@@ -15,20 +16,26 @@ export interface FetchTransportOptions {
15
16
  }
16
17
  /**
17
18
  * The API over fetch: Bearer API key, JSON in and out, errors as exceptions, and retries only where a repeat cannot do
18
- * harm (reads, and creates that carry an Idempotency-Key).
19
+ * harm (reads, deletes, and creates that carry an Idempotency-Key).
19
20
  */
20
21
  export declare class FetchTransport implements Transport {
21
22
  private readonly options;
22
23
  private readonly baseUrl;
23
24
  constructor(options: FetchTransportOptions);
24
25
  get(path: string, query?: Query): Promise<unknown>;
26
+ delete(path: string): Promise<void>;
25
27
  post(path: string, body: unknown, idempotencyKey?: string): Promise<unknown>;
28
+ /** The body of the first successful answer, or the error of the last failed attempt. */
26
29
  private send;
27
30
  /**
28
31
  * Only a scheme, a host and an optional port. The API key travels in every request, so plain http is refused except
29
32
  * for a local development server, and so are credentials, paths, queries and fragments in the URL.
30
33
  */
31
34
  private static checkedBaseUrl;
35
+ /**
36
+ * 429 and 503, and the gateway errors nginx and Cloudflare answer while the API restarts (502, 504, 520 to 524). A 500 is
37
+ * a fault of the API, not a moment: repeating it would not help.
38
+ */
32
39
  private static isRetryable;
33
40
  private static decode;
34
41
  private static retryAfter;
@@ -1 +1 @@
1
- {"version":3,"file":"FetchTransport.d.ts","sourceRoot":"","sources":["../../src/http/FetchTransport.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEvD,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,OAAO,KAAK,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,8GAA8G;IAC9G,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC;AAED;;;GAGG;AACH,qBAAa,cAAe,YAAW,SAAS;IAC9C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwB;IAChD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAErB,OAAO,EAAE,qBAAqB;IAO1C,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,GAAE,KAAU,GAAG,OAAO,CAAC,OAAO,CAAC;IAKtD,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;YAM9D,IAAI;IA4BlB;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,cAAc;IAa7B,OAAO,CAAC,MAAM,CAAC,WAAW;IAI1B,OAAO,CAAC,MAAM,CAAC,MAAM;IAWrB,OAAO,CAAC,MAAM,CAAC,UAAU;CAI1B"}
1
+ {"version":3,"file":"FetchTransport.d.ts","sourceRoot":"","sources":["../../src/http/FetchTransport.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEvD,MAAM,WAAW,qBAAqB;IACpC,oHAAoH;IACpH,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,OAAO,KAAK,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,8GAA8G;IAC9G,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC;AAED;;;GAGG;AACH,qBAAa,cAAe,YAAW,SAAS;IAC9C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwB;IAChD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAErB,OAAO,EAAE,qBAAqB;IAO1C,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,GAAE,KAAU,GAAG,OAAO,CAAC,OAAO,CAAC;IAIhD,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAM5E,wFAAwF;YAC1E,IAAI;IA0BlB;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,cAAc;IAa7B;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,WAAW;IAI1B,OAAO,CAAC,MAAM,CAAC,MAAM;IAWrB,OAAO,CAAC,MAAM,CAAC,UAAU;CAI1B"}
@@ -3,13 +3,13 @@ import { TransportError } from '../errors/TransportError.js';
3
3
  import { UnexpectedResponseError } from '../errors/UnexpectedResponseError.js';
4
4
  /**
5
5
  * The API over fetch: Bearer API key, JSON in and out, errors as exceptions, and retries only where a repeat cannot do
6
- * harm (reads, and creates that carry an Idempotency-Key).
6
+ * harm (reads, deletes, and creates that carry an Idempotency-Key).
7
7
  */
8
8
  export class FetchTransport {
9
9
  options;
10
10
  baseUrl;
11
11
  constructor(options) {
12
- if (options.apiKey.trim() === '')
12
+ if (options.apiKey !== null && options.apiKey.trim() === '')
13
13
  throw new ConfigurationError('The API key is empty. Create one in the Stablevoy dashboard.');
14
14
  if (!(options.timeoutSeconds > 0 && options.timeoutSeconds <= 600))
15
15
  throw new ConfigurationError(`timeoutSeconds must be more than 0 and at most 600; got ${String(options.timeoutSeconds)}`);
@@ -18,21 +18,24 @@ export class FetchTransport {
18
18
  }
19
19
  get(path, query = {}) {
20
20
  const search = new URLSearchParams(Object.entries(query).map(([k, v]) => [k, String(v)])).toString();
21
- return this.send(`${this.baseUrl}${path}${search === '' ? '' : `?${search}`}`, { method: 'GET' }, true);
21
+ return this.send(`${this.baseUrl}${path}${search === '' ? '' : `?${search}`}`, { method: 'GET' }, true).then((text) => FetchTransport.decode(text));
22
+ }
23
+ async delete(path) {
24
+ await this.send(`${this.baseUrl}${path}`, { method: 'DELETE' }, true);
22
25
  }
23
26
  post(path, body, idempotencyKey) {
24
27
  const headers = { 'Content-Type': 'application/json' };
25
28
  if (idempotencyKey !== undefined)
26
29
  headers['Idempotency-Key'] = idempotencyKey;
27
- return this.send(`${this.baseUrl}${path}`, { method: 'POST', headers, body: JSON.stringify(body) }, idempotencyKey !== undefined);
30
+ return this.send(`${this.baseUrl}${path}`, { method: 'POST', headers, body: JSON.stringify(body) }, idempotencyKey !== undefined).then((text) => FetchTransport.decode(text));
28
31
  }
32
+ /** The body of the first successful answer, or the error of the last failed attempt. */
29
33
  async send(url, init, retryable) {
30
- const request = {
31
- ...init,
32
- // The API never redirects; following one would carry the key wherever it points.
33
- redirect: 'error',
34
- headers: { ...init.headers, Authorization: `Bearer ${this.options.apiKey}`, Accept: 'application/json', 'User-Agent': this.options.userAgent },
35
- };
34
+ const headers = { ...init.headers, Accept: 'application/json', 'User-Agent': this.options.userAgent };
35
+ if (this.options.apiKey !== null)
36
+ headers['Authorization'] = `Bearer ${this.options.apiKey}`;
37
+ // The API never redirects; following one would carry the key wherever it points.
38
+ const request = { ...init, redirect: 'error', headers };
36
39
  for (let attempt = 1;; attempt++) {
37
40
  let response;
38
41
  let text;
@@ -49,7 +52,7 @@ export class FetchTransport {
49
52
  continue;
50
53
  }
51
54
  if (response.ok)
52
- return FetchTransport.decode(text);
55
+ return text;
53
56
  const apiError = this.options.errors.fromProblem(response.status, text, FetchTransport.retryAfter(response));
54
57
  const wait = retryable && FetchTransport.isRetryable(apiError) ? this.options.retries.waitBefore(attempt, apiError.retryAfterSeconds) : null;
55
58
  if (wait === null)
@@ -75,8 +78,12 @@ export class FetchTransport {
75
78
  return refuse();
76
79
  return url.origin;
77
80
  }
81
+ /**
82
+ * 429 and 503, and the gateway errors nginx and Cloudflare answer while the API restarts (502, 504, 520 to 524). A 500 is
83
+ * a fault of the API, not a moment: repeating it would not help.
84
+ */
78
85
  static isRetryable(error) {
79
- return error.status === 429 || error.status === 503;
86
+ return [429, 502, 503, 504, 520, 521, 522, 523, 524].includes(error.status);
80
87
  }
81
88
  static decode(text) {
82
89
  let value;
@@ -1 +1 @@
1
- {"version":3,"file":"FetchTransport.js","sourceRoot":"","sources":["../../src/http/FetchTransport.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FetchTransport.js","sourceRoot":"","sources":["../../src/http/FetchTransport.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  /**
2
- * When to retry: on 429, 503 and a failed connection, at most maxRetries times, waiting what Retry-After asks (or 1, 2,
3
- * 4 seconds without it). A wait longer than maxWaitSeconds is not slept through: the error goes to the caller with
4
- * retryAfterSeconds, so a request never hangs for minutes during maintenance.
2
+ * When to retry: on 429, 503, the gateway errors 502, 504 and 520 to 524, and a failed connection, at most maxRetries
3
+ * times, waiting what Retry-After asks (or 1, 2, 4 seconds without it). A wait longer than maxWaitSeconds is not slept
4
+ * through: the error goes to the caller with retryAfterSeconds, so a request never hangs for minutes during maintenance.
5
5
  */
6
6
  export declare class RetryPolicy {
7
7
  readonly maxRetries: number;
@@ -1,7 +1,7 @@
1
1
  /**
2
- * When to retry: on 429, 503 and a failed connection, at most maxRetries times, waiting what Retry-After asks (or 1, 2,
3
- * 4 seconds without it). A wait longer than maxWaitSeconds is not slept through: the error goes to the caller with
4
- * retryAfterSeconds, so a request never hangs for minutes during maintenance.
2
+ * When to retry: on 429, 503, the gateway errors 502, 504 and 520 to 524, and a failed connection, at most maxRetries
3
+ * times, waiting what Retry-After asks (or 1, 2, 4 seconds without it). A wait longer than maxWaitSeconds is not slept
4
+ * through: the error goes to the caller with retryAfterSeconds, so a request never hangs for minutes during maintenance.
5
5
  */
6
6
  export class RetryPolicy {
7
7
  maxRetries;
@@ -3,5 +3,7 @@ export type Query = Readonly<Record<string, string | number>>;
3
3
  export interface Transport {
4
4
  get(path: string, query?: Query): Promise<unknown>;
5
5
  post(path: string, body: unknown, idempotencyKey?: string): Promise<unknown>;
6
+ /** A call that answers 204 without a body. Deleting twice does no harm, so it is retried like a read. */
7
+ delete(path: string): Promise<void>;
6
8
  }
7
9
  //# sourceMappingURL=Transport.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Transport.d.ts","sourceRoot":"","sources":["../../src/http/Transport.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC;AAE9D,yIAAyI;AACzI,MAAM,WAAW,SAAS;IACxB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACnD,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC9E"}
1
+ {"version":3,"file":"Transport.d.ts","sourceRoot":"","sources":["../../src/http/Transport.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC;AAE9D,yIAAyI;AACzI,MAAM,WAAW,SAAS;IACxB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACnD,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7E,yGAAyG;IACzG,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACrC"}
@@ -0,0 +1,5 @@
1
+ import type { ConnectionOptions } from '../ConnectionOptions.js';
2
+ import { FetchTransport } from './FetchTransport.js';
3
+ /** The transport Stablevoy and StablevoyConnect talk through, built the same way for both. */
4
+ export declare function createFetchTransport(apiKey: string | null, options: ConnectionOptions): FetchTransport;
5
+ //# sourceMappingURL=createFetchTransport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createFetchTransport.d.ts","sourceRoot":"","sources":["../../src/http/createFetchTransport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAIjE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAIrD,8FAA8F;AAC9F,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,OAAO,EAAE,iBAAiB,GAAG,cAAc,CAetG"}
@@ -0,0 +1,25 @@
1
+ import { ConfigurationError } from '../errors/ConfigurationError.js';
2
+ import { VERSION } from '../version.js';
3
+ import { ErrorFactory } from './ErrorFactory.js';
4
+ import { FetchTransport } from './FetchTransport.js';
5
+ import { RetryPolicy } from './RetryPolicy.js';
6
+ import { realSleep } from './Sleep.js';
7
+ /** The transport Stablevoy and StablevoyConnect talk through, built the same way for both. */
8
+ export function createFetchTransport(apiKey, options) {
9
+ const fetchFn = options.fetch ?? globalThis.fetch;
10
+ if (typeof fetchFn !== 'function')
11
+ throw new ConfigurationError('No fetch is available. Use Node 22 or newer, or pass one as options.fetch.');
12
+ // Node 21+, Bun, Deno and edge runtimes all name themselves here, e.g. "Node.js/26".
13
+ const runtime = typeof navigator === 'undefined' ? 'unknown-runtime' : navigator.userAgent;
14
+ return new FetchTransport({
15
+ apiKey,
16
+ baseUrl: options.baseUrl ?? 'https://api.stablevoy.com',
17
+ userAgent: `stablevoy-node/${VERSION} ${runtime}${options.userAgentSuffix === undefined ? '' : ` ${options.userAgentSuffix}`}`,
18
+ retries: options.retries ?? new RetryPolicy(),
19
+ fetch: fetchFn,
20
+ sleep: options.sleep ?? realSleep,
21
+ errors: new ErrorFactory(),
22
+ timeoutSeconds: options.timeoutSeconds ?? 30,
23
+ });
24
+ }
25
+ //# sourceMappingURL=createFetchTransport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createFetchTransport.js","sourceRoot":"","sources":["../../src/http/createFetchTransport.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,8FAA8F;AAC9F,MAAM,UAAU,oBAAoB,CAAC,MAAqB,EAAE,OAA0B;IACpF,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,CAAC;IAClD,IAAI,OAAO,OAAO,KAAK,UAAU;QAAE,MAAM,IAAI,kBAAkB,CAAC,4EAA4E,CAAC,CAAC;IAC9I,qFAAqF;IACrF,MAAM,OAAO,GAAG,OAAO,SAAS,KAAK,WAAW,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC;IAC3F,OAAO,IAAI,cAAc,CAAC;QACxB,MAAM;QACN,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,2BAA2B;QACvD,SAAS,EAAE,kBAAkB,OAAO,IAAI,OAAO,GAAG,OAAO,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,eAAe,EAAE,EAAE;QAC9H,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,IAAI,WAAW,EAAE;QAC7C,KAAK,EAAE,OAAO;QACd,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,SAAS;QACjC,MAAM,EAAE,IAAI,YAAY,EAAE;QAC1B,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,EAAE;KAC7C,CAAC,CAAC;AACL,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,7 @@
1
1
  export { Stablevoy, type StablevoyOptions } from './Stablevoy.js';
2
+ export { StablevoyConnect, type ExchangeInput } from './StablevoyConnect.js';
3
+ export type { ConnectionOptions } from './ConnectionOptions.js';
4
+ export type { ConnectedStore } from './model/ConnectedStore.js';
2
5
  export { VERSION } from './version.js';
3
6
  export { RetryPolicy } from './http/RetryPolicy.js';
4
7
  export type { Sleep } from './http/Sleep.js';
@@ -10,7 +13,7 @@ export { InvoiceStatus, isPaidStatus } from './model/InvoiceStatus.js';
10
13
  export { InvoiceSourceFilter, InvoiceSourceKind, type InvoiceSource } from './model/InvoiceSource.js';
11
14
  export type { CreateInvoiceInput, CreatedInvoice, DepositAddress, Invoice, InvoicePage, Payment } from './model/Invoice.js';
12
15
  export type { Limits, Network, Pricing, Store, Token } from './model/Platform.js';
13
- export { canAcceptPayments } from './model/Platform.js';
16
+ export { canAcceptPayments, evmPayoutNeedsReview, EVM_PAYOUT_STATUS } from './model/Platform.js';
14
17
  export { WebhookVerifier, type WebhookVerifierOptions } from './webhook/WebhookVerifier.js';
15
18
  export type { WebhookEvent } from './webhook/WebhookEvent.js';
16
19
  export type { Clock } from './time/Clock.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,YAAY,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAC7C,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,KAAK,iBAAiB,EAAE,KAAK,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACrG,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,KAAK,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACtG,YAAY,EAAE,kBAAkB,EAAE,cAAc,EAAE,cAAc,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC5H,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAClF,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,KAAK,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAC5F,YAAY,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,YAAY,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,KAAK,eAAe,EAAE,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzF,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,KAAK,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC7E,YAAY,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,YAAY,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,YAAY,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAC7C,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,KAAK,iBAAiB,EAAE,KAAK,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACrG,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,KAAK,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACtG,YAAY,EAAE,kBAAkB,EAAE,cAAc,EAAE,cAAc,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC5H,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAClF,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACjG,OAAO,EAAE,eAAe,EAAE,KAAK,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAC5F,YAAY,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,YAAY,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,KAAK,eAAe,EAAE,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzF,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC"}
package/dist/index.js CHANGED
@@ -1,4 +1,5 @@
1
1
  export { Stablevoy } from './Stablevoy.js';
2
+ export { StablevoyConnect } from './StablevoyConnect.js';
2
3
  export { VERSION } from './version.js';
3
4
  export { RetryPolicy } from './http/RetryPolicy.js';
4
5
  export { Invoices } from './resources/Invoices.js';
@@ -6,7 +7,7 @@ export { Stores } from './resources/Stores.js';
6
7
  export { Platform } from './resources/Platform.js';
7
8
  export { InvoiceStatus, isPaidStatus } from './model/InvoiceStatus.js';
8
9
  export { InvoiceSourceFilter, InvoiceSourceKind } from './model/InvoiceSource.js';
9
- export { canAcceptPayments } from './model/Platform.js';
10
+ export { canAcceptPayments, evmPayoutNeedsReview, EVM_PAYOUT_STATUS } from './model/Platform.js';
10
11
  export { WebhookVerifier } from './webhook/WebhookVerifier.js';
11
12
  export { StablevoyError } from './errors/StablevoyError.js';
12
13
  export { ApiError } from './errors/ApiError.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAyB,MAAM,gBAAgB,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAGpD,OAAO,EAAE,QAAQ,EAAoD,MAAM,yBAAyB,CAAC;AACrG,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAsB,MAAM,0BAA0B,CAAC;AAGtG,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,eAAe,EAA+B,MAAM,8BAA8B,CAAC;AAG5F,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAA2C,MAAM,sBAAsB,CAAC;AACzF,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAyB,MAAM,gBAAgB,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAsB,MAAM,uBAAuB,CAAC;AAG7E,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAGpD,OAAO,EAAE,QAAQ,EAAoD,MAAM,yBAAyB,CAAC;AACrG,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAsB,MAAM,0BAA0B,CAAC;AAGtG,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACjG,OAAO,EAAE,eAAe,EAA+B,MAAM,8BAA8B,CAAC;AAG5F,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAA2C,MAAM,sBAAsB,CAAC;AACzF,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { Fields } from './Fields.js';
2
+ /** What a redeemed connect code gives the shop: its API key, its webhook signing secret and the store they belong to. */
3
+ export interface ConnectedStore {
4
+ readonly apiKey: string;
5
+ readonly webhookSecret: string;
6
+ readonly storeId: string;
7
+ readonly storeName: string;
8
+ }
9
+ export declare function parseConnectedStore(f: Fields): ConnectedStore;
10
+ //# sourceMappingURL=ConnectedStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConnectedStore.d.ts","sourceRoot":"","sources":["../../src/model/ConnectedStore.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,yHAAyH;AACzH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,MAAM,GAAG,cAAc,CAO7D"}
@@ -0,0 +1,12 @@
1
+ import { UnexpectedResponseError } from '../errors/UnexpectedResponseError.js';
2
+ export function parseConnectedStore(f) {
3
+ const apiKey = f.string('apiKey');
4
+ if (!/^sk_(live|test)_/.test(apiKey))
5
+ throw new UnexpectedResponseError(`${f.pathOf('apiKey')} is not an API key (sk_live_ or sk_test_)`);
6
+ const webhookSecret = f.string('webhookSecret');
7
+ if (!webhookSecret.startsWith('whsec_'))
8
+ throw new UnexpectedResponseError(`${f.pathOf('webhookSecret')} is not a webhook secret (whsec_)`);
9
+ const store = f.object('store');
10
+ return { apiKey, webhookSecret, storeId: store.string('id'), storeName: store.string('name') };
11
+ }
12
+ //# sourceMappingURL=ConnectedStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConnectedStore.js","sourceRoot":"","sources":["../../src/model/ConnectedStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAW/E,MAAM,UAAU,mBAAmB,CAAC,CAAS;IAC3C,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAClC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC;QAAE,MAAM,IAAI,uBAAuB,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,2CAA2C,CAAC,CAAC;IAC1I,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;IAChD,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,MAAM,IAAI,uBAAuB,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,mCAAmC,CAAC,CAAC;IAC5I,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAChC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;AACjG,CAAC"}
@@ -19,6 +19,8 @@ export declare class Fields {
19
19
  /** Each item of a list of objects, parsed with `parse`. */
20
20
  objects<T>(key: string, parse: (item: Fields) => T): T[];
21
21
  object(key: string): Fields;
22
+ /** Where a field of this object is, for error messages. */
23
+ pathOf(key: string): string;
22
24
  /** The object as decoded, for data this library does not model. */
23
25
  raw(): Readonly<Record<string, unknown>>;
24
26
  private value;
@@ -1 +1 @@
1
- {"version":3,"file":"Fields.d.ts","sourceRoot":"","sources":["../../src/model/Fields.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,qBAAa,MAAM;IAEf,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAFvB,OAAO;IAKP,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM;IAK/C,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAM3B,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAM1C,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAMxB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAMvC,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAM1B,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAIvB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAKtC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE;IAO9B,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,EAAE;IAM5B,2DAA2D;IAC3D,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,CAAC,GAAG,CAAC,EAAE;IAIxD,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAI3B,mEAAmE;IACnE,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAIxC,OAAO,CAAC,KAAK;IAKb,OAAO,CAAC,SAAS;IAMjB,OAAO,CAAC,KAAK;CAGd"}
1
+ {"version":3,"file":"Fields.d.ts","sourceRoot":"","sources":["../../src/model/Fields.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,qBAAa,MAAM;IAEf,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAFvB,OAAO;IAKP,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM;IAK/C,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAM3B,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAM1C,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAMxB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAMvC,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAM1B,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAIvB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAKtC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE;IAO9B,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,EAAE;IAM5B,2DAA2D;IAC3D,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,CAAC,GAAG,CAAC,EAAE;IAIxD,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAI3B,2DAA2D;IAC3D,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAG3B,mEAAmE;IACnE,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAIxC,OAAO,CAAC,KAAK;IAKb,OAAO,CAAC,SAAS;IAMjB,OAAO,CAAC,KAAK;CAGd"}
@@ -72,6 +72,10 @@ export class Fields {
72
72
  object(key) {
73
73
  return Fields.of(this.value(key), `${this.path}.${key}`);
74
74
  }
75
+ /** Where a field of this object is, for error messages. */
76
+ pathOf(key) {
77
+ return `${this.path}.${key}`;
78
+ }
75
79
  /** The object as decoded, for data this library does not model. */
76
80
  raw() {
77
81
  return this.data;
@@ -1 +1 @@
1
- {"version":3,"file":"Fields.js","sourceRoot":"","sources":["../../src/model/Fields.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Fields.js","sourceRoot":"","sources":["../../src/model/Fields.ts"],"names":[],"mappings":"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"}
@@ -37,7 +37,7 @@ export interface Invoice {
37
37
  readonly createdAt: Date;
38
38
  readonly depositAddresses: readonly DepositAddress[];
39
39
  readonly payments: readonly Payment[];
40
- /** Where the invoice came from; absent only from an API older than 31 October 2026, which did not send it. */
40
+ /** Where the invoice came from; absent only on invoices from an API older than 31 October 2026 and on webhook events recorded before 3 November 2026, which did not carry it. */
41
41
  readonly source?: InvoiceSource;
42
42
  }
43
43
  export declare function parseInvoice(f: Fields): Invoice;
@@ -1 +1 @@
1
- {"version":3,"file":"Invoice.d.ts","sourceRoot":"","sources":["../../src/model/Invoice.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAsB,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAE5E,6GAA6G;AAC7G,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;CACpC;AAED,qHAAqH;AACrH,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,iCAAiC;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC;CAC3B;AAED,0EAA0E;AAC1E,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,iFAAiF;IACjF,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1C,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,IAAI,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;IACzB,QAAQ,CAAC,gBAAgB,EAAE,SAAS,cAAc,EAAE,CAAC;IACrD,QAAQ,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,CAAC;IACtC,8GAA8G;IAC9G,QAAQ,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC;CACjC;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAiC/C;AAED,2HAA2H;AAC3H,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,2DAA2D;IAC3D,QAAQ,CAAC,mBAAmB,EAAE,SAAS,MAAM,EAAE,CAAC;IAChD,6FAA6F;IAC7F,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B;AAED,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,MAAM,GAAG,cAAc,CAE7D;AAED,sGAAsG;AACtG,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,KAAK,EAAE,SAAS,OAAO,EAAE,CAAC;IACnC,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CACpC;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,GAAG,WAAW,CAEvD;AAED,qHAAqH;AACrH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B"}
1
+ {"version":3,"file":"Invoice.d.ts","sourceRoot":"","sources":["../../src/model/Invoice.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,11 @@
1
1
  import type { Fields } from './Fields.js';
2
+ /** Values of Store.evmPayoutStatus. */
3
+ export declare const EVM_PAYOUT_STATUS: {
4
+ readonly PLAIN: "plain";
5
+ readonly ACKNOWLEDGED: "acknowledged";
6
+ readonly UNACKNOWLEDGED: "unacknowledged";
7
+ readonly UNCHECKED: "unchecked";
8
+ };
2
9
  /** The store the API key belongs to. */
3
10
  export interface Store {
4
11
  readonly id: string;
@@ -14,13 +21,31 @@ export interface Store {
14
21
  readonly websiteUrl: string | null;
15
22
  readonly defaultReturnUrl: string | null;
16
23
  readonly createdAt: Date;
24
+ /** The plugin connected to the store in one click ('woocommerce', 'edd', 'whmcs'), or null. */
25
+ readonly connectedPlatform: string | null;
26
+ /**
27
+ * The EVM payout wallet as last read on every EVM network: plain (a regular wallet), acknowledged (a smart contract wallet
28
+ * or EIP-7702 delegation the merchant confirmed), unacknowledged (not confirmed, or changed since: the EVM networks are
29
+ * left out of new invoices until the merchant reviews it in the dashboard), unchecked (not read yet), or null when the
30
+ * account has no EVM payout wallet.
31
+ */
32
+ readonly evmPayoutStatus: string | null;
33
+ /** Enabled EVM networks new invoices leave out because evmPayoutStatus is unacknowledged; empty otherwise. */
34
+ readonly evmNetworksBlocked: readonly string[];
17
35
  }
18
36
  export declare function parseStore(f: Fields): Store;
19
37
  /**
20
- * False when no enabled network has a payout wallet: every invoice would be refused with payout_address_not_set. Check it
21
- * before offering the payment method, and show the merchant networksWithoutPayout when it is not empty.
38
+ * False when no enabled network can be paid: none has a payout wallet (invoices are refused with payout_address_not_set),
39
+ * or the only ones left are EVM networks blocked by an unconfirmed EVM payout wallet (payout_address_unacknowledged). Check
40
+ * it before offering the payment method, and show the merchant networksWithoutPayout and evmNetworksBlocked when they are
41
+ * not empty.
22
42
  */
23
43
  export declare function canAcceptPayments(store: Store): boolean;
44
+ /**
45
+ * True while the EVM payout wallet is not confirmed in the Stablevoy dashboard: show the merchant evmNetworksBlocked and
46
+ * send them to the dashboard. A store.payout_attention webhook tells when this changes.
47
+ */
48
+ export declare function evmPayoutNeedsReview(store: Store): boolean;
24
49
  /** The smallest and largest invoice the platform accepts, in US cents. */
25
50
  export interface Limits {
26
51
  readonly minInvoiceUsdCents: number;
@@ -50,6 +75,12 @@ export interface Network {
50
75
  readonly factoryAddress: string | null;
51
76
  readonly explorerUrl: string | null;
52
77
  readonly tokens: readonly Token[];
78
+ /** The forwarder contract the deposit addresses clone; with factoryAddress it is what a manual recovery needs. */
79
+ readonly forwarderImplementation: string | null;
80
+ /** The explorer page of an address is this followed by the address. */
81
+ readonly explorerAddressUrl: string | null;
82
+ /** A public RPC endpoint of the network. */
83
+ readonly rpcUrl: string | null;
53
84
  }
54
85
  export declare function parseNetwork(f: Fields): Network;
55
86
  //# sourceMappingURL=Platform.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Platform.d.ts","sourceRoot":"","sources":["../../src/model/Platform.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,wCAAwC;AACxC,MAAM,WAAW,KAAK;IACpB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,yCAAyC;IACzC,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5C,yHAAyH;IACzH,QAAQ,CAAC,qBAAqB,EAAE,SAAS,MAAM,EAAE,CAAC;IAClD,QAAQ,CAAC,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3C,QAAQ,CAAC,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3C,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;CAC1B;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,KAAK,CAc3C;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAEvD;AAED,0EAA0E;AAC1E,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;CACrC;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE7C;AAED,+HAA+H;AAC/H,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAE/C;AAED,MAAM,WAAW,KAAK;IACpB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,+IAA+I;AAC/I,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,MAAM,EAAE,SAAS,KAAK,EAAE,CAAC;CACnC;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAY/C"}
1
+ {"version":3,"file":"Platform.d.ts","sourceRoot":"","sources":["../../src/model/Platform.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,10 @@
1
+ /** Values of Store.evmPayoutStatus. */
2
+ export const EVM_PAYOUT_STATUS = {
3
+ PLAIN: 'plain',
4
+ ACKNOWLEDGED: 'acknowledged',
5
+ UNACKNOWLEDGED: 'unacknowledged',
6
+ UNCHECKED: 'unchecked',
7
+ };
1
8
  export function parseStore(f) {
2
9
  return {
3
10
  id: f.string('id'),
@@ -11,14 +18,26 @@ export function parseStore(f) {
11
18
  websiteUrl: f.nullableString('websiteUrl'),
12
19
  defaultReturnUrl: f.nullableString('defaultReturnUrl'),
13
20
  createdAt: f.date('createdAt'),
21
+ connectedPlatform: f.nullableString('connectedPlatform'),
22
+ evmPayoutStatus: f.nullableString('evmPayoutStatus'),
23
+ evmNetworksBlocked: f.strings('evmNetworksBlocked'),
14
24
  };
15
25
  }
16
26
  /**
17
- * False when no enabled network has a payout wallet: every invoice would be refused with payout_address_not_set. Check it
18
- * before offering the payment method, and show the merchant networksWithoutPayout when it is not empty.
27
+ * False when no enabled network can be paid: none has a payout wallet (invoices are refused with payout_address_not_set),
28
+ * or the only ones left are EVM networks blocked by an unconfirmed EVM payout wallet (payout_address_unacknowledged). Check
29
+ * it before offering the payment method, and show the merchant networksWithoutPayout and evmNetworksBlocked when they are
30
+ * not empty.
19
31
  */
20
32
  export function canAcceptPayments(store) {
21
- return store.enabledNetworks.some((key) => !store.networksWithoutPayout.includes(key));
33
+ return store.enabledNetworks.some((key) => !store.networksWithoutPayout.includes(key) && !store.evmNetworksBlocked.includes(key));
34
+ }
35
+ /**
36
+ * True while the EVM payout wallet is not confirmed in the Stablevoy dashboard: show the merchant evmNetworksBlocked and
37
+ * send them to the dashboard. A store.payout_attention webhook tells when this changes.
38
+ */
39
+ export function evmPayoutNeedsReview(store) {
40
+ return store.evmPayoutStatus === EVM_PAYOUT_STATUS.UNACKNOWLEDGED;
22
41
  }
23
42
  export function parseLimits(f) {
24
43
  return { minInvoiceUsdCents: f.int('minInvoiceUsdCents'), maxInvoiceUsdCents: f.int('maxInvoiceUsdCents') };
@@ -37,6 +56,9 @@ export function parseNetwork(f) {
37
56
  factoryAddress: f.nullableString('factoryAddress'),
38
57
  explorerUrl: f.nullableString('explorerUrl'),
39
58
  tokens: f.objects('tokens', (t) => ({ symbol: t.string('symbol'), address: t.string('address'), decimals: t.int('decimals') })),
59
+ forwarderImplementation: f.nullableString('forwarderImplementation'),
60
+ explorerAddressUrl: f.nullableString('explorerAddressUrl'),
61
+ rpcUrl: f.nullableString('rpcUrl'),
40
62
  };
41
63
  }
42
64
  //# sourceMappingURL=Platform.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Platform.js","sourceRoot":"","sources":["../../src/model/Platform.ts"],"names":[],"mappings":"AAmBA,MAAM,UAAU,UAAU,CAAC,CAAS;IAClC,OAAO;QACL,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;QAClB,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;QACtB,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;QAC1B,eAAe,EAAE,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC;QAC7C,qBAAqB,EAAE,CAAC,CAAC,OAAO,CAAC,uBAAuB,CAAC;QACzD,kBAAkB,EAAE,CAAC,CAAC,WAAW,CAAC,oBAAoB,CAAC;QACvD,kBAAkB,EAAE,CAAC,CAAC,WAAW,CAAC,oBAAoB,CAAC;QACvD,UAAU,EAAE,CAAC,CAAC,cAAc,CAAC,YAAY,CAAC;QAC1C,UAAU,EAAE,CAAC,CAAC,cAAc,CAAC,YAAY,CAAC;QAC1C,gBAAgB,EAAE,CAAC,CAAC,cAAc,CAAC,kBAAkB,CAAC;QACtD,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC;KAC/B,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAY;IAC5C,OAAO,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,qBAAqB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;AACzF,CAAC;AAQD,MAAM,UAAU,WAAW,CAAC,CAAS;IACnC,OAAO,EAAE,kBAAkB,EAAE,CAAC,CAAC,GAAG,CAAC,oBAAoB,CAAC,EAAE,kBAAkB,EAAE,CAAC,CAAC,GAAG,CAAC,oBAAoB,CAAC,EAAE,CAAC;AAC9G,CAAC;AASD,MAAM,UAAU,YAAY,CAAC,CAAS;IACpC,OAAO,EAAE,kBAAkB,EAAE,CAAC,CAAC,GAAG,CAAC,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;AACrH,CAAC;AAqBD,MAAM,UAAU,YAAY,CAAC,CAAS;IACpC,OAAO;QACL,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;QACpB,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC;QACpC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;QAC1B,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC;QACzB,aAAa,EAAE,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC;QACrC,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC;QAClC,cAAc,EAAE,CAAC,CAAC,cAAc,CAAC,gBAAgB,CAAC;QAClD,WAAW,EAAE,CAAC,CAAC,cAAc,CAAC,aAAa,CAAC;QAC5C,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;KAChI,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"Platform.js","sourceRoot":"","sources":["../../src/model/Platform.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Invoices.d.ts","sourceRoot":"","sources":["../../src/resources/Invoices.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAS,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAE7D,OAAO,EAAuD,KAAK,cAAc,EAAE,KAAK,kBAAkB,EAAE,KAAK,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAKxK,sHAAsH;AACtH,MAAM,WAAW,iBAAiB;IAChC,wDAAwD;IACxD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,+FAA+F;IAC/F,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,kBAAkB;IAClB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,kBAAkB;IAClB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,mEAAmE;IACnE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,mBAAoB,SAAQ,iBAAiB;IAC5D,+BAA+B;IAC/B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,oDAAoD;AACpD,qBAAa,QAAQ;IACP,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAAT,SAAS,EAAE,SAAS;IAEjD;;;OAGG;IACG,MAAM,CAAC,KAAK,EAAE,kBAAkB,EAAE,OAAO,GAAE;QAAE,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC,cAAc,CAAC;IAU9G,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAM9C,0CAA0C;IACpC,IAAI,CAAC,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC,WAAW,CAAC;IAkBnE,qHAAqH;IAC9G,GAAG,CAAC,OAAO,GAAE,iBAAiB,GAAG;QAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,cAAc,CAAC,OAAO,CAAC;CAStG"}
1
+ {"version":3,"file":"Invoices.d.ts","sourceRoot":"","sources":["../../src/resources/Invoices.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAS,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAE7D,OAAO,EAAuD,KAAK,cAAc,EAAE,KAAK,kBAAkB,EAAE,KAAK,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAMxK,sHAAsH;AACtH,MAAM,WAAW,iBAAiB;IAChC,wDAAwD;IACxD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,+FAA+F;IAC/F,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,kBAAkB;IAClB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,kBAAkB;IAClB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,mEAAmE;IACnE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,mBAAoB,SAAQ,iBAAiB;IAC5D,+BAA+B;IAC/B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,oDAAoD;AACpD,qBAAa,QAAQ;IACP,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAAT,SAAS,EAAE,SAAS;IAEjD;;;OAGG;IACG,MAAM,CAAC,KAAK,EAAE,kBAAkB,EAAE,OAAO,GAAE;QAAE,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC,cAAc,CAAC;IAc9G,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAM9C,0CAA0C;IACpC,IAAI,CAAC,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC,WAAW,CAAC;IAkBnE,qHAAqH;IAC9G,GAAG,CAAC,OAAO,GAAE,iBAAiB,GAAG;QAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,cAAc,CAAC,OAAO,CAAC;CAStG"}
@@ -2,6 +2,7 @@ import { Fields } from '../model/Fields.js';
2
2
  import { parseCreatedInvoice, parseInvoice, parseInvoicePage } from '../model/Invoice.js';
3
3
  const UUID = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
4
4
  const DAY = /^\d{4}-\d{2}-\d{2}$/;
5
+ const IDEMPOTENCY_KEY = /^[\x21-\x7e]{1,255}$/;
5
6
  /** Invoices of the store the API key belongs to. */
6
7
  export class Invoices {
7
8
  transport;
@@ -16,6 +17,10 @@ export class Invoices {
16
17
  if (!Number.isSafeInteger(input.amountUsdCents) || input.amountUsdCents < 1) {
17
18
  throw new RangeError('amountUsdCents must be a positive whole number of US cents, for example 1999 for $19.99');
18
19
  }
20
+ // What the API accepts; anything else would be refused there, or make fetch throw on the header.
21
+ if (options.idempotencyKey !== undefined && !IDEMPOTENCY_KEY.test(options.idempotencyKey)) {
22
+ throw new RangeError('The idempotency key must be 1 to 255 printable ASCII characters without spaces, such as your order id');
23
+ }
19
24
  const body = { amountUsdCents: input.amountUsdCents };
20
25
  if (input.externalReference !== undefined)
21
26
  body['externalReference'] = input.externalReference;
@@ -1 +1 @@
1
- {"version":3,"file":"Invoices.js","sourceRoot":"","sources":["../../src/resources/Invoices.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Invoices.js","sourceRoot":"","sources":["../../src/resources/Invoices.ts"],"names":[],"mappings":"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"}
@@ -5,5 +5,10 @@ export declare class Stores {
5
5
  constructor(transport: Transport);
6
6
  /** The store the API key belongs to: a cheap way to check that the key works. */
7
7
  current(): Promise<Store>;
8
+ /**
9
+ * Revokes the API key of this client; it stops working at once (use it when the shop disconnects). A key that is already
10
+ * revoked answers with AuthenticationError, which for a disconnect means the same.
11
+ */
12
+ revokeCurrentKey(): Promise<void>;
8
13
  }
9
14
  //# sourceMappingURL=Stores.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Stores.d.ts","sourceRoot":"","sources":["../../src/resources/Stores.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,EAAc,KAAK,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAE9D,qBAAa,MAAM;IACL,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAAT,SAAS,EAAE,SAAS;IAEjD,iFAAiF;IAC3E,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC;CAGhC"}
1
+ {"version":3,"file":"Stores.d.ts","sourceRoot":"","sources":["../../src/resources/Stores.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,EAAc,KAAK,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAE9D,qBAAa,MAAM;IACL,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAAT,SAAS,EAAE,SAAS;IAEjD,iFAAiF;IAC3E,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC;IAI/B;;;OAGG;IACG,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;CAGxC"}
@@ -9,5 +9,12 @@ export class Stores {
9
9
  async current() {
10
10
  return parseStore(Fields.of(await this.transport.get('/v1/store'), 'store'));
11
11
  }
12
+ /**
13
+ * Revokes the API key of this client; it stops working at once (use it when the shop disconnects). A key that is already
14
+ * revoked answers with AuthenticationError, which for a disconnect means the same.
15
+ */
16
+ async revokeCurrentKey() {
17
+ await this.transport.delete('/v1/store/api-keys/current');
18
+ }
12
19
  }
13
20
  //# sourceMappingURL=Stores.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Stores.js","sourceRoot":"","sources":["../../src/resources/Stores.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAc,MAAM,sBAAsB,CAAC;AAE9D,MAAM,OAAO,MAAM;IACY;IAA7B,YAA6B,SAAoB;QAApB,cAAS,GAAT,SAAS,CAAW;IAAG,CAAC;IAErD,iFAAiF;IACjF,KAAK,CAAC,OAAO;QACX,OAAO,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;IAC/E,CAAC;CACF"}
1
+ {"version":3,"file":"Stores.js","sourceRoot":"","sources":["../../src/resources/Stores.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAc,MAAM,sBAAsB,CAAC;AAE9D,MAAM,OAAO,MAAM;IACY;IAA7B,YAA6B,SAAoB;QAApB,cAAS,GAAT,SAAS,CAAW;IAAG,CAAC;IAErD,iFAAiF;IACjF,KAAK,CAAC,OAAO;QACX,OAAO,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;IAC/E,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,gBAAgB;QACpB,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAC;IAC5D,CAAC;CACF"}
package/dist/version.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "1.2.0";
1
+ export declare const VERSION = "1.4.0";
2
2
  //# sourceMappingURL=version.d.ts.map
package/dist/version.js CHANGED
@@ -1,2 +1,2 @@
1
- export const VERSION = '1.2.0';
1
+ export const VERSION = '1.4.0';
2
2
  //# sourceMappingURL=version.js.map
@@ -2,7 +2,11 @@ import type { Fields } from '../model/Fields.js';
2
2
  import { type Invoice } from '../model/Invoice.js';
3
3
  /**
4
4
  * A verified webhook. Types: invoice.paid, invoice.overpaid, invoice.underpaid, invoice.expired, invoice.paid_late,
5
- * invoice.on_hold and webhook.test. Deliveries can repeat: use `id` to process each event once.
5
+ * invoice.on_hold, invoice.payment_flagged, store.payout_attention and webhook.test. invoice.payment_flagged: a payment of a
6
+ * settled invoice was flagged by screening; the invoice keeps its status and `data.payment` holds the payment.
7
+ * store.payout_attention: the EVM payout wallet of the account became unconfirmed or is fine again; `invoice` is null and
8
+ * `data.payout` holds status, blockedNetworks and dashboardUrl. Read stores.current() again for the current state.
9
+ * Deliveries can repeat: use `id` to process each event once.
6
10
  */
7
11
  export interface WebhookEvent {
8
12
  readonly id: string;
@@ -1 +1 @@
1
- {"version":3,"file":"WebhookEvent.d.ts","sourceRoot":"","sources":["../../src/webhook/WebhookEvent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAgB,KAAK,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAEjE;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;IACzB,+DAA+D;IAC/D,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACjC,8BAA8B;IAC9B,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CAClD;AAED,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,GAAG,YAAY,CAIzD"}
1
+ {"version":3,"file":"WebhookEvent.d.ts","sourceRoot":"","sources":["../../src/webhook/WebhookEvent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAgB,KAAK,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAEjE;;;;;;;GAOG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;IACzB,+DAA+D;IAC/D,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACjC,8BAA8B;IAC9B,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CAClD;AAED,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,GAAG,YAAY,CAIzD"}
@@ -1 +1 @@
1
- {"version":3,"file":"WebhookEvent.js","sourceRoot":"","sources":["../../src/webhook/WebhookEvent.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAgB,MAAM,qBAAqB,CAAC;AAgBjE,MAAM,UAAU,iBAAiB,CAAC,CAAS;IACzC,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC9B,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC9B,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;AAC5K,CAAC"}
1
+ {"version":3,"file":"WebhookEvent.js","sourceRoot":"","sources":["../../src/webhook/WebhookEvent.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAgB,MAAM,qBAAqB,CAAC;AAoBjE,MAAM,UAAU,iBAAiB,CAAC,CAAS;IACzC,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC9B,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC9B,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;AAC5K,CAAC"}
@@ -17,6 +17,8 @@ export declare class WebhookVerifier {
17
17
  /** `secret` is the webhook signing secret of the store (whsec_...). */
18
18
  constructor(secret: string, options?: WebhookVerifierOptions);
19
19
  verify(rawBody: string | Uint8Array, signatureHeader: string | null | undefined): Promise<WebhookEvent>;
20
+ /** The bytes as sent: a leading byte order mark is kept, so the signed text is exactly what arrived. */
21
+ private static text;
20
22
  private static parse;
21
23
  }
22
24
  //# sourceMappingURL=WebhookVerifier.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"WebhookVerifier.d.ts","sourceRoot":"","sources":["../../src/webhook/WebhookVerifier.ts"],"names":[],"mappings":"AAGA,OAAO,EAAe,KAAK,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAqB,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEzE,MAAM,WAAW,sBAAsB;IACrC,2EAA2E;IAC3E,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC;CACxB;AAYD;;;;GAIG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAqB;IACzC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAE9B,uEAAuE;gBAC3D,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,sBAA2B;IAQ1D,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,EAAE,eAAe,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC;IAoB7G,OAAO,CAAC,MAAM,CAAC,KAAK;CAYrB"}
1
+ {"version":3,"file":"WebhookVerifier.d.ts","sourceRoot":"","sources":["../../src/webhook/WebhookVerifier.ts"],"names":[],"mappings":"AAGA,OAAO,EAAe,KAAK,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAqB,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEzE,MAAM,WAAW,sBAAsB;IACrC,2EAA2E;IAC3E,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC;CACxB;AAYD;;;;GAIG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAqB;IACzC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAE9B,uEAAuE;gBAC3D,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,sBAA2B;IAQ1D,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,EAAE,eAAe,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC;IAoB7G,wGAAwG;IACxG,OAAO,CAAC,MAAM,CAAC,IAAI;IAOnB,OAAO,CAAC,MAAM,CAAC,KAAK;CAYrB"}
@@ -33,7 +33,7 @@ export class WebhookVerifier {
33
33
  this.key = crypto.subtle.importKey('raw', encoder.encode(secret), { name: 'HMAC', hash: 'SHA-256' }, false, ['sign']);
34
34
  }
35
35
  async verify(rawBody, signatureHeader) {
36
- const body = typeof rawBody === 'string' ? rawBody : new TextDecoder('utf-8', { fatal: true }).decode(rawBody);
36
+ const body = typeof rawBody === 'string' ? rawBody : WebhookVerifier.text(rawBody);
37
37
  const { timestamp, signatures } = WebhookVerifier.parse(signatureHeader ?? '');
38
38
  if (Math.abs(this.clock.now() - timestamp) > this.toleranceSeconds)
39
39
  throw new SignatureError('The webhook signature is too old or from the future; check the server clock');
@@ -55,6 +55,15 @@ export class WebhookVerifier {
55
55
  throw new SignatureError(`The webhook is signed but its body is not a Stablevoy event: ${error.message}`, { cause: error });
56
56
  }
57
57
  }
58
+ /** The bytes as sent: a leading byte order mark is kept, so the signed text is exactly what arrived. */
59
+ static text(bytes) {
60
+ try {
61
+ return new TextDecoder('utf-8', { fatal: true, ignoreBOM: true }).decode(bytes);
62
+ }
63
+ catch (error) {
64
+ throw new SignatureError('The webhook body is not UTF-8 text', { cause: error });
65
+ }
66
+ }
58
67
  static parse(header) {
59
68
  if (header.trim() === '')
60
69
  throw new SignatureError('The X-Stablevoy-Signature header is missing');
@@ -1 +1 @@
1
- {"version":3,"file":"WebhookVerifier.js","sourceRoot":"","sources":["../../src/webhook/WebhookVerifier.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"WebhookVerifier.js","sourceRoot":"","sources":["../../src/webhook/WebhookVerifier.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "stablevoy",
3
- "version": "1.2.0",
3
+ "version": "1.4.0",
4
4
  "description": "Node.js and TypeScript client for the Stablevoy API: non-custodial USDT and USDC payments, invoices and signed webhooks.",
5
5
  "keywords": [
6
6
  "stablevoy",