@volter/twin-stripe 2.0.37 → 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
@@ -0,0 +1,3 @@
1
+ import type { HandlerContext } from '@volter/world-core';
2
+ /** billing.stripe.com's portal pages, or undefined for any other request. */
3
+ export declare function screen(ctx: HandlerContext): Promise<Response>;
@@ -1,35 +1,11 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- // STRIPE'S CUSTOMER PORTAL — a hosted flow (docs/contributing/architecture.md, "Screens"): an application creates
3
- // a portal session for its customer and sends them to the session's `url` at billing.stripe.com/p/session/{id};
4
- // there the customer sees their plans, payment method, billing details and invoices, and makes the moves the
5
- // portal configuration allows, then returns to return_url (docs.stripe.com/customer-management). Canceling is the
6
- // customer's own move (the subscription machine's external actor): at the period's end by default, or at once
7
- // when the configuration's subscription_cancel.mode says immediately, and a plan set to cancel can be renewed.
8
- // Each move goes through the same handler context the API's handlers use, so the application sees it as it
9
- // would from Stripe: on the subscription, and in its events. Authored from @volter/world-ui's portal piece under
10
- // Stripe's skin; nothing of Stripe's page is copied.
11
- //
12
- // The customer also replaces their card, which becomes the default for their invoices and subscriptions, and pays
13
- // an open invoice with it, which makes a subscription waiting on it (past_due) active again
14
- // (docs.stripe.com/customer-management/configure-portal: payment_method_update, invoice_history).
15
- //
16
- // Where the documentation stops and the twin decides: a session's configuration that the World never created
17
- // (the account's default) enables cancellation at period end, updating the payment method and invoice history;
18
- // changing the plan from the portal is not offered yet. A new card is saved without a charge, so a card that
19
- // declines only when charged (4000000000000341) is saved and declines when the invoice is paid.
20
- import { semanticsContext } from '@volter/world-core';
21
2
  import { flowPage, Portal, PORTAL_CSS } from '@volter/world-ui';
22
- import surface from '../generated/surface.gen.json' with { type: 'json' };
23
- import { manifest } from "../manifest.js";
24
- import { payerOf, payOpenInvoice } from "../semantics/renewals.js";
25
- import { afterSuccessOf } from "../semantics/after-payment.js";
26
- import { created } from "../semantics/shared.js";
27
- import { publicBusinessName } from "../stripe-shared.js";
28
- import { declineFor, paymentMethodSubObject, PLATFORM_ACCOUNT_ID } from "../stripe-twin.js";
29
- import { cardAnswer, COUNTRIES, money } from "./checkout.js";
30
- import { formOf } from "./consent-skin.js";
3
+ import { publicBusinessName } from "../engine/display.js";
4
+ import { declineFor, nowUnix, paymentMethodSubObject, PLATFORM_ACCOUNT_ID } from "../engine/stripe.js";
5
+ import { cardAnswer, COUNTRIES, formOf, money, notFound } from "./shared.js";
6
+ import { afterSuccessOf, created, payerOf, payOpenInvoice } from "../semantics/shared.js";
31
7
  const SUB = 'subscription';
32
- const PORTAL_OPERATION = surface.operations.find((o) => o.id === 'PostBillingPortalSessions');
8
+ const PORTAL_OPERATION = { id: 'PostBillingPortalSessions' };
33
9
  // Stripe's skin: its type, its purple accent, the merchant's side tinted.
34
10
  const SKIN = `
35
11
  body { color: #1a1a1a; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Ubuntu, sans-serif; }
@@ -100,7 +76,7 @@ function page(ctx, id, session, problem) {
100
76
  }))
101
77
  : [];
102
78
  const back = typeof session.return_url === 'string' ? session.return_url : undefined;
103
- // the portal shows the public business name (stripe-shared.ts, publicBusinessName) of the session's on_behalf_of
79
+ // the portal shows the public business name (../engine/display.ts, publicBusinessName) of the session's on_behalf_of
104
80
  // account ("Use the Accounts API to modify the on_behalf_of account's branding settings, which the portal displays",
105
81
  // docs.stripe.com/api/customer_portal/sessions/object), else of the account it was made on (Stripe-Account), else the
106
82
  // platform's
@@ -140,7 +116,7 @@ async function move(ctx, id, session, subscription, kind) {
140
116
  const features = featuresOf(ctx, session);
141
117
  if (!features.cancel.enabled)
142
118
  return gone();
143
- const now = Number(ctx.now());
119
+ const now = nowUnix(ctx.occurredAt);
144
120
  const details = { comment: null, feedback: null, reason: 'cancellation_requested' };
145
121
  if (features.cancel.mode === 'at_period_end') {
146
122
  await ctx.write(SUB, subscription, { cancel_at_period_end: true, cancel_at: sub.current_period_end ?? null, canceled_at: now, cancellation_details: details }, 'subscription.update');
@@ -156,7 +132,7 @@ async function move(ctx, id, session, subscription, kind) {
156
132
  async function updatePaymentMethod(ctx, id, session, v) {
157
133
  if (!featuresOf(ctx, session).paymentMethod)
158
134
  return gone();
159
- const refused = cardAnswer(v, Number(ctx.now()), false);
135
+ const refused = cardAnswer(v, nowUnix(ctx.occurredAt), false);
160
136
  if (refused)
161
137
  return page(ctx, id, session, { error: refused, values: v });
162
138
  const customer = String(session.customer);
@@ -191,26 +167,24 @@ async function payInvoice(ctx, id, session, invoiceId) {
191
167
  return new Response(null, { status: 303, headers: { location: `/p/session/${id}` } });
192
168
  }
193
169
  /** billing.stripe.com's portal pages, or undefined for any other request. */
194
- export function stripePortalFlow(scope) {
195
- return async (request) => {
196
- const m = /^\/p\/session\/(bps_[A-Za-z0-9_]+)(?:\/(cancel|renew|payment_method|pay))?\/?$/.exec(new URL(request.url).pathname);
197
- if (!m)
198
- return undefined;
199
- const [, id, kind] = m;
200
- if ((kind && request.method !== 'POST') || (!kind && request.method !== 'GET'))
201
- return undefined;
202
- // the form is read before the context, which reads the request's body itself
203
- const form = kind ? await formOf(request.clone()) : {};
204
- const ctx = await semanticsContext(manifest, request, PORTAL_OPERATION, scope);
205
- const session = ctx.get('billing_portal.session', id);
206
- if (!session)
207
- return gone();
208
- if (!kind)
209
- return page(ctx, id, session);
210
- if (kind === 'payment_method')
211
- return updatePaymentMethod(ctx, id, session, form);
212
- if (kind === 'pay')
213
- return payInvoice(ctx, id, session, form.invoice ?? '');
214
- return move(ctx, id, session, form.subscription ?? '', kind);
215
- };
170
+ export async function screen(ctx) {
171
+ const request = ctx.call.request;
172
+ const m = /^\/p\/session\/(bps_[A-Za-z0-9_]+)(?:\/(cancel|renew|payment_method|pay))?\/?$/.exec(new URL(request.url).pathname);
173
+ if (!m)
174
+ return notFound();
175
+ const [, id, kind] = m;
176
+ if ((kind && request.method !== 'POST') || (!kind && request.method !== 'GET'))
177
+ return notFound();
178
+ // the form is read before the context, which reads the request's body itself
179
+ const form = kind ? await formOf(request.clone()) : {};
180
+ const session = ctx.get('billing_portal.session', id);
181
+ if (!session)
182
+ return gone();
183
+ if (!kind)
184
+ return page(ctx, id, session);
185
+ if (kind === 'payment_method')
186
+ return updatePaymentMethod(ctx, id, session, form);
187
+ if (kind === 'pay')
188
+ return payInvoice(ctx, id, session, form.invoice ?? '');
189
+ return move(ctx, id, session, form.subscription ?? '', kind);
216
190
  }
@@ -1,31 +1,2 @@
1
- import { type SemanticsContext } from '@volter/world-core';
2
- import { type Row } from '../semantics/shared.js';
3
- export declare const money: (minor: unknown, currency: unknown) => string;
4
- export declare const COUNTRIES: {
5
- value: string;
6
- label: string;
7
- }[];
8
- /** The expiry as the customer typed it. Stripe's field formats itself as it is typed: the digits `1230` read `12 / 30`,
9
- * and a first digit above 1 is a month on its own (`5` reads `05 / `), so a person types the digits straight through
10
- * (Checkout's own field, seen on checkout.stripe.com; docs.stripe.com/payments/checkout names no format to type). The
11
- * page's script (@volter/world-ui Payment, `format: 'card-expiry'`) shows it formatted; this reads what is posted either
12
- * way: `MM / YY`, `MM/YYYY`, or the bare digits `MMYY`, `MYY` (`530`) and `MMYYYY`; a month past 12 is read, and refused
13
- * as invalid by cardAnswer. */
14
- export declare function parseExpiry(raw: string): {
15
- month: number;
16
- year: number;
17
- } | undefined;
18
- /** The card's answer: undefined when it pays, else what Checkout says under the button. */
19
- export declare function cardAnswer(v: Record<string, string>, nowSeconds: number, chargesNow: boolean): string | undefined;
20
- /** checkout.stripe.com's pages, or undefined for any other request. */
21
- /** The name the page shows: the session's own `branding_settings.display_name` where the create set one, else the
22
- * public business name (stripe-shared.ts, publicBusinessName) of the account whose brand Checkout uses: "Checkout uses
23
- * the brand settings of the connected account for destination charges with on_behalf_of and for platforms performing
24
- * direct charges" (a session made with Stripe-Account), and otherwise the platform's; "If you omit a field in
25
- * branding_settings, Checkout applies the default value from the Dashboard"
26
- * (docs.stripe.com/payments/checkout/customization/appearance). */
27
- export declare function merchantOf(ctx: SemanticsContext, stored: Row): string;
28
- export declare function stripeCheckoutFlow(scope: {
29
- root?: string;
30
- clock?: () => string;
31
- }): (request: Request) => Promise<Response | undefined>;
1
+ import type { HandlerContext } from '@volter/world-core';
2
+ export declare function screen(ctx: HandlerContext): Promise<Response>;
@@ -1,57 +1,13 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- // STRIPE CHECKOUT — a hosted flow (docs/contributing/architecture.md, "Screens"): an application creates a
3
- // Checkout Session and sends its customer to the session's `url` at checkout.stripe.com/c/pay/{id}; the
4
- // customer pays there, the session completes (what the payment made is linked on it and
5
- // checkout.session.completed is delivered), and Checkout redirects to success_url with
6
- // {CHECKOUT_SESSION_ID} filled in, or the customer goes back to cancel_url
7
- // (docs.stripe.com/payments/checkout/how-checkout-works). Paying is a move no API call makes: the external
8
- // actor's move on the session's machine, taken here through the same handler context the API's handlers use.
9
- // The page is authored from @volter/world-ui's payment piece under Stripe's skin, nothing of Stripe's page
10
- // copied; its fields carry the ids tests of Checkout fill (email, cardNumber, cardExpiry, cardCvc,
11
- // billingName, billingCountry, billingPostalCode) and its button the test id Stripe gives it.
12
- //
13
- // Where the documentation stops and the twin decides: test cards answer as docs.stripe.com/testing lists
14
- // (4242… pays; 4000000000000002 declines; …9995 insufficient funds; …0069 expired; …0127 incorrect CVC;
15
- // …0341 is saved but declines when charged, so it declines on a page that charges now and is saved on one that
16
- // only sets the card up: setup mode, or a subscription's trial);
17
- // any other number that passes the Luhn check pays, and a card that asks for authentication pays without
18
- // the challenge. A subscription session with no customer makes one from the email, as Stripe does.
19
- import { semanticsContext } from '@volter/world-core';
20
2
  import { flowPage, Payment, PAYMENT_CSS } from '@volter/world-ui';
21
- import surface from '../generated/surface.gen.json' with { type: 'json' };
22
- import { manifest } from "../manifest.js";
23
- import { completeSession, isOneTime } from "../semantics/checkout.js";
24
- import { newCustomer } from "../semantics/customers.js";
25
- import { created } from "../semantics/shared.js";
26
- import { publicBusinessName } from "../stripe-shared.js";
27
- import { applyCouponDiscount, PLATFORM_ACCOUNT_ID, resolveTrial } from "../stripe-twin.js";
28
- import { formOf } from "./consent-skin.js";
3
+ import { isOneTime } from "../engine/checkout.js";
4
+ import { newCustomer } from "../engine/customers.js";
5
+ import { publicBusinessName } from "../engine/display.js";
6
+ import { applyCouponDiscount, nowUnix, PLATFORM_ACCOUNT_ID, resolveTrial } from "../engine/stripe.js";
7
+ import { cardAnswer, COUNTRIES, formOf, money, notFound, parseExpiry } from "./shared.js";
8
+ import { completeSession, created } from "../semantics/shared.js";
29
9
  const CS = 'checkout.session';
30
- const COMPLETE_OPERATION = surface.operations.find((o) => o.id === 'PostCheckoutSessionsSession');
31
- const DECLINES = {
32
- '4000000000000002': 'Your card was declined.',
33
- '4000000000009995': 'Your card has insufficient funds.',
34
- '4000000000000069': 'Your card has expired.',
35
- '4000000000000127': "Your card's security code is incorrect.",
36
- };
37
- const luhn = (digits) => {
38
- let sum = 0;
39
- for (let i = 0; i < digits.length; i++) {
40
- let d = Number(digits[digits.length - 1 - i]);
41
- if (i % 2 === 1) {
42
- d *= 2;
43
- if (d > 9)
44
- d -= 9;
45
- }
46
- sum += d;
47
- }
48
- return digits.length >= 12 && sum % 10 === 0;
49
- };
50
- export const money = (minor, currency) => {
51
- const c = typeof currency === 'string' ? currency.toUpperCase() : 'USD';
52
- const zeroDecimal = ['JPY', 'KRW', 'VND', 'CLP', 'ISK', 'UGX', 'XAF', 'XOF'].includes(c);
53
- return new Intl.NumberFormat('en-US', { style: 'currency', currency: c }).format((Number(minor) || 0) / (zeroDecimal ? 1 : 100));
54
- };
10
+ const COMPLETE_OPERATION = { id: 'PostCheckoutSessionsSession' };
55
11
  // Stripe's skin: its type, its blue submit, the summary on a tinted half.
56
12
  const SKIN = `
57
13
  body { color: #1a1a1a; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Ubuntu, sans-serif; }
@@ -61,7 +17,6 @@ body { color: #1a1a1a; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI
61
17
  .pay-error { color: #df1b41; }
62
18
  .pay-submit { background: #0074d4; color: #ffffff; }
63
19
  `;
64
- export const COUNTRIES = [['US', 'United States'], ['GB', 'United Kingdom'], ['CA', 'Canada'], ['DE', 'Germany'], ['FR', 'France'], ['AU', 'Australia'], ['JP', 'Japan']].map(([value, label]) => ({ value: value, label: label }));
65
20
  /** A subscription session's trial, when its subscription_data gives one: `trial_period_days`, or `trial_end`
66
21
  * (docs.stripe.com/payments/checkout/free-trials), as resolveTrial makes the subscription's at completion. */
67
22
  function trialOf(session, now) {
@@ -97,7 +52,7 @@ function trialSummary(session, trial) {
97
52
  }
98
53
  /** What each period after the trial charges, as the subscription's invoices will: its recurring line items (a one-time
99
54
  * item is on the first invoice only, semantics/checkout.ts isOneTime), under the session's coupon unless the coupon is `once`, which the trial's own $0
100
- * invoice takes (semantics/renewals.ts draftSubscriptionInvoice). */
55
+ * invoice takes (../engine/renewals.ts draftSubscriptionInvoice). */
101
56
  function afterTrial(session) {
102
57
  const items = ((session.line_items?.data) ?? []).filter((it, i) => !isOneTime(it, inlineOf(session, i)));
103
58
  const subtotal = items.reduce((sum, it) => sum + (Number(it.amount_subtotal) || 0), 0);
@@ -144,60 +99,19 @@ function page(session, id, now, values = {}, error) {
144
99
  });
145
100
  }
146
101
  const gone = () => flowPage({ title: 'Checkout', status: 404, css: [PAYMENT_CSS, SKIN], body: _jsx("main", { className: "pay-form", children: _jsx("h1", { children: "This Checkout Session is no longer active." }) }) });
147
- /** Cards that are saved but decline when charged. */
148
- const DECLINES_WHEN_CHARGED = { '4000000000000341': 'Your card was declined.' };
149
- /** The expiry as the customer typed it. Stripe's field formats itself as it is typed: the digits `1230` read `12 / 30`,
150
- * and a first digit above 1 is a month on its own (`5` reads `05 / `), so a person types the digits straight through
151
- * (Checkout's own field, seen on checkout.stripe.com; docs.stripe.com/payments/checkout names no format to type). The
152
- * page's script (@volter/world-ui Payment, `format: 'card-expiry'`) shows it formatted; this reads what is posted either
153
- * way: `MM / YY`, `MM/YYYY`, or the bare digits `MMYY`, `MYY` (`530`) and `MMYYYY`; a month past 12 is read, and refused
154
- * as invalid by cardAnswer. */
155
- export function parseExpiry(raw) {
156
- const split = /^\s*(\d{1,2})\s*\/\s*(\d{2}|\d{4})\s*$/.exec(raw);
157
- const digits = raw.replace(/\s/g, '');
158
- const bare = split ? undefined : /^(\d{2})(\d{2}|\d{4})$/.exec(digits) ?? /^([2-9])(\d{2})$/.exec(digits);
159
- const m = split ?? bare;
160
- if (!m)
161
- return undefined;
162
- return { month: Number(m[1]), year: m[2].length === 2 ? 2000 + Number(m[2]) : Number(m[2]) };
163
- }
164
- /** The card's answer: undefined when it pays, else what Checkout says under the button. */
165
- export function cardAnswer(v, nowSeconds, chargesNow) {
166
- const digits = (v.cardNumber ?? '').replace(/\D/g, '');
167
- if (!digits)
168
- return 'Your card number is incomplete.';
169
- if (DECLINES[digits])
170
- return DECLINES[digits];
171
- if (chargesNow && DECLINES_WHEN_CHARGED[digits])
172
- return DECLINES_WHEN_CHARGED[digits];
173
- if (!luhn(digits))
174
- return 'Your card number is invalid.';
175
- const exp = parseExpiry(v.cardExpiry ?? '');
176
- if (!exp)
177
- return "Your card's expiration date is incomplete.";
178
- const { month, year } = exp;
179
- if (month < 1 || month > 12)
180
- return "Your card's expiration date is invalid.";
181
- const now = new Date(nowSeconds * 1000);
182
- if (year < now.getUTCFullYear() || (year === now.getUTCFullYear() && month < now.getUTCMonth() + 1))
183
- return "Your card's expiration year is in the past.";
184
- if (!/^\d{3,4}$/.test(v.cardCvc ?? ''))
185
- return "Your card's security code is incomplete.";
186
- return undefined;
187
- }
188
102
  async function pay(ctx, id, session, v) {
189
103
  const onFile = customerEmailOf(session);
190
104
  const email = onFile ?? (typeof session.customer_email === 'string' ? session.customer_email : (v.email ?? '').trim());
191
105
  if (session.mode !== 'setup' || !session.customer) {
192
106
  if (!EMAIL.test(email))
193
- return page(session, id, Number(ctx.now()), v, 'Your email address is incomplete.');
107
+ return page(session, id, nowUnix(ctx.occurredAt), v, 'Your email address is incomplete.');
194
108
  }
195
109
  // a trial charges nothing now unless a one-time price is on the first invoice
196
110
  const oneTimeDue = ((session.line_items?.data) ?? []).some((it, i) => isOneTime(it, inlineOf(session, i)));
197
- const chargesNow = session.mode === 'payment' || (session.mode === 'subscription' && (!trialOf(session, Number(ctx.now())) || oneTimeDue));
198
- const refused = cardAnswer(v, Number(ctx.now()), chargesNow);
111
+ const chargesNow = session.mode === 'payment' || (session.mode === 'subscription' && (!trialOf(session, nowUnix(ctx.occurredAt)) || oneTimeDue));
112
+ const refused = cardAnswer(v, nowUnix(ctx.occurredAt), chargesNow);
199
113
  if (refused)
200
- return page(session, id, Number(ctx.now()), v, refused);
114
+ return page(session, id, nowUnix(ctx.occurredAt), v, refused);
201
115
  let existing = session;
202
116
  // Checkout always makes a customer for a subscription; a payment makes one only when the session asks
203
117
  if (!session.customer && (session.mode === 'subscription' || session.customer_creation === 'always')) {
@@ -219,37 +133,34 @@ async function pay(ctx, id, session, v) {
219
133
  const to = String(session.success_url).replaceAll('{CHECKOUT_SESSION_ID}', id);
220
134
  return new Response(null, { status: 303, headers: { location: to } });
221
135
  }
222
- /** checkout.stripe.com's pages, or undefined for any other request. */
223
136
  /** The name the page shows: the session's own `branding_settings.display_name` where the create set one, else the
224
- * public business name (stripe-shared.ts, publicBusinessName) of the account whose brand Checkout uses: "Checkout uses
137
+ * public business name (../engine/display.ts, publicBusinessName) of the account whose brand Checkout uses: "Checkout uses
225
138
  * the brand settings of the connected account for destination charges with on_behalf_of and for platforms performing
226
139
  * direct charges" (a session made with Stripe-Account), and otherwise the platform's; "If you omit a field in
227
140
  * branding_settings, Checkout applies the default value from the Dashboard"
228
141
  * (docs.stripe.com/payments/checkout/customization/appearance). */
229
- export function merchantOf(ctx, stored) {
142
+ function merchantOf(ctx, stored) {
230
143
  const brand = stored._branding_settings?.display_name;
231
144
  const behalf = stored._payment_intent_data?.on_behalf_of ?? stored._subscription_data?.on_behalf_of;
232
145
  const account = typeof behalf === 'string' ? behalf : typeof stored._brand_account === 'string' ? stored._brand_account : PLATFORM_ACCOUNT_ID;
233
146
  return typeof brand === 'string' && brand.trim() ? brand : publicBusinessName(ctx.get('account', account));
234
147
  }
235
- export function stripeCheckoutFlow(scope) {
236
- return async (request) => {
237
- const m = /^\/c\/pay\/(cs_[A-Za-z0-9_]+)\/?$/.exec(new URL(request.url).pathname);
238
- if (!m || (request.method !== 'GET' && request.method !== 'POST'))
239
- return undefined;
240
- const id = m[1];
241
- // the form is read before the context, which reads the request's body itself
242
- const values = request.method === 'POST' ? await formOf(request.clone()) : {};
243
- const ctx = await semanticsContext(manifest, request, COMPLETE_OPERATION, scope);
244
- const session = ctx.get(CS, id);
245
- if (!session)
246
- return gone();
247
- // an ended session's page is gone; paying on one is the customer's move the machine refuses
248
- if (session.status !== 'open' && (request.method === 'GET' || ctx.legal(CS, 'status', COMPLETE_OPERATION.id, String(session.status), 'complete', id, 'external')))
249
- return gone();
250
- const stored = ctx.row(CS, id) ?? {};
251
- const coupon = stored._discount?.coupon;
252
- const full = { ...session, _subscription_data: stored._subscription_data, _price_data: stored._price_data, _merchant: merchantOf(ctx, stored), _coupon: typeof coupon === 'string' ? ctx.get('coupon', coupon) : undefined, _customer: typeof session.customer === 'string' ? ctx.get('customer', session.customer) : undefined };
253
- return request.method === 'GET' ? page(full, id, Number(ctx.now())) : pay(ctx, id, full, values);
254
- };
148
+ export async function screen(ctx) {
149
+ const request = ctx.call.request;
150
+ const m = /^\/c\/pay\/(cs_[A-Za-z0-9_]+)\/?$/.exec(new URL(request.url).pathname);
151
+ if (!m || (request.method !== 'GET' && request.method !== 'POST'))
152
+ return notFound();
153
+ const id = m[1];
154
+ // the form is read before the context, which reads the request's body itself
155
+ const values = request.method === 'POST' ? await formOf(request.clone()) : {};
156
+ const session = ctx.get(CS, id);
157
+ if (!session)
158
+ return gone();
159
+ // an ended session's page is gone; paying on one is the customer's move the machine refuses
160
+ if (session.status !== 'open' && (request.method === 'GET' || ctx.legal(CS, 'status', COMPLETE_OPERATION.id, String(session.status), 'complete', id, 'external')))
161
+ return gone();
162
+ const stored = ctx.row(CS, id) ?? {};
163
+ const coupon = stored._discount?.coupon;
164
+ const full = { ...session, _subscription_data: stored._subscription_data, _price_data: stored._price_data, _merchant: merchantOf(ctx, stored), _coupon: typeof coupon === 'string' ? ctx.get('coupon', coupon) : undefined, _customer: typeof session.customer === 'string' ? ctx.get('customer', session.customer) : undefined };
165
+ return request.method === 'GET' ? page(full, id, nowUnix(ctx.occurredAt)) : pay(ctx, id, full, values);
255
166
  }
@@ -1,27 +1,3 @@
1
- import { type SemanticsContext } from '@volter/world-core';
2
- /** A code "expires in 5 minutes". */
3
- export declare const CODE_TTL_SECONDS = 300;
4
- /** One connection per connected account (the twin's one platform): its scope, tokens, and whether it was revoked. */
5
- export declare const CONNECTIONS = "_oauth_connection";
6
- type Scoped = {
7
- root?: string;
8
- clock?: () => string;
9
- };
10
- /** Whether a connected account's OAuth connection to the platform was revoked (deauthorized, or its code reused). */
11
- export declare function connectionRevoked(ctx: SemanticsContext, account: string): boolean;
12
- /** The connected account an OAuth key acts as — the connection's current access_token (sk_test_oauth_…) or its
13
- * stripe_publishable_key (pk_test_oauth_…) — with the scope it was issued; undefined for any other key, and null for an
14
- * OAuth-shaped key no live connection holds (revoked, replaced by a refresh, or never issued). */
15
- export declare function oauthKeyAccount(ctx: SemanticsContext, key: string): {
16
- account: string;
17
- scope: string;
18
- } | null | undefined;
19
- /** The prefill the request carries, invalid values silently dropped (docs.stripe.com/connect/oauth-reference). Only
20
- * what the new account's object shows the platform, or the page shows the person, is read: the person's birth date and
21
- * the business address are the account application's, which the twin does not model (the test-mode skip). */
22
- export declare function prefill(q: URLSearchParams): Record<string, string>;
23
- /** A key shown the way Stripe's errors show one: its prefix and its last four. */
24
- export declare const redactKey: (key: string) => string;
25
- /** connect.stripe.com's OAuth endpoints, or undefined for any other request. */
26
- export declare function stripeConnectOAuthFlow(scope: Scoped): (request: Request) => Promise<Response | undefined>;
27
- export {};
1
+ import type { HandlerContext } from '@volter/world-core';
2
+ /** connect.stripe.com's OAuth endpoints; Stripe's 404 for anything else there. */
3
+ export declare function screen(ctx: HandlerContext): Promise<Response>;