@volter/twin-stripe 3.0.0 → 3.0.2

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 (253) hide show
  1. package/README.md +75 -21
  2. package/dist/journeys/coverage.json +596 -0
  3. package/dist/journeys/customer-life.json +6108 -0
  4. package/dist/journeys/customer-life.outline.md +371 -0
  5. package/dist/journeys/decisions.json +677 -0
  6. package/dist/journeys/demand.json +706 -0
  7. package/dist/journeys/score.json +853 -0
  8. package/dist/journeys/unreachable.json +102 -0
  9. package/dist/journeys/vendor-examples.json +8010 -0
  10. package/dist/spec/SOURCE.md +5 -1
  11. package/dist/spec/doc-examples.json +445 -0
  12. package/dist/spec/sources.json +135 -207
  13. package/dist/src/cli.d.ts +0 -1
  14. package/dist/src/cli.js +0 -2
  15. package/dist/src/engine/after-payment.d.ts +0 -1
  16. package/dist/src/engine/after-payment.js +0 -1
  17. package/dist/src/engine/common.d.ts +5 -5
  18. package/dist/src/engine/common.js +13 -11
  19. package/dist/src/engine/connect.d.ts +0 -21
  20. package/dist/src/engine/connect.js +1 -82
  21. package/dist/src/engine/customers.d.ts +0 -8
  22. package/dist/src/engine/customers.js +0 -22
  23. package/dist/src/engine/display.d.ts +0 -3
  24. package/dist/src/engine/display.js +0 -3
  25. package/dist/src/engine/files.d.ts +0 -7
  26. package/dist/src/engine/files.js +0 -10
  27. package/dist/src/engine/invoices.d.ts +6 -9
  28. package/dist/src/engine/invoices.js +56 -29
  29. package/dist/src/engine/issuing.d.ts +6 -8
  30. package/dist/src/engine/issuing.js +19 -10
  31. package/dist/src/engine/ledger.d.ts +0 -1
  32. package/dist/src/engine/ledger.js +0 -1
  33. package/dist/src/engine/oauth.js +1 -2
  34. package/dist/src/engine/refunds.js +2 -27
  35. package/dist/src/engine/stripe.d.ts +2 -7
  36. package/dist/src/engine/stripe.js +34 -83
  37. package/dist/src/engine/subscriptions.d.ts +0 -1
  38. package/dist/src/engine/subscriptions.js +0 -1
  39. package/dist/src/engine/version.d.ts +0 -2
  40. package/dist/src/engine/version.js +17 -6
  41. package/dist/src/fetch.js +2 -2
  42. package/dist/src/generated/surface.gen.json +1 -1
  43. package/dist/src/generated/ui.gen.json +1 -1
  44. package/dist/src/index.js +5 -3
  45. package/dist/src/manifest.js +348 -220
  46. package/dist/src/screens/billing-portal.js +5 -5
  47. package/dist/src/screens/{connect-oauth.d.ts → checkout-js.d.ts} +0 -1
  48. package/dist/src/screens/checkout-js.js +84 -0
  49. package/dist/src/screens/connect-onboarding.js +3 -3
  50. package/dist/src/screens/dashboard.d.ts +1 -1
  51. package/dist/src/screens/dashboard.js +56 -53
  52. package/dist/src/screens/stripe-js.js +53 -93
  53. package/dist/src/semantics/account.d.ts +2 -0
  54. package/dist/src/semantics/account.js +8 -0
  55. package/dist/src/semantics/accounts.js +3 -1
  56. package/dist/src/semantics/around.js +3 -6
  57. package/dist/src/semantics/billing_portal.d.ts +0 -1
  58. package/dist/src/semantics/billing_portal.js +1 -7
  59. package/dist/src/semantics/checkout.d.ts +1 -1
  60. package/dist/src/semantics/checkout.js +18 -15
  61. package/dist/src/semantics/clock.js +1 -7
  62. package/dist/src/semantics/customers.d.ts +1 -2
  63. package/dist/src/semantics/customers.js +32 -38
  64. package/dist/src/semantics/entitlements.d.ts +0 -2
  65. package/dist/src/semantics/entitlements.js +4 -50
  66. package/dist/src/semantics/events.d.ts +2 -3
  67. package/dist/src/semantics/events.js +6 -11
  68. package/dist/src/semantics/index.js +16 -38
  69. package/dist/src/semantics/invoices.d.ts +3 -8
  70. package/dist/src/semantics/invoices.js +134 -127
  71. package/dist/src/semantics/issuing.d.ts +6 -0
  72. package/dist/src/semantics/issuing.js +77 -0
  73. package/dist/src/semantics/payment_intents.d.ts +0 -1
  74. package/dist/src/semantics/payment_intents.js +5 -13
  75. package/dist/src/semantics/payment_methods.d.ts +0 -2
  76. package/dist/src/semantics/payment_methods.js +2 -26
  77. package/dist/src/semantics/payouts.d.ts +1 -0
  78. package/dist/src/semantics/payouts.js +8 -1
  79. package/dist/src/semantics/products.d.ts +1 -3
  80. package/dist/src/semantics/products.js +3 -14
  81. package/dist/src/semantics/refunds.d.ts +1 -2
  82. package/dist/src/semantics/refunds.js +1 -5
  83. package/dist/src/semantics/shared.d.ts +64 -336
  84. package/dist/src/semantics/shared.js +326 -1336
  85. package/dist/src/semantics/states.d.ts +20 -89
  86. package/dist/src/semantics/states.js +116 -334
  87. package/dist/src/semantics/subscriptions.d.ts +1 -2
  88. package/dist/src/semantics/subscriptions.js +23 -145
  89. package/dist/src/semantics/test_helpers.d.ts +2 -5
  90. package/dist/src/semantics/test_helpers.js +121 -43
  91. package/dist/src/semantics/webhook_endpoints.d.ts +2 -0
  92. package/dist/src/semantics/webhook_endpoints.js +26 -0
  93. package/generated/pack-facts.json +3 -3
  94. package/journeys/coverage.json +596 -0
  95. package/journeys/customer-life.json +6108 -0
  96. package/journeys/customer-life.outline.md +371 -0
  97. package/journeys/decisions.json +677 -0
  98. package/journeys/demand.json +706 -0
  99. package/journeys/score.json +853 -0
  100. package/journeys/unreachable.json +102 -0
  101. package/journeys/vendor-examples.json +8010 -0
  102. package/package.json +11 -10
  103. package/spec/SOURCE.md +5 -1
  104. package/spec/doc-examples.json +445 -0
  105. package/spec/sources.json +135 -207
  106. package/src/cli.ts +0 -3
  107. package/src/engine/after-payment.ts +0 -2
  108. package/src/engine/balance.ts +0 -1
  109. package/src/engine/checkout.ts +0 -1
  110. package/src/engine/common.ts +19 -17
  111. package/src/engine/connect.ts +1 -79
  112. package/src/engine/customers.ts +0 -25
  113. package/src/engine/display.ts +2 -3
  114. package/src/engine/files.ts +0 -13
  115. package/src/engine/invoices.ts +64 -33
  116. package/src/engine/issuing.ts +16 -11
  117. package/src/engine/ledger.ts +0 -2
  118. package/src/engine/oauth.ts +1 -2
  119. package/src/engine/onboarding.ts +0 -1
  120. package/src/engine/params.ts +0 -1
  121. package/src/engine/payment-intents.ts +0 -1
  122. package/src/engine/payment-methods.ts +0 -1
  123. package/src/engine/refunds.ts +2 -28
  124. package/src/engine/renewals.ts +0 -1
  125. package/src/engine/stripe.ts +35 -83
  126. package/src/engine/subscriptions.ts +0 -3
  127. package/src/engine/transfers.ts +0 -1
  128. package/src/engine/version.ts +15 -7
  129. package/src/engine/webhooks.ts +0 -2
  130. package/src/fetch.ts +2 -2
  131. package/src/generated/surface.gen.json +1 -1
  132. package/src/generated/ui.gen.json +1 -1
  133. package/src/index.ts +6 -4
  134. package/src/manifest.ts +348 -220
  135. package/src/screens/billing-portal.tsx +5 -7
  136. package/src/screens/checkout-js.ts +80 -0
  137. package/src/screens/checkout.tsx +0 -2
  138. package/src/screens/connect-onboarding.tsx +3 -5
  139. package/src/screens/dashboard.tsx +55 -73
  140. package/src/screens/stripe-js.ts +57 -125
  141. package/src/semantics/account.ts +10 -0
  142. package/src/semantics/account_links.ts +0 -1
  143. package/src/semantics/accounts.ts +8 -7
  144. package/src/semantics/apps.ts +1 -2
  145. package/src/semantics/around.ts +3 -6
  146. package/src/semantics/balance.ts +0 -1
  147. package/src/semantics/balance_transactions.ts +1 -3
  148. package/src/semantics/billing_portal.ts +1 -7
  149. package/src/semantics/charges.ts +1 -6
  150. package/src/semantics/checkout.ts +16 -12
  151. package/src/semantics/clock.ts +1 -8
  152. package/src/semantics/coupons.ts +0 -1
  153. package/src/semantics/customers.ts +32 -35
  154. package/src/semantics/doors.ts +2 -3
  155. package/src/semantics/entitlements.ts +1 -45
  156. package/src/semantics/events.ts +7 -14
  157. package/src/semantics/index.ts +16 -38
  158. package/src/semantics/invoice_payments.ts +1 -3
  159. package/src/semantics/invoices.ts +124 -119
  160. package/src/semantics/issuing.ts +74 -0
  161. package/src/semantics/payment_intents.ts +10 -17
  162. package/src/semantics/payment_methods.ts +2 -25
  163. package/src/semantics/payouts.ts +9 -3
  164. package/src/semantics/prices.ts +0 -1
  165. package/src/semantics/products.ts +4 -14
  166. package/src/semantics/promotion_codes.ts +0 -1
  167. package/src/semantics/radar.ts +1 -3
  168. package/src/semantics/refunds.ts +2 -11
  169. package/src/semantics/shared.ts +350 -1382
  170. package/src/semantics/states.ts +109 -330
  171. package/src/semantics/subscriptions.ts +25 -145
  172. package/src/semantics/test_helpers.ts +109 -43
  173. package/src/semantics/transfers.ts +1 -3
  174. package/src/semantics/webhook_endpoints.ts +27 -0
  175. package/src/server.ts +0 -1
  176. package/dist/generated/pack-facts.json +0 -94
  177. package/dist/src/engine/billing.d.ts +0 -5
  178. package/dist/src/engine/billing.js +0 -6
  179. package/dist/src/engine/charges.d.ts +0 -6
  180. package/dist/src/engine/charges.js +0 -13
  181. package/dist/src/engine/connect-settings.d.ts +0 -16
  182. package/dist/src/engine/connect-settings.js +0 -26
  183. package/dist/src/engine/coupons.d.ts +0 -0
  184. package/dist/src/engine/coupons.js +0 -5
  185. package/dist/src/engine/credit-notes.d.ts +0 -1
  186. package/dist/src/engine/credit-notes.js +0 -5
  187. package/dist/src/engine/disputes.d.ts +0 -0
  188. package/dist/src/engine/disputes.js +0 -9
  189. package/dist/src/engine/entitlements.d.ts +0 -1
  190. package/dist/src/engine/entitlements.js +0 -4
  191. package/dist/src/engine/ephemeral-keys.d.ts +0 -0
  192. package/dist/src/engine/ephemeral-keys.js +0 -4
  193. package/dist/src/engine/front.d.ts +0 -5
  194. package/dist/src/engine/front.js +0 -25
  195. package/dist/src/engine/payment-links.d.ts +0 -1
  196. package/dist/src/engine/payment-links.js +0 -5
  197. package/dist/src/engine/plans.d.ts +0 -6
  198. package/dist/src/engine/plans.js +0 -26
  199. package/dist/src/engine/platform.d.ts +0 -39
  200. package/dist/src/engine/platform.js +0 -34
  201. package/dist/src/engine/products.d.ts +0 -0
  202. package/dist/src/engine/products.js +0 -4
  203. package/dist/src/engine/setup-intents.d.ts +0 -1
  204. package/dist/src/engine/setup-intents.js +0 -4
  205. package/dist/src/engine/subscription-schedules.d.ts +0 -3
  206. package/dist/src/engine/subscription-schedules.js +0 -1
  207. package/dist/src/engine/tax.d.ts +0 -7
  208. package/dist/src/engine/tax.js +0 -28
  209. package/dist/src/engine/terminal.d.ts +0 -4
  210. package/dist/src/engine/terminal.js +0 -20
  211. package/dist/src/engine/test-clocks.d.ts +0 -5
  212. package/dist/src/engine/test-clocks.js +0 -9
  213. package/dist/src/engine/tokens.d.ts +0 -7
  214. package/dist/src/engine/tokens.js +0 -20
  215. package/dist/src/engine/treasury.d.ts +0 -23
  216. package/dist/src/engine/treasury.js +0 -45
  217. package/dist/src/screens/connect-oauth.js +0 -333
  218. package/dist/src/semantics/disputes.d.ts +0 -2
  219. package/dist/src/semantics/disputes.js +0 -5
  220. package/dist/src/semantics/invoiceitems.d.ts +0 -3
  221. package/dist/src/semantics/invoiceitems.js +0 -59
  222. package/dist/src/semantics/setup_intents.d.ts +0 -3
  223. package/dist/src/semantics/setup_intents.js +0 -41
  224. package/dist/src/semantics/subscription_items.d.ts +0 -5
  225. package/dist/src/semantics/subscription_items.js +0 -55
  226. package/dist/src/semantics/subscription_schedules.d.ts +0 -4
  227. package/dist/src/semantics/subscription_schedules.js +0 -60
  228. package/src/engine/billing.ts +0 -16
  229. package/src/engine/charges.ts +0 -19
  230. package/src/engine/connect-settings.ts +0 -23
  231. package/src/engine/coupons.ts +0 -5
  232. package/src/engine/credit-notes.ts +0 -6
  233. package/src/engine/disputes.ts +0 -9
  234. package/src/engine/entitlements.ts +0 -5
  235. package/src/engine/ephemeral-keys.ts +0 -3
  236. package/src/engine/front.ts +0 -31
  237. package/src/engine/payment-links.ts +0 -6
  238. package/src/engine/plans.ts +0 -42
  239. package/src/engine/platform.ts +0 -47
  240. package/src/engine/products.ts +0 -3
  241. package/src/engine/setup-intents.ts +0 -5
  242. package/src/engine/subscription-schedules.ts +0 -10
  243. package/src/engine/tax.ts +0 -39
  244. package/src/engine/terminal.ts +0 -23
  245. package/src/engine/test-clocks.ts +0 -11
  246. package/src/engine/tokens.ts +0 -22
  247. package/src/engine/treasury.ts +0 -47
  248. package/src/screens/connect-oauth.tsx +0 -376
  249. package/src/semantics/disputes.ts +0 -12
  250. package/src/semantics/invoiceitems.ts +0 -59
  251. package/src/semantics/setup_intents.ts +0 -45
  252. package/src/semantics/subscription_items.ts +0 -54
  253. package/src/semantics/subscription_schedules.ts +0 -66
@@ -0,0 +1,706 @@
1
+ {
2
+ "measured": "Applications are read at the scanned commits below. Demand includes SDK methods, delegated Stripe.js calls, raw URLs and API-path strings, and shipped guides that use a shipped feature. Credentials authorize a feature; they do not opt into it. Postiz ships Stripe as its web billing provider. Twenty workflow HTTP actions and enterprise website billing are independent of the server billing flag (which defaults false). Cal payment/OAuth needs an app-store install; its metadata installed flag makes the catalog entry available, while the user install requires a credential created by the install callback. All products in generated/DEMAND.md’s Volter column were searched, including their own World scenarios and seeds; none calls a removed operation. The launch does not name Stripe. Separately invoked Rallly billing CLI and Dub maintenance scripts are outside the running products. Dub’s raw GET /v1/mandates, POST /v1/fx_quotes and v2 calls remain outside the pinned v1 document and answer the vendor gap; their demand is retained, not classified optional.",
3
+ "applications": [
4
+ {
5
+ "name": "Open Autonomy",
6
+ "commit": "0841076bed91",
7
+ "client": "fetch (form-encoded REST, packages/backend/src/stripe.ts)",
8
+ "backend": [
9
+ {
10
+ "call": "stripe(env, 'POST', '/v1/issuing/cardholders')",
11
+ "operation": "PostIssuingCardholders",
12
+ "evidence": "packages/backend/src/rails.ts:35"
13
+ },
14
+ {
15
+ "call": "stripe(env, 'POST', '/v1/issuing/cards')",
16
+ "operation": "PostIssuingCards",
17
+ "evidence": "packages/backend/src/rails.ts:40"
18
+ },
19
+ {
20
+ "call": "stripe(env, 'GET', '/v1/issuing/cards/{card}', expand number, cvc)",
21
+ "operation": "GetIssuingCardsCard",
22
+ "evidence": "packages/backend/src/rails.ts:48"
23
+ },
24
+ {
25
+ "call": "stripe(env, 'POST', '/v1/issuing/cards/{card}', status canceled)",
26
+ "operation": "PostIssuingCardsCard",
27
+ "evidence": "packages/backend/src/rails.ts:99; packages/backend/src/rails.ts:107; packages/backend/src/rails.ts:118"
28
+ },
29
+ {
30
+ "call": "stripe(env, 'POST', '/v1/issuing/authorizations/{id}/approve' | '/decline')",
31
+ "operation": "PostIssuingAuthorizationsAuthorizationApprove; PostIssuingAuthorizationsAuthorizationDecline",
32
+ "evidence": "packages/backend/src/rails.ts:109"
33
+ },
34
+ {
35
+ "call": "fetch POST /v1/webhook_endpoints: the World's platform enrols its webhook endpoint for the card rail's three events",
36
+ "operation": "PostWebhookEndpoints",
37
+ "evidence": "apps/platform/world.ts:46"
38
+ },
39
+ {
40
+ "call": "curl -sf POST /v1/test_helpers/issuing/authorizations, merchant Namecheap, amount 200",
41
+ "operation": "PostTestHelpersIssuingAuthorizations",
42
+ "evidence": "world/model/scenario.ts:60"
43
+ },
44
+ {
45
+ "call": "curl -sf POST /v1/test_helpers/issuing/authorizations/{authorization}/capture",
46
+ "operation": "PostTestHelpersIssuingAuthorizationsAuthorizationCapture",
47
+ "evidence": "world/model/scenario.ts:62"
48
+ }
49
+ ],
50
+ "webhooks": [
51
+ {
52
+ "call": "POST /webhooks/stripe, verified by verifyStripeSignature (Stripe-Signature, t=,v1=, five minutes); a real-time issuing_authorization.request is answered {approved}",
53
+ "events": [
54
+ "issuing_authorization.request",
55
+ "issuing_authorization.created",
56
+ "issuing_transaction.created"
57
+ ],
58
+ "evidence": "packages/backend/src/rails.ts:77; packages/backend/src/rails.ts:88; packages/backend/src/rails.ts:113; packages/backend/src/stripe.ts:31"
59
+ }
60
+ ]
61
+ },
62
+ {
63
+ "name": "Twin",
64
+ "commit": "96ca4478bb39",
65
+ "client": "fetch (the platform's sample World seeder)",
66
+ "backend": [
67
+ {
68
+ "call": "call('stripe', '/v1/customers?email=…')",
69
+ "operation": "GetCustomers",
70
+ "evidence": "apps/platform/src/sample.ts:40"
71
+ },
72
+ {
73
+ "call": "call('stripe', '/v1/customers', form)",
74
+ "operation": "PostCustomers",
75
+ "evidence": "apps/platform/src/sample.ts:43"
76
+ },
77
+ {
78
+ "call": "call('stripe', '/v1/products', form)",
79
+ "operation": "PostProducts",
80
+ "evidence": "apps/platform/src/sample.ts:44"
81
+ },
82
+ {
83
+ "call": "call('stripe', '/v1/prices', form)",
84
+ "operation": "PostPrices",
85
+ "evidence": "apps/platform/src/sample.ts:45"
86
+ },
87
+ {
88
+ "call": "call('stripe', '/v1/payment_intents', confirm=true, payment_method=pm_card_visa)",
89
+ "operation": "PostPaymentIntents",
90
+ "evidence": "apps/platform/src/sample.ts:47"
91
+ }
92
+ ]
93
+ },
94
+ {
95
+ "name": "Volter Harness",
96
+ "commit": "62620578c014",
97
+ "client": "urllib (Python), container/retake/stack/app/src/app.py",
98
+ "backend": [
99
+ {
100
+ "call": "stripe('/v1/subscriptions', {'limit': 100, 'status': 'all'})",
101
+ "operation": "GetSubscriptions",
102
+ "evidence": "container/retake/stack/app/src/app.py:115"
103
+ },
104
+ {
105
+ "call": "stripe('/v1/customers', {'limit': 100})",
106
+ "operation": "GetCustomers",
107
+ "evidence": "container/retake/stack/app/src/app.py:116"
108
+ }
109
+ ]
110
+ },
111
+ {
112
+ "name": "dubinc/dub",
113
+ "commit": "7e0101363b2a",
114
+ "client": "stripe-node",
115
+ "backend": [
116
+ {
117
+ "call": "stripe.apps.secrets.create",
118
+ "operation": "PostAppsSecrets",
119
+ "evidence": "packages/stripe-app/src/utils/secrets.ts:20"
120
+ },
121
+ {
122
+ "call": "stripe.apps.secrets.find",
123
+ "operation": "GetAppsSecretsFind",
124
+ "evidence": "packages/stripe-app/src/utils/secrets.ts:36"
125
+ },
126
+ {
127
+ "call": "stripe.apps.secrets.deleteWhere",
128
+ "operation": "PostAppsSecretsDelete",
129
+ "evidence": "packages/stripe-app/src/utils/secrets.ts:60"
130
+ },
131
+ {
132
+ "call": "stripe.customers.retrieve",
133
+ "operation": "GetCustomersCustomer",
134
+ "evidence": "apps/web/app/(ee)/app.dub.co/invoices/[invoiceId]/domain-renewal-invoice.tsx:48; apps/web/app/(ee)/app.dub.co/invoices/[invoiceId]/partner-payout-invoice.tsx:78; apps/web/app/(ee)/api/admin/ban/delete-workspace-admin.ts:78; apps/web/app/(ee)/api/stripe/webhook/utils/detect-and-handle-fraudulent-failed-charge.ts:37; apps/web/app/api/workspaces/[idOrSlug]/billing/payment-methods/route.ts:66; apps/web/lib/tapfiliate/update-stripe-customers.ts:179; apps/web/app/(ee)/api/stripe/integration/webhook/utils/get-connected-customer.ts:20"
135
+ },
136
+ {
137
+ "call": "stripe.customers.search",
138
+ "operation": "GetCustomersSearch",
139
+ "evidence": "apps/web/app/(ee)/api/customers/search-stripe/route.ts:53; apps/web/lib/tapfiliate/update-stripe-customers.ts:133; apps/web/lib/tolt/update-stripe-customers.ts:121; apps/web/lib/partnerstack/update-stripe-customers.ts:160; apps/web/lib/firstpromoter/update-stripe-customers.ts:119"
140
+ },
141
+ {
142
+ "call": "stripe.transfers.list",
143
+ "operation": "GetTransfers",
144
+ "evidence": "apps/web/app/(ee)/api/admin/partners/delete-account/route.ts:50; apps/web/app/(ee)/api/cron/payouts/balance-available/route.ts:151"
145
+ },
146
+ {
147
+ "call": "stripe.accounts.del",
148
+ "operation": "DeleteAccountsAccount",
149
+ "evidence": "apps/web/app/(ee)/api/admin/partners/delete-account/route.ts:64"
150
+ },
151
+ {
152
+ "call": "stripe.balance.retrieve",
153
+ "operation": "GetBalance",
154
+ "evidence": "apps/web/app/(ee)/api/cron/trigger-withdrawal/route.ts:14; apps/web/app/(ee)/api/cron/payouts/balance-available/route.ts:50; apps/web/lib/stripe/fund-financial-account.ts:25"
155
+ },
156
+ {
157
+ "call": "stripe.payouts.create",
158
+ "operation": "PostPayouts",
159
+ "evidence": "apps/web/app/(ee)/api/cron/trigger-withdrawal/route.ts:59; apps/web/app/(ee)/api/cron/payouts/balance-available/route.ts:134"
160
+ },
161
+ {
162
+ "call": "stripe.balanceTransactions.list",
163
+ "operation": "GetBalanceTransactions",
164
+ "evidence": "apps/web/app/(ee)/api/cron/payouts/charge-succeeded/utils.ts:78"
165
+ },
166
+ {
167
+ "call": "stripe.paymentMethods.retrieve",
168
+ "operation": "GetPaymentMethodsPaymentMethod",
169
+ "evidence": "apps/web/app/(ee)/api/cron/payouts/process/process-payouts.ts:138; apps/web/app/api/workspaces/[idOrSlug]/billing/payment-methods/route.ts:39; apps/web/lib/actions/partners/confirm-payouts.ts:156"
170
+ },
171
+ {
172
+ "call": "stripe.paymentIntents.create",
173
+ "operation": "PostPaymentIntents",
174
+ "evidence": "apps/web/app/(ee)/api/cron/payouts/process/process-payouts.ts:221; apps/web/lib/stripe/create-payment-intent.ts:44"
175
+ },
176
+ {
177
+ "call": "stripe.subscriptions.retrieve",
178
+ "operation": "GetSubscriptionsSubscriptionExposedId",
179
+ "evidence": "apps/web/app/(ee)/api/stripe/webhook/checkout-session-completed.ts:50"
180
+ },
181
+ {
182
+ "call": "stripe.subscriptions.list",
183
+ "operation": "GetSubscriptions",
184
+ "evidence": "apps/web/app/(ee)/api/stripe/webhook/customer-subscription-deleted.ts:77; apps/web/app/(ee)/api/stripe/webhook/customer-subscription-deleted.ts:81; apps/web/app/api/workspaces/[idOrSlug]/billing/activate-paid-plan/route.ts:13; apps/web/app/api/workspaces/[idOrSlug]/billing/activate-paid-plan/route.ts:28; apps/web/app/api/workspaces/[idOrSlug]/billing/cancel/route.ts:29"
185
+ },
186
+ {
187
+ "call": "stripe.invoices.retrieve",
188
+ "operation": "GetInvoicesInvoice",
189
+ "evidence": "apps/web/app/(ee)/api/stripe/webhook/customer-subscription-deleted.ts:281; apps/web/app/(ee)/api/stripe/integration/webhook/invoice-paid.ts:476; apps/web/app/api/workspaces/[idOrSlug]/billing/retry-payment/route.ts:28"
190
+ },
191
+ {
192
+ "call": "stripe.invoices.voidInvoice",
193
+ "operation": "PostInvoicesInvoiceVoid",
194
+ "evidence": "apps/web/app/(ee)/api/stripe/webhook/customer-subscription-deleted.ts:287"
195
+ },
196
+ {
197
+ "call": "stripe.charges.retrieve",
198
+ "operation": "GetChargesCharge",
199
+ "evidence": "apps/web/app/(ee)/api/stripe/webhook/charge-dispute-created.ts:16"
200
+ },
201
+ {
202
+ "call": "stripe.radar.valueListItems.create",
203
+ "operation": "PostRadarValueListItems",
204
+ "evidence": "apps/web/app/(ee)/api/stripe/webhook/utils/add-to-stripe-fraud-value-lists.ts:20; apps/web/app/(ee)/api/stripe/webhook/utils/add-to-stripe-fraud-value-lists.ts:25; apps/web/app/(ee)/api/stripe/webhook/utils/add-to-stripe-fraud-value-lists.ts:31"
205
+ },
206
+ {
207
+ "call": "stripe.invoicePayments.list",
208
+ "operation": "GetInvoicePayments",
209
+ "evidence": "apps/web/app/(ee)/api/stripe/integration/webhook/charge-refunded.ts:22"
210
+ },
211
+ {
212
+ "call": "stripe.checkout.sessions.listLineItems",
213
+ "operation": "GetCheckoutSessionsSessionLineItems",
214
+ "evidence": "apps/web/app/(ee)/api/stripe/integration/webhook/utils/get-checkout-session-products.ts:47"
215
+ },
216
+ {
217
+ "call": "stripe.invoices.list",
218
+ "operation": "GetInvoices",
219
+ "evidence": "apps/web/app/api/workspaces/[idOrSlug]/billing/invoices/route.ts:48; apps/web/lib/api/customers/get-customer-stripe-invoices.ts:65"
220
+ },
221
+ {
222
+ "call": "stripe.paymentMethods.list",
223
+ "operation": "GetPaymentMethods",
224
+ "evidence": "apps/web/app/api/workspaces/[idOrSlug]/billing/payment-methods/route.ts:63; apps/web/lib/stripe/create-payment-intent.ts:20; apps/web/lib/stripe/create-payment-intent.ts:25"
225
+ },
226
+ {
227
+ "call": "stripe.billingPortal.sessions.create",
228
+ "operation": "PostBillingPortalSessions",
229
+ "evidence": "apps/web/app/api/workspaces/[idOrSlug]/billing/payment-methods/route.ts:127; apps/web/app/api/workspaces/[idOrSlug]/billing/manage/route.ts:23; apps/web/app/api/workspaces/[idOrSlug]/billing/upgrade/route.ts:104"
230
+ },
231
+ {
232
+ "call": "stripe.checkout.sessions.create",
233
+ "operation": "PostCheckoutSessions",
234
+ "evidence": "apps/web/app/api/workspaces/[idOrSlug]/billing/payment-methods/route.ts:153; apps/web/app/api/workspaces/[idOrSlug]/billing/upgrade/route.ts:141"
235
+ },
236
+ {
237
+ "call": "stripe.customers.update",
238
+ "operation": "PostCustomersCustomer",
239
+ "evidence": "apps/web/app/api/workspaces/[idOrSlug]/billing/payment-methods/route.ts:201"
240
+ },
241
+ {
242
+ "call": "stripe.paymentMethods.detach",
243
+ "operation": "PostPaymentMethodsPaymentMethodDetach",
244
+ "evidence": "apps/web/app/api/workspaces/[idOrSlug]/billing/payment-methods/route.ts:233; apps/web/lib/actions/partners/confirm-payouts.ts:182"
245
+ },
246
+ {
247
+ "call": "stripe.prices.list",
248
+ "operation": "GetPrices",
249
+ "evidence": "apps/web/app/api/workspaces/[idOrSlug]/billing/upgrade/route.ts:37"
250
+ },
251
+ {
252
+ "call": "stripe.subscriptions.update",
253
+ "operation": "PostSubscriptionsSubscriptionExposedId",
254
+ "evidence": "apps/web/app/api/workspaces/[idOrSlug]/billing/upgrade/route.ts:69; apps/web/app/api/workspaces/[idOrSlug]/billing/activate-paid-plan/route.ts:21; apps/web/app/(ee)/api/stripe/webhook/customer-subscription-created.ts:14; apps/web/app/api/workspaces/[idOrSlug]/billing/cancel/route.ts:48; apps/web/app/api/workspaces/[idOrSlug]/billing/cancel/route.ts:56; apps/web/lib/stripe/cancel-subscription.ts:23"
255
+ },
256
+ {
257
+ "call": "stripe.invoices.pay",
258
+ "operation": "PostInvoicesInvoicePay",
259
+ "evidence": "apps/web/app/api/workspaces/[idOrSlug]/billing/retry-payment/route.ts:44"
260
+ },
261
+ {
262
+ "call": "stripe.coupons.retrieve",
263
+ "operation": "GetCouponsCoupon",
264
+ "evidence": "apps/web/lib/rewardful/import-campaigns.ts:184; apps/web/lib/discounts/discount-provider-stripe.ts:87"
265
+ },
266
+ {
267
+ "call": "stripe.accounts.listExternalAccounts",
268
+ "operation": "GetAccountsAccountExternalAccounts",
269
+ "evidence": "apps/web/lib/partners/get-partner-bank-account.ts:25"
270
+ },
271
+ {
272
+ "call": "stripe.accounts.retrieve",
273
+ "operation": "GetAccountsAccount",
274
+ "evidence": "apps/web/lib/actions/partners/generate-stripe-account-link.ts:66; apps/web/lib/partners/create-stripe-transfer.ts:160; apps/web/lib/payouts/recompute-partner-payout-state.ts:32"
275
+ },
276
+ {
277
+ "call": "stripe.accounts.createLoginLink",
278
+ "operation": "PostAccountsAccountLoginLinks",
279
+ "evidence": "apps/web/lib/actions/partners/generate-stripe-account-link.ts:70"
280
+ },
281
+ {
282
+ "call": "stripe.accountLinks.create",
283
+ "operation": "PostAccountLinks",
284
+ "evidence": "apps/web/lib/actions/partners/generate-stripe-account-link.ts:71"
285
+ },
286
+ {
287
+ "call": "stripe.coupons.create",
288
+ "operation": "PostCoupons",
289
+ "evidence": "apps/web/lib/discounts/discount-provider-stripe.ts:136"
290
+ },
291
+ {
292
+ "call": "stripe.promotionCodes.create",
293
+ "operation": "PostPromotionCodes",
294
+ "evidence": "apps/web/lib/discounts/discount-provider-stripe.ts:184"
295
+ },
296
+ {
297
+ "call": "stripe.promotionCodes.list",
298
+ "operation": "GetPromotionCodes",
299
+ "evidence": "apps/web/lib/discounts/discount-provider-stripe.ts:275"
300
+ },
301
+ {
302
+ "call": "stripe.promotionCodes.update",
303
+ "operation": "PostPromotionCodesPromotionCode",
304
+ "evidence": "apps/web/lib/discounts/discount-provider-stripe.ts:294"
305
+ },
306
+ {
307
+ "call": "stripe.charges.list",
308
+ "operation": "GetCharges",
309
+ "evidence": "apps/web/lib/api/customers/get-customer-stripe-invoices.ts:97"
310
+ },
311
+ {
312
+ "call": "stripe.transfers.create",
313
+ "operation": "PostTransfers",
314
+ "evidence": "apps/web/lib/partners/create-stripe-transfer.ts:203"
315
+ },
316
+ {
317
+ "call": "stripe.subscriptions.cancel",
318
+ "operation": "DeleteSubscriptionsSubscriptionExposedId",
319
+ "evidence": "apps/web/lib/stripe/cancel-subscription.ts:20"
320
+ },
321
+ {
322
+ "call": "stripe.setupIntents.list",
323
+ "operation": "GetSetupIntents",
324
+ "evidence": "apps/web/lib/stripe/microdeposits.ts:94"
325
+ },
326
+ {
327
+ "call": "stripe.paymentIntents.list",
328
+ "operation": "GetPaymentIntents",
329
+ "evidence": "apps/web/lib/stripe/microdeposits.ts:99"
330
+ },
331
+ {
332
+ "call": "stripe.accounts.create",
333
+ "operation": "PostAccounts",
334
+ "evidence": "apps/web/lib/stripe/create-connected-account.ts:13"
335
+ },
336
+ {
337
+ "call": "stripe.promotionCodes.retrieve",
338
+ "operation": "GetPromotionCodesPromotionCode",
339
+ "evidence": "apps/web/app/(ee)/api/stripe/integration/webhook/utils/get-promotion-code.ts:18"
340
+ }
341
+ ],
342
+ "webhooks": [
343
+ {
344
+ "call": "app/(ee)/api/stripe/webhook (Dub's own billing), stripe.webhooks.constructEvent",
345
+ "events": [
346
+ "charge.succeeded",
347
+ "charge.failed",
348
+ "charge.refunded",
349
+ "charge.dispute.created",
350
+ "checkout.session.completed",
351
+ "customer.subscription.created",
352
+ "customer.subscription.updated",
353
+ "customer.subscription.deleted",
354
+ "invoice.payment_failed",
355
+ "payment_intent.requires_action",
356
+ "transfer.reversed"
357
+ ],
358
+ "evidence": "apps/web/app/(ee)/api/stripe/webhook/route.ts:18; apps/web/app/(ee)/api/stripe/webhook/route.ts:42"
359
+ },
360
+ {
361
+ "call": "app/(ee)/api/stripe/integration/webhook (a workspace's connected Stripe account), stripe.webhooks.constructEvent",
362
+ "events": [
363
+ "account.application.deauthorized",
364
+ "charge.refunded",
365
+ "checkout.session.completed",
366
+ "coupon.deleted",
367
+ "customer.created",
368
+ "customer.updated",
369
+ "customer.subscription.created",
370
+ "customer.subscription.deleted",
371
+ "invoice.paid",
372
+ "promotion_code.updated"
373
+ ],
374
+ "evidence": "apps/web/app/(ee)/api/stripe/integration/webhook/route.ts:22; apps/web/app/(ee)/api/stripe/integration/webhook/route.ts:65"
375
+ },
376
+ {
377
+ "call": "app/(ee)/api/stripe/connect/webhook (partners' connected accounts), stripe.webhooks.constructEvent",
378
+ "events": [
379
+ "account.application.deauthorized",
380
+ "account.external_account.updated",
381
+ "account.updated",
382
+ "balance.available",
383
+ "payout.paid",
384
+ "payout.failed"
385
+ ],
386
+ "evidence": "apps/web/app/(ee)/api/stripe/connect/webhook/route.ts:12; apps/web/app/(ee)/api/stripe/connect/webhook/route.ts:47"
387
+ }
388
+ ],
389
+ "frontend": [
390
+ {
391
+ "call": "Stripe.js redirectToCheckout for a plan upgrade",
392
+ "operation": "checkout.stripe.com (the Checkout page)",
393
+ "evidence": "apps/web/ui/workspaces/upgrade-plan-button.tsx:122"
394
+ }
395
+ ],
396
+ "gate": "Paid billing and payouts use Stripe directly in shipped routes; the secret authenticates them (apps/web/lib/stripe/index.ts:4; apps/web/app/api/workspaces/[idOrSlug]/billing/activate-paid-plan/route.ts:13)."
397
+ },
398
+ {
399
+ "name": "lukevella/rallly",
400
+ "commit": "3e63239dbdec",
401
+ "client": "stripe-node",
402
+ "backend": [
403
+ {
404
+ "call": "stripe.prices.list",
405
+ "operation": "GetPrices",
406
+ "evidence": "packages/billing/src/lib/stripe.ts:103; apps/web/src/features/licensing/mutations.ts:218"
407
+ },
408
+ {
409
+ "call": "stripe.checkout.sessions.retrieve",
410
+ "operation": "GetCheckoutSessionsSession",
411
+ "evidence": "apps/web/src/app/api/stripe/portal/route.ts:34"
412
+ },
413
+ {
414
+ "call": "stripe.checkout.sessions.create",
415
+ "operation": "PostCheckoutSessions",
416
+ "evidence": "apps/web/src/features/licensing/mutations.ts:242; apps/web/src/features/billing/actions.ts:116"
417
+ },
418
+ {
419
+ "call": "stripe.customers.create",
420
+ "operation": "PostCustomers",
421
+ "evidence": "apps/web/src/features/billing/actions.ts:92"
422
+ },
423
+ {
424
+ "call": "stripe.coupons.retrieve",
425
+ "operation": "GetCouponsCoupon",
426
+ "evidence": "apps/web/src/features/billing/nonprofit/mutations.ts:24"
427
+ },
428
+ {
429
+ "call": "stripe.coupons.create",
430
+ "operation": "PostCoupons",
431
+ "evidence": "apps/web/src/features/billing/nonprofit/mutations.ts:28"
432
+ },
433
+ {
434
+ "call": "stripe.billingPortal.sessions.create",
435
+ "operation": "PostBillingPortalSessions",
436
+ "evidence": "apps/web/src/features/billing/mutations.ts:22; apps/web/src/features/billing/mutations.ts:216; apps/web/src/features/billing/mutations.ts:248; apps/web/src/features/billing/mutations.ts:273; apps/web/src/features/billing/mutations.ts:286"
437
+ },
438
+ {
439
+ "call": "stripe.billingPortal.configurations.list",
440
+ "operation": "GetBillingPortalConfigurations",
441
+ "evidence": "apps/web/src/features/billing/mutations.ts:35"
442
+ },
443
+ {
444
+ "call": "stripe.prices.retrieve",
445
+ "operation": "GetPricesPrice",
446
+ "evidence": "apps/web/src/features/billing/mutations.ts:58"
447
+ },
448
+ {
449
+ "call": "stripe.billingPortal.configurations.create",
450
+ "operation": "PostBillingPortalConfigurations",
451
+ "evidence": "apps/web/src/features/billing/mutations.ts:66; apps/web/src/features/billing/mutations.ts:103"
452
+ },
453
+ {
454
+ "call": "stripe.subscriptions.update",
455
+ "operation": "PostSubscriptionsSubscriptionExposedId",
456
+ "evidence": "apps/web/src/features/billing/mutations.ts:309; apps/web/src/features/billing/mutations.ts:346"
457
+ },
458
+ {
459
+ "call": "stripe.subscriptions.cancel",
460
+ "operation": "DeleteSubscriptionsSubscriptionExposedId",
461
+ "evidence": "apps/web/src/features/billing/mutations.ts:396"
462
+ },
463
+ {
464
+ "call": "stripe.customers.del",
465
+ "operation": "DeleteCustomersCustomer",
466
+ "evidence": "apps/web/src/features/billing/mutations.ts:415"
467
+ },
468
+ {
469
+ "call": "stripe.subscriptions.retrieve",
470
+ "operation": "GetSubscriptionsSubscriptionExposedId",
471
+ "evidence": "apps/web/src/features/billing/webhook/mutations.ts:28; apps/web/src/features/billing/webhook/mutations.ts:357"
472
+ },
473
+ {
474
+ "call": "stripe.invoices.list",
475
+ "operation": "GetInvoices",
476
+ "evidence": "apps/web/src/features/billing/webhook/mutations.ts:362"
477
+ },
478
+ {
479
+ "call": "stripe.invoices.voidInvoice",
480
+ "operation": "PostInvoicesInvoiceVoid",
481
+ "evidence": "apps/web/src/features/billing/webhook/mutations.ts:368"
482
+ },
483
+ {
484
+ "call": "stripe.customers.update",
485
+ "operation": "PostCustomersCustomer",
486
+ "evidence": "apps/web/src/lib/auth.ts:500"
487
+ }
488
+ ],
489
+ "webhooks": [
490
+ {
491
+ "call": "app/api/stripe/webhook, stripe.webhooks.constructEvent",
492
+ "events": [
493
+ "checkout.session.completed",
494
+ "checkout.session.expired",
495
+ "customer.created",
496
+ "customer.deleted",
497
+ "customer.subscription.created",
498
+ "customer.subscription.deleted",
499
+ "customer.subscription.updated",
500
+ "payment_method.attached",
501
+ "payment_method.detached",
502
+ "payment_method.automatically_updated",
503
+ "payment_method.updated"
504
+ ],
505
+ "evidence": "apps/web/src/app/api/stripe/webhook/route.ts:33; apps/web/src/features/billing/webhook/mutations.ts:593"
506
+ }
507
+ ],
508
+ "gate": "Billing defaults on because NEXT_PUBLIC_SELF_HOSTED=false; it is Stripe as shipped (apps/web/.env.sample:43-45; apps/web/src/features/billing/constants.ts:4; apps/web/src/features/billing/service.ts:16-22)."
509
+ },
510
+ {
511
+ "name": "gitroomhq/postiz-app",
512
+ "commit": "e0a08a7d9592",
513
+ "client": "stripe-node",
514
+ "backend": [
515
+ {
516
+ "call": "stripe.paymentMethods.list",
517
+ "operation": "GetPaymentMethods",
518
+ "evidence": "libraries/nestjs-libraries/src/services/stripe.service.ts:96"
519
+ },
520
+ {
521
+ "call": "stripe.paymentIntents.create",
522
+ "operation": "PostPaymentIntents",
523
+ "evidence": "libraries/nestjs-libraries/src/services/stripe.service.ts:116"
524
+ },
525
+ {
526
+ "call": "stripe.paymentMethods.detach",
527
+ "operation": "PostPaymentMethodsPaymentMethodDetach",
528
+ "evidence": "libraries/nestjs-libraries/src/services/stripe.service.ts:128; libraries/nestjs-libraries/src/services/stripe.service.ts:137"
529
+ },
530
+ {
531
+ "call": "stripe.subscriptions.cancel",
532
+ "operation": "DeleteSubscriptionsSubscriptionExposedId",
533
+ "evidence": "libraries/nestjs-libraries/src/services/stripe.service.ts:129; libraries/nestjs-libraries/src/services/stripe.service.ts:138; libraries/nestjs-libraries/src/services/stripe.service.ts:414; libraries/nestjs-libraries/src/services/stripe.service.ts:458; libraries/nestjs-libraries/src/services/stripe.service.ts:1056; libraries/nestjs-libraries/src/services/stripe.service.ts:1367"
534
+ },
535
+ {
536
+ "call": "stripe.paymentIntents.cancel",
537
+ "operation": "PostPaymentIntentsIntentCancel",
538
+ "evidence": "libraries/nestjs-libraries/src/services/stripe.service.ts:133"
539
+ },
540
+ {
541
+ "call": "stripe.customers.create",
542
+ "operation": "PostCustomers",
543
+ "evidence": "libraries/nestjs-libraries/src/services/stripe.service.ts:246"
544
+ },
545
+ {
546
+ "call": "stripe.prices.list",
547
+ "operation": "GetPrices",
548
+ "evidence": "libraries/nestjs-libraries/src/services/stripe.service.ts:261; libraries/nestjs-libraries/src/services/stripe.service.ts:302; libraries/nestjs-libraries/src/services/stripe.service.ts:794; libraries/nestjs-libraries/src/services/stripe.service.ts:860"
549
+ },
550
+ {
551
+ "call": "stripe.products.list",
552
+ "operation": "GetProducts",
553
+ "evidence": "libraries/nestjs-libraries/src/services/stripe.service.ts:288; libraries/nestjs-libraries/src/services/stripe.service.ts:780; libraries/nestjs-libraries/src/services/stripe.service.ts:846"
554
+ },
555
+ {
556
+ "call": "stripe.products.create",
557
+ "operation": "PostProducts",
558
+ "evidence": "libraries/nestjs-libraries/src/services/stripe.service.ts:297; libraries/nestjs-libraries/src/services/stripe.service.ts:789; libraries/nestjs-libraries/src/services/stripe.service.ts:855"
559
+ },
560
+ {
561
+ "call": "stripe.prices.create",
562
+ "operation": "PostPrices",
563
+ "evidence": "libraries/nestjs-libraries/src/services/stripe.service.ts:319; libraries/nestjs-libraries/src/services/stripe.service.ts:810; libraries/nestjs-libraries/src/services/stripe.service.ts:876"
564
+ },
565
+ {
566
+ "call": "stripe.subscriptions.list",
567
+ "operation": "GetSubscriptions",
568
+ "evidence": "libraries/nestjs-libraries/src/services/stripe.service.ts:335; libraries/nestjs-libraries/src/services/stripe.service.ts:370; libraries/nestjs-libraries/src/services/stripe.service.ts:382; libraries/nestjs-libraries/src/services/stripe.service.ts:449; libraries/nestjs-libraries/src/services/stripe.service.ts:663; libraries/nestjs-libraries/src/services/stripe.service.ts:690; libraries/nestjs-libraries/src/services/stripe.service.ts:722; libraries/nestjs-libraries/src/services/stripe.service.ts:907; libraries/nestjs-libraries/src/services/stripe.service.ts:1046; libraries/nestjs-libraries/src/services/stripe.service.ts:1098; libraries/nestjs-libraries/src/services/stripe.service.ts:1247"
569
+ },
570
+ {
571
+ "call": "stripe.invoices.createPreview",
572
+ "operation": "PostInvoicesCreatePreview",
573
+ "evidence": "libraries/nestjs-libraries/src/services/stripe.service.ts:343; libraries/nestjs-libraries/src/services/stripe.service.ts:1126"
574
+ },
575
+ {
576
+ "call": "stripe.subscriptions.update",
577
+ "operation": "PostSubscriptionsSubscriptionExposedId",
578
+ "evidence": "libraries/nestjs-libraries/src/services/stripe.service.ts:394; libraries/nestjs-libraries/src/services/stripe.service.ts:427; libraries/nestjs-libraries/src/services/stripe.service.ts:668; libraries/nestjs-libraries/src/services/stripe.service.ts:730; libraries/nestjs-libraries/src/services/stripe.service.ts:915; libraries/nestjs-libraries/src/services/stripe.service.ts:1199"
579
+ },
580
+ {
581
+ "call": "stripe.billingPortal.sessions.create",
582
+ "operation": "PostBillingPortalSessions",
583
+ "evidence": "libraries/nestjs-libraries/src/services/stripe.service.ts:473"
584
+ },
585
+ {
586
+ "call": "stripe.promotionCodes.list",
587
+ "operation": "GetPromotionCodes",
588
+ "evidence": "libraries/nestjs-libraries/src/services/stripe.service.ts:486"
589
+ },
590
+ {
591
+ "call": "stripe.customers.update",
592
+ "operation": "PostCustomersCustomer",
593
+ "evidence": "libraries/nestjs-libraries/src/services/stripe.service.ts:543; libraries/nestjs-libraries/src/services/stripe.service.ts:619"
594
+ },
595
+ {
596
+ "call": "stripe.checkout.sessions.create",
597
+ "operation": "PostCheckoutSessions",
598
+ "evidence": "libraries/nestjs-libraries/src/services/stripe.service.ts:566; libraries/nestjs-libraries/src/services/stripe.service.ts:627"
599
+ },
600
+ {
601
+ "call": "stripe.charges.list",
602
+ "operation": "GetCharges",
603
+ "evidence": "libraries/nestjs-libraries/src/services/stripe.service.ts:679; libraries/nestjs-libraries/src/services/stripe.service.ts:971; libraries/nestjs-libraries/src/services/stripe.service.ts:1261"
604
+ },
605
+ {
606
+ "call": "stripe.subscriptions.retrieve",
607
+ "operation": "GetSubscriptionsSubscriptionExposedId",
608
+ "evidence": "libraries/nestjs-libraries/src/services/stripe.service.ts:950"
609
+ },
610
+ {
611
+ "call": "stripe.invoices.retrieve",
612
+ "operation": "GetInvoicesInvoice",
613
+ "evidence": "libraries/nestjs-libraries/src/services/stripe.service.ts:998; libraries/nestjs-libraries/src/services/stripe.service.ts:1287"
614
+ },
615
+ {
616
+ "call": "stripe.refunds.create",
617
+ "operation": "PostRefunds",
618
+ "evidence": "libraries/nestjs-libraries/src/services/stripe.service.ts:1027; libraries/nestjs-libraries/src/services/stripe.service.ts:1357"
619
+ },
620
+ {
621
+ "call": "stripe.coupons.create",
622
+ "operation": "PostCoupons",
623
+ "evidence": "libraries/nestjs-libraries/src/services/stripe.service.ts:1188"
624
+ },
625
+ {
626
+ "call": "stripe.subscriptions.deleteDiscount",
627
+ "operation": "DeleteSubscriptionsSubscriptionExposedIdDiscount",
628
+ "evidence": "libraries/nestjs-libraries/src/services/stripe.service.ts:1230"
629
+ }
630
+ ],
631
+ "webhooks": [
632
+ {
633
+ "call": "StripeService.processWebhook, stripe.webhooks.constructEvent",
634
+ "events": [
635
+ "invoice.payment_succeeded",
636
+ "customer.subscription.created",
637
+ "customer.subscription.updated",
638
+ "customer.subscription.deleted"
639
+ ],
640
+ "evidence": "libraries/nestjs-libraries/src/services/stripe.service.ts:37; libraries/nestjs-libraries/src/services/stripe.service.ts:62"
641
+ }
642
+ ],
643
+ "frontend": [
644
+ {
645
+ "call": "CheckoutProvider initCheckout/loadActions/getSession, PaymentElement mount/on/off/destroy, useCheckout confirm/applyPromotionCode/removePromotionCode",
646
+ "operation": "js.stripe.com loader and custom Checkout SDK wire (screens/stripe-js.ts, screens/checkout-js.ts), over the stored Checkout Session",
647
+ "evidence": "apps/frontend/src/components/billing/embedded.billing.tsx:6-11,58,111,464,494; pnpm-lock.yaml:164-169; @stripe/react-stripe-js@5.6.1:src/checkout/components/CheckoutProvider.tsx:105-120; @stripe/react-stripe-js@5.6.1:src/components/createElementComponent.tsx:138,188,215; @stripe/react-stripe-js@5.6.1:src/utils/useAttachEvent.ts:29,32; @stripe/stripe-js@8.9.0:dist/stripe-js/checkout.d.ts:606-609,632-645"
648
+ }
649
+ ],
650
+ "setting": "Shipped web payment provider: libraries/nestjs-libraries/src/services/payment/payment.provider.manager.ts:38-45 chooses the first registered provider for web; services/stripe.service.ts:24-26 registers Stripe with platform web. Keys authorize this default billing feature.",
651
+ "gate": "Shipped payment/subscription features validate the Stripe credential; no independent enabling choice (libraries/nestjs-libraries/src/services/stripe.service.ts:96,246; apps/backend/src/services/auth/public.auth.middleware.ts:60)."
652
+ },
653
+ {
654
+ "name": "twentyhq/twenty",
655
+ "commit": "1d561b8c73c9",
656
+ "client": "Workflow HTTP action, app health check, and stripe-node in the shipped enterprise website",
657
+ "backend": [
658
+ {
659
+ "call": "Workflow POST https://api.stripe.com/v1/invoices, customer, collection_method send_invoice, days_until_due 30",
660
+ "operation": "PostInvoices",
661
+ "evidence": "packages/twenty-docs/user-guide/workflows/how-tos/connect-to-other-tools/generate-quote-or-invoice-from-twenty.mdx:101; packages/twenty-server/src/modules/workflow/workflow-executor/workflow-actions/http-request/http-request.workflow-action.ts:28"
662
+ },
663
+ {
664
+ "call": "App health check GET https://api.stripe.com/v1/account with the user key",
665
+ "operation": "GetAccount",
666
+ "evidence": "packages/twenty-docs/developers/extend/apps/logic/logic-functions.mdx:850"
667
+ },
668
+ {
669
+ "call": "stripe.checkout.sessions.create",
670
+ "operation": "PostCheckoutSessions",
671
+ "evidence": "packages/twenty-website/src/app/api/enterprise/checkout/route.ts:51"
672
+ },
673
+ {
674
+ "call": "stripe.checkout.sessions.retrieve",
675
+ "operation": "GetCheckoutSessionsSession",
676
+ "evidence": "packages/twenty-website/src/app/api/enterprise/activate/route.ts:36"
677
+ },
678
+ {
679
+ "call": "stripe.subscriptions.retrieve",
680
+ "operation": "GetSubscriptionsSubscriptionExposedId",
681
+ "evidence": "packages/twenty-website/src/app/api/enterprise/status/route.ts:44"
682
+ },
683
+ {
684
+ "call": "stripe.subscriptions.update",
685
+ "operation": "PostSubscriptionsSubscriptionExposedId",
686
+ "evidence": "packages/twenty-website/src/app/api/enterprise/release/route.ts:87"
687
+ }
688
+ ],
689
+ "gate": "The shipped website enterprise checkout directly uses Stripe independently of the server IS_BILLING_ENABLED=false switch (packages/twenty-website/src/app/api/enterprise/checkout/route.ts:7-19,51)."
690
+ }
691
+ ],
692
+ "optional": [
693
+ {
694
+ "application": "calcom/cal.diy",
695
+ "what": "Stripe booking payments, paid-app installation, hosted team billing and premium usernames",
696
+ "setting": "Install: Stripe payments is a non-global app added by OmniInstallAppButton, not a default or onboarding install (packages/app-store/_components/AppCard.tsx:94-124; packages/app-store/utils.ts:47-58). Hosted team/premium billing additionally selects hosted features (packages/lib/constants.ts:82,130,168); the self-hosted default has them off.",
697
+ "evidence": "packages/app-store/stripepayment/_metadata.ts:8-12 enables the catalog entry when credentials exist, not a user install; packages/app-store/_components/OmniInstallAppButton.tsx:54-60 installs it; packages/app-store/stripepayment/api/add.ts:48 begins OAuth; api/callback.ts:39 creates the user credential; onboarding does not add this app. API v2 is the same app install: apps/api/v2/src/modules/stripe/controllers/stripe.controller.ts:87-98 documents install permissions, stripe.service.ts:128 creates the stripe_payment app credential. User onboarding and seed.ts/seed-utils.ts do not install Stripe payments."
698
+ },
699
+ {
700
+ "application": "twentyhq/twenty",
701
+ "what": "The twenty-server billing module and its billing-only browser screens; workflow HTTP actions and twenty-website enterprise routes are separate demanded features.",
702
+ "setting": "Configuration: IS_BILLING_ENABLED is a feature flag shipped false (packages/twenty-server/src/engine/core-modules/twenty-config/config-variables.ts:945).",
703
+ "evidence": "1d561b8c73c9: packages/twenty-server/src/engine/core-modules/twenty-config/config-variables.ts:945; packages/twenty-server/.env.example:22"
704
+ }
705
+ ]
706
+ }