feat(billing): P1c Stripe dep + server client + vault-backed config

Pin stripe@22.1.1 (exact). lib/stripe/client.ts: per-request getStripe
with the pinned apiVersion (server-only, never global/client). Helpers
in lib/stripe/config.ts (plain server module — they take the admin
client so they must NOT be 'use server' exports): store/read the secret
key + webhook signing secret in the AES-256-GCM secrets vault (door
pattern), getStripeConfig. lib/actions/stripe.ts (actions only):
getStripeSettings (status only, never returns secrets) + saveStripeSettings
(write-only secrets, integrations.config upsert). Zod stripeSettingsSchema.
This commit is contained in:
Moheeb Zara
2026-05-17 03:06:32 -07:00
parent 289fa2d991
commit 5ca7ee6e29
7 changed files with 223 additions and 0 deletions
+16
View File
@@ -161,6 +161,9 @@ importers:
sonner:
specifier: ^1.7.1
version: 1.7.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
stripe:
specifier: ^22.1.1
version: 22.1.1(@types/node@22.19.11)
tailwind-merge:
specifier: ^3.3.1
version: 3.4.0
@@ -4010,6 +4013,15 @@ packages:
strip-literal@2.1.1:
resolution: {integrity: sha512-631UJ6O00eNGfMiWG78ck80dfBab8X6IVFB51jZK5Icd7XAs60Z5y7QdSd/wGIklnWvRbUNloVzhOKKmutxQ6Q==}
stripe@22.1.1:
resolution: {integrity: sha512-cmodIYP27tBkJ8G7DuGgWw0PFuemlFZbuF3Wwr1TrjFjUa3T7NIgCe6TVwX8BO2ynu+xtTuDGfHafNDCPt9lXA==}
engines: {node: '>=18'}
peerDependencies:
'@types/node': '>=18'
peerDependenciesMeta:
'@types/node':
optional: true
style-to-js@1.1.21:
resolution: {integrity: sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==}
@@ -8535,6 +8547,10 @@ snapshots:
dependencies:
js-tokens: 9.0.1
stripe@22.1.1(@types/node@22.19.11):
optionalDependencies:
'@types/node': 22.19.11
style-to-js@1.1.21:
dependencies:
style-to-object: 1.0.14