@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.
- package/CHANGELOG.md +27 -0
- package/dist/commands/main.d.ts +16 -0
- package/dist/commands/main.d.ts.map +1 -0
- package/dist/commands/main.js +17 -0
- package/dist/commands/main.js.map +1 -0
- package/dist/commands/make_billable.d.ts +16 -0
- package/dist/commands/make_billable.d.ts.map +1 -0
- package/dist/commands/make_billable.js +30 -0
- package/dist/commands/make_billable.js.map +1 -0
- package/dist/commands/make_webhook_handler.d.ts +20 -0
- package/dist/commands/make_webhook_handler.d.ts.map +1 -0
- package/dist/commands/make_webhook_handler.js +34 -0
- package/dist/commands/make_webhook_handler.js.map +1 -0
- package/dist/commands/payments_sync.d.ts +20 -0
- package/dist/commands/payments_sync.d.ts.map +1 -0
- package/dist/commands/payments_sync.js +95 -0
- package/dist/commands/payments_sync.js.map +1 -0
- package/dist/commands/payments_webhook.d.ts +19 -0
- package/dist/commands/payments_webhook.d.ts.map +1 -0
- package/dist/commands/payments_webhook.js +123 -0
- package/dist/commands/payments_webhook.js.map +1 -0
- package/dist/configure.d.ts +12 -0
- package/dist/configure.d.ts.map +1 -0
- package/dist/configure.js +34 -0
- package/dist/configure.js.map +1 -0
- package/dist/providers/payments_provider.d.ts +15 -0
- package/dist/providers/payments_provider.d.ts.map +1 -0
- package/dist/providers/payments_provider.js +155 -0
- package/dist/providers/payments_provider.js.map +1 -0
- package/dist/src/billing/billing_overview.d.ts +26 -0
- package/dist/src/billing/billing_overview.d.ts.map +1 -0
- package/dist/src/billing/billing_overview.js +27 -0
- package/dist/src/billing/billing_overview.js.map +1 -0
- package/dist/src/billing/billing_store.d.ts +73 -0
- package/dist/src/billing/billing_store.d.ts.map +1 -0
- package/dist/src/billing/billing_store.js +2 -0
- package/dist/src/billing/billing_store.js.map +1 -0
- package/dist/src/billing/index.d.ts +8 -0
- package/dist/src/billing/index.d.ts.map +1 -0
- package/dist/src/billing/index.js +6 -0
- package/dist/src/billing/index.js.map +1 -0
- package/dist/src/billing/lucid_billing_store.d.ts +84 -0
- package/dist/src/billing/lucid_billing_store.d.ts.map +1 -0
- package/dist/src/billing/lucid_billing_store.js +143 -0
- package/dist/src/billing/lucid_billing_store.js.map +1 -0
- package/dist/src/billing/metered_bill.d.ts +60 -0
- package/dist/src/billing/metered_bill.d.ts.map +1 -0
- package/dist/src/billing/metered_bill.js +46 -0
- package/dist/src/billing/metered_bill.js.map +1 -0
- package/dist/src/billing/mixins/index.d.ts +6 -0
- package/dist/src/billing/mixins/index.d.ts.map +1 -0
- package/dist/src/billing/mixins/index.js +6 -0
- package/dist/src/billing/mixins/index.js.map +1 -0
- package/dist/src/billing/mixins/with_billable.d.ts +23 -0
- package/dist/src/billing/mixins/with_billable.d.ts.map +1 -0
- package/dist/src/billing/mixins/with_billable.js +33 -0
- package/dist/src/billing/mixins/with_billable.js.map +1 -0
- package/dist/src/billing/mixins/with_payment.d.ts +45 -0
- package/dist/src/billing/mixins/with_payment.d.ts.map +1 -0
- package/dist/src/billing/mixins/with_payment.js +94 -0
- package/dist/src/billing/mixins/with_payment.js.map +1 -0
- package/dist/src/billing/mixins/with_subscription.d.ts +50 -0
- package/dist/src/billing/mixins/with_subscription.d.ts.map +1 -0
- package/dist/src/billing/mixins/with_subscription.js +95 -0
- package/dist/src/billing/mixins/with_subscription.js.map +1 -0
- package/dist/src/billing/mixins/with_usage_event.d.ts +22 -0
- package/dist/src/billing/mixins/with_usage_event.d.ts.map +1 -0
- package/dist/src/billing/mixins/with_usage_event.js +39 -0
- package/dist/src/billing/mixins/with_usage_event.js.map +1 -0
- package/dist/src/billing/mixins/with_webhook_event.d.ts +21 -0
- package/dist/src/billing/mixins/with_webhook_event.d.ts.map +1 -0
- package/dist/src/billing/mixins/with_webhook_event.js +42 -0
- package/dist/src/billing/mixins/with_webhook_event.js.map +1 -0
- package/dist/src/billing/webhook_dispatcher.d.ts +79 -0
- package/dist/src/billing/webhook_dispatcher.d.ts.map +1 -0
- package/dist/src/billing/webhook_dispatcher.js +125 -0
- package/dist/src/billing/webhook_dispatcher.js.map +1 -0
- package/dist/src/billing/webhook_events.d.ts +49 -0
- package/dist/src/billing/webhook_events.d.ts.map +1 -0
- package/dist/src/billing/webhook_events.js +44 -0
- package/dist/src/billing/webhook_events.js.map +1 -0
- package/dist/src/billing/webhook_processor.d.ts +39 -0
- package/dist/src/billing/webhook_processor.d.ts.map +1 -0
- package/dist/src/billing/webhook_processor.js +209 -0
- package/dist/src/billing/webhook_processor.js.map +1 -0
- package/dist/src/define_config.d.ts +251 -0
- package/dist/src/define_config.d.ts.map +1 -0
- package/dist/src/define_config.js +67 -0
- package/dist/src/define_config.js.map +1 -0
- package/dist/src/diagnostics.d.ts +155 -0
- package/dist/src/diagnostics.d.ts.map +1 -0
- package/dist/src/diagnostics.js +153 -0
- package/dist/src/diagnostics.js.map +1 -0
- package/dist/src/driver.d.ts +222 -0
- package/dist/src/driver.d.ts.map +1 -0
- package/dist/src/driver.js +2 -0
- package/dist/src/driver.js.map +1 -0
- package/dist/src/drivers/abacate.d.ts +35 -0
- package/dist/src/drivers/abacate.d.ts.map +1 -0
- package/dist/src/drivers/abacate.js +381 -0
- package/dist/src/drivers/abacate.js.map +1 -0
- package/dist/src/drivers/asaas.d.ts +36 -0
- package/dist/src/drivers/asaas.d.ts.map +1 -0
- package/dist/src/drivers/asaas.js +455 -0
- package/dist/src/drivers/asaas.js.map +1 -0
- package/dist/src/drivers/stripe.d.ts +36 -0
- package/dist/src/drivers/stripe.d.ts.map +1 -0
- package/dist/src/drivers/stripe.js +392 -0
- package/dist/src/drivers/stripe.js.map +1 -0
- package/dist/src/drivers/woovi.d.ts +49 -0
- package/dist/src/drivers/woovi.d.ts.map +1 -0
- package/dist/src/drivers/woovi.js +339 -0
- package/dist/src/drivers/woovi.js.map +1 -0
- package/dist/src/ensure_customer.d.ts +23 -0
- package/dist/src/ensure_customer.d.ts.map +1 -0
- package/dist/src/ensure_customer.js +25 -0
- package/dist/src/ensure_customer.js.map +1 -0
- package/dist/src/hooks/webhook_handlers.d.ts +50 -0
- package/dist/src/hooks/webhook_handlers.d.ts.map +1 -0
- package/dist/src/hooks/webhook_handlers.js +53 -0
- package/dist/src/hooks/webhook_handlers.js.map +1 -0
- package/dist/src/http.d.ts +24 -0
- package/dist/src/http.d.ts.map +1 -0
- package/dist/src/http.js +52 -0
- package/dist/src/http.js.map +1 -0
- package/dist/src/index.d.ts +29 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +15 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/invoice/drivers/asaas.d.ts +23 -0
- package/dist/src/invoice/drivers/asaas.d.ts.map +1 -0
- package/dist/src/invoice/drivers/asaas.js +85 -0
- package/dist/src/invoice/drivers/asaas.js.map +1 -0
- package/dist/src/invoice/drivers/enotas.d.ts +23 -0
- package/dist/src/invoice/drivers/enotas.d.ts.map +1 -0
- package/dist/src/invoice/drivers/enotas.js +83 -0
- package/dist/src/invoice/drivers/enotas.js.map +1 -0
- package/dist/src/invoice/drivers/focus.d.ts +23 -0
- package/dist/src/invoice/drivers/focus.d.ts.map +1 -0
- package/dist/src/invoice/drivers/focus.js +90 -0
- package/dist/src/invoice/drivers/focus.js.map +1 -0
- package/dist/src/invoice/drivers/plugnotas.d.ts +22 -0
- package/dist/src/invoice/drivers/plugnotas.d.ts.map +1 -0
- package/dist/src/invoice/drivers/plugnotas.js +81 -0
- package/dist/src/invoice/drivers/plugnotas.js.map +1 -0
- package/dist/src/invoice/drivers/tecnospeed.d.ts +29 -0
- package/dist/src/invoice/drivers/tecnospeed.d.ts.map +1 -0
- package/dist/src/invoice/drivers/tecnospeed.js +87 -0
- package/dist/src/invoice/drivers/tecnospeed.js.map +1 -0
- package/dist/src/invoice/emit_invoice.d.ts +45 -0
- package/dist/src/invoice/emit_invoice.d.ts.map +1 -0
- package/dist/src/invoice/emit_invoice.js +72 -0
- package/dist/src/invoice/emit_invoice.js.map +1 -0
- package/dist/src/invoice/invoice_manager.d.ts +12 -0
- package/dist/src/invoice/invoice_manager.d.ts.map +1 -0
- package/dist/src/invoice/invoice_manager.js +35 -0
- package/dist/src/invoice/invoice_manager.js.map +1 -0
- package/dist/src/invoice/invoice_provider.d.ts +48 -0
- package/dist/src/invoice/invoice_provider.d.ts.map +1 -0
- package/dist/src/invoice/invoice_provider.js +2 -0
- package/dist/src/invoice/invoice_provider.js.map +1 -0
- package/dist/src/money.d.ts +11 -0
- package/dist/src/money.d.ts.map +1 -0
- package/dist/src/money.js +14 -0
- package/dist/src/money.js.map +1 -0
- package/dist/src/payments_manager.d.ts +40 -0
- package/dist/src/payments_manager.d.ts.map +1 -0
- package/dist/src/payments_manager.js +94 -0
- package/dist/src/payments_manager.js.map +1 -0
- package/dist/src/services/main.d.ts +6 -0
- package/dist/src/services/main.d.ts.map +1 -0
- package/dist/src/services/main.js +17 -0
- package/dist/src/services/main.js.map +1 -0
- package/dist/src/telescope/index.d.ts +3 -0
- package/dist/src/telescope/index.d.ts.map +1 -0
- package/dist/src/telescope/index.js +2 -0
- package/dist/src/telescope/index.js.map +1 -0
- package/dist/src/telescope/payments_watcher.d.ts +27 -0
- package/dist/src/telescope/payments_watcher.d.ts.map +1 -0
- package/dist/src/telescope/payments_watcher.js +58 -0
- package/dist/src/telescope/payments_watcher.js.map +1 -0
- package/dist/src/telescope/telescope-sdk.d.ts +21 -0
- package/dist/src/telescope/telescope-sdk.d.ts.map +1 -0
- package/dist/src/telescope/telescope-sdk.js +11 -0
- package/dist/src/telescope/telescope-sdk.js.map +1 -0
- package/dist/src/testing/fake_payments_driver.d.ts +64 -0
- package/dist/src/testing/fake_payments_driver.d.ts.map +1 -0
- package/dist/src/testing/fake_payments_driver.js +171 -0
- package/dist/src/testing/fake_payments_driver.js.map +1 -0
- package/dist/src/testing/in_memory_billing_store.d.ts +110 -0
- package/dist/src/testing/in_memory_billing_store.d.ts.map +1 -0
- package/dist/src/testing/in_memory_billing_store.js +136 -0
- package/dist/src/testing/in_memory_billing_store.js.map +1 -0
- package/dist/src/testing/index.d.ts +6 -0
- package/dist/src/testing/index.d.ts.map +1 -0
- package/dist/src/testing/index.js +4 -0
- package/dist/src/testing/index.js.map +1 -0
- package/dist/src/testing/mutable_clock.d.ts +12 -0
- package/dist/src/testing/mutable_clock.d.ts.map +1 -0
- package/dist/src/testing/mutable_clock.js +20 -0
- package/dist/src/testing/mutable_clock.js.map +1 -0
- package/dist/src/types.d.ts +178 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +9 -0
- package/dist/src/types.js.map +1 -0
- package/dist/src/webhook_handlers.d.ts +76 -0
- package/dist/src/webhook_handlers.d.ts.map +1 -0
- package/dist/src/webhook_handlers.js +128 -0
- package/dist/src/webhook_handlers.js.map +1 -0
- package/dist/src/webhook_security.d.ts +29 -0
- package/dist/src/webhook_security.d.ts.map +1 -0
- package/dist/src/webhook_security.js +53 -0
- package/dist/src/webhook_security.js.map +1 -0
- package/dist/stubs/config/payments.stub +101 -0
- package/dist/stubs/database/migrations/create_billing_tables.stub +90 -0
- package/dist/stubs/main.d.ts +9 -0
- package/dist/stubs/main.d.ts.map +1 -0
- package/dist/stubs/main.js +16 -0
- package/dist/stubs/main.js.map +1 -0
- package/dist/stubs/make/billable/main.stub +28 -0
- package/dist/stubs/make/webhook_handler/main.stub +29 -0
- package/package.json +150 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# @adonis-agora/payments
|
|
2
|
+
|
|
3
|
+
## 0.2.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [`c96f1cd`](https://github.com/DavideCarvalho/adonis-agora-payments/commit/c96f1cd6f7465053c37ff65d68932d37b13a762a) - Initial release of the payments library:
|
|
8
|
+
|
|
9
|
+
- **Multi-gateway drivers** — Stripe, AbacatePay, Asaas, Woovi (Pix Automático) with a
|
|
10
|
+
provider-agnostic `PaymentsDriver` contract, `supportedMethods` routing and capability
|
|
11
|
+
checks (refunds/invoices/subscriptions).
|
|
12
|
+
- **Method-based routing** — `config.methods` routes `pix`/`credit_card`/`boleto` to a
|
|
13
|
+
provider, with early validation of gateway support.
|
|
14
|
+
- **Invoice (NFe/NFSe) emission** — attached to the charge (`invoice: true` or
|
|
15
|
+
`invoice: 'tecnospeed'`), resolved by provider name independently of the payment
|
|
16
|
+
gateway; Focus provider built in, custom providers via factory.
|
|
17
|
+
- **Cashier-style billing** — Lucid mixins (`withBillable`, `withSubscription`),
|
|
18
|
+
migrations, and an idempotent webhook processor (ledger + shape guards) that syncs
|
|
19
|
+
payments/subscriptions; durable-backed dispatch when `@adonis-agora/durable` is
|
|
20
|
+
installed, in-process retry otherwise.
|
|
21
|
+
- **Custom providers** — exported building blocks (`httpRequest`, `toDecimal`,
|
|
22
|
+
`emitInvoiceIfRequested`) so apps can implement or extend gateways/invoice providers.
|
|
23
|
+
- **Diagnostics** — emits `agora:payments:*` events on `@adonis-agora/diagnostics`
|
|
24
|
+
(structural slot, no dependency), observable by Telescope's generic watcher.
|
|
25
|
+
- **Ace commands** — `make:billable`, `payments:webhook`, `payments:sync`.
|
|
26
|
+
- **Testing kit** — `FakePaymentsDriver`, `InMemoryBillingStore`, `MutableClock` under
|
|
27
|
+
`@adonis-agora/payments/testing`.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { ListLoader } from '@adonisjs/core/ace';
|
|
2
|
+
import MakeBillable from './make_billable.js';
|
|
3
|
+
import PaymentsSync from './payments_sync.js';
|
|
4
|
+
import PaymentsWebhook from './payments_webhook.js';
|
|
5
|
+
/**
|
|
6
|
+
* The commands barrel for `@adonis-agora/payments`. Registered in an app's `adonisrc` via
|
|
7
|
+
* `rcFile.addCommand('@adonis-agora/payments/commands')` (done by this package's
|
|
8
|
+
* `configure`). The ace kernel imports this module and treats it as a commands loader: a
|
|
9
|
+
* {@link ListLoader} over the payments commands (`make:billable`, `make:webhook-handler`,
|
|
10
|
+
* `payments:webhook`, `payments:sync`) provides their metadata and constructors.
|
|
11
|
+
*/
|
|
12
|
+
declare const loader: ListLoader<typeof MakeBillable | typeof PaymentsSync | typeof PaymentsWebhook>;
|
|
13
|
+
export declare const getMetaData: () => Promise<import("@adonisjs/core/types/ace").CommandMetaData[]>;
|
|
14
|
+
export declare const getCommand: (metaData: import("@adonisjs/core/types/ace").CommandMetaData) => Promise<typeof MakeBillable | typeof PaymentsSync | typeof PaymentsWebhook | null>;
|
|
15
|
+
export default loader;
|
|
16
|
+
//# sourceMappingURL=main.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../commands/main.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAE9C,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAC9C,OAAO,eAAe,MAAM,uBAAuB,CAAC;AAEpD;;;;;;GAMG;AACH,QAAA,MAAM,MAAM,gFAAoF,CAAC;AAEjG,eAAO,MAAM,WAAW,qEAAkC,CAAC;AAC3D,eAAO,MAAM,UAAU,sJAAiC,CAAC;AAEzD,eAAe,MAAM,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { ListLoader } from '@adonisjs/core/ace';
|
|
2
|
+
import MakeBillable from './make_billable.js';
|
|
3
|
+
import MakeWebhookHandler from './make_webhook_handler.js';
|
|
4
|
+
import PaymentsSync from './payments_sync.js';
|
|
5
|
+
import PaymentsWebhook from './payments_webhook.js';
|
|
6
|
+
/**
|
|
7
|
+
* The commands barrel for `@adonis-agora/payments`. Registered in an app's `adonisrc` via
|
|
8
|
+
* `rcFile.addCommand('@adonis-agora/payments/commands')` (done by this package's
|
|
9
|
+
* `configure`). The ace kernel imports this module and treats it as a commands loader: a
|
|
10
|
+
* {@link ListLoader} over the payments commands (`make:billable`, `make:webhook-handler`,
|
|
11
|
+
* `payments:webhook`, `payments:sync`) provides their metadata and constructors.
|
|
12
|
+
*/
|
|
13
|
+
const loader = new ListLoader([MakeBillable, MakeWebhookHandler, PaymentsWebhook, PaymentsSync]);
|
|
14
|
+
export const getMetaData = loader.getMetaData.bind(loader);
|
|
15
|
+
export const getCommand = loader.getCommand.bind(loader);
|
|
16
|
+
export default loader;
|
|
17
|
+
//# sourceMappingURL=main.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../commands/main.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAC9C,OAAO,kBAAkB,MAAM,2BAA2B,CAAC;AAC3D,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAC9C,OAAO,eAAe,MAAM,uBAAuB,CAAC;AAEpD;;;;;;GAMG;AACH,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,CAAC,YAAY,EAAE,kBAAkB,EAAE,eAAe,EAAE,YAAY,CAAC,CAAC,CAAC;AAEjG,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC3D,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAEzD,eAAe,MAAM,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { BaseCommand } from '@adonisjs/core/ace';
|
|
2
|
+
import type { CommandOptions } from '@adonisjs/core/types/ace';
|
|
3
|
+
/**
|
|
4
|
+
* `node ace make:billable <model>` — scaffold a Lucid model composed with the billing
|
|
5
|
+
* mixins (`withBillable`, `withSubscription`, `withPayment`) under `app/models/`. The
|
|
6
|
+
* generated model is the app-facing entry point to the billing layer: charge, subscribe,
|
|
7
|
+
* and manage payment methods straight off the model.
|
|
8
|
+
*/
|
|
9
|
+
export default class MakeBillable extends BaseCommand {
|
|
10
|
+
static commandName: string;
|
|
11
|
+
static description: string;
|
|
12
|
+
static options: CommandOptions;
|
|
13
|
+
name: string;
|
|
14
|
+
run(): Promise<void>;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=make_billable.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"make_billable.d.ts","sourceRoot":"","sources":["../../commands/make_billable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAQ,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAG/D;;;;;GAKG;AACH,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,WAAW;IACnD,OAAgB,WAAW,SAAmB;IAC9C,OAAgB,WAAW,SAA+D;IAC1F,OAAgB,OAAO,EAAE,cAAc,CAA+B;IAG9D,IAAI,EAAE,MAAM,CAAC;IAEN,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAOpC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import { BaseCommand, args } from '@adonisjs/core/ace';
|
|
8
|
+
import { stubsRoot } from '../stubs/main.js';
|
|
9
|
+
/**
|
|
10
|
+
* `node ace make:billable <model>` — scaffold a Lucid model composed with the billing
|
|
11
|
+
* mixins (`withBillable`, `withSubscription`, `withPayment`) under `app/models/`. The
|
|
12
|
+
* generated model is the app-facing entry point to the billing layer: charge, subscribe,
|
|
13
|
+
* and manage payment methods straight off the model.
|
|
14
|
+
*/
|
|
15
|
+
export default class MakeBillable extends BaseCommand {
|
|
16
|
+
static commandName = 'make:billable';
|
|
17
|
+
static description = 'Create a new billable Lucid model with the billing mixins';
|
|
18
|
+
static options = { allowUnknownFlags: true };
|
|
19
|
+
async run() {
|
|
20
|
+
const codemods = await this.createCodemods();
|
|
21
|
+
await codemods.makeUsingStub(stubsRoot(), 'make/billable/main.stub', {
|
|
22
|
+
flags: this.parsed.flags,
|
|
23
|
+
entity: this.app.generators.createEntity(this.name),
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
__decorate([
|
|
28
|
+
args.string({ description: 'Name of the model (e.g. user, customer)' })
|
|
29
|
+
], MakeBillable.prototype, "name", void 0);
|
|
30
|
+
//# sourceMappingURL=make_billable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"make_billable.js","sourceRoot":"","sources":["../../commands/make_billable.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAEvD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C;;;;;GAKG;AACH,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,WAAW;IACnD,MAAM,CAAU,WAAW,GAAG,eAAe,CAAC;IAC9C,MAAM,CAAU,WAAW,GAAG,2DAA2D,CAAC;IAC1F,MAAM,CAAU,OAAO,GAAmB,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC;IAK7D,KAAK,CAAC,GAAG;QAChB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC7C,MAAM,QAAQ,CAAC,aAAa,CAAC,SAAS,EAAE,EAAE,yBAAyB,EAAE;YACnE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK;YACxB,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;SACpD,CAAC,CAAC;IACL,CAAC;;AARO;IADP,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,yCAAyC,EAAE,CAAC;0CACnD"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { BaseCommand } from '@adonisjs/core/ace';
|
|
2
|
+
import type { CommandOptions } from '@adonisjs/core/types/ace';
|
|
3
|
+
/**
|
|
4
|
+
* `node ace make:webhook-handler <event>` — scaffold a webhook handler under
|
|
5
|
+
* `app/payment_handlers/`, the parallel to durable's `make:workflow` (which scaffolds
|
|
6
|
+
* `app/workflows/`). The generated class declares `static eventType` (the normalized
|
|
7
|
+
* event it listens to, e.g. `payment.succeeded`) and a `handle(event)` method, and is
|
|
8
|
+
* auto-registered on the payments provider's webhook route at boot — no manual wiring.
|
|
9
|
+
*
|
|
10
|
+
* Register the Assembler `init` hook first so the folder is codegen'd:
|
|
11
|
+
* `hooks: { init: [() => import('@adonis-agora/payments/hooks/webhook_handlers')] }`.
|
|
12
|
+
*/
|
|
13
|
+
export default class MakeWebhookHandler extends BaseCommand {
|
|
14
|
+
static commandName: string;
|
|
15
|
+
static description: string;
|
|
16
|
+
static options: CommandOptions;
|
|
17
|
+
name: string;
|
|
18
|
+
run(): Promise<void>;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=make_webhook_handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"make_webhook_handler.d.ts","sourceRoot":"","sources":["../../commands/make_webhook_handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAQ,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAG/D;;;;;;;;;GASG;AACH,MAAM,CAAC,OAAO,OAAO,kBAAmB,SAAQ,WAAW;IACzD,OAAgB,WAAW,SAA0B;IACrD,OAAgB,WAAW,SAA2D;IACtF,OAAgB,OAAO,EAAE,cAAc,CAA+B;IAG9D,IAAI,EAAE,MAAM,CAAC;IAEN,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAOpC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import { BaseCommand, args } from '@adonisjs/core/ace';
|
|
8
|
+
import { stubsRoot } from '../stubs/main.js';
|
|
9
|
+
/**
|
|
10
|
+
* `node ace make:webhook-handler <event>` — scaffold a webhook handler under
|
|
11
|
+
* `app/payment_handlers/`, the parallel to durable's `make:workflow` (which scaffolds
|
|
12
|
+
* `app/workflows/`). The generated class declares `static eventType` (the normalized
|
|
13
|
+
* event it listens to, e.g. `payment.succeeded`) and a `handle(event)` method, and is
|
|
14
|
+
* auto-registered on the payments provider's webhook route at boot — no manual wiring.
|
|
15
|
+
*
|
|
16
|
+
* Register the Assembler `init` hook first so the folder is codegen'd:
|
|
17
|
+
* `hooks: { init: [() => import('@adonis-agora/payments/hooks/webhook_handlers')] }`.
|
|
18
|
+
*/
|
|
19
|
+
export default class MakeWebhookHandler extends BaseCommand {
|
|
20
|
+
static commandName = 'make:webhook-handler';
|
|
21
|
+
static description = 'Create a new webhook handler in app/payment_handlers/';
|
|
22
|
+
static options = { allowUnknownFlags: true };
|
|
23
|
+
async run() {
|
|
24
|
+
const codemods = await this.createCodemods();
|
|
25
|
+
await codemods.makeUsingStub(stubsRoot(), 'make/webhook_handler/main.stub', {
|
|
26
|
+
flags: this.parsed.flags,
|
|
27
|
+
entity: this.app.generators.createEntity(this.name),
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
__decorate([
|
|
32
|
+
args.string({ description: 'Normalized event name (e.g. payment.succeeded)' })
|
|
33
|
+
], MakeWebhookHandler.prototype, "name", void 0);
|
|
34
|
+
//# sourceMappingURL=make_webhook_handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"make_webhook_handler.js","sourceRoot":"","sources":["../../commands/make_webhook_handler.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAEvD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C;;;;;;;;;GASG;AACH,MAAM,CAAC,OAAO,OAAO,kBAAmB,SAAQ,WAAW;IACzD,MAAM,CAAU,WAAW,GAAG,sBAAsB,CAAC;IACrD,MAAM,CAAU,WAAW,GAAG,uDAAuD,CAAC;IACtF,MAAM,CAAU,OAAO,GAAmB,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC;IAK7D,KAAK,CAAC,GAAG;QAChB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC7C,MAAM,QAAQ,CAAC,aAAa,CAAC,SAAS,EAAE,EAAE,gCAAgC,EAAE;YAC1E,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK;YACxB,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;SACpD,CAAC,CAAC;IACL,CAAC;;AARO;IADP,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,gDAAgD,EAAE,CAAC;gDAC1D"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { BaseCommand } from '@adonisjs/core/ace';
|
|
2
|
+
import type { CommandOptions } from '@adonisjs/core/types/ace';
|
|
3
|
+
/**
|
|
4
|
+
* `node ace payments:sync [--provider=stripe] [--customer=cus_123 | --all]` — reconcile
|
|
5
|
+
* local billing records with the gateway. Useful after missed webhooks or manual
|
|
6
|
+
* dashboard changes: pulls recent invoices for a customer (or every customer in
|
|
7
|
+
* `billing_customers` with `--all`) and upserts the paid ones into the local store, so
|
|
8
|
+
* the billing tables converge with the gateway.
|
|
9
|
+
*/
|
|
10
|
+
export default class PaymentsSync extends BaseCommand {
|
|
11
|
+
#private;
|
|
12
|
+
static commandName: string;
|
|
13
|
+
static description: string;
|
|
14
|
+
static options: CommandOptions;
|
|
15
|
+
provider?: string;
|
|
16
|
+
customer?: string;
|
|
17
|
+
all?: boolean;
|
|
18
|
+
run(): Promise<void>;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=payments_sync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payments_sync.d.ts","sourceRoot":"","sources":["../../commands/payments_sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAS,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAM/D;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,WAAW;;IACnD,OAAgB,WAAW,SAAmB;IAC9C,OAAgB,WAAW,SAA6D;IACxF,OAAgB,OAAO,EAAE,cAAc,CAA+B;IAG9D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAGlB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAKlB,GAAG,CAAC,EAAE,OAAO,CAAC;IAEP,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAqEpC"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import { BaseCommand, flags } from '@adonisjs/core/ace';
|
|
8
|
+
import db from '@adonisjs/lucid/services/db';
|
|
9
|
+
import { LucidBillingStore } from '../src/billing/lucid_billing_store.js';
|
|
10
|
+
import { PaymentsManager } from '../src/payments_manager.js';
|
|
11
|
+
/**
|
|
12
|
+
* `node ace payments:sync [--provider=stripe] [--customer=cus_123 | --all]` — reconcile
|
|
13
|
+
* local billing records with the gateway. Useful after missed webhooks or manual
|
|
14
|
+
* dashboard changes: pulls recent invoices for a customer (or every customer in
|
|
15
|
+
* `billing_customers` with `--all`) and upserts the paid ones into the local store, so
|
|
16
|
+
* the billing tables converge with the gateway.
|
|
17
|
+
*/
|
|
18
|
+
export default class PaymentsSync extends BaseCommand {
|
|
19
|
+
static commandName = 'payments:sync';
|
|
20
|
+
static description = 'Reconcile local billing records with a payment provider';
|
|
21
|
+
static options = { allowUnknownFlags: true };
|
|
22
|
+
async run() {
|
|
23
|
+
const config = this.app.config.get('payments', {});
|
|
24
|
+
if (config.billing?.enabled === false) {
|
|
25
|
+
this.logger.error('The billing layer is disabled (billing.enabled = false). Nothing to sync.');
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
if (!this.customer && !this.all) {
|
|
29
|
+
this.logger.error('Pass --customer=<gateway customer id> to sync one customer, or --all to sync every customer in billing_customers.');
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
const manager = await this.app.container.make(PaymentsManager);
|
|
33
|
+
const driver = manager.driver(this.provider);
|
|
34
|
+
// Some gateways (Woovi/OpenPix) have no invoice concept — fail early with a clear
|
|
35
|
+
// message instead of listing nothing.
|
|
36
|
+
manager.assertCapability(driver, 'invoices');
|
|
37
|
+
const store = new LucidBillingStore();
|
|
38
|
+
const customers = this.customer ? [this.customer] : await this.#listCustomers();
|
|
39
|
+
if (customers.length === 0) {
|
|
40
|
+
this.logger.info('No customers to sync (billing_customers is empty).');
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
let synced = 0;
|
|
44
|
+
for (const customerId of customers) {
|
|
45
|
+
const invoices = await driver.listInvoices(customerId);
|
|
46
|
+
let skipped = 0;
|
|
47
|
+
for (const invoice of invoices) {
|
|
48
|
+
// Only sync invoices that represent a settled/paid billing event.
|
|
49
|
+
if (invoice.status === 'paid') {
|
|
50
|
+
await store.savePayment({
|
|
51
|
+
gatewayId: invoice.gatewayId,
|
|
52
|
+
provider: invoice.provider,
|
|
53
|
+
status: 'paid',
|
|
54
|
+
amount: invoice.amount.amount,
|
|
55
|
+
currency: invoice.amount.currency,
|
|
56
|
+
...(invoice.customerId !== undefined ? { customerId: invoice.customerId } : {}),
|
|
57
|
+
...(invoice.subscriptionId !== undefined
|
|
58
|
+
? { subscriptionId: invoice.subscriptionId }
|
|
59
|
+
: {}),
|
|
60
|
+
paidAt: new Date(),
|
|
61
|
+
payload: invoice.payload,
|
|
62
|
+
});
|
|
63
|
+
synced += 1;
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
skipped += 1;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
this.logger.info(` ${customerId}: ${invoices.length} invoice(s), ${invoices.length - skipped} synced, ${skipped} skipped (non-paid)`);
|
|
70
|
+
}
|
|
71
|
+
this.logger.success(`Synced ${synced} paid invoice(s) across ${customers.length} customer(s).`);
|
|
72
|
+
}
|
|
73
|
+
/** Gateway customer ids from the `billing_customers` table (best-effort). */
|
|
74
|
+
async #listCustomers() {
|
|
75
|
+
try {
|
|
76
|
+
const rows = await db.from('billing_customers').select('gateway_id');
|
|
77
|
+
return rows.map((row) => row.gateway_id);
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
return [];
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
__decorate([
|
|
85
|
+
flags.string({ description: 'Provider to sync (a key of config/providers)' })
|
|
86
|
+
], PaymentsSync.prototype, "provider", void 0);
|
|
87
|
+
__decorate([
|
|
88
|
+
flags.string({ description: 'Gateway customer id to sync invoices for' })
|
|
89
|
+
], PaymentsSync.prototype, "customer", void 0);
|
|
90
|
+
__decorate([
|
|
91
|
+
flags.boolean({
|
|
92
|
+
description: 'Sync invoices for every customer in the billing_customers table',
|
|
93
|
+
})
|
|
94
|
+
], PaymentsSync.prototype, "all", void 0);
|
|
95
|
+
//# sourceMappingURL=payments_sync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payments_sync.js","sourceRoot":"","sources":["../../commands/payments_sync.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { BaseCommand } from '@adonisjs/core/ace';
|
|
2
|
+
import type { CommandOptions } from '@adonisjs/core/types/ace';
|
|
3
|
+
/**
|
|
4
|
+
* `node ace payments:webhook` — print the webhook endpoints to register in each
|
|
5
|
+
* configured payment provider's dashboard, with the events each provider needs. The
|
|
6
|
+
* gateway dashboards require manual registration (unlike a `cashier:webhook`-style API
|
|
7
|
+
* call), so this command surfaces the exact URL + event list to paste. Events are
|
|
8
|
+
* filtered by the driver's declared capabilities.
|
|
9
|
+
*/
|
|
10
|
+
export default class PaymentsWebhook extends BaseCommand {
|
|
11
|
+
#private;
|
|
12
|
+
static commandName: string;
|
|
13
|
+
static description: string;
|
|
14
|
+
static options: CommandOptions;
|
|
15
|
+
provider?: string;
|
|
16
|
+
create?: boolean;
|
|
17
|
+
run(): Promise<void>;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=payments_webhook.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payments_webhook.d.ts","sourceRoot":"","sources":["../../commands/payments_webhook.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAS,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAiD/D;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,WAAW;;IACtD,OAAgB,WAAW,SAAsB;IACjD,OAAgB,WAAW,SAAqE;IAChG,OAAgB,OAAO,EAAE,cAAc,CAA+B;IAG9D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAKlB,MAAM,CAAC,EAAE,OAAO,CAAC;IAEV,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAuEpC"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import { BaseCommand, flags } from '@adonisjs/core/ace';
|
|
8
|
+
import { PaymentsManager } from '../src/payments_manager.js';
|
|
9
|
+
/**
|
|
10
|
+
* The webhook events each gateway needs, with the capability each event depends on.
|
|
11
|
+
* Events whose capability is `false` on the resolved driver are filtered out, so a
|
|
12
|
+
* Woovi provider never advertises refund events and an AbacatePay without billing
|
|
13
|
+
* subscriptions never advertises subscription events. Keyed by the driver's own
|
|
14
|
+
* `provider` id (not the config key), so custom providers built on top of a built-in
|
|
15
|
+
* factory get the right list too.
|
|
16
|
+
*/
|
|
17
|
+
const EVENTS_BY_PROVIDER = {
|
|
18
|
+
stripe: [
|
|
19
|
+
{ event: 'checkout.session.completed' },
|
|
20
|
+
{ event: 'invoice.payment_succeeded', requires: 'invoices' },
|
|
21
|
+
{ event: 'customer.subscription.created', requires: 'subscriptions' },
|
|
22
|
+
{ event: 'customer.subscription.updated', requires: 'subscriptions' },
|
|
23
|
+
{ event: 'customer.subscription.deleted', requires: 'subscriptions' },
|
|
24
|
+
],
|
|
25
|
+
asaas: [
|
|
26
|
+
{ event: 'PAYMENT_CREATED' },
|
|
27
|
+
{ event: 'PAYMENT_RECEIVED' },
|
|
28
|
+
{ event: 'PAYMENT_OVERDUE' },
|
|
29
|
+
{ event: 'PAYMENT_REFUNDED', requires: 'refunds' },
|
|
30
|
+
{ event: 'SUBSCRIPTION_CREATED', requires: 'subscriptions' },
|
|
31
|
+
{ event: 'SUBSCRIPTION_UPDATED', requires: 'subscriptions' },
|
|
32
|
+
{ event: 'SUBSCRIPTION_DELETED', requires: 'subscriptions' },
|
|
33
|
+
],
|
|
34
|
+
abacate: [
|
|
35
|
+
{ event: 'checkout.completed' },
|
|
36
|
+
{ event: 'checkout.refunded', requires: 'refunds' },
|
|
37
|
+
{ event: 'subscription.completed', requires: 'subscriptions' },
|
|
38
|
+
{ event: 'subscription.renewed', requires: 'subscriptions' },
|
|
39
|
+
{ event: 'subscription.cancelled', requires: 'subscriptions' },
|
|
40
|
+
],
|
|
41
|
+
woovi: [
|
|
42
|
+
{ event: 'PIX_AUTOMATIC_APPROVED' },
|
|
43
|
+
{ event: 'PIX_AUTOMATIC_REJECTED' },
|
|
44
|
+
{ event: 'PIX_AUTOMATIC_COBR_COMPLETED' },
|
|
45
|
+
{ event: 'CHARGE_COMPLETED' },
|
|
46
|
+
{ event: 'CHARGE_EXPIRED' },
|
|
47
|
+
],
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* `node ace payments:webhook` — print the webhook endpoints to register in each
|
|
51
|
+
* configured payment provider's dashboard, with the events each provider needs. The
|
|
52
|
+
* gateway dashboards require manual registration (unlike a `cashier:webhook`-style API
|
|
53
|
+
* call), so this command surfaces the exact URL + event list to paste. Events are
|
|
54
|
+
* filtered by the driver's declared capabilities.
|
|
55
|
+
*/
|
|
56
|
+
export default class PaymentsWebhook extends BaseCommand {
|
|
57
|
+
static commandName = 'payments:webhook';
|
|
58
|
+
static description = 'Show the webhook endpoints to register in each payment provider';
|
|
59
|
+
static options = { allowUnknownFlags: true };
|
|
60
|
+
async run() {
|
|
61
|
+
if (this.create) {
|
|
62
|
+
await this.#createStripeEndpoint();
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
const config = this.app.config.get('payments', {});
|
|
66
|
+
const names = Object.keys(config.providers ?? {}).filter((name) => this.provider === undefined ? true : name === this.provider);
|
|
67
|
+
if (names.length === 0) {
|
|
68
|
+
this.logger.info('No payment providers configured. Add providers to config/payments.ts.');
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
const manager = await this.app.container.make(PaymentsManager);
|
|
72
|
+
for (const name of names) {
|
|
73
|
+
// Resolve the real driver so custom providers (e.g. a wrapped Asaas) report the
|
|
74
|
+
// correct event list and capabilities instead of falling back to '*'.
|
|
75
|
+
const driver = manager.driver(name);
|
|
76
|
+
const all = EVENTS_BY_PROVIDER[driver.provider] ?? [];
|
|
77
|
+
const events = all
|
|
78
|
+
.filter((entry) => entry.requires === undefined || driver.capabilities?.[entry.requires] !== false)
|
|
79
|
+
.map((entry) => entry.event);
|
|
80
|
+
this.logger.info(`\n[${name}] (${driver.provider})`);
|
|
81
|
+
this.logger.info(` URL: ${this.app.makeURL(`/payments/webhook/${name}`)}`);
|
|
82
|
+
this.logger.info(events.length > 0
|
|
83
|
+
? ` Events: ${events.join(', ')}`
|
|
84
|
+
: ' Events: * (unknown driver — register all events)');
|
|
85
|
+
}
|
|
86
|
+
this.logger.info('\nRegister these endpoints in the provider dashboard. Webhook payloads are validated by the provider driver.');
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Stripe is the one gateway whose dashboard lets you create webhook endpoints over the
|
|
90
|
+
* API — `node ace payments:webhook --create` does it for you (needs `STRIPE_KEY`; the
|
|
91
|
+
* signing secret `whsec_...` is echoed to print into `.env` as `STRIPE_WEBHOOK_SECRET`).
|
|
92
|
+
*/
|
|
93
|
+
async #createStripeEndpoint() {
|
|
94
|
+
const apiKey = process.env.STRIPE_KEY;
|
|
95
|
+
if (!apiKey) {
|
|
96
|
+
this.logger.error('Missing STRIPE_KEY — needed to create the Stripe webhook endpoint.');
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
const { default: Stripe } = await import('stripe');
|
|
100
|
+
const stripe = new Stripe(apiKey);
|
|
101
|
+
const url = this.app.makeURL('/payments/webhook/stripe').toString();
|
|
102
|
+
const events = EVENTS_BY_PROVIDER.stripe.map((entry) => entry.event);
|
|
103
|
+
this.logger.info(`Creating Stripe webhook endpoint for ${url}...`);
|
|
104
|
+
const endpoint = await stripe.webhookEndpoints.create({
|
|
105
|
+
url,
|
|
106
|
+
enabled_events: events,
|
|
107
|
+
});
|
|
108
|
+
this.logger.success(`Created Stripe webhook endpoint ${endpoint.id}`);
|
|
109
|
+
if (endpoint.secret) {
|
|
110
|
+
this.logger.info('Webhook signing secret (add to .env):');
|
|
111
|
+
this.logger.info(` STRIPE_WEBHOOK_SECRET=${endpoint.secret}`);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
__decorate([
|
|
116
|
+
flags.string({ description: 'Only show this provider (a key of config/providers)' })
|
|
117
|
+
], PaymentsWebhook.prototype, "provider", void 0);
|
|
118
|
+
__decorate([
|
|
119
|
+
flags.boolean({
|
|
120
|
+
description: 'Auto-create the Stripe webhook endpoint via the API (needs STRIPE_KEY)',
|
|
121
|
+
})
|
|
122
|
+
], PaymentsWebhook.prototype, "create", void 0);
|
|
123
|
+
//# sourceMappingURL=payments_webhook.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payments_webhook.js","sourceRoot":"","sources":["../../commands/payments_webhook.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type Configure from '@adonisjs/core/commands/configure';
|
|
2
|
+
/**
|
|
3
|
+
* `node ace configure @adonis-agora/payments` — auto-wires the package:
|
|
4
|
+
*
|
|
5
|
+
* 1. registers the payments service provider in `adonisrc.ts`;
|
|
6
|
+
* 2. publishes `config/payments.ts`;
|
|
7
|
+
* 3. publishes the Lucid migrations for the billing tables (run `node ace migration:run`;
|
|
8
|
+
* delete the file if you only use payments without the billing layer);
|
|
9
|
+
* 4. registers the env validations for the payment providers.
|
|
10
|
+
*/
|
|
11
|
+
export declare function configure(command: Configure): Promise<void>;
|
|
12
|
+
//# sourceMappingURL=configure.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configure.d.ts","sourceRoot":"","sources":["../configure.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,mCAAmC,CAAC;AAG/D;;;;;;;;GAQG;AACH,wBAAsB,SAAS,CAAC,OAAO,EAAE,SAAS,iBAyBjD"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { stubsRoot } from './stubs/main.js';
|
|
2
|
+
/**
|
|
3
|
+
* `node ace configure @adonis-agora/payments` — auto-wires the package:
|
|
4
|
+
*
|
|
5
|
+
* 1. registers the payments service provider in `adonisrc.ts`;
|
|
6
|
+
* 2. publishes `config/payments.ts`;
|
|
7
|
+
* 3. publishes the Lucid migrations for the billing tables (run `node ace migration:run`;
|
|
8
|
+
* delete the file if you only use payments without the billing layer);
|
|
9
|
+
* 4. registers the env validations for the payment providers.
|
|
10
|
+
*/
|
|
11
|
+
export async function configure(command) {
|
|
12
|
+
const codemods = await command.createCodemods();
|
|
13
|
+
// biome-ignore lint/suspicious/noExplicitAny: `createCodemods` types the callback; matching media.
|
|
14
|
+
await codemods.updateRcFile((rcFile) => {
|
|
15
|
+
rcFile.addProvider('@adonis-agora/payments/payments_provider');
|
|
16
|
+
rcFile.addCommand('@adonis-agora/payments/commands');
|
|
17
|
+
});
|
|
18
|
+
const stubs = stubsRoot();
|
|
19
|
+
await codemods.makeUsingStub(stubs, 'config/payments.stub', {});
|
|
20
|
+
await codemods.makeUsingStub(stubs, 'database/migrations/create_billing_tables.stub', {});
|
|
21
|
+
await codemods.defineEnvValidations({
|
|
22
|
+
leadingComment: 'PAYMENTS_',
|
|
23
|
+
variables: {
|
|
24
|
+
STRIPE_KEY: 'Env.schema.string.optional()',
|
|
25
|
+
STRIPE_WEBHOOK_SECRET: 'Env.schema.string.optional()',
|
|
26
|
+
ABACATE_API_KEY: 'Env.schema.string.optional()',
|
|
27
|
+
ABACATE_PUBLIC_KEY: 'Env.schema.string.optional()',
|
|
28
|
+
ASAAS_API_KEY: 'Env.schema.string.optional()',
|
|
29
|
+
WOOVI_APP_ID: 'Env.schema.string.optional()',
|
|
30
|
+
FOCUS_NFE_TOKEN: 'Env.schema.string.optional()',
|
|
31
|
+
},
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=configure.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configure.js","sourceRoot":"","sources":["../configure.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAAkB;IAChD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;IAEhD,mGAAmG;IACnG,MAAM,QAAQ,CAAC,YAAY,CAAC,CAAC,MAAW,EAAE,EAAE;QAC1C,MAAM,CAAC,WAAW,CAAC,0CAA0C,CAAC,CAAC;QAC/D,MAAM,CAAC,UAAU,CAAC,iCAAiC,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;IAC1B,MAAM,QAAQ,CAAC,aAAa,CAAC,KAAK,EAAE,sBAAsB,EAAE,EAAE,CAAC,CAAC;IAChE,MAAM,QAAQ,CAAC,aAAa,CAAC,KAAK,EAAE,gDAAgD,EAAE,EAAE,CAAC,CAAC;IAE1F,MAAM,QAAQ,CAAC,oBAAoB,CAAC;QAClC,cAAc,EAAE,WAAW;QAC3B,SAAS,EAAE;YACT,UAAU,EAAE,8BAA8B;YAC1C,qBAAqB,EAAE,8BAA8B;YACrD,eAAe,EAAE,8BAA8B;YAC/C,kBAAkB,EAAE,8BAA8B;YAClD,aAAa,EAAE,8BAA8B;YAC7C,YAAY,EAAE,8BAA8B;YAC5C,eAAe,EAAE,8BAA8B;SAChD;KACF,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { ApplicationService } from '@adonisjs/core/types';
|
|
2
|
+
/**
|
|
3
|
+
* Wires `@adonis-agora/payments` into the AdonisJS application: binds a singleton
|
|
4
|
+
* {@link PaymentsManager} built from `config/payments.ts`, wires the optional Lucid
|
|
5
|
+
* billing layer (store + webhook processor + dispatcher), and mounts the webhook route
|
|
6
|
+
* under `/payments/webhook/:provider`.
|
|
7
|
+
*/
|
|
8
|
+
export default class PaymentsProvider {
|
|
9
|
+
#private;
|
|
10
|
+
protected app: ApplicationService;
|
|
11
|
+
constructor(app: ApplicationService);
|
|
12
|
+
register(): void;
|
|
13
|
+
boot(): Promise<void>;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=payments_provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payments_provider.d.ts","sourceRoot":"","sources":["../../providers/payments_provider.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAqB,MAAM,sBAAsB,CAAC;AAkBlF;;;;;GAKG;AACH,MAAM,CAAC,OAAO,OAAO,gBAAgB;;IAGvB,SAAS,CAAC,GAAG,EAAE,kBAAkB;gBAAvB,GAAG,EAAE,kBAAkB;IAE7C,QAAQ;IAwBF,IAAI;CAmHX"}
|