@genesis-tech/genesispay-seller 0.13.2 → 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.
- package/CHANGELOG.md +196 -0
- package/README.md +670 -91
- package/dist/checkout-documents.d.ts +99 -0
- package/dist/checkout-documents.d.ts.map +1 -0
- package/dist/checkout-documents.js +155 -0
- package/dist/checkout-documents.js.map +1 -0
- package/dist/checkout-return.d.ts +5 -5
- package/dist/checkout-return.d.ts.map +1 -1
- package/dist/checkout-return.js +3 -2
- package/dist/checkout-return.js.map +1 -1
- package/dist/client.d.ts +42 -7
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +99 -10
- package/dist/client.js.map +1 -1
- package/dist/contract-mandates.d.ts +39 -0
- package/dist/contract-mandates.d.ts.map +1 -0
- package/dist/contract-mandates.js +98 -0
- package/dist/contract-mandates.js.map +1 -0
- package/dist/contract-usage.d.ts +29 -0
- package/dist/contract-usage.d.ts.map +1 -0
- package/dist/contract-usage.js +92 -0
- package/dist/contract-usage.js.map +1 -0
- package/dist/errors.d.ts +71 -5
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +124 -13
- package/dist/errors.js.map +1 -1
- package/dist/fulfillment-attempts.d.ts +29 -0
- package/dist/fulfillment-attempts.d.ts.map +1 -0
- package/dist/fulfillment-attempts.js +71 -0
- package/dist/fulfillment-attempts.js.map +1 -0
- package/dist/fulfillment.d.ts +152 -0
- package/dist/fulfillment.d.ts.map +1 -0
- package/dist/fulfillment.js +810 -0
- package/dist/fulfillment.js.map +1 -0
- package/dist/genesispay-settlement.d.ts +4 -2
- package/dist/genesispay-settlement.d.ts.map +1 -1
- package/dist/genesispay-settlement.js +412 -15
- package/dist/genesispay-settlement.js.map +1 -1
- package/dist/index.d.ts +11 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -4
- package/dist/index.js.map +1 -1
- package/dist/invoices.d.ts +31 -0
- package/dist/invoices.d.ts.map +1 -1
- package/dist/invoices.js +61 -2
- package/dist/invoices.js.map +1 -1
- package/dist/item-tax.d.ts +15 -0
- package/dist/item-tax.d.ts.map +1 -0
- package/dist/item-tax.js +19 -0
- package/dist/item-tax.js.map +1 -0
- package/dist/mandate-gate.d.ts +6 -1
- package/dist/mandate-gate.d.ts.map +1 -1
- package/dist/mandate-gate.js +81 -7
- package/dist/mandate-gate.js.map +1 -1
- package/dist/mandates.d.ts +21 -4
- package/dist/mandates.d.ts.map +1 -1
- package/dist/mandates.js +24 -3
- package/dist/mandates.js.map +1 -1
- package/dist/networks.d.ts.map +1 -1
- package/dist/networks.js +5 -4
- package/dist/networks.js.map +1 -1
- package/dist/payment-gate.d.ts +32 -1
- package/dist/payment-gate.d.ts.map +1 -1
- package/dist/payment-gate.js +275 -11
- package/dist/payment-gate.js.map +1 -1
- package/dist/products.d.ts +40 -16
- package/dist/products.d.ts.map +1 -1
- package/dist/products.js +1078 -56
- package/dist/products.js.map +1 -1
- package/dist/strict-response.d.ts +21 -0
- package/dist/strict-response.d.ts.map +1 -0
- package/dist/strict-response.js +68 -0
- package/dist/strict-response.js.map +1 -0
- package/dist/webhooks.d.ts +77 -2
- package/dist/webhooks.d.ts.map +1 -1
- package/dist/webhooks.js +20 -0
- package/dist/webhooks.js.map +1 -1
- package/package.json +3 -3
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,UAAU,EACV,KAAK,iBAAiB,EACtB,KAAK,uBAAuB,EAC5B,KAAK,YAAY,EACjB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,KAAK,UAAU,EACf,KAAK,aAAa,GACnB,MAAM,aAAa,CAAC;AAMrB,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAC3B,KAAK,eAAe,EACpB,KAAK,aAAa,GACnB,MAAM,YAAY,CAAC;AAIpB,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
// @genesis-tech/genesispay-seller — framework-agnostic x402 payment gate.
|
|
2
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";
|
|
3
5
|
// Every SDK method throws from this set: 404 → NotFound, 422 (and 400 when the
|
|
4
6
|
// body carries structured `issues`) → Validation, 429 → RateLimit (with
|
|
5
|
-
// `retryAfterSeconds`),
|
|
6
|
-
|
|
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";
|
|
7
10
|
export { constructEvent, isKnownGenesisPayEventType, GENESISPAY_EVENT_TYPES, GenesisPaySignatureVerificationError, } from "./webhooks.js";
|
|
8
11
|
export { createPaymentGate, } from "./payment-gate.js";
|
|
9
12
|
export { genesisPaySettlement, DEFAULT_FACILITATOR_BASE_URL, } from "./genesispay-settlement.js";
|
|
@@ -11,8 +14,8 @@ export { resolvePaymentGateNetwork, } from "./networks.js";
|
|
|
11
14
|
export { parseUsdcAmountToMinorUnits } from "./usdc-amount.js";
|
|
12
15
|
// Checkout return parameters: the query-parameter names GenesisPay appends to a
|
|
13
16
|
// merchant's `returnUrl`, plus the typed hint parser that reads them back. The
|
|
14
|
-
// hint is a UI convenience, not proof of payment —
|
|
15
|
-
// `
|
|
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.
|
|
16
19
|
export { CHECKOUT_RETURN_LINK_ID_PARAM, CHECKOUT_RETURN_STATUS_PARAM, parseCheckoutReturnHint, } from "./checkout-return.js";
|
|
17
20
|
export { createMandateGate, MANDATE_HEADER, } from "./mandate-gate.js";
|
|
18
21
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAE1E,OAAO,EACL,UAAU,
|
|
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"}
|
package/dist/invoices.d.ts
CHANGED
|
@@ -1,24 +1,31 @@
|
|
|
1
1
|
import { type Customer } from "./customers.js";
|
|
2
|
+
import { type ItemTax } from "./item-tax.js";
|
|
2
3
|
import { type GenesisPayRequest } from "./resource.js";
|
|
3
4
|
export type InvoiceStatus = "draft" | "open" | "past_due" | "paid" | "void" | "uncollectible";
|
|
4
5
|
export type InvoiceLineInput = {
|
|
6
|
+
/** Required for new v2 invoices; absent only when editing a legacy v1 draft. */
|
|
7
|
+
taxConfig?: ItemTax;
|
|
5
8
|
description: string;
|
|
6
9
|
quantity: number;
|
|
7
10
|
/** Decimal amount in the invoice asset, as a string with up to 6 decimals. */
|
|
8
11
|
unitAmount: string;
|
|
9
12
|
};
|
|
10
13
|
export type InvoiceDraftInput = {
|
|
14
|
+
/** New invoices are v2 (inclusive per-line tax); v1 is retained drafts only. */
|
|
15
|
+
calculationVersion?: 1 | 2;
|
|
11
16
|
customerId: string;
|
|
12
17
|
asset?: "USDC" | "EURC";
|
|
13
18
|
/** ISO-8601 timestamp with an offset. */
|
|
14
19
|
dueAt: string;
|
|
15
20
|
discountBps?: number;
|
|
21
|
+
/** Legacy v1 only. New invoices use lineItems[].taxConfig and taxBps=0. */
|
|
16
22
|
taxBps?: number;
|
|
17
23
|
memo?: string;
|
|
18
24
|
footer?: string;
|
|
19
25
|
lineItems: InvoiceLineInput[];
|
|
20
26
|
};
|
|
21
27
|
export type Invoice = {
|
|
28
|
+
calculationVersion: 1 | 2;
|
|
22
29
|
id: string;
|
|
23
30
|
publicId: string;
|
|
24
31
|
invoiceNumber: string | null;
|
|
@@ -33,6 +40,11 @@ export type Invoice = {
|
|
|
33
40
|
quantity: number;
|
|
34
41
|
unitAmountMinor: string;
|
|
35
42
|
amountMinor: string;
|
|
43
|
+
taxConfig: ItemTax | null;
|
|
44
|
+
subtotalMinor: string | null;
|
|
45
|
+
discountMinor: string | null;
|
|
46
|
+
taxMinor: string | null;
|
|
47
|
+
totalMinor: string | null;
|
|
36
48
|
}>;
|
|
37
49
|
subtotalMinor: string;
|
|
38
50
|
discountBps: number;
|
|
@@ -63,9 +75,28 @@ export type InvoiceEmailDelivery = {
|
|
|
63
75
|
providerMessageId: string | null;
|
|
64
76
|
sentAt: string | null;
|
|
65
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
|
+
};
|
|
66
94
|
export interface InvoicesResource {
|
|
67
95
|
create(input: InvoiceDraftInput): Promise<Invoice>;
|
|
96
|
+
/** Legacy full resources: at most the newest 100 invoices. */
|
|
68
97
|
list(): Promise<Invoice[]>;
|
|
98
|
+
/** Bounded summaries, default 25/max 100; follow nextCursor for older invoices. */
|
|
99
|
+
listSummaries(options?: InvoiceSummaryListOptions): Promise<InvoiceSummaryPage>;
|
|
69
100
|
retrieve(publicId: string): Promise<Invoice>;
|
|
70
101
|
update(publicId: string, input: InvoiceDraftInput): Promise<Invoice>;
|
|
71
102
|
finalize(publicId: string): Promise<Invoice>;
|
package/dist/invoices.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"invoices.d.ts","sourceRoot":"","sources":["../src/invoices.ts"],"names":[],"mappings":"AAGA,OAAO,EAAc,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EAOL,KAAK,iBAAiB,EACvB,MAAM,eAAe,CAAC;AAEvB,MAAM,MAAM,aAAa,GACrB,OAAO,GACP,MAAM,GACN,UAAU,GACV,MAAM,GACN,MAAM,GACN,eAAe,CAAC;AAEpB,MAAM,MAAM,gBAAgB,GAAG;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,8EAA8E;IAC9E,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,yCAAyC;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,gBAAgB,EAAE,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,MAAM,EAAE,aAAa,CAAC;IACtB,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,QAAQ,CAAC;IACnB,SAAS,EAAE,KAAK,CAAC;QACf,EAAE,EAAE,MAAM,CAAC;QACX,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;QACjB,eAAe,EAAE,MAAM,CAAC;QACxB,WAAW,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"invoices.d.ts","sourceRoot":"","sources":["../src/invoices.ts"],"names":[],"mappings":"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"}
|
package/dist/invoices.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
// `genesispay.invoices.*` — one-off invoice lifecycle over `/api/v1/invoices`.
|
|
2
2
|
import { GenesisPayConfigError } from "./errors.js";
|
|
3
3
|
import { toCustomer } from "./customers.js";
|
|
4
|
+
import { parseItemTax } from "./item-tax.js";
|
|
4
5
|
import { asRecord, oneOf, optionalString, requiredString, toAmountString, toCount, } from "./resource.js";
|
|
5
6
|
export function createInvoicesResource(request) {
|
|
6
7
|
return {
|
|
7
|
-
create: async (input) => invoiceRequest(request, "POST", "/api/v1/invoices", input, "create an invoice"),
|
|
8
|
+
create: async (input) => invoiceRequest(request, "POST", "/api/v1/invoices", validateInvoiceTax(input, true), "create an invoice"),
|
|
8
9
|
list: async () => {
|
|
9
10
|
const body = await request({
|
|
10
11
|
path: "/api/v1/invoices",
|
|
@@ -20,13 +21,31 @@ export function createInvoicesResource(request) {
|
|
|
20
21
|
.filter((row) => Boolean(row?.publicId))
|
|
21
22
|
.map(toInvoice);
|
|
22
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
|
+
},
|
|
23
42
|
retrieve: async (publicId) => {
|
|
24
43
|
const id = requirePublicId(publicId, "invoices.retrieve");
|
|
25
44
|
return invoiceRequest(request, "GET", `/api/v1/invoices/${encodeURIComponent(id)}`, undefined, `retrieve invoice "${id}"`);
|
|
26
45
|
},
|
|
27
46
|
update: async (publicId, input) => {
|
|
28
47
|
const id = requirePublicId(publicId, "invoices.update");
|
|
29
|
-
return invoiceRequest(request, "PATCH", `/api/v1/invoices/${encodeURIComponent(id)}`, input, `update invoice "${id}"`);
|
|
48
|
+
return invoiceRequest(request, "PATCH", `/api/v1/invoices/${encodeURIComponent(id)}`, validateInvoiceTax(input, false), `update invoice "${id}"`);
|
|
30
49
|
},
|
|
31
50
|
finalize: async (publicId) => transition(request, publicId, "finalize", "finalize an invoice"),
|
|
32
51
|
void: async (publicId) => transition(request, publicId, "void", "void an invoice"),
|
|
@@ -88,6 +107,7 @@ export function toInvoice(raw) {
|
|
|
88
107
|
const payment = asRecord(raw.payment) ?? {};
|
|
89
108
|
const lines = Array.isArray(raw.lineItems) ? raw.lineItems : [];
|
|
90
109
|
return {
|
|
110
|
+
calculationVersion: raw.calculationVersion === 2 ? 2 : 1,
|
|
91
111
|
id: requiredString(raw.id),
|
|
92
112
|
publicId: requiredString(raw.publicId),
|
|
93
113
|
invoiceNumber: optionalString(raw.invoiceNumber),
|
|
@@ -105,6 +125,11 @@ export function toInvoice(raw) {
|
|
|
105
125
|
quantity: toCount(line.quantity),
|
|
106
126
|
unitAmountMinor: toAmountString(line.unitAmountMinor),
|
|
107
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),
|
|
108
133
|
})),
|
|
109
134
|
subtotalMinor: toAmountString(raw.subtotalMinor),
|
|
110
135
|
discountBps: toCount(raw.discountBps),
|
|
@@ -130,4 +155,38 @@ export function toInvoice(raw) {
|
|
|
130
155
|
},
|
|
131
156
|
};
|
|
132
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
|
+
}
|
|
133
192
|
//# sourceMappingURL=invoices.js.map
|
package/dist/invoices.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"invoices.js","sourceRoot":"","sources":["../src/invoices.ts"],"names":[],"mappings":"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"}
|
|
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"}
|
package/dist/item-tax.js
ADDED
|
@@ -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"}
|
package/dist/mandate-gate.d.ts
CHANGED
|
@@ -34,10 +34,15 @@ export type MandateChargeOutcome = {
|
|
|
34
34
|
status: number;
|
|
35
35
|
code?: string;
|
|
36
36
|
error: string;
|
|
37
|
+
charge?: {
|
|
38
|
+
id: string;
|
|
39
|
+
amountMinor: string;
|
|
40
|
+
txHash: string | null;
|
|
41
|
+
};
|
|
37
42
|
};
|
|
38
43
|
export type MandateGate = {
|
|
39
44
|
/** Charges the mandate once. Exposed for custom flows. */
|
|
40
|
-
charge: (mandateId: string, resourceUrl
|
|
45
|
+
charge: (mandateId: string, resourceUrl: string | undefined, idempotencyKey: string) => Promise<MandateChargeOutcome>;
|
|
41
46
|
/**
|
|
42
47
|
* Wraps a fetch-style handler: requests carrying a valid `GENESISPAY-MANDATE`
|
|
43
48
|
* header are charged and passed through; requests without one get a 402
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mandate-gate.d.ts","sourceRoot":"","sources":["../src/mandate-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;
|
|
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"}
|
package/dist/mandate-gate.js
CHANGED
|
@@ -9,7 +9,18 @@
|
|
|
9
9
|
* charge settled. Combine with `createPaymentGate` to accept both per-call
|
|
10
10
|
* x402 payments and mandate-metered calls on one endpoint.
|
|
11
11
|
*/
|
|
12
|
+
import { parseUsdcAmountToMinorUnits } from "./usdc-amount.js";
|
|
12
13
|
export const MANDATE_HEADER = "GENESISPAY-MANDATE";
|
|
14
|
+
const MANDATE_IDEMPOTENCY_KEY = /^[A-Za-z0-9][A-Za-z0-9._:-]{7,199}$/;
|
|
15
|
+
const TRANSACTION_HASH = /^0x[0-9a-f]{64}$/i;
|
|
16
|
+
function validIdempotencyKey(value) {
|
|
17
|
+
const key = value?.trim();
|
|
18
|
+
return key &&
|
|
19
|
+
key.toLowerCase() !== "undefined" &&
|
|
20
|
+
MANDATE_IDEMPOTENCY_KEY.test(key)
|
|
21
|
+
? key
|
|
22
|
+
: null;
|
|
23
|
+
}
|
|
13
24
|
export function createMandateGate(options) {
|
|
14
25
|
const apiKey = options.apiKey?.trim();
|
|
15
26
|
if (!apiKey) {
|
|
@@ -22,8 +33,18 @@ export function createMandateGate(options) {
|
|
|
22
33
|
if (!/^\d+(\.\d{1,6})?$/.test(options.amount)) {
|
|
23
34
|
throw new Error("createMandateGate requires a decimal amount with up to 6 decimals, e.g. \"0.08\".");
|
|
24
35
|
}
|
|
36
|
+
const expectedAmountMinor = parseUsdcAmountToMinorUnits(options.amount).toString();
|
|
25
37
|
const fetchFn = options.fetchFn ?? fetch;
|
|
26
|
-
async function charge(mandateId, resourceUrl) {
|
|
38
|
+
async function charge(mandateId, resourceUrl, idempotencyKey) {
|
|
39
|
+
const stableKey = validIdempotencyKey(idempotencyKey);
|
|
40
|
+
if (!stableKey) {
|
|
41
|
+
return {
|
|
42
|
+
ok: false,
|
|
43
|
+
status: 400,
|
|
44
|
+
code: "invalid_idempotency_key",
|
|
45
|
+
error: "Idempotency-Key is required for mandate charges and must be reused after an outcome-unknown response.",
|
|
46
|
+
};
|
|
47
|
+
}
|
|
27
48
|
let response;
|
|
28
49
|
try {
|
|
29
50
|
response = await fetchFn(`${baseUrl}/api/v1/mandates/${encodeURIComponent(mandateId)}/charge`, {
|
|
@@ -31,6 +52,7 @@ export function createMandateGate(options) {
|
|
|
31
52
|
headers: {
|
|
32
53
|
"Content-Type": "application/json",
|
|
33
54
|
Authorization: `Bearer ${apiKey}`,
|
|
55
|
+
"Idempotency-Key": stableKey,
|
|
34
56
|
},
|
|
35
57
|
body: JSON.stringify({
|
|
36
58
|
amount: options.amount,
|
|
@@ -55,6 +77,7 @@ export function createMandateGate(options) {
|
|
|
55
77
|
}
|
|
56
78
|
const record = (body ?? {});
|
|
57
79
|
if (!response.ok) {
|
|
80
|
+
const chargeRecord = (record.charge ?? null);
|
|
58
81
|
return {
|
|
59
82
|
ok: false,
|
|
60
83
|
status: response.status,
|
|
@@ -62,15 +85,55 @@ export function createMandateGate(options) {
|
|
|
62
85
|
error: typeof record.error === "string"
|
|
63
86
|
? record.error
|
|
64
87
|
: `GenesisPay rejected the mandate charge (${response.status}).`,
|
|
88
|
+
...(chargeRecord && typeof chargeRecord.id === "string"
|
|
89
|
+
? {
|
|
90
|
+
charge: {
|
|
91
|
+
id: chargeRecord.id,
|
|
92
|
+
amountMinor: String(chargeRecord.amountMinor ?? ""),
|
|
93
|
+
txHash: typeof chargeRecord.txHash === "string"
|
|
94
|
+
? chargeRecord.txHash
|
|
95
|
+
: null,
|
|
96
|
+
},
|
|
97
|
+
}
|
|
98
|
+
: {}),
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
const chargeRecord = record.charge &&
|
|
102
|
+
typeof record.charge === "object" &&
|
|
103
|
+
!Array.isArray(record.charge)
|
|
104
|
+
? record.charge
|
|
105
|
+
: null;
|
|
106
|
+
const chargeId = typeof chargeRecord?.id === "string" ? chargeRecord.id : "";
|
|
107
|
+
const amountMinor = typeof chargeRecord?.amountMinor === "string"
|
|
108
|
+
? chargeRecord.amountMinor
|
|
109
|
+
: "";
|
|
110
|
+
const txHash = typeof chargeRecord?.txHash === "string" ? chargeRecord.txHash : "";
|
|
111
|
+
if (chargeRecord?.status !== "settled" ||
|
|
112
|
+
chargeId.trim().length === 0 ||
|
|
113
|
+
amountMinor !== expectedAmountMinor ||
|
|
114
|
+
!TRANSACTION_HASH.test(txHash)) {
|
|
115
|
+
return {
|
|
116
|
+
ok: false,
|
|
117
|
+
status: 503,
|
|
118
|
+
code: "charge_response_unverified",
|
|
119
|
+
error: "GenesisPay did not return a verified settled mandate charge. Do not retry with a new Idempotency-Key.",
|
|
120
|
+
...(chargeId.trim().length > 0
|
|
121
|
+
? {
|
|
122
|
+
charge: {
|
|
123
|
+
id: chargeId,
|
|
124
|
+
amountMinor,
|
|
125
|
+
txHash: TRANSACTION_HASH.test(txHash) ? txHash : null,
|
|
126
|
+
},
|
|
127
|
+
}
|
|
128
|
+
: {}),
|
|
65
129
|
};
|
|
66
130
|
}
|
|
67
|
-
const chargeRecord = (record.charge ?? {});
|
|
68
131
|
return {
|
|
69
132
|
ok: true,
|
|
70
133
|
charge: {
|
|
71
|
-
id:
|
|
72
|
-
amountMinor
|
|
73
|
-
txHash
|
|
134
|
+
id: chargeId,
|
|
135
|
+
amountMinor,
|
|
136
|
+
txHash,
|
|
74
137
|
},
|
|
75
138
|
};
|
|
76
139
|
}
|
|
@@ -84,9 +147,20 @@ export function createMandateGate(options) {
|
|
|
84
147
|
amount: options.amount,
|
|
85
148
|
}, 402);
|
|
86
149
|
}
|
|
87
|
-
const
|
|
150
|
+
const idempotencyKey = validIdempotencyKey(request.headers.get("Idempotency-Key"));
|
|
151
|
+
if (!idempotencyKey) {
|
|
152
|
+
return jsonResponse({
|
|
153
|
+
error: "Idempotency-Key is required for a mandate-metered request and must be reused after a timeout.",
|
|
154
|
+
code: "invalid_idempotency_key",
|
|
155
|
+
}, 400);
|
|
156
|
+
}
|
|
157
|
+
const outcome = await charge(mandateId, request.url, idempotencyKey);
|
|
88
158
|
if (!outcome.ok) {
|
|
89
|
-
return jsonResponse({
|
|
159
|
+
return jsonResponse({
|
|
160
|
+
error: outcome.error,
|
|
161
|
+
code: outcome.code,
|
|
162
|
+
...(outcome.charge ? { charge: outcome.charge } : {}),
|
|
163
|
+
}, outcome.status);
|
|
90
164
|
}
|
|
91
165
|
const response = await handler(request);
|
|
92
166
|
const headers = new Headers(response.headers);
|
package/dist/mandate-gate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mandate-gate.js","sourceRoot":"","sources":["../src/mandate-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"mandate-gate.js","sourceRoot":"","sources":["../src/mandate-gate.ts"],"names":[],"mappings":"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"}
|
package/dist/mandates.d.ts
CHANGED
|
@@ -1,8 +1,16 @@
|
|
|
1
1
|
import { type GenesisPayRequest } from "./resource.js";
|
|
2
|
+
import { type ContractUsageCharge, type ContractUsageInput } from "./contract-usage.js";
|
|
3
|
+
import type { Hex } from "viem";
|
|
4
|
+
import { type ContractPerUseCreateInput, type ContractPerUseCreateResult, type ContractSubscriptionCreateInput, type ContractSubscriptionCreateResult } from "./contract-mandates.js";
|
|
2
5
|
export type MandateKind = "per_use" | "subscription";
|
|
3
|
-
export type MandateStatus = "pending_permit" | "active" | "past_due" | "revoked" | "expired";
|
|
4
|
-
export type MandateChargeStatus = "pending" | "settled" | "failed";
|
|
6
|
+
export type MandateStatus = "pending_permit" | "active" | "past_due" | "revoked" | "expired" | "cancelled";
|
|
7
|
+
export type MandateChargeStatus = "pending" | "submitted" | "settled" | "failed";
|
|
5
8
|
export type Mandate = {
|
|
9
|
+
protocol?: "contract_mandate_v1";
|
|
10
|
+
activationStatus?: "proposed" | "submitted" | "confirmed";
|
|
11
|
+
revocationStatus?: "none" | "requested" | "confirmed";
|
|
12
|
+
executor?: string;
|
|
13
|
+
contractVersion?: string;
|
|
6
14
|
id: string;
|
|
7
15
|
kind: MandateKind;
|
|
8
16
|
status: MandateStatus;
|
|
@@ -33,7 +41,7 @@ export type Mandate = {
|
|
|
33
41
|
permitDeadline: string;
|
|
34
42
|
permitTxHash: string | null;
|
|
35
43
|
createdAt: string;
|
|
36
|
-
/** Set
|
|
44
|
+
/** Set after canonical activation confirmation. HTTP acceptance is not activation. */
|
|
37
45
|
activatedAt: string | null;
|
|
38
46
|
revokedAt: string | null;
|
|
39
47
|
};
|
|
@@ -90,6 +98,8 @@ export type MandateCreateResult = {
|
|
|
90
98
|
export type MandateChargeInput = {
|
|
91
99
|
/** Decimal amount, e.g. "0.08". Must not exceed the mandate's cap per charge. */
|
|
92
100
|
amount: string;
|
|
101
|
+
/** Stable identity for this logical usage request; reuse it after timeouts. */
|
|
102
|
+
idempotencyKey: string;
|
|
93
103
|
/** What was paid for — surfaced to the payer in their mandate history. */
|
|
94
104
|
resourceUrl?: string;
|
|
95
105
|
description?: string;
|
|
@@ -128,6 +138,13 @@ export interface MandatesResource {
|
|
|
128
138
|
* payer's frontend — see the note at the top of this module on `activate`.
|
|
129
139
|
*/
|
|
130
140
|
create(input: MandateCreateInput): Promise<MandateCreateResult>;
|
|
141
|
+
/** Explicit two-signature contract protocol. New capabilities remain gated by the deployment. */
|
|
142
|
+
createContractSubscription(input: ContractSubscriptionCreateInput): Promise<ContractSubscriptionCreateResult>;
|
|
143
|
+
/** Bounded per-use consent; every later charge needs a separate payer signature. */
|
|
144
|
+
createContractPerUse(input: ContractPerUseCreateInput): Promise<ContractPerUseCreateResult>;
|
|
145
|
+
proposeContractUsage(input: ContractUsageInput): Promise<ContractUsageCharge>;
|
|
146
|
+
submitContractUsage(proposal: ContractUsageCharge, signature: Hex): Promise<ContractUsageCharge>;
|
|
147
|
+
getContractUsage(proposal: ContractUsageCharge): Promise<ContractUsageCharge>;
|
|
131
148
|
/**
|
|
132
149
|
* One page of this account's mandates, newest first.
|
|
133
150
|
*
|
|
@@ -164,7 +181,7 @@ export interface MandatesResource {
|
|
|
164
181
|
retrieve(id: string): Promise<Mandate>;
|
|
165
182
|
/** Pulls a single charge. Signature-free — this is the metered path. */
|
|
166
183
|
charge(id: string, input: MandateChargeInput): Promise<MandateCharge>;
|
|
167
|
-
/**
|
|
184
|
+
/** Requests cancellation. Contract mandates require confirmed payer revocation before authority is extinguished. */
|
|
168
185
|
revoke(id: string): Promise<Mandate>;
|
|
169
186
|
}
|
|
170
187
|
export declare function createMandatesResource(request: GenesisPayRequest): MandatesResource;
|
package/dist/mandates.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mandates.d.ts","sourceRoot":"","sources":["../src/mandates.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mandates.d.ts","sourceRoot":"","sources":["../src/mandates.ts"],"names":[],"mappings":"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"}
|