@stripe/extensibility-sdk 0.24.1 → 0.25.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +355 -0
- package/dist/config-values/generate.d.ts +2 -0
- package/dist/config-values/generate.d.ts.map +1 -1
- package/dist/extensibility-sdk-alpha.d.ts +140 -38
- package/dist/extensibility-sdk-beta.d.ts +140 -38
- package/dist/extensibility-sdk-extensions-alpha.d.ts +155 -25
- package/dist/extensibility-sdk-extensions-beta.d.ts +155 -25
- package/dist/extensibility-sdk-extensions-internal.d.ts +159 -25
- package/dist/extensibility-sdk-extensions-public.d.ts +155 -25
- package/dist/extensibility-sdk-internal-alpha.d.ts +5 -0
- package/dist/extensibility-sdk-internal-beta.d.ts +5 -0
- package/dist/extensibility-sdk-internal-internal.d.ts +5 -0
- package/dist/extensibility-sdk-internal-public.d.ts +5 -0
- package/dist/extensibility-sdk-internal.d.ts +139 -40
- package/dist/extensibility-sdk-public.d.ts +140 -38
- package/dist/extensibility-sdk-stdlib-alpha.d.ts +145 -38
- package/dist/extensibility-sdk-stdlib-beta.d.ts +145 -38
- package/dist/extensibility-sdk-stdlib-internal.d.ts +144 -40
- package/dist/extensibility-sdk-stdlib-public.d.ts +145 -38
- package/dist/extensions/billing/bill/discount_calculation.d.ts +5 -3
- package/dist/extensions/billing/customer_balance_application.d.ts +3 -1
- package/dist/extensions/billing/invoice_collection_setting.d.ts +15 -11
- package/dist/extensions/billing/prorations.d.ts +30 -21
- package/dist/extensions/billing/recurring_billing_item_handling.d.ts +41 -23
- package/dist/extensions/billing/types.d.ts +4 -4
- package/dist/extensions/core/workflows/custom_action.d.ts +6 -2
- package/dist/extensions/extend/workflows/custom_action.d.ts +6 -2
- package/dist/index.cjs +385 -134
- package/dist/index.js +383 -133
- package/dist/internal.d.ts +4 -0
- package/dist/internal.d.ts.map +1 -1
- package/dist/stdlib/brand.d.ts +16 -10
- package/dist/stdlib/brand.d.ts.map +1 -1
- package/dist/stdlib/decimal.d.ts +49 -21
- package/dist/stdlib/decimal.d.ts.map +1 -1
- package/dist/stdlib/index.cjs +385 -134
- package/dist/stdlib/index.d.ts +10 -4
- package/dist/stdlib/index.d.ts.map +1 -1
- package/dist/stdlib/index.js +383 -133
- package/dist/stdlib/refs.d.ts +21 -7
- package/dist/stdlib/scalars.d.ts +61 -28
- package/dist/stdlib/scalars.d.ts.map +1 -1
- package/dist/stdlib/to-const.d.ts +35 -0
- package/dist/stdlib/to-const.d.ts.map +1 -0
- package/dist/stdlib/type-utils.d.ts +3 -1
- package/dist/stdlib/types.d.ts +6 -6
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +11 -11
- package/dist/api-surface.d.ts.map +0 -1
package/README.md
ADDED
|
@@ -0,0 +1,355 @@
|
|
|
1
|
+
# @stripe/extensibility-sdk
|
|
2
|
+
|
|
3
|
+
Runtime SDK for Stripe script extensions. Provides TypeScript extension interfaces, a
|
|
4
|
+
Stripe-safe arbitrary-precision `Decimal` type, scalar primitives, and the wire-format
|
|
5
|
+
transformation framework used by the platform dispatcher.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Subpath exports
|
|
10
|
+
|
|
11
|
+
| Import path | Use for |
|
|
12
|
+
| ----------------------------------------- | ------------------------------------------------ |
|
|
13
|
+
| `@stripe/extensibility-sdk/extensions` | Implementing extension interfaces |
|
|
14
|
+
| `@stripe/extensibility-sdk/stdlib` | `Decimal`, scalar types, `Ref`, wire errors |
|
|
15
|
+
| `@stripe/extensibility-sdk/internal` | Internal registry metadata (used by build tools) |
|
|
16
|
+
| `@stripe/extensibility-sdk/jsonschema` | JSON Schema types and helpers |
|
|
17
|
+
| `@stripe/extensibility-sdk/config-values` | Configuration value types and helpers |
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## Extension interfaces
|
|
22
|
+
|
|
23
|
+
Each extension interface is a TypeScript interface your default-export class must implement.
|
|
24
|
+
The `Config` type parameter is the shape of your extension's configuration object.
|
|
25
|
+
|
|
26
|
+
### Billing
|
|
27
|
+
|
|
28
|
+
#### `Billing.Bill.DiscountCalculation`
|
|
29
|
+
|
|
30
|
+
Computes discounts applied to a bill.
|
|
31
|
+
|
|
32
|
+
```typescript
|
|
33
|
+
import type { Billing, Context } from '@stripe/extensibility-sdk/extensions';
|
|
34
|
+
|
|
35
|
+
interface MyConfig extends Record<string, unknown> {
|
|
36
|
+
maxDiscountPercent: number;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export default class MyExtension implements Billing.Bill.DiscountCalculation<MyConfig> {
|
|
40
|
+
computeDiscounts(
|
|
41
|
+
request: Billing.Bill.DiscountCalculation.DiscountableItem,
|
|
42
|
+
config: MyConfig,
|
|
43
|
+
context: Context
|
|
44
|
+
): Billing.Bill.DiscountCalculation.DiscountResult {
|
|
45
|
+
const { grossAmount } = request;
|
|
46
|
+
const discountAmount = grossAmount.amount
|
|
47
|
+
.mul(config.maxDiscountPercent)
|
|
48
|
+
.div(100, 8, 'half-even');
|
|
49
|
+
return {
|
|
50
|
+
discount: {
|
|
51
|
+
amount: { amount: discountAmount, currency: grossAmount.currency },
|
|
52
|
+
},
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Key types in the `Billing.Bill.DiscountCalculation` namespace:
|
|
59
|
+
|
|
60
|
+
| Type | Description |
|
|
61
|
+
| ------------------ | ------------------------------------------------------------------------- |
|
|
62
|
+
| `DiscountableItem` | Request: line items, gross amount, customer, billing reason, subscription |
|
|
63
|
+
| `DiscountResult` | Response: discount with `MonetaryAmount` |
|
|
64
|
+
| `LineItem` | A single line with subtotal, quantity, price, period |
|
|
65
|
+
| `Price` | Price with scheme, tiers, recurring config |
|
|
66
|
+
| `BillingReason` | Enum: `'subscription_cycle'`, `'manual'`, etc. |
|
|
67
|
+
| `AnyTimeRange` | Discriminated union: `oneTime` \| `timeRange` |
|
|
68
|
+
| `MonetaryAmount` | `{ amount: Decimal; currency: Currency }` |
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
#### `Billing.CustomerBalanceApplication`
|
|
73
|
+
|
|
74
|
+
Computes how much of a customer's credit balance to apply to a bill.
|
|
75
|
+
|
|
76
|
+
```typescript
|
|
77
|
+
import type { Billing, Context } from '@stripe/extensibility-sdk/extensions';
|
|
78
|
+
|
|
79
|
+
export default class MyExtension implements Billing.CustomerBalanceApplication<
|
|
80
|
+
Record<string, unknown>
|
|
81
|
+
> {
|
|
82
|
+
computeAppliedCustomerBalance(
|
|
83
|
+
request: Billing.CustomerBalanceApplication.CustomerBalanceApplicationInput,
|
|
84
|
+
_config: Record<string, unknown>,
|
|
85
|
+
_context: Context
|
|
86
|
+
): Billing.CustomerBalanceApplication.CustomerBalanceApplicationResult {
|
|
87
|
+
// Apply at most 50% of the bill total from the customer balance
|
|
88
|
+
const halfTotal = request.totalAmount.amount.div(2, 8, 'half-even');
|
|
89
|
+
const applied = request.customerBalance.amount.lt(halfTotal)
|
|
90
|
+
? request.customerBalance.amount
|
|
91
|
+
: halfTotal;
|
|
92
|
+
return {
|
|
93
|
+
appliedCustomerBalance: { amount: applied, currency: request.totalAmount.currency },
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
Key types:
|
|
100
|
+
|
|
101
|
+
| Type | Description |
|
|
102
|
+
| ---------------------------------- | ------------------------------------------------------------------ |
|
|
103
|
+
| `CustomerBalanceApplicationInput` | `{ totalAmount: MonetaryAmount; customerBalance: MonetaryAmount }` |
|
|
104
|
+
| `CustomerBalanceApplicationResult` | `{ appliedCustomerBalance: MonetaryAmount }` |
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
#### `Billing.InvoiceCollectionSetting`
|
|
109
|
+
|
|
110
|
+
Overrides collection settings (payment method, auto-advance, etc.) for an invoice.
|
|
111
|
+
|
|
112
|
+
```typescript
|
|
113
|
+
import type { Billing, Context } from '@stripe/extensibility-sdk/extensions';
|
|
114
|
+
|
|
115
|
+
export default class MyExtension implements Billing.InvoiceCollectionSetting<
|
|
116
|
+
Record<string, unknown>
|
|
117
|
+
> {
|
|
118
|
+
collectionOverride(
|
|
119
|
+
request: Billing.InvoiceCollectionSetting.InvoiceCollectionRequest,
|
|
120
|
+
_config: Record<string, unknown>,
|
|
121
|
+
_context: Context
|
|
122
|
+
): Billing.InvoiceCollectionSetting.InvoiceCollectionResponse {
|
|
123
|
+
const isSubscription = request.parent.type === 'subscription';
|
|
124
|
+
return {
|
|
125
|
+
autoAdvance: isSubscription,
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
Key types:
|
|
132
|
+
|
|
133
|
+
| Type | Description |
|
|
134
|
+
| --------------------------- | ------------------------------------------------------------------------------------------------------------------- |
|
|
135
|
+
| `InvoiceCollectionRequest` | Request: collection settings, parent, customer |
|
|
136
|
+
| `InvoiceCollectionResponse` | Response: optional `autoAdvance` override |
|
|
137
|
+
| `CollectionSettings` | Current settings with `autoAdvance`, `collectionMethod`, `paymentMethods` |
|
|
138
|
+
| `ParentType` | `'subscription'` \| `'contract'` \| `'quote'` \| `'billing_cadence'` \| `'subscription_schedule'` \| `'standalone'` |
|
|
139
|
+
| `CollectionMethod` | `'charge_automatically'` \| `'send_invoice'` |
|
|
140
|
+
| `PaymentMethodType` | `'card'` \| `'sepa_debit'` \| … |
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
#### `Billing.Prorations`
|
|
145
|
+
|
|
146
|
+
Computes proration adjustments when subscription items change mid-period.
|
|
147
|
+
|
|
148
|
+
```typescript
|
|
149
|
+
import type { Billing, Context } from '@stripe/extensibility-sdk/extensions';
|
|
150
|
+
|
|
151
|
+
export default class MyExtension implements Billing.Prorations<Record<string, unknown>> {
|
|
152
|
+
prorateItems(
|
|
153
|
+
request: Billing.Prorations.ProrateItemsInput,
|
|
154
|
+
_config: Record<string, unknown>,
|
|
155
|
+
_context: Context
|
|
156
|
+
): Billing.Prorations.ProrateItemsResult {
|
|
157
|
+
return {
|
|
158
|
+
items: request.items.map((item) => ({
|
|
159
|
+
key: item.key,
|
|
160
|
+
prorationFactor: item.currentProrationFactor,
|
|
161
|
+
lineItemPeriod: item.servicePeriod,
|
|
162
|
+
})),
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
Key types:
|
|
169
|
+
|
|
170
|
+
| Type | Description |
|
|
171
|
+
| -------------------- | ----------------------------------------------------------------- |
|
|
172
|
+
| `ProrateItemsInput` | `{ items: ProratableItem[] }` |
|
|
173
|
+
| `ProrateItemsResult` | `{ items: ProratedItem[] }` |
|
|
174
|
+
| `ProratableItem` | Line item with key, type, price, proration factor, service period |
|
|
175
|
+
| `ProratedItem` | Output: key, proration factor, line item period |
|
|
176
|
+
| `ItemType` | `'credit'` \| `'debit'` |
|
|
177
|
+
|
|
178
|
+
---
|
|
179
|
+
|
|
180
|
+
### Core
|
|
181
|
+
|
|
182
|
+
#### `Core.Workflows.CustomAction`
|
|
183
|
+
|
|
184
|
+
Implements a custom action callable from Stripe workflows. `execute` is required;
|
|
185
|
+
`getFormState` is optional and drives dynamic form rendering.
|
|
186
|
+
|
|
187
|
+
```typescript
|
|
188
|
+
import type { Core, Context } from '@stripe/extensibility-sdk/extensions';
|
|
189
|
+
|
|
190
|
+
interface MyConfig extends Record<string, unknown> {
|
|
191
|
+
webhookEndpoint: string;
|
|
192
|
+
webhookPath: string;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
export default class MyExtension implements Core.Workflows.CustomAction<MyConfig> {
|
|
196
|
+
async execute(
|
|
197
|
+
request: Core.Workflows.CustomAction.ExecuteCustomActionRequest,
|
|
198
|
+
config: MyConfig,
|
|
199
|
+
_context: Context
|
|
200
|
+
): Promise<Core.Workflows.CustomAction.ExecuteCustomActionResponse> {
|
|
201
|
+
const { customInput } = request;
|
|
202
|
+
|
|
203
|
+
await endpointFetch({
|
|
204
|
+
endpoint: config.webhookEndpoint,
|
|
205
|
+
path: config.webhookPath,
|
|
206
|
+
method: 'POST',
|
|
207
|
+
body: JSON.stringify(customInput),
|
|
208
|
+
});
|
|
209
|
+
|
|
210
|
+
return {};
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
async getFormState(
|
|
214
|
+
request: Core.Workflows.CustomAction.GetFormStateRequest,
|
|
215
|
+
_config: MyConfig,
|
|
216
|
+
_context: Context
|
|
217
|
+
): Promise<Core.Workflows.CustomAction.GetFormStateResponse> {
|
|
218
|
+
return { values: request.values, config: {} };
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
Key types:
|
|
224
|
+
|
|
225
|
+
| Type | Description |
|
|
226
|
+
| ----------------------------- | ---------------------------------------------------------------------- |
|
|
227
|
+
| `ExecuteCustomActionRequest` | `{ customInput: Record<string, unknown> }` |
|
|
228
|
+
| `ExecuteCustomActionResponse` | `Record<string, never>` (empty object) |
|
|
229
|
+
| `GetFormStateRequest` | `{ values: Record<string, unknown>; changedField?: string }` |
|
|
230
|
+
| `GetFormStateResponse` | `{ values: Record<string, unknown>; config: Record<string, unknown> }` |
|
|
231
|
+
|
|
232
|
+
Both `execute` and `getFormState` may return synchronously or as `Promise`.
|
|
233
|
+
|
|
234
|
+
---
|
|
235
|
+
|
|
236
|
+
### Context
|
|
237
|
+
|
|
238
|
+
Every extension method receives a `Context` as its third argument:
|
|
239
|
+
|
|
240
|
+
```typescript
|
|
241
|
+
import type { Context } from '@stripe/extensibility-sdk/extensions';
|
|
242
|
+
|
|
243
|
+
function handleContext(context: Context) {
|
|
244
|
+
console.log(context.type); // e.g. "core.workflows.custom_workflow_action"
|
|
245
|
+
console.log(context.id); // unique call ID, for debugging
|
|
246
|
+
console.log(context.livemode);
|
|
247
|
+
console.log(context.stripeContext); // set for cross-account calls
|
|
248
|
+
console.log(context.clockTime); // optional SDK-provided clock timestamp
|
|
249
|
+
}
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
---
|
|
253
|
+
|
|
254
|
+
## Stdlib
|
|
255
|
+
|
|
256
|
+
### `Decimal`
|
|
257
|
+
|
|
258
|
+
Arbitrary-precision decimal arithmetic backed by `big.js`. All monetary values in
|
|
259
|
+
extension interface requests and responses use `Decimal`.
|
|
260
|
+
|
|
261
|
+
```typescript
|
|
262
|
+
import { Decimal } from '@stripe/extensibility-sdk/stdlib';
|
|
263
|
+
|
|
264
|
+
const a = Decimal.from('10.50');
|
|
265
|
+
const b = Decimal.from(3);
|
|
266
|
+
|
|
267
|
+
a.add(b); // Decimal('13.50')
|
|
268
|
+
a.sub(b); // Decimal('7.50')
|
|
269
|
+
a.mul(b); // Decimal('31.50')
|
|
270
|
+
a.div(b, 8, 'half-even'); // Decimal('3.50000000')
|
|
271
|
+
|
|
272
|
+
a.round({ precision: 2, direction: 'half-even' }); // Decimal('10.50')
|
|
273
|
+
a.round('penny'); // Decimal('10.50') — preset shorthand
|
|
274
|
+
|
|
275
|
+
a.eq(Decimal.from('10.50')); // true
|
|
276
|
+
a.lt(b); // false
|
|
277
|
+
a.lte(b); // false
|
|
278
|
+
a.gt(b); // true
|
|
279
|
+
a.gte(b); // true
|
|
280
|
+
|
|
281
|
+
a.toString(); // '10.50'
|
|
282
|
+
a.toFixed(4, 'half-even'); // '10.5000'
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
**Rounding directions:** `'ceil'` · `'floor'` · `'round-down'` · `'round-up'` ·
|
|
286
|
+
`'half-up'` · `'half-down'` · `'half-even'`
|
|
287
|
+
|
|
288
|
+
**Rounding presets:** `'penny'` (2 dp, `half-even`) · `'dollar'` (0 dp, `half-even`)
|
|
289
|
+
|
|
290
|
+
`div()` and `toFixed()` always require an explicit precision and rounding direction —
|
|
291
|
+
there are no implicit defaults to prevent silent precision loss.
|
|
292
|
+
|
|
293
|
+
---
|
|
294
|
+
|
|
295
|
+
### Scalar types
|
|
296
|
+
|
|
297
|
+
| Type | Description | Constructor |
|
|
298
|
+
| ----------------- | -------------------------- | ------------------------------------ |
|
|
299
|
+
| `Integer` | Whole number (no decimals) | `Integer.from(n, direction)` |
|
|
300
|
+
| `PositiveInteger` | Non-negative integer (≥ 0) | `PositiveInteger.from(n, direction)` |
|
|
301
|
+
| `Timestamp` | ISO 8601 datetime string | `Timestamp.create(s)` |
|
|
302
|
+
| `StreetAddress` | Non-empty string | `StreetAddress.create(s)` |
|
|
303
|
+
|
|
304
|
+
These are branded types — they carry a compile-time brand so TypeScript rejects raw
|
|
305
|
+
`number` or `string` where the stricter type is required.
|
|
306
|
+
|
|
307
|
+
```typescript
|
|
308
|
+
import { Integer, PositiveInteger, Timestamp } from '@stripe/extensibility-sdk/stdlib';
|
|
309
|
+
|
|
310
|
+
const count = Integer.from(42, 'round-down'); // Integer
|
|
311
|
+
const qty = PositiveInteger.from(3, 'round-down'); // PositiveInteger
|
|
312
|
+
const ts = Timestamp.create('2024-01-15T00:00:00.000Z'); // Timestamp
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
---
|
|
316
|
+
|
|
317
|
+
### `Ref`
|
|
318
|
+
|
|
319
|
+
A typed reference to a Stripe object (ID + optional resolved value).
|
|
320
|
+
|
|
321
|
+
```typescript
|
|
322
|
+
import { Ref } from '@stripe/extensibility-sdk/stdlib';
|
|
323
|
+
|
|
324
|
+
type CustomerRef = Ref<{ id: string; name: string }>;
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
---
|
|
328
|
+
|
|
329
|
+
### Wire errors
|
|
330
|
+
|
|
331
|
+
Thrown by the platform dispatch wrapper when wire-format data is invalid.
|
|
332
|
+
|
|
333
|
+
| Class | When thrown |
|
|
334
|
+
| ---------------- | --------------------------------------------------------- |
|
|
335
|
+
| `WireReadError` | Invalid or missing field in the **incoming** wire request |
|
|
336
|
+
| `WireWriteError` | Invalid or missing field in the **outgoing** SDK response |
|
|
337
|
+
|
|
338
|
+
```typescript
|
|
339
|
+
import { WireReadError, WireWriteError } from '@stripe/extensibility-sdk/stdlib';
|
|
340
|
+
```
|
|
341
|
+
|
|
342
|
+
In production, the platform catches and surfaces these as structured errors. In tests,
|
|
343
|
+
assert against them directly by invoking the generated interface-specific
|
|
344
|
+
`$platformWrap...` helper for the interface under test. For example:
|
|
345
|
+
|
|
346
|
+
```typescript
|
|
347
|
+
// Pseudocode: replace `$platformWrap...` with the generated wrapper for your interface.
|
|
348
|
+
expect(() => $platformWrap...(MyImpl, badInput, {}, ctx)).toThrow(WireReadError);
|
|
349
|
+
```
|
|
350
|
+
|
|
351
|
+
---
|
|
352
|
+
|
|
353
|
+
## License
|
|
354
|
+
|
|
355
|
+
MIT
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
* Emits TypeScript code for a config field descriptor constant and its
|
|
3
3
|
* corresponding `transformX` function.
|
|
4
4
|
*
|
|
5
|
+
* @deprecated Import from `@stripe/extensibility-sdk` instead.
|
|
6
|
+
*
|
|
5
7
|
* @see ./parse.ts — produces the ConfigAnalysisResult input
|
|
6
8
|
*/
|
|
7
9
|
import type { ConfigAnalysisResult } from './parse.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/config-values/generate.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/config-values/generate.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAuB,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAG5E,OAAO,EACL,iBAAiB,EACjB,0BAA0B,EAC1B,KAAK,oBAAoB,EACzB,KAAK,WAAW,EAChB,KAAK,yBAAyB,EAC9B,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,yBAAyB,EAC9B,KAAK,6BAA6B,GACnC,MAAM,YAAY,CAAC;AAMpB;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,8BAA8B,CAAC;AAE9D;;;;GAIG;AACH,MAAM,WAAW,yBAAyB;IACxC,kFAAkF;IAClF,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,yDAAyD;IACzD,eAAe,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACrC,6DAA6D;IAC7D,mBAAmB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CAC1C;AAED;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,oBAAoB,GAC3B,yBAAyB,CA8C3B"}
|
|
@@ -12,32 +12,52 @@
|
|
|
12
12
|
import { __integerBrand } from '@formspec/core';
|
|
13
13
|
|
|
14
14
|
/**
|
|
15
|
-
* Opaque brand
|
|
15
|
+
* Opaque brand key used as a property key in SDK branded types.
|
|
16
16
|
*
|
|
17
17
|
* @remarks
|
|
18
18
|
* You do not need to use this directly — it is already embedded in
|
|
19
|
-
* branded values returned by factory functions like {@link (Integer:type)}.
|
|
20
|
-
*
|
|
21
|
-
*
|
|
19
|
+
* branded values returned by factory functions like {@link (Integer:type)}.from().
|
|
20
|
+
*
|
|
21
|
+
* String-literal const (not `unique symbol`) so that independent
|
|
22
|
+
* declaration rollups (root vs subpath) produce structurally compatible
|
|
23
|
+
* branded types.
|
|
22
24
|
*
|
|
23
25
|
* @public
|
|
24
26
|
*/
|
|
25
|
-
export declare const __brand:
|
|
27
|
+
export declare const __brand: '__brand';
|
|
26
28
|
|
|
27
29
|
/* Excluded from this release type: __decimalBrand */
|
|
28
30
|
|
|
29
|
-
|
|
31
|
+
/**
|
|
32
|
+
* Distinct brand key for PositiveInteger so an Integer is not assignable to
|
|
33
|
+
* PositiveInteger without going through the guard. PositiveInteger is a
|
|
34
|
+
* subtype of Integer (it carries both brands), so it can be used wherever
|
|
35
|
+
* Integer is expected.
|
|
36
|
+
*
|
|
37
|
+
* String-literal const (not `unique symbol`) so that independent
|
|
38
|
+
* declaration rollups (root vs subpath) produce structurally compatible
|
|
39
|
+
* branded types.
|
|
40
|
+
*
|
|
41
|
+
* For internal use only — may be removed in a future release.
|
|
42
|
+
*
|
|
43
|
+
* @public
|
|
44
|
+
*/
|
|
45
|
+
export declare const __positiveIntegerBrand: '__positiveIntegerBrand';
|
|
30
46
|
|
|
31
47
|
/**
|
|
32
|
-
* Opaque type-tag
|
|
48
|
+
* Opaque type-tag key used by SDK scalar types to carry Stripe type metadata.
|
|
33
49
|
*
|
|
34
50
|
* @remarks
|
|
35
51
|
* You do not need to use this directly — it is already embedded in
|
|
36
|
-
* branded values returned by factory functions like {@link (Integer:type)}.
|
|
52
|
+
* branded values returned by factory functions like {@link (Integer:type)}.from().
|
|
53
|
+
*
|
|
54
|
+
* String-literal const (not `unique symbol`) so that independent
|
|
55
|
+
* declaration rollups (root vs subpath) produce structurally compatible
|
|
56
|
+
* branded types.
|
|
37
57
|
*
|
|
38
58
|
* @public
|
|
39
59
|
*/
|
|
40
|
-
export declare const __stripeType:
|
|
60
|
+
export declare const __stripeType: '__stripeType';
|
|
41
61
|
|
|
42
62
|
/** @public */
|
|
43
63
|
declare type AnyTimeRange = {
|
|
@@ -84,7 +104,7 @@ declare namespace Billing {
|
|
|
84
104
|
}
|
|
85
105
|
export { Billing }
|
|
86
106
|
|
|
87
|
-
/** The type of the opaque brand
|
|
107
|
+
/** The type of the opaque brand key used as a property key in SDK branded types. @public */
|
|
88
108
|
export declare type BrandSymbol = typeof __brand;
|
|
89
109
|
|
|
90
110
|
/* Excluded from this release type: _configAppContextFromContext */
|
|
@@ -489,59 +509,59 @@ declare interface CustomerBalanceApplication<Config> {
|
|
|
489
509
|
* @public
|
|
490
510
|
*/
|
|
491
511
|
export declare interface Decimal {
|
|
492
|
-
/* Excluded from this release type:
|
|
493
|
-
/* Excluded from this release type:
|
|
494
|
-
/* Excluded from this release type:
|
|
512
|
+
/* Excluded from this release type: __brand */
|
|
513
|
+
/* Excluded from this release type: __decimalBrand */
|
|
514
|
+
/* Excluded from this release type: __stripeType */
|
|
495
515
|
/**
|
|
496
516
|
* Return the sum of this value and `other`.
|
|
497
517
|
* @public
|
|
498
518
|
*/
|
|
499
|
-
add(other:
|
|
519
|
+
add(other: DecimalLike): Decimal;
|
|
500
520
|
/**
|
|
501
521
|
* Return the difference of this value and `other`.
|
|
502
522
|
* @public
|
|
503
523
|
*/
|
|
504
|
-
sub(other:
|
|
524
|
+
sub(other: DecimalLike): Decimal;
|
|
505
525
|
/**
|
|
506
526
|
* Return the product of this value and `other`.
|
|
507
527
|
* @public
|
|
508
528
|
*/
|
|
509
|
-
mul(other:
|
|
529
|
+
mul(other: DecimalLike): Decimal;
|
|
510
530
|
/**
|
|
511
531
|
* Return the quotient of this value divided by `other`.
|
|
512
532
|
* @public
|
|
513
533
|
*/
|
|
514
|
-
div(other:
|
|
534
|
+
div(other: DecimalLike, precision: number, direction: RoundDirection): Decimal;
|
|
515
535
|
/**
|
|
516
536
|
* Three-way comparison: returns `-1`, `0`, or `1`.
|
|
517
537
|
* @public
|
|
518
538
|
*/
|
|
519
|
-
cmp(other:
|
|
539
|
+
cmp(other: DecimalLike): -1 | 0 | 1;
|
|
520
540
|
/**
|
|
521
541
|
* Return `true` if this value is numerically equal to `other`.
|
|
522
542
|
* @public
|
|
523
543
|
*/
|
|
524
|
-
eq(other:
|
|
544
|
+
eq(other: DecimalLike): boolean;
|
|
525
545
|
/**
|
|
526
546
|
* Return `true` if this value is strictly less than `other`.
|
|
527
547
|
* @public
|
|
528
548
|
*/
|
|
529
|
-
lt(other:
|
|
549
|
+
lt(other: DecimalLike): boolean;
|
|
530
550
|
/**
|
|
531
551
|
* Return `true` if this value is less than or equal to `other`.
|
|
532
552
|
* @public
|
|
533
553
|
*/
|
|
534
|
-
lte(other:
|
|
554
|
+
lte(other: DecimalLike): boolean;
|
|
535
555
|
/**
|
|
536
556
|
* Return `true` if this value is strictly greater than `other`.
|
|
537
557
|
* @public
|
|
538
558
|
*/
|
|
539
|
-
gt(other:
|
|
559
|
+
gt(other: DecimalLike): boolean;
|
|
540
560
|
/**
|
|
541
561
|
* Return `true` if this value is greater than or equal to `other`.
|
|
542
562
|
* @public
|
|
543
563
|
*/
|
|
544
|
-
gte(other:
|
|
564
|
+
gte(other: DecimalLike): boolean;
|
|
545
565
|
/**
|
|
546
566
|
* Return `true` if this value is exactly zero.
|
|
547
567
|
* @public
|
|
@@ -592,6 +612,11 @@ export declare interface Decimal {
|
|
|
592
612
|
* @public
|
|
593
613
|
*/
|
|
594
614
|
toFixed(decimalPlaces: number, direction: RoundDirection): string;
|
|
615
|
+
/**
|
|
616
|
+
* Convert to an {@link (Integer:type)} by rounding.
|
|
617
|
+
* @public
|
|
618
|
+
*/
|
|
619
|
+
toInteger(direction: RoundDirection): Integer;
|
|
595
620
|
/**
|
|
596
621
|
* Rejects implicit coercion; explicit `String(d)` and template literals still work.
|
|
597
622
|
* @public
|
|
@@ -609,10 +634,31 @@ export declare interface Decimal {
|
|
|
609
634
|
*
|
|
610
635
|
* @public
|
|
611
636
|
*/
|
|
612
|
-
export declare const Decimal:
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
637
|
+
export declare const Decimal: DecimalCompanion;
|
|
638
|
+
|
|
639
|
+
/** @public */
|
|
640
|
+
export declare interface DecimalCompanion {
|
|
641
|
+
/** Type guard: narrows `unknown` to `Decimal`. @public */
|
|
642
|
+
is(value: unknown): value is Decimal;
|
|
643
|
+
/** Assertion guard: throws if not a `Decimal`. @public */
|
|
644
|
+
assert(value: unknown): asserts value is Decimal;
|
|
645
|
+
/** Create a Decimal from a {@link DecimalLike} value. @public */
|
|
646
|
+
from(value: DecimalLike): Decimal;
|
|
647
|
+
/** The Decimal value `0`. @public */
|
|
648
|
+
readonly zero: Decimal;
|
|
649
|
+
}
|
|
650
|
+
|
|
651
|
+
/**
|
|
652
|
+
* Values that can be coerced to a `Decimal` via `Decimal.from()`.
|
|
653
|
+
*
|
|
654
|
+
* @remarks
|
|
655
|
+
* This union is accepted by `Decimal.from()` and by all arithmetic and
|
|
656
|
+
* comparison methods on `Decimal` instances. Non-Decimal values are
|
|
657
|
+
* coerced via `Decimal.from()` before the operation.
|
|
658
|
+
*
|
|
659
|
+
* @public
|
|
660
|
+
*/
|
|
661
|
+
export declare type DecimalLike = bigint | Decimal | Integer | number | string;
|
|
616
662
|
|
|
617
663
|
/**
|
|
618
664
|
* Precision specification for `Decimal.round()`.
|
|
@@ -670,6 +716,18 @@ export declare const DecimalRoundingPresets: Readonly<{
|
|
|
670
716
|
}>;
|
|
671
717
|
}>;
|
|
672
718
|
|
|
719
|
+
/**
|
|
720
|
+
* Recursively converts a type to a deeply-readonly version.
|
|
721
|
+
*
|
|
722
|
+
* Primitive types (`string`, `number`, `boolean`, `bigint`, `symbol`,
|
|
723
|
+
* `undefined`, `null`) are returned as-is. Arrays become `readonly` arrays
|
|
724
|
+
* of deeply-readonly elements. Object types have each property marked
|
|
725
|
+
* `readonly`, and the type of each property is recursively transformed.
|
|
726
|
+
*
|
|
727
|
+
* @public
|
|
728
|
+
*/
|
|
729
|
+
export declare type DeepReadonly<T> = T extends bigint | boolean | null | number | string | symbol | undefined ? T : T extends readonly (infer Item)[] ? readonly DeepReadonly<Item>[] : T extends object ? { readonly [K in keyof T]: DeepReadonly<T[K]> } : T;
|
|
730
|
+
|
|
673
731
|
/**
|
|
674
732
|
* The IEEE 754 decimal128 coefficient size (34 digits) — the recommended
|
|
675
733
|
* precision for `Decimal.div()` when full precision is desired.
|
|
@@ -937,11 +995,26 @@ export declare type Integer = {
|
|
|
937
995
|
readonly [__stripeType]: 'int';
|
|
938
996
|
} & number;
|
|
939
997
|
|
|
940
|
-
/** Factory
|
|
941
|
-
export declare const Integer:
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
998
|
+
/** Factory, type guard, and utilities for {@link (Integer:type)} branded values. @public */
|
|
999
|
+
export declare const Integer: IntegerCompanion;
|
|
1000
|
+
|
|
1001
|
+
/** @public */
|
|
1002
|
+
export declare interface IntegerCompanion {
|
|
1003
|
+
/** The Integer value `0`. @public */
|
|
1004
|
+
readonly zero: Integer;
|
|
1005
|
+
/** Type guard: narrows `unknown` to {@link (Integer:type)}. @public */
|
|
1006
|
+
is(value: unknown): value is Integer;
|
|
1007
|
+
/** Assertion guard: throws if not an {@link (Integer:type)}. @public */
|
|
1008
|
+
assert(value: unknown): asserts value is Integer;
|
|
1009
|
+
/** Coerce a value to {@link (Integer:type)} by rounding. @public */
|
|
1010
|
+
from(value: Decimal | Integer | number | string, rounding: IntegerRoundDirection): Integer;
|
|
1011
|
+
/** Lossless conversion to `Decimal`. @public */
|
|
1012
|
+
toDecimal(value: Integer): Decimal;
|
|
1013
|
+
/** Type guard: narrows {@link (Integer:type)} to {@link (PositiveInteger:type)}. @public */
|
|
1014
|
+
isPositive(value: Integer): value is PositiveInteger;
|
|
1015
|
+
/** Assertion guard: throws if the Integer is negative. @public */
|
|
1016
|
+
assertIsPositive(value: Integer): asserts value is PositiveInteger;
|
|
1017
|
+
}
|
|
945
1018
|
|
|
946
1019
|
/**
|
|
947
1020
|
* Rounding directions for coercing a number to an integer.
|
|
@@ -1154,11 +1227,18 @@ export declare type PositiveInteger = {
|
|
|
1154
1227
|
readonly [__stripeType]: 'int';
|
|
1155
1228
|
} & number;
|
|
1156
1229
|
|
|
1157
|
-
/** Factory
|
|
1158
|
-
export declare const PositiveInteger:
|
|
1159
|
-
|
|
1160
|
-
|
|
1161
|
-
|
|
1230
|
+
/** Factory, type guard, and utilities for {@link (PositiveInteger:type)} branded values. @public */
|
|
1231
|
+
export declare const PositiveInteger: PositiveIntegerCompanion;
|
|
1232
|
+
|
|
1233
|
+
/** @public */
|
|
1234
|
+
export declare interface PositiveIntegerCompanion {
|
|
1235
|
+
/** Type guard: narrows `unknown` to {@link (PositiveInteger:type)}. @public */
|
|
1236
|
+
is(value: unknown): value is PositiveInteger;
|
|
1237
|
+
/** Assertion guard: throws if not a {@link (PositiveInteger:type)}. @public */
|
|
1238
|
+
assert(value: unknown): asserts value is PositiveInteger;
|
|
1239
|
+
/** Coerce a value to {@link (PositiveInteger:type)} by rounding. Throws if negative. @public */
|
|
1240
|
+
from(value: Decimal | Integer | number | string, rounding: IntegerRoundDirection): PositiveInteger;
|
|
1241
|
+
}
|
|
1162
1242
|
|
|
1163
1243
|
/** @public */
|
|
1164
1244
|
declare namespace Prorations {
|
|
@@ -1745,7 +1825,7 @@ export declare type StreetAddress = {
|
|
|
1745
1825
|
/** Factory for creating {@link (StreetAddress:type)} branded values. @public */
|
|
1746
1826
|
export declare const StreetAddress: { create: (address: string) => StreetAddress };
|
|
1747
1827
|
|
|
1748
|
-
/** The type of the opaque Stripe type-tag
|
|
1828
|
+
/** The type of the opaque Stripe type-tag key used in SDK scalar types. @public */
|
|
1749
1829
|
export declare type StripeTypeSymbol = typeof __stripeType;
|
|
1750
1830
|
|
|
1751
1831
|
/**
|
|
@@ -1768,6 +1848,28 @@ export declare type Timestamp = {
|
|
|
1768
1848
|
/** Factory for creating {@link (Timestamp:type)} branded values. @public */
|
|
1769
1849
|
export declare const Timestamp: { create: (value: string) => Timestamp };
|
|
1770
1850
|
|
|
1851
|
+
/**
|
|
1852
|
+
* Deep-freezes `value` and returns it typed as {@link DeepReadonly}`<T>`.
|
|
1853
|
+
*
|
|
1854
|
+
* Use this helper for module-scoped constant objects and arrays to satisfy
|
|
1855
|
+
* the `dsl/no-module-scoped-mutable-const` lint rule. Unlike `Object.freeze`,
|
|
1856
|
+
* which is shallow, `toConst` recursively freezes all nested objects and arrays.
|
|
1857
|
+
*
|
|
1858
|
+
* @example
|
|
1859
|
+
* ```typescript
|
|
1860
|
+
* import { toConst } from '@stripe/extensibility-sdk/stdlib';
|
|
1861
|
+
*
|
|
1862
|
+
* const DEFAULTS = toConst({ timeout: 30, retries: 3 });
|
|
1863
|
+
* // Type: { readonly timeout: 30; readonly retries: 3 }
|
|
1864
|
+
*
|
|
1865
|
+
* const STATUSES = toConst(['active', 'pending', 'cancelled']);
|
|
1866
|
+
* // Type: readonly ["active", "pending", "cancelled"]
|
|
1867
|
+
* ```
|
|
1868
|
+
*
|
|
1869
|
+
* @public
|
|
1870
|
+
*/
|
|
1871
|
+
export declare function toConst<T>(value: T): DeepReadonly<T>;
|
|
1872
|
+
|
|
1771
1873
|
/* Excluded from this release type: _translateArray */
|
|
1772
1874
|
|
|
1773
1875
|
/* Excluded from this release type: _translateDateTime */
|