stablevoy 1.7.0 → 1.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.9.0
4
+
5
+ - A store can pay out to its own address instead of the account one (set in the dashboard). `Store.payoutAddresses` are now the addresses this store's new invoices use; `Store.payoutSources` says for each family whether it is the store's own (`store`) or the account's (`account`), values in `PAYOUT_SOURCE`; `Store.accountPayoutAddresses` lists the account addresses. `evmPayoutStatus` and `evmNetworksBlocked` follow the EVM address the store uses.
6
+ - `Store.archivedAt`: when the store was archived, null while it is not.
7
+ - The webhook types `api_key.leaked` and `webhook_secret.leaked` are documented, and `store.payout_attention` carries `data.payout.source`.
8
+ - These need the API with store payout addresses (November 2026); an older answer without the new store fields is refused as an unexpected response.
9
+
10
+ ## 1.8.0
11
+
12
+ - Stablevoy is moving to its own key formats: API keys `svk_live_...` / `svk_test_...` and webhook signing secrets `svwhsec_...`, each ending in a checksum. The SDK accepts them and the older `sk_live_` / `sk_test_` / `whsec_` in connect answers; older keys keep working.
13
+ - `checkApiKey(value)` and `checkWebhookSecret(value)` tell a pasted key apart: `ok`, `mistyped` (a new-format key whose checksum does not match, so a character is wrong or missing) or `not_a_key`.
14
+
3
15
  ## 1.7.0
4
16
 
5
17
  - `invoices.summary({ period })` or `invoices.summary({ createdFrom, createdTo })`: totals of the invoices created in a range of UTC days, with the count per status, the invoiced amount and the money received, also per network and token. Periods are in `SummaryPeriod`; one request covers at most 92 days, and a longer range is refused with `ApiError.INVALID_INVOICE_FILTER`.
package/README.md CHANGED
@@ -117,7 +117,9 @@ if (!canAcceptPayments(store)) {
117
117
  if (store.networksWithoutPayout.length > 0) {
118
118
  // These enabled networks have no payout wallet, so buyers do not see them.
119
119
  }
120
- console.log(store.payoutAddresses); // { evm: '0x...', tron: null }: where payouts go, read only
120
+ console.log(store.payoutAddresses); // { evm: '0x...', tron: null }: where this store's payouts go, read only
121
+ console.log(store.payoutSources); // { evm: 'store', tron: null }: the store's own wallet, or 'account' for the account one
122
+ console.log(store.accountPayoutAddresses); // the account wallets, also when the store has its own
121
123
  if (evmPayoutNeedsReview(store)) {
122
124
  // The EVM payout wallet is not confirmed: store.evmNetworksBlocked are not offered until the merchant reviews it in the dashboard.
123
125
  }
@@ -142,7 +144,7 @@ await stablevoy.stores.revokeCurrentKey();
142
144
 
143
145
  ## Verify webhooks
144
146
 
145
- 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.
147
+ 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 this store uses (its own or the account's) becomes unconfirmed and again when it is fine: it carries no invoice, `event.data.payout` has the new `status`, its `source` (`store` or `account`), the `blockedNetworks` and a `dashboardUrl`; read `stablevoy.stores.current()` again for the current state. Two more carry no invoice either: `api_key.leaked` when GitHub found an API key of the store in public code (the key is already revoked: connect again or create a new key) and `webhook_secret.leaked` for the webhook signing secret (rotate it in the dashboard). 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.
146
148
 
147
149
  Express:
148
150
 
@@ -181,6 +183,18 @@ export async function POST(request: Request) {
181
183
  }
182
184
  ```
183
185
 
186
+ ## Check a pasted key
187
+
188
+ API keys are `svk_live_...` or `svk_test_...` and webhook signing secrets `svwhsec_...`; both end in a checksum. Keys made before this format (`sk_live_`, `sk_test_`, `whsec_`) keep working.
189
+
190
+ ```ts
191
+ import { checkApiKey } from 'stablevoy';
192
+
193
+ if (checkApiKey(input) === 'mistyped') console.log('A character is wrong or missing: copy the key again from the dashboard.');
194
+ ```
195
+
196
+ `checkApiKey` and `checkWebhookSecret` answer `ok`, `mistyped` or `not_a_key`, without any request.
197
+
184
198
  ## Errors and retries
185
199
 
186
200
  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.
@@ -193,6 +207,10 @@ import { RetryPolicy, Stablevoy } from 'stablevoy';
193
207
  const stablevoy = Stablevoy.create({ apiKey, retries: new RetryPolicy(3, 30) });
194
208
  ```
195
209
 
210
+ ## Questions and bugs
211
+
212
+ Ask questions in [GitHub Discussions](https://github.com/orgs/stablevoy/discussions/categories/sdks), category SDKs. Open an issue in this repository for a bug, with the version and the smallest example that shows it. Never paste a key, not even a test one.
213
+
196
214
  ## Links
197
215
 
198
216
  - [API reference](https://stablevoy.com/docs/api/)
package/dist/index.d.ts CHANGED
@@ -4,6 +4,7 @@ export type { ConnectionOptions } from './ConnectionOptions.js';
4
4
  export type { ConnectedStore } from './model/ConnectedStore.js';
5
5
  export type { ConnectedApp, ConnectedAppStore } from './model/ConnectedApp.js';
6
6
  export { VERSION } from './version.js';
7
+ export { checkApiKey, checkWebhookSecret, type KeyCheck } from './keys/KeyFormat.js';
7
8
  export { RetryPolicy } from './http/RetryPolicy.js';
8
9
  export type { Sleep } from './http/Sleep.js';
9
10
  export type { Query, Transport } from './http/Transport.js';
@@ -16,8 +17,8 @@ export { SummaryPeriod, type InvoiceSummary, type InvoiceSummaryInput, type Netw
16
17
  export { InvoiceStatus, isPaidStatus } from './model/InvoiceStatus.js';
17
18
  export { InvoiceSourceFilter, InvoiceSourceKind, type InvoiceSource } from './model/InvoiceSource.js';
18
19
  export type { CreateInvoiceInput, CreatedInvoice, DepositAddress, Invoice, InvoicePage, Payment } from './model/Invoice.js';
19
- export type { ApiKeysPerStore, Limits, Network, PayoutAddresses, Pricing, Store, Token } from './model/Platform.js';
20
- export { canAcceptPayments, evmPayoutNeedsReview, EVM_PAYOUT_STATUS } from './model/Platform.js';
20
+ export type { ApiKeysPerStore, Limits, Network, PayoutAddresses, PayoutSources, Pricing, Store, Token } from './model/Platform.js';
21
+ export { canAcceptPayments, evmPayoutNeedsReview, EVM_PAYOUT_STATUS, PAYOUT_SOURCE } from './model/Platform.js';
21
22
  export { WebhookVerifier, type WebhookVerifierOptions } from './webhook/WebhookVerifier.js';
22
23
  export type { WebhookEvent } from './webhook/WebhookEvent.js';
23
24
  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,gBAAgB,EAAE,KAAK,gBAAgB,EAAE,KAAK,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACpG,YAAY,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,YAAY,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC/E,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,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE,YAAY,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,KAAK,cAAc,EAAE,KAAK,mBAAmB,EAAE,KAAK,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACpJ,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,eAAe,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AACpH,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"}
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,gBAAgB,EAAE,KAAK,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACpG,YAAY,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,YAAY,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC/E,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,KAAK,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACrF,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,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE,YAAY,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,KAAK,cAAc,EAAE,KAAK,mBAAmB,EAAE,KAAK,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACpJ,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,eAAe,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AACnI,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAChH,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,6 +1,7 @@
1
1
  export { Stablevoy } from './Stablevoy.js';
2
2
  export { StablevoyConnect } from './StablevoyConnect.js';
3
3
  export { VERSION } from './version.js';
4
+ export { checkApiKey, checkWebhookSecret } from './keys/KeyFormat.js';
4
5
  export { RetryPolicy } from './http/RetryPolicy.js';
5
6
  export { Invoices } from './resources/Invoices.js';
6
7
  export { Stores } from './resources/Stores.js';
@@ -9,7 +10,7 @@ export { UnmatchedTransfers } from './resources/UnmatchedTransfers.js';
9
10
  export { SummaryPeriod } from './model/InvoiceSummary.js';
10
11
  export { InvoiceStatus, isPaidStatus } from './model/InvoiceStatus.js';
11
12
  export { InvoiceSourceFilter, InvoiceSourceKind } from './model/InvoiceSource.js';
12
- export { canAcceptPayments, evmPayoutNeedsReview, EVM_PAYOUT_STATUS } from './model/Platform.js';
13
+ export { canAcceptPayments, evmPayoutNeedsReview, EVM_PAYOUT_STATUS, PAYOUT_SOURCE } from './model/Platform.js';
13
14
  export { WebhookVerifier } from './webhook/WebhookVerifier.js';
14
15
  export { StablevoyError } from './errors/StablevoyError.js';
15
16
  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,gBAAgB,EAA6C,MAAM,uBAAuB,CAAC;AAIpG,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,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAEvE,OAAO,EAAE,aAAa,EAA4F,MAAM,2BAA2B,CAAC;AACpJ,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"}
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,EAA6C,MAAM,uBAAuB,CAAC;AAIpG,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAiB,MAAM,qBAAqB,CAAC;AACrF,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,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAEvE,OAAO,EAAE,aAAa,EAA4F,MAAM,2BAA2B,CAAC;AACpJ,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,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAChH,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,3 @@
1
+ /** CRC-32 (IEEE, the zlib one) of an ASCII string. */
2
+ export declare function crc32(text: string): number;
3
+ //# sourceMappingURL=Crc32.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Crc32.d.ts","sourceRoot":"","sources":["../../src/keys/Crc32.ts"],"names":[],"mappings":"AAUA,sDAAsD;AACtD,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAI1C"}
@@ -0,0 +1,18 @@
1
+ const TABLE = (() => {
2
+ const table = new Uint32Array(256);
3
+ for (let n = 0; n < 256; n++) {
4
+ let c = n;
5
+ for (let k = 0; k < 8; k++)
6
+ c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1;
7
+ table[n] = c >>> 0;
8
+ }
9
+ return table;
10
+ })();
11
+ /** CRC-32 (IEEE, the zlib one) of an ASCII string. */
12
+ export function crc32(text) {
13
+ let crc = 0xffffffff;
14
+ for (let i = 0; i < text.length; i++)
15
+ crc = TABLE[(crc ^ text.charCodeAt(i)) & 0xff] ^ (crc >>> 8);
16
+ return (crc ^ 0xffffffff) >>> 0;
17
+ }
18
+ //# sourceMappingURL=Crc32.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Crc32.js","sourceRoot":"","sources":["../../src/keys/Crc32.ts"],"names":[],"mappings":"AAAA,MAAM,KAAK,GAAG,CAAC,GAAG,EAAE;IAClB,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC;IACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7B,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;YAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACzE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC,EAAE,CAAC;AAEL,sDAAsD;AACtD,MAAM,UAAU,KAAK,CAAC,IAAY;IAChC,IAAI,GAAG,GAAG,UAAU,CAAC;IACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE;QAAE,GAAG,GAAI,KAAK,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAY,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;IAC/G,OAAO,CAAC,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;AAClC,CAAC"}
@@ -0,0 +1,10 @@
1
+ /** How a pasted or received key or secret looks: right, wrong in a way that means a typo or a cut copy, or not one at all. */
2
+ export type KeyCheck = 'ok' | 'mistyped' | 'not_a_key';
3
+ /**
4
+ * Stablevoy store API keys are svk_live_ / svk_test_ followed by 30 random and 6 checksum characters; keys made before the
5
+ * new format are sk_live_ / sk_test_ and keep working. A checksummed key with a broken checksum was mistyped or cut.
6
+ */
7
+ export declare function checkApiKey(value: string): KeyCheck;
8
+ /** Webhook signing secrets: svwhsec_ with a checksum, or the older whsec_. */
9
+ export declare function checkWebhookSecret(value: string): KeyCheck;
10
+ //# sourceMappingURL=KeyFormat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KeyFormat.d.ts","sourceRoot":"","sources":["../../src/keys/KeyFormat.ts"],"names":[],"mappings":"AAUA,8HAA8H;AAC9H,MAAM,MAAM,QAAQ,GAAG,IAAI,GAAG,UAAU,GAAG,WAAW,CAAC;AAEvD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,CAInD;AAED,8EAA8E;AAC9E,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,CAG1D"}
@@ -0,0 +1,37 @@
1
+ import { crc32 } from './Crc32.js';
2
+ const BASE62 = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
3
+ const CHECKSUMMED_BODY = /^[0-9A-Za-z]{36}$/;
4
+ const API_KEY_PREFIXES = ['svk_live_', 'svk_test_'];
5
+ const WEBHOOK_SECRET_PREFIX = 'svwhsec_';
6
+ /** The older formats are recognised by prefix only, as before the checksummed ones existed. */
7
+ const OLDER_API_KEY = /^sk_(live|test)_/;
8
+ const OLDER_WEBHOOK_SECRET = /^whsec_/;
9
+ /**
10
+ * Stablevoy store API keys are svk_live_ / svk_test_ followed by 30 random and 6 checksum characters; keys made before the
11
+ * new format are sk_live_ / sk_test_ and keep working. A checksummed key with a broken checksum was mistyped or cut.
12
+ */
13
+ export function checkApiKey(value) {
14
+ const prefix = API_KEY_PREFIXES.find((p) => value.startsWith(p));
15
+ if (prefix !== undefined)
16
+ return hasValidChecksum(prefix, value) ? 'ok' : 'mistyped';
17
+ return OLDER_API_KEY.test(value) ? 'ok' : 'not_a_key';
18
+ }
19
+ /** Webhook signing secrets: svwhsec_ with a checksum, or the older whsec_. */
20
+ export function checkWebhookSecret(value) {
21
+ if (value.startsWith(WEBHOOK_SECRET_PREFIX))
22
+ return hasValidChecksum(WEBHOOK_SECRET_PREFIX, value) ? 'ok' : 'mistyped';
23
+ return OLDER_WEBHOOK_SECRET.test(value) ? 'ok' : 'not_a_key';
24
+ }
25
+ function hasValidChecksum(prefix, value) {
26
+ const body = value.slice(prefix.length);
27
+ if (!CHECKSUMMED_BODY.test(body))
28
+ return false;
29
+ let n = crc32(prefix + body.slice(0, 30));
30
+ let checksum = '';
31
+ for (let i = 0; i < 6; i++) {
32
+ checksum = BASE62.charAt(n % 62) + checksum;
33
+ n = Math.floor(n / 62);
34
+ }
35
+ return body.slice(30) === checksum;
36
+ }
37
+ //# sourceMappingURL=KeyFormat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KeyFormat.js","sourceRoot":"","sources":["../../src/keys/KeyFormat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,MAAM,MAAM,GAAG,gEAAgE,CAAC;AAChF,MAAM,gBAAgB,GAAG,mBAAmB,CAAC;AAC7C,MAAM,gBAAgB,GAAG,CAAC,WAAW,EAAE,WAAW,CAAU,CAAC;AAC7D,MAAM,qBAAqB,GAAG,UAAU,CAAC;AACzC,+FAA+F;AAC/F,MAAM,aAAa,GAAG,kBAAkB,CAAC;AACzC,MAAM,oBAAoB,GAAG,SAAS,CAAC;AAKvC;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IACjE,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,gBAAgB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC;IACrF,OAAO,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC;AACxD,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC9C,IAAI,KAAK,CAAC,UAAU,CAAC,qBAAqB,CAAC;QAAE,OAAO,gBAAgB,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC;IACvH,OAAO,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC;AAC/D,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAc,EAAE,KAAa;IACrD,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACxC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAC/C,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAC1C,IAAI,QAAQ,GAAG,EAAE,CAAC;IAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,QAAQ,CAAC;QAC5C,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IACzB,CAAC;IACD,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,QAAQ,CAAC;AACrC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ConnectedApp.d.ts","sourceRoot":"","sources":["../../src/model/ConnectedApp.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,0FAA0F;AAC1F,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,+GAA+G;AAC/G,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,EAAE,SAAS,iBAAiB,EAAE,CAAC;CAC/C;AAED,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,GAAG,YAAY,CAQzD"}
1
+ {"version":3,"file":"ConnectedApp.d.ts","sourceRoot":"","sources":["../../src/model/ConnectedApp.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAG1C,0FAA0F;AAC1F,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,+GAA+G;AAC/G,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,EAAE,SAAS,iBAAiB,EAAE,CAAC;CAC/C;AAED,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,GAAG,YAAY,CAQzD"}
@@ -1,9 +1,10 @@
1
1
  import { UnexpectedResponseError } from '../errors/UnexpectedResponseError.js';
2
+ import { checkApiKey } from '../keys/KeyFormat.js';
2
3
  export function parseConnectedApp(f) {
3
4
  const stores = f.objects('stores', (s) => {
4
5
  const apiKey = s.string('apiKey');
5
- if (!/^sk_(live|test)_/.test(apiKey))
6
- throw new UnexpectedResponseError(`${s.pathOf('apiKey')} is not an API key (sk_live_ or sk_test_)`);
6
+ if (checkApiKey(apiKey) !== 'ok')
7
+ throw new UnexpectedResponseError(`${s.pathOf('apiKey')} is not an API key (svk_live_, svk_test_, or the older sk_live_, sk_test_)`);
7
8
  return { storeId: s.string('id'), storeName: s.string('name'), apiKey };
8
9
  });
9
10
  if (stores.length === 0)
@@ -1 +1 @@
1
- {"version":3,"file":"ConnectedApp.js","sourceRoot":"","sources":["../../src/model/ConnectedApp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAe/E,MAAM,UAAU,iBAAiB,CAAC,CAAS;IACzC,MAAM,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;QACvC,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAClC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC;YAAE,MAAM,IAAI,uBAAuB,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,2CAA2C,CAAC,CAAC;QAC1I,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1E,CAAC,CAAC,CAAC;IACH,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,uBAAuB,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC7F,OAAO,EAAE,MAAM,EAAE,CAAC;AACpB,CAAC"}
1
+ {"version":3,"file":"ConnectedApp.js","sourceRoot":"","sources":["../../src/model/ConnectedApp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAE/E,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAcnD,MAAM,UAAU,iBAAiB,CAAC,CAAS;IACzC,MAAM,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;QACvC,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAClC,IAAI,WAAW,CAAC,MAAM,CAAC,KAAK,IAAI;YAAE,MAAM,IAAI,uBAAuB,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,4EAA4E,CAAC,CAAC;QACvK,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1E,CAAC,CAAC,CAAC;IACH,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,uBAAuB,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC7F,OAAO,EAAE,MAAM,EAAE,CAAC;AACpB,CAAC"}
@@ -1 +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"}
1
+ {"version":3,"file":"ConnectedStore.d.ts","sourceRoot":"","sources":["../../src/model/ConnectedStore.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAG1C,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"}
@@ -1,11 +1,12 @@
1
1
  import { UnexpectedResponseError } from '../errors/UnexpectedResponseError.js';
2
+ import { checkApiKey, checkWebhookSecret } from '../keys/KeyFormat.js';
2
3
  export function parseConnectedStore(f) {
3
4
  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_)`);
5
+ if (checkApiKey(apiKey) !== 'ok')
6
+ throw new UnexpectedResponseError(`${f.pathOf('apiKey')} is not an API key (svk_live_, svk_test_, or the older sk_live_, sk_test_)`);
6
7
  const webhookSecret = f.string('webhookSecret');
7
- if (!webhookSecret.startsWith('whsec_'))
8
- throw new UnexpectedResponseError(`${f.pathOf('webhookSecret')} is not a webhook secret (whsec_)`);
8
+ if (checkWebhookSecret(webhookSecret) !== 'ok')
9
+ throw new UnexpectedResponseError(`${f.pathOf('webhookSecret')} is not a webhook secret (svwhsec_, or the older whsec_)`);
9
10
  const store = f.object('store');
10
11
  return { apiKey, webhookSecret, storeId: store.string('id'), storeName: store.string('name') };
11
12
  }
@@ -1 +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"}
1
+ {"version":3,"file":"ConnectedStore.js","sourceRoot":"","sources":["../../src/model/ConnectedStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAE/E,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAUvE,MAAM,UAAU,mBAAmB,CAAC,CAAS;IAC3C,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAClC,IAAI,WAAW,CAAC,MAAM,CAAC,KAAK,IAAI;QAAE,MAAM,IAAI,uBAAuB,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,4EAA4E,CAAC,CAAC;IACvK,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;IAChD,IAAI,kBAAkB,CAAC,aAAa,CAAC,KAAK,IAAI;QAAE,MAAM,IAAI,uBAAuB,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,0DAA0D,CAAC,CAAC;IAC1K,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"}
@@ -6,6 +6,11 @@ export declare const EVM_PAYOUT_STATUS: {
6
6
  readonly UNACKNOWLEDGED: "unacknowledged";
7
7
  readonly UNCHECKED: "unchecked";
8
8
  };
9
+ /** Values of Store.payoutSources: the store's own payout wallet, or the account's. */
10
+ export declare const PAYOUT_SOURCE: {
11
+ readonly STORE: "store";
12
+ readonly ACCOUNT: "account";
13
+ };
9
14
  /** The store the API key belongs to. */
10
15
  export interface Store {
11
16
  readonly id: string;
@@ -13,7 +18,7 @@ export interface Store {
13
18
  readonly status: string;
14
19
  /** Network keys, e.g. "base", "tron". */
15
20
  readonly enabledNetworks: readonly string[];
16
- /** Enabled networks with no payout wallet for their family (EVM or Tron) on the account: buyers are not offered them. */
21
+ /** Enabled networks with no payout wallet for their family (EVM or Tron), neither the store's own nor the account's: buyers are not offered them. */
17
22
  readonly networksWithoutPayout: readonly string[];
18
23
  readonly minInvoiceUsdCents: number | null;
19
24
  readonly maxInvoiceUsdCents: number | null;
@@ -26,16 +31,29 @@ export interface Store {
26
31
  /** The plugin connected to the store in one click ('woocommerce', 'edd', 'whmcs'), or null. */
27
32
  readonly connectedPlatform: string | null;
28
33
  /**
29
- * The EVM payout wallet as last read on every EVM network: plain (a regular wallet), acknowledged (a smart contract wallet
34
+ * The EVM payout wallet this store uses (its own or the account's, see payoutSources) as last read on every EVM network: plain (a regular wallet), acknowledged (a smart contract wallet
30
35
  * or EIP-7702 delegation the merchant confirmed), unacknowledged (not confirmed, or changed since: the EVM networks are
31
36
  * left out of new invoices until the merchant reviews it in the dashboard), unchecked (not read yet), or null when the
32
- * account has no EVM payout wallet.
37
+ * store has no EVM payout wallet.
33
38
  */
34
39
  readonly evmPayoutStatus: string | null;
35
40
  /** Enabled EVM networks new invoices leave out because evmPayoutStatus is unacknowledged; empty otherwise. */
36
41
  readonly evmNetworksBlocked: readonly string[];
37
- /** The account's payout wallets per network family, null when not set. Read only: they change in the dashboard with a wallet signature. */
42
+ /**
43
+ * The payout wallets this store's new invoices use, per network family: the store's own, else the account's; null when neither
44
+ * is set. Read only: they change in the dashboard with a wallet signature.
45
+ */
38
46
  readonly payoutAddresses: PayoutAddresses;
47
+ /** Where each payout wallet comes from: 'store' or 'account' (PAYOUT_SOURCE), null when the store has none for that family. */
48
+ readonly payoutSources: PayoutSources;
49
+ /** The account's payout wallets, also when the store uses its own. */
50
+ readonly accountPayoutAddresses: PayoutAddresses;
51
+ /** When the store was archived; null while it is not. The keys of an archived store are revoked. */
52
+ readonly archivedAt: Date | null;
53
+ }
54
+ export interface PayoutSources {
55
+ readonly evm: string | null;
56
+ readonly tron: string | null;
39
57
  }
40
58
  export interface PayoutAddresses {
41
59
  readonly evm: string | null;
@@ -1 +1 @@
1
- {"version":3,"file":"Platform.d.ts","sourceRoot":"","sources":["../../src/model/Platform.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Platform.d.ts","sourceRoot":"","sources":["../../src/model/Platform.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,11 @@ export const EVM_PAYOUT_STATUS = {
5
5
  UNACKNOWLEDGED: 'unacknowledged',
6
6
  UNCHECKED: 'unchecked',
7
7
  };
8
+ /** Values of Store.payoutSources: the store's own payout wallet, or the account's. */
9
+ export const PAYOUT_SOURCE = {
10
+ STORE: 'store',
11
+ ACCOUNT: 'account',
12
+ };
8
13
  export function parseStore(f) {
9
14
  return {
10
15
  id: f.string('id'),
@@ -23,8 +28,14 @@ export function parseStore(f) {
23
28
  evmPayoutStatus: f.nullableString('evmPayoutStatus'),
24
29
  evmNetworksBlocked: f.strings('evmNetworksBlocked'),
25
30
  payoutAddresses: parsePayoutAddresses(f.object('payoutAddresses')),
31
+ payoutSources: parsePayoutSources(f.object('payoutSources')),
32
+ accountPayoutAddresses: parsePayoutAddresses(f.object('accountPayoutAddresses')),
33
+ archivedAt: f.nullableDate('archivedAt'),
26
34
  };
27
35
  }
36
+ function parsePayoutSources(f) {
37
+ return { evm: f.nullableString('evm'), tron: f.nullableString('tron') };
38
+ }
28
39
  function parsePayoutAddresses(f) {
29
40
  return { evm: f.nullableString('evm'), tron: f.nullableString('tron') };
30
41
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Platform.js","sourceRoot":"","sources":["../../src/model/Platform.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Platform.js","sourceRoot":"","sources":["../../src/model/Platform.ts"],"names":[],"mappings":"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"}
package/dist/version.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "1.7.0";
1
+ export declare const VERSION = "1.9.0";
2
2
  //# sourceMappingURL=version.d.ts.map
package/dist/version.js CHANGED
@@ -1,2 +1,2 @@
1
- export const VERSION = '1.7.0';
1
+ export const VERSION = '1.9.0';
2
2
  //# sourceMappingURL=version.js.map
@@ -2,10 +2,13 @@ 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, invoice.cancelled, 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.
5
+ * invoice.on_hold, invoice.cancelled, invoice.payment_flagged, store.payout_attention, api_key.leaked, webhook_secret.leaked
6
+ * and webhook.test. invoice.payment_flagged: a payment of a settled invoice was flagged by screening; the invoice keeps its
7
+ * status and `data.payment` holds the payment. store.payout_attention: the EVM payout wallet this store uses (its own or the
8
+ * account's) became unconfirmed or is fine again; `invoice` is null and `data.payout` holds status, source ('store' or
9
+ * 'account'), blockedNetworks and dashboardUrl. Read stores.current() again for the current state. api_key.leaked: GitHub
10
+ * found an API key of the store in public code and it was revoked; webhook_secret.leaked: the same for the webhook signing
11
+ * secret, which the merchant rotates in the dashboard; `invoice` is null for both.
9
12
  * Deliveries can repeat: use `id` to process each event once.
10
13
  */
11
14
  export interface WebhookEvent {
@@ -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;;;;;;;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
+ {"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;;;;;;;;;;GAUG;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;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"}
1
+ {"version":3,"file":"WebhookEvent.js","sourceRoot":"","sources":["../../src/webhook/WebhookEvent.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAgB,MAAM,qBAAqB,CAAC;AAuBjE,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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "stablevoy",
3
- "version": "1.7.0",
3
+ "version": "1.9.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",
@@ -52,10 +52,10 @@
52
52
  "devDependencies": {
53
53
  "@eslint/js": "10.0.1",
54
54
  "@types/node": "26.6.6",
55
- "@vitest/coverage-v8": "5.0.5",
55
+ "@vitest/coverage-v8": "5.1.0",
56
56
  "eslint": "10.14.0",
57
57
  "typescript": "6.0.3",
58
58
  "typescript-eslint": "8.72.1",
59
- "vitest": "5.0.5"
59
+ "vitest": "5.1.0"
60
60
  }
61
61
  }