@volter/twin-stripe 0.1.2 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (219) hide show
  1. package/README.md +64 -27
  2. package/client/dashboard-api.ts +286 -0
  3. package/client/stripe-mirror.css +272 -159
  4. package/client/stripe-mirror.tsx +1384 -541
  5. package/dist/client/dashboard-api.d.ts +107 -0
  6. package/dist/client/dashboard-api.js +238 -0
  7. package/dist/client/dashboard-api.ts +286 -0
  8. package/dist/client/stripe-mirror.bundle.js +236 -0
  9. package/dist/client/stripe-mirror.css +275 -0
  10. package/dist/client/stripe-mirror.d.ts +134 -0
  11. package/dist/client/stripe-mirror.js +823 -0
  12. package/dist/client/stripe-mirror.tsx +1534 -0
  13. package/dist/src/cli.d.ts +2 -0
  14. package/dist/src/cli.js +39 -0
  15. package/dist/src/generated/events.gen.json +1 -0
  16. package/dist/src/generated/surface.gen.json +1 -0
  17. package/dist/src/generated/ui.gen.json +1 -0
  18. package/dist/src/index.d.ts +14 -0
  19. package/dist/src/index.js +73 -0
  20. package/dist/src/manifest.d.ts +2 -0
  21. package/dist/src/manifest.js +1065 -0
  22. package/dist/src/screens/checkout.d.ts +31 -0
  23. package/dist/src/screens/checkout.js +241 -0
  24. package/dist/src/screens/consent-skin.d.ts +4 -0
  25. package/dist/src/screens/consent-skin.js +18 -0
  26. package/dist/src/screens/financial-connections.d.ts +5 -0
  27. package/dist/src/screens/financial-connections.js +90 -0
  28. package/dist/src/screens/identity.d.ts +5 -0
  29. package/dist/src/screens/identity.js +86 -0
  30. package/dist/src/screens/industries.d.ts +1 -0
  31. package/dist/src/screens/industries.js +267 -0
  32. package/dist/src/screens/onboarding.d.ts +13 -0
  33. package/dist/src/screens/onboarding.js +225 -0
  34. package/dist/src/screens/portal.d.ts +5 -0
  35. package/dist/src/screens/portal.js +214 -0
  36. package/dist/src/screens/public-details.d.ts +5 -0
  37. package/dist/src/screens/public-details.js +90 -0
  38. package/dist/src/semantics/after-payment.d.ts +22 -0
  39. package/dist/src/semantics/after-payment.js +93 -0
  40. package/dist/src/semantics/apps-secrets.d.ts +2 -0
  41. package/dist/src/semantics/apps-secrets.js +54 -0
  42. package/dist/src/semantics/balance.d.ts +11 -0
  43. package/dist/src/semantics/balance.js +195 -0
  44. package/dist/src/semantics/billing.d.ts +2 -0
  45. package/dist/src/semantics/billing.js +220 -0
  46. package/dist/src/semantics/charges.d.ts +28 -0
  47. package/dist/src/semantics/charges.js +201 -0
  48. package/dist/src/semantics/checkout.d.ts +15 -0
  49. package/dist/src/semantics/checkout.js +303 -0
  50. package/dist/src/semantics/connect.d.ts +5 -0
  51. package/dist/src/semantics/connect.js +476 -0
  52. package/dist/src/semantics/coupons.d.ts +6 -0
  53. package/dist/src/semantics/coupons.js +92 -0
  54. package/dist/src/semantics/credit-notes.d.ts +2 -0
  55. package/dist/src/semantics/credit-notes.js +172 -0
  56. package/dist/src/semantics/customers.d.ts +6 -0
  57. package/dist/src/semantics/customers.js +429 -0
  58. package/dist/src/semantics/disputes.d.ts +2 -0
  59. package/dist/src/semantics/disputes.js +51 -0
  60. package/dist/src/semantics/entitlements.d.ts +2 -0
  61. package/dist/src/semantics/entitlements.js +95 -0
  62. package/dist/src/semantics/ephemeral-keys.d.ts +2 -0
  63. package/dist/src/semantics/ephemeral-keys.js +34 -0
  64. package/dist/src/semantics/files.d.ts +2 -0
  65. package/dist/src/semantics/files.js +125 -0
  66. package/dist/src/semantics/invoices.d.ts +18 -0
  67. package/dist/src/semantics/invoices.js +541 -0
  68. package/dist/src/semantics/issuing.d.ts +13 -0
  69. package/dist/src/semantics/issuing.js +570 -0
  70. package/dist/src/semantics/ledger.d.ts +54 -0
  71. package/dist/src/semantics/ledger.js +181 -0
  72. package/dist/src/semantics/payment-intents.d.ts +18 -0
  73. package/dist/src/semantics/payment-intents.js +404 -0
  74. package/dist/src/semantics/payment-links.d.ts +2 -0
  75. package/dist/src/semantics/payment-links.js +133 -0
  76. package/dist/src/semantics/payment-methods.d.ts +20 -0
  77. package/dist/src/semantics/payment-methods.js +138 -0
  78. package/dist/src/semantics/plans.d.ts +5 -0
  79. package/dist/src/semantics/plans.js +121 -0
  80. package/dist/src/semantics/platform.d.ts +9 -0
  81. package/dist/src/semantics/platform.js +206 -0
  82. package/dist/src/semantics/products.d.ts +2 -0
  83. package/dist/src/semantics/products.js +140 -0
  84. package/dist/src/semantics/radar.d.ts +2 -0
  85. package/dist/src/semantics/radar.js +83 -0
  86. package/dist/src/semantics/refunds.d.ts +9 -0
  87. package/dist/src/semantics/refunds.js +195 -0
  88. package/dist/src/semantics/renewals.d.ts +47 -0
  89. package/dist/src/semantics/renewals.js +251 -0
  90. package/dist/src/semantics/setup-intents.d.ts +2 -0
  91. package/dist/src/semantics/setup-intents.js +84 -0
  92. package/dist/src/semantics/shared.d.ts +78 -0
  93. package/dist/src/semantics/shared.js +192 -0
  94. package/dist/src/semantics/subscription-schedules.d.ts +2 -0
  95. package/dist/src/semantics/subscription-schedules.js +119 -0
  96. package/dist/src/semantics/subscriptions.d.ts +11 -0
  97. package/dist/src/semantics/subscriptions.js +605 -0
  98. package/dist/src/semantics/tax.d.ts +2 -0
  99. package/dist/src/semantics/tax.js +197 -0
  100. package/dist/src/semantics/terminal.d.ts +5 -0
  101. package/dist/src/semantics/terminal.js +182 -0
  102. package/dist/src/semantics/test-clocks.d.ts +6 -0
  103. package/dist/src/semantics/test-clocks.js +73 -0
  104. package/dist/src/semantics/tokens.d.ts +4 -0
  105. package/dist/src/semantics/tokens.js +44 -0
  106. package/dist/src/semantics/transfers.d.ts +2 -0
  107. package/dist/src/semantics/transfers.js +154 -0
  108. package/dist/src/semantics/treasury.d.ts +2 -0
  109. package/dist/src/semantics/treasury.js +377 -0
  110. package/dist/src/semantics/webhook-endpoints.d.ts +3 -0
  111. package/dist/src/semantics/webhook-endpoints.js +85 -0
  112. package/dist/src/stripe-budget.d.ts +55 -0
  113. package/dist/src/stripe-budget.js +155 -0
  114. package/dist/src/stripe-capabilities.d.ts +3 -0
  115. package/dist/src/stripe-capabilities.js +5052 -0
  116. package/dist/src/stripe-conformance.d.ts +41 -0
  117. package/dist/src/stripe-conformance.js +96 -0
  118. package/dist/src/stripe-connector.d.ts +161 -0
  119. package/dist/src/stripe-connector.js +414 -0
  120. package/dist/src/stripe-emit.d.ts +2 -0
  121. package/dist/src/stripe-emit.js +145 -0
  122. package/dist/src/stripe-events.d.ts +93 -0
  123. package/dist/src/stripe-events.js +388 -0
  124. package/dist/src/stripe-js.d.ts +4 -0
  125. package/dist/src/stripe-js.js +70 -0
  126. package/dist/src/stripe-mirror-ui.d.ts +15 -0
  127. package/dist/src/stripe-mirror-ui.js +87 -0
  128. package/dist/src/stripe-params.d.ts +3 -0
  129. package/dist/src/stripe-params.js +43 -0
  130. package/dist/src/stripe-perform-harness.d.ts +9 -0
  131. package/dist/src/stripe-perform-harness.js +26 -0
  132. package/dist/src/stripe-server.d.ts +33 -0
  133. package/dist/src/stripe-server.js +326 -0
  134. package/dist/src/stripe-shared.d.ts +106 -0
  135. package/dist/src/stripe-shared.js +273 -0
  136. package/dist/src/stripe-twin.d.ts +155 -0
  137. package/dist/src/stripe-twin.js +1226 -0
  138. package/dist/src/stripe-ui-conformance.d.ts +5 -0
  139. package/dist/src/stripe-ui-conformance.js +79 -0
  140. package/dist/src/stripe-ui-structure.d.ts +3 -0
  141. package/dist/src/stripe-ui-structure.js +168 -0
  142. package/dist/src/stripe-version.d.ts +10 -0
  143. package/dist/src/stripe-version.js +285 -0
  144. package/dist/test-fixtures/stripe-known-deviations.json +105 -0
  145. package/dist/test-fixtures/stripe-openapi-operations.SOURCE.md +14 -0
  146. package/dist/test-fixtures/stripe-openapi-operations.json +4717 -0
  147. package/dist/test-fixtures/stripe-schemas.SOURCE.md +35 -0
  148. package/dist/test-fixtures/stripe-schemas.json +3740 -0
  149. package/package.json +18 -10
  150. package/src/cli.ts +7 -7
  151. package/src/generated/events.gen.json +1 -0
  152. package/src/generated/surface.gen.json +1 -0
  153. package/src/generated/ui.gen.json +1 -0
  154. package/src/index.ts +31 -9
  155. package/src/manifest.ts +1097 -0
  156. package/src/screens/checkout.tsx +252 -0
  157. package/src/screens/consent-skin.ts +20 -0
  158. package/src/screens/financial-connections.tsx +101 -0
  159. package/src/screens/identity.tsx +96 -0
  160. package/src/screens/industries.ts +267 -0
  161. package/src/screens/onboarding.tsx +243 -0
  162. package/src/screens/portal.tsx +218 -0
  163. package/src/screens/public-details.tsx +105 -0
  164. package/src/semantics/after-payment.ts +113 -0
  165. package/src/semantics/apps-secrets.ts +58 -0
  166. package/src/semantics/balance.ts +209 -0
  167. package/src/semantics/billing.ts +216 -0
  168. package/src/semantics/charges.ts +211 -0
  169. package/src/semantics/checkout.ts +297 -0
  170. package/src/semantics/connect.ts +471 -0
  171. package/src/semantics/coupons.ts +97 -0
  172. package/src/semantics/credit-notes.ts +168 -0
  173. package/src/semantics/customers.ts +432 -0
  174. package/src/semantics/disputes.ts +62 -0
  175. package/src/semantics/entitlements.ts +94 -0
  176. package/src/semantics/ephemeral-keys.ts +34 -0
  177. package/src/semantics/files.ts +143 -0
  178. package/src/semantics/invoices.ts +541 -0
  179. package/src/semantics/issuing.ts +585 -0
  180. package/src/semantics/ledger.ts +216 -0
  181. package/src/semantics/payment-intents.ts +420 -0
  182. package/src/semantics/payment-links.ts +148 -0
  183. package/src/semantics/payment-methods.ts +143 -0
  184. package/src/semantics/plans.ts +131 -0
  185. package/src/semantics/platform.ts +220 -0
  186. package/src/semantics/products.ts +154 -0
  187. package/src/semantics/radar.ts +85 -0
  188. package/src/semantics/refunds.ts +218 -0
  189. package/src/semantics/renewals.ts +274 -0
  190. package/src/semantics/setup-intents.ts +87 -0
  191. package/src/semantics/shared.ts +215 -0
  192. package/src/semantics/subscription-schedules.ts +129 -0
  193. package/src/semantics/subscriptions.ts +610 -0
  194. package/src/semantics/tax.ts +220 -0
  195. package/src/semantics/terminal.ts +195 -0
  196. package/src/semantics/test-clocks.ts +77 -0
  197. package/src/semantics/tokens.ts +52 -0
  198. package/src/semantics/transfers.ts +174 -0
  199. package/src/semantics/treasury.ts +383 -0
  200. package/src/semantics/webhook-endpoints.ts +87 -0
  201. package/src/stripe-budget.ts +4 -4
  202. package/src/stripe-capabilities.ts +1456 -222
  203. package/src/stripe-conformance.ts +6 -5
  204. package/src/stripe-connector.ts +68 -40
  205. package/src/stripe-emit.ts +14 -7
  206. package/src/stripe-events.ts +94 -36
  207. package/src/stripe-js.ts +70 -0
  208. package/src/stripe-mirror-ui.ts +28 -298
  209. package/src/stripe-params.ts +44 -0
  210. package/src/stripe-perform-harness.ts +29 -0
  211. package/src/stripe-server.ts +263 -38
  212. package/src/stripe-shared.ts +294 -0
  213. package/src/stripe-twin.ts +429 -5325
  214. package/src/stripe-ui-conformance.ts +70 -107
  215. package/src/stripe-ui-structure.ts +124 -348
  216. package/src/stripe-version.ts +278 -0
  217. package/test-fixtures/stripe-known-deviations.json +2 -7
  218. package/test-fixtures/stripe-openapi-operations.json +1188 -2855
  219. package/src/stripe-form.ts +0 -35
@@ -1,122 +1,85 @@
1
- // Stripe UI conformance — the declared UI surface inventory for a Stripe dashboard,
2
- // classified against THIS twin, and the read-only completeness check over it.
1
+ // Stripe UI conformance — the declared surface inventory of Stripe's Dashboard, classified against THIS
2
+ // twin, and the read-only completeness check over it.
3
3
  //
4
4
  // Honesty: `status` is the current truth, verified by the structural cross-check in
5
- // stripe-ui-conformance.test.ts (which builds the actual mirror bundle and asserts
6
- // each 'rendered' surface's helper/label/class is really present — downgrading to
7
- // 'modeled' otherwise). `rendered` = the mirror shows it today; `modeled` = the twin
8
- // has the data but the mirror doesn't render it (a UI gap to close); `unmodeled` =
9
- // real Stripe shows it but the twin doesn't model it (a twin-model gap to close).
5
+ // stripe-ui-conformance.test.ts (which builds the actual Dashboard bundle and asserts each 'rendered'
6
+ // surface's label/class is really present — downgrading to 'modeled' otherwise). `rendered` = the
7
+ // Dashboard shows it today; `modeled` = the twin has the data but the Dashboard doesn't show it; `unmodeled`
8
+ // = Stripe shows it but the twin doesn't model it.
10
9
  //
11
- // Classified against the actual mirror (client/stripe-mirror.tsx + the pure helpers in
12
- // stripe-mirror-ui.ts). The mirror has nineteen sections — customers, payment_intents,
13
- // setup_intents, subscriptions, invoices, invoiceitems, products, prices, charges,
14
- // refunds, payment_methods, disputes, payouts, balance_transactions, balance,
15
- // connected accounts, transfers, events — plus a Connect account panel (enablement
16
- // flags + outstanding requirements) and a generic detail panel that renders EVERY
17
- // scalar field (key/value grid), EVERY
18
- // nested object/array (flattened), status pills, amount/currency formatting, recurring
19
- // labels, product image <img> thumbnails, clickable cross-references (outgoing +
20
- // incoming), a prominent payment-decline banner (last_payment_error) and a synthesized
21
- // balance summary. So anything the twin stores on those collections is shown.
22
- import { checkUiCompleteness, type UiSurface, type UiCompletenessReport } from '@volter/twin-tooling';
10
+ // Classified against the Dashboard (client/stripe-mirror.tsx, reading through client/dashboard-api.ts):
11
+ // Home, Balances, Transactions > Payments and a payment's page, Customers and a customer's page, Product
12
+ // catalog, Billing's Subscriptions (and a subscription's page) and Invoices (and an invoice's page),
13
+ // Developers, Settings, and the resource lists under Connect, Payments, Reporting and More.
14
+ import { checkUiCompleteness, type UiSurface, type UiCompletenessReport } from '@volter/world-tooling';
23
15
 
24
- /** What a real Stripe dashboard shows, classified vs the twin + its UI mirror. */
16
+ /** What Stripe's Dashboard shows, classified vs the twin + its Dashboard. */
25
17
  export const STRIPE_UI_INVENTORY: UiSurface[] = [
26
- // --- shell / cross-cutting surfaces the mirror provides everywhere ---
27
- { key: 'sectionNav', label: 'Left-nav sections (Customers/Payments/Subs/Invoices/Products/Prices) with counts', status: 'rendered' },
28
- { key: 'listDetailSplit', label: 'List + detail split per section', status: 'rendered' },
29
- { key: 'sectionFilter', label: 'In-section text filter / search', status: 'rendered' },
30
- { key: 'statusPill', label: 'Status pill with semantic tone (ok/warn/bad)', status: 'rendered' },
31
- { key: 'amountFormatting', label: 'Currency-formatted amounts (zero-decimal aware)', status: 'rendered' },
32
- { key: 'nestedFields', label: 'Nested object/array fields flattened (no "[object Object]")', status: 'rendered' },
33
- { key: 'crossLinksOutgoing', label: 'Outgoing cross-links (this row → referenced objects)', status: 'rendered' },
34
- { key: 'crossLinksIncoming', label: 'Incoming cross-links (objects referencing this row)', status: 'rendered' },
35
- { key: 'metadata', label: 'Object metadata key/values', status: 'rendered' },
18
+ // --- shell ---
19
+ { key: 'navigation', label: 'Left navigation (Home, Balances, Transactions, Customers, Product catalog, Billing, Developers)', status: 'rendered' },
20
+ { key: 'testModeBand', label: 'Test-mode band', status: 'rendered' },
21
+ { key: 'search', label: 'Search across customers, payments, subscriptions, invoices, products', status: 'rendered' },
22
+ { key: 'statusPill', label: "Status pills in Stripe's words (Succeeded, Refunded, Failed, Active, Trialing, Paid, …)", status: 'rendered' },
23
+ { key: 'amountFormatting', label: 'Currency-formatted amounts with the currency code', status: 'rendered' },
36
24
 
37
- // --- customers ---
38
- { key: 'customerName', label: 'Customer name', status: 'rendered' },
39
- { key: 'customerEmail', label: 'Customer email', status: 'rendered' },
40
- // Customer credit balance is now modeled (customer.balance + a balance-transaction ledger)
41
- // and rendered as its own "Customer Balance" mirror section (amount + running ending_balance).
42
- { key: 'customerBalance', label: 'Customer account balance (credit-balance ledger)', status: 'rendered' },
43
- // Customer tax IDs (eu_vat / us_ein / …) are a modeled customer sub-resource with their
44
- // own "Customer Tax IDs" mirror section (value + type + owning customer cross-link).
45
- { key: 'customerTaxIds', label: 'Customer tax IDs (value / type)', status: 'rendered' },
25
+ // --- Home and Balances ---
26
+ { key: 'homeToday', label: "Home: today's gross volume, balance and payouts", status: 'rendered' },
27
+ { key: 'homeOverview', label: 'Home: overview metrics (gross/net volume, successful and failed payments, customers, subscribers)', status: 'rendered' },
28
+ { key: 'balanceSummary', label: 'Balances: incoming and available per currency', status: 'rendered' },
29
+ { key: 'balanceTransactions', label: 'Balances: recent activity (balance transactions) and payouts', status: 'rendered' },
46
30
 
47
- // --- payments (payment_intents) ---
48
- { key: 'paymentList', label: 'Payments list (amount + id)', status: 'rendered' },
49
- { key: 'paymentStatus', label: 'Payment status (succeeded/requires_*/…)', status: 'rendered' },
50
- { key: 'paymentAmount', label: 'Payment amount (formatted)', status: 'rendered' },
51
- { key: 'paymentCustomerLink', label: 'Payment → customer cross-link', status: 'rendered' },
52
- // test-card decline state: last_payment_error rendered as a prominent error banner.
53
- { key: 'paymentDecline', label: 'Payment decline reason (last_payment_error banner)', status: 'rendered' },
54
-
55
- // --- setup_intents (off-session card save) ---
56
- { key: 'setupIntents', label: 'Setup intents list + status (requires_confirmation/succeeded)', status: 'rendered' },
57
-
58
- // --- subscriptions ---
59
- { key: 'subscriptionStatus', label: 'Subscription status (active/trialing/past_due/…)', status: 'rendered' },
60
- { key: 'subscriptionCustomerLink', label: 'Subscription → customer cross-link', status: 'rendered' },
61
- // items + period are nested objects the twin stores and the flattener renders.
62
- { key: 'subscriptionItems', label: 'Subscription line items (nested)', status: 'rendered' },
63
- { key: 'subscriptionPeriod', label: 'Billing-cycle / period fields', status: 'rendered' },
64
-
65
- // --- invoices ---
66
- { key: 'invoiceStatus', label: 'Invoice status (draft/open/paid/void/…)', status: 'rendered' },
67
- { key: 'invoiceTotal', label: 'Invoice total / amount_due (formatted)', status: 'rendered' },
68
- { key: 'invoiceLines', label: 'Invoice line items (nested list)', status: 'rendered' },
69
- { key: 'invoiceCustomerLink', label: 'Invoice → customer cross-link', status: 'rendered' },
70
- // invoiceitems are a full twin resource with their own list endpoint + nav section.
71
- { key: 'invoiceItems', label: 'Invoice items list (pending line items)', status: 'rendered' },
72
- // credit notes are a full twin resource (create/preview/void/list) with their own nav
73
- // section + list/detail; rows show the credited amount + status, with an invoice cross-link.
74
- { key: 'creditNotes', label: 'Credit notes list (credited amount + status)', status: 'rendered' },
75
- { key: 'creditNoteLines', label: 'Credit note line items (nested)', status: 'rendered' },
76
-
77
- // --- products ---
78
- { key: 'productName', label: 'Product name', status: 'rendered' },
79
- // images is an array of URLs; the detail view now renders them as <img> thumbnails.
80
- { key: 'productImageThumbs', label: 'Product image thumbnails (rendered as <img>)', status: 'rendered' },
31
+ // --- Payments ---
32
+ { key: 'paymentList', label: 'Payments list: amount + currency, status, payment method, description, customer, date', status: 'rendered' },
33
+ { key: 'paymentFilters', label: 'Payments status tabs with counts, and filter chips', status: 'rendered' },
34
+ { key: 'paymentRefundedDate', label: 'Payments list: refunded date and decline reason', status: 'rendered' },
35
+ { key: 'paymentExport', label: 'Payments export', status: 'rendered' },
36
+ { key: 'paymentTimeline', label: "A payment's timeline from its events", status: 'rendered' },
37
+ { key: 'paymentBreakdown', label: "A payment's breakdown (amount, refunded, net)", status: 'rendered' },
38
+ { key: 'paymentFees', label: "A payment's Stripe fees (balance transaction fee details)", status: 'unmodeled' },
39
+ { key: 'paymentRefunds', label: "A payment's refunds", status: 'rendered' },
40
+ { key: 'paymentMethodDetails', label: "A payment's card: last four, expiry, type, origin, CVC check", status: 'rendered' },
41
+ { key: 'paymentDecline', label: 'A declined payment states its error and decline code', status: 'rendered' },
42
+ { key: 'refundDialog', label: 'Refund a payment in full or in part, with a reason', status: 'rendered' },
43
+ { key: 'disputes', label: 'Disputes', status: 'rendered' },
81
44
 
82
- // --- prices ---
83
- { key: 'priceUnitAmount', label: 'Price unit amount (formatted)', status: 'rendered' },
84
- { key: 'priceRecurring', label: 'Price recurring interval ("every month")', status: 'rendered' },
85
- { key: 'priceProductLink', label: 'Price → product cross-link', status: 'rendered' },
45
+ // --- Customers ---
46
+ { key: 'customerList', label: 'Customers list: name, email, default payment method, created, total spend, payments, refunds', status: 'rendered' },
47
+ { key: 'createCustomer', label: 'Create customer', status: 'rendered' },
48
+ { key: 'customerDetails', label: "A customer's details (ID, since, email, description, billing details)", status: 'rendered' },
49
+ { key: 'customerSubscriptions', label: "A customer's subscriptions", status: 'rendered' },
50
+ { key: 'customerPayments', label: "A customer's payments", status: 'rendered' },
51
+ { key: 'customerPaymentMethods', label: "A customer's saved payment methods, default marked", status: 'rendered' },
52
+ { key: 'customerInvoices', label: "A customer's invoices", status: 'rendered' },
53
+ { key: 'customerEvents', label: "A customer's events", status: 'rendered' },
86
54
 
87
- // --- collections the twin models, now each with its own nav section + list/detail ---
88
- // charges, refunds and payment_methods are full twin resources with list endpoints;
89
- // stripe-mirror.tsx now has a nav section + list/detail for each.
90
- { key: 'charges', label: 'Charges list + status', status: 'rendered' },
91
- { key: 'refunds', label: 'Refunds list (refund objects)', status: 'rendered' },
92
- { key: 'paymentMethods', label: 'Saved payment methods (cards)', status: 'rendered' },
55
+ // --- Billing ---
56
+ { key: 'subscriptionList', label: 'Subscriptions list: customer, status, billing, product, amount, created', status: 'rendered' },
57
+ { key: 'subscriptionDetails', label: "A subscription's details: customer, period, trial, billing method, payment method", status: 'rendered' },
58
+ { key: 'subscriptionPricing', label: "A subscription's pricing items", status: 'rendered' },
59
+ { key: 'cancelSubscription', label: 'Cancel a subscription now or at period end', status: 'rendered' },
60
+ { key: 'invoiceList', label: 'Invoices list: amount, status, number, customer, due, created', status: 'rendered' },
61
+ { key: 'invoiceDetail', label: "An invoice's summary lines and totals", status: 'rendered' },
62
+ { key: 'quotes', label: 'Quotes', status: 'rendered' },
93
63
 
94
- // disputes/payouts/balance_transactions/events are full twin resources with list +
95
- // CRUD/action endpoints (stripe-twin.ts) and vendor-faithful schemas; the mirror now
96
- // renders a nav section + list/detail for each.
97
- { key: 'disputes', label: 'Disputes', status: 'rendered' },
98
- { key: 'payouts', label: 'Payouts', status: 'rendered' },
99
- { key: 'balanceTransactions', label: 'Balance transactions ledger', status: 'rendered' },
100
- // the synthesized account balance summary (GET /v1/balance) has its own nav section
101
- // with available/pending buckets per currency.
102
- { key: 'balanceSummary', label: 'Account balance summary (available/pending)', status: 'rendered' },
103
- { key: 'eventsLog', label: 'Events / activity log', status: 'rendered' },
64
+ // --- Product catalog ---
65
+ { key: 'productCatalog', label: 'Product catalog: name, pricing, created, updated', status: 'rendered' },
66
+ { key: 'createProduct', label: 'Create product', status: 'rendered' },
67
+ { key: 'coupons', label: 'Coupons', status: 'rendered' },
104
68
 
105
- // --- Connect (connected accounts + transfers) — full twin resources with their own
106
- // nav sections + list/detail; the account detail surfaces the enablement flags +
107
- // outstanding requirements, transfers cross-link to their destination account. ---
108
- { key: 'connectAccounts', label: 'Connect / connected accounts list + detail', status: 'rendered' },
109
- { key: 'connectAccountFlags', label: 'Connected-account enablement flags (charges/payouts/details_submitted)', status: 'rendered' },
110
- { key: 'connectAccountRequirements', label: 'Connected-account outstanding onboarding requirements (currently_due)', status: 'rendered' },
111
- { key: 'connectTransfers', label: 'Transfers list (platform → connected account)', status: 'rendered' },
112
- { key: 'connectTransferDestinationLink', label: 'Transfer → destination connected-account cross-link', status: 'rendered' },
69
+ // --- Developers and Settings ---
70
+ { key: 'apiKeys', label: 'API keys', status: 'rendered' },
71
+ { key: 'webhooks', label: 'Webhook endpoints', status: 'rendered' },
72
+ { key: 'eventsLog', label: 'Events', status: 'rendered' },
73
+ { key: 'payoutSchedule', label: 'Settings: payout schedule', status: 'rendered' },
113
74
 
114
- // --- Stripe Tax (tax rates + calculations) — full twin resources with their own nav
115
- // sections + list/detail; rates show display_name/percentage/inclusive, calculations
116
- // show amount_total + tax + their priced line_items (nested). ---
117
- { key: 'taxRates', label: 'Tax rates list (display_name / percentage / inclusive)', status: 'rendered' },
118
- { key: 'taxCalculations', label: 'Tax calculations list (amount_total + tax amount)', status: 'rendered' },
119
- { key: 'taxCalculationLineItems', label: 'Tax calculation line items (nested, per-item tax)', status: 'rendered' },
75
+ // --- under More ---
76
+ { key: 'connectAccounts', label: 'Connect: connected accounts, readiness flags and requirements due', status: 'rendered' },
77
+ { key: 'connectTransfers', label: 'Connect: transfers', status: 'rendered' },
78
+ { key: 'radar', label: 'Radar: reviews, lists, rules', status: 'rendered' },
79
+ { key: 'terminal', label: 'Terminal: readers, locations', status: 'rendered' },
80
+ { key: 'issuing', label: 'Issuing: cards, cardholders', status: 'rendered' },
81
+ { key: 'taxRates', label: 'Tax: tax rates', status: 'rendered' },
82
+ { key: 'reports', label: 'Reporting: report runs', status: 'rendered' },
120
83
  ];
121
84
 
122
85
  /** Read-only completeness check over the declared Stripe UI inventory. */