@genesis-tech/genesispay-seller 0.13.1 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. package/CHANGELOG.md +206 -0
  2. package/README.md +670 -91
  3. package/dist/checkout-documents.d.ts +99 -0
  4. package/dist/checkout-documents.d.ts.map +1 -0
  5. package/dist/checkout-documents.js +155 -0
  6. package/dist/checkout-documents.js.map +1 -0
  7. package/dist/checkout-return.d.ts +41 -0
  8. package/dist/checkout-return.d.ts.map +1 -0
  9. package/dist/checkout-return.js +68 -0
  10. package/dist/checkout-return.js.map +1 -0
  11. package/dist/client.d.ts +318 -0
  12. package/dist/client.d.ts.map +1 -0
  13. package/dist/client.js +718 -0
  14. package/dist/client.js.map +1 -0
  15. package/dist/contract-mandates.d.ts +39 -0
  16. package/dist/contract-mandates.d.ts.map +1 -0
  17. package/dist/contract-mandates.js +98 -0
  18. package/dist/contract-mandates.js.map +1 -0
  19. package/dist/contract-usage.d.ts +29 -0
  20. package/dist/contract-usage.d.ts.map +1 -0
  21. package/dist/contract-usage.js +92 -0
  22. package/dist/contract-usage.js.map +1 -0
  23. package/dist/customers.d.ts +41 -0
  24. package/dist/customers.d.ts.map +1 -0
  25. package/dist/customers.js +76 -0
  26. package/dist/customers.js.map +1 -0
  27. package/dist/entitlements.d.ts +19 -0
  28. package/dist/entitlements.d.ts.map +1 -0
  29. package/dist/entitlements.js +30 -0
  30. package/dist/entitlements.js.map +1 -0
  31. package/dist/errors.d.ts +129 -0
  32. package/dist/errors.d.ts.map +1 -0
  33. package/dist/errors.js +273 -0
  34. package/dist/errors.js.map +1 -0
  35. package/dist/fulfillment-attempts.d.ts +29 -0
  36. package/dist/fulfillment-attempts.d.ts.map +1 -0
  37. package/dist/fulfillment-attempts.js +71 -0
  38. package/dist/fulfillment-attempts.js.map +1 -0
  39. package/dist/fulfillment.d.ts +152 -0
  40. package/dist/fulfillment.d.ts.map +1 -0
  41. package/dist/fulfillment.js +810 -0
  42. package/dist/fulfillment.js.map +1 -0
  43. package/dist/genesispay-settlement.d.ts +32 -0
  44. package/dist/genesispay-settlement.d.ts.map +1 -0
  45. package/dist/genesispay-settlement.js +500 -0
  46. package/dist/genesispay-settlement.js.map +1 -0
  47. package/dist/index.d.ts +22 -0
  48. package/dist/index.d.ts.map +1 -0
  49. package/dist/index.js +21 -0
  50. package/dist/index.js.map +1 -0
  51. package/dist/invoices.d.ts +111 -0
  52. package/dist/invoices.d.ts.map +1 -0
  53. package/dist/invoices.js +192 -0
  54. package/dist/invoices.js.map +1 -0
  55. package/dist/item-tax.d.ts +15 -0
  56. package/dist/item-tax.d.ts.map +1 -0
  57. package/dist/item-tax.js +19 -0
  58. package/dist/item-tax.js.map +1 -0
  59. package/dist/mandate-gate.d.ts +54 -0
  60. package/dist/mandate-gate.d.ts.map +1 -0
  61. package/dist/mandate-gate.js +183 -0
  62. package/dist/mandate-gate.js.map +1 -0
  63. package/dist/mandates.d.ts +189 -0
  64. package/dist/mandates.d.ts.map +1 -0
  65. package/dist/mandates.js +234 -0
  66. package/dist/mandates.js.map +1 -0
  67. package/dist/networks.d.ts +10 -0
  68. package/dist/networks.d.ts.map +1 -0
  69. package/dist/networks.js +23 -0
  70. package/dist/networks.js.map +1 -0
  71. package/dist/payment-gate.d.ts +98 -0
  72. package/dist/payment-gate.d.ts.map +1 -0
  73. package/dist/payment-gate.js +370 -0
  74. package/dist/payment-gate.js.map +1 -0
  75. package/dist/plans.d.ts +68 -0
  76. package/dist/plans.d.ts.map +1 -0
  77. package/dist/plans.js +127 -0
  78. package/dist/plans.js.map +1 -0
  79. package/dist/products.d.ts +170 -0
  80. package/dist/products.d.ts.map +1 -0
  81. package/dist/products.js +1317 -0
  82. package/dist/products.js.map +1 -0
  83. package/dist/resource.d.ts +47 -0
  84. package/dist/resource.d.ts.map +1 -0
  85. package/dist/resource.js +71 -0
  86. package/dist/resource.js.map +1 -0
  87. package/dist/strict-response.d.ts +21 -0
  88. package/dist/strict-response.d.ts.map +1 -0
  89. package/dist/strict-response.js +68 -0
  90. package/dist/strict-response.js.map +1 -0
  91. package/dist/usdc-amount.d.ts +7 -0
  92. package/dist/usdc-amount.d.ts.map +1 -0
  93. package/dist/usdc-amount.js +21 -0
  94. package/dist/usdc-amount.js.map +1 -0
  95. package/dist/webhooks.d.ts +352 -0
  96. package/dist/webhooks.d.ts.map +1 -0
  97. package/dist/webhooks.js +244 -0
  98. package/dist/webhooks.js.map +1 -0
  99. package/package.json +4 -3
@@ -0,0 +1,22 @@
1
+ export { GenesisPay, type GenesisPayKeyMode, type GenesisPayClientOptions, type SellerConfig, type CheckoutAmountInput, type CheckoutCreateInput, type IdempotentCreationOptions, type CheckoutLink, type CheckoutSession, type CheckoutAttempt, type CheckoutAttemptStatus, type SimulatePaymentOptions, type GateConfig, type ResolvingGate, } from "./client.js";
2
+ export { type SubscriptionPlan, type SubscriptionPlanStatus, type PlanCreateInput, type PlansResource, } from "./plans.js";
3
+ export type { ItemTax, ItemTaxUpdate } from "./item-tax.js";
4
+ export { type Product, type ProductCreateInput, type ProductPaymentLink, type ProductCheckoutCreateInput, type ProductCheckoutLink, type ProductCheckoutCreationOptions, type ProductDelivery, type ProductGate, type ProductGatePurchase, type ProductsResource, createGateRequestFingerprint, } from "./products.js";
5
+ export { type EntitlementsResource, type VerifiedEntitlement } from "./entitlements.js";
6
+ export { GENESISPAY_API_VERSION, GENESISPAY_VERSION_HEADER, GENESISPAY_REQUEST_ID_HEADER, GENESISPAY_PAYMENT_ATTEMPT_ID_HEADER, type ApiVersion, type DeploymentMode, type SupportedAsset, type PaymentChannel, type DeliveryType, type SettlementStrategy, type NetworkContract, type ExpectedDeliveryContract, type ExpectedProductContract, type ExpectedPaymentLinkContract, type ExpectedFulfillmentContract, type FulfillmentLocator, type VerifiedPayment, type FulfillmentVerification, type FulfillmentResource, } from "./fulfillment.js";
7
+ export { type Customer, type CustomerCreateInput, type CustomerUpdateInput, type CustomersResource, } from "./customers.js";
8
+ export { type Invoice, type InvoiceStatus, type InvoiceSummary, type InvoiceSummaryPage, type InvoiceSummaryListOptions, type InvoiceLineInput, type InvoiceDraftInput, type InvoiceEmailDelivery, type InvoicesResource, } from "./invoices.js";
9
+ export { type CheckoutDocument, type CheckoutDocumentKind, type CheckoutDocumentSnapshot, type CheckoutDocumentsResource, } from "./checkout-documents.js";
10
+ export { type Mandate, type MandateKind, type MandateStatus, type MandateCreateInput, type MandateCreateResult, type MandateCharge, type MandateChargeInput, type MandateChargeStatus, type MandateListOptions, type MandateListPage, type PermitTypedData, type MandatesResource, } from "./mandates.js";
11
+ export { GenesisPayConfigError, GenesisPayNetworkSafetyError, GenesisPayNotFoundError, GenesisPayValidationError, GenesisPayRateLimitError, GenesisPayMandateChargePendingError, GenesisPayContractMismatchError, GenesisPayAmbiguousLocatorError, GenesisPayEvidenceError, GenesisPayVersionError, type GenesisPayValidationIssue, type GenesisPayResponseMetadata, type GenesisPayMandateChargeLocator, type GenesisPayEvidenceErrorCode, type GenesisPayVersionErrorCode, } from "./errors.js";
12
+ export { constructEvent, isKnownGenesisPayEventType, GENESISPAY_EVENT_TYPES, GenesisPaySignatureVerificationError, type GenesisPayEvent, type GenesisPayAnyEvent, type GenesisPayUnknownEvent, type GenesisPayEventType, type GenesisPayPaymentEvent, type GenesisPayFulfillmentEvent, type GenesisPayFulfillmentEventData, type GenesisPayMandateEvent, type GenesisPayAgentPaymentEvent, type GenesisPayPaymentEventData, type GenesisPayMandateEventData, type ConstructEventOptions, } from "./webhooks.js";
13
+ export { createPaymentGate, type PaymentGate, type PaymentGateConfig, type SettlementContext, type SettlementVerification, type VerifySettlement, type WrapOptions, } from "./payment-gate.js";
14
+ export { genesisPaySettlement, DEFAULT_FACILITATOR_BASE_URL, type GenesisPaySettlementOptions, } from "./genesispay-settlement.js";
15
+ export { resolvePaymentGateNetwork, type PaymentGateNetwork, type PaymentGateNetworkConfig, } from "./networks.js";
16
+ export { parseUsdcAmountToMinorUnits } from "./usdc-amount.js";
17
+ export type { FulfillmentAttemptCandidate, FulfillmentAttemptList, FulfillmentAttemptsQuery } from "./fulfillment-attempts.js";
18
+ export { CHECKOUT_RETURN_LINK_ID_PARAM, CHECKOUT_RETURN_STATUS_PARAM, parseCheckoutReturnHint, type CheckoutReturnHint, } from "./checkout-return.js";
19
+ export { createMandateGate, MANDATE_HEADER, type MandateChargeOutcome, type MandateGate, type MandateGateOptions, } from "./mandate-gate.js";
20
+ export { type ContractSubscriptionCreateInput, type ContractSubscriptionCreateResult, type ContractPerUseCreateInput, type ContractPerUseCreateResult, type ContractMandateTypedData } from "./contract-mandates.js";
21
+ export type { ContractUsageCharge, ContractUsageInput } from "./contract-usage.js";
22
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,21 @@
1
+ // @genesis-tech/genesispay-seller — framework-agnostic x402 payment gate.
2
+ export { GenesisPay, } from "./client.js";
3
+ export { createGateRequestFingerprint, } from "./products.js";
4
+ export { GENESISPAY_API_VERSION, GENESISPAY_VERSION_HEADER, GENESISPAY_REQUEST_ID_HEADER, GENESISPAY_PAYMENT_ATTEMPT_ID_HEADER, } from "./fulfillment.js";
5
+ // Every SDK method throws from this set: 404 → NotFound, 422 (and 400 when the
6
+ // body carries structured `issues`) → Validation, 429 → RateLimit (with
7
+ // `retryAfterSeconds`), mandate outcome-unknown 503 → a typed retained charge
8
+ // locator, anything else → Config.
9
+ export { GenesisPayConfigError, GenesisPayNetworkSafetyError, GenesisPayNotFoundError, GenesisPayValidationError, GenesisPayRateLimitError, GenesisPayMandateChargePendingError, GenesisPayContractMismatchError, GenesisPayAmbiguousLocatorError, GenesisPayEvidenceError, GenesisPayVersionError, } from "./errors.js";
10
+ export { constructEvent, isKnownGenesisPayEventType, GENESISPAY_EVENT_TYPES, GenesisPaySignatureVerificationError, } from "./webhooks.js";
11
+ export { createPaymentGate, } from "./payment-gate.js";
12
+ export { genesisPaySettlement, DEFAULT_FACILITATOR_BASE_URL, } from "./genesispay-settlement.js";
13
+ export { resolvePaymentGateNetwork, } from "./networks.js";
14
+ export { parseUsdcAmountToMinorUnits } from "./usdc-amount.js";
15
+ // Checkout return parameters: the query-parameter names GenesisPay appends to a
16
+ // merchant's `returnUrl`, plus the typed hint parser that reads them back. The
17
+ // hint is a UI convenience, not proof of payment — pass its locator plus your
18
+ // immutable expected contract to `fulfillment.verify` before acting on it.
19
+ export { CHECKOUT_RETURN_LINK_ID_PARAM, CHECKOUT_RETURN_STATUS_PARAM, parseCheckoutReturnHint, } from "./checkout-return.js";
20
+ export { createMandateGate, MANDATE_HEADER, } from "./mandate-gate.js";
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAE1E,OAAO,EACL,UAAU,GAcX,MAAM,aAAa,CAAC;AAgBrB,OAAO,EAWL,4BAA4B,GAC7B,MAAM,eAAe,CAAC;AAIvB,OAAO,EACL,sBAAsB,EACtB,yBAAyB,EACzB,4BAA4B,EAC5B,oCAAoC,GAgBrC,MAAM,kBAAkB,CAAC;AA2C1B,+EAA+E;AAC/E,wEAAwE;AACxE,8EAA8E;AAC9E,mCAAmC;AACnC,OAAO,EACL,qBAAqB,EACrB,4BAA4B,EAC5B,uBAAuB,EACvB,yBAAyB,EACzB,wBAAwB,EACxB,mCAAmC,EACnC,+BAA+B,EAC/B,+BAA+B,EAC/B,uBAAuB,EACvB,sBAAsB,GAMvB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,cAAc,EACd,0BAA0B,EAC1B,sBAAsB,EACtB,oCAAoC,GAarC,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,iBAAiB,GAOlB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,oBAAoB,EACpB,4BAA4B,GAE7B,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EACL,yBAAyB,GAG1B,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,2BAA2B,EAAE,MAAM,kBAAkB,CAAC;AAG/D,gFAAgF;AAChF,+EAA+E;AAC/E,8EAA8E;AAC9E,2EAA2E;AAC3E,OAAO,EACL,6BAA6B,EAC7B,4BAA4B,EAC5B,uBAAuB,GAExB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,iBAAiB,EACjB,cAAc,GAIf,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,111 @@
1
+ import { type Customer } from "./customers.js";
2
+ import { type ItemTax } from "./item-tax.js";
3
+ import { type GenesisPayRequest } from "./resource.js";
4
+ export type InvoiceStatus = "draft" | "open" | "past_due" | "paid" | "void" | "uncollectible";
5
+ export type InvoiceLineInput = {
6
+ /** Required for new v2 invoices; absent only when editing a legacy v1 draft. */
7
+ taxConfig?: ItemTax;
8
+ description: string;
9
+ quantity: number;
10
+ /** Decimal amount in the invoice asset, as a string with up to 6 decimals. */
11
+ unitAmount: string;
12
+ };
13
+ export type InvoiceDraftInput = {
14
+ /** New invoices are v2 (inclusive per-line tax); v1 is retained drafts only. */
15
+ calculationVersion?: 1 | 2;
16
+ customerId: string;
17
+ asset?: "USDC" | "EURC";
18
+ /** ISO-8601 timestamp with an offset. */
19
+ dueAt: string;
20
+ discountBps?: number;
21
+ /** Legacy v1 only. New invoices use lineItems[].taxConfig and taxBps=0. */
22
+ taxBps?: number;
23
+ memo?: string;
24
+ footer?: string;
25
+ lineItems: InvoiceLineInput[];
26
+ };
27
+ export type Invoice = {
28
+ calculationVersion: 1 | 2;
29
+ id: string;
30
+ publicId: string;
31
+ invoiceNumber: string | null;
32
+ status: InvoiceStatus;
33
+ asset: "USDC" | "EURC";
34
+ chainId: number;
35
+ customer: Customer;
36
+ lineItems: Array<{
37
+ id: string;
38
+ position: number;
39
+ description: string;
40
+ quantity: number;
41
+ unitAmountMinor: string;
42
+ amountMinor: string;
43
+ taxConfig: ItemTax | null;
44
+ subtotalMinor: string | null;
45
+ discountMinor: string | null;
46
+ taxMinor: string | null;
47
+ totalMinor: string | null;
48
+ }>;
49
+ subtotalMinor: string;
50
+ discountBps: number;
51
+ discountMinor: string;
52
+ taxBps: number;
53
+ taxMinor: string;
54
+ totalMinor: string;
55
+ memo: string | null;
56
+ footer: string | null;
57
+ dueAt: string;
58
+ createdAt: string;
59
+ updatedAt: string;
60
+ finalizedAt: string | null;
61
+ paidAt: string | null;
62
+ voidedAt: string | null;
63
+ uncollectibleAt: string | null;
64
+ hostedInvoiceUrl: string | null;
65
+ pdfUrl: string | null;
66
+ payment: {
67
+ payUrl: string | null;
68
+ txHash: string | null;
69
+ payerWallet: string | null;
70
+ };
71
+ };
72
+ export type InvoiceEmailDelivery = {
73
+ id: string;
74
+ status: "sent";
75
+ providerMessageId: string | null;
76
+ sentAt: string | null;
77
+ };
78
+ /** Small list projection; retrieve the full invoice for line items and payment evidence. */
79
+ export type InvoiceSummary = Pick<Invoice, "id" | "publicId" | "invoiceNumber" | "status" | "asset" | "chainId" | "totalMinor" | "dueAt" | "createdAt" | "paidAt"> & {
80
+ customer: {
81
+ name: string;
82
+ companyName: string | null;
83
+ };
84
+ };
85
+ export type InvoiceSummaryPage = {
86
+ invoices: InvoiceSummary[];
87
+ limit: number;
88
+ nextCursor: string | null;
89
+ };
90
+ export type InvoiceSummaryListOptions = {
91
+ limit?: number;
92
+ after?: string;
93
+ };
94
+ export interface InvoicesResource {
95
+ create(input: InvoiceDraftInput): Promise<Invoice>;
96
+ /** Legacy full resources: at most the newest 100 invoices. */
97
+ list(): Promise<Invoice[]>;
98
+ /** Bounded summaries, default 25/max 100; follow nextCursor for older invoices. */
99
+ listSummaries(options?: InvoiceSummaryListOptions): Promise<InvoiceSummaryPage>;
100
+ retrieve(publicId: string): Promise<Invoice>;
101
+ update(publicId: string, input: InvoiceDraftInput): Promise<Invoice>;
102
+ finalize(publicId: string): Promise<Invoice>;
103
+ send(publicId: string, options: {
104
+ idempotencyKey: string;
105
+ }): Promise<InvoiceEmailDelivery>;
106
+ void(publicId: string): Promise<Invoice>;
107
+ markUncollectible(publicId: string): Promise<Invoice>;
108
+ }
109
+ export declare function createInvoicesResource(request: GenesisPayRequest): InvoicesResource;
110
+ export declare function toInvoice(raw: Record<string, unknown>): Invoice;
111
+ //# sourceMappingURL=invoices.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invoices.d.ts","sourceRoot":"","sources":["../src/invoices.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,192 @@
1
+ // `genesispay.invoices.*` — one-off invoice lifecycle over `/api/v1/invoices`.
2
+ import { GenesisPayConfigError } from "./errors.js";
3
+ import { toCustomer } from "./customers.js";
4
+ import { parseItemTax } from "./item-tax.js";
5
+ import { asRecord, oneOf, optionalString, requiredString, toAmountString, toCount, } from "./resource.js";
6
+ export function createInvoicesResource(request) {
7
+ return {
8
+ create: async (input) => invoiceRequest(request, "POST", "/api/v1/invoices", validateInvoiceTax(input, true), "create an invoice"),
9
+ list: async () => {
10
+ const body = await request({
11
+ path: "/api/v1/invoices",
12
+ operation: "GET /api/v1/invoices",
13
+ action: "list invoices",
14
+ });
15
+ const rows = asRecord(body)?.invoices;
16
+ if (!Array.isArray(rows)) {
17
+ throw new GenesisPayConfigError(`GenesisPay GET /api/v1/invoices returned no invoices array: ${JSON.stringify(body)}`);
18
+ }
19
+ return rows
20
+ .map(asRecord)
21
+ .filter((row) => Boolean(row?.publicId))
22
+ .map(toInvoice);
23
+ },
24
+ listSummaries: async (options = {}) => {
25
+ const limit = options.limit ?? 25;
26
+ if (!Number.isInteger(limit) || limit < 1 || limit > 100) {
27
+ throw new GenesisPayConfigError("invoices.listSummaries limit must be an integer from 1 to 100.");
28
+ }
29
+ if (options.after !== undefined && (typeof options.after !== "string" || !/^[A-Za-z0-9_-]{1,256}$/.test(options.after))) {
30
+ throw new GenesisPayConfigError("invoices.listSummaries after must be the opaque nextCursor from a previous page.");
31
+ }
32
+ const query = new URLSearchParams({ limit: String(limit) });
33
+ if (options.after)
34
+ query.set("after", options.after);
35
+ const body = asRecord(await request({ path: `/api/v1/invoices/summaries?${query}`, operation: "GET /api/v1/invoices/summaries", action: "list invoice summaries" }));
36
+ if (!body || !Array.isArray(body.invoices) || body.invoices.length > limit || body.limit !== limit ||
37
+ !(body.nextCursor === null || typeof body.nextCursor === "string" && /^[A-Za-z0-9_-]{1,256}$/.test(body.nextCursor))) {
38
+ throw new GenesisPayConfigError("GenesisPay returned an invalid invoice summary page.");
39
+ }
40
+ return { invoices: body.invoices.map(toInvoiceSummary), limit, nextCursor: body.nextCursor };
41
+ },
42
+ retrieve: async (publicId) => {
43
+ const id = requirePublicId(publicId, "invoices.retrieve");
44
+ return invoiceRequest(request, "GET", `/api/v1/invoices/${encodeURIComponent(id)}`, undefined, `retrieve invoice "${id}"`);
45
+ },
46
+ update: async (publicId, input) => {
47
+ const id = requirePublicId(publicId, "invoices.update");
48
+ return invoiceRequest(request, "PATCH", `/api/v1/invoices/${encodeURIComponent(id)}`, validateInvoiceTax(input, false), `update invoice "${id}"`);
49
+ },
50
+ finalize: async (publicId) => transition(request, publicId, "finalize", "finalize an invoice"),
51
+ void: async (publicId) => transition(request, publicId, "void", "void an invoice"),
52
+ markUncollectible: async (publicId) => transition(request, publicId, "mark-uncollectible", "mark an invoice uncollectible"),
53
+ send: async (publicId, options) => {
54
+ const id = requirePublicId(publicId, "invoices.send");
55
+ const idempotencyKey = options?.idempotencyKey?.trim();
56
+ if (!idempotencyKey) {
57
+ throw new GenesisPayConfigError("invoices.send requires a non-empty idempotencyKey.");
58
+ }
59
+ const path = `/api/v1/invoices/${encodeURIComponent(id)}/send`;
60
+ const response = await request({
61
+ method: "POST",
62
+ path,
63
+ operation: `POST ${path}`,
64
+ action: `send invoice "${id}"`,
65
+ headers: { "idempotency-key": idempotencyKey },
66
+ });
67
+ const delivery = asRecord(asRecord(response)?.delivery);
68
+ if (!delivery?.id) {
69
+ throw new GenesisPayConfigError(`GenesisPay POST ${path} returned no delivery: ${JSON.stringify(response)}`);
70
+ }
71
+ return {
72
+ id: requiredString(delivery.id),
73
+ status: "sent",
74
+ providerMessageId: optionalString(delivery.providerMessageId),
75
+ sentAt: optionalString(delivery.sentAt),
76
+ };
77
+ },
78
+ };
79
+ }
80
+ async function transition(request, publicId, transitionName, action) {
81
+ const id = requirePublicId(publicId, `invoices.${transitionName}`);
82
+ return invoiceRequest(request, "POST", `/api/v1/invoices/${encodeURIComponent(id)}/${transitionName}`, undefined, action);
83
+ }
84
+ async function invoiceRequest(request, method, path, body, action) {
85
+ const response = await request({
86
+ method,
87
+ path,
88
+ operation: `${method} ${path}`,
89
+ action,
90
+ ...(body === undefined ? {} : { body }),
91
+ });
92
+ const raw = asRecord(asRecord(response)?.invoice);
93
+ if (!raw?.publicId) {
94
+ throw new GenesisPayConfigError(`GenesisPay ${method} ${path} returned no invoice: ${JSON.stringify(response)}`);
95
+ }
96
+ return toInvoice(raw);
97
+ }
98
+ function requirePublicId(publicId, method) {
99
+ const id = publicId?.trim();
100
+ if (!id) {
101
+ throw new GenesisPayConfigError(`${method}(publicId) requires the publicId returned by invoices.create().`);
102
+ }
103
+ return id;
104
+ }
105
+ export function toInvoice(raw) {
106
+ const customer = asRecord(raw.customer) ?? {};
107
+ const payment = asRecord(raw.payment) ?? {};
108
+ const lines = Array.isArray(raw.lineItems) ? raw.lineItems : [];
109
+ return {
110
+ calculationVersion: raw.calculationVersion === 2 ? 2 : 1,
111
+ id: requiredString(raw.id),
112
+ publicId: requiredString(raw.publicId),
113
+ invoiceNumber: optionalString(raw.invoiceNumber),
114
+ status: oneOf(raw.status, ["draft", "open", "past_due", "paid", "void", "uncollectible"], "draft"),
115
+ asset: oneOf(raw.asset, ["USDC", "EURC"], "USDC"),
116
+ chainId: toCount(raw.chainId),
117
+ customer: toCustomer(customer),
118
+ lineItems: lines
119
+ .map(asRecord)
120
+ .filter((line) => Boolean(line?.id))
121
+ .map((line) => ({
122
+ id: requiredString(line.id),
123
+ position: toCount(line.position),
124
+ description: requiredString(line.description),
125
+ quantity: toCount(line.quantity),
126
+ unitAmountMinor: toAmountString(line.unitAmountMinor),
127
+ amountMinor: toAmountString(line.amountMinor),
128
+ taxConfig: parseItemTax(line.taxConfig),
129
+ subtotalMinor: optionalString(line.subtotalMinor),
130
+ discountMinor: optionalString(line.discountMinor),
131
+ taxMinor: optionalString(line.taxMinor),
132
+ totalMinor: optionalString(line.totalMinor),
133
+ })),
134
+ subtotalMinor: toAmountString(raw.subtotalMinor),
135
+ discountBps: toCount(raw.discountBps),
136
+ discountMinor: toAmountString(raw.discountMinor),
137
+ taxBps: toCount(raw.taxBps),
138
+ taxMinor: toAmountString(raw.taxMinor),
139
+ totalMinor: toAmountString(raw.totalMinor),
140
+ memo: optionalString(raw.memo),
141
+ footer: optionalString(raw.footer),
142
+ dueAt: requiredString(raw.dueAt),
143
+ createdAt: requiredString(raw.createdAt),
144
+ updatedAt: requiredString(raw.updatedAt),
145
+ finalizedAt: optionalString(raw.finalizedAt),
146
+ paidAt: optionalString(raw.paidAt),
147
+ voidedAt: optionalString(raw.voidedAt),
148
+ uncollectibleAt: optionalString(raw.uncollectibleAt),
149
+ hostedInvoiceUrl: optionalString(raw.hostedInvoiceUrl),
150
+ pdfUrl: optionalString(raw.pdfUrl),
151
+ payment: {
152
+ payUrl: optionalString(payment.payUrl),
153
+ txHash: optionalString(payment.txHash),
154
+ payerWallet: optionalString(payment.payerWallet),
155
+ },
156
+ };
157
+ }
158
+ function validateInvoiceTax(input, creating) {
159
+ const version = input.calculationVersion ?? (creating ? 2 : undefined);
160
+ if (creating && version !== 2)
161
+ throw new GenesisPayConfigError("New invoices require calculationVersion 2 and per-line inclusive tax.");
162
+ if (version === 2 && (input.taxBps ?? 0) !== 0)
163
+ throw new GenesisPayConfigError("New invoices use line taxConfig, not invoice-wide taxBps.");
164
+ const lineItems = input.lineItems.map((line) => {
165
+ const taxConfig = parseItemTax(line.taxConfig);
166
+ if (version === 2 && !taxConfig)
167
+ throw new GenesisPayConfigError("Choose taxConfig for every invoice line.");
168
+ return { ...line, ...(taxConfig ? { taxConfig } : {}) };
169
+ });
170
+ return { ...input, ...(version ? { calculationVersion: version } : {}), lineItems };
171
+ }
172
+ /** This new endpoint has no older partial shape: missing rows must never silently disappear. */
173
+ function toInvoiceSummary(value) {
174
+ const raw = asRecord(value), customer = asRecord(raw?.customer);
175
+ const statuses = ["draft", "open", "past_due", "paid", "void", "uncollectible"];
176
+ if (!raw || !customer || typeof raw.id !== "string" || !raw.id || typeof raw.publicId !== "string" || !raw.publicId ||
177
+ !(raw.invoiceNumber === null || typeof raw.invoiceNumber === "string") ||
178
+ typeof raw.status !== "string" || !statuses.includes(raw.status) ||
179
+ !(raw.asset === "USDC" || raw.asset === "EURC") || typeof raw.chainId !== "number" || !Number.isInteger(raw.chainId) || raw.chainId <= 0 ||
180
+ typeof raw.totalMinor !== "string" || !/^(0|[1-9][0-9]*)$/.test(raw.totalMinor) ||
181
+ typeof customer.name !== "string" || !(customer.companyName === null || typeof customer.companyName === "string") ||
182
+ typeof raw.dueAt !== "string" || !Number.isFinite(Date.parse(raw.dueAt)) ||
183
+ typeof raw.createdAt !== "string" || !Number.isFinite(Date.parse(raw.createdAt)) ||
184
+ !(raw.paidAt === null || typeof raw.paidAt === "string" && Number.isFinite(Date.parse(raw.paidAt)))) {
185
+ throw new GenesisPayConfigError("GenesisPay returned an invalid invoice summary.");
186
+ }
187
+ return { id: raw.id, publicId: raw.publicId, invoiceNumber: raw.invoiceNumber,
188
+ status: raw.status, asset: raw.asset, chainId: raw.chainId, totalMinor: raw.totalMinor,
189
+ customer: { name: customer.name, companyName: customer.companyName },
190
+ dueAt: raw.dueAt, createdAt: raw.createdAt, paidAt: raw.paidAt };
191
+ }
192
+ //# sourceMappingURL=invoices.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invoices.js","sourceRoot":"","sources":["../src/invoices.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /** Seller-provided inclusive item tax. This is not automatic tax determination. */
2
+ export type ItemTax = {
3
+ version: 1;
4
+ treatment: "taxable" | "zero_rated" | "exempt" | "not_collected";
5
+ /** Integer basis points: 2000 = 20%. Taxable requires 1..10000, others 0. */
6
+ rateBps: number;
7
+ /** Required nonempty explanation for zero_rated, exempt and not_collected. */
8
+ note: string | null;
9
+ };
10
+ export declare function parseItemTax(value: unknown): ItemTax | null;
11
+ export type ItemTaxUpdate = {
12
+ taxConfig: ItemTax;
13
+ expectedTaxConfig: ItemTax | null;
14
+ };
15
+ //# sourceMappingURL=item-tax.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"item-tax.d.ts","sourceRoot":"","sources":["../src/item-tax.ts"],"names":[],"mappings":"AAEA,mFAAmF;AACnF,MAAM,MAAM,OAAO,GAAG;IACpB,OAAO,EAAE,CAAC,CAAC;IACX,SAAS,EAAE,SAAS,GAAG,YAAY,GAAG,QAAQ,GAAG,eAAe,CAAC;IACjE,6EAA6E;IAC7E,OAAO,EAAE,MAAM,CAAC;IAChB,8EAA8E;IAC9E,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB,CAAC;AAEF,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,GAAG,IAAI,CAc3D;AAED,MAAM,MAAM,aAAa,GAAG;IAAE,SAAS,EAAE,OAAO,CAAC;IAAC,iBAAiB,EAAE,OAAO,GAAG,IAAI,CAAA;CAAE,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { GenesisPayConfigError } from "./errors.js";
2
+ export function parseItemTax(value) {
3
+ // Old servers/entries are unconfigured, never silently zero-rated.
4
+ if (value === undefined || value === null)
5
+ return null;
6
+ if (typeof value !== "object" || Array.isArray(value))
7
+ throw new GenesisPayConfigError("Invalid item tax configuration.");
8
+ const tax = value;
9
+ const treatment = tax.treatment;
10
+ const note = typeof tax.note === "string" ? tax.note.trim() : tax.note;
11
+ if (tax.version !== 1 || !["taxable", "zero_rated", "exempt", "not_collected"].includes(String(treatment)) ||
12
+ typeof tax.rateBps !== "number" || !Number.isInteger(tax.rateBps) || tax.rateBps < 0 || tax.rateBps > 10000 ||
13
+ !(note === null || typeof note === "string") || (typeof note === "string" && note.length > 1000) ||
14
+ (treatment === "taxable" ? tax.rateBps === 0 : tax.rateBps !== 0 || !note)) {
15
+ throw new GenesisPayConfigError("Invalid item tax configuration. Supply a positive taxable rate or an explicit zero-tax treatment with a reason.");
16
+ }
17
+ return { version: 1, treatment: treatment, rateBps: tax.rateBps, note };
18
+ }
19
+ //# sourceMappingURL=item-tax.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"item-tax.js","sourceRoot":"","sources":["../src/item-tax.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAYpD,MAAM,UAAU,YAAY,CAAC,KAAc;IACzC,mEAAmE;IACnE,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACvD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,qBAAqB,CAAC,iCAAiC,CAAC,CAAC;IAC1H,MAAM,GAAG,GAAG,KAAgC,CAAC;IAC7C,MAAM,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC;IAChC,MAAM,IAAI,GAAG,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;IACvE,IAAI,GAAG,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACtG,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,OAAO,GAAG,CAAC,IAAI,GAAG,CAAC,OAAO,GAAG,KAAK;QAC3G,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,CAAC,IAAI,CAAC,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QAChG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/E,MAAM,IAAI,qBAAqB,CAAC,iHAAiH,CAAC,CAAC;IACrJ,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,SAAiC,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC;AAClG,CAAC"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Mandate gate — the signature-free metered path for humans and subscriptions.
3
+ *
4
+ * Instead of demanding a fresh signed payment per request (the x402 gate), the
5
+ * caller presents a standing payment mandate id via the `GENESISPAY-MANDATE`
6
+ * header. The gate debits the mandate through GenesisPay
7
+ * (`POST /api/v1/mandates/:id/charge`) — a non-custodial on-chain pull from
8
+ * the payer's wallet directly to yours — and only runs your handler once the
9
+ * charge settled. Combine with `createPaymentGate` to accept both per-call
10
+ * x402 payments and mandate-metered calls on one endpoint.
11
+ */
12
+ export declare const MANDATE_HEADER = "GENESISPAY-MANDATE";
13
+ export type MandateGateOptions = {
14
+ /** Decimal charge per request, e.g. "0.08". */
15
+ amount: string;
16
+ /** Base URL of the GenesisPay app (your GENESISPAY_BASE_URL). */
17
+ baseUrl: string;
18
+ /** GenesisPay seller API key ("gp_sk_..."). */
19
+ apiKey: string;
20
+ /** Description attached to each charge (shows up in activity/usage). */
21
+ description?: string;
22
+ /** Override for testing; defaults to global fetch. */
23
+ fetchFn?: typeof fetch;
24
+ };
25
+ export type MandateChargeOutcome = {
26
+ ok: true;
27
+ charge: {
28
+ id: string;
29
+ amountMinor: string;
30
+ txHash: string;
31
+ };
32
+ } | {
33
+ ok: false;
34
+ status: number;
35
+ code?: string;
36
+ error: string;
37
+ charge?: {
38
+ id: string;
39
+ amountMinor: string;
40
+ txHash: string | null;
41
+ };
42
+ };
43
+ export type MandateGate = {
44
+ /** Charges the mandate once. Exposed for custom flows. */
45
+ charge: (mandateId: string, resourceUrl: string | undefined, idempotencyKey: string) => Promise<MandateChargeOutcome>;
46
+ /**
47
+ * Wraps a fetch-style handler: requests carrying a valid `GENESISPAY-MANDATE`
48
+ * header are charged and passed through; requests without one get a 402
49
+ * JSON body explaining how to attach a mandate.
50
+ */
51
+ wrap: (handler: (request: Request) => Response | Promise<Response>) => (request: Request) => Promise<Response>;
52
+ };
53
+ export declare function createMandateGate(options: MandateGateOptions): MandateGate;
54
+ //# sourceMappingURL=mandate-gate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mandate-gate.d.ts","sourceRoot":"","sources":["../src/mandate-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,eAAO,MAAM,cAAc,uBAAuB,CAAC;AAanD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,+CAA+C;IAC/C,MAAM,EAAE,MAAM,CAAC;IACf,iEAAiE;IACjE,OAAO,EAAE,MAAM,CAAC;IAChB,+CAA+C;IAC/C,MAAM,EAAE,MAAM,CAAC;IACf,wEAAwE;IACxE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sDAAsD;IACtD,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAC5B;IACE,EAAE,EAAE,IAAI,CAAC;IACT,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAC7D,GACD;IACE,EAAE,EAAE,KAAK,CAAC;IACV,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;CACrE,CAAC;AAEN,MAAM,MAAM,WAAW,GAAG;IACxB,0DAA0D;IAC1D,MAAM,EAAE,CACN,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,cAAc,EAAE,MAAM,KACnB,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACnC;;;;OAIG;IACH,IAAI,EAAE,CACJ,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,KACxD,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;CAC9C,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,WAAW,CAwM1E"}