@volter/twin-stripe 2.0.38 → 3.0.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 (442) hide show
  1. package/README.md +82 -207
  2. package/dist/generated/pack-facts.json +94 -0
  3. package/dist/spec/SOURCE.md +14 -0
  4. package/dist/spec/fixtures3.json.gz +0 -0
  5. package/dist/spec/openapi.json.gz +0 -0
  6. package/dist/spec/patches.json +34 -0
  7. package/dist/spec/sources.json +378 -0
  8. package/dist/src/cli.js +12 -30
  9. package/dist/src/engine/after-payment.d.ts +9 -0
  10. package/dist/src/engine/after-payment.js +28 -0
  11. package/dist/src/engine/apps-secrets.d.ts +1 -0
  12. package/dist/src/engine/apps-secrets.js +3 -0
  13. package/dist/src/engine/balance.d.ts +5 -0
  14. package/dist/src/engine/balance.js +15 -0
  15. package/dist/src/engine/billing.d.ts +5 -0
  16. package/dist/src/engine/billing.js +6 -0
  17. package/dist/src/engine/charges.d.ts +6 -0
  18. package/dist/src/engine/charges.js +13 -0
  19. package/dist/src/engine/checkout.d.ts +24 -0
  20. package/dist/src/engine/checkout.js +30 -0
  21. package/dist/src/engine/common.d.ts +19 -0
  22. package/dist/src/engine/common.js +32 -0
  23. package/dist/src/{screens → engine}/connect-settings.d.ts +1 -7
  24. package/dist/src/engine/connect-settings.js +26 -0
  25. package/dist/src/engine/connect.d.ts +66 -0
  26. package/dist/src/engine/connect.js +189 -0
  27. package/dist/src/engine/coupons.d.ts +0 -0
  28. package/dist/src/engine/coupons.js +5 -0
  29. package/dist/src/engine/credit-notes.d.ts +1 -0
  30. package/dist/src/engine/credit-notes.js +5 -0
  31. package/dist/src/engine/customers.d.ts +12 -0
  32. package/dist/src/engine/customers.js +30 -0
  33. package/dist/src/engine/display.d.ts +14 -0
  34. package/dist/src/engine/display.js +16 -0
  35. package/dist/src/engine/disputes.d.ts +0 -0
  36. package/dist/src/engine/disputes.js +9 -0
  37. package/dist/src/engine/entitlements.d.ts +1 -0
  38. package/dist/src/engine/entitlements.js +4 -0
  39. package/dist/src/engine/ephemeral-keys.d.ts +0 -0
  40. package/dist/src/engine/ephemeral-keys.js +4 -0
  41. package/dist/src/engine/files.d.ts +18 -0
  42. package/dist/src/engine/files.js +33 -0
  43. package/dist/src/engine/front.d.ts +5 -0
  44. package/dist/src/engine/front.js +25 -0
  45. package/dist/src/engine/invoices.d.ts +24 -0
  46. package/dist/src/engine/invoices.js +57 -0
  47. package/dist/src/engine/issuing.d.ts +35 -0
  48. package/dist/src/engine/issuing.js +45 -0
  49. package/dist/src/engine/ledger.d.ts +9 -0
  50. package/dist/src/engine/ledger.js +9 -0
  51. package/dist/src/engine/oauth.d.ts +4 -0
  52. package/dist/src/engine/oauth.js +25 -0
  53. package/dist/src/engine/onboarding.d.ts +13 -0
  54. package/dist/src/engine/onboarding.js +42 -0
  55. package/dist/src/{stripe-params.d.ts → engine/params.d.ts} +20 -3
  56. package/dist/src/{stripe-params.js → engine/params.js} +7 -60
  57. package/dist/src/engine/payment-intents.d.ts +10 -0
  58. package/dist/src/engine/payment-intents.js +27 -0
  59. package/dist/src/engine/payment-links.d.ts +1 -0
  60. package/dist/src/engine/payment-links.js +5 -0
  61. package/dist/src/engine/payment-methods.d.ts +16 -0
  62. package/dist/src/engine/payment-methods.js +22 -0
  63. package/dist/src/engine/plans.d.ts +6 -0
  64. package/dist/src/engine/plans.js +26 -0
  65. package/dist/src/engine/platform.d.ts +39 -0
  66. package/dist/src/engine/platform.js +34 -0
  67. package/dist/src/engine/products.d.ts +0 -0
  68. package/dist/src/engine/products.js +4 -0
  69. package/dist/src/engine/radar.d.ts +2 -0
  70. package/dist/src/engine/radar.js +5 -0
  71. package/dist/src/engine/refunds.d.ts +1 -0
  72. package/dist/src/engine/refunds.js +28 -0
  73. package/dist/src/engine/renewals.d.ts +36 -0
  74. package/dist/src/engine/renewals.js +65 -0
  75. package/dist/src/engine/setup-intents.d.ts +1 -0
  76. package/dist/src/engine/setup-intents.js +4 -0
  77. package/dist/src/{stripe-twin.d.ts → engine/stripe.d.ts} +11 -39
  78. package/dist/src/{stripe-twin.js → engine/stripe.js} +25 -310
  79. package/dist/src/engine/subscription-schedules.d.ts +3 -0
  80. package/dist/src/engine/subscription-schedules.js +1 -0
  81. package/dist/src/engine/subscriptions.d.ts +12 -0
  82. package/dist/src/engine/subscriptions.js +31 -0
  83. package/dist/src/engine/tax.d.ts +7 -0
  84. package/dist/src/engine/tax.js +28 -0
  85. package/dist/src/engine/terminal.d.ts +4 -0
  86. package/dist/src/engine/terminal.js +20 -0
  87. package/dist/src/engine/test-clocks.d.ts +5 -0
  88. package/dist/src/engine/test-clocks.js +9 -0
  89. package/dist/src/engine/tokens.d.ts +7 -0
  90. package/dist/src/engine/tokens.js +20 -0
  91. package/dist/src/engine/transfers.d.ts +2 -0
  92. package/dist/src/engine/transfers.js +1 -0
  93. package/dist/src/engine/treasury.d.ts +23 -0
  94. package/dist/src/engine/treasury.js +45 -0
  95. package/dist/src/{stripe-version.js → engine/version.js} +4 -3
  96. package/dist/src/engine/webhook-endpoints.d.ts +1 -0
  97. package/dist/src/engine/webhook-endpoints.js +12 -0
  98. package/dist/src/engine/webhooks.d.ts +31 -0
  99. package/dist/src/engine/webhooks.js +68 -0
  100. package/dist/src/fetch.d.ts +2 -0
  101. package/dist/src/fetch.js +26 -0
  102. package/dist/src/generated/surface.gen.json +1 -1
  103. package/dist/src/generated/ui.gen.json +1 -1
  104. package/dist/src/index.d.ts +5 -14
  105. package/dist/src/index.js +8 -75
  106. package/dist/src/manifest.js +232 -758
  107. package/dist/src/screens/billing-portal.d.ts +3 -0
  108. package/dist/src/screens/{portal.js → billing-portal.js} +28 -54
  109. package/dist/src/screens/checkout.d.ts +2 -31
  110. package/dist/src/screens/checkout.js +32 -121
  111. package/dist/src/screens/connect-oauth.d.ts +3 -27
  112. package/dist/src/screens/connect-oauth.js +51 -132
  113. package/dist/src/screens/connect-onboarding.d.ts +3 -0
  114. package/dist/src/screens/{onboarding.js → connect-onboarding.js} +36 -102
  115. package/dist/src/screens/dashboard.d.ts +3 -0
  116. package/dist/src/screens/dashboard.js +117 -0
  117. package/dist/src/screens/shared.d.ts +27 -0
  118. package/dist/src/screens/shared.js +87 -0
  119. package/dist/src/screens/stripe-js.d.ts +3 -0
  120. package/dist/src/screens/stripe-js.js +135 -0
  121. package/dist/src/semantics/account_links.d.ts +2 -0
  122. package/dist/src/semantics/account_links.js +22 -0
  123. package/dist/src/semantics/accounts.d.ts +4 -0
  124. package/dist/src/semantics/accounts.js +38 -0
  125. package/dist/src/semantics/apps.d.ts +4 -0
  126. package/dist/src/semantics/{apps-secrets.js → apps.js} +14 -26
  127. package/dist/src/semantics/around.d.ts +2 -0
  128. package/dist/src/semantics/around.js +16 -0
  129. package/dist/src/semantics/balance.d.ts +2 -11
  130. package/dist/src/semantics/balance.js +3 -194
  131. package/dist/src/semantics/balance_transactions.d.ts +2 -0
  132. package/dist/src/semantics/balance_transactions.js +15 -0
  133. package/dist/src/semantics/billing_portal.d.ts +5 -0
  134. package/dist/src/semantics/billing_portal.js +42 -0
  135. package/dist/src/semantics/charges.d.ts +3 -28
  136. package/dist/src/semantics/charges.js +5 -202
  137. package/dist/src/semantics/checkout.d.ts +3 -20
  138. package/dist/src/semantics/checkout.js +8 -261
  139. package/dist/src/semantics/clock.d.ts +2 -0
  140. package/dist/src/semantics/clock.js +21 -0
  141. package/dist/src/semantics/coupons.d.ts +2 -6
  142. package/dist/src/semantics/coupons.js +2 -60
  143. package/dist/src/semantics/customers.d.ts +6 -6
  144. package/dist/src/semantics/customers.js +27 -387
  145. package/dist/src/semantics/disputes.d.ts +2 -2
  146. package/dist/src/semantics/disputes.js +3 -49
  147. package/dist/src/semantics/doors.d.ts +23 -0
  148. package/dist/src/semantics/doors.js +73 -0
  149. package/dist/src/semantics/entitlements.d.ts +2 -2
  150. package/dist/src/semantics/entitlements.js +5 -50
  151. package/dist/src/semantics/events.d.ts +12 -0
  152. package/dist/src/semantics/events.js +36 -0
  153. package/dist/src/semantics/index.d.ts +2 -0
  154. package/dist/src/semantics/index.js +107 -0
  155. package/dist/src/semantics/invoice_payments.d.ts +2 -0
  156. package/dist/src/semantics/invoice_payments.js +12 -0
  157. package/dist/src/semantics/invoiceitems.d.ts +3 -0
  158. package/dist/src/semantics/invoiceitems.js +59 -0
  159. package/dist/src/semantics/invoices.d.ts +16 -18
  160. package/dist/src/semantics/invoices.js +118 -444
  161. package/dist/src/semantics/payment_intents.d.ts +4 -0
  162. package/dist/src/semantics/payment_intents.js +79 -0
  163. package/dist/src/semantics/payment_methods.d.ts +5 -0
  164. package/dist/src/semantics/payment_methods.js +39 -0
  165. package/dist/src/semantics/payouts.d.ts +2 -0
  166. package/dist/src/semantics/payouts.js +21 -0
  167. package/dist/src/semantics/prices.d.ts +4 -0
  168. package/dist/src/semantics/prices.js +37 -0
  169. package/dist/src/semantics/products.d.ts +6 -2
  170. package/dist/src/semantics/products.js +15 -130
  171. package/dist/src/semantics/promotion_codes.d.ts +3 -0
  172. package/dist/src/semantics/promotion_codes.js +35 -0
  173. package/dist/src/semantics/radar.d.ts +2 -2
  174. package/dist/src/semantics/radar.js +5 -74
  175. package/dist/src/semantics/refunds.d.ts +3 -9
  176. package/dist/src/semantics/refunds.js +6 -192
  177. package/dist/src/semantics/setup_intents.d.ts +3 -0
  178. package/dist/src/semantics/{setup-intents.js → setup_intents.js} +10 -53
  179. package/dist/src/semantics/shared.d.ts +822 -47
  180. package/dist/src/semantics/shared.js +3044 -78
  181. package/dist/src/semantics/states.d.ts +531 -0
  182. package/dist/src/semantics/states.js +852 -0
  183. package/dist/src/semantics/subscription_items.d.ts +5 -0
  184. package/dist/src/semantics/subscription_items.js +55 -0
  185. package/dist/src/semantics/subscription_schedules.d.ts +4 -0
  186. package/dist/src/semantics/subscription_schedules.js +60 -0
  187. package/dist/src/semantics/subscriptions.d.ts +7 -11
  188. package/dist/src/semantics/subscriptions.js +44 -415
  189. package/dist/src/semantics/test_helpers.d.ts +6 -0
  190. package/dist/src/semantics/{test-clocks.js → test_helpers.js} +14 -40
  191. package/dist/src/semantics/transfers.d.ts +2 -2
  192. package/dist/src/semantics/transfers.js +6 -101
  193. package/dist/src/server.d.ts +7 -0
  194. package/dist/src/server.js +7 -0
  195. package/generated/pack-facts.json +94 -0
  196. package/package.json +10 -20
  197. package/spec/SOURCE.md +14 -0
  198. package/spec/fixtures3.json.gz +0 -0
  199. package/spec/openapi.json.gz +0 -0
  200. package/spec/patches.json +34 -0
  201. package/spec/sources.json +378 -0
  202. package/src/cli.ts +12 -26
  203. package/src/engine/after-payment.ts +31 -0
  204. package/src/engine/apps-secrets.ts +4 -0
  205. package/src/engine/balance.ts +33 -0
  206. package/src/engine/billing.ts +16 -0
  207. package/src/engine/charges.ts +19 -0
  208. package/src/engine/checkout.ts +40 -0
  209. package/src/engine/common.ts +47 -0
  210. package/src/engine/connect-settings.ts +23 -0
  211. package/src/engine/connect.ts +184 -0
  212. package/src/engine/coupons.ts +5 -0
  213. package/src/engine/credit-notes.ts +6 -0
  214. package/src/engine/customers.ts +35 -0
  215. package/src/engine/display.ts +19 -0
  216. package/src/engine/disputes.ts +9 -0
  217. package/src/engine/entitlements.ts +5 -0
  218. package/src/engine/ephemeral-keys.ts +3 -0
  219. package/src/engine/files.ts +41 -0
  220. package/src/engine/front.ts +31 -0
  221. package/src/engine/invoices.ts +71 -0
  222. package/src/engine/issuing.ts +61 -0
  223. package/src/engine/ledger.ts +50 -0
  224. package/src/engine/oauth.ts +19 -0
  225. package/src/engine/onboarding.ts +54 -0
  226. package/src/{stripe-params.ts → engine/params.ts} +8 -56
  227. package/src/engine/payment-intents.ts +33 -0
  228. package/src/engine/payment-links.ts +6 -0
  229. package/src/engine/payment-methods.ts +25 -0
  230. package/src/engine/plans.ts +42 -0
  231. package/src/engine/platform.ts +47 -0
  232. package/src/engine/products.ts +3 -0
  233. package/src/engine/radar.ts +6 -0
  234. package/src/engine/refunds.ts +29 -0
  235. package/src/engine/renewals.ts +73 -0
  236. package/src/engine/setup-intents.ts +5 -0
  237. package/src/{stripe-twin.ts → engine/stripe.ts} +28 -323
  238. package/src/engine/subscription-schedules.ts +10 -0
  239. package/src/engine/subscriptions.ts +40 -0
  240. package/src/engine/tax.ts +39 -0
  241. package/src/engine/terminal.ts +23 -0
  242. package/src/engine/test-clocks.ts +11 -0
  243. package/src/engine/tokens.ts +22 -0
  244. package/src/engine/transfers.ts +23 -0
  245. package/src/engine/treasury.ts +47 -0
  246. package/src/{stripe-version.ts → engine/version.ts} +4 -3
  247. package/src/engine/webhook-endpoints.ts +14 -0
  248. package/src/engine/webhooks.ts +72 -0
  249. package/src/fetch.ts +27 -0
  250. package/src/generated/surface.gen.json +1 -1
  251. package/src/generated/ui.gen.json +1 -1
  252. package/src/index.ts +8 -116
  253. package/src/manifest.ts +234 -786
  254. package/src/screens/{portal.tsx → billing-portal.tsx} +32 -37
  255. package/src/screens/checkout.tsx +33 -95
  256. package/src/screens/connect-oauth.tsx +64 -88
  257. package/src/screens/{onboarding.tsx → connect-onboarding.tsx} +38 -82
  258. package/src/screens/dashboard.tsx +198 -0
  259. package/src/screens/shared.tsx +84 -0
  260. package/src/screens/stripe-js.ts +170 -0
  261. package/src/semantics/account_links.ts +21 -0
  262. package/src/semantics/accounts.ts +43 -0
  263. package/src/semantics/{apps-secrets.ts → apps.ts} +17 -32
  264. package/src/semantics/around.ts +20 -0
  265. package/src/semantics/balance.ts +6 -207
  266. package/src/semantics/balance_transactions.ts +20 -0
  267. package/src/semantics/billing_portal.ts +51 -0
  268. package/src/semantics/charges.ts +12 -211
  269. package/src/semantics/checkout.ts +13 -268
  270. package/src/semantics/clock.ts +26 -0
  271. package/src/semantics/coupons.ts +5 -67
  272. package/src/semantics/customers.ts +29 -392
  273. package/src/semantics/disputes.ts +9 -59
  274. package/src/semantics/doors.ts +80 -0
  275. package/src/semantics/entitlements.ts +9 -56
  276. package/src/semantics/events.ts +44 -0
  277. package/src/semantics/index.ts +111 -0
  278. package/src/semantics/invoice_payments.ts +18 -0
  279. package/src/semantics/invoiceitems.ts +59 -0
  280. package/src/semantics/invoices.ts +109 -443
  281. package/src/semantics/payment_intents.ts +83 -0
  282. package/src/semantics/payment_methods.ts +43 -0
  283. package/src/semantics/payouts.ts +23 -0
  284. package/src/semantics/prices.ts +42 -0
  285. package/src/semantics/products.ts +18 -142
  286. package/src/semantics/promotion_codes.ts +39 -0
  287. package/src/semantics/radar.ts +8 -77
  288. package/src/semantics/refunds.ts +9 -212
  289. package/src/semantics/setup_intents.ts +45 -0
  290. package/src/semantics/shared.ts +3092 -106
  291. package/src/semantics/states.ts +883 -0
  292. package/src/semantics/subscription_items.ts +54 -0
  293. package/src/semantics/subscription_schedules.ts +66 -0
  294. package/src/semantics/subscriptions.ts +49 -432
  295. package/src/semantics/{test-clocks.ts → test_helpers.ts} +23 -47
  296. package/src/semantics/transfers.ts +11 -131
  297. package/src/server.ts +8 -0
  298. package/client/dashboard-api.ts +0 -286
  299. package/client/stripe-mirror.css +0 -277
  300. package/client/stripe-mirror.tsx +0 -1559
  301. package/dist/client/dashboard-api.d.ts +0 -107
  302. package/dist/client/dashboard-api.js +0 -238
  303. package/dist/client/dashboard-api.ts +0 -286
  304. package/dist/client/stripe-mirror.bundle.js +0 -236
  305. package/dist/client/stripe-mirror.css +0 -277
  306. package/dist/client/stripe-mirror.d.ts +0 -134
  307. package/dist/client/stripe-mirror.js +0 -859
  308. package/dist/client/stripe-mirror.tsx +0 -1559
  309. package/dist/src/screens/connect-settings.js +0 -103
  310. package/dist/src/screens/consent-skin.d.ts +0 -4
  311. package/dist/src/screens/consent-skin.js +0 -18
  312. package/dist/src/screens/financial-connections.d.ts +0 -5
  313. package/dist/src/screens/financial-connections.js +0 -90
  314. package/dist/src/screens/identity.d.ts +0 -5
  315. package/dist/src/screens/identity.js +0 -86
  316. package/dist/src/screens/onboarding.d.ts +0 -13
  317. package/dist/src/screens/portal.d.ts +0 -5
  318. package/dist/src/screens/public-details.d.ts +0 -5
  319. package/dist/src/screens/public-details.js +0 -90
  320. package/dist/src/semantics/after-payment.d.ts +0 -22
  321. package/dist/src/semantics/after-payment.js +0 -99
  322. package/dist/src/semantics/apps-secrets.d.ts +0 -2
  323. package/dist/src/semantics/billing.d.ts +0 -2
  324. package/dist/src/semantics/billing.js +0 -220
  325. package/dist/src/semantics/connect.d.ts +0 -5
  326. package/dist/src/semantics/connect.js +0 -493
  327. package/dist/src/semantics/credit-notes.d.ts +0 -2
  328. package/dist/src/semantics/credit-notes.js +0 -172
  329. package/dist/src/semantics/ephemeral-keys.d.ts +0 -2
  330. package/dist/src/semantics/ephemeral-keys.js +0 -34
  331. package/dist/src/semantics/files.d.ts +0 -2
  332. package/dist/src/semantics/files.js +0 -125
  333. package/dist/src/semantics/issuing.d.ts +0 -13
  334. package/dist/src/semantics/issuing.js +0 -575
  335. package/dist/src/semantics/ledger.d.ts +0 -59
  336. package/dist/src/semantics/ledger.js +0 -200
  337. package/dist/src/semantics/payment-intents.d.ts +0 -18
  338. package/dist/src/semantics/payment-intents.js +0 -452
  339. package/dist/src/semantics/payment-links.d.ts +0 -2
  340. package/dist/src/semantics/payment-links.js +0 -133
  341. package/dist/src/semantics/payment-methods.d.ts +0 -20
  342. package/dist/src/semantics/payment-methods.js +0 -140
  343. package/dist/src/semantics/plans.d.ts +0 -5
  344. package/dist/src/semantics/plans.js +0 -121
  345. package/dist/src/semantics/platform.d.ts +0 -9
  346. package/dist/src/semantics/platform.js +0 -206
  347. package/dist/src/semantics/renewals.d.ts +0 -47
  348. package/dist/src/semantics/renewals.js +0 -281
  349. package/dist/src/semantics/setup-intents.d.ts +0 -2
  350. package/dist/src/semantics/subscription-schedules.d.ts +0 -2
  351. package/dist/src/semantics/subscription-schedules.js +0 -119
  352. package/dist/src/semantics/tax.d.ts +0 -2
  353. package/dist/src/semantics/tax.js +0 -197
  354. package/dist/src/semantics/terminal.d.ts +0 -5
  355. package/dist/src/semantics/terminal.js +0 -182
  356. package/dist/src/semantics/test-clocks.d.ts +0 -6
  357. package/dist/src/semantics/tokens.d.ts +0 -4
  358. package/dist/src/semantics/tokens.js +0 -44
  359. package/dist/src/semantics/treasury.d.ts +0 -2
  360. package/dist/src/semantics/treasury.js +0 -377
  361. package/dist/src/semantics/webhook-endpoints.d.ts +0 -3
  362. package/dist/src/semantics/webhook-endpoints.js +0 -85
  363. package/dist/src/stripe-budget.d.ts +0 -55
  364. package/dist/src/stripe-budget.js +0 -155
  365. package/dist/src/stripe-capabilities.d.ts +0 -3
  366. package/dist/src/stripe-capabilities.js +0 -5836
  367. package/dist/src/stripe-conformance.d.ts +0 -43
  368. package/dist/src/stripe-conformance.js +0 -105
  369. package/dist/src/stripe-connector.d.ts +0 -161
  370. package/dist/src/stripe-connector.js +0 -414
  371. package/dist/src/stripe-emit.d.ts +0 -2
  372. package/dist/src/stripe-emit.js +0 -145
  373. package/dist/src/stripe-events.d.ts +0 -93
  374. package/dist/src/stripe-events.js +0 -392
  375. package/dist/src/stripe-js.d.ts +0 -4
  376. package/dist/src/stripe-js.js +0 -70
  377. package/dist/src/stripe-mirror-ui.d.ts +0 -15
  378. package/dist/src/stripe-mirror-ui.js +0 -87
  379. package/dist/src/stripe-perform-harness.d.ts +0 -9
  380. package/dist/src/stripe-perform-harness.js +0 -26
  381. package/dist/src/stripe-server.d.ts +0 -33
  382. package/dist/src/stripe-server.js +0 -429
  383. package/dist/src/stripe-shared.d.ts +0 -109
  384. package/dist/src/stripe-shared.js +0 -276
  385. package/dist/src/stripe-ui-conformance.d.ts +0 -5
  386. package/dist/src/stripe-ui-conformance.js +0 -79
  387. package/dist/src/stripe-ui-structure.d.ts +0 -3
  388. package/dist/src/stripe-ui-structure.js +0 -168
  389. package/dist/test-fixtures/stripe-known-deviations.json +0 -110
  390. package/dist/test-fixtures/stripe-openapi-operations.SOURCE.md +0 -14
  391. package/dist/test-fixtures/stripe-openapi-operations.json +0 -4717
  392. package/dist/test-fixtures/stripe-schemas.SOURCE.md +0 -35
  393. package/dist/test-fixtures/stripe-schemas.json +0 -3813
  394. package/src/screens/connect-settings.tsx +0 -121
  395. package/src/screens/consent-skin.ts +0 -20
  396. package/src/screens/financial-connections.tsx +0 -101
  397. package/src/screens/identity.tsx +0 -96
  398. package/src/screens/public-details.tsx +0 -105
  399. package/src/semantics/after-payment.ts +0 -118
  400. package/src/semantics/billing.ts +0 -216
  401. package/src/semantics/connect.ts +0 -487
  402. package/src/semantics/credit-notes.ts +0 -168
  403. package/src/semantics/ephemeral-keys.ts +0 -34
  404. package/src/semantics/files.ts +0 -143
  405. package/src/semantics/issuing.ts +0 -590
  406. package/src/semantics/ledger.ts +0 -253
  407. package/src/semantics/payment-intents.ts +0 -463
  408. package/src/semantics/payment-links.ts +0 -148
  409. package/src/semantics/payment-methods.ts +0 -145
  410. package/src/semantics/plans.ts +0 -131
  411. package/src/semantics/platform.ts +0 -220
  412. package/src/semantics/renewals.ts +0 -279
  413. package/src/semantics/setup-intents.ts +0 -87
  414. package/src/semantics/subscription-schedules.ts +0 -129
  415. package/src/semantics/tax.ts +0 -220
  416. package/src/semantics/terminal.ts +0 -195
  417. package/src/semantics/tokens.ts +0 -52
  418. package/src/semantics/treasury.ts +0 -383
  419. package/src/semantics/webhook-endpoints.ts +0 -87
  420. package/src/stripe-budget.ts +0 -181
  421. package/src/stripe-capabilities.ts +0 -5651
  422. package/src/stripe-conformance.ts +0 -124
  423. package/src/stripe-connector.ts +0 -462
  424. package/src/stripe-emit.ts +0 -157
  425. package/src/stripe-events.ts +0 -434
  426. package/src/stripe-js.ts +0 -70
  427. package/src/stripe-mirror-ui.ts +0 -90
  428. package/src/stripe-perform-harness.ts +0 -29
  429. package/src/stripe-server.ts +0 -393
  430. package/src/stripe-shared.ts +0 -297
  431. package/src/stripe-ui-conformance.ts +0 -88
  432. package/src/stripe-ui-structure.ts +0 -182
  433. package/test-fixtures/stripe-known-deviations.json +0 -110
  434. package/test-fixtures/stripe-openapi-operations.json +0 -4717
  435. package/test-fixtures/stripe-schemas.json +0 -3813
  436. /package/dist/src/{screens → engine}/industries.d.ts +0 -0
  437. /package/dist/src/{screens → engine}/industries.js +0 -0
  438. /package/dist/src/{semantics → engine}/test-cards.d.ts +0 -0
  439. /package/dist/src/{semantics → engine}/test-cards.js +0 -0
  440. /package/dist/src/{stripe-version.d.ts → engine/version.d.ts} +0 -0
  441. /package/src/{screens → engine}/industries.ts +0 -0
  442. /package/src/{semantics → engine}/test-cards.ts +0 -0
@@ -1,51 +1,10 @@
1
- // Entitlements semantics: features (unique by lookup_key) that products grant, and the features a
2
- // customer is entitled to now, derived from its live subscriptions' products. Feature retrieve is
3
- // the derived core's.
4
- import type { Semantics, SemanticsContext } from '@volter/world-core';
5
- import { asBool, subscriptionItemPairs } from '../stripe-twin.ts';
6
- import { at, created, fail, list, newest, path, where, type Row, kept } from './shared.ts';
7
-
8
- const FEAT = 'entitlements.feature';
9
-
10
- /** A feature whose lookup_key an unarchived feature already has: "A unique key you provide as your own system identifier"
11
- * (docs.stripe.com/api/entitlements/feature/create). */
12
- function lookupKeyTaken(ctx: SemanticsContext, lookupKey: string): Response {
13
- return fail(ctx, `A feature with lookup_key '${lookupKey}' already exists.`, 400, 'resource_already_exists');
14
- }
15
-
16
- const create: Semantics = async (ctx) => {
17
- const params = ctx.params;
18
- if (typeof params.name !== 'string' || !params.name) return fail(ctx, 'Missing required param: name.', 400, 'parameter_missing');
19
- const lookupKey = typeof params.lookup_key === 'string' ? params.lookup_key : '';
20
- if (!lookupKey) return fail(ctx, 'Missing required param: lookup_key.', 400, 'parameter_missing');
21
- if (ctx.rowsRaw(FEAT, { withDeleted: true }).some((f) => f.lookup_key === lookupKey && !f._archived)) return lookupKeyTaken(ctx, lookupKey);
22
- return ctx.reply(
23
- await created(ctx, FEAT, {}, {
24
- name: params.name, lookup_key: lookupKey, active: true, livemode: false,
25
- metadata: params.metadata && typeof params.metadata === 'object' ? params.metadata : {},
26
- }),
27
- );
28
- };
29
-
30
- const listFeatures: Semantics = async (ctx) =>
31
- list(ctx, FEAT, where(ctx, newest(ctx, FEAT), {
32
- lookup_key: (f, v) => f.lookup_key === v,
33
- archived: (f, v) => asBool(kept(ctx, FEAT, f, '_archived')) === asBool(v),
34
- }));
35
-
36
- // name, active and metadata change
37
- const update: Semantics = async (ctx) => {
38
- const id = at(ctx, 'id');
39
- if (!ctx.get(FEAT, id)) return ctx.notFound(FEAT, id);
40
- const patch: Row = {};
41
- if (ctx.params.name !== undefined) patch.name = ctx.params.name;
42
- if (ctx.params.active !== undefined) {
43
- patch.active = asBool(ctx.params.active);
44
- patch._archived = undefined;
45
- }
46
- if (ctx.params.metadata !== undefined) patch.metadata = ctx.params.metadata;
47
- return ctx.reply(await ctx.write(FEAT, id, patch, 'entitlements_feature.update'));
48
- };
1
+ // Stripe's entitlements operations (docs/contributing/architecture.md, "What an author writes"): each handler over the
2
+ // handler contract's context, computing with the engine (../engine/).
3
+ import type { HandlerContext } from '@volter/world-core';
4
+ import type { Row } from '../engine/common.ts';
5
+ import { FEAT } from '../engine/entitlements.ts';
6
+ import { asBool, subscriptionItemPairs } from '../engine/stripe.ts';
7
+ import { at, created, fail, kept, list, lookupKeyTaken, newest, path, where } from './shared.ts';
49
8
 
50
9
  // a customer is entitled to every feature granted to a product its live subscriptions bill, as the product stood when
51
10
  // the subscription's current period began: "When a customer purchases or subscribes to a product with an attached
@@ -53,7 +12,7 @@ const update: Semantics = async (ctx) => {
53
12
  // create active entitlements for any product feature changes at the start of the next billing period"
54
13
  // (docs.stripe.com/billing/entitlements). Where the documentation stops and the twin decides: a feature removed from a
55
14
  // product is kept, the same way, until the next period begins.
56
- const activeEntitlements: Semantics = async (ctx) => {
15
+ export async function GetEntitlementsActiveEntitlements(ctx: HandlerContext): Promise<Response> {
57
16
  const customer = typeof ctx.params.customer === 'string' ? ctx.params.customer : '';
58
17
  if (!customer) return fail(ctx, 'Missing required param: customer.', 400, 'parameter_missing');
59
18
  if (!ctx.row('customer', customer, { withDeleted: true })) return fail(ctx, `No such customer: '${customer}'`, 404, 'resource_missing');
@@ -84,11 +43,5 @@ const activeEntitlements: Semantics = async (ctx) => {
84
43
  if (feat) data.push({ id: `ent_twin_${customer}_${featId}`, object: 'entitlements.active_entitlement', feature: featId, lookup_key: feat.lookup_key, livemode: false });
85
44
  }
86
45
  return ctx.reply({ object: 'list', url: path(ctx), has_more: false, data });
87
- };
46
+ }
88
47
 
89
- export const entitlements: Record<string, Semantics> = {
90
- PostEntitlementsFeatures: create,
91
- GetEntitlementsFeatures: listFeatures,
92
- PostEntitlementsFeaturesId: update,
93
- GetEntitlementsActiveEntitlements: activeEntitlements,
94
- };
@@ -0,0 +1,44 @@
1
+ // Stripe's Events API (the events family: the account's stored events, which the kernel keeps as each is sent), and how
2
+ // Stripe renders the events its writes send (`data` and `values`, bound in the manifest's `events`).
3
+ import type { EventWrite, HandlerContext, WriteHookContext } from '@volter/world-core';
4
+ import { inRange } from '../engine/common.ts';
5
+ import { planOf } from '../engine/plans.ts';
6
+ import { embedIssuingAuthorizationCard, isValidApiVersion, PLATFORM_ACCOUNT_ID, TWIN_API_VERSION } from '../engine/stripe.ts';
7
+ import { render } from '../engine/version.ts';
8
+ import { at, connectionRevoked, finder, list, newest, ownEvent, where } from './shared.ts';
9
+
10
+ // ── the events Stripe's writes send (the manifest's `events`: ./shared.ts STRIPE_EVENTS) ──
11
+
12
+ /** An event's `data`: the object the write concerns, as Stripe sends it in the event's API version. A plan is stored as
13
+ * the recurring price it is, and its own events carry the plan object; an Issuing authorization carries its full card;
14
+ * the balance notice the drain writes carries the account's Balance. */
15
+ export function data(ctx: WriteHookContext, write: EventWrite): Record<string, unknown> {
16
+ const object = write.storedType === '_balance_notice' ? (write.body.balance as Record<string, unknown>)
17
+ : write.storedType === 'price' && write.operation.startsWith('plan.') ? planOf(write.body)
18
+ : write.storedType === 'issuing_authorization' ? embedIssuingAuthorizationCard({ ...write.body }, finder(ctx))
19
+ : write.body;
20
+ return { object: render(object, eventVersion(write)) as Record<string, unknown> };
21
+ }
22
+
23
+ /** An event's further envelope values: the connected account it is about ("Each event for a connected account contains
24
+ * a top-level `account` property that identifies the connected account", docs.stripe.com/connect/webhooks) — the
25
+ * account a request acts as (Stripe-Account), a connected account's own account.updated, or the account whose books the
26
+ * written row is kept on (its `_account`) — and the API version it is rendered in. A connected account whose OAuth
27
+ * connection was revoked "can't be accessed by your platform" (docs.stripe.com/connect/oauth-reference): its events are
28
+ * kept but no longer sent (`$send: false`), except the account.application.deauthorized that says so. */
29
+ export function values(ctx: WriteHookContext, write: EventWrite, type: string): Record<string, unknown> {
30
+ const id = write.body.id;
31
+ const kept = typeof id === 'string' ? ctx.rowsRaw(write.storedType, { withDeleted: true }).find((r) => r.id === id)?._account : undefined;
32
+ const account = write.request?.headers.get('stripe-account')
33
+ ?? (write.storedType === 'account' && typeof id === 'string' && id !== PLATFORM_ACCOUNT_ID ? id : undefined)
34
+ ?? (write.storedType === '_balance_notice' && typeof write.body.account === 'string' ? write.body.account : undefined)
35
+ ?? (typeof kept === 'string' ? kept : undefined);
36
+ const withheld = account !== undefined && type !== 'account.application.deauthorized' && connectionRevoked(ctx, account);
37
+ return { $account: account, $version: eventVersion(write), ...(withheld ? { $send: false } : {}) };
38
+ }
39
+
40
+ /** The API version an event is rendered in: the one the writing request pinned, when it is one, else the served one. */
41
+ const eventVersion = (write: EventWrite): string => {
42
+ const pinned = write.request?.headers.get('stripe-version');
43
+ return pinned && isValidApiVersion(pinned) ? pinned : TWIN_API_VERSION;
44
+ };
@@ -0,0 +1,111 @@
1
+ // GENERATED by scripts/create-pack.ts --index: the handler map, by operationId, from the families' files (each
2
+ // handler named as its operation). Do not edit; add a handler to its family's file and generate again.
3
+ import type { Handler } from '@volter/world-core';
4
+ import * as account_links from './account_links.ts';
5
+ import * as accounts from './accounts.ts';
6
+ import * as apps from './apps.ts';
7
+ import * as balance from './balance.ts';
8
+ import * as balance_transactions from './balance_transactions.ts';
9
+ import * as billing_portal from './billing_portal.ts';
10
+ import * as charges from './charges.ts';
11
+ import * as checkout from './checkout.ts';
12
+ import * as coupons from './coupons.ts';
13
+ import * as customers from './customers.ts';
14
+ import * as disputes from './disputes.ts';
15
+ import * as entitlements from './entitlements.ts';
16
+ import * as invoice_payments from './invoice_payments.ts';
17
+ import * as invoiceitems from './invoiceitems.ts';
18
+ import * as invoices from './invoices.ts';
19
+ import * as payment_intents from './payment_intents.ts';
20
+ import * as payment_methods from './payment_methods.ts';
21
+ import * as payouts from './payouts.ts';
22
+ import * as prices from './prices.ts';
23
+ import * as products from './products.ts';
24
+ import * as promotion_codes from './promotion_codes.ts';
25
+ import * as radar from './radar.ts';
26
+ import * as refunds from './refunds.ts';
27
+ import * as setup_intents from './setup_intents.ts';
28
+ import * as subscription_items from './subscription_items.ts';
29
+ import * as subscription_schedules from './subscription_schedules.ts';
30
+ import * as subscriptions from './subscriptions.ts';
31
+ import * as test_helpers from './test_helpers.ts';
32
+ import * as transfers from './transfers.ts';
33
+
34
+ export const stripeSemantics: Record<string, Handler> = {
35
+ DeleteInvoiceitemsInvoiceitem: invoiceitems.DeleteInvoiceitemsInvoiceitem,
36
+ DeleteInvoicesInvoice: invoices.DeleteInvoicesInvoice,
37
+ DeleteProductsId: products.DeleteProductsId,
38
+ DeleteSubscriptionItemsItem: subscription_items.DeleteSubscriptionItemsItem,
39
+ DeleteSubscriptionsSubscriptionExposedId: subscriptions.DeleteSubscriptionsSubscriptionExposedId,
40
+ DeleteTestHelpersTestClocksTestClock: test_helpers.DeleteTestHelpersTestClocksTestClock,
41
+ GetAccountsAccountExternalAccounts: accounts.GetAccountsAccountExternalAccounts,
42
+ GetAppsSecretsFind: apps.GetAppsSecretsFind,
43
+ GetBalance: balance.GetBalance,
44
+ GetBalanceTransactions: balance_transactions.GetBalanceTransactions,
45
+ GetBillingPortalConfigurations: billing_portal.GetBillingPortalConfigurations,
46
+ GetCharges: charges.GetCharges,
47
+ GetChargesCharge: charges.GetChargesCharge,
48
+ GetCustomersCustomer: customers.GetCustomersCustomer,
49
+ GetCustomersCustomerPaymentMethods: customers.GetCustomersCustomerPaymentMethods,
50
+ GetCustomersSearch: customers.GetCustomersSearch,
51
+ GetDisputesDispute: disputes.GetDisputesDispute,
52
+ GetEntitlementsActiveEntitlements: entitlements.GetEntitlementsActiveEntitlements,
53
+ GetInvoicePayments: invoice_payments.GetInvoicePayments,
54
+ GetInvoicesInvoice: invoices.GetInvoicesInvoice,
55
+ GetInvoicesInvoiceLines: invoices.GetInvoicesInvoiceLines,
56
+ GetPaymentMethodsPaymentMethod: payment_methods.GetPaymentMethodsPaymentMethod,
57
+ GetPrices: prices.GetPrices,
58
+ GetPricesPrice: prices.GetPricesPrice,
59
+ GetProducts: products.GetProducts,
60
+ GetProductsSearch: products.GetProductsSearch,
61
+ GetPromotionCodes: promotion_codes.GetPromotionCodes,
62
+ GetRefundsRefund: refunds.GetRefundsRefund,
63
+ GetSubscriptionItemsItem: subscription_items.GetSubscriptionItemsItem,
64
+ GetSubscriptionSchedulesSchedule: subscription_schedules.GetSubscriptionSchedulesSchedule,
65
+ GetSubscriptions: subscriptions.GetSubscriptions,
66
+ GetSubscriptionsSearch: subscriptions.GetSubscriptionsSearch,
67
+ GetSubscriptionsSubscriptionExposedId: subscriptions.GetSubscriptionsSubscriptionExposedId,
68
+ PostAccountLinks: account_links.PostAccountLinks,
69
+ PostAccounts: accounts.PostAccounts,
70
+ PostAccountsAccountLoginLinks: accounts.PostAccountsAccountLoginLinks,
71
+ PostAppsSecrets: apps.PostAppsSecrets,
72
+ PostAppsSecretsDelete: apps.PostAppsSecretsDelete,
73
+ PostBillingPortalConfigurations: billing_portal.PostBillingPortalConfigurations,
74
+ PostBillingPortalConfigurationsConfiguration: billing_portal.PostBillingPortalConfigurationsConfiguration,
75
+ PostBillingPortalSessions: billing_portal.PostBillingPortalSessions,
76
+ PostCheckoutSessions: checkout.PostCheckoutSessions,
77
+ PostCheckoutSessionsSessionExpire: checkout.PostCheckoutSessionsSessionExpire,
78
+ PostCoupons: coupons.PostCoupons,
79
+ PostCustomers: customers.PostCustomers,
80
+ PostCustomersCustomerBalanceTransactions: customers.PostCustomersCustomerBalanceTransactions,
81
+ PostInvoiceitems: invoiceitems.PostInvoiceitems,
82
+ PostInvoices: invoices.PostInvoices,
83
+ PostInvoicesCreatePreview: invoices.PostInvoicesCreatePreview,
84
+ PostInvoicesInvoiceFinalize: invoices.PostInvoicesInvoiceFinalize,
85
+ PostInvoicesInvoicePay: invoices.PostInvoicesInvoicePay,
86
+ PostInvoicesInvoiceSend: invoices.PostInvoicesInvoiceSend,
87
+ PostInvoicesInvoiceVoid: invoices.PostInvoicesInvoiceVoid,
88
+ PostPaymentIntents: payment_intents.PostPaymentIntents,
89
+ PostPaymentIntentsIntentCancel: payment_intents.PostPaymentIntentsIntentCancel,
90
+ PostPaymentIntentsIntentConfirm: payment_intents.PostPaymentIntentsIntentConfirm,
91
+ PostPaymentMethods: payment_methods.PostPaymentMethods,
92
+ PostPaymentMethodsPaymentMethodAttach: payment_methods.PostPaymentMethodsPaymentMethodAttach,
93
+ PostPaymentMethodsPaymentMethodDetach: payment_methods.PostPaymentMethodsPaymentMethodDetach,
94
+ PostPayouts: payouts.PostPayouts,
95
+ PostPrices: prices.PostPrices,
96
+ PostProducts: products.PostProducts,
97
+ PostPromotionCodes: promotion_codes.PostPromotionCodes,
98
+ PostRadarValueListItems: radar.PostRadarValueListItems,
99
+ PostRefunds: refunds.PostRefunds,
100
+ PostSetupIntents: setup_intents.PostSetupIntents,
101
+ PostSetupIntentsIntentConfirm: setup_intents.PostSetupIntentsIntentConfirm,
102
+ PostSubscriptionItems: subscription_items.PostSubscriptionItems,
103
+ PostSubscriptionItemsItem: subscription_items.PostSubscriptionItemsItem,
104
+ PostSubscriptionSchedules: subscription_schedules.PostSubscriptionSchedules,
105
+ PostSubscriptionSchedulesScheduleRelease: subscription_schedules.PostSubscriptionSchedulesScheduleRelease,
106
+ PostSubscriptions: subscriptions.PostSubscriptions,
107
+ PostSubscriptionsSubscriptionExposedId: subscriptions.PostSubscriptionsSubscriptionExposedId,
108
+ PostTestHelpersTestClocks: test_helpers.PostTestHelpersTestClocks,
109
+ PostTestHelpersTestClocksTestClockAdvance: test_helpers.PostTestHelpersTestClocksTestClockAdvance,
110
+ PostTransfers: transfers.PostTransfers,
111
+ };
@@ -0,0 +1,18 @@
1
+ // Stripe's invoice_payments operations (docs/contributing/architecture.md, "What an author writes"): each handler over the
2
+ // handler contract's context, computing with the engine (../engine/).
3
+ import type { HandlerContext } from '@volter/world-core';
4
+ import type { Row } from '../engine/common.ts';
5
+ import { INV, invoicePayment } from '../engine/invoices.ts';
6
+ import { at, fail, list, newest } from './shared.ts';
7
+
8
+ export async function GetInvoicePayments(ctx: HandlerContext): Promise<Response> {
9
+ const p = ctx.params;
10
+ const wanted = (p.payment as Row | undefined)?.payment_intent;
11
+ const items = newest(ctx, INV)
12
+ .filter((inv) => typeof p.invoice !== 'string' || inv.id === p.invoice)
13
+ .map(invoicePayment).filter((x): x is Row => !!x)
14
+ .filter((x) => typeof wanted !== 'string' || (x.payment as Row).payment_intent === wanted)
15
+ .filter((x) => typeof p.status !== 'string' || x.status === p.status);
16
+ return list(ctx, 'invoice_payment', items);
17
+ }
18
+
@@ -0,0 +1,59 @@
1
+ // Stripe's invoiceitems operations (docs/contributing/architecture.md, "What an author writes"): each handler over the
2
+ // handler contract's context, computing with the engine (../engine/).
3
+ import type { HandlerContext } from '@volter/world-core';
4
+ import type { Row } from '../engine/common.ts';
5
+ import { INV, linesOf } from '../engine/invoices.ts';
6
+ import { nowUnix } from '../engine/stripe.ts';
7
+ import { at, created, fail, invoiceMissing, itemMissing, pricedItem, resyncDraftLines, writeLines } from './shared.ts';
8
+
9
+ // an item is deleted only while its invoice is still editable
10
+ export async function DeleteInvoiceitemsInvoiceitem(ctx: HandlerContext): Promise<Response> {
11
+ const id = at(ctx, 'invoiceitem');
12
+ const it = ctx.get('invoiceitem', id);
13
+ if (!it) return itemMissing(ctx, id);
14
+ const onInvoice = typeof it.invoice === 'string' ? ctx.get(INV, it.invoice) : undefined;
15
+ if (onInvoice && onInvoice.status !== 'draft') return fail(ctx, 'You cannot delete an invoice item that is attached to an invoice that is no longer editable.', 400, 'invoice_not_editable');
16
+ await ctx.write('invoiceitem', id, { deleted: true }, 'invoiceitem.delete');
17
+ if (typeof it.invoice === 'string') await resyncDraftLines(ctx, it.invoice);
18
+ return ctx.reply({ id, object: 'invoiceitem', deleted: true });
19
+ }
20
+
21
+ export async function PostInvoiceitems(ctx: HandlerContext): Promise<Response> {
22
+ const params = ctx.params;
23
+ const now = Number(nowUnix(ctx.occurredAt));
24
+ const qty = Number(params.quantity) || 1;
25
+ // the served version names the price in `pricing[price]` ("The pricing information for the invoice item", the served
26
+ // spec); an older version sends `price`. It is kept as the item's price, which the answer renders as `pricing`
27
+ // (../engine/version.ts)
28
+ const { pricing: pricingParam, ...stored } = params;
29
+ const given = (pricingParam as Row | undefined)?.price;
30
+ const priceRef = typeof given === 'string' && given ? given : typeof params.price === 'string' ? params.price : '';
31
+ const priced = priceRef ? pricedItem(ctx, priceRef, qty) : undefined;
32
+ if (priced instanceof Response) return priced;
33
+ const resolvedAmount = priced?.amount;
34
+ let resolvedCurrency = priced?.currency;
35
+ // only a draft invoice takes new items
36
+ const invoiceRef = typeof params.invoice === 'string' ? params.invoice : '';
37
+ let target: Row | undefined;
38
+ if (invoiceRef) {
39
+ target = ctx.get(INV, invoiceRef);
40
+ if (!target) return invoiceMissing(ctx, invoiceRef);
41
+ if (target.status !== 'draft') return fail(ctx, `This invoice cannot have invoice items added because it has status ${String(target.status)}.`, 400, 'invoice_not_editable');
42
+ if (resolvedCurrency === undefined && typeof target.currency === 'string') resolvedCurrency = target.currency;
43
+ }
44
+ // an invoice item is dated by `date`, not `created`; its currency is the price's, else the invoice's
45
+ const item = await created(ctx, 'invoiceitem', { ...stored, ...(priceRef ? { price: priceRef } : {}) }, {
46
+ livemode: false, discountable: true, proration: false, quantity: qty, quantity_decimal: String(qty),
47
+ period: { start: now, end: now }, currency: resolvedCurrency ?? 'usd',
48
+ ...(resolvedAmount !== undefined ? { amount: resolvedAmount } : {}),
49
+ }, { timeField: 'date' });
50
+ if (target) {
51
+ await writeLines(ctx, invoiceRef, [...linesOf(target), {
52
+ id: `il_${String(item.id)}`, object: 'line_item', type: 'invoiceitem', amount: Number(item.amount) || 0, currency: String(target.currency ?? item.currency ?? 'usd'),
53
+ quantity: qty, proration: false, invoice_item: item.id, price: item.price ?? null,
54
+ period: item.period ?? { start: now, end: now }, description: (item.description as string) ?? null,
55
+ }]);
56
+ }
57
+ return ctx.reply(item);
58
+ }
59
+