@adonis-agora/payments 0.2.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 (222) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/dist/commands/main.d.ts +16 -0
  3. package/dist/commands/main.d.ts.map +1 -0
  4. package/dist/commands/main.js +17 -0
  5. package/dist/commands/main.js.map +1 -0
  6. package/dist/commands/make_billable.d.ts +16 -0
  7. package/dist/commands/make_billable.d.ts.map +1 -0
  8. package/dist/commands/make_billable.js +30 -0
  9. package/dist/commands/make_billable.js.map +1 -0
  10. package/dist/commands/make_webhook_handler.d.ts +20 -0
  11. package/dist/commands/make_webhook_handler.d.ts.map +1 -0
  12. package/dist/commands/make_webhook_handler.js +34 -0
  13. package/dist/commands/make_webhook_handler.js.map +1 -0
  14. package/dist/commands/payments_sync.d.ts +20 -0
  15. package/dist/commands/payments_sync.d.ts.map +1 -0
  16. package/dist/commands/payments_sync.js +95 -0
  17. package/dist/commands/payments_sync.js.map +1 -0
  18. package/dist/commands/payments_webhook.d.ts +19 -0
  19. package/dist/commands/payments_webhook.d.ts.map +1 -0
  20. package/dist/commands/payments_webhook.js +123 -0
  21. package/dist/commands/payments_webhook.js.map +1 -0
  22. package/dist/configure.d.ts +12 -0
  23. package/dist/configure.d.ts.map +1 -0
  24. package/dist/configure.js +34 -0
  25. package/dist/configure.js.map +1 -0
  26. package/dist/providers/payments_provider.d.ts +15 -0
  27. package/dist/providers/payments_provider.d.ts.map +1 -0
  28. package/dist/providers/payments_provider.js +155 -0
  29. package/dist/providers/payments_provider.js.map +1 -0
  30. package/dist/src/billing/billing_overview.d.ts +26 -0
  31. package/dist/src/billing/billing_overview.d.ts.map +1 -0
  32. package/dist/src/billing/billing_overview.js +27 -0
  33. package/dist/src/billing/billing_overview.js.map +1 -0
  34. package/dist/src/billing/billing_store.d.ts +73 -0
  35. package/dist/src/billing/billing_store.d.ts.map +1 -0
  36. package/dist/src/billing/billing_store.js +2 -0
  37. package/dist/src/billing/billing_store.js.map +1 -0
  38. package/dist/src/billing/index.d.ts +8 -0
  39. package/dist/src/billing/index.d.ts.map +1 -0
  40. package/dist/src/billing/index.js +6 -0
  41. package/dist/src/billing/index.js.map +1 -0
  42. package/dist/src/billing/lucid_billing_store.d.ts +84 -0
  43. package/dist/src/billing/lucid_billing_store.d.ts.map +1 -0
  44. package/dist/src/billing/lucid_billing_store.js +143 -0
  45. package/dist/src/billing/lucid_billing_store.js.map +1 -0
  46. package/dist/src/billing/metered_bill.d.ts +60 -0
  47. package/dist/src/billing/metered_bill.d.ts.map +1 -0
  48. package/dist/src/billing/metered_bill.js +46 -0
  49. package/dist/src/billing/metered_bill.js.map +1 -0
  50. package/dist/src/billing/mixins/index.d.ts +6 -0
  51. package/dist/src/billing/mixins/index.d.ts.map +1 -0
  52. package/dist/src/billing/mixins/index.js +6 -0
  53. package/dist/src/billing/mixins/index.js.map +1 -0
  54. package/dist/src/billing/mixins/with_billable.d.ts +23 -0
  55. package/dist/src/billing/mixins/with_billable.d.ts.map +1 -0
  56. package/dist/src/billing/mixins/with_billable.js +33 -0
  57. package/dist/src/billing/mixins/with_billable.js.map +1 -0
  58. package/dist/src/billing/mixins/with_payment.d.ts +45 -0
  59. package/dist/src/billing/mixins/with_payment.d.ts.map +1 -0
  60. package/dist/src/billing/mixins/with_payment.js +94 -0
  61. package/dist/src/billing/mixins/with_payment.js.map +1 -0
  62. package/dist/src/billing/mixins/with_subscription.d.ts +50 -0
  63. package/dist/src/billing/mixins/with_subscription.d.ts.map +1 -0
  64. package/dist/src/billing/mixins/with_subscription.js +95 -0
  65. package/dist/src/billing/mixins/with_subscription.js.map +1 -0
  66. package/dist/src/billing/mixins/with_usage_event.d.ts +22 -0
  67. package/dist/src/billing/mixins/with_usage_event.d.ts.map +1 -0
  68. package/dist/src/billing/mixins/with_usage_event.js +39 -0
  69. package/dist/src/billing/mixins/with_usage_event.js.map +1 -0
  70. package/dist/src/billing/mixins/with_webhook_event.d.ts +21 -0
  71. package/dist/src/billing/mixins/with_webhook_event.d.ts.map +1 -0
  72. package/dist/src/billing/mixins/with_webhook_event.js +42 -0
  73. package/dist/src/billing/mixins/with_webhook_event.js.map +1 -0
  74. package/dist/src/billing/webhook_dispatcher.d.ts +79 -0
  75. package/dist/src/billing/webhook_dispatcher.d.ts.map +1 -0
  76. package/dist/src/billing/webhook_dispatcher.js +125 -0
  77. package/dist/src/billing/webhook_dispatcher.js.map +1 -0
  78. package/dist/src/billing/webhook_events.d.ts +49 -0
  79. package/dist/src/billing/webhook_events.d.ts.map +1 -0
  80. package/dist/src/billing/webhook_events.js +44 -0
  81. package/dist/src/billing/webhook_events.js.map +1 -0
  82. package/dist/src/billing/webhook_processor.d.ts +39 -0
  83. package/dist/src/billing/webhook_processor.d.ts.map +1 -0
  84. package/dist/src/billing/webhook_processor.js +209 -0
  85. package/dist/src/billing/webhook_processor.js.map +1 -0
  86. package/dist/src/define_config.d.ts +251 -0
  87. package/dist/src/define_config.d.ts.map +1 -0
  88. package/dist/src/define_config.js +67 -0
  89. package/dist/src/define_config.js.map +1 -0
  90. package/dist/src/diagnostics.d.ts +155 -0
  91. package/dist/src/diagnostics.d.ts.map +1 -0
  92. package/dist/src/diagnostics.js +153 -0
  93. package/dist/src/diagnostics.js.map +1 -0
  94. package/dist/src/driver.d.ts +222 -0
  95. package/dist/src/driver.d.ts.map +1 -0
  96. package/dist/src/driver.js +2 -0
  97. package/dist/src/driver.js.map +1 -0
  98. package/dist/src/drivers/abacate.d.ts +35 -0
  99. package/dist/src/drivers/abacate.d.ts.map +1 -0
  100. package/dist/src/drivers/abacate.js +381 -0
  101. package/dist/src/drivers/abacate.js.map +1 -0
  102. package/dist/src/drivers/asaas.d.ts +36 -0
  103. package/dist/src/drivers/asaas.d.ts.map +1 -0
  104. package/dist/src/drivers/asaas.js +455 -0
  105. package/dist/src/drivers/asaas.js.map +1 -0
  106. package/dist/src/drivers/stripe.d.ts +36 -0
  107. package/dist/src/drivers/stripe.d.ts.map +1 -0
  108. package/dist/src/drivers/stripe.js +392 -0
  109. package/dist/src/drivers/stripe.js.map +1 -0
  110. package/dist/src/drivers/woovi.d.ts +49 -0
  111. package/dist/src/drivers/woovi.d.ts.map +1 -0
  112. package/dist/src/drivers/woovi.js +339 -0
  113. package/dist/src/drivers/woovi.js.map +1 -0
  114. package/dist/src/ensure_customer.d.ts +23 -0
  115. package/dist/src/ensure_customer.d.ts.map +1 -0
  116. package/dist/src/ensure_customer.js +25 -0
  117. package/dist/src/ensure_customer.js.map +1 -0
  118. package/dist/src/hooks/webhook_handlers.d.ts +50 -0
  119. package/dist/src/hooks/webhook_handlers.d.ts.map +1 -0
  120. package/dist/src/hooks/webhook_handlers.js +53 -0
  121. package/dist/src/hooks/webhook_handlers.js.map +1 -0
  122. package/dist/src/http.d.ts +24 -0
  123. package/dist/src/http.d.ts.map +1 -0
  124. package/dist/src/http.js +52 -0
  125. package/dist/src/http.js.map +1 -0
  126. package/dist/src/index.d.ts +29 -0
  127. package/dist/src/index.d.ts.map +1 -0
  128. package/dist/src/index.js +15 -0
  129. package/dist/src/index.js.map +1 -0
  130. package/dist/src/invoice/drivers/asaas.d.ts +23 -0
  131. package/dist/src/invoice/drivers/asaas.d.ts.map +1 -0
  132. package/dist/src/invoice/drivers/asaas.js +85 -0
  133. package/dist/src/invoice/drivers/asaas.js.map +1 -0
  134. package/dist/src/invoice/drivers/enotas.d.ts +23 -0
  135. package/dist/src/invoice/drivers/enotas.d.ts.map +1 -0
  136. package/dist/src/invoice/drivers/enotas.js +83 -0
  137. package/dist/src/invoice/drivers/enotas.js.map +1 -0
  138. package/dist/src/invoice/drivers/focus.d.ts +23 -0
  139. package/dist/src/invoice/drivers/focus.d.ts.map +1 -0
  140. package/dist/src/invoice/drivers/focus.js +90 -0
  141. package/dist/src/invoice/drivers/focus.js.map +1 -0
  142. package/dist/src/invoice/drivers/plugnotas.d.ts +22 -0
  143. package/dist/src/invoice/drivers/plugnotas.d.ts.map +1 -0
  144. package/dist/src/invoice/drivers/plugnotas.js +81 -0
  145. package/dist/src/invoice/drivers/plugnotas.js.map +1 -0
  146. package/dist/src/invoice/drivers/tecnospeed.d.ts +29 -0
  147. package/dist/src/invoice/drivers/tecnospeed.d.ts.map +1 -0
  148. package/dist/src/invoice/drivers/tecnospeed.js +87 -0
  149. package/dist/src/invoice/drivers/tecnospeed.js.map +1 -0
  150. package/dist/src/invoice/emit_invoice.d.ts +45 -0
  151. package/dist/src/invoice/emit_invoice.d.ts.map +1 -0
  152. package/dist/src/invoice/emit_invoice.js +72 -0
  153. package/dist/src/invoice/emit_invoice.js.map +1 -0
  154. package/dist/src/invoice/invoice_manager.d.ts +12 -0
  155. package/dist/src/invoice/invoice_manager.d.ts.map +1 -0
  156. package/dist/src/invoice/invoice_manager.js +35 -0
  157. package/dist/src/invoice/invoice_manager.js.map +1 -0
  158. package/dist/src/invoice/invoice_provider.d.ts +48 -0
  159. package/dist/src/invoice/invoice_provider.d.ts.map +1 -0
  160. package/dist/src/invoice/invoice_provider.js +2 -0
  161. package/dist/src/invoice/invoice_provider.js.map +1 -0
  162. package/dist/src/money.d.ts +11 -0
  163. package/dist/src/money.d.ts.map +1 -0
  164. package/dist/src/money.js +14 -0
  165. package/dist/src/money.js.map +1 -0
  166. package/dist/src/payments_manager.d.ts +40 -0
  167. package/dist/src/payments_manager.d.ts.map +1 -0
  168. package/dist/src/payments_manager.js +94 -0
  169. package/dist/src/payments_manager.js.map +1 -0
  170. package/dist/src/services/main.d.ts +6 -0
  171. package/dist/src/services/main.d.ts.map +1 -0
  172. package/dist/src/services/main.js +17 -0
  173. package/dist/src/services/main.js.map +1 -0
  174. package/dist/src/telescope/index.d.ts +3 -0
  175. package/dist/src/telescope/index.d.ts.map +1 -0
  176. package/dist/src/telescope/index.js +2 -0
  177. package/dist/src/telescope/index.js.map +1 -0
  178. package/dist/src/telescope/payments_watcher.d.ts +27 -0
  179. package/dist/src/telescope/payments_watcher.d.ts.map +1 -0
  180. package/dist/src/telescope/payments_watcher.js +58 -0
  181. package/dist/src/telescope/payments_watcher.js.map +1 -0
  182. package/dist/src/telescope/telescope-sdk.d.ts +21 -0
  183. package/dist/src/telescope/telescope-sdk.d.ts.map +1 -0
  184. package/dist/src/telescope/telescope-sdk.js +11 -0
  185. package/dist/src/telescope/telescope-sdk.js.map +1 -0
  186. package/dist/src/testing/fake_payments_driver.d.ts +64 -0
  187. package/dist/src/testing/fake_payments_driver.d.ts.map +1 -0
  188. package/dist/src/testing/fake_payments_driver.js +171 -0
  189. package/dist/src/testing/fake_payments_driver.js.map +1 -0
  190. package/dist/src/testing/in_memory_billing_store.d.ts +110 -0
  191. package/dist/src/testing/in_memory_billing_store.d.ts.map +1 -0
  192. package/dist/src/testing/in_memory_billing_store.js +136 -0
  193. package/dist/src/testing/in_memory_billing_store.js.map +1 -0
  194. package/dist/src/testing/index.d.ts +6 -0
  195. package/dist/src/testing/index.d.ts.map +1 -0
  196. package/dist/src/testing/index.js +4 -0
  197. package/dist/src/testing/index.js.map +1 -0
  198. package/dist/src/testing/mutable_clock.d.ts +12 -0
  199. package/dist/src/testing/mutable_clock.d.ts.map +1 -0
  200. package/dist/src/testing/mutable_clock.js +20 -0
  201. package/dist/src/testing/mutable_clock.js.map +1 -0
  202. package/dist/src/types.d.ts +178 -0
  203. package/dist/src/types.d.ts.map +1 -0
  204. package/dist/src/types.js +9 -0
  205. package/dist/src/types.js.map +1 -0
  206. package/dist/src/webhook_handlers.d.ts +76 -0
  207. package/dist/src/webhook_handlers.d.ts.map +1 -0
  208. package/dist/src/webhook_handlers.js +128 -0
  209. package/dist/src/webhook_handlers.js.map +1 -0
  210. package/dist/src/webhook_security.d.ts +29 -0
  211. package/dist/src/webhook_security.d.ts.map +1 -0
  212. package/dist/src/webhook_security.js +53 -0
  213. package/dist/src/webhook_security.js.map +1 -0
  214. package/dist/stubs/config/payments.stub +101 -0
  215. package/dist/stubs/database/migrations/create_billing_tables.stub +90 -0
  216. package/dist/stubs/main.d.ts +9 -0
  217. package/dist/stubs/main.d.ts.map +1 -0
  218. package/dist/stubs/main.js +16 -0
  219. package/dist/stubs/main.js.map +1 -0
  220. package/dist/stubs/make/billable/main.stub +28 -0
  221. package/dist/stubs/make/webhook_handler/main.stub +29 -0
  222. package/package.json +150 -0
@@ -0,0 +1,392 @@
1
+ import Stripe from 'stripe';
2
+ import { publishPaymentDiagnostics, publishRefundDiagnostics, publishSubscriptionDiagnostics, } from '../diagnostics.js';
3
+ import { emitInvoiceIfRequested } from '../invoice/emit_invoice.js';
4
+ /**
5
+ * Stripe driver. Wraps the Stripe SDK and normalizes its API onto the shared
6
+ * {@link PaymentsDriver} contract. The SDK is imported lazily by the factory in
7
+ * `define_config.ts`, so `stripe` stays an optional peer dependency.
8
+ */
9
+ export class StripeDriver {
10
+ provider = 'stripe';
11
+ supportedMethods = ['pix', 'credit_card', 'boleto', 'undefined'];
12
+ capabilities = { refunds: true, invoices: true, subscriptions: true };
13
+ #stripe;
14
+ #currency;
15
+ #webhookSecret;
16
+ #invoiceCtx;
17
+ constructor(ctx, config) {
18
+ this.#invoiceCtx = ctx;
19
+ // Lazy import happens in the factory; here we import the SDK synchronously because
20
+ // the factory already ensured it is available. We read the env at construction time.
21
+ const apiKey = config.apiKey ?? process.env.STRIPE_KEY;
22
+ if (!apiKey) {
23
+ throw new Error('[payments] Stripe driver requires an API key. Set `STRIPE_KEY` env or pass `apiKey` to `payments.stripe()`.');
24
+ }
25
+ this.#stripe = new Stripe(apiKey);
26
+ this.#currency = config.currency ?? 'brl';
27
+ this.#webhookSecret = config.webhookSecret ?? process.env.STRIPE_WEBHOOK_SECRET;
28
+ }
29
+ // ── Customers ────────────────────────────────────────────────────────────────────────
30
+ async createCustomer(input) {
31
+ const customer = await this.#stripe.customers.create({
32
+ ...(input.email !== undefined ? { email: input.email } : {}),
33
+ ...(input.name !== undefined ? { name: input.name } : {}),
34
+ ...(input.taxId !== undefined ? { tax_id: input.taxId } : {}),
35
+ ...(input.metadata !== undefined
36
+ ? { metadata: input.metadata }
37
+ : {}),
38
+ });
39
+ return this.#mapCustomer(customer);
40
+ }
41
+ async findCustomer(customerId) {
42
+ try {
43
+ const customer = await this.#stripe.customers.retrieve(customerId);
44
+ if (customer.deleted)
45
+ return null;
46
+ return this.#mapCustomer(customer);
47
+ }
48
+ catch (error) {
49
+ if (this.#isNotFound(error))
50
+ return null;
51
+ throw error;
52
+ }
53
+ }
54
+ async updateCustomer(customerId, input) {
55
+ const customer = await this.#stripe.customers.update(customerId, {
56
+ ...(input.email !== undefined ? { email: input.email } : {}),
57
+ ...(input.name !== undefined ? { name: input.name } : {}),
58
+ ...(input.taxId !== undefined ? { tax_id: input.taxId } : {}),
59
+ ...(input.metadata !== undefined
60
+ ? { metadata: input.metadata }
61
+ : {}),
62
+ });
63
+ return this.#mapCustomer(customer);
64
+ }
65
+ // ── Payments ─────────────────────────────────────────────────────────────────────────
66
+ async charge(input) {
67
+ const params = {
68
+ amount: input.amount,
69
+ currency: input.currency ?? this.#currency,
70
+ ...(input.customerId !== undefined ? { customer: input.customerId } : {}),
71
+ ...(input.description !== undefined ? { description: input.description } : {}),
72
+ ...(input.paymentMethodId !== undefined ? { payment_method: input.paymentMethodId } : {}),
73
+ ...(input.card !== undefined ? { payment_method: input.card.token } : {}),
74
+ ...(input.metadata !== undefined
75
+ ? { metadata: input.metadata }
76
+ : {}),
77
+ ...(input.idempotencyKey !== undefined ? {} : {}),
78
+ };
79
+ if (input.idempotencyKey !== undefined) {
80
+ params.metadata = { ...(params.metadata ?? {}), idempotency_key: input.idempotencyKey };
81
+ }
82
+ if (input.externalReference !== undefined) {
83
+ params.metadata = { ...(params.metadata ?? {}), external_reference: input.externalReference };
84
+ }
85
+ const intent = await this.#stripe.paymentIntents.create(params);
86
+ const payment = this.#mapPayment(intent);
87
+ await emitInvoiceIfRequested(this.#invoiceCtx, input, payment, this);
88
+ publishPaymentDiagnostics(payment);
89
+ return payment;
90
+ }
91
+ async findPayment(gatewayId) {
92
+ try {
93
+ const intent = await this.#stripe.paymentIntents.retrieve(gatewayId);
94
+ return this.#mapPayment(intent);
95
+ }
96
+ catch (error) {
97
+ if (this.#isNotFound(error))
98
+ return null;
99
+ throw error;
100
+ }
101
+ }
102
+ async refund(paymentGatewayId, amount) {
103
+ const refund = await this.#stripe.refunds.create({
104
+ payment_intent: paymentGatewayId,
105
+ ...(amount !== undefined ? { amount } : {}),
106
+ });
107
+ const result = {
108
+ id: refund.id,
109
+ gatewayId: refund.id,
110
+ provider: this.provider,
111
+ amount: { amount: refund.amount, currency: refund.currency },
112
+ status: refund.status === 'succeeded'
113
+ ? 'succeeded'
114
+ : refund.status === 'pending'
115
+ ? 'pending'
116
+ : 'failed',
117
+ createdAt: new Date(refund.created * 1000).toISOString(),
118
+ };
119
+ publishRefundDiagnostics(result);
120
+ return result;
121
+ }
122
+ // ── Checkout ─────────────────────────────────────────────────────────────────────────
123
+ async createCheckout(input) {
124
+ const params = {
125
+ mode: input.planId !== undefined ? 'subscription' : 'payment',
126
+ ...(input.customerId !== undefined ? { customer: input.customerId } : {}),
127
+ success_url: input.successUrl,
128
+ ...(input.cancelUrl !== undefined ? { cancel_url: input.cancelUrl } : {}),
129
+ ...(input.metadata !== undefined
130
+ ? { metadata: input.metadata }
131
+ : {}),
132
+ ...(input.planId !== undefined
133
+ ? {
134
+ line_items: [{ price: input.planId, quantity: 1 }],
135
+ ...(input.trialDays !== undefined
136
+ ? { subscription_data: { trial_period_days: input.trialDays } }
137
+ : {}),
138
+ }
139
+ : {
140
+ line_items: [
141
+ {
142
+ price_data: {
143
+ currency: input.currency ?? this.#currency,
144
+ product_data: { name: input.description ?? 'Payment' },
145
+ unit_amount: input.amount,
146
+ },
147
+ quantity: 1,
148
+ },
149
+ ],
150
+ }),
151
+ };
152
+ const session = await this.#stripe.checkout.sessions.create(params);
153
+ return {
154
+ id: session.id,
155
+ gatewayId: session.id,
156
+ provider: this.provider,
157
+ url: session.url ?? '',
158
+ status: session.status === 'complete'
159
+ ? 'complete'
160
+ : session.status === 'expired'
161
+ ? 'expired'
162
+ : 'open',
163
+ ...(session.amount_total !== null && session.currency !== null
164
+ ? { amount: { amount: session.amount_total, currency: session.currency } }
165
+ : {}),
166
+ ...(session.subscription !== null
167
+ ? {
168
+ subscriptionId: typeof session.subscription === 'string'
169
+ ? session.subscription
170
+ : session.subscription.id,
171
+ }
172
+ : {}),
173
+ ...(session.customer !== null
174
+ ? {
175
+ customerId: typeof session.customer === 'string' ? session.customer : session.customer.id,
176
+ }
177
+ : {}),
178
+ };
179
+ }
180
+ // ── Subscriptions ────────────────────────────────────────────────────────────────────
181
+ async createSubscription(input) {
182
+ const params = {
183
+ customer: input.customerId,
184
+ items: [{ price: input.planId }],
185
+ ...(input.trialDays !== undefined ? { trial_period_days: input.trialDays } : {}),
186
+ ...(input.metadata !== undefined
187
+ ? { metadata: input.metadata }
188
+ : {}),
189
+ ...(input.externalReference !== undefined
190
+ ? {
191
+ metadata: {
192
+ ...(input.metadata ?? {}),
193
+ external_reference: input.externalReference,
194
+ },
195
+ }
196
+ : {}),
197
+ };
198
+ const subscription = await this.#stripe.subscriptions.create(params);
199
+ const result = this.#mapSubscription(subscription);
200
+ publishSubscriptionDiagnostics(result, 'subscription.created');
201
+ return result;
202
+ }
203
+ async cancelSubscription(subscriptionGatewayId, options) {
204
+ const subscription = await this.#stripe.subscriptions.update(subscriptionGatewayId, {
205
+ cancel_at_period_end: options?.atPeriodEnd ?? true,
206
+ });
207
+ if (options?.atPeriodEnd === false) {
208
+ // Immediate cancel.
209
+ await this.#stripe.subscriptions.cancel(subscriptionGatewayId);
210
+ const canceled = await this.#stripe.subscriptions.retrieve(subscriptionGatewayId);
211
+ const result = this.#mapSubscription(canceled);
212
+ publishSubscriptionDiagnostics(result, 'subscription.canceled');
213
+ return result;
214
+ }
215
+ const result = this.#mapSubscription(subscription);
216
+ publishSubscriptionDiagnostics(result, 'subscription.canceled');
217
+ return result;
218
+ }
219
+ async findSubscription(gatewayId) {
220
+ try {
221
+ const subscription = await this.#stripe.subscriptions.retrieve(gatewayId);
222
+ return this.#mapSubscription(subscription);
223
+ }
224
+ catch (error) {
225
+ if (this.#isNotFound(error))
226
+ return null;
227
+ throw error;
228
+ }
229
+ }
230
+ async updateSubscription(subscriptionGatewayId, input) {
231
+ // Stripe changes prices by subscription item id (the billing layer's swap); here we
232
+ // support description/metadata only.
233
+ const params = {
234
+ ...(input.description !== undefined ? { description: input.description } : {}),
235
+ ...(input.metadata !== undefined
236
+ ? { metadata: input.metadata }
237
+ : {}),
238
+ };
239
+ const subscription = await this.#stripe.subscriptions.update(subscriptionGatewayId, params);
240
+ return this.#mapSubscription(subscription);
241
+ }
242
+ // ── Invoices ─────────────────────────────────────────────────────────────────────────
243
+ async listInvoices(customerId) {
244
+ const invoices = await this.#stripe.invoices.list({ customer: customerId });
245
+ return invoices.data.map((invoice) => {
246
+ const id = invoice.id ?? '';
247
+ const subscriptionId = invoice.subscription !== undefined &&
248
+ typeof invoice.subscription === 'string'
249
+ ? invoice.subscription
250
+ : undefined;
251
+ return {
252
+ id,
253
+ gatewayId: id,
254
+ provider: this.provider,
255
+ ...(typeof invoice.customer === 'string' ? { customerId: invoice.customer } : {}),
256
+ ...(subscriptionId !== undefined ? { subscriptionId } : {}),
257
+ status: invoice.status ?? 'draft',
258
+ amount: { amount: invoice.amount_due, currency: invoice.currency },
259
+ createdAt: new Date(invoice.created * 1000).toISOString(),
260
+ ...(invoice.hosted_invoice_url !== null && invoice.hosted_invoice_url !== undefined
261
+ ? { hostedPdfUrl: invoice.hosted_invoice_url }
262
+ : {}),
263
+ payload: invoice,
264
+ };
265
+ });
266
+ }
267
+ // ── Webhooks ─────────────────────────────────────────────────────────────────────────
268
+ parseWebhook(rawBody, headers) {
269
+ if (!this.#webhookSecret) {
270
+ throw new Error('[payments] Stripe webhook processing requires `STRIPE_WEBHOOK_SECRET` env var.');
271
+ }
272
+ const signature = headers['stripe-signature'] ?? headers['Stripe-Signature'];
273
+ if (!signature) {
274
+ throw new Error('[payments] Missing `stripe-signature` header on webhook request.');
275
+ }
276
+ // Stripe's constructEvent throws on invalid signature.
277
+ const event = this.#stripe.webhooks.constructEvent(rawBody, Array.isArray(signature) ? signature[0] : signature, this.#webhookSecret);
278
+ return this.#mapWebhookEvent(event);
279
+ }
280
+ // ── Mappers ──────────────────────────────────────────────────────────────────────────
281
+ #mapCustomer(customer) {
282
+ return {
283
+ id: customer.id,
284
+ ...(customer.email !== null ? { email: customer.email } : {}),
285
+ ...(customer.name !== null ? { name: customer.name } : {}),
286
+ ...(customer.metadata !== undefined && Object.keys(customer.metadata).length > 0
287
+ ? { metadata: customer.metadata }
288
+ : {}),
289
+ };
290
+ }
291
+ #mapPayment(intent) {
292
+ const method = intent.payment_method_types.length > 0
293
+ ? this.#mapMethod(intent.payment_method_types[0])
294
+ : undefined;
295
+ const result = {
296
+ id: intent.id,
297
+ gatewayId: intent.id,
298
+ provider: this.provider,
299
+ amount: { amount: intent.amount, currency: intent.currency },
300
+ status: intent.status === 'succeeded'
301
+ ? 'paid'
302
+ : intent.status === 'requires_payment_method' ||
303
+ intent.status === 'requires_action' ||
304
+ intent.status === 'processing'
305
+ ? 'pending'
306
+ : intent.status === 'canceled'
307
+ ? 'canceled'
308
+ : 'failed',
309
+ payload: intent.metadata !== undefined && Object.keys(intent.metadata).length > 0
310
+ ? intent.metadata
311
+ : {},
312
+ createdAt: new Date(intent.created * 1000).toISOString(),
313
+ };
314
+ if (typeof intent.customer === 'string')
315
+ result.customerId = intent.customer;
316
+ if (method !== undefined && method !== 'unknown')
317
+ result.method = method;
318
+ if (intent.status === 'succeeded') {
319
+ result.paidAt = new Date(intent.created * 1000).toISOString();
320
+ }
321
+ return result;
322
+ }
323
+ #mapSubscription(subscription) {
324
+ const statusMap = {
325
+ trialing: 'trialing',
326
+ active: 'active',
327
+ past_due: 'past_due',
328
+ incomplete: 'incomplete',
329
+ canceled: 'canceled',
330
+ unpaid: 'past_due',
331
+ incomplete_expired: 'ended',
332
+ paused: 'active',
333
+ };
334
+ return {
335
+ id: subscription.id,
336
+ gatewayId: subscription.id,
337
+ provider: this.provider,
338
+ customerId: typeof subscription.customer === 'string'
339
+ ? subscription.customer
340
+ : subscription.customer.id,
341
+ status: statusMap[subscription.status] ?? 'active',
342
+ planId: subscription.items.data[0]?.price.id ?? '',
343
+ ...(subscription.items.data[0]?.price.unit_amount !== null
344
+ ? {
345
+ amount: {
346
+ amount: subscription.items.data[0].price.unit_amount,
347
+ currency: subscription.items.data[0].price.currency,
348
+ },
349
+ }
350
+ : {}),
351
+ ...(subscription.trial_end !== null
352
+ ? { trialEndsAt: new Date(subscription.trial_end * 1000).toISOString() }
353
+ : {}),
354
+ ...(subscription.cancel_at_period_end
355
+ ? { endsAt: new Date(subscription.ended_at ?? subscription.created * 1000).toISOString() }
356
+ : subscription.ended_at !== null
357
+ ? { endsAt: new Date(subscription.ended_at * 1000).toISOString() }
358
+ : {}),
359
+ payload: subscription,
360
+ createdAt: new Date(subscription.created * 1000).toISOString(),
361
+ };
362
+ }
363
+ #mapWebhookEvent(event) {
364
+ return {
365
+ id: event.id,
366
+ provider: this.provider,
367
+ type: event.type,
368
+ createdAt: new Date(event.created * 1000).toISOString(),
369
+ data: event.data.object,
370
+ raw: event,
371
+ };
372
+ }
373
+ #mapMethod(method) {
374
+ switch (method) {
375
+ case 'card':
376
+ return 'card';
377
+ case 'pix':
378
+ return 'pix';
379
+ case 'boleto':
380
+ return 'boleto';
381
+ default:
382
+ return 'unknown';
383
+ }
384
+ }
385
+ #isNotFound(error) {
386
+ return (typeof error === 'object' &&
387
+ error !== null &&
388
+ 'statusCode' in error &&
389
+ error.statusCode === 404);
390
+ }
391
+ }
392
+ //# sourceMappingURL=stripe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stripe.js","sourceRoot":"","sources":["../../../src/drivers/stripe.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ import type { WooviDriverConfig } from '../define_config.js';
2
+ import type { ChargeInput, CheckoutInput, CreateCustomerInput, CreateSubscriptionInput, PaymentsDriver, UpdateCustomerInput, UpdateSubscriptionInput } from '../driver.js';
3
+ import type { EmitInvoiceContext } from '../invoice/emit_invoice.js';
4
+ import type { CheckoutSession, Customer, Invoice, Money, Payment, Refund, Subscription, WebhookEvent } from '../types.js';
5
+ /**
6
+ * Woovi/OpenPix driver — Brazilian Pix gateway with Pix Automático (recurring Pix via
7
+ * webhooks, no card). Uses the official `@woovi/node-sdk` (lazily imported by the factory,
8
+ * so the SDK stays an optional peer dependency).
9
+ */
10
+ /** A Woovi subaccount (OpenPix for Platforms marketplace receiver). */
11
+ export interface WooviSubAccount {
12
+ name: string;
13
+ pixKey: string;
14
+ balance: number;
15
+ }
16
+ export declare class WooviDriver implements PaymentsDriver {
17
+ #private;
18
+ readonly provider = "woovi";
19
+ readonly supportedMethods: readonly ["pix", "undefined"];
20
+ readonly capabilities: {
21
+ subscriptions: boolean;
22
+ };
23
+ constructor(ctx: EmitInvoiceContext, config?: WooviDriverConfig);
24
+ createCustomer(input: CreateCustomerInput): Promise<Customer>;
25
+ findCustomer(customerId: string): Promise<Customer | null>;
26
+ updateCustomer(customerId: string, input: UpdateCustomerInput): Promise<Customer>;
27
+ charge(input: ChargeInput): Promise<Payment>;
28
+ findPayment(gatewayId: string): Promise<Payment | null>;
29
+ refund(_paymentGatewayId: string, _amount?: Money): Promise<Refund>;
30
+ /** Create a subaccount (marketplace receiver) keyed by a Pix key. */
31
+ createSubAccount(input: {
32
+ pixKey: string;
33
+ name: string;
34
+ }): Promise<WooviSubAccount>;
35
+ /** Find a subaccount by its id. */
36
+ findSubAccount(id: string): Promise<WooviSubAccount | null>;
37
+ /** List every subaccount. */
38
+ listSubAccounts(): Promise<WooviSubAccount[]>;
39
+ createCheckout(input: CheckoutInput): Promise<CheckoutSession>;
40
+ createSubscription(input: CreateSubscriptionInput): Promise<Subscription>;
41
+ cancelSubscription(subscriptionGatewayId: string, _options?: {
42
+ atPeriodEnd?: boolean;
43
+ }): Promise<Subscription>;
44
+ findSubscription(gatewayId: string): Promise<Subscription | null>;
45
+ updateSubscription(subscriptionGatewayId: string, input: UpdateSubscriptionInput): Promise<Subscription>;
46
+ listInvoices(_customerId: string): Promise<Invoice[]>;
47
+ parseWebhook(rawBody: string, headers: Record<string, string | string[] | undefined>): WebhookEvent;
48
+ }
49
+ //# sourceMappingURL=woovi.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"woovi.d.ts","sourceRoot":"","sources":["../../../src/drivers/woovi.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE7D,OAAO,KAAK,EACV,WAAW,EACX,aAAa,EACb,mBAAmB,EACnB,uBAAuB,EACvB,cAAc,EACd,mBAAmB,EACnB,uBAAuB,EACxB,MAAM,cAAc,CAAC;AAGtB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAErE,OAAO,KAAK,EACV,eAAe,EACf,QAAQ,EACR,OAAO,EACP,KAAK,EACL,OAAO,EACP,MAAM,EACN,YAAY,EACZ,YAAY,EACb,MAAM,aAAa,CAAC;AAGrB;;;;GAIG;AACH,uEAAuE;AACvE,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,WAAY,YAAW,cAAc;;IAChD,QAAQ,CAAC,QAAQ,WAAW;IAE5B,QAAQ,CAAC,gBAAgB,gCAAiC;IAC1D,QAAQ,CAAC,YAAY;;MAA2B;gBA6BpC,GAAG,EAAE,kBAAkB,EAAE,MAAM,GAAE,iBAAsB;IAkB7D,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,QAAQ,CAAC;IAS7D,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAS1D,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,QAAQ,CAAC;IAYjF,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAgB5C,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IASvD,MAAM,CAAC,iBAAiB,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC;IAMzE,qEAAqE;IAC/D,gBAAgB,CAAC,KAAK,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,eAAe,CAAC;IAKzF,mCAAmC;IAC7B,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IASjE,6BAA6B;IACvB,eAAe,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;IAe7C,cAAc,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,eAAe,CAAC;IAyB9D,kBAAkB,CAAC,KAAK,EAAE,uBAAuB,GAAG,OAAO,CAAC,YAAY,CAAC;IAoEzE,kBAAkB,CACtB,qBAAqB,EAAE,MAAM,EAC7B,QAAQ,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE,GACnC,OAAO,CAAC,YAAY,CAAC;IAOlB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IASjE,kBAAkB,CACtB,qBAAqB,EAAE,MAAM,EAC7B,KAAK,EAAE,uBAAuB,GAC7B,OAAO,CAAC,YAAY,CAAC;IAelB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAO3D,YAAY,CACV,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,GACrD,YAAY;CAwHhB"}