@adonis-agora/payments 0.2.0 → 0.3.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 (319) hide show
  1. package/CHANGELOG.md +2347 -0
  2. package/dist/assets/spa/assets/index-CT5Zon6P.css +1 -0
  3. package/dist/assets/spa/assets/index-CvEbJEnq.js +41 -0
  4. package/dist/assets/spa/assets/index-CvEbJEnq.js.map +1 -0
  5. package/dist/assets/spa/index.html +20 -0
  6. package/dist/commands/main.d.ts +4 -3
  7. package/dist/commands/main.d.ts.map +1 -1
  8. package/dist/commands/main.js +9 -2
  9. package/dist/commands/main.js.map +1 -1
  10. package/dist/commands/payments_health.d.ts +31 -0
  11. package/dist/commands/payments_health.d.ts.map +1 -0
  12. package/dist/commands/payments_health.js +113 -0
  13. package/dist/commands/payments_health.js.map +1 -0
  14. package/dist/commands/payments_sync.d.ts +18 -4
  15. package/dist/commands/payments_sync.d.ts.map +1 -1
  16. package/dist/commands/payments_sync.js +136 -40
  17. package/dist/commands/payments_sync.js.map +1 -1
  18. package/dist/configure.d.ts +12 -5
  19. package/dist/configure.d.ts.map +1 -1
  20. package/dist/configure.js +18 -5
  21. package/dist/configure.js.map +1 -1
  22. package/dist/providers/dashboard_provider.d.ts +97 -0
  23. package/dist/providers/dashboard_provider.d.ts.map +1 -0
  24. package/dist/providers/dashboard_provider.js +430 -0
  25. package/dist/providers/dashboard_provider.js.map +1 -0
  26. package/dist/providers/payments_client_provider.d.ts +41 -0
  27. package/dist/providers/payments_client_provider.d.ts.map +1 -0
  28. package/dist/providers/payments_client_provider.js +95 -0
  29. package/dist/providers/payments_client_provider.js.map +1 -0
  30. package/dist/providers/payments_provider.d.ts +35 -0
  31. package/dist/providers/payments_provider.d.ts.map +1 -1
  32. package/dist/providers/payments_provider.js +250 -36
  33. package/dist/providers/payments_provider.js.map +1 -1
  34. package/dist/src/billing/billing_health.d.ts +85 -0
  35. package/dist/src/billing/billing_health.d.ts.map +1 -0
  36. package/dist/src/billing/billing_health.js +155 -0
  37. package/dist/src/billing/billing_health.js.map +1 -0
  38. package/dist/src/billing/billing_overview.d.ts +4 -3
  39. package/dist/src/billing/billing_overview.d.ts.map +1 -1
  40. package/dist/src/billing/billing_overview.js +14 -5
  41. package/dist/src/billing/billing_overview.js.map +1 -1
  42. package/dist/src/billing/billing_store.d.ts +634 -5
  43. package/dist/src/billing/billing_store.d.ts.map +1 -1
  44. package/dist/src/billing/billing_store.js +18 -1
  45. package/dist/src/billing/billing_store.js.map +1 -1
  46. package/dist/src/billing/index.d.ts +2 -1
  47. package/dist/src/billing/index.d.ts.map +1 -1
  48. package/dist/src/billing/index.js +1 -0
  49. package/dist/src/billing/index.js.map +1 -1
  50. package/dist/src/billing/list_query.d.ts +16 -0
  51. package/dist/src/billing/list_query.d.ts.map +1 -0
  52. package/dist/src/billing/list_query.js +28 -0
  53. package/dist/src/billing/list_query.js.map +1 -0
  54. package/dist/src/billing/lucid_billing_store.d.ts +122 -4
  55. package/dist/src/billing/lucid_billing_store.d.ts.map +1 -1
  56. package/dist/src/billing/lucid_billing_store.js +811 -13
  57. package/dist/src/billing/lucid_billing_store.js.map +1 -1
  58. package/dist/src/billing/mixins/index.d.ts +3 -0
  59. package/dist/src/billing/mixins/index.d.ts.map +1 -1
  60. package/dist/src/billing/mixins/index.js +3 -0
  61. package/dist/src/billing/mixins/index.js.map +1 -1
  62. package/dist/src/billing/mixins/with_audit_event.d.ts +48 -0
  63. package/dist/src/billing/mixins/with_audit_event.d.ts.map +1 -0
  64. package/dist/src/billing/mixins/with_audit_event.js +77 -0
  65. package/dist/src/billing/mixins/with_audit_event.js.map +1 -0
  66. package/dist/src/billing/mixins/with_customer.d.ts +39 -0
  67. package/dist/src/billing/mixins/with_customer.d.ts.map +1 -0
  68. package/dist/src/billing/mixins/with_customer.js +68 -0
  69. package/dist/src/billing/mixins/with_customer.js.map +1 -0
  70. package/dist/src/billing/mixins/with_dispute.d.ts +68 -0
  71. package/dist/src/billing/mixins/with_dispute.d.ts.map +1 -0
  72. package/dist/src/billing/mixins/with_dispute.js +83 -0
  73. package/dist/src/billing/mixins/with_dispute.js.map +1 -0
  74. package/dist/src/billing/mixins/with_payment.d.ts +42 -0
  75. package/dist/src/billing/mixins/with_payment.d.ts.map +1 -1
  76. package/dist/src/billing/mixins/with_payment.js +29 -3
  77. package/dist/src/billing/mixins/with_payment.js.map +1 -1
  78. package/dist/src/billing/mixins/with_subscription.d.ts +7 -0
  79. package/dist/src/billing/mixins/with_subscription.d.ts.map +1 -1
  80. package/dist/src/billing/mixins/with_subscription.js +15 -1
  81. package/dist/src/billing/mixins/with_subscription.js.map +1 -1
  82. package/dist/src/billing/mixins/with_usage_event.d.ts +7 -0
  83. package/dist/src/billing/mixins/with_usage_event.d.ts.map +1 -1
  84. package/dist/src/billing/mixins/with_usage_event.js +15 -1
  85. package/dist/src/billing/mixins/with_usage_event.js.map +1 -1
  86. package/dist/src/billing/mixins/with_webhook_event.d.ts +18 -0
  87. package/dist/src/billing/mixins/with_webhook_event.d.ts.map +1 -1
  88. package/dist/src/billing/mixins/with_webhook_event.js +18 -1
  89. package/dist/src/billing/mixins/with_webhook_event.js.map +1 -1
  90. package/dist/src/billing/resolve_dispatch.d.ts +22 -0
  91. package/dist/src/billing/resolve_dispatch.d.ts.map +1 -0
  92. package/dist/src/billing/resolve_dispatch.js +44 -0
  93. package/dist/src/billing/resolve_dispatch.js.map +1 -0
  94. package/dist/src/billing/resolve_store.d.ts +18 -0
  95. package/dist/src/billing/resolve_store.d.ts.map +1 -0
  96. package/dist/src/billing/resolve_store.js +35 -0
  97. package/dist/src/billing/resolve_store.js.map +1 -0
  98. package/dist/src/billing/schema.d.ts +108 -0
  99. package/dist/src/billing/schema.d.ts.map +1 -0
  100. package/dist/src/billing/schema.js +350 -0
  101. package/dist/src/billing/schema.js.map +1 -0
  102. package/dist/src/billing/webhook_dispatcher.d.ts +95 -16
  103. package/dist/src/billing/webhook_dispatcher.d.ts.map +1 -1
  104. package/dist/src/billing/webhook_dispatcher.js +186 -33
  105. package/dist/src/billing/webhook_dispatcher.js.map +1 -1
  106. package/dist/src/billing/webhook_events.d.ts +67 -1
  107. package/dist/src/billing/webhook_events.d.ts.map +1 -1
  108. package/dist/src/billing/webhook_events.js +15 -0
  109. package/dist/src/billing/webhook_events.js.map +1 -1
  110. package/dist/src/billing/webhook_processor.d.ts.map +1 -1
  111. package/dist/src/billing/webhook_processor.js +325 -5
  112. package/dist/src/billing/webhook_processor.js.map +1 -1
  113. package/dist/src/client/define_config.d.ts +150 -0
  114. package/dist/src/client/define_config.d.ts.map +1 -0
  115. package/dist/src/client/define_config.js +98 -0
  116. package/dist/src/client/define_config.js.map +1 -0
  117. package/dist/src/client/handlers.d.ts +71 -0
  118. package/dist/src/client/handlers.d.ts.map +1 -0
  119. package/dist/src/client/handlers.js +119 -0
  120. package/dist/src/client/handlers.js.map +1 -0
  121. package/dist/src/client/index.d.ts +16 -0
  122. package/dist/src/client/index.d.ts.map +1 -0
  123. package/dist/src/client/index.js +13 -0
  124. package/dist/src/client/index.js.map +1 -0
  125. package/dist/src/client/statuses.d.ts +38 -0
  126. package/dist/src/client/statuses.d.ts.map +1 -0
  127. package/dist/src/client/statuses.js +42 -0
  128. package/dist/src/client/statuses.js.map +1 -0
  129. package/dist/src/dashboard/actions.d.ts +143 -0
  130. package/dist/src/dashboard/actions.d.ts.map +1 -0
  131. package/dist/src/dashboard/actions.js +112 -0
  132. package/dist/src/dashboard/actions.js.map +1 -0
  133. package/dist/src/dashboard/auth.d.ts +136 -0
  134. package/dist/src/dashboard/auth.d.ts.map +1 -0
  135. package/dist/src/dashboard/auth.js +152 -0
  136. package/dist/src/dashboard/auth.js.map +1 -0
  137. package/dist/src/dashboard/define_config.d.ts +80 -0
  138. package/dist/src/dashboard/define_config.d.ts.map +1 -0
  139. package/dist/src/dashboard/define_config.js +83 -0
  140. package/dist/src/dashboard/define_config.js.map +1 -0
  141. package/dist/src/dashboard/handlers.d.ts +281 -0
  142. package/dist/src/dashboard/handlers.d.ts.map +1 -0
  143. package/dist/src/dashboard/handlers.js +960 -0
  144. package/dist/src/dashboard/handlers.js.map +1 -0
  145. package/dist/src/dashboard/index.d.ts +18 -0
  146. package/dist/src/dashboard/index.d.ts.map +1 -0
  147. package/dist/src/dashboard/index.js +14 -0
  148. package/dist/src/dashboard/index.js.map +1 -0
  149. package/dist/src/dashboard/login_page.d.ts +23 -0
  150. package/dist/src/dashboard/login_page.d.ts.map +1 -0
  151. package/dist/src/dashboard/login_page.js +170 -0
  152. package/dist/src/dashboard/login_page.js.map +1 -0
  153. package/dist/src/dashboard/period.d.ts +31 -0
  154. package/dist/src/dashboard/period.d.ts.map +1 -0
  155. package/dist/src/dashboard/period.js +44 -0
  156. package/dist/src/dashboard/period.js.map +1 -0
  157. package/dist/src/dashboard/session_cookie.d.ts +42 -0
  158. package/dist/src/dashboard/session_cookie.d.ts.map +1 -0
  159. package/dist/src/dashboard/session_cookie.js +97 -0
  160. package/dist/src/dashboard/session_cookie.js.map +1 -0
  161. package/dist/src/dashboard/spa.d.ts +24 -0
  162. package/dist/src/dashboard/spa.d.ts.map +1 -0
  163. package/dist/src/dashboard/spa.js +52 -0
  164. package/dist/src/dashboard/spa.js.map +1 -0
  165. package/dist/src/define_config.d.ts +244 -9
  166. package/dist/src/define_config.d.ts.map +1 -1
  167. package/dist/src/define_config.js +97 -1
  168. package/dist/src/define_config.js.map +1 -1
  169. package/dist/src/diagnostics.d.ts +287 -7
  170. package/dist/src/diagnostics.d.ts.map +1 -1
  171. package/dist/src/diagnostics.js +317 -1
  172. package/dist/src/diagnostics.js.map +1 -1
  173. package/dist/src/driver.d.ts +139 -5
  174. package/dist/src/driver.d.ts.map +1 -1
  175. package/dist/src/drivers/abacate.d.ts +12 -2
  176. package/dist/src/drivers/abacate.d.ts.map +1 -1
  177. package/dist/src/drivers/abacate.js +112 -19
  178. package/dist/src/drivers/abacate.js.map +1 -1
  179. package/dist/src/drivers/adyen.d.ts +164 -0
  180. package/dist/src/drivers/adyen.d.ts.map +1 -0
  181. package/dist/src/drivers/adyen.js +678 -0
  182. package/dist/src/drivers/adyen.js.map +1 -0
  183. package/dist/src/drivers/asaas.d.ts +52 -2
  184. package/dist/src/drivers/asaas.d.ts.map +1 -1
  185. package/dist/src/drivers/asaas.js +364 -29
  186. package/dist/src/drivers/asaas.js.map +1 -1
  187. package/dist/src/drivers/dodo.d.ts +135 -0
  188. package/dist/src/drivers/dodo.d.ts.map +1 -0
  189. package/dist/src/drivers/dodo.js +864 -0
  190. package/dist/src/drivers/dodo.js.map +1 -0
  191. package/dist/src/drivers/efi.d.ts +98 -0
  192. package/dist/src/drivers/efi.d.ts.map +1 -0
  193. package/dist/src/drivers/efi.js +628 -0
  194. package/dist/src/drivers/efi.js.map +1 -0
  195. package/dist/src/drivers/infinitepay.d.ts +156 -0
  196. package/dist/src/drivers/infinitepay.d.ts.map +1 -0
  197. package/dist/src/drivers/infinitepay.js +321 -0
  198. package/dist/src/drivers/infinitepay.js.map +1 -0
  199. package/dist/src/drivers/lemonsqueezy.d.ts +125 -0
  200. package/dist/src/drivers/lemonsqueezy.d.ts.map +1 -0
  201. package/dist/src/drivers/lemonsqueezy.js +632 -0
  202. package/dist/src/drivers/lemonsqueezy.js.map +1 -0
  203. package/dist/src/drivers/mercadopago.d.ts +97 -0
  204. package/dist/src/drivers/mercadopago.d.ts.map +1 -0
  205. package/dist/src/drivers/mercadopago.js +844 -0
  206. package/dist/src/drivers/mercadopago.js.map +1 -0
  207. package/dist/src/drivers/mollie.d.ts +125 -0
  208. package/dist/src/drivers/mollie.d.ts.map +1 -0
  209. package/dist/src/drivers/mollie.js +812 -0
  210. package/dist/src/drivers/mollie.js.map +1 -0
  211. package/dist/src/drivers/paddle.d.ts +148 -0
  212. package/dist/src/drivers/paddle.d.ts.map +1 -0
  213. package/dist/src/drivers/paddle.js +738 -0
  214. package/dist/src/drivers/paddle.js.map +1 -0
  215. package/dist/src/drivers/pagarme.d.ts +97 -0
  216. package/dist/src/drivers/pagarme.d.ts.map +1 -0
  217. package/dist/src/drivers/pagarme.js +829 -0
  218. package/dist/src/drivers/pagarme.js.map +1 -0
  219. package/dist/src/drivers/pagbank.d.ts +57 -0
  220. package/dist/src/drivers/pagbank.d.ts.map +1 -0
  221. package/dist/src/drivers/pagbank.js +499 -0
  222. package/dist/src/drivers/pagbank.js.map +1 -0
  223. package/dist/src/drivers/paypal.d.ts +120 -0
  224. package/dist/src/drivers/paypal.d.ts.map +1 -0
  225. package/dist/src/drivers/paypal.js +891 -0
  226. package/dist/src/drivers/paypal.js.map +1 -0
  227. package/dist/src/drivers/polar.d.ts +118 -0
  228. package/dist/src/drivers/polar.d.ts.map +1 -0
  229. package/dist/src/drivers/polar.js +604 -0
  230. package/dist/src/drivers/polar.js.map +1 -0
  231. package/dist/src/drivers/razorpay.d.ts +103 -0
  232. package/dist/src/drivers/razorpay.d.ts.map +1 -0
  233. package/dist/src/drivers/razorpay.js +867 -0
  234. package/dist/src/drivers/razorpay.js.map +1 -0
  235. package/dist/src/drivers/shared.d.ts +33 -0
  236. package/dist/src/drivers/shared.d.ts.map +1 -0
  237. package/dist/src/drivers/shared.js +37 -0
  238. package/dist/src/drivers/shared.js.map +1 -0
  239. package/dist/src/drivers/square.d.ts +133 -0
  240. package/dist/src/drivers/square.d.ts.map +1 -0
  241. package/dist/src/drivers/square.js +905 -0
  242. package/dist/src/drivers/square.js.map +1 -0
  243. package/dist/src/drivers/stripe.d.ts +40 -3
  244. package/dist/src/drivers/stripe.d.ts.map +1 -1
  245. package/dist/src/drivers/stripe.js +806 -25
  246. package/dist/src/drivers/stripe.js.map +1 -1
  247. package/dist/src/drivers/woovi.d.ts +10 -3
  248. package/dist/src/drivers/woovi.d.ts.map +1 -1
  249. package/dist/src/drivers/woovi.js +162 -29
  250. package/dist/src/drivers/woovi.js.map +1 -1
  251. package/dist/src/ensure_customer.d.ts +34 -1
  252. package/dist/src/ensure_customer.d.ts.map +1 -1
  253. package/dist/src/ensure_customer.js +29 -4
  254. package/dist/src/ensure_customer.js.map +1 -1
  255. package/dist/src/http.d.ts +37 -3
  256. package/dist/src/http.d.ts.map +1 -1
  257. package/dist/src/http.js +69 -5
  258. package/dist/src/http.js.map +1 -1
  259. package/dist/src/index.d.ts +40 -10
  260. package/dist/src/index.d.ts.map +1 -1
  261. package/dist/src/index.js +22 -4
  262. package/dist/src/index.js.map +1 -1
  263. package/dist/src/invoice/emit_invoice.d.ts.map +1 -1
  264. package/dist/src/invoice/emit_invoice.js +31 -11
  265. package/dist/src/invoice/emit_invoice.js.map +1 -1
  266. package/dist/src/money.d.ts +23 -5
  267. package/dist/src/money.d.ts.map +1 -1
  268. package/dist/src/money.js +72 -7
  269. package/dist/src/money.js.map +1 -1
  270. package/dist/src/payments_manager.d.ts +8 -1
  271. package/dist/src/payments_manager.d.ts.map +1 -1
  272. package/dist/src/payments_manager.js +168 -6
  273. package/dist/src/payments_manager.js.map +1 -1
  274. package/dist/src/services/main.d.ts +38 -0
  275. package/dist/src/services/main.d.ts.map +1 -1
  276. package/dist/src/services/main.js +130 -0
  277. package/dist/src/services/main.js.map +1 -1
  278. package/dist/src/telescope/index.d.ts +2 -0
  279. package/dist/src/telescope/index.d.ts.map +1 -1
  280. package/dist/src/telescope/index.js +1 -0
  281. package/dist/src/telescope/index.js.map +1 -1
  282. package/dist/src/telescope/payments_watcher.d.ts +10 -4
  283. package/dist/src/telescope/payments_watcher.d.ts.map +1 -1
  284. package/dist/src/telescope/payments_watcher.js +65 -13
  285. package/dist/src/telescope/payments_watcher.js.map +1 -1
  286. package/dist/src/telescope/register.d.ts +62 -0
  287. package/dist/src/telescope/register.d.ts.map +1 -0
  288. package/dist/src/telescope/register.js +48 -0
  289. package/dist/src/telescope/register.js.map +1 -0
  290. package/dist/src/testing/fake_payments.d.ts +62 -0
  291. package/dist/src/testing/fake_payments.d.ts.map +1 -0
  292. package/dist/src/testing/fake_payments.js +82 -0
  293. package/dist/src/testing/fake_payments.js.map +1 -0
  294. package/dist/src/testing/in_memory_billing_store.d.ts +151 -2
  295. package/dist/src/testing/in_memory_billing_store.d.ts.map +1 -1
  296. package/dist/src/testing/in_memory_billing_store.js +517 -4
  297. package/dist/src/testing/in_memory_billing_store.js.map +1 -1
  298. package/dist/src/testing/index.d.ts +2 -1
  299. package/dist/src/testing/index.d.ts.map +1 -1
  300. package/dist/src/testing/index.js +1 -0
  301. package/dist/src/testing/index.js.map +1 -1
  302. package/dist/src/types.d.ts +161 -5
  303. package/dist/src/types.d.ts.map +1 -1
  304. package/dist/src/types.js +30 -1
  305. package/dist/src/types.js.map +1 -1
  306. package/dist/src/webhook_handlers.d.ts +96 -2
  307. package/dist/src/webhook_handlers.d.ts.map +1 -1
  308. package/dist/src/webhook_handlers.js +91 -10
  309. package/dist/src/webhook_handlers.js.map +1 -1
  310. package/dist/src/webhook_security.d.ts +94 -3
  311. package/dist/src/webhook_security.d.ts.map +1 -1
  312. package/dist/src/webhook_security.js +173 -9
  313. package/dist/src/webhook_security.js.map +1 -1
  314. package/dist/stubs/config/payments.stub +13 -0
  315. package/dist/stubs/config/payments_client.stub +42 -0
  316. package/dist/stubs/config/payments_dashboard.stub +38 -0
  317. package/dist/stubs/database/migrations/create_billing_tables.stub +35 -77
  318. package/dist/stubs/make/webhook_handler/main.stub +29 -11
  319. package/package.json +60 -25
@@ -1,13 +1,179 @@
1
+ import { OPEN_DISPUTE_STATUSES, } from '../billing/billing_store.js';
2
+ import { clampLimit, clampOffset } from '../billing/list_query.js';
3
+ /** Is this status one that still needs an answer? Shares the constant with the Lucid store. */
4
+ function isOpenDispute(status) {
5
+ return OPEN_DISPUTE_STATUSES.includes(status);
6
+ }
7
+ /** One dispute row, normalized for reading — the same shape the Lucid store returns. */
8
+ function disputeItem(row) {
9
+ return {
10
+ id: row.id,
11
+ gatewayId: row.gatewayId,
12
+ paymentGatewayId: row.paymentGatewayId,
13
+ provider: row.provider,
14
+ status: row.status,
15
+ reason: row.reason,
16
+ amount: row.amount,
17
+ currency: row.currency,
18
+ evidenceDueBy: row.evidenceDueBy,
19
+ outcome: row.outcome,
20
+ openedAt: row.openedAt,
21
+ closedAt: row.closedAt,
22
+ createdAt: row.createdAt,
23
+ };
24
+ }
25
+ /** One audit row, normalized for reading — the same shape the Lucid store returns. */
26
+ function auditItem(row) {
27
+ return {
28
+ id: row.id,
29
+ action: row.action,
30
+ actor: row.actor,
31
+ provider: row.provider,
32
+ subjectType: row.subjectType,
33
+ subjectId: row.subjectId,
34
+ amount: row.amount,
35
+ currency: row.currency,
36
+ message: row.message,
37
+ metadata: row.metadata,
38
+ createdAt: row.createdAt,
39
+ };
40
+ }
41
+ /** One ledger row, normalized for reading. The stored payload is NEVER part of it. */
42
+ function webhookEventItem(row) {
43
+ return {
44
+ id: row.id,
45
+ gatewayEventId: row.gatewayEventId,
46
+ provider: row.provider,
47
+ type: row.type,
48
+ status: row.status,
49
+ error: row.error,
50
+ createdAt: row.createdAt,
51
+ updatedAt: row.updatedAt,
52
+ };
53
+ }
54
+ /** One customer-mapping row, normalized for reading — the same shape the Lucid store returns. */
55
+ function customerItem(row) {
56
+ return {
57
+ id: row.id,
58
+ gatewayId: row.gatewayId,
59
+ provider: row.provider,
60
+ ownerType: row.ownerType,
61
+ ownerId: row.ownerId,
62
+ email: row.email,
63
+ name: row.name,
64
+ taxId: row.taxId,
65
+ createdAt: row.createdAt,
66
+ };
67
+ }
1
68
  /**
2
69
  * In-memory {@link BillingStore} for tests — no database required. Mirrors the shape of
3
70
  * the Lucid models so the billing layer behaves identically.
4
71
  */
5
72
  export class InMemoryBillingStore {
73
+ customers = new Map();
6
74
  subscriptions = new Map();
7
75
  payments = new Map();
8
76
  webhookEvents = new Map();
9
77
  usageEvents = new Map();
78
+ /** Keyed by the DISPUTE's gateway id, mirroring the table's unique column. */
79
+ disputes = new Map();
80
+ /** Append-only, like the table — keyed by the row's own id, because nothing looks one up. */
81
+ auditEvents = new Map();
10
82
  #nextId = 1;
83
+ /** Overridable clock so a test can pin `createdAt`/`updatedAt`. Defaults to the wall clock. */
84
+ now = () => new Date();
85
+ #now() {
86
+ return this.now();
87
+ }
88
+ /**
89
+ * The `BillingCountQuery` filter, applied identically for both count/breakdown reads.
90
+ *
91
+ * A window the store silently ignored would report a healthy zero, which is the one wrong
92
+ * answer an alert must never get — so both bounds are applied here, in one place, rather
93
+ * than re-derived per method.
94
+ */
95
+ #matchesCount(row, query) {
96
+ if (query.status !== undefined && row.status !== query.status)
97
+ return false;
98
+ if (query.createdBefore !== undefined && row.createdAt >= query.createdBefore)
99
+ return false;
100
+ if (query.createdAfter !== undefined && row.createdAt < query.createdAfter)
101
+ return false;
102
+ return true;
103
+ }
104
+ /**
105
+ * Newest first: `createdAt` descending, ties broken by insertion order descending.
106
+ *
107
+ * The tie-break matters — several rows written inside the same millisecond is the normal
108
+ * case in a test, and `sort` alone would leave them in whatever order the map yields.
109
+ * `Array.prototype.sort` is stable, so reversing first and sorting after gives
110
+ * last-inserted-first within a tie. Mirrors the Lucid store's `order by created_at desc`.
111
+ */
112
+ #page(rows, query) {
113
+ const sorted = [...rows]
114
+ .reverse()
115
+ .sort((a, b) => b.createdAt.getTime() - a.createdAt.getTime());
116
+ const offset = clampOffset(query.offset);
117
+ return sorted.slice(offset, offset + clampLimit(query.limit));
118
+ }
119
+ async saveCustomer(customer) {
120
+ const existing = this.customers.get(customer.gatewayId);
121
+ const row = existing ?? {
122
+ id: String(this.#nextId++),
123
+ gatewayId: customer.gatewayId,
124
+ provider: customer.provider,
125
+ ownerType: null,
126
+ ownerId: null,
127
+ email: null,
128
+ name: null,
129
+ taxId: null,
130
+ metadata: null,
131
+ createdAt: this.#now(),
132
+ };
133
+ row.provider = customer.provider;
134
+ // Absent fields do NOT erase what is already recorded — mirrors the Lucid store, where
135
+ // a later, less-informed call must not blank the owner mapping an earlier one wrote.
136
+ if (customer.ownerType !== undefined)
137
+ row.ownerType = customer.ownerType;
138
+ if (customer.ownerId !== undefined)
139
+ row.ownerId = customer.ownerId;
140
+ if (customer.email !== undefined)
141
+ row.email = customer.email;
142
+ if (customer.name !== undefined)
143
+ row.name = customer.name;
144
+ if (customer.taxId !== undefined)
145
+ row.taxId = customer.taxId;
146
+ if (customer.metadata !== undefined)
147
+ row.metadata = customer.metadata;
148
+ this.customers.set(customer.gatewayId, row);
149
+ return row;
150
+ }
151
+ async findCustomerByGatewayId(gatewayId) {
152
+ return this.customers.get(gatewayId) ?? null;
153
+ }
154
+ async findCustomerByOwner(ownerType, ownerId, provider) {
155
+ for (const row of this.customers.values()) {
156
+ if (row.ownerType === ownerType && row.ownerId === ownerId && row.provider === provider) {
157
+ return row;
158
+ }
159
+ }
160
+ return null;
161
+ }
162
+ async listCustomers(query) {
163
+ const matching = [...this.customers.values()].filter((row) => (query.provider === undefined || row.provider === query.provider) &&
164
+ (query.ownerType === undefined || row.ownerType === query.ownerType) &&
165
+ (query.ownerId === undefined || row.ownerId === query.ownerId) &&
166
+ (query.gatewayId === undefined || row.gatewayId === query.gatewayId));
167
+ return this.#page(matching, query).map(customerItem);
168
+ }
169
+ async listCustomersByGatewayIds(gatewayIds) {
170
+ if (gatewayIds.length === 0)
171
+ return [];
172
+ const wanted = new Set(gatewayIds);
173
+ return [...this.customers.values()]
174
+ .filter((row) => wanted.has(row.gatewayId))
175
+ .map(customerItem);
176
+ }
11
177
  async saveSubscription(sub) {
12
178
  const existing = this.subscriptions.get(sub.gatewayId);
13
179
  const row = {
@@ -20,10 +186,36 @@ export class InMemoryBillingStore {
20
186
  trialEndsAt: sub.trialEndsAt ?? null,
21
187
  endsAt: sub.endsAt ?? null,
22
188
  payload: sub.payload ?? {},
189
+ // Preserved across upserts: a subscription's creation time is when it was FIRST
190
+ // recorded, not when its status last changed, or every update would reorder the list.
191
+ createdAt: existing?.createdAt ?? this.#now(),
23
192
  };
24
193
  this.subscriptions.set(sub.gatewayId, row);
25
194
  return row;
26
195
  }
196
+ async listSubscriptions(query) {
197
+ const matching = [...this.subscriptions.values()].filter((row) => (query.status === undefined || row.status === query.status) &&
198
+ (query.provider === undefined || row.provider === query.provider));
199
+ return this.#page(matching, query).map((row) => ({
200
+ id: row.id,
201
+ gatewayId: row.gatewayId,
202
+ provider: row.provider,
203
+ status: row.status,
204
+ planId: row.planId,
205
+ customerId: row.customerId ?? null,
206
+ trialEndsAt: row.trialEndsAt,
207
+ endsAt: row.endsAt,
208
+ createdAt: row.createdAt,
209
+ }));
210
+ }
211
+ async countSubscriptions(query) {
212
+ let count = 0;
213
+ for (const row of this.subscriptions.values()) {
214
+ if (this.#matchesCount(row, query))
215
+ count += 1;
216
+ }
217
+ return count;
218
+ }
27
219
  async findSubscriptionByGatewayId(gatewayId) {
28
220
  return this.subscriptions.get(gatewayId) ?? null;
29
221
  }
@@ -38,8 +230,23 @@ export class InMemoryBillingStore {
38
230
  currency: payment.currency,
39
231
  customerId: payment.customerId ?? null,
40
232
  subscriptionId: payment.subscriptionId ?? null,
41
- paidAt: payment.paidAt ?? null,
233
+ // Mirrors the Lucid store: an ABSENT reference keeps the stored one. `payment.refunded`
234
+ // and `payment.disputed` routinely carry no reference, and blanking it there would throw
235
+ // away the only key `findPaymentByExternalReference` can route on. `null` still clears.
236
+ externalReference: payment.externalReference !== undefined
237
+ ? payment.externalReference
238
+ : (existing?.externalReference ?? null),
239
+ // Mirrors the Lucid store again, and this one is about money: `payment.refunded`,
240
+ // `payment.disputed` and `payment.dispute_closed` all save WITHOUT a `paidAt`, and
241
+ // `revenue()` filters on it. Writing `undefined` through as `null` erased the only
242
+ // record of when a charge landed, so a dispute closed as WON came back as `paid` with no
243
+ // date and left every windowed revenue figure. `null` still clears it.
244
+ paidAt: payment.paidAt !== undefined ? payment.paidAt : (existing?.paidAt ?? null),
245
+ refundedAmount: payment.refundedAmount !== undefined
246
+ ? payment.refundedAmount
247
+ : (existing?.refundedAmount ?? null),
42
248
  payload: payment.payload ?? {},
249
+ createdAt: existing?.createdAt ?? this.#now(),
43
250
  };
44
251
  this.payments.set(payment.gatewayId, row);
45
252
  return row;
@@ -47,10 +254,239 @@ export class InMemoryBillingStore {
47
254
  async findPaymentByGatewayId(gatewayId) {
48
255
  return this.payments.get(gatewayId) ?? null;
49
256
  }
257
+ async findPaymentByExternalReference(reference) {
258
+ // Newest first, like the Lucid store's `order by created_at desc`: an app may reuse a
259
+ // reference across retries, and the row it means is the most recent one. Insertion order
260
+ // breaks ties — several rows inside one millisecond is the normal case in a test.
261
+ let found = null;
262
+ for (const row of this.payments.values()) {
263
+ if (row.externalReference !== reference)
264
+ continue;
265
+ if (found === null || row.createdAt >= found.createdAt)
266
+ found = row;
267
+ }
268
+ return found;
269
+ }
270
+ async listPayments(query) {
271
+ const matching = [...this.payments.values()].filter((row) => (query.status === undefined || row.status === query.status) &&
272
+ (query.provider === undefined || row.provider === query.provider) &&
273
+ (query.gatewayId === undefined || row.gatewayId === query.gatewayId) &&
274
+ (query.customerId === undefined || row.customerId === query.customerId) &&
275
+ // EXACT, like the Lucid store's `where('external_reference', ?)`. A substring match
276
+ // here would make `order-4` return `order-42` in tests and not in production.
277
+ (query.externalReference === undefined ||
278
+ row.externalReference === query.externalReference));
279
+ return this.#page(matching, query).map((row) => ({
280
+ id: row.id,
281
+ gatewayId: row.gatewayId,
282
+ provider: row.provider,
283
+ status: row.status,
284
+ amount: row.amount,
285
+ currency: row.currency,
286
+ customerId: row.customerId,
287
+ subscriptionId: row.subscriptionId,
288
+ externalReference: row.externalReference,
289
+ refundedAmount: row.refundedAmount,
290
+ paidAt: row.paidAt,
291
+ createdAt: row.createdAt,
292
+ }));
293
+ }
294
+ async countPayments(query) {
295
+ let count = 0;
296
+ for (const row of this.payments.values()) {
297
+ if (this.#matchesCount(row, query))
298
+ count += 1;
299
+ }
300
+ return count;
301
+ }
302
+ async saveDispute(dispute) {
303
+ const existing = this.disputes.get(dispute.gatewayId);
304
+ const row = existing ?? {
305
+ id: `dis_${this.#nextId++}`,
306
+ gatewayId: dispute.gatewayId,
307
+ paymentGatewayId: dispute.paymentGatewayId,
308
+ provider: dispute.provider,
309
+ status: dispute.status,
310
+ reason: null,
311
+ amount: null,
312
+ currency: null,
313
+ evidenceDueBy: null,
314
+ outcome: null,
315
+ // Stamped once, on insert, and never moved afterwards — mirrors the Lucid store, where
316
+ // re-stamping it on a later event would make every dispute look brand new.
317
+ openedAt: dispute.openedAt ?? this.#now(),
318
+ closedAt: null,
319
+ payload: {},
320
+ createdAt: this.#now(),
321
+ };
322
+ row.paymentGatewayId = dispute.paymentGatewayId;
323
+ row.provider = dispute.provider;
324
+ row.status = dispute.status;
325
+ // Absent does NOT erase — mirrors the Lucid store: the event that opens a dispute carries
326
+ // the deadline and the reason, and the one that closes it carries neither.
327
+ if (dispute.reason !== undefined)
328
+ row.reason = dispute.reason;
329
+ if (dispute.amount !== undefined)
330
+ row.amount = dispute.amount;
331
+ if (dispute.currency !== undefined)
332
+ row.currency = dispute.currency;
333
+ if (dispute.evidenceDueBy !== undefined)
334
+ row.evidenceDueBy = dispute.evidenceDueBy;
335
+ if (dispute.outcome !== undefined)
336
+ row.outcome = dispute.outcome;
337
+ if (dispute.closedAt !== undefined)
338
+ row.closedAt = dispute.closedAt;
339
+ if (existing !== undefined && existing.openedAt === null) {
340
+ row.openedAt = dispute.openedAt ?? this.#now();
341
+ }
342
+ if (dispute.payload !== undefined)
343
+ row.payload = dispute.payload;
344
+ this.disputes.set(dispute.gatewayId, row);
345
+ return row;
346
+ }
347
+ async findDisputeByGatewayId(gatewayId) {
348
+ return this.disputes.get(gatewayId) ?? null;
349
+ }
350
+ async findOpenDisputeByPayment(paymentGatewayId) {
351
+ // Newest first, like the Lucid store's `order by created_at desc`; insertion order breaks
352
+ // ties, because several rows inside one millisecond is the normal case in a test.
353
+ let found = null;
354
+ for (const row of this.disputes.values()) {
355
+ if (row.paymentGatewayId !== paymentGatewayId)
356
+ continue;
357
+ if (!isOpenDispute(row.status))
358
+ continue;
359
+ if (found === null || row.createdAt >= found.createdAt)
360
+ found = row;
361
+ }
362
+ return found;
363
+ }
364
+ async listDisputes(query) {
365
+ const matching = [...this.disputes.values()].filter((row) => (query.status === undefined || row.status === query.status) &&
366
+ (query.provider === undefined || row.provider === query.provider));
367
+ return this.#page(matching, query).map(disputeItem);
368
+ }
369
+ async countDisputes(query) {
370
+ let count = 0;
371
+ for (const row of this.disputes.values()) {
372
+ if (this.#matchesCount(row, query))
373
+ count += 1;
374
+ }
375
+ return count;
376
+ }
377
+ async listDisputesDueWithin(query) {
378
+ const matching = this.#dueWithin(query)
379
+ // Soonest first — the priority order, not the arrival order. The only list here that
380
+ // is not newest-first, and it mirrors the Lucid store's `order by evidence_due_by asc`.
381
+ .sort((a, b) => (a.evidenceDueBy?.getTime() ?? 0) - (b.evidenceDueBy?.getTime() ?? 0));
382
+ const offset = clampOffset(query.offset);
383
+ return matching.slice(offset, offset + clampLimit(query.limit)).map(disputeItem);
384
+ }
385
+ async countDisputesDueWithin(query) {
386
+ return this.#dueWithin(query).length;
387
+ }
388
+ /**
389
+ * The open disputes whose window closes by `now + withinHours`.
390
+ *
391
+ * No lower bound: a deadline that has already passed is still open and still unanswered,
392
+ * and dropping it the moment it expires would make the alert go quiet exactly when it
393
+ * became true. Rows with no deadline are excluded — nothing to be late for.
394
+ */
395
+ #dueWithin(query) {
396
+ const now = query.now ?? this.#now();
397
+ const cutoff = now.getTime() + query.withinHours * 3_600_000;
398
+ return [...this.disputes.values()].filter((row) => isOpenDispute(row.status) &&
399
+ row.evidenceDueBy !== null &&
400
+ row.evidenceDueBy.getTime() <= cutoff &&
401
+ (query.provider === undefined || row.provider === query.provider));
402
+ }
403
+ async listOpenDisputes(query) {
404
+ const matching = [...this.disputes.values()]
405
+ .filter((row) => isOpenDispute(row.status) &&
406
+ (query.provider === undefined || row.provider === query.provider))
407
+ // Oldest FIRST — mirrors the Lucid store's `order by created_at asc`. With no deadline
408
+ // to rank on, how long a dispute has gone unanswered is the only priority left.
409
+ .sort((a, b) => a.createdAt.getTime() - b.createdAt.getTime());
410
+ const offset = clampOffset(query.offset);
411
+ return matching.slice(offset, offset + clampLimit(query.limit)).map(disputeItem);
412
+ }
413
+ async countOpenDisputes(query) {
414
+ let count = 0;
415
+ for (const row of this.disputes.values()) {
416
+ if (!isOpenDispute(row.status))
417
+ continue;
418
+ if (query.provider !== undefined && row.provider !== query.provider)
419
+ continue;
420
+ count += 1;
421
+ }
422
+ return count;
423
+ }
424
+ async recordAuditEvent(event) {
425
+ const row = {
426
+ id: `audit_${this.#nextId++}`,
427
+ action: event.action,
428
+ actor: event.actor ?? null,
429
+ provider: event.provider ?? null,
430
+ subjectType: event.subjectType ?? null,
431
+ subjectId: event.subjectId ?? null,
432
+ amount: event.amount ?? null,
433
+ currency: event.currency ?? null,
434
+ message: event.message ?? null,
435
+ metadata: event.metadata ?? null,
436
+ createdAt: event.createdAt ?? this.#now(),
437
+ };
438
+ this.auditEvents.set(row.id, row);
439
+ return auditItem(row);
440
+ }
441
+ async listAuditEvents(query) {
442
+ const matching = [...this.auditEvents.values()].filter((row) => this.#matchesAudit(row, query));
443
+ return this.#page(matching, query).map(auditItem);
444
+ }
445
+ async countAuditEvents(query) {
446
+ let count = 0;
447
+ for (const row of this.auditEvents.values()) {
448
+ if (this.#matchesAudit(row, query))
449
+ count += 1;
450
+ }
451
+ return count;
452
+ }
453
+ /** One filter for the list and the count — see `#matchesCount`: a bound only one of them
454
+ * applied is how an alert learns to report a healthy zero. */
455
+ #matchesAudit(row, query) {
456
+ if (query.action !== undefined && row.action !== query.action)
457
+ return false;
458
+ if (query.actions !== undefined && !query.actions.includes(row.action))
459
+ return false;
460
+ if (query.actor !== undefined && row.actor !== query.actor)
461
+ return false;
462
+ if (query.provider !== undefined && row.provider !== query.provider)
463
+ return false;
464
+ if (query.subjectType !== undefined && row.subjectType !== query.subjectType)
465
+ return false;
466
+ if (query.subjectId !== undefined && row.subjectId !== query.subjectId)
467
+ return false;
468
+ if (query.createdBefore !== undefined && row.createdAt >= query.createdBefore)
469
+ return false;
470
+ if (query.createdAfter !== undefined && row.createdAt < query.createdAfter)
471
+ return false;
472
+ return true;
473
+ }
50
474
  async recordWebhookEvent(event) {
51
475
  const existing = this.webhookEvents.get(event.gatewayEventId);
52
- if (existing)
53
- return null;
476
+ if (existing) {
477
+ // Mirrors LucidBillingStore: a failed attempt is claimable again so the
478
+ // retry re-runs; in-flight and processed events are redeliveries.
479
+ if (existing.status !== 'failed')
480
+ return null;
481
+ existing.status = 'received';
482
+ existing.error = null;
483
+ // `payload` and `normalized` are deliberately NOT touched: the retry re-claims this row
484
+ // precisely to read back what the original delivery recorded.
485
+ existing.updatedAt = this.#now();
486
+ return existing;
487
+ }
488
+ const now = this.#now();
489
+ const normalized = event.normalized;
54
490
  const row = {
55
491
  id: `wh_${this.#nextId++}`,
56
492
  gatewayEventId: event.gatewayEventId,
@@ -58,7 +494,15 @@ export class InMemoryBillingStore {
58
494
  type: event.type,
59
495
  status: 'received',
60
496
  payload: event.payload,
497
+ // Only an object shape survives the jsonb column in the Lucid store; anything else is
498
+ // stored as `null` there, so it is `null` here too rather than a shape a test could pass
499
+ // and production could not.
500
+ normalized: typeof normalized === 'object' && normalized !== null && !Array.isArray(normalized)
501
+ ? normalized
502
+ : null,
61
503
  error: null,
504
+ createdAt: now,
505
+ updatedAt: now,
62
506
  };
63
507
  this.webhookEvents.set(event.gatewayEventId, row);
64
508
  return row;
@@ -67,6 +511,7 @@ export class InMemoryBillingStore {
67
511
  for (const row of this.webhookEvents.values()) {
68
512
  if (row.id === id) {
69
513
  row.status = 'processed';
514
+ row.updatedAt = this.#now();
70
515
  return;
71
516
  }
72
517
  }
@@ -76,10 +521,54 @@ export class InMemoryBillingStore {
76
521
  if (row.id === id) {
77
522
  row.status = 'failed';
78
523
  row.error = error;
524
+ row.updatedAt = this.#now();
79
525
  return;
80
526
  }
81
527
  }
82
528
  }
529
+ async listWebhookEvents(query) {
530
+ const matching = [...this.webhookEvents.values()].filter((row) => (query.status === undefined || row.status === query.status) &&
531
+ (query.provider === undefined || row.provider === query.provider) &&
532
+ (query.type === undefined || row.type === query.type));
533
+ return this.#page(matching, query).map(webhookEventItem);
534
+ }
535
+ async listWebhookEventsForPayment(paymentGatewayId, query = {}) {
536
+ if (paymentGatewayId === '')
537
+ return [];
538
+ // Mirrors the Lucid store's `CAST(payload AS TEXT) LIKE '%id%'`, substring semantics and
539
+ // all — including the false positives. A test that matched more precisely here than the
540
+ // database can would be testing a store nobody ships.
541
+ const matching = [...this.webhookEvents.values()].filter((row) => JSON.stringify(row.payload).includes(paymentGatewayId));
542
+ return this.#page(matching, query.limit === undefined ? {} : { limit: query.limit }).map(webhookEventItem);
543
+ }
544
+ async findWebhookEventByGatewayEventId(gatewayEventId) {
545
+ const row = this.webhookEvents.get(gatewayEventId);
546
+ if (!row)
547
+ return null;
548
+ return webhookEventItem(row);
549
+ }
550
+ async countWebhookEvents(query) {
551
+ let count = 0;
552
+ for (const row of this.webhookEvents.values()) {
553
+ if (this.#matchesCount(row, query))
554
+ count += 1;
555
+ }
556
+ return count;
557
+ }
558
+ async webhookEventBreakdown(query) {
559
+ const totals = new Map();
560
+ for (const row of this.webhookEvents.values()) {
561
+ if (!this.#matchesCount(row, query))
562
+ continue;
563
+ const key = `${row.provider}\u0000${row.type}`;
564
+ const line = totals.get(key);
565
+ if (line)
566
+ line.count += 1;
567
+ else
568
+ totals.set(key, { provider: row.provider, type: row.type, count: 1 });
569
+ }
570
+ return [...totals.values()].sort((a, b) => b.count - a.count);
571
+ }
83
572
  async recordUsage(event) {
84
573
  const row = {
85
574
  id: `usage_${this.#nextId++}`,
@@ -112,15 +601,39 @@ export class InMemoryBillingStore {
112
601
  return [...totals.entries()].map(([meter, quantity]) => ({ meter, quantity }));
113
602
  }
114
603
  async revenue(query) {
604
+ return this.#sumPaid(query, (row) => row.amount);
605
+ }
606
+ /**
607
+ * Gross minus what came back, on exactly the rows `revenue()` sums.
608
+ *
609
+ * A `null` `refundedAmount` — every row written before the column existed, and every row no
610
+ * refund has ever touched — reads as zero, mirroring the `COALESCE(refunded_amount, 0)` the
611
+ * Lucid store emits. Reading it as anything else here would make the in-memory store
612
+ * disagree with the database, which is the one thing a fake store must never do: a contract
613
+ * fixed in one implementation of two is not fixed.
614
+ */
615
+ async netRevenue(query) {
616
+ return this.#sumPaid(query, (row) => row.amount - (row.refundedAmount ?? 0));
617
+ }
618
+ /** The row selection `revenue()` and `netRevenue()` share; only the summed figure differs. */
619
+ #sumPaid(query, figure) {
115
620
  let total = 0;
116
621
  for (const row of this.payments.values()) {
117
622
  if (row.status !== 'paid')
118
623
  continue;
624
+ // A row with NO `paid_at` is in no window at all. The Lucid store emits
625
+ // `paid_at >= from AND paid_at < to`, and SQL `NULL` satisfies neither comparison — so
626
+ // counting it here would make the in-memory store report revenue the database cannot,
627
+ // and would hide the exact bug (a won dispute restored with `paid_at = NULL`) that the
628
+ // leave-alone rule in `savePayment` exists to prevent.
629
+ const windowed = query.from !== undefined || query.to !== undefined;
630
+ if (windowed && row.paidAt === null)
631
+ continue;
119
632
  if (query.from !== undefined && row.paidAt !== null && row.paidAt < query.from)
120
633
  continue;
121
634
  if (query.to !== undefined && row.paidAt !== null && row.paidAt >= query.to)
122
635
  continue;
123
- total += row.amount;
636
+ total += figure(row);
124
637
  }
125
638
  return total;
126
639
  }
@@ -1 +1 @@
1
- {"version":3,"file":"in_memory_billing_store.js","sourceRoot":"","sources":["../../../src/testing/in_memory_billing_store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"in_memory_billing_store.js","sourceRoot":"","sources":["../../../src/testing/in_memory_billing_store.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  export { FakePaymentsDriver } from './fake_payments_driver.js';
2
2
  export type { FakePaymentsDriverOptions } from './fake_payments_driver.js';
3
3
  export { InMemoryBillingStore } from './in_memory_billing_store.js';
4
- export type { InMemorySubscriptionRow, InMemoryPaymentRow, InMemoryWebhookEventRow, } from './in_memory_billing_store.js';
4
+ export type { InMemoryCustomerRow, InMemorySubscriptionRow, InMemoryPaymentRow, InMemoryWebhookEventRow, InMemoryUsageEventRow, InMemoryDisputeRow, } from './in_memory_billing_store.js';
5
5
  export { MutableClock } from './mutable_clock.js';
6
+ export { fakePayments, swapPayments, swapBillingStore, flushWebhooks, } from './fake_payments.js';
6
7
  //# sourceMappingURL=index.d.ts.map