@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,87 @@
1
+ /**
2
+ * Tecnospeed invoice provider — NFS-e across municipalities. Uses `fetch` directly (no
3
+ * SDK dependency). The exact JSON layout varies per municipality and standard (Tecnospeed
4
+ * also offers an XML DPS flow and steers toward PlugNotas for JSON NFS-e) — this adapter
5
+ * sends the common JSON shape and normalizes the response; if your municipality differs,
6
+ * extend this driver (see Custom providers).
7
+ */
8
+ export class TecnospeedInvoiceProvider {
9
+ provider = 'tecnospeed';
10
+ #token;
11
+ #baseUrl;
12
+ constructor(_ctx, config = {}) {
13
+ const token = config.token ?? process.env.TECNOSPEED_TOKEN;
14
+ if (!token) {
15
+ throw new Error('[payments] Tecnospeed invoice provider requires a token. Set `TECNOSPEED_TOKEN` env or pass `token` to `invoice.tecnospeed()`.');
16
+ }
17
+ this.#token = token;
18
+ this.#baseUrl = config.baseUrl ?? 'https://api-tecnospeed.com.br/v1';
19
+ }
20
+ async emit(input) {
21
+ const body = {
22
+ tomador: {
23
+ cpf_cnpj: input.customer.taxId.replace(/\D/g, ''),
24
+ razao_social: input.customer.name ?? 'Cliente',
25
+ ...(input.customer.email !== undefined ? { email: input.customer.email } : {}),
26
+ ...(input.customer.address !== undefined ? { endereco: input.customer.address } : {}),
27
+ },
28
+ servico: {
29
+ descricao: input.service.description,
30
+ ...(input.service.code !== undefined ? { codigo_servico: input.service.code } : {}),
31
+ ...(input.service.cityServiceCode !== undefined
32
+ ? { codigo_servico_municipio: input.service.cityServiceCode }
33
+ : {}),
34
+ },
35
+ valor: input.amount / 100,
36
+ ...(input.tax !== undefined ? { impostos: input.tax } : {}),
37
+ };
38
+ const response = await fetch(`${this.#baseUrl}/nfse`, {
39
+ method: 'POST',
40
+ headers: {
41
+ Authorization: this.#token,
42
+ 'Content-Type': 'application/json',
43
+ },
44
+ body: JSON.stringify(body),
45
+ });
46
+ if (!response.ok) {
47
+ const text = await response.text();
48
+ throw new Error(`[payments] Tecnospeed invoice request failed (${response.status}): ${text}`);
49
+ }
50
+ const data = (await response.json());
51
+ return this.#mapInvoice(data);
52
+ }
53
+ async find(invoiceId) {
54
+ const response = await fetch(`${this.#baseUrl}/nfse/${encodeURIComponent(invoiceId)}`, {
55
+ headers: { Authorization: this.#token },
56
+ });
57
+ if (response.status === 404)
58
+ return null;
59
+ if (!response.ok) {
60
+ const text = await response.text();
61
+ throw new Error(`[payments] Tecnospeed invoice request failed (${response.status}): ${text}`);
62
+ }
63
+ const data = (await response.json());
64
+ return this.#mapInvoice(data);
65
+ }
66
+ #mapInvoice(data) {
67
+ const status = data.status ?? '';
68
+ const normalized = status === 'autorizado' || status === 'AUTORIZADO' || status === 'emitido'
69
+ ? 'issued'
70
+ : status === 'cancelado' || status === 'CANCELADO' || status === 'rejeitado'
71
+ ? 'canceled'
72
+ : 'pending';
73
+ return {
74
+ id: data.id ?? data.chave ?? data.numero ?? String(Math.random()),
75
+ gatewayId: data.id ?? data.chave ?? data.numero ?? '',
76
+ provider: this.provider,
77
+ ...(data.numero !== undefined ? { number: data.numero } : {}),
78
+ ...(data.chave !== undefined ? { key: data.chave } : {}),
79
+ ...(data.url !== undefined ? { url: data.url, hostedPdfUrl: data.url } : {}),
80
+ status: normalized,
81
+ amount: { amount: Math.round(Number(data.valor ?? 0) * 100), currency: 'brl' },
82
+ createdAt: new Date().toISOString(),
83
+ payload: data,
84
+ };
85
+ }
86
+ }
87
+ //# sourceMappingURL=tecnospeed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tecnospeed.js","sourceRoot":"","sources":["../../../../src/invoice/drivers/tecnospeed.ts"],"names":[],"mappings":"AAuBA;;;;;;GAMG;AACH,MAAM,OAAO,yBAAyB;IAC3B,QAAQ,GAAG,YAAY,CAAC;IAEjC,MAAM,CAAS;IACf,QAAQ,CAAS;IAEjB,YAAY,IAA+B,EAAE,SAAkC,EAAE;QAC/E,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;QAC3D,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CACb,gIAAgI,CACjI,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,OAAO,IAAI,kCAAkC,CAAC;IACvE,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,KAAuB;QAChC,MAAM,IAAI,GAAG;YACX,OAAO,EAAE;gBACP,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;gBACjD,YAAY,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,IAAI,SAAS;gBAC9C,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC9E,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACtF;YACD,OAAO,EAAE;gBACP,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,WAAW;gBACpC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnF,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,KAAK,SAAS;oBAC7C,CAAC,CAAC,EAAE,wBAAwB,EAAE,KAAK,CAAC,OAAO,CAAC,eAAe,EAAE;oBAC7D,CAAC,CAAC,EAAE,CAAC;aACR;YACD,KAAK,EAAE,KAAK,CAAC,MAAM,GAAG,GAAG;YACzB,GAAG,CAAC,KAAK,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC5D,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,QAAQ,OAAO,EAAE;YACpD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,aAAa,EAAE,IAAI,CAAC,MAAM;gBAC1B,cAAc,EAAE,kBAAkB;aACnC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SAC3B,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,iDAAiD,QAAQ,CAAC,MAAM,MAAM,IAAI,EAAE,CAAC,CAAC;QAChG,CAAC;QACD,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAA8B,CAAC;QAClE,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,SAAiB;QAC1B,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,QAAQ,SAAS,kBAAkB,CAAC,SAAS,CAAC,EAAE,EAAE;YACrF,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,CAAC,MAAM,EAAE;SACxC,CAAC,CAAC;QACH,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG;YAAE,OAAO,IAAI,CAAC;QACzC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,iDAAiD,QAAQ,CAAC,MAAM,MAAM,IAAI,EAAE,CAAC,CAAC;QAChG,CAAC;QACD,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAA8B,CAAC;QAClE,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAED,WAAW,CAAC,IAA+B;QACzC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;QACjC,MAAM,UAAU,GACd,MAAM,KAAK,YAAY,IAAI,MAAM,KAAK,YAAY,IAAI,MAAM,KAAK,SAAS;YACxE,CAAC,CAAC,QAAQ;YACV,CAAC,CAAC,MAAM,KAAK,WAAW,IAAI,MAAM,KAAK,WAAW,IAAI,MAAM,KAAK,WAAW;gBAC1E,CAAC,CAAC,UAAU;gBACZ,CAAC,CAAC,SAAS,CAAC;QAClB,OAAO;YACL,EAAE,EAAE,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjE,SAAS,EAAE,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,IAAI,EAAE;YACrD,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7D,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACxD,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5E,MAAM,EAAE,UAAU;YAClB,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE;YAC9E,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,OAAO,EAAE,IAA0C;SACpD,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,45 @@
1
+ import type { ChargeInput, PaymentsDriver } from '../driver.js';
2
+ import type { InvoiceOptions, Payment } from '../types.js';
3
+ import type { InvoiceProvider } from './invoice_provider.js';
4
+ /** The invoice-resolution surface a payment driver receives (from the factory ctx). */
5
+ export interface EmitInvoiceContext {
6
+ /** Resolve an invoice provider by name; falls back to the configured default. */
7
+ invoice?: (name?: string) => InvoiceProvider;
8
+ }
9
+ export interface EmitInvoiceData {
10
+ /** The billing customer's fiscal data. */
11
+ customer: {
12
+ name?: string;
13
+ taxId: string;
14
+ email?: string;
15
+ address?: Record<string, unknown>;
16
+ };
17
+ /** Amount in the currency's smallest unit (e.g. cents). */
18
+ amount: number;
19
+ currency: string;
20
+ /** The gateway payment this invoice is attached to, when available. */
21
+ payment?: {
22
+ gatewayId: string;
23
+ provider: string;
24
+ };
25
+ }
26
+ /**
27
+ * Emit an invoice for a charge when the call asked for one. The `invoice` option on a
28
+ * charge/subscription/checkout resolves the provider by NAME, independent of the payment
29
+ * gateway:
30
+ *
31
+ * - `true` — use the default invoice provider from `config.invoice.providers`.
32
+ * - `'tecnospeed'` — use the named invoice provider (a key of `invoice.providers`).
33
+ * - `{ provider?, ... }` — named provider (or default) with these overrides.
34
+ *
35
+ * Returns `undefined` when the call did not request an invoice.
36
+ */
37
+ export declare function emitInvoice(ctx: EmitInvoiceContext, option: boolean | string | InvoiceOptions | undefined, data: EmitInvoiceData): Promise<ReturnType<InvoiceProvider['emit']> | undefined>;
38
+ /**
39
+ * The per-driver charge helper: when `input.invoice` is present, resolve the payer's
40
+ * fiscal data from `input.customer` (falling back to `card.holder`), emit through the
41
+ * configured invoice provider, and attach the result to the payment. One call replaces
42
+ * the ~15-line block that used to be copy-pasted in every driver's `charge()`.
43
+ */
44
+ export declare function emitInvoiceIfRequested(ctx: EmitInvoiceContext, input: Pick<ChargeInput, 'invoice' | 'customer' | 'card'>, payment: Payment, driver: Pick<PaymentsDriver, 'provider'>): Promise<void>;
45
+ //# sourceMappingURL=emit_invoice.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emit_invoice.d.ts","sourceRoot":"","sources":["../../../src/invoice/emit_invoice.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D,uFAAuF;AACvF,MAAM,WAAW,kBAAkB;IACjC,iFAAiF;IACjF,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,KAAK,eAAe,CAAC;CAC9C;AAED,MAAM,WAAW,eAAe;IAC9B,0CAA0C;IAC1C,QAAQ,EAAE;QACR,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACnC,CAAC;IACF,2DAA2D;IAC3D,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,uEAAuE;IACvE,OAAO,CAAC,EAAE;QACR,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,WAAW,CAC/B,GAAG,EAAE,kBAAkB,EACvB,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,cAAc,GAAG,SAAS,EACrD,IAAI,EAAE,eAAe,GACpB,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC,CA6B1D;AAED;;;;;GAKG;AACH,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,kBAAkB,EACvB,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,SAAS,GAAG,UAAU,GAAG,MAAM,CAAC,EACzD,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,UAAU,CAAC,GACvC,OAAO,CAAC,IAAI,CAAC,CA2Bf"}
@@ -0,0 +1,72 @@
1
+ import { publishInvoiceEmittedDiagnostics } from '../diagnostics.js';
2
+ /**
3
+ * Emit an invoice for a charge when the call asked for one. The `invoice` option on a
4
+ * charge/subscription/checkout resolves the provider by NAME, independent of the payment
5
+ * gateway:
6
+ *
7
+ * - `true` — use the default invoice provider from `config.invoice.providers`.
8
+ * - `'tecnospeed'` — use the named invoice provider (a key of `invoice.providers`).
9
+ * - `{ provider?, ... }` — named provider (or default) with these overrides.
10
+ *
11
+ * Returns `undefined` when the call did not request an invoice.
12
+ */
13
+ export async function emitInvoice(ctx, option, data) {
14
+ if (option === undefined || option === false)
15
+ return undefined;
16
+ const providerName = typeof option === 'string' ? option : typeof option === 'object' ? option.provider : undefined;
17
+ const provider = ctx.invoice?.(providerName);
18
+ if (!provider) {
19
+ throw new Error('[payments] invoice was requested but no invoice provider is configured. ' +
20
+ 'Add `invoice.providers` to config/payments.ts (and an `invoice.default`).');
21
+ }
22
+ const overrides = typeof option === 'object' ? option : {};
23
+ return provider.emit({
24
+ customer: {
25
+ ...data.customer,
26
+ ...(overrides.customer !== undefined ? overrides.customer : {}),
27
+ },
28
+ amount: data.amount,
29
+ currency: data.currency,
30
+ service: {
31
+ description: 'Payment',
32
+ ...(overrides.service !== undefined ? overrides.service : {}),
33
+ },
34
+ ...(overrides.tax !== undefined ? { tax: overrides.tax } : {}),
35
+ ...(data.payment !== undefined ? { payment: data.payment } : {}),
36
+ ...(overrides.metadata !== undefined ? { metadata: overrides.metadata } : {}),
37
+ });
38
+ }
39
+ /**
40
+ * The per-driver charge helper: when `input.invoice` is present, resolve the payer's
41
+ * fiscal data from `input.customer` (falling back to `card.holder`), emit through the
42
+ * configured invoice provider, and attach the result to the payment. One call replaces
43
+ * the ~15-line block that used to be copy-pasted in every driver's `charge()`.
44
+ */
45
+ export async function emitInvoiceIfRequested(ctx, input, payment, driver) {
46
+ if (input.invoice === undefined || input.invoice === false)
47
+ return;
48
+ const holder = input.card?.holder;
49
+ const taxId = input.customer?.taxId ?? holder?.cpfCnpj ?? '';
50
+ const name = input.customer?.name ?? holder?.name;
51
+ const email = input.customer?.email ?? holder?.email;
52
+ const invoice = await emitInvoice(ctx, input.invoice, {
53
+ customer: {
54
+ taxId,
55
+ ...(name !== undefined ? { name } : {}),
56
+ ...(email !== undefined ? { email } : {}),
57
+ },
58
+ amount: payment.amount.amount,
59
+ currency: payment.amount.currency,
60
+ payment: { gatewayId: payment.gatewayId, provider: driver.provider },
61
+ });
62
+ if (invoice) {
63
+ payment.invoice = invoice;
64
+ publishInvoiceEmittedDiagnostics({
65
+ gatewayId: invoice.gatewayId,
66
+ provider: invoice.provider,
67
+ ...(invoice.number !== undefined ? { number: invoice.number } : {}),
68
+ ...(invoice.hostedPdfUrl !== undefined ? { url: invoice.hostedPdfUrl } : {}),
69
+ });
70
+ }
71
+ }
72
+ //# sourceMappingURL=emit_invoice.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emit_invoice.js","sourceRoot":"","sources":["../../../src/invoice/emit_invoice.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gCAAgC,EAAE,MAAM,mBAAmB,CAAC;AA6BrE;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,GAAuB,EACvB,MAAqD,EACrD,IAAqB;IAErB,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,KAAK;QAAE,OAAO,SAAS,CAAC;IAE/D,MAAM,YAAY,GAChB,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;IACjG,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC,YAAY,CAAC,CAAC;IAC7C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CACb,0EAA0E;YACxE,2EAA2E,CAC9E,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAAG,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3D,OAAO,QAAQ,CAAC,IAAI,CAAC;QACnB,QAAQ,EAAE;YACR,GAAG,IAAI,CAAC,QAAQ;YAChB,GAAG,CAAC,SAAS,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;SAChE;QACD,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,OAAO,EAAE;YACP,WAAW,EAAE,SAAS;YACtB,GAAG,CAAC,SAAS,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;SAC9D;QACD,GAAG,CAAC,SAAS,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9D,GAAG,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChE,GAAG,CAAC,SAAS,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC9E,CAAC,CAAC;AACL,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,GAAuB,EACvB,KAAyD,EACzD,OAAgB,EAChB,MAAwC;IAExC,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,KAAK,KAAK;QAAE,OAAO;IAEnE,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC;IAClC,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,KAAK,IAAI,MAAM,EAAE,OAAO,IAAI,EAAE,CAAC;IAC7D,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,EAAE,IAAI,IAAI,MAAM,EAAE,IAAI,CAAC;IAClD,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,KAAK,IAAI,MAAM,EAAE,KAAK,CAAC;IAErD,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,EAAE;QACpD,QAAQ,EAAE;YACR,KAAK;YACL,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvC,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC1C;QACD,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM;QAC7B,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ;QACjC,OAAO,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE;KACrE,CAAC,CAAC;IACH,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC;QAC1B,gCAAgC,CAAC;YAC/B,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnE,GAAG,CAAC,OAAO,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC7E,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { InvoiceConfig } from '../define_config.js';
2
+ import type { InvoiceProvider } from './invoice_provider.js';
3
+ /** Resolves named invoice providers from config, mirroring the payment providers map. */
4
+ export declare class InvoiceManager {
5
+ #private;
6
+ constructor(providers: Map<string, InvoiceProvider>);
7
+ /** Resolve a provider by name. Falls back to the configured default when `name` is omitted. */
8
+ provider(name?: string): InvoiceProvider;
9
+ }
10
+ /** Build the invoice provider map from config. */
11
+ export declare function resolveInvoiceProviders(config: InvoiceConfig): Promise<Map<string, InvoiceProvider>>;
12
+ //# sourceMappingURL=invoice_manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invoice_manager.d.ts","sourceRoot":"","sources":["../../../src/invoice/invoice_manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D,yFAAyF;AACzF,qBAAa,cAAc;;gBAGb,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC;IAInD,+FAA+F;IAC/F,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,eAAe;CAqBzC;AAED,kDAAkD;AAClD,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAQvC"}
@@ -0,0 +1,35 @@
1
+ /** Resolves named invoice providers from config, mirroring the payment providers map. */
2
+ export class InvoiceManager {
3
+ #providers;
4
+ constructor(providers) {
5
+ this.#providers = providers;
6
+ }
7
+ /** Resolve a provider by name. Falls back to the configured default when `name` is omitted. */
8
+ provider(name) {
9
+ const resolved = name ?? this.#defaultName;
10
+ const driver = this.#providers.get(resolved);
11
+ if (!driver) {
12
+ throw new Error(`[payments] Invoice provider "${resolved}" is not configured. ` +
13
+ `Available providers: ${[...this.#providers.keys()].join(', ') || '(none)'}.`);
14
+ }
15
+ return driver;
16
+ }
17
+ get #defaultName() {
18
+ const names = [...this.#providers.keys()];
19
+ if (names.length === 0) {
20
+ throw new Error('[payments] No invoice providers configured. Add a provider to invoice.providers in config/payments.ts.');
21
+ }
22
+ return names[0];
23
+ }
24
+ }
25
+ /** Build the invoice provider map from config. */
26
+ export async function resolveInvoiceProviders(config) {
27
+ const factories = config.providers ?? {};
28
+ const ctx = { config: () => config };
29
+ const map = new Map();
30
+ for (const [name, factory] of Object.entries(factories)) {
31
+ map.set(name, await factory(ctx));
32
+ }
33
+ return map;
34
+ }
35
+ //# sourceMappingURL=invoice_manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invoice_manager.js","sourceRoot":"","sources":["../../../src/invoice/invoice_manager.ts"],"names":[],"mappings":"AAGA,yFAAyF;AACzF,MAAM,OAAO,cAAc;IACzB,UAAU,CAA+B;IAEzC,YAAY,SAAuC;QACjD,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;IAC9B,CAAC;IAED,+FAA+F;IAC/F,QAAQ,CAAC,IAAa;QACpB,MAAM,QAAQ,GAAG,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC;QAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CACb,gCAAgC,QAAQ,uBAAuB;gBAC7D,wBAAwB,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,QAAQ,GAAG,CAChF,CAAC;QACJ,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,YAAY;QACd,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;QAC1C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CACb,wGAAwG,CACzG,CAAC;QACJ,CAAC;QACD,OAAO,KAAK,CAAC,CAAC,CAAE,CAAC;IACnB,CAAC;CACF;AAED,kDAAkD;AAClD,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,MAAqB;IAErB,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC;IACzC,MAAM,GAAG,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC;IACrC,MAAM,GAAG,GAAG,IAAI,GAAG,EAA2B,CAAC;IAC/C,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QACxD,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,48 @@
1
+ import type { Invoice, InvoiceOptions } from '../types.js';
2
+ /** Context handed to invoice provider factories. */
3
+ export interface InvoiceContext {
4
+ config: () => unknown;
5
+ }
6
+ /**
7
+ * The invoice emission provider contract. Gateways that emit invoices natively and
8
+ * dedicated providers (Focus, Tecnospeed, eNotas, PlugNotas) implement this so a charge
9
+ * call with `invoice: true` can emit an invoice no matter which gateway backs the payment.
10
+ */
11
+ export interface InvoiceProvider {
12
+ readonly provider: string;
13
+ /** Emit an invoice. Returns the issued/pending invoice. */
14
+ emit(input: InvoiceEmitInput): Promise<Invoice>;
15
+ /** Look up an issued invoice by its id at the provider. */
16
+ find(invoiceId: string): Promise<Invoice | null>;
17
+ }
18
+ export interface InvoiceEmitInput {
19
+ /** The billing customer's data (name, taxId, address...). */
20
+ customer: {
21
+ name?: string;
22
+ taxId: string;
23
+ email?: string;
24
+ address?: Record<string, unknown>;
25
+ };
26
+ /** Amount in the currency's smallest unit (e.g. cents). */
27
+ amount: number;
28
+ currency: string;
29
+ /** Service details for service invoices. */
30
+ service: {
31
+ description: string;
32
+ /** Service code. */
33
+ code?: string;
34
+ /** Municipal service code. */
35
+ cityServiceCode?: string;
36
+ };
37
+ /** Tax configuration (ISS, etc.). */
38
+ tax?: Record<string, unknown>;
39
+ /** The gateway payment this invoice is attached to, when available. */
40
+ payment?: {
41
+ gatewayId: string;
42
+ provider: string;
43
+ };
44
+ /** Extra provider-specific fields. */
45
+ metadata?: Record<string, unknown>;
46
+ }
47
+ export type { Invoice, InvoiceOptions };
48
+ //# sourceMappingURL=invoice_provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invoice_provider.d.ts","sourceRoot":"","sources":["../../../src/invoice/invoice_provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE3D,oDAAoD;AACpD,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,OAAO,CAAC;CACvB;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B,2DAA2D;IAC3D,IAAI,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEhD,2DAA2D;IAC3D,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;CAClD;AAED,MAAM,WAAW,gBAAgB;IAC/B,6DAA6D;IAC7D,QAAQ,EAAE;QACR,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACnC,CAAC;IACF,2DAA2D;IAC3D,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,4CAA4C;IAC5C,OAAO,EAAE;QACP,WAAW,EAAE,MAAM,CAAC;QACpB,oBAAoB;QACpB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,8BAA8B;QAC9B,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,CAAC;IACF,qCAAqC;IACrC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,uEAAuE;IACvE,OAAO,CAAC,EAAE;QACR,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,sCAAsC;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,YAAY,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=invoice_provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invoice_provider.js","sourceRoot":"","sources":["../../../src/invoice/invoice_provider.ts"],"names":[],"mappings":""}
@@ -0,0 +1,11 @@
1
+ import type { Money } from './types.js';
2
+ /**
3
+ * Money helpers shared by the fetch-based drivers.
4
+ *
5
+ * The billing layer and the `PaymentsDriver` contract work in the currency's smallest
6
+ * unit (cents); the BR gateway APIs (Asaas, AbacatePay, Woovi) work in decimal reais.
7
+ * These two conversions are the only place that mapping lives.
8
+ */
9
+ export declare function toDecimal(amount: Money): number;
10
+ export declare function fromDecimal(value: number): Money;
11
+ //# sourceMappingURL=money.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"money.d.ts","sourceRoot":"","sources":["../../src/money.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,KAAK,GAAG,MAAM,CAE/C;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,CAEhD"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Money helpers shared by the fetch-based drivers.
3
+ *
4
+ * The billing layer and the `PaymentsDriver` contract work in the currency's smallest
5
+ * unit (cents); the BR gateway APIs (Asaas, AbacatePay, Woovi) work in decimal reais.
6
+ * These two conversions are the only place that mapping lives.
7
+ */
8
+ export function toDecimal(amount) {
9
+ return amount / 100;
10
+ }
11
+ export function fromDecimal(value) {
12
+ return Math.round(value * 100);
13
+ }
14
+ //# sourceMappingURL=money.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"money.js","sourceRoot":"","sources":["../../src/money.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,MAAM,UAAU,SAAS,CAAC,MAAa;IACrC,OAAO,MAAM,GAAG,GAAG,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC;AACjC,CAAC"}
@@ -0,0 +1,40 @@
1
+ import type { PaymentsConfig } from './define_config.js';
2
+ import type { PaymentsDriver } from './driver.js';
3
+ import type { InvoiceManager } from './invoice/invoice_manager.js';
4
+ import type { PaymentMethodName } from './types.js';
5
+ export interface PaymentsManagerOptions {
6
+ drivers: Map<string, PaymentsDriver>;
7
+ invoices?: InvoiceManager;
8
+ /** Method → provider name routing (`config.methods`). */
9
+ methods?: Partial<Record<PaymentMethodName, string>>;
10
+ /** Explicit default provider name (`config.default`). */
11
+ defaultName?: string;
12
+ }
13
+ export declare class PaymentsManager {
14
+ #private;
15
+ constructor(options: PaymentsManagerOptions);
16
+ /**
17
+ * Resolve a driver by payment method (e.g. `'pix'`), by provider name, or by the
18
+ * configured default when nothing is given.
19
+ *
20
+ * ```ts
21
+ * payments.driver() // default provider
22
+ * payments.driver('pix') // provider routed in config.methods.pix
23
+ * payments.driver('stripe') // provider by name
24
+ * ```
25
+ */
26
+ driver(methodOrName?: PaymentMethodName | string): PaymentsDriver;
27
+ /**
28
+ * Resolve an invoice provider by name (falls back to the configured default). Throws
29
+ * when no invoice provider is configured — a charge with `invoice: true` needs one.
30
+ */
31
+ invoice(name?: string): import("./define_config.js").InvoiceProvider;
32
+ /**
33
+ * Check a driver capability before delegating, so callers discover the limitation
34
+ * early (e.g. Woovi/OpenPix has no refunds) instead of at the gateway.
35
+ */
36
+ assertCapability(driver: PaymentsDriver, capability: 'refunds' | 'invoices' | 'subscriptions'): void;
37
+ }
38
+ /** Build the driver map from config, resolving every configured factory. */
39
+ export declare function resolveDrivers(config: PaymentsConfig, invoices?: InvoiceManager): Promise<Map<string, PaymentsDriver>>;
40
+ //# sourceMappingURL=payments_manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payments_manager.d.ts","sourceRoot":"","sources":["../../src/payments_manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACrC,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,yDAAyD;IACzD,OAAO,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC,CAAC;IACrD,yDAAyD;IACzD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,eAAe;;gBAMd,OAAO,EAAE,sBAAsB;IAW3C;;;;;;;;;OASG;IACH,MAAM,CAAC,YAAY,CAAC,EAAE,iBAAiB,GAAG,MAAM,GAAG,cAAc;IAqBjE;;;OAGG;IACH,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM;IASrB;;;OAGG;IACH,gBAAgB,CACd,MAAM,EAAE,cAAc,EACtB,UAAU,EAAE,SAAS,GAAG,UAAU,GAAG,eAAe,GACnD,IAAI;CA6BR;AAED,4EAA4E;AAC5E,wBAAsB,cAAc,CAClC,MAAM,EAAE,cAAc,EACtB,QAAQ,CAAC,EAAE,cAAc,GACxB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAatC"}
@@ -0,0 +1,94 @@
1
+ export class PaymentsManager {
2
+ #drivers;
3
+ #invoices;
4
+ #methods;
5
+ #defaultName;
6
+ constructor(options) {
7
+ this.#drivers = options.drivers;
8
+ this.#invoices = options.invoices;
9
+ this.#methods = options.methods ?? {};
10
+ const names = [...this.#drivers.keys()];
11
+ if (names.length === 0) {
12
+ throw new Error('[payments] No drivers configured. Add a provider to config/payments.ts.');
13
+ }
14
+ this.#defaultName = options.defaultName ?? names[0];
15
+ }
16
+ /**
17
+ * Resolve a driver by payment method (e.g. `'pix'`), by provider name, or by the
18
+ * configured default when nothing is given.
19
+ *
20
+ * ```ts
21
+ * payments.driver() // default provider
22
+ * payments.driver('pix') // provider routed in config.methods.pix
23
+ * payments.driver('stripe') // provider by name
24
+ * ```
25
+ */
26
+ driver(methodOrName) {
27
+ const { name: resolved, method } = this.#resolveName(methodOrName);
28
+ const driver = this.#drivers.get(resolved);
29
+ if (!driver) {
30
+ throw new Error(`[payments] Driver "${resolved}" is not configured. ` +
31
+ `Available drivers: ${[...this.#drivers.keys()].join(', ') || '(none)'}.`);
32
+ }
33
+ // When the call routed a payment method, make sure the provider actually supports it —
34
+ // e.g. routing credit_card to a Pix-only gateway (AbacatePay, Woovi) is a config error.
35
+ if (method !== undefined && !driver.supportedMethods.includes(method)) {
36
+ throw new Error(`[payments] Driver "${resolved}" does not support payment method "${method}". ` +
37
+ `Supported methods: ${[...driver.supportedMethods].join(', ')}. ` +
38
+ `Route "${method}" to a different provider in config.methods.`);
39
+ }
40
+ return driver;
41
+ }
42
+ /**
43
+ * Resolve an invoice provider by name (falls back to the configured default). Throws
44
+ * when no invoice provider is configured — a charge with `invoice: true` needs one.
45
+ */
46
+ invoice(name) {
47
+ if (!this.#invoices) {
48
+ throw new Error('[payments] No invoice providers configured. Add `invoice.providers` to config/payments.ts.');
49
+ }
50
+ return this.#invoices.provider(name);
51
+ }
52
+ /**
53
+ * Check a driver capability before delegating, so callers discover the limitation
54
+ * early (e.g. Woovi/OpenPix has no refunds) instead of at the gateway.
55
+ */
56
+ assertCapability(driver, capability) {
57
+ if (driver.capabilities?.[capability] === false ||
58
+ driver.capabilities?.[capability] === undefined) {
59
+ throw new Error(`[payments] Driver "${driver.provider}" does not support ${capability}. ` +
60
+ `Supported capabilities: ${Object.keys(driver.capabilities ?? {}).join(', ') || '(none)'}.`);
61
+ }
62
+ }
63
+ #resolveName(methodOrName) {
64
+ if (methodOrName === undefined)
65
+ return { name: this.#defaultName };
66
+ // If it names a configured provider, use it directly.
67
+ if (this.#drivers.has(methodOrName))
68
+ return { name: methodOrName };
69
+ // Otherwise treat it as a payment method and route via config.methods.
70
+ const method = methodOrName;
71
+ const routed = this.#methods[method];
72
+ if (routed !== undefined)
73
+ return { name: routed, method };
74
+ // Unknown method/name: throw a helpful error pointing at the routing config.
75
+ const providers = [...this.#drivers.keys()].join(', ') || '(none)';
76
+ throw new Error(`[payments] "${methodOrName}" is neither a configured provider nor a method routed in config.methods. Configured providers: ${providers}. Known methods: pix, credit_card, debit_card, boleto, undefined.`);
77
+ }
78
+ }
79
+ /** Build the driver map from config, resolving every configured factory. */
80
+ export async function resolveDrivers(config, invoices) {
81
+ const factories = config.providers ?? {};
82
+ const ctx = {
83
+ config: () => config,
84
+ // Hand drivers the invoice resolver so a charge with `invoice: true|'name'` can emit
85
+ // a fiscal note through the configured invoice provider — independent of the gateway.
86
+ ...(invoices !== undefined ? { invoice: (name) => invoices.provider(name) } : {}),
87
+ };
88
+ const map = new Map();
89
+ for (const [name, factory] of Object.entries(factories)) {
90
+ map.set(name, await factory(ctx));
91
+ }
92
+ return map;
93
+ }
94
+ //# sourceMappingURL=payments_manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payments_manager.js","sourceRoot":"","sources":["../../src/payments_manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { PaymentsManager } from '../payments_manager.js';
2
+ export declare function getPayments(): PaymentsManager;
3
+ /** Set by the provider once the manager is built. */
4
+ export declare function setPayments(manager: PaymentsManager): void;
5
+ export default getPayments;
6
+ //# sourceMappingURL=main.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../../src/services/main.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAQzD,wBAAgB,WAAW,IAAI,eAAe,CAO7C;AAED,qDAAqD;AACrD,wBAAgB,WAAW,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI,CAE1D;AAED,eAAe,WAAW,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Lazy singleton accessor for the payments manager. Set by the provider when it builds
3
+ * the manager; importing this module never triggers the app boot (media/authkit pattern).
4
+ */
5
+ let payments;
6
+ export function getPayments() {
7
+ if (!payments) {
8
+ throw new Error('[payments] PaymentsManager is not ready yet. Make sure the PaymentsProvider is registered and the app has booted.');
9
+ }
10
+ return payments;
11
+ }
12
+ /** Set by the provider once the manager is built. */
13
+ export function setPayments(manager) {
14
+ payments = manager;
15
+ }
16
+ export default getPayments;
17
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../../../src/services/main.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,IAAI,QAAqC,CAAC;AAE1C,MAAM,UAAU,WAAW;IACzB,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CACb,mHAAmH,CACpH,CAAC;IACJ,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,qDAAqD;AACrD,MAAM,UAAU,WAAW,CAAC,OAAwB;IAClD,QAAQ,GAAG,OAAO,CAAC;AACrB,CAAC;AAED,eAAe,WAAW,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { PaymentsWatcher } from './payments_watcher.js';
2
+ export type { WatcherContext } from './telescope-sdk.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/telescope/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,YAAY,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { PaymentsWatcher } from './payments_watcher.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/telescope/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,27 @@
1
+ import type { WatcherContext } from './telescope-sdk.js';
2
+ /**
3
+ * A payments-specific Telescope watcher: records a typed `payments` entry for every
4
+ * milestone `agora:payments:*` event the library emits (charges, refunds,
5
+ * subscriptions, invoice emission, webhook lifecycle), flattening the event's payload
6
+ * into structured content rather than storing the raw envelope like the generic
7
+ * diagnostics bridge does.
8
+ *
9
+ * Zero coupling: payments publishes via the structural `@adonis-agora/diagnostics`
10
+ * emit slot; this subscribes to the same `node:diagnostics_channel` channels — neither
11
+ * package is imported.
12
+ *
13
+ * De-dup: `register()` CLAIMS every recorded channel via
14
+ * {@link claimPaymentsDiagnostics} (the reference-counted
15
+ * `Symbol.for('@agora/diagnostics:claims')` registry), so the generic
16
+ * `DiagnosticsWatcher` (its `recordClaimed: false` default) skips them and no event is
17
+ * recorded twice. `dispose()` releases the claim and detaches every subscription.
18
+ */
19
+ export declare class PaymentsWatcher {
20
+ readonly type = "payments";
21
+ private readonly disposers;
22
+ /** Claim the recorded channels and start recording a typed `payments` entry per event. */
23
+ register(ctx: WatcherContext): void;
24
+ /** Release the channel claims and detach every subscription (e.g. on shutdown). */
25
+ dispose(): void;
26
+ }
27
+ //# sourceMappingURL=payments_watcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payments_watcher.d.ts","sourceRoot":"","sources":["../../../src/telescope/payments_watcher.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAkBzD;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,eAAe;IAC1B,QAAQ,CAAC,IAAI,cAAc;IAC3B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAyB;IAEnD,0FAA0F;IAC1F,QAAQ,CAAC,GAAG,EAAE,cAAc,GAAG,IAAI;IAuBnC,mFAAmF;IACnF,OAAO,IAAI,IAAI;CAGhB"}