@volter/twin-stripe 2.0.38 → 3.0.1

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 (402) hide show
  1. package/README.md +112 -207
  2. package/dist/generated/pack-facts.json +94 -0
  3. package/dist/journeys/coverage.json +596 -0
  4. package/dist/journeys/customer-life.json +6108 -0
  5. package/dist/journeys/customer-life.outline.md +371 -0
  6. package/dist/journeys/decisions.json +677 -0
  7. package/dist/journeys/demand.json +706 -0
  8. package/dist/journeys/score.json +853 -0
  9. package/dist/journeys/unreachable.json +102 -0
  10. package/dist/journeys/vendor-examples.json +8010 -0
  11. package/dist/spec/SOURCE.md +18 -0
  12. package/dist/spec/doc-examples.json +445 -0
  13. package/dist/spec/fixtures3.json.gz +0 -0
  14. package/dist/spec/openapi.json.gz +0 -0
  15. package/dist/spec/patches.json +34 -0
  16. package/dist/spec/sources.json +306 -0
  17. package/dist/src/cli.d.ts +0 -1
  18. package/dist/src/cli.js +11 -31
  19. package/dist/src/engine/after-payment.d.ts +8 -0
  20. package/dist/src/engine/after-payment.js +27 -0
  21. package/dist/src/engine/apps-secrets.d.ts +1 -0
  22. package/dist/src/engine/apps-secrets.js +3 -0
  23. package/dist/src/engine/balance.d.ts +5 -0
  24. package/dist/src/engine/balance.js +15 -0
  25. package/dist/src/engine/checkout.d.ts +24 -0
  26. package/dist/src/engine/checkout.js +30 -0
  27. package/dist/src/engine/common.d.ts +19 -0
  28. package/dist/src/engine/common.js +34 -0
  29. package/dist/src/engine/connect.d.ts +45 -0
  30. package/dist/src/engine/connect.js +108 -0
  31. package/dist/src/engine/customers.d.ts +4 -0
  32. package/dist/src/engine/customers.js +8 -0
  33. package/dist/src/engine/display.d.ts +11 -0
  34. package/dist/src/engine/display.js +13 -0
  35. package/dist/src/engine/files.d.ts +11 -0
  36. package/dist/src/engine/files.js +23 -0
  37. package/dist/src/engine/invoices.d.ts +21 -0
  38. package/dist/src/engine/invoices.js +84 -0
  39. package/dist/src/engine/issuing.d.ts +33 -0
  40. package/dist/src/engine/issuing.js +54 -0
  41. package/dist/src/engine/ledger.d.ts +8 -0
  42. package/dist/src/engine/ledger.js +8 -0
  43. package/dist/src/engine/oauth.d.ts +4 -0
  44. package/dist/src/engine/oauth.js +24 -0
  45. package/dist/src/engine/onboarding.d.ts +13 -0
  46. package/dist/src/engine/onboarding.js +42 -0
  47. package/dist/src/{stripe-params.d.ts → engine/params.d.ts} +20 -3
  48. package/dist/src/{stripe-params.js → engine/params.js} +7 -60
  49. package/dist/src/engine/payment-intents.d.ts +10 -0
  50. package/dist/src/engine/payment-intents.js +27 -0
  51. package/dist/src/engine/payment-methods.d.ts +16 -0
  52. package/dist/src/engine/payment-methods.js +22 -0
  53. package/dist/src/engine/radar.d.ts +2 -0
  54. package/dist/src/engine/radar.js +5 -0
  55. package/dist/src/engine/refunds.d.ts +1 -0
  56. package/dist/src/engine/refunds.js +3 -0
  57. package/dist/src/engine/renewals.d.ts +36 -0
  58. package/dist/src/engine/renewals.js +65 -0
  59. package/dist/src/{stripe-twin.d.ts → engine/stripe.d.ts} +12 -45
  60. package/dist/src/{stripe-twin.js → engine/stripe.js} +53 -387
  61. package/dist/src/engine/subscriptions.d.ts +11 -0
  62. package/dist/src/engine/subscriptions.js +30 -0
  63. package/dist/src/engine/transfers.d.ts +2 -0
  64. package/dist/src/engine/transfers.js +1 -0
  65. package/dist/src/{stripe-version.d.ts → engine/version.d.ts} +0 -2
  66. package/dist/src/{stripe-version.js → engine/version.js} +21 -9
  67. package/dist/src/engine/webhook-endpoints.d.ts +1 -0
  68. package/dist/src/engine/webhook-endpoints.js +12 -0
  69. package/dist/src/engine/webhooks.d.ts +31 -0
  70. package/dist/src/engine/webhooks.js +68 -0
  71. package/dist/src/fetch.d.ts +2 -0
  72. package/dist/src/fetch.js +26 -0
  73. package/dist/src/generated/surface.gen.json +1 -1
  74. package/dist/src/generated/ui.gen.json +1 -1
  75. package/dist/src/index.d.ts +5 -14
  76. package/dist/src/index.js +10 -75
  77. package/dist/src/manifest.js +478 -876
  78. package/dist/src/screens/billing-portal.d.ts +3 -0
  79. package/dist/src/screens/{portal.js → billing-portal.js} +32 -58
  80. package/dist/src/screens/checkout-js.d.ts +2 -0
  81. package/dist/src/screens/checkout-js.js +84 -0
  82. package/dist/src/screens/checkout.d.ts +2 -31
  83. package/dist/src/screens/checkout.js +32 -121
  84. package/dist/src/screens/connect-onboarding.d.ts +3 -0
  85. package/dist/src/screens/{onboarding.js → connect-onboarding.js} +38 -104
  86. package/dist/src/screens/dashboard.d.ts +3 -0
  87. package/dist/src/screens/dashboard.js +116 -0
  88. package/dist/src/screens/shared.d.ts +27 -0
  89. package/dist/src/screens/shared.js +87 -0
  90. package/dist/src/screens/stripe-js.d.ts +3 -0
  91. package/dist/src/screens/stripe-js.js +95 -0
  92. package/dist/src/semantics/account.d.ts +2 -0
  93. package/dist/src/semantics/account.js +8 -0
  94. package/dist/src/semantics/account_links.d.ts +2 -0
  95. package/dist/src/semantics/account_links.js +22 -0
  96. package/dist/src/semantics/accounts.d.ts +4 -0
  97. package/dist/src/semantics/accounts.js +40 -0
  98. package/dist/src/semantics/apps.d.ts +4 -0
  99. package/dist/src/semantics/{apps-secrets.js → apps.js} +14 -26
  100. package/dist/src/semantics/around.d.ts +2 -0
  101. package/dist/src/semantics/around.js +13 -0
  102. package/dist/src/semantics/balance.d.ts +2 -11
  103. package/dist/src/semantics/balance.js +3 -194
  104. package/dist/src/semantics/balance_transactions.d.ts +2 -0
  105. package/dist/src/semantics/balance_transactions.js +15 -0
  106. package/dist/src/semantics/billing_portal.d.ts +4 -0
  107. package/dist/src/semantics/billing_portal.js +36 -0
  108. package/dist/src/semantics/charges.d.ts +3 -28
  109. package/dist/src/semantics/charges.js +5 -202
  110. package/dist/src/semantics/checkout.d.ts +3 -20
  111. package/dist/src/semantics/checkout.js +21 -271
  112. package/dist/src/semantics/clock.d.ts +2 -0
  113. package/dist/src/semantics/clock.js +15 -0
  114. package/dist/src/semantics/coupons.d.ts +2 -6
  115. package/dist/src/semantics/coupons.js +2 -60
  116. package/dist/src/semantics/customers.d.ts +5 -6
  117. package/dist/src/semantics/customers.js +47 -413
  118. package/dist/src/semantics/doors.d.ts +23 -0
  119. package/dist/src/semantics/doors.js +73 -0
  120. package/dist/src/semantics/entitlements.d.ts +0 -2
  121. package/dist/src/semantics/entitlements.js +4 -95
  122. package/dist/src/semantics/events.d.ts +11 -0
  123. package/dist/src/semantics/events.js +31 -0
  124. package/dist/src/semantics/index.d.ts +2 -0
  125. package/dist/src/semantics/index.js +85 -0
  126. package/dist/src/semantics/invoice_payments.d.ts +2 -0
  127. package/dist/src/semantics/invoice_payments.js +12 -0
  128. package/dist/src/semantics/invoices.d.ts +11 -18
  129. package/dist/src/semantics/invoices.js +121 -440
  130. package/dist/src/semantics/issuing.d.ts +6 -13
  131. package/dist/src/semantics/issuing.js +58 -556
  132. package/dist/src/semantics/payment_intents.d.ts +3 -0
  133. package/dist/src/semantics/payment_intents.js +71 -0
  134. package/dist/src/semantics/payment_methods.d.ts +3 -0
  135. package/dist/src/semantics/payment_methods.js +15 -0
  136. package/dist/src/semantics/payouts.d.ts +3 -0
  137. package/dist/src/semantics/payouts.js +28 -0
  138. package/dist/src/semantics/prices.d.ts +4 -0
  139. package/dist/src/semantics/prices.js +37 -0
  140. package/dist/src/semantics/products.d.ts +4 -2
  141. package/dist/src/semantics/products.js +12 -138
  142. package/dist/src/semantics/promotion_codes.d.ts +3 -0
  143. package/dist/src/semantics/promotion_codes.js +35 -0
  144. package/dist/src/semantics/radar.d.ts +2 -2
  145. package/dist/src/semantics/radar.js +5 -74
  146. package/dist/src/semantics/refunds.d.ts +2 -9
  147. package/dist/src/semantics/refunds.js +3 -193
  148. package/dist/src/semantics/shared.d.ts +558 -55
  149. package/dist/src/semantics/shared.js +2070 -114
  150. package/dist/src/semantics/states.d.ts +462 -0
  151. package/dist/src/semantics/states.js +634 -0
  152. package/dist/src/semantics/subscriptions.d.ts +6 -11
  153. package/dist/src/semantics/subscriptions.js +37 -530
  154. package/dist/src/semantics/test_helpers.d.ts +3 -0
  155. package/dist/src/semantics/test_helpers.js +125 -0
  156. package/dist/src/semantics/transfers.d.ts +2 -2
  157. package/dist/src/semantics/transfers.js +6 -101
  158. package/dist/src/semantics/webhook_endpoints.d.ts +2 -0
  159. package/dist/src/semantics/webhook_endpoints.js +26 -0
  160. package/dist/src/server.d.ts +7 -0
  161. package/dist/src/server.js +7 -0
  162. package/generated/pack-facts.json +94 -0
  163. package/journeys/coverage.json +596 -0
  164. package/journeys/customer-life.json +6108 -0
  165. package/journeys/customer-life.outline.md +371 -0
  166. package/journeys/decisions.json +677 -0
  167. package/journeys/demand.json +706 -0
  168. package/journeys/score.json +853 -0
  169. package/journeys/unreachable.json +102 -0
  170. package/journeys/vendor-examples.json +8010 -0
  171. package/package.json +11 -20
  172. package/spec/SOURCE.md +18 -0
  173. package/spec/doc-examples.json +445 -0
  174. package/spec/fixtures3.json.gz +0 -0
  175. package/spec/openapi.json.gz +0 -0
  176. package/spec/patches.json +34 -0
  177. package/spec/sources.json +306 -0
  178. package/src/cli.ts +11 -28
  179. package/src/engine/after-payment.ts +29 -0
  180. package/src/engine/apps-secrets.ts +4 -0
  181. package/src/engine/balance.ts +32 -0
  182. package/src/engine/checkout.ts +39 -0
  183. package/src/engine/common.ts +49 -0
  184. package/src/engine/connect.ts +106 -0
  185. package/src/engine/customers.ts +10 -0
  186. package/src/engine/display.ts +18 -0
  187. package/src/engine/files.ts +28 -0
  188. package/src/engine/invoices.ts +102 -0
  189. package/src/engine/issuing.ts +66 -0
  190. package/src/engine/ledger.ts +48 -0
  191. package/src/engine/oauth.ts +18 -0
  192. package/src/engine/onboarding.ts +53 -0
  193. package/src/{stripe-params.ts → engine/params.ts} +7 -56
  194. package/src/engine/payment-intents.ts +32 -0
  195. package/src/engine/payment-methods.ts +24 -0
  196. package/src/engine/radar.ts +6 -0
  197. package/src/engine/refunds.ts +3 -0
  198. package/src/engine/renewals.ts +72 -0
  199. package/src/{stripe-twin.ts → engine/stripe.ts} +57 -400
  200. package/src/engine/subscriptions.ts +37 -0
  201. package/src/engine/transfers.ts +22 -0
  202. package/src/{stripe-version.ts → engine/version.ts} +19 -10
  203. package/src/engine/webhook-endpoints.ts +14 -0
  204. package/src/engine/webhooks.ts +70 -0
  205. package/src/fetch.ts +27 -0
  206. package/src/generated/surface.gen.json +1 -1
  207. package/src/generated/ui.gen.json +1 -1
  208. package/src/index.ts +10 -116
  209. package/src/manifest.ts +480 -904
  210. package/src/screens/{portal.tsx → billing-portal.tsx} +35 -42
  211. package/src/screens/checkout-js.ts +80 -0
  212. package/src/screens/checkout.tsx +32 -96
  213. package/src/screens/{onboarding.tsx → connect-onboarding.tsx} +39 -85
  214. package/src/screens/dashboard.tsx +178 -0
  215. package/src/screens/shared.tsx +84 -0
  216. package/src/screens/stripe-js.ts +102 -0
  217. package/src/semantics/account.ts +10 -0
  218. package/src/semantics/account_links.ts +20 -0
  219. package/src/semantics/accounts.ts +44 -0
  220. package/src/semantics/{apps-secrets.ts → apps.ts} +17 -33
  221. package/src/semantics/around.ts +17 -0
  222. package/src/semantics/balance.ts +6 -208
  223. package/src/semantics/balance_transactions.ts +18 -0
  224. package/src/semantics/billing_portal.ts +45 -0
  225. package/src/semantics/charges.ts +8 -212
  226. package/src/semantics/checkout.ts +25 -276
  227. package/src/semantics/clock.ts +19 -0
  228. package/src/semantics/coupons.ts +5 -68
  229. package/src/semantics/customers.ts +48 -414
  230. package/src/semantics/doors.ts +79 -0
  231. package/src/semantics/entitlements.ts +3 -94
  232. package/src/semantics/events.ts +37 -0
  233. package/src/semantics/index.ts +89 -0
  234. package/src/semantics/invoice_payments.ts +16 -0
  235. package/src/semantics/invoices.ts +112 -441
  236. package/src/semantics/issuing.ts +57 -573
  237. package/src/semantics/payment_intents.ts +76 -0
  238. package/src/semantics/payment_methods.ts +20 -0
  239. package/src/semantics/payouts.ts +29 -0
  240. package/src/semantics/prices.ts +41 -0
  241. package/src/semantics/products.ts +12 -146
  242. package/src/semantics/promotion_codes.ts +38 -0
  243. package/src/semantics/radar.ts +8 -79
  244. package/src/semantics/refunds.ts +4 -216
  245. package/src/semantics/shared.ts +2089 -135
  246. package/src/semantics/states.ts +662 -0
  247. package/src/semantics/subscriptions.ts +39 -542
  248. package/src/semantics/test_helpers.ts +119 -0
  249. package/src/semantics/transfers.ts +10 -132
  250. package/src/semantics/webhook_endpoints.ts +27 -0
  251. package/src/server.ts +7 -0
  252. package/client/dashboard-api.ts +0 -286
  253. package/client/stripe-mirror.css +0 -277
  254. package/client/stripe-mirror.tsx +0 -1559
  255. package/dist/client/dashboard-api.d.ts +0 -107
  256. package/dist/client/dashboard-api.js +0 -238
  257. package/dist/client/dashboard-api.ts +0 -286
  258. package/dist/client/stripe-mirror.bundle.js +0 -236
  259. package/dist/client/stripe-mirror.css +0 -277
  260. package/dist/client/stripe-mirror.d.ts +0 -134
  261. package/dist/client/stripe-mirror.js +0 -859
  262. package/dist/client/stripe-mirror.tsx +0 -1559
  263. package/dist/src/screens/connect-oauth.d.ts +0 -27
  264. package/dist/src/screens/connect-oauth.js +0 -414
  265. package/dist/src/screens/connect-settings.d.ts +0 -22
  266. package/dist/src/screens/connect-settings.js +0 -103
  267. package/dist/src/screens/consent-skin.d.ts +0 -4
  268. package/dist/src/screens/consent-skin.js +0 -18
  269. package/dist/src/screens/financial-connections.d.ts +0 -5
  270. package/dist/src/screens/financial-connections.js +0 -90
  271. package/dist/src/screens/identity.d.ts +0 -5
  272. package/dist/src/screens/identity.js +0 -86
  273. package/dist/src/screens/onboarding.d.ts +0 -13
  274. package/dist/src/screens/portal.d.ts +0 -5
  275. package/dist/src/screens/public-details.d.ts +0 -5
  276. package/dist/src/screens/public-details.js +0 -90
  277. package/dist/src/semantics/after-payment.d.ts +0 -22
  278. package/dist/src/semantics/after-payment.js +0 -99
  279. package/dist/src/semantics/apps-secrets.d.ts +0 -2
  280. package/dist/src/semantics/billing.d.ts +0 -2
  281. package/dist/src/semantics/billing.js +0 -220
  282. package/dist/src/semantics/connect.d.ts +0 -5
  283. package/dist/src/semantics/connect.js +0 -493
  284. package/dist/src/semantics/credit-notes.d.ts +0 -2
  285. package/dist/src/semantics/credit-notes.js +0 -172
  286. package/dist/src/semantics/disputes.d.ts +0 -2
  287. package/dist/src/semantics/disputes.js +0 -51
  288. package/dist/src/semantics/ephemeral-keys.d.ts +0 -2
  289. package/dist/src/semantics/ephemeral-keys.js +0 -34
  290. package/dist/src/semantics/files.d.ts +0 -2
  291. package/dist/src/semantics/files.js +0 -125
  292. package/dist/src/semantics/ledger.d.ts +0 -59
  293. package/dist/src/semantics/ledger.js +0 -200
  294. package/dist/src/semantics/payment-intents.d.ts +0 -18
  295. package/dist/src/semantics/payment-intents.js +0 -452
  296. package/dist/src/semantics/payment-links.d.ts +0 -2
  297. package/dist/src/semantics/payment-links.js +0 -133
  298. package/dist/src/semantics/payment-methods.d.ts +0 -20
  299. package/dist/src/semantics/payment-methods.js +0 -140
  300. package/dist/src/semantics/plans.d.ts +0 -5
  301. package/dist/src/semantics/plans.js +0 -121
  302. package/dist/src/semantics/platform.d.ts +0 -9
  303. package/dist/src/semantics/platform.js +0 -206
  304. package/dist/src/semantics/renewals.d.ts +0 -47
  305. package/dist/src/semantics/renewals.js +0 -281
  306. package/dist/src/semantics/setup-intents.d.ts +0 -2
  307. package/dist/src/semantics/setup-intents.js +0 -84
  308. package/dist/src/semantics/subscription-schedules.d.ts +0 -2
  309. package/dist/src/semantics/subscription-schedules.js +0 -119
  310. package/dist/src/semantics/tax.d.ts +0 -2
  311. package/dist/src/semantics/tax.js +0 -197
  312. package/dist/src/semantics/terminal.d.ts +0 -5
  313. package/dist/src/semantics/terminal.js +0 -182
  314. package/dist/src/semantics/test-clocks.d.ts +0 -6
  315. package/dist/src/semantics/test-clocks.js +0 -73
  316. package/dist/src/semantics/tokens.d.ts +0 -4
  317. package/dist/src/semantics/tokens.js +0 -44
  318. package/dist/src/semantics/treasury.d.ts +0 -2
  319. package/dist/src/semantics/treasury.js +0 -377
  320. package/dist/src/semantics/webhook-endpoints.d.ts +0 -3
  321. package/dist/src/semantics/webhook-endpoints.js +0 -85
  322. package/dist/src/stripe-budget.d.ts +0 -55
  323. package/dist/src/stripe-budget.js +0 -155
  324. package/dist/src/stripe-capabilities.d.ts +0 -3
  325. package/dist/src/stripe-capabilities.js +0 -5836
  326. package/dist/src/stripe-conformance.d.ts +0 -43
  327. package/dist/src/stripe-conformance.js +0 -105
  328. package/dist/src/stripe-connector.d.ts +0 -161
  329. package/dist/src/stripe-connector.js +0 -414
  330. package/dist/src/stripe-emit.d.ts +0 -2
  331. package/dist/src/stripe-emit.js +0 -145
  332. package/dist/src/stripe-events.d.ts +0 -93
  333. package/dist/src/stripe-events.js +0 -392
  334. package/dist/src/stripe-js.d.ts +0 -4
  335. package/dist/src/stripe-js.js +0 -70
  336. package/dist/src/stripe-mirror-ui.d.ts +0 -15
  337. package/dist/src/stripe-mirror-ui.js +0 -87
  338. package/dist/src/stripe-perform-harness.d.ts +0 -9
  339. package/dist/src/stripe-perform-harness.js +0 -26
  340. package/dist/src/stripe-server.d.ts +0 -33
  341. package/dist/src/stripe-server.js +0 -429
  342. package/dist/src/stripe-shared.d.ts +0 -109
  343. package/dist/src/stripe-shared.js +0 -276
  344. package/dist/src/stripe-ui-conformance.d.ts +0 -5
  345. package/dist/src/stripe-ui-conformance.js +0 -79
  346. package/dist/src/stripe-ui-structure.d.ts +0 -3
  347. package/dist/src/stripe-ui-structure.js +0 -168
  348. package/dist/test-fixtures/stripe-known-deviations.json +0 -110
  349. package/dist/test-fixtures/stripe-openapi-operations.SOURCE.md +0 -14
  350. package/dist/test-fixtures/stripe-openapi-operations.json +0 -4717
  351. package/dist/test-fixtures/stripe-schemas.SOURCE.md +0 -35
  352. package/dist/test-fixtures/stripe-schemas.json +0 -3813
  353. package/src/screens/connect-oauth.tsx +0 -400
  354. package/src/screens/connect-settings.tsx +0 -121
  355. package/src/screens/consent-skin.ts +0 -20
  356. package/src/screens/financial-connections.tsx +0 -101
  357. package/src/screens/identity.tsx +0 -96
  358. package/src/screens/public-details.tsx +0 -105
  359. package/src/semantics/after-payment.ts +0 -118
  360. package/src/semantics/billing.ts +0 -216
  361. package/src/semantics/connect.ts +0 -487
  362. package/src/semantics/credit-notes.ts +0 -168
  363. package/src/semantics/disputes.ts +0 -62
  364. package/src/semantics/ephemeral-keys.ts +0 -34
  365. package/src/semantics/files.ts +0 -143
  366. package/src/semantics/ledger.ts +0 -253
  367. package/src/semantics/payment-intents.ts +0 -463
  368. package/src/semantics/payment-links.ts +0 -148
  369. package/src/semantics/payment-methods.ts +0 -145
  370. package/src/semantics/plans.ts +0 -131
  371. package/src/semantics/platform.ts +0 -220
  372. package/src/semantics/renewals.ts +0 -279
  373. package/src/semantics/setup-intents.ts +0 -87
  374. package/src/semantics/subscription-schedules.ts +0 -129
  375. package/src/semantics/tax.ts +0 -220
  376. package/src/semantics/terminal.ts +0 -195
  377. package/src/semantics/test-clocks.ts +0 -77
  378. package/src/semantics/tokens.ts +0 -52
  379. package/src/semantics/treasury.ts +0 -383
  380. package/src/semantics/webhook-endpoints.ts +0 -87
  381. package/src/stripe-budget.ts +0 -181
  382. package/src/stripe-capabilities.ts +0 -5651
  383. package/src/stripe-conformance.ts +0 -124
  384. package/src/stripe-connector.ts +0 -462
  385. package/src/stripe-emit.ts +0 -157
  386. package/src/stripe-events.ts +0 -434
  387. package/src/stripe-js.ts +0 -70
  388. package/src/stripe-mirror-ui.ts +0 -90
  389. package/src/stripe-perform-harness.ts +0 -29
  390. package/src/stripe-server.ts +0 -393
  391. package/src/stripe-shared.ts +0 -297
  392. package/src/stripe-ui-conformance.ts +0 -88
  393. package/src/stripe-ui-structure.ts +0 -182
  394. package/test-fixtures/stripe-known-deviations.json +0 -110
  395. package/test-fixtures/stripe-openapi-operations.json +0 -4717
  396. package/test-fixtures/stripe-schemas.json +0 -3813
  397. /package/dist/src/{screens → engine}/industries.d.ts +0 -0
  398. /package/dist/src/{screens → engine}/industries.js +0 -0
  399. /package/dist/src/{semantics → engine}/test-cards.d.ts +0 -0
  400. /package/dist/src/{semantics → engine}/test-cards.js +0 -0
  401. /package/src/{screens → engine}/industries.ts +0 -0
  402. /package/src/{semantics → engine}/test-cards.ts +0 -0
@@ -0,0 +1,125 @@
1
+ import { AUTH, CARD, cardId, CH, historyEntry, holderId, merchantData, TXN } from "../engine/issuing.js";
2
+ import { isValidApiVersion, nowUnix, spendingControlsViolation, TWIN_API_VERSION } from "../engine/stripe.js";
3
+ import { stripeEventMatches } from "../engine/webhooks.js";
4
+ import { answeredByEndpoint, approvedAtOnce, askForAuthorization, at, authMissing, balanceOf, capture, created, fail, issuingRefusal, withCard } from "./shared.js";
5
+ export async function PostTestHelpersIssuingAuthorizations(ctx) {
6
+ const params = ctx.params;
7
+ const card = typeof params.card === 'string' ? params.card : '';
8
+ if (!card)
9
+ return fail(ctx, 'Missing required param: card.', 400, 'parameter_missing');
10
+ const c = ctx.get(CARD, card);
11
+ if (!c)
12
+ return fail(ctx, `No such card: '${card}'`, 400, 'resource_missing');
13
+ if (params.amount === undefined)
14
+ return fail(ctx, 'Missing required param: amount.', 400, 'parameter_missing');
15
+ const amount = Math.trunc(Number(params.amount) || 0);
16
+ const currency = String(params.currency ?? c.currency ?? 'usd');
17
+ const createdSec = Number(nowUnix(ctx.occurredAt));
18
+ const cardholderId = holderId(c);
19
+ const merchant = merchantData(params.merchant_data);
20
+ const isAmountControllable = params.is_amount_controllable === true;
21
+ const authMethod = typeof params.authorization_method === 'string' ? params.authorization_method : 'online';
22
+ if (!['chip', 'contactless', 'keyed_in', 'online', 'swipe'].includes(authMethod))
23
+ return issuingRefusal(ctx, 'authorization_method');
24
+ const merchantAmount = params.merchant_amount !== undefined ? Math.trunc(Number(params.merchant_amount) || 0) : amount;
25
+ const merchantCurrency = typeof params.merchant_currency === 'string' ? params.merchant_currency : currency;
26
+ const authId = ctx.mint(AUTH);
27
+ const baseFields = {
28
+ amount, amount_details: null, authorization_method: authMethod,
29
+ balance_transactions: [], transactions: [],
30
+ currency, fleet: null, fuel: null, livemode: false,
31
+ merchant_amount: merchantAmount, merchant_currency: merchantCurrency, merchant_data: merchant,
32
+ metadata: params.metadata && typeof params.metadata === 'object' ? params.metadata : {},
33
+ network_data: null,
34
+ verification_data: {
35
+ address_line1_check: 'not_provided', address_postal_code_check: 'not_provided',
36
+ authentication_exemption: null, cvc_check: 'match', expiry_check: 'match',
37
+ postal_code: null, three_d_secure: null,
38
+ },
39
+ wallet: null,
40
+ };
41
+ const subject = { id: authId, card, cardholder: cardholderId };
42
+ const entry = (o) => historyEntry({ ...o, currency, createdSec, merchantAmount, merchantCurrency });
43
+ const decline = async (reason, reasonMessage) => ctx.reply(withCard(ctx, await created(ctx, AUTH, subject, { ...baseFields, status: 'closed', approved: false, pending_request: null, request_history: [entry({ amount, approved: false, reason, reasonMessage })] })));
44
+ if (c.status === 'canceled')
45
+ return decline('card_canceled', 'The card has been canceled.');
46
+ // source: https://docs.stripe.com/api/issuing/cards/create "Defaults to inactive"
47
+ // source: spec:/components/schemas/issuing_authorization_request/properties/reason/enum "card_inactive"
48
+ if (c.status !== 'active')
49
+ return decline('card_inactive', 'The card is inactive.');
50
+ // what earlier approved authorizations on the card (or cardholder) already spent, for the limits
51
+ const prior = (key, value) => ctx.rows(AUTH).filter((a) => a[key] === value && a.approved === true)
52
+ .map((a) => ({ amount: Number(a.amount) || 0, created: Number(a.created) || 0, category: String(a.merchant_data?.category ?? '') }));
53
+ const controlsOpts = { amount, category: String(merchant.category ?? ''), country: merchant.country == null ? null : String(merchant.country), nowSec: createdSec };
54
+ const cardholderRow = cardholderId ? ctx.get(CH, cardholderId) : undefined;
55
+ const violation = spendingControlsViolation(c.spending_controls, { ...controlsOpts, priorApproved: prior('card', card) }) ??
56
+ spendingControlsViolation(cardholderRow?.spending_controls, { ...controlsOpts, priorApproved: prior('cardholder', cardholderId) });
57
+ if (violation)
58
+ return decline('spending_controls', violation);
59
+ // an authorization is paid from the Issuing balance, and declined when it cannot cover it
60
+ // (docs.stripe.com/issuing/funding/balance)
61
+ if ((balanceOf(ctx).issuing.get(currency) ?? 0) < amount)
62
+ return decline('insufficient_funds', 'Your Issuing balance does not have enough funds for this authorization.');
63
+ const pendingRequest = {
64
+ amount, amount_details: null, currency, is_amount_controllable: isAmountControllable,
65
+ merchant_amount: merchantAmount, merchant_currency: merchantCurrency, network_risk_score: null,
66
+ };
67
+ const endpoint = ctx.rows('webhook_endpoint').find((w) => w.status === 'enabled' && stripeEventMatches(w.enabled_events, 'issuing_authorization.request'));
68
+ // no real-time enrollment: "If you don't have a real-time authorization webhook, we approve the authorization without
69
+ // sending the issuing_authorization.request" (docs.stripe.com/issuing/purchases/authorizations), its outcome
70
+ // card_active, "approved according to your default Issuing settings"
71
+ if (!endpoint)
72
+ return approvedAtOnce(ctx, subject, baseFields, amount, entry({ amount, approved: true, reason: 'card_active', reasonMessage: null }));
73
+ // the request event's authorization carries pending_request, non-null only during the request
74
+ const requestObject = withCard(ctx, { object: 'issuing.authorization', id: authId, created: createdSec, ...baseFields, card, cardholder: cardholderId, status: 'pending', approved: false, pending_request: pendingRequest, request_history: [] });
75
+ // the request asked of the endpoint and the stored event are one event under one id
76
+ const pinned = ctx.call.request.headers.get('stripe-version');
77
+ const requestEvent = {
78
+ id: ctx.mint('event'), object: 'event', api_version: pinned && isValidApiVersion(pinned) ? pinned : TWIN_API_VERSION, created: createdSec,
79
+ data: { object: requestObject }, livemode: false, pending_webhooks: 1, request: { id: null, idempotency_key: null }, type: 'issuing_authorization.request',
80
+ };
81
+ await ctx.write('event', requestEvent.id, requestEvent, 'event.record');
82
+ const outcome = await askForAuthorization(ctx, String(endpoint.url), requestEvent, String(endpoint.secret ?? ''));
83
+ // a request no one answered (the World refused the delivery, it failed, or it timed out) is not a decision: the
84
+ // authorization stays pending with its request, for the deprecated approve or decline "within the timeout window of
85
+ // the real-time authorization flow" (the served spec), until lapseRealtimeRequests decides it when the window ends
86
+ if (outcome.kind === 'timeout')
87
+ return ctx.reply(withCard(ctx, await created(ctx, AUTH, subject, { ...baseFields, status: 'pending', approved: false, request_history: [], pending_request: pendingRequest })));
88
+ return answeredByEndpoint(ctx, outcome, { subject, fields: baseFields, amount, controllable: isAmountControllable, entry, decline });
89
+ }
90
+ export async function PostTestHelpersIssuingAuthorizationsAuthorizationCapture(ctx) {
91
+ const id = at(ctx, 'authorization');
92
+ const auth = ctx.get(AUTH, id);
93
+ if (!auth)
94
+ return authMissing(ctx, id);
95
+ if (auth.approved !== true || auth.status !== 'pending')
96
+ return issuingRefusal(ctx, 'not_capturable', auth);
97
+ const closeAuthorization = ctx.params.close_authorization !== false;
98
+ const refused = ctx.legal(AUTH, 'status', 'PostTestHelpersIssuingAuthorizationsAuthorizationCapture', auth.status, closeAuthorization ? 'closed' : 'pending');
99
+ if (refused)
100
+ return ctx.refuse(refused);
101
+ const txns = Array.isArray(auth.transactions) ? auth.transactions : [];
102
+ const capturedSoFar = txns.map((t) => ctx.get(TXN, String(t))).reduce((s, t) => s + Math.abs(Number(t?.amount) || 0), 0);
103
+ const remaining = (Number(auth.amount) || 0) - capturedSoFar;
104
+ const captureAmount = ctx.params.capture_amount !== undefined ? Math.trunc(Number(ctx.params.capture_amount) || 0) : remaining;
105
+ if (captureAmount <= 0 || captureAmount > remaining)
106
+ return fail(ctx, 'Invalid capture_amount: must be a positive integer no greater than the uncaptured authorized amount.', 400, 'parameter_invalid_integer');
107
+ // the capture releases what the approval held and debits the transaction; a capture that closes the authorization
108
+ // releases ALL it still holds, the uncaptured rest included: the amount is held "until the authorization is either
109
+ // captured, voided, or expired without capture" (docs.stripe.com/issuing/purchases/authorizations), and a closed
110
+ // authorization can be captured no further (close_authorization "Defaults to true. Set to false to enable
111
+ // multi-capture flows", the served spec). A capture that keeps it open releases only what it captured.
112
+ const currency = typeof auth.currency === 'string' ? auth.currency : 'usd';
113
+ const released = closeAuthorization ? remaining : captureAmount;
114
+ const release = await created(ctx, 'balance_transaction', {}, {
115
+ amount: released, currency, fee: 0, net: released, type: 'issuing_authorization_release',
116
+ status: 'available', balance_type: 'issuing', reporting_category: 'issuing_authorization_release',
117
+ available_on: nowUnix(ctx.occurredAt), fee_details: [], source: id,
118
+ });
119
+ const captured = await capture(ctx, id, { ...auth, card: cardId(auth) }, captureAmount);
120
+ return ctx.reply(withCard(ctx, await ctx.write(AUTH, id, {
121
+ status: closeAuthorization ? 'closed' : 'pending',
122
+ transactions: [...txns, captured.txnId],
123
+ balance_transactions: [...(Array.isArray(auth.balance_transactions) ? auth.balance_transactions : []), release.id, captured.btId],
124
+ }, 'issuing_authorization.updated')));
125
+ }
@@ -1,2 +1,2 @@
1
- import type { Semantics } from '@volter/world-core';
2
- export declare const transfers: Record<string, Semantics>;
1
+ import type { HandlerContext } from '@volter/world-core';
2
+ export declare function PostTransfers(ctx: HandlerContext): Promise<Response>;
@@ -1,13 +1,7 @@
1
- import { validateMoney } from "../stripe-twin.js";
2
- import { refusePayout, settleTransfer, settleTransferReversal } from "./ledger.js";
3
- import { at, created, fail, list, newest, send } from "./shared.js";
4
- const transferMissing = (ctx, id) => fail(ctx, `No such transfer: '${id}'`, 404, 'resource_missing');
5
- const emptyList = (url) => ({ object: 'list', data: [], has_more: false, total_count: 0, url });
6
- /** A transfer to an account whose transfers capability is not active. */
7
- function transfersInactive(ctx) {
8
- return ctx.refuse({ status: 400, code: 'insufficient_capabilities_for_transfer', param: 'destination', message: 'Your destination account needs to have at least one of the following capabilities enabled: transfers, crypto_transfers, legacy_payments' });
9
- }
10
- const create = async (ctx) => {
1
+ import { nowUnix, validateMoney } from "../engine/stripe.js";
2
+ import { emptyList } from "../engine/transfers.js";
3
+ import { created, fail, refusePayout, send, settledSourceRefused, settleTransfer, transfersInactive } from "./shared.js";
4
+ export async function PostTransfers(ctx) {
11
5
  const bad = validateMoney(ctx.params);
12
6
  if (bad)
13
7
  return send(ctx, bad);
@@ -40,10 +34,10 @@ const create = async (ctx) => {
40
34
  return fail(ctx, `The transfers from source_transaction ${sourceId} would exceed its amount (${String(charge.amount)}).`, 400, 'invalid_request_error');
41
35
  const bt = typeof charge.balance_transaction === 'string' ? ctx.get('balance_transaction', charge.balance_transaction) : undefined;
42
36
  // a charge that has settled waives nothing: the transfer comes out of what is available
43
- const settledRefusal = bt && Number(bt.available_on) <= Number(ctx.now()) ? settledSourceRefused(ctx, amount, currency) : undefined;
37
+ const settledRefusal = bt && Number(bt.available_on) <= Number(nowUnix(ctx.occurredAt)) ? settledSourceRefused(ctx, amount, currency) : undefined;
44
38
  if (settledRefusal)
45
39
  return settledRefusal;
46
- availableOn = Math.max(Number(ctx.now()), Number(bt?.available_on) || 0);
40
+ availableOn = Math.max(Number(nowUnix(ctx.occurredAt)), Number(bt?.available_on) || 0);
47
41
  group = typeof charge.transfer_group === 'string' ? charge.transfer_group : typeof charge.payment_intent === 'string' ? `group_${charge.payment_intent}` : undefined;
48
42
  // the generated group is the charge's too
49
43
  if (group && charge.transfer_group !== group)
@@ -62,93 +56,4 @@ const create = async (ctx) => {
62
56
  reversals: emptyList(`/v1/transfers/${id}/reversals`),
63
57
  destination_payment: `py_${id.replace(/^tr_/, '')}`,
64
58
  }));
65
- };
66
- /** A transfer from a charge whose funds have settled: "With a source_transaction, the transfer request returns success
67
- * regardless of your available balance if the related charge hasn't settled yet" (docs.stripe.com/connect/separate-
68
- * charges-and-transfers), so a settled one comes out of the available balance. */
69
- function settledSourceRefused(ctx, amount, currency) {
70
- return refusePayout(ctx, amount, currency, undefined);
71
- }
72
- /** An application fee refunded to its whole through its own refunds endpoint: the fee machine's move, or its refusal. */
73
- function feeFullyRefunded(ctx, resource, flag, id) {
74
- const refused = ctx.legal(resource, flag, ctx.call.operation.id, 'false', 'true', id);
75
- return refused ? ctx.refuse(refused) : undefined;
76
- }
77
- /** Take `amount` (the remainder by default) back out of a parent's total, as a child row appended to its list. */
78
- async function giveBack(ctx, o) {
79
- const id = String(o.parent.id);
80
- const total = Number(o.parent.amount ?? 0);
81
- const already = Number(o.parent[o.doneField] ?? 0);
82
- const remaining = total - already;
83
- const amount = ctx.params.amount !== undefined ? Math.trunc(Number(ctx.params.amount) || 0) : remaining;
84
- if (amount <= 0 || amount > remaining)
85
- return fail(ctx, o.tooLarge(remaining), 400, 'amount_too_large');
86
- const done = already + amount;
87
- // a fee refunded in full is `refunded`: the application fee machine's move (a transfer's `reversed` is no state)
88
- const feeRefusal = o.parentResource === 'application_fee' && done >= total && o.parent[o.flag] !== true ? feeFullyRefunded(ctx, o.parentResource, o.flag, id) : undefined;
89
- if (feeRefusal)
90
- return feeRefusal;
91
- // the `metadata` a reversal or a fee refund is created with is its own ("Set of key-value pairs that you can attach to
92
- // an object", docs.stripe.com/api/transfer_reversals/create, docs.stripe.com/api/fee_refunds/create)
93
- const metadata = ctx.params.metadata && typeof ctx.params.metadata === 'object' ? { metadata: ctx.params.metadata } : {};
94
- const child = await created(ctx, o.child, { ...o.childFields(amount), ...metadata }, o.childDefaults);
95
- if (o.settle)
96
- await o.settle(child, amount);
97
- const existing = o.parent[o.flag === 'reversed' ? 'reversals' : 'refunds'] ?? { object: 'list', data: [], has_more: false, total_count: 0 };
98
- const data = [...(existing.data ?? []), child];
99
- await ctx.write(o.parentResource, id, {
100
- [o.doneField]: done, [o.flag]: done >= total,
101
- [o.flag === 'reversed' ? 'reversals' : 'refunds']: { ...existing, data, total_count: data.length, url: o.listUrl },
102
- }, o.op);
103
- return ctx.reply(child);
104
59
  }
105
- const reverse = async (ctx) => {
106
- const id = at(ctx, 'id');
107
- const tr = ctx.get('transfer', id);
108
- if (!tr)
109
- return transferMissing(ctx, id);
110
- return giveBack(ctx, {
111
- parent: tr, parentResource: 'transfer', child: 'transfer_reversal',
112
- childFields: (amount) => ({ amount, currency: tr.currency ?? 'usd', transfer: id }),
113
- childDefaults: { balance_transaction: null, destination_payment_refund: null, source_refund: null, metadata: {} },
114
- doneField: 'amount_reversed', flag: 'reversed', listUrl: `/v1/transfers/${id}/reversals`, op: 'transfer.reversed',
115
- tooLarge: (remaining) => `Transfer ${id} can only be reversed up to ${remaining}.`,
116
- settle: async (child, amount) => {
117
- const bt = await settleTransferReversal(ctx, String(child.id), amount, String(tr.currency ?? 'usd'), String(tr.destination));
118
- await ctx.write('transfer_reversal', String(child.id), { balance_transaction: bt }, 'transfer_reversal.updated');
119
- },
120
- });
121
- };
122
- const reversals = async (ctx) => {
123
- const id = at(ctx, 'id');
124
- if (!ctx.get('transfer', id))
125
- return transferMissing(ctx, id);
126
- return list(ctx, 'transfer_reversal', newest(ctx, 'transfer_reversal').filter((r) => r.transfer === id));
127
- };
128
- const feeMissing = (ctx, id) => fail(ctx, `No such application fee: '${id}'`, 404, 'resource_missing');
129
- const refundFee = async (ctx) => {
130
- const id = at(ctx, 'id');
131
- const fee = ctx.get('application_fee', id);
132
- if (!fee)
133
- return feeMissing(ctx, id);
134
- return giveBack(ctx, {
135
- parent: fee, parentResource: 'application_fee', child: 'fee_refund',
136
- childFields: (amount) => ({ amount, currency: fee.currency ?? 'usd', fee: id }),
137
- childDefaults: { balance_transaction: null, metadata: {} },
138
- doneField: 'amount_refunded', flag: 'refunded', listUrl: `/v1/application_fees/${id}/refunds`, op: 'application_fee.refunded',
139
- tooLarge: (remaining) => `Application fee ${id} can only be refunded up to ${remaining}.`,
140
- });
141
- };
142
- const feeRefunds = async (ctx) => {
143
- const id = at(ctx, 'id');
144
- if (!ctx.get('application_fee', id))
145
- return feeMissing(ctx, id);
146
- return list(ctx, 'fee_refund', newest(ctx, 'fee_refund').filter((r) => r.fee === id));
147
- };
148
- export const transfers = {
149
- PostTransfers: create,
150
- PostTransfersIdReversals: reverse,
151
- GetTransfersIdReversals: reversals,
152
- PostApplicationFeesIdRefunds: refundFee,
153
- GetApplicationFeesIdRefunds: feeRefunds,
154
- };
@@ -0,0 +1,2 @@
1
+ import type { HandlerContext } from '@volter/world-core';
2
+ export declare function PostWebhookEndpoints(ctx: HandlerContext): Promise<Response>;
@@ -0,0 +1,26 @@
1
+ import { asBool } from "../engine/stripe.js";
2
+ import { WE } from "../engine/webhook-endpoints.js";
3
+ import { created, fail } from "./shared.js";
4
+ // an endpoint is enabled at once and signs each event with a secret of its own, answered by this create alone (the
5
+ // around answers no other read of it)
6
+ export async function PostWebhookEndpoints(ctx) {
7
+ const params = ctx.params;
8
+ // source: spec:PostWebhookEndpoints "The URL of the webhook endpoint."
9
+ if (typeof params.url !== 'string' || params.url === '')
10
+ return fail(ctx, 'Missing required param: url.', 400, 'parameter_missing');
11
+ // source: spec:PostWebhookEndpoints "The list of events to enable for this endpoint."
12
+ if (params.enabled_events === undefined || params.enabled_events === '' || (Array.isArray(params.enabled_events) && !params.enabled_events.length))
13
+ return fail(ctx, 'Missing required param: enabled_events.', 400, 'parameter_missing');
14
+ const id = ctx.mint(WE);
15
+ // source: spec:/components/schemas/webhook_endpoint/properties/secret/description "The endpoint's secret, used to generate"
16
+ const secret = `whsec_${(await ctx.secret(`webhook-endpoint-secret:${id}`)).replace(/[^A-Za-z0-9]/g, '').slice(0, 32)}`;
17
+ return ctx.reply(await created(ctx, WE, { ...params, id }, {
18
+ url: params.url, enabled_events: Array.isArray(params.enabled_events) ? params.enabled_events.map(String) : [String(params.enabled_events)],
19
+ // source: spec:/components/schemas/webhook_endpoint/properties/status/description "The status of the webhook."
20
+ status: 'enabled', livemode: false, metadata: {}, application: null,
21
+ api_version: typeof params.api_version === 'string' ? params.api_version : null,
22
+ description: typeof params.description === 'string' ? params.description : null,
23
+ // source: spec:PostWebhookEndpoints "Whether this endpoint should receive events from connected accounts"
24
+ connect: asBool(params.connect), secret,
25
+ }));
26
+ }
@@ -0,0 +1,7 @@
1
+ import { type PackFetchOptions } from '@volter/world-core';
2
+ export declare function createStripeTwinServer(options?: PackFetchOptions & {
3
+ port?: number;
4
+ }): Promise<{
5
+ port: number;
6
+ stop: () => void;
7
+ }>;
@@ -0,0 +1,7 @@
1
+ // FETCH-FIRST (runtime contract R12b): a fixed file, the kernel's serve seam around the pack's fetch (./fetch.ts).
2
+ import { serveHttp } from '@volter/world-core';
3
+ import { createStripeFetch } from "./fetch.js";
4
+ export async function createStripeTwinServer(options = {}) {
5
+ const server = await serveHttp({ port: options.port ?? 0, idleTimeout: 60, fetch: createStripeFetch(options) });
6
+ return { port: server.port ?? options.port ?? 0, stop: () => server.stop(true) };
7
+ }
@@ -0,0 +1,94 @@
1
+ {
2
+ "//": "GENERATED by scripts/pack-facts.ts — current pack descriptors and explicit world-runtime server backings; no prior-artifact entries are retained.",
3
+ "packs": {
4
+ "stripe": {
5
+ "adoption": {
6
+ "pypi": [
7
+ "stripe"
8
+ ],
9
+ "sdks": [
10
+ "stripe"
11
+ ],
12
+ "envStems": [
13
+ "STRIPE",
14
+ "NEXTPRIVATESTRIPE"
15
+ ]
16
+ },
17
+ "hosts": [
18
+ {
19
+ "host": "api.stripe.com"
20
+ },
21
+ {
22
+ "host": "checkout.stripe.com",
23
+ "pathPattern": "^/c/pay/"
24
+ },
25
+ {
26
+ "host": "billing.stripe.com",
27
+ "pathPattern": "^/p/session/"
28
+ },
29
+ {
30
+ "host": "connect.stripe.com",
31
+ "pathPattern": "^/setup/"
32
+ },
33
+ {
34
+ "host": "dashboard.stripe.com",
35
+ "pathPattern": "^/radar/lists(?:/[^/]+)?/?$|^/test/issuing/balance/?$|^/settings/public/?$"
36
+ },
37
+ {
38
+ "host": "verify.stripe.com",
39
+ "pathPattern": "^/start/"
40
+ },
41
+ {
42
+ "host": "js.stripe.com",
43
+ "pathPattern": "^/v3/?$|^/(v3|[a-z]+)/stripe\\.js$"
44
+ }
45
+ ],
46
+ "archetype": "crud",
47
+ "protocol": {
48
+ "declared": "3",
49
+ "major": 3,
50
+ "standing": "current"
51
+ },
52
+ "transport": "rest",
53
+ "resources": [
54
+ "charge",
55
+ "customer",
56
+ "payment_intent",
57
+ "setup_intent",
58
+ "payment_method",
59
+ "subscription",
60
+ "price",
61
+ "product",
62
+ "invoice",
63
+ "invoiceitem",
64
+ "refund",
65
+ "event"
66
+ ],
67
+ "credentialDoor": {
68
+ "path": "/_twin/app-credentials",
69
+ "body": {},
70
+ "fill": {
71
+ "STRIPE_SECRET_KEY": "secret_key",
72
+ "STRIPE_API_KEY": "secret_key",
73
+ "STRIPE_PRIVATE_KEY": "secret_key",
74
+ "BILLING_STRIPE_API_KEY": "secret_key",
75
+ "STRIPE_PUBLISHABLE_KEY": "publishable_key",
76
+ "NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY": "publishable_key",
77
+ "NEXT_PUBLIC_STRIPE_PUBLIC_KEY": "publishable_key",
78
+ "NEXT_PUBLIC_STRIPE_KEY": "publishable_key",
79
+ "STRIPE_WEBHOOK_SECRET": "webhook_secret",
80
+ "STRIPE_WEBHOOK_SIGNING_SECRET": "webhook_secret",
81
+ "STRIPE_ENDPOINT_SECRET": "webhook_secret",
82
+ "STRIPE_WEBHOOK_SECRET_KEY": "webhook_secret",
83
+ "NEXT_PRIVATE_STRIPE_WEBHOOK_SECRET": "webhook_secret",
84
+ "BILLING_STRIPE_WEBHOOK_SECRET": "webhook_secret",
85
+ "STRIPE_CONNECT_WEBHOOK_SECRET": "connect_webhook_secret",
86
+ "STRIPE_WEBHOOK_SECRET_CONNECT": "connect_webhook_secret",
87
+ "STRIPE_CONNECT_WEBHOOK_SIGNING_SECRET": "connect_webhook_secret"
88
+ }
89
+ },
90
+ "serveExport": "createStripeTwinServer"
91
+ }
92
+ },
93
+ "undeclared": []
94
+ }