@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
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export { defineConfig, payments, invoice } from './define_config.js';
|
|
2
|
+
export type { PaymentsConfig, PaymentsContext, PaymentsDriverFactory, InvoiceContext, InvoiceProviderFactory, StripeDriverConfig, AbacateDriverConfig, AsaasDriverConfig, WooviDriverConfig, FocusInvoiceConfig, ENotasInvoiceConfig, PlugNotasInvoiceConfig, AsaasInvoiceConfig, TecnospeedInvoiceConfig, } from './define_config.js';
|
|
3
|
+
export { PaymentsManager, resolveDrivers } from './payments_manager.js';
|
|
4
|
+
export type { WooviSubAccount } from './drivers/woovi.js';
|
|
5
|
+
export type { PaymentsDriver, CreateCustomerInput, UpdateCustomerInput, ChargeInput, CheckoutInput, CreateSubscriptionInput, UpdateSubscriptionInput, } from './driver.js';
|
|
6
|
+
export { InvoiceManager, resolveInvoiceProviders } from './invoice/invoice_manager.js';
|
|
7
|
+
export type { InvoiceProvider, InvoiceEmitInput } from './invoice/invoice_provider.js';
|
|
8
|
+
export { emitInvoice, emitInvoiceIfRequested } from './invoice/emit_invoice.js';
|
|
9
|
+
export type { EmitInvoiceContext, EmitInvoiceData } from './invoice/emit_invoice.js';
|
|
10
|
+
export { httpRequest, headerValue, isNotFound } from './http.js';
|
|
11
|
+
export type { HttpRequestOptions } from './http.js';
|
|
12
|
+
export { toDecimal, fromDecimal } from './money.js';
|
|
13
|
+
export { ensureCustomer } from './ensure_customer.js';
|
|
14
|
+
export { isWebhookHandlerService, resolveWebhookHandler, normalizeWebhookHandlerModule, discoverWebhookHandlers, loadWebhookHandlersFromBarrel, pickModuleExt, } from './webhook_handlers.js';
|
|
15
|
+
export type { WebhookHandlerService, WebhookHandlerModule, DiscoveredWebhookHandler, WebhookHandlersBarrel, } from './webhook_handlers.js';
|
|
16
|
+
export { PAYMENTS_DIAGNOSTIC_EVENTS, publishPayments, publishPaymentDiagnostics, publishRefundDiagnostics, publishSubscriptionDiagnostics, publishInvoiceEmittedDiagnostics, claimPaymentsDiagnostics, isPaymentsDiagnosticClaimed, tracePayments, } from './diagnostics.js';
|
|
17
|
+
export type { PaymentsDiagnosticEvent, PaymentsDiagnosticPayloads, } from './diagnostics.js';
|
|
18
|
+
export { WebhookProcessor } from './billing/webhook_processor.js';
|
|
19
|
+
export type { WebhookHandler } from './billing/webhook_processor.js';
|
|
20
|
+
export { LucidBillingStore, lucidBillingStore } from './billing/lucid_billing_store.js';
|
|
21
|
+
export type { BillingModels } from './billing/lucid_billing_store.js';
|
|
22
|
+
export type { BillingStore } from './billing/billing_store.js';
|
|
23
|
+
export { BillingUsageEvent } from './billing/mixins/with_usage_event.js';
|
|
24
|
+
export { billingOverview } from './billing/billing_overview.js';
|
|
25
|
+
export type { BillingOverview, BillingOverviewMetric } from './billing/billing_overview.js';
|
|
26
|
+
export { meteredBill, meteredBillForSubscription } from './billing/metered_bill.js';
|
|
27
|
+
export type { MeterRate, MeteredBill, MeteredBillLine } from './billing/metered_bill.js';
|
|
28
|
+
export type { Money, Currency, BillingStatus, SubscriptionStatus, PaymentMethodType, PaymentMethodName, MoneyAmount, Customer, Payment, Refund, CheckoutSession, Subscription, Invoice, InvoiceOptions, WebhookEvent, } from './types.js';
|
|
29
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AACrE,YAAY,EACV,cAAc,EACd,eAAe,EACf,qBAAqB,EACrB,cAAc,EACd,sBAAsB,EACtB,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,sBAAsB,EACtB,kBAAkB,EAClB,uBAAuB,GACxB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACxE,YAAY,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1D,YAAY,EACV,cAAc,EACd,mBAAmB,EACnB,mBAAmB,EACnB,WAAW,EACX,aAAa,EACb,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvF,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACvF,OAAO,EAAE,WAAW,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAChF,YAAY,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACrF,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACjE,YAAY,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EACL,uBAAuB,EACvB,qBAAqB,EACrB,6BAA6B,EAC7B,uBAAuB,EACvB,6BAA6B,EAC7B,aAAa,GACd,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EACV,qBAAqB,EACrB,oBAAoB,EACpB,wBAAwB,EACxB,qBAAqB,GACtB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,0BAA0B,EAC1B,eAAe,EACf,yBAAyB,EACzB,wBAAwB,EACxB,8BAA8B,EAC9B,gCAAgC,EAChC,wBAAwB,EACxB,2BAA2B,EAC3B,aAAa,GACd,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,uBAAuB,EACvB,0BAA0B,GAC3B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,YAAY,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACxF,YAAY,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACtE,YAAY,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,YAAY,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAC5F,OAAO,EAAE,WAAW,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AACpF,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACzF,YAAY,EACV,KAAK,EACL,QAAQ,EACR,aAAa,EACb,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,WAAW,EACX,QAAQ,EACR,OAAO,EACP,MAAM,EACN,eAAe,EACf,YAAY,EACZ,OAAO,EACP,cAAc,EACd,YAAY,GACb,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export { defineConfig, payments, invoice } from './define_config.js';
|
|
2
|
+
export { PaymentsManager, resolveDrivers } from './payments_manager.js';
|
|
3
|
+
export { InvoiceManager, resolveInvoiceProviders } from './invoice/invoice_manager.js';
|
|
4
|
+
export { emitInvoice, emitInvoiceIfRequested } from './invoice/emit_invoice.js';
|
|
5
|
+
export { httpRequest, headerValue, isNotFound } from './http.js';
|
|
6
|
+
export { toDecimal, fromDecimal } from './money.js';
|
|
7
|
+
export { ensureCustomer } from './ensure_customer.js';
|
|
8
|
+
export { isWebhookHandlerService, resolveWebhookHandler, normalizeWebhookHandlerModule, discoverWebhookHandlers, loadWebhookHandlersFromBarrel, pickModuleExt, } from './webhook_handlers.js';
|
|
9
|
+
export { PAYMENTS_DIAGNOSTIC_EVENTS, publishPayments, publishPaymentDiagnostics, publishRefundDiagnostics, publishSubscriptionDiagnostics, publishInvoiceEmittedDiagnostics, claimPaymentsDiagnostics, isPaymentsDiagnosticClaimed, tracePayments, } from './diagnostics.js';
|
|
10
|
+
export { WebhookProcessor } from './billing/webhook_processor.js';
|
|
11
|
+
export { LucidBillingStore, lucidBillingStore } from './billing/lucid_billing_store.js';
|
|
12
|
+
export { BillingUsageEvent } from './billing/mixins/with_usage_event.js';
|
|
13
|
+
export { billingOverview } from './billing/billing_overview.js';
|
|
14
|
+
export { meteredBill, meteredBillForSubscription } from './billing/metered_bill.js';
|
|
15
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAiBrE,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAWxE,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAEvF,OAAO,EAAE,WAAW,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAEhF,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEjE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EACL,uBAAuB,EACvB,qBAAqB,EACrB,6BAA6B,EAC7B,uBAAuB,EACvB,6BAA6B,EAC7B,aAAa,GACd,MAAM,uBAAuB,CAAC;AAO/B,OAAO,EACL,0BAA0B,EAC1B,eAAe,EACf,yBAAyB,EACzB,wBAAwB,EACxB,8BAA8B,EAC9B,gCAAgC,EAChC,wBAAwB,EACxB,2BAA2B,EAC3B,aAAa,GACd,MAAM,kBAAkB,CAAC;AAK1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAElE,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAGxF,OAAO,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAEhE,OAAO,EAAE,WAAW,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { Invoice } from '../../types.js';
|
|
2
|
+
import type { InvoiceEmitInput, InvoiceProvider } from '../invoice_provider.js';
|
|
3
|
+
export interface AsaasInvoiceConfig {
|
|
4
|
+
/** Asaas API key. Defaults to `env.get('ASAAS_API_KEY')`. */
|
|
5
|
+
apiKey?: string;
|
|
6
|
+
/** Use the Asaas sandbox environment. Defaults to `NODE_ENV !== 'production'`. */
|
|
7
|
+
sandbox?: boolean;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Asaas native NFS-e invoice provider — emits the fiscal note through Asaas's own
|
|
11
|
+
* invoice API (`/v3/invoices`), so a charge through Asaas with `invoice: true` uses the
|
|
12
|
+
* same gateway that took the payment. Uses `fetch` directly (no SDK dependency).
|
|
13
|
+
*/
|
|
14
|
+
export declare class AsaasInvoiceProvider implements InvoiceProvider {
|
|
15
|
+
#private;
|
|
16
|
+
readonly provider = "asaas";
|
|
17
|
+
constructor(_ctx: {
|
|
18
|
+
config: () => unknown;
|
|
19
|
+
}, config?: AsaasInvoiceConfig);
|
|
20
|
+
emit(input: InvoiceEmitInput): Promise<Invoice>;
|
|
21
|
+
find(invoiceId: string): Promise<Invoice | null>;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=asaas.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"asaas.d.ts","sourceRoot":"","sources":["../../../../src/invoice/drivers/asaas.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEhF,MAAM,WAAW,kBAAkB;IACjC,6DAA6D;IAC7D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kFAAkF;IAClF,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAaD;;;;GAIG;AACH,qBAAa,oBAAqB,YAAW,eAAe;;IAC1D,QAAQ,CAAC,QAAQ,WAAW;gBAKhB,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,OAAO,CAAA;KAAE,EAAE,MAAM,GAAE,kBAAuB;IAYtE,IAAI,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;IA+B/C,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;CAqCvD"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Asaas native NFS-e invoice provider — emits the fiscal note through Asaas's own
|
|
3
|
+
* invoice API (`/v3/invoices`), so a charge through Asaas with `invoice: true` uses the
|
|
4
|
+
* same gateway that took the payment. Uses `fetch` directly (no SDK dependency).
|
|
5
|
+
*/
|
|
6
|
+
export class AsaasInvoiceProvider {
|
|
7
|
+
provider = 'asaas';
|
|
8
|
+
#apiKey;
|
|
9
|
+
#baseUrl;
|
|
10
|
+
constructor(_ctx, config = {}) {
|
|
11
|
+
const apiKey = config.apiKey ?? process.env.ASAAS_API_KEY;
|
|
12
|
+
if (!apiKey) {
|
|
13
|
+
throw new Error('[payments] Asaas invoice provider requires an API key. Set `ASAAS_API_KEY` env or pass `apiKey` to `invoice.asaas()`.');
|
|
14
|
+
}
|
|
15
|
+
const sandbox = config.sandbox ?? process.env.NODE_ENV !== 'production';
|
|
16
|
+
this.#baseUrl = sandbox ? 'https://api-sandbox.asaas.com/v3' : 'https://api.asaas.com/v3';
|
|
17
|
+
this.#apiKey = apiKey;
|
|
18
|
+
}
|
|
19
|
+
async emit(input) {
|
|
20
|
+
const body = {
|
|
21
|
+
customer: input.customer.taxId.replace(/\D/g, ''),
|
|
22
|
+
value: input.amount / 100,
|
|
23
|
+
serviceDescription: input.service.description,
|
|
24
|
+
...(input.service.code !== undefined ? { serviceCode: input.service.code } : {}),
|
|
25
|
+
...(input.service.cityServiceCode !== undefined
|
|
26
|
+
? { municipalServiceCode: input.service.cityServiceCode }
|
|
27
|
+
: {}),
|
|
28
|
+
...(input.customer.name !== undefined ? { description: input.customer.name } : {}),
|
|
29
|
+
...(input.customer.email !== undefined ? { notes: input.customer.email } : {}),
|
|
30
|
+
...(input.tax !== undefined ? { taxes: input.tax } : {}),
|
|
31
|
+
...(input.metadata !== undefined ? { observations: JSON.stringify(input.metadata) } : {}),
|
|
32
|
+
};
|
|
33
|
+
const response = await fetch(`${this.#baseUrl}/invoices`, {
|
|
34
|
+
method: 'POST',
|
|
35
|
+
headers: {
|
|
36
|
+
access_token: this.#apiKey,
|
|
37
|
+
'Content-Type': 'application/json',
|
|
38
|
+
},
|
|
39
|
+
body: JSON.stringify(body),
|
|
40
|
+
});
|
|
41
|
+
if (!response.ok) {
|
|
42
|
+
const text = await response.text();
|
|
43
|
+
throw new Error(`[payments] Asaas invoice request failed (${response.status}): ${text}`);
|
|
44
|
+
}
|
|
45
|
+
const data = (await response.json());
|
|
46
|
+
return this.#mapInvoice(data);
|
|
47
|
+
}
|
|
48
|
+
async find(invoiceId) {
|
|
49
|
+
const response = await fetch(`${this.#baseUrl}/invoices/${encodeURIComponent(invoiceId)}`, {
|
|
50
|
+
headers: { access_token: this.#apiKey },
|
|
51
|
+
});
|
|
52
|
+
if (response.status === 404)
|
|
53
|
+
return null;
|
|
54
|
+
if (!response.ok) {
|
|
55
|
+
const text = await response.text();
|
|
56
|
+
throw new Error(`[payments] Asaas invoice request failed (${response.status}): ${text}`);
|
|
57
|
+
}
|
|
58
|
+
const data = (await response.json());
|
|
59
|
+
return this.#mapInvoice(data);
|
|
60
|
+
}
|
|
61
|
+
#mapInvoice(data) {
|
|
62
|
+
const status = data.status ?? 'PENDING';
|
|
63
|
+
const normalized = status === 'AUTHORIZED' || status === 'PAID'
|
|
64
|
+
? 'issued'
|
|
65
|
+
: status === 'CANCELED' || status === 'REJECTED'
|
|
66
|
+
? 'canceled'
|
|
67
|
+
: 'pending';
|
|
68
|
+
return {
|
|
69
|
+
id: data.id,
|
|
70
|
+
gatewayId: data.id,
|
|
71
|
+
provider: this.provider,
|
|
72
|
+
...(data.nfseNumber !== undefined ? { number: data.nfseNumber } : {}),
|
|
73
|
+
...(data.nfseAccessKey !== undefined ? { key: data.nfseAccessKey } : {}),
|
|
74
|
+
...(data.invoiceUrl !== undefined
|
|
75
|
+
? { url: data.invoiceUrl, hostedPdfUrl: data.invoiceUrl }
|
|
76
|
+
: {}),
|
|
77
|
+
status: normalized,
|
|
78
|
+
...(data.pdfUrl !== undefined ? { hostedPdfUrl: data.pdfUrl } : {}),
|
|
79
|
+
amount: { amount: Math.round(Number(data.value ?? 0) * 100), currency: 'brl' },
|
|
80
|
+
createdAt: new Date().toISOString(),
|
|
81
|
+
payload: data,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=asaas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"asaas.js","sourceRoot":"","sources":["../../../../src/invoice/drivers/asaas.ts"],"names":[],"mappings":"AAqBA;;;;GAIG;AACH,MAAM,OAAO,oBAAoB;IACtB,QAAQ,GAAG,OAAO,CAAC;IAE5B,OAAO,CAAS;IAChB,QAAQ,CAAS;IAEjB,YAAY,IAA+B,EAAE,SAA6B,EAAE;QAC1E,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;QAC1D,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CACb,uHAAuH,CACxH,CAAC;QACJ,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,CAAC;QACxE,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,kCAAkC,CAAC,CAAC,CAAC,0BAA0B,CAAC;QAC1F,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,KAAuB;QAChC,MAAM,IAAI,GAA4B;YACpC,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;YACjD,KAAK,EAAE,KAAK,CAAC,MAAM,GAAG,GAAG;YACzB,kBAAkB,EAAE,KAAK,CAAC,OAAO,CAAC,WAAW;YAC7C,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAChF,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,KAAK,SAAS;gBAC7C,CAAC,CAAC,EAAE,oBAAoB,EAAE,KAAK,CAAC,OAAO,CAAC,eAAe,EAAE;gBACzD,CAAC,CAAC,EAAE,CAAC;YACP,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAClF,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;YAC9E,GAAG,CAAC,KAAK,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACxD,GAAG,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC1F,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,QAAQ,WAAW,EAAE;YACxD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,YAAY,EAAE,IAAI,CAAC,OAAO;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,4CAA4C,QAAQ,CAAC,MAAM,MAAM,IAAI,EAAE,CAAC,CAAC;QAC3F,CAAC;QACD,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAyB,CAAC;QAC7D,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,aAAa,kBAAkB,CAAC,SAAS,CAAC,EAAE,EAAE;YACzF,OAAO,EAAE,EAAE,YAAY,EAAE,IAAI,CAAC,OAAO,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,4CAA4C,QAAQ,CAAC,MAAM,MAAM,IAAI,EAAE,CAAC,CAAC;QAC3F,CAAC;QACD,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAyB,CAAC;QAC7D,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAED,WAAW,CAAC,IAA0B;QACpC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,SAAS,CAAC;QACxC,MAAM,UAAU,GACd,MAAM,KAAK,YAAY,IAAI,MAAM,KAAK,MAAM;YAC1C,CAAC,CAAC,QAAQ;YACV,CAAC,CAAC,MAAM,KAAK,UAAU,IAAI,MAAM,KAAK,UAAU;gBAC9C,CAAC,CAAC,UAAU;gBACZ,CAAC,CAAC,SAAS,CAAC;QAClB,OAAO;YACL,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,SAAS,EAAE,IAAI,CAAC,EAAE;YAClB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,GAAG,CAAC,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACrE,GAAG,CAAC,IAAI,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACxE,GAAG,CAAC,IAAI,CAAC,UAAU,KAAK,SAAS;gBAC/B,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,UAAU,EAAE,YAAY,EAAE,IAAI,CAAC,UAAU,EAAE;gBACzD,CAAC,CAAC,EAAE,CAAC;YACP,MAAM,EAAE,UAAU;YAClB,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnE,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,23 @@
|
|
|
1
|
+
import type { Invoice } from '../../types.js';
|
|
2
|
+
import type { InvoiceEmitInput, InvoiceProvider } from '../invoice_provider.js';
|
|
3
|
+
export interface ENotasInvoiceConfig {
|
|
4
|
+
/** eNotas API key. Defaults to `env.get('ENOTAS_API_KEY')`. */
|
|
5
|
+
apiKey?: string;
|
|
6
|
+
/** eNotas API URL. Defaults to the production endpoint. */
|
|
7
|
+
baseUrl?: string;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* eNotas invoice provider — REST API for NFS-e/NF-e across Brazilian municipalities.
|
|
11
|
+
* Uses `fetch` directly (no SDK dependency). Exact field names follow the eNotas API;
|
|
12
|
+
* if a municipality/plan variant differs, extend this driver (see Custom providers).
|
|
13
|
+
*/
|
|
14
|
+
export declare class ENotasInvoiceProvider implements InvoiceProvider {
|
|
15
|
+
#private;
|
|
16
|
+
readonly provider = "enotas";
|
|
17
|
+
constructor(_ctx: {
|
|
18
|
+
config: () => unknown;
|
|
19
|
+
}, config?: ENotasInvoiceConfig);
|
|
20
|
+
emit(input: InvoiceEmitInput): Promise<Invoice>;
|
|
21
|
+
find(invoiceId: string): Promise<Invoice | null>;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=enotas.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enotas.d.ts","sourceRoot":"","sources":["../../../../src/invoice/drivers/enotas.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEhF,MAAM,WAAW,mBAAmB;IAClC,+DAA+D;IAC/D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2DAA2D;IAC3D,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAYD;;;;GAIG;AACH,qBAAa,qBAAsB,YAAW,eAAe;;IAC3D,QAAQ,CAAC,QAAQ,YAAY;gBAKjB,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,OAAO,CAAA;KAAE,EAAE,MAAM,GAAE,mBAAwB;IAWvE,IAAI,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;IAiC/C,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;CAkCvD"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* eNotas invoice provider — REST API for NFS-e/NF-e across Brazilian municipalities.
|
|
3
|
+
* Uses `fetch` directly (no SDK dependency). Exact field names follow the eNotas API;
|
|
4
|
+
* if a municipality/plan variant differs, extend this driver (see Custom providers).
|
|
5
|
+
*/
|
|
6
|
+
export class ENotasInvoiceProvider {
|
|
7
|
+
provider = 'enotas';
|
|
8
|
+
#apiKey;
|
|
9
|
+
#baseUrl;
|
|
10
|
+
constructor(_ctx, config = {}) {
|
|
11
|
+
const apiKey = config.apiKey ?? process.env.ENOTAS_API_KEY;
|
|
12
|
+
if (!apiKey) {
|
|
13
|
+
throw new Error('[payments] eNotas invoice provider requires an API key. Set `ENOTAS_API_KEY` env or pass `apiKey` to `invoice.enotas()`.');
|
|
14
|
+
}
|
|
15
|
+
this.#apiKey = apiKey;
|
|
16
|
+
this.#baseUrl = config.baseUrl ?? 'https://api.enotasgw.com.br/v1';
|
|
17
|
+
}
|
|
18
|
+
async emit(input) {
|
|
19
|
+
const body = {
|
|
20
|
+
cliente: {
|
|
21
|
+
nome: input.customer.name ?? 'Cliente',
|
|
22
|
+
email: input.customer.email,
|
|
23
|
+
pessoaFisica: input.customer.taxId.length <= 11,
|
|
24
|
+
cpf: input.customer.taxId.replace(/\D/g, ''),
|
|
25
|
+
endereco: input.customer.address ?? undefined,
|
|
26
|
+
},
|
|
27
|
+
servico: {
|
|
28
|
+
descricao: input.service.description,
|
|
29
|
+
codigoServico: input.service.code,
|
|
30
|
+
valor: input.amount / 100,
|
|
31
|
+
},
|
|
32
|
+
...(input.tax !== undefined ? { impostos: input.tax } : {}),
|
|
33
|
+
};
|
|
34
|
+
const response = await fetch(`${this.#baseUrl}/empresas/nfes`, {
|
|
35
|
+
method: 'POST',
|
|
36
|
+
headers: {
|
|
37
|
+
Authorization: `Bearer ${this.#apiKey}`,
|
|
38
|
+
'Content-Type': 'application/json',
|
|
39
|
+
},
|
|
40
|
+
body: JSON.stringify(body),
|
|
41
|
+
});
|
|
42
|
+
if (!response.ok) {
|
|
43
|
+
const text = await response.text();
|
|
44
|
+
throw new Error(`[payments] eNotas invoice request failed (${response.status}): ${text}`);
|
|
45
|
+
}
|
|
46
|
+
const data = (await response.json());
|
|
47
|
+
return this.#mapInvoice(data);
|
|
48
|
+
}
|
|
49
|
+
async find(invoiceId) {
|
|
50
|
+
const response = await fetch(`${this.#baseUrl}/nfes/${encodeURIComponent(invoiceId)}`, {
|
|
51
|
+
headers: { Authorization: `Bearer ${this.#apiKey}` },
|
|
52
|
+
});
|
|
53
|
+
if (response.status === 404)
|
|
54
|
+
return null;
|
|
55
|
+
if (!response.ok) {
|
|
56
|
+
const text = await response.text();
|
|
57
|
+
throw new Error(`[payments] eNotas invoice request failed (${response.status}): ${text}`);
|
|
58
|
+
}
|
|
59
|
+
const data = (await response.json());
|
|
60
|
+
return this.#mapInvoice(data);
|
|
61
|
+
}
|
|
62
|
+
#mapInvoice(data) {
|
|
63
|
+
const status = data.status ?? '';
|
|
64
|
+
const normalized = status === 'AUTORIZADO' || status === 'AUTORIZADA'
|
|
65
|
+
? 'issued'
|
|
66
|
+
: status === 'CANCELADO' || status === 'REJEITADO'
|
|
67
|
+
? 'canceled'
|
|
68
|
+
: 'pending';
|
|
69
|
+
return {
|
|
70
|
+
id: data.id ?? data.numero ?? String(Math.random()),
|
|
71
|
+
gatewayId: data.id ?? data.numero ?? '',
|
|
72
|
+
provider: this.provider,
|
|
73
|
+
...(data.numero !== undefined ? { number: data.numero } : {}),
|
|
74
|
+
...(data.urlDanfe !== undefined ? { url: data.urlDanfe, hostedPdfUrl: data.urlDanfe } : {}),
|
|
75
|
+
status: normalized,
|
|
76
|
+
...(data.dataEmissao !== undefined ? { issuedAt: data.dataEmissao } : {}),
|
|
77
|
+
amount: { amount: Math.round(Number(data.valor ?? 0) * 100), currency: 'brl' },
|
|
78
|
+
createdAt: data.dataEmissao ?? new Date().toISOString(),
|
|
79
|
+
payload: data,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=enotas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enotas.js","sourceRoot":"","sources":["../../../../src/invoice/drivers/enotas.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { Invoice } from '../../types.js';
|
|
2
|
+
import type { InvoiceEmitInput, InvoiceProvider } from '../invoice_provider.js';
|
|
3
|
+
export interface FocusInvoiceConfig {
|
|
4
|
+
/** Focus NFe API token. Defaults to `env.get('FOCUS_NFE_TOKEN')`. */
|
|
5
|
+
token?: string;
|
|
6
|
+
/** Focus NFe API URL. Defaults to the production endpoint. */
|
|
7
|
+
baseUrl?: string;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Focus NFe invoice provider — REST API for electronic invoices across hundreds of
|
|
11
|
+
* municipalities. Uses `fetch` directly (no SDK dependency), so Focus is not a peer
|
|
12
|
+
* dependency. (The `NFe`/`nfse` names below are Focus's own API identifiers.)
|
|
13
|
+
*/
|
|
14
|
+
export declare class FocusInvoiceProvider implements InvoiceProvider {
|
|
15
|
+
#private;
|
|
16
|
+
readonly provider = "focus";
|
|
17
|
+
constructor(_ctx: {
|
|
18
|
+
config: () => unknown;
|
|
19
|
+
}, config?: FocusInvoiceConfig);
|
|
20
|
+
emit(input: InvoiceEmitInput): Promise<Invoice>;
|
|
21
|
+
find(invoiceId: string): Promise<Invoice | null>;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=focus.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"focus.d.ts","sourceRoot":"","sources":["../../../../src/invoice/drivers/focus.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEhF,MAAM,WAAW,kBAAkB;IACjC,qEAAqE;IACrE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8DAA8D;IAC9D,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAYD;;;;GAIG;AACH,qBAAa,oBAAqB,YAAW,eAAe;;IAC1D,QAAQ,CAAC,QAAQ,WAAW;gBAKhB,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,OAAO,CAAA;KAAE,EAAE,MAAM,GAAE,kBAAuB;IAWtE,IAAI,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;IAqC/C,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;CAqCvD"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Focus NFe invoice provider — REST API for electronic invoices across hundreds of
|
|
3
|
+
* municipalities. Uses `fetch` directly (no SDK dependency), so Focus is not a peer
|
|
4
|
+
* dependency. (The `NFe`/`nfse` names below are Focus's own API identifiers.)
|
|
5
|
+
*/
|
|
6
|
+
export class FocusInvoiceProvider {
|
|
7
|
+
provider = 'focus';
|
|
8
|
+
#token;
|
|
9
|
+
#baseUrl;
|
|
10
|
+
constructor(_ctx, config = {}) {
|
|
11
|
+
const token = config.token ?? process.env.FOCUS_NFE_TOKEN;
|
|
12
|
+
if (!token) {
|
|
13
|
+
throw new Error('[payments] Focus invoice provider requires a token. Set `FOCUS_NFE_TOKEN` env or pass `token` to `invoice.focus()`.');
|
|
14
|
+
}
|
|
15
|
+
this.#token = token;
|
|
16
|
+
this.#baseUrl = config.baseUrl ?? 'https://api.focusnfe.com.br';
|
|
17
|
+
}
|
|
18
|
+
async emit(input) {
|
|
19
|
+
// Focus service-invoice endpoint.
|
|
20
|
+
const body = {
|
|
21
|
+
tomador: {
|
|
22
|
+
cpf_cnpj: input.customer.taxId.replace(/\D/g, ''),
|
|
23
|
+
nome: input.customer.name ?? 'Cliente',
|
|
24
|
+
...(input.customer.email !== undefined ? { email: input.customer.email } : {}),
|
|
25
|
+
...(input.customer.address !== undefined ? { endereco: input.customer.address } : {}),
|
|
26
|
+
},
|
|
27
|
+
servico: {
|
|
28
|
+
descricao: input.service.description,
|
|
29
|
+
...(input.service.code !== undefined ? { codigo_servico: input.service.code } : {}),
|
|
30
|
+
...(input.service.cityServiceCode !== undefined
|
|
31
|
+
? { codigo_servico_municipio: input.service.cityServiceCode }
|
|
32
|
+
: {}),
|
|
33
|
+
},
|
|
34
|
+
valor: (input.amount / 100).toFixed(2),
|
|
35
|
+
...(input.tax !== undefined ? { impostos: input.tax } : {}),
|
|
36
|
+
...(input.metadata !== undefined ? { metadados: input.metadata } : {}),
|
|
37
|
+
};
|
|
38
|
+
const response = await fetch(`${this.#baseUrl}/v2/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] Focus NFe 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}/v2/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] Focus NFe 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 ?? 'pendente';
|
|
68
|
+
const normalized = status === 'autorizado'
|
|
69
|
+
? 'issued'
|
|
70
|
+
: status === 'cancelado' || status === 'rejeitado'
|
|
71
|
+
? 'canceled'
|
|
72
|
+
: 'pending';
|
|
73
|
+
return {
|
|
74
|
+
id: data.ref ?? data.numero ?? String(Math.random()),
|
|
75
|
+
gatewayId: data.ref ?? data.numero ?? '',
|
|
76
|
+
provider: this.provider,
|
|
77
|
+
number: data.numero ?? '',
|
|
78
|
+
...(data.chave !== undefined ? { key: data.chave } : {}),
|
|
79
|
+
...(data.caminho_danfe !== undefined
|
|
80
|
+
? { url: data.caminho_danfe, hostedPdfUrl: data.caminho_danfe }
|
|
81
|
+
: {}),
|
|
82
|
+
status: normalized,
|
|
83
|
+
...(data.data_emissao !== undefined ? { issuedAt: data.data_emissao } : {}),
|
|
84
|
+
amount: { amount: Math.round(Number(data.valor ?? 0) * 100), currency: 'brl' },
|
|
85
|
+
createdAt: data.data_emissao ?? new Date().toISOString(),
|
|
86
|
+
payload: data,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=focus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"focus.js","sourceRoot":"","sources":["../../../../src/invoice/drivers/focus.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { Invoice } from '../../types.js';
|
|
2
|
+
import type { InvoiceEmitInput, InvoiceProvider } from '../invoice_provider.js';
|
|
3
|
+
export interface PlugNotasInvoiceConfig {
|
|
4
|
+
/** PlugNotas API key. Defaults to `env.get('PLUGNOTAS_API_KEY')`. */
|
|
5
|
+
apiKey?: string;
|
|
6
|
+
/** PlugNotas API URL. Defaults to the production endpoint. */
|
|
7
|
+
baseUrl?: string;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* PlugNotas invoice provider — NFS-e API. Uses `fetch` directly (no SDK dependency).
|
|
11
|
+
* Exact field names follow the PlugNotas API; if a variant differs, extend this driver.
|
|
12
|
+
*/
|
|
13
|
+
export declare class PlugNotasInvoiceProvider implements InvoiceProvider {
|
|
14
|
+
#private;
|
|
15
|
+
readonly provider = "plugnotas";
|
|
16
|
+
constructor(_ctx: {
|
|
17
|
+
config: () => unknown;
|
|
18
|
+
}, config?: PlugNotasInvoiceConfig);
|
|
19
|
+
emit(input: InvoiceEmitInput): Promise<Invoice>;
|
|
20
|
+
find(invoiceId: string): Promise<Invoice | null>;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=plugnotas.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugnotas.d.ts","sourceRoot":"","sources":["../../../../src/invoice/drivers/plugnotas.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEhF,MAAM,WAAW,sBAAsB;IACrC,qEAAqE;IACrE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8DAA8D;IAC9D,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAYD;;;GAGG;AACH,qBAAa,wBAAyB,YAAW,eAAe;;IAC9D,QAAQ,CAAC,QAAQ,eAAe;gBAKpB,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,OAAO,CAAA;KAAE,EAAE,MAAM,GAAE,sBAA2B;IAW1E,IAAI,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;IAgC/C,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;CAkCvD"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PlugNotas invoice provider — NFS-e API. Uses `fetch` directly (no SDK dependency).
|
|
3
|
+
* Exact field names follow the PlugNotas API; if a variant differs, extend this driver.
|
|
4
|
+
*/
|
|
5
|
+
export class PlugNotasInvoiceProvider {
|
|
6
|
+
provider = 'plugnotas';
|
|
7
|
+
#apiKey;
|
|
8
|
+
#baseUrl;
|
|
9
|
+
constructor(_ctx, config = {}) {
|
|
10
|
+
const apiKey = config.apiKey ?? process.env.PLUGNOTAS_API_KEY;
|
|
11
|
+
if (!apiKey) {
|
|
12
|
+
throw new Error('[payments] PlugNotas invoice provider requires an API key. Set `PLUGNOTAS_API_KEY` env or pass `apiKey` to `invoice.plugnotas()`.');
|
|
13
|
+
}
|
|
14
|
+
this.#apiKey = apiKey;
|
|
15
|
+
this.#baseUrl = config.baseUrl ?? 'https://api.plugnotas.com.br';
|
|
16
|
+
}
|
|
17
|
+
async emit(input) {
|
|
18
|
+
const body = {
|
|
19
|
+
tomador: {
|
|
20
|
+
cpfCnpj: input.customer.taxId.replace(/\D/g, ''),
|
|
21
|
+
razaoSocial: input.customer.name ?? 'Cliente',
|
|
22
|
+
email: input.customer.email,
|
|
23
|
+
endereco: input.customer.address ?? undefined,
|
|
24
|
+
},
|
|
25
|
+
servico: {
|
|
26
|
+
descricao: input.service.description,
|
|
27
|
+
codigoServico: input.service.code,
|
|
28
|
+
},
|
|
29
|
+
valor: input.amount / 100,
|
|
30
|
+
...(input.tax !== undefined ? { impostos: input.tax } : {}),
|
|
31
|
+
};
|
|
32
|
+
const response = await fetch(`${this.#baseUrl}/nfse`, {
|
|
33
|
+
method: 'POST',
|
|
34
|
+
headers: {
|
|
35
|
+
'X-API-KEY': this.#apiKey,
|
|
36
|
+
'Content-Type': 'application/json',
|
|
37
|
+
},
|
|
38
|
+
body: JSON.stringify(body),
|
|
39
|
+
});
|
|
40
|
+
if (!response.ok) {
|
|
41
|
+
const text = await response.text();
|
|
42
|
+
throw new Error(`[payments] PlugNotas invoice request failed (${response.status}): ${text}`);
|
|
43
|
+
}
|
|
44
|
+
const data = (await response.json());
|
|
45
|
+
return this.#mapInvoice(data);
|
|
46
|
+
}
|
|
47
|
+
async find(invoiceId) {
|
|
48
|
+
const response = await fetch(`${this.#baseUrl}/nfse/${encodeURIComponent(invoiceId)}`, {
|
|
49
|
+
headers: { 'X-API-KEY': this.#apiKey },
|
|
50
|
+
});
|
|
51
|
+
if (response.status === 404)
|
|
52
|
+
return null;
|
|
53
|
+
if (!response.ok) {
|
|
54
|
+
const text = await response.text();
|
|
55
|
+
throw new Error(`[payments] PlugNotas invoice request failed (${response.status}): ${text}`);
|
|
56
|
+
}
|
|
57
|
+
const data = (await response.json());
|
|
58
|
+
return this.#mapInvoice(data);
|
|
59
|
+
}
|
|
60
|
+
#mapInvoice(data) {
|
|
61
|
+
const status = data.status ?? '';
|
|
62
|
+
const normalized = status === 'AUTORIZADO' || status === 'AUTORIZADA' || status === 'emitido'
|
|
63
|
+
? 'issued'
|
|
64
|
+
: status === 'CANCELADO' || status === 'REJEITADO' || status === 'cancelado'
|
|
65
|
+
? 'canceled'
|
|
66
|
+
: 'pending';
|
|
67
|
+
return {
|
|
68
|
+
id: data.id ?? data.numero ?? String(Math.random()),
|
|
69
|
+
gatewayId: data.id ?? data.numero ?? '',
|
|
70
|
+
provider: this.provider,
|
|
71
|
+
...(data.numero !== undefined ? { number: data.numero } : {}),
|
|
72
|
+
...(data.urlPdf !== undefined ? { url: data.urlPdf, hostedPdfUrl: data.urlPdf } : {}),
|
|
73
|
+
status: normalized,
|
|
74
|
+
...(data.dataEmissao !== undefined ? { issuedAt: data.dataEmissao } : {}),
|
|
75
|
+
amount: { amount: Math.round(Number(data.valor ?? 0) * 100), currency: 'brl' },
|
|
76
|
+
createdAt: data.dataEmissao ?? new Date().toISOString(),
|
|
77
|
+
payload: data,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=plugnotas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugnotas.js","sourceRoot":"","sources":["../../../../src/invoice/drivers/plugnotas.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { Invoice } from '../../types.js';
|
|
2
|
+
import type { InvoiceEmitInput, InvoiceProvider } from '../invoice_provider.js';
|
|
3
|
+
export interface TecnospeedInvoiceConfig {
|
|
4
|
+
/** Tecnospeed API token. Defaults to `env.get('TECNOSPEED_TOKEN')`. */
|
|
5
|
+
token?: string;
|
|
6
|
+
/**
|
|
7
|
+
* Tecnospeed API base URL. The NFS-e API is per-municipality (and the national layout
|
|
8
|
+
* moved to an XML DPS at `https://tributario.speedgov.com.br/{municipio}/api/v1`), so
|
|
9
|
+
* point this at your municipality/plan endpoint. Defaults to the generic v1 base.
|
|
10
|
+
*/
|
|
11
|
+
baseUrl?: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Tecnospeed invoice provider — NFS-e across municipalities. Uses `fetch` directly (no
|
|
15
|
+
* SDK dependency). The exact JSON layout varies per municipality and standard (Tecnospeed
|
|
16
|
+
* also offers an XML DPS flow and steers toward PlugNotas for JSON NFS-e) — this adapter
|
|
17
|
+
* sends the common JSON shape and normalizes the response; if your municipality differs,
|
|
18
|
+
* extend this driver (see Custom providers).
|
|
19
|
+
*/
|
|
20
|
+
export declare class TecnospeedInvoiceProvider implements InvoiceProvider {
|
|
21
|
+
#private;
|
|
22
|
+
readonly provider = "tecnospeed";
|
|
23
|
+
constructor(_ctx: {
|
|
24
|
+
config: () => unknown;
|
|
25
|
+
}, config?: TecnospeedInvoiceConfig);
|
|
26
|
+
emit(input: InvoiceEmitInput): Promise<Invoice>;
|
|
27
|
+
find(invoiceId: string): Promise<Invoice | null>;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=tecnospeed.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tecnospeed.d.ts","sourceRoot":"","sources":["../../../../src/invoice/drivers/tecnospeed.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEhF,MAAM,WAAW,uBAAuB;IACtC,uEAAuE;IACvE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAWD;;;;;;GAMG;AACH,qBAAa,yBAA0B,YAAW,eAAe;;IAC/D,QAAQ,CAAC,QAAQ,gBAAgB;gBAKrB,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,OAAO,CAAA;KAAE,EAAE,MAAM,GAAE,uBAA4B;IAW3E,IAAI,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;IAmC/C,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;CAkCvD"}
|