@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.
- package/CHANGELOG.md +206 -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 +41 -0
- package/dist/checkout-return.d.ts.map +1 -0
- package/dist/checkout-return.js +68 -0
- package/dist/checkout-return.js.map +1 -0
- package/dist/client.d.ts +318 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +718 -0
- package/dist/client.js.map +1 -0
- 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/customers.d.ts +41 -0
- package/dist/customers.d.ts.map +1 -0
- package/dist/customers.js +76 -0
- package/dist/customers.js.map +1 -0
- package/dist/entitlements.d.ts +19 -0
- package/dist/entitlements.d.ts.map +1 -0
- package/dist/entitlements.js +30 -0
- package/dist/entitlements.js.map +1 -0
- package/dist/errors.d.ts +129 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +273 -0
- package/dist/errors.js.map +1 -0
- 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 +32 -0
- package/dist/genesispay-settlement.d.ts.map +1 -0
- package/dist/genesispay-settlement.js +500 -0
- package/dist/genesispay-settlement.js.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/dist/invoices.d.ts +111 -0
- package/dist/invoices.d.ts.map +1 -0
- package/dist/invoices.js +192 -0
- package/dist/invoices.js.map +1 -0
- 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 +54 -0
- package/dist/mandate-gate.d.ts.map +1 -0
- package/dist/mandate-gate.js +183 -0
- package/dist/mandate-gate.js.map +1 -0
- package/dist/mandates.d.ts +189 -0
- package/dist/mandates.d.ts.map +1 -0
- package/dist/mandates.js +234 -0
- package/dist/mandates.js.map +1 -0
- package/dist/networks.d.ts +10 -0
- package/dist/networks.d.ts.map +1 -0
- package/dist/networks.js +23 -0
- package/dist/networks.js.map +1 -0
- package/dist/payment-gate.d.ts +98 -0
- package/dist/payment-gate.d.ts.map +1 -0
- package/dist/payment-gate.js +370 -0
- package/dist/payment-gate.js.map +1 -0
- package/dist/plans.d.ts +68 -0
- package/dist/plans.d.ts.map +1 -0
- package/dist/plans.js +127 -0
- package/dist/plans.js.map +1 -0
- package/dist/products.d.ts +170 -0
- package/dist/products.d.ts.map +1 -0
- package/dist/products.js +1317 -0
- package/dist/products.js.map +1 -0
- package/dist/resource.d.ts +47 -0
- package/dist/resource.d.ts.map +1 -0
- package/dist/resource.js +71 -0
- package/dist/resource.js.map +1 -0
- 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/usdc-amount.d.ts +7 -0
- package/dist/usdc-amount.d.ts.map +1 -0
- package/dist/usdc-amount.js +21 -0
- package/dist/usdc-amount.js.map +1 -0
- package/dist/webhooks.d.ts +352 -0
- package/dist/webhooks.d.ts.map +1 -0
- package/dist/webhooks.js +244 -0
- package/dist/webhooks.js.map +1 -0
- package/package.json +4 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"networks.d.ts","sourceRoot":"","sources":["../src/networks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAC;AAGpE,yDAAyD;AACzD,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,cAAc,CAAC;AAEzD,MAAM,MAAM,wBAAwB,GAAG;IACrC,OAAO,EAAE,kBAAkB,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,UAAU,CAAC;CACzB,CAAC;AAmBF,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,kBAAkB,GAC1B,wBAAwB,CAU1B"}
|
package/dist/networks.js
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { GENESISPAY_ASSET_DEPLOYMENTS } from "@genesis-tech/genesispay-protocol";
|
|
2
|
+
const BASE_MAINNET = {
|
|
3
|
+
network: "base",
|
|
4
|
+
chainId: GENESISPAY_ASSET_DEPLOYMENTS.live.USDC.chainId,
|
|
5
|
+
usdcAddress: GENESISPAY_ASSET_DEPLOYMENTS.live.USDC.tokenAddress,
|
|
6
|
+
};
|
|
7
|
+
const BASE_SEPOLIA = {
|
|
8
|
+
network: "base-sepolia",
|
|
9
|
+
chainId: GENESISPAY_ASSET_DEPLOYMENTS.test.USDC.chainId,
|
|
10
|
+
usdcAddress: GENESISPAY_ASSET_DEPLOYMENTS.test.USDC.tokenAddress,
|
|
11
|
+
};
|
|
12
|
+
const NETWORK_CONFIGS = {
|
|
13
|
+
base: BASE_MAINNET,
|
|
14
|
+
"base-sepolia": BASE_SEPOLIA,
|
|
15
|
+
};
|
|
16
|
+
export function resolvePaymentGateNetwork(network) {
|
|
17
|
+
const config = NETWORK_CONFIGS[network];
|
|
18
|
+
if (!config) {
|
|
19
|
+
throw new Error(`Unsupported network "${String(network)}". Supported networks: ${Object.keys(NETWORK_CONFIGS).join(", ")}.`);
|
|
20
|
+
}
|
|
21
|
+
return config;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=networks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"networks.js","sourceRoot":"","sources":["../src/networks.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,4BAA4B,EAAE,MAAM,mCAAmC,CAAC;AAWjF,MAAM,YAAY,GAA6B;IAC7C,OAAO,EAAE,MAAM;IACf,OAAO,EAAE,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO;IACvD,WAAW,EAAE,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY;CACjE,CAAC;AAEF,MAAM,YAAY,GAA6B;IAC7C,OAAO,EAAE,cAAc;IACvB,OAAO,EAAE,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO;IACvD,WAAW,EAAE,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY;CACjE,CAAC;AAEF,MAAM,eAAe,GAAyD;IAC5E,IAAI,EAAE,YAAY;IAClB,cAAc,EAAE,YAAY;CAC7B,CAAC;AAEF,MAAM,UAAU,yBAAyB,CACvC,OAA2B;IAE3B,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IAExC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACb,wBAAwB,MAAM,CAAC,OAAO,CAAC,0BAA0B,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAC5G,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import type { EvmAddress, PaymentAccept, PaymentSignaturePayload, SettlementResponsePayload } from "@genesis-tech/genesispay-protocol";
|
|
2
|
+
import type { PaymentGateNetwork } from "./networks.js";
|
|
3
|
+
export type PaymentGateConfig = {
|
|
4
|
+
/** Human-readable decimal USDC amount, e.g. "0.10". */
|
|
5
|
+
amountUsdc: string;
|
|
6
|
+
/** Wallet that receives the USDC payment. */
|
|
7
|
+
payTo: string;
|
|
8
|
+
/** Shown to payers in the PAYMENT-REQUIRED payload. */
|
|
9
|
+
description?: string;
|
|
10
|
+
/** Defaults to "base-sepolia". */
|
|
11
|
+
network?: PaymentGateNetwork;
|
|
12
|
+
/**
|
|
13
|
+
* Canonical resource URL advertised in PAYMENT-REQUIRED. Defaults to the
|
|
14
|
+
* incoming request URL (origin + pathname, query stripped).
|
|
15
|
+
*/
|
|
16
|
+
resource?: string;
|
|
17
|
+
/** MIME type of the paid resource. Defaults to "application/json". */
|
|
18
|
+
mimeType?: string;
|
|
19
|
+
/** Payment authorization validity window advertised to payers. */
|
|
20
|
+
maxTimeoutSeconds?: number;
|
|
21
|
+
/**
|
|
22
|
+
* EIP-712 domain (`name`/`version`) of the settlement asset contract,
|
|
23
|
+
* advertised as the x402 `extra` field so generic clients sign with the
|
|
24
|
+
* exact domain the contract's DOMAIN_SEPARATOR() uses (e.g. Base mainnet
|
|
25
|
+
* USDC is { name: "USD Coin", version: "2" }). Omitted by default —
|
|
26
|
+
* clients then fall back to the standard "USDC"/"2" domain.
|
|
27
|
+
*/
|
|
28
|
+
eip712Domain?: {
|
|
29
|
+
name: string;
|
|
30
|
+
version: string;
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
/** Context handed to the settlement hook once a payment passed structural checks. */
|
|
34
|
+
export type SettlementContext = {
|
|
35
|
+
request: Request;
|
|
36
|
+
/** The raw PAYMENT-SIGNATURE header value, ready to forward to a facilitator. */
|
|
37
|
+
paymentSignatureHeader: string;
|
|
38
|
+
/** The decoded, structurally validated payment payload. */
|
|
39
|
+
payment: PaymentSignaturePayload;
|
|
40
|
+
/** The payment requirement this request must satisfy. */
|
|
41
|
+
requirement: PaymentAccept;
|
|
42
|
+
/** Persisted authority prepared before the payer signed. */
|
|
43
|
+
planId?: string;
|
|
44
|
+
};
|
|
45
|
+
export type PreparedSettlement = {
|
|
46
|
+
settlementPlan: {
|
|
47
|
+
planId: string;
|
|
48
|
+
sellerAuthorization: {
|
|
49
|
+
from: EvmAddress;
|
|
50
|
+
to: EvmAddress;
|
|
51
|
+
value: string;
|
|
52
|
+
validAfter: string;
|
|
53
|
+
validBefore: string;
|
|
54
|
+
nonce: `0x${string}`;
|
|
55
|
+
};
|
|
56
|
+
feeAuthorization: null;
|
|
57
|
+
};
|
|
58
|
+
};
|
|
59
|
+
export type PreparedAuthorizationRequest = {
|
|
60
|
+
sellerNonce: `0x${string}`;
|
|
61
|
+
feeNonce: `0x${string}` | null;
|
|
62
|
+
validBefore: string;
|
|
63
|
+
};
|
|
64
|
+
export type SettlementVerification = {
|
|
65
|
+
ok: true;
|
|
66
|
+
settlement: SettlementResponsePayload;
|
|
67
|
+
} | {
|
|
68
|
+
ok: false;
|
|
69
|
+
errorReason: string;
|
|
70
|
+
settlement?: SettlementResponsePayload;
|
|
71
|
+
/** Signed authority may already be accepted or broadcast; never issue a fresh 402. */
|
|
72
|
+
outcomeUnknown?: true;
|
|
73
|
+
};
|
|
74
|
+
export type VerifySettlement = (context: SettlementContext) => Promise<SettlementVerification>;
|
|
75
|
+
export type PlanAwareVerifySettlement = VerifySettlement & {
|
|
76
|
+
prepare?: (input: {
|
|
77
|
+
payer: EvmAddress;
|
|
78
|
+
idempotencyKey: string | null;
|
|
79
|
+
requirement: PaymentAccept;
|
|
80
|
+
authority?: PreparedAuthorizationRequest;
|
|
81
|
+
}) => Promise<PreparedSettlement>;
|
|
82
|
+
};
|
|
83
|
+
export type WrapOptions = {
|
|
84
|
+
verifySettlement: VerifySettlement;
|
|
85
|
+
};
|
|
86
|
+
type WrappableHandler<Args extends unknown[]> = (request: Request, ...args: Args) => Response | Promise<Response>;
|
|
87
|
+
export type PaymentGate = {
|
|
88
|
+
/**
|
|
89
|
+
* Wraps a Web-standard (Request) => Response handler. Works with Next.js
|
|
90
|
+
* route handlers, Hono (`(c) => gated(c.req.raw)`), and Bun.serve.
|
|
91
|
+
*/
|
|
92
|
+
wrap<Args extends unknown[]>(handler: WrappableHandler<Args>, options: WrapOptions): (request: Request, ...args: Args) => Promise<Response>;
|
|
93
|
+
/** Builds the PAYMENT-REQUIRED requirement for a given resource URL. */
|
|
94
|
+
requirementFor(resource: string): PaymentAccept;
|
|
95
|
+
};
|
|
96
|
+
export declare function createPaymentGate(config: PaymentGateConfig): PaymentGate;
|
|
97
|
+
export {};
|
|
98
|
+
//# sourceMappingURL=payment-gate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payment-gate.d.ts","sourceRoot":"","sources":["../src/payment-gate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,370 @@
|
|
|
1
|
+
import { GENESISPAY_SETTLEMENT_PREPARE_HEADER, GENESISPAY_SETTLEMENT_PREPARE_PARAMS_HEADER, PAYMENT_REQUIRED_HEADER, PAYMENT_RESPONSE_HEADER, PAYMENT_SIGNATURE_HEADER, buildPaymentRequiredPayload, decodePaymentSignatureHeader, decodeSettlementPrepareParamsHeader, encodePaymentRequiredHeader, encodeSettlementResponseHeader, validatePaymentSignatureAgainstRequirement, } from "@genesis-tech/genesispay-protocol";
|
|
2
|
+
import { getAddress, isAddress } from "viem";
|
|
3
|
+
import { resolvePaymentGateNetwork } from "./networks.js";
|
|
4
|
+
import { parseUsdcAmountToMinorUnits } from "./usdc-amount.js";
|
|
5
|
+
export function createPaymentGate(config) {
|
|
6
|
+
const network = resolvePaymentGateNetwork(config.network ?? "base-sepolia");
|
|
7
|
+
const amountUsdcMinor = parseUsdcAmountToMinorUnits(config.amountUsdc);
|
|
8
|
+
const payTo = normalizePayToAddress(config.payTo);
|
|
9
|
+
const description = config.description ?? "Payment required";
|
|
10
|
+
function buildPayload(resource) {
|
|
11
|
+
return buildPaymentRequiredPayload({
|
|
12
|
+
amount: config.amountUsdc.trim(),
|
|
13
|
+
amountUsdcMinor,
|
|
14
|
+
asset: "USDC",
|
|
15
|
+
assetAddress: network.usdcAddress,
|
|
16
|
+
chainId: network.chainId,
|
|
17
|
+
network: network.network,
|
|
18
|
+
destination: payTo,
|
|
19
|
+
description,
|
|
20
|
+
resource,
|
|
21
|
+
mimeType: config.mimeType,
|
|
22
|
+
maxTimeoutSeconds: config.maxTimeoutSeconds,
|
|
23
|
+
extra: config.eip712Domain,
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
function resolveResource(request) {
|
|
27
|
+
if (config.resource) {
|
|
28
|
+
return config.resource;
|
|
29
|
+
}
|
|
30
|
+
const url = new URL(request.url);
|
|
31
|
+
return `${url.origin}${url.pathname}`;
|
|
32
|
+
}
|
|
33
|
+
return {
|
|
34
|
+
requirementFor(resource) {
|
|
35
|
+
return buildPayload(resource).accepts[0];
|
|
36
|
+
},
|
|
37
|
+
wrap(handler, options) {
|
|
38
|
+
if (typeof options?.verifySettlement !== "function") {
|
|
39
|
+
throw new Error("gate.wrap requires a verifySettlement hook — use genesisPaySettlement({ facilitatorBaseUrl, apiKey }) or provide your own.");
|
|
40
|
+
}
|
|
41
|
+
return async (request, ...args) => {
|
|
42
|
+
const planAwareVerifier = options.verifySettlement;
|
|
43
|
+
const payload = buildPayload(resolveResource(request));
|
|
44
|
+
const paymentSignatureHeader = request.headers.get(PAYMENT_SIGNATURE_HEADER);
|
|
45
|
+
if (!paymentSignatureHeader?.trim() &&
|
|
46
|
+
request.headers.get(GENESISPAY_SETTLEMENT_PREPARE_HEADER) === "1") {
|
|
47
|
+
if (!planAwareVerifier.prepare) {
|
|
48
|
+
return new Response(JSON.stringify({
|
|
49
|
+
error: "This gate does not support settlement preparation.",
|
|
50
|
+
code: "settlement_plan_required",
|
|
51
|
+
}), { status: 426, headers: { "Content-Type": "application/json" } });
|
|
52
|
+
}
|
|
53
|
+
const paramsHeader = request.headers.get(GENESISPAY_SETTLEMENT_PREPARE_PARAMS_HEADER);
|
|
54
|
+
const prepareParams = paramsHeader === null
|
|
55
|
+
? await readLegacyPrepareBody(request)
|
|
56
|
+
: readPrepareParamsHeader(paramsHeader);
|
|
57
|
+
if (!prepareParams.ok)
|
|
58
|
+
return prepareParams.response;
|
|
59
|
+
const { payer, idempotencyKey, authority } = prepareParams;
|
|
60
|
+
try {
|
|
61
|
+
const prepared = await planAwareVerifier.prepare({
|
|
62
|
+
payer,
|
|
63
|
+
idempotencyKey,
|
|
64
|
+
requirement: payload.accepts[0],
|
|
65
|
+
...(authority ? { authority } : {}),
|
|
66
|
+
});
|
|
67
|
+
return Response.json(prepared, {
|
|
68
|
+
status: 201,
|
|
69
|
+
headers: { "Cache-Control": "no-store" },
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
return new Response(JSON.stringify({ error: describeError(error), code: "settlement_prepare_failed" }), { status: 502, headers: { "Content-Type": "application/json" } });
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
if (!paymentSignatureHeader?.trim()) {
|
|
77
|
+
return paymentRequiredResponse(payload, undefined, undefined, planAwareVerifier.prepare ? request.url : undefined);
|
|
78
|
+
}
|
|
79
|
+
let payment;
|
|
80
|
+
try {
|
|
81
|
+
payment = decodePaymentSignatureHeader(paymentSignatureHeader);
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
return paymentRequiredResponse(payload, describeError(error));
|
|
85
|
+
}
|
|
86
|
+
const planId = request.headers.get("GENESISPAY-Settlement-Plan");
|
|
87
|
+
if (planAwareVerifier.prepare &&
|
|
88
|
+
!planId &&
|
|
89
|
+
!hasHistoricalSettlementTransaction(payment)) {
|
|
90
|
+
return new Response(JSON.stringify({
|
|
91
|
+
error: "Prepare a versioned settlement plan before signing.",
|
|
92
|
+
code: "settlement_plan_required",
|
|
93
|
+
}), { status: 426, headers: { "Content-Type": "application/json" } });
|
|
94
|
+
}
|
|
95
|
+
let requirement = payload.accepts[0];
|
|
96
|
+
const mismatch = validatePaymentSignatureAgainstRequirement(payment, requirement);
|
|
97
|
+
if (mismatch) {
|
|
98
|
+
const transactionHash = getHistoricalSettlementTransaction(payment);
|
|
99
|
+
const preparedReconciliationRequirement = transactionHash && planId && planAwareVerifier.prepare
|
|
100
|
+
? paymentRequirementForPreparedReconciliation(payment, requirement)
|
|
101
|
+
: null;
|
|
102
|
+
if (preparedReconciliationRequirement) {
|
|
103
|
+
// Only a plan-aware verifier may receive this payer-carried
|
|
104
|
+
// snapshot: its prepare capability is the SDK contract that says
|
|
105
|
+
// the downstream facilitator will revalidate it against immutable
|
|
106
|
+
// server-side authority. A custom verifier without that capability
|
|
107
|
+
// must never be handed payer-selected amount/destination fields.
|
|
108
|
+
requirement = preparedReconciliationRequirement;
|
|
109
|
+
}
|
|
110
|
+
else if (transactionHash) {
|
|
111
|
+
return settlementOutcomeUnknownResponse({
|
|
112
|
+
ok: false,
|
|
113
|
+
outcomeUnknown: true,
|
|
114
|
+
errorReason: `${mismatch} The payer transaction may already be on-chain; do not initiate another payment.`,
|
|
115
|
+
settlement: {
|
|
116
|
+
success: false,
|
|
117
|
+
transaction: transactionHash,
|
|
118
|
+
network: requirement.network,
|
|
119
|
+
amount: requirement.maxAmountRequired,
|
|
120
|
+
errorReason: mismatch,
|
|
121
|
+
extensions: {
|
|
122
|
+
authorizationVerified: false,
|
|
123
|
+
settlementVerified: false,
|
|
124
|
+
},
|
|
125
|
+
},
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
return paymentRequiredResponse(payload, mismatch);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
let verification;
|
|
133
|
+
try {
|
|
134
|
+
verification = await options.verifySettlement({
|
|
135
|
+
request,
|
|
136
|
+
paymentSignatureHeader,
|
|
137
|
+
payment,
|
|
138
|
+
requirement,
|
|
139
|
+
...(planId ? { planId } : {}),
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
catch (error) {
|
|
143
|
+
const transactionHash = getHistoricalSettlementTransaction(payment);
|
|
144
|
+
if (!transactionHash)
|
|
145
|
+
throw error;
|
|
146
|
+
const errorReason = "The settlement verifier failed after the payer transaction was supplied. Do not initiate another payment; retry reconciliation.";
|
|
147
|
+
return settlementOutcomeUnknownResponse({
|
|
148
|
+
ok: false,
|
|
149
|
+
outcomeUnknown: true,
|
|
150
|
+
errorReason,
|
|
151
|
+
settlement: payerBroadcastOutcomeUnknownSettlement({
|
|
152
|
+
transactionHash,
|
|
153
|
+
requirement,
|
|
154
|
+
errorReason,
|
|
155
|
+
}),
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
if (!verification.ok) {
|
|
159
|
+
const transactionHash = getHistoricalSettlementTransaction(payment);
|
|
160
|
+
if (verification.outcomeUnknown || transactionHash) {
|
|
161
|
+
return settlementOutcomeUnknownResponse(transactionHash
|
|
162
|
+
? {
|
|
163
|
+
...verification,
|
|
164
|
+
outcomeUnknown: true,
|
|
165
|
+
settlement: payerBroadcastOutcomeUnknownSettlement({
|
|
166
|
+
transactionHash,
|
|
167
|
+
requirement,
|
|
168
|
+
errorReason: verification.errorReason,
|
|
169
|
+
settlement: verification.settlement,
|
|
170
|
+
}),
|
|
171
|
+
}
|
|
172
|
+
: verification);
|
|
173
|
+
}
|
|
174
|
+
return paymentRequiredResponse(payload, verification.errorReason, verification.settlement);
|
|
175
|
+
}
|
|
176
|
+
const response = await handler(request, ...args);
|
|
177
|
+
return withSettlementHeader(response, verification.settlement);
|
|
178
|
+
};
|
|
179
|
+
},
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
function settlementOutcomeUnknownResponse(verification) {
|
|
183
|
+
const headers = new Headers({
|
|
184
|
+
"Content-Type": "application/json",
|
|
185
|
+
"Cache-Control": "no-store",
|
|
186
|
+
"Retry-After": "1",
|
|
187
|
+
});
|
|
188
|
+
if (verification.settlement) {
|
|
189
|
+
headers.set(PAYMENT_RESPONSE_HEADER, encodeSettlementResponseHeader(verification.settlement));
|
|
190
|
+
}
|
|
191
|
+
return new Response(JSON.stringify({
|
|
192
|
+
code: "settlement_outcome_unknown",
|
|
193
|
+
error: verification.errorReason,
|
|
194
|
+
}), { status: 503, headers });
|
|
195
|
+
}
|
|
196
|
+
function invalidPrepareRequest(error) {
|
|
197
|
+
return {
|
|
198
|
+
ok: false,
|
|
199
|
+
response: new Response(JSON.stringify({ error, code: "invalid_request" }), {
|
|
200
|
+
status: 422,
|
|
201
|
+
headers: { "Content-Type": "application/json" },
|
|
202
|
+
}),
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Legacy preparation: the request BODY is the plan parameters. Kept unchanged
|
|
207
|
+
* for clients that predate `GENESISPAY-Settlement-Prepare-Params`.
|
|
208
|
+
*/
|
|
209
|
+
async function readLegacyPrepareBody(request) {
|
|
210
|
+
let body;
|
|
211
|
+
try {
|
|
212
|
+
body = await request.json();
|
|
213
|
+
}
|
|
214
|
+
catch {
|
|
215
|
+
body = null;
|
|
216
|
+
}
|
|
217
|
+
const payer = readPreparePayer(body);
|
|
218
|
+
if (!payer)
|
|
219
|
+
return invalidPrepareRequest("A valid payer is required.");
|
|
220
|
+
const idempotencyKey = typeof body === "object" &&
|
|
221
|
+
body !== null &&
|
|
222
|
+
"idempotencyKey" in body &&
|
|
223
|
+
typeof body.idempotencyKey === "string"
|
|
224
|
+
? body.idempotencyKey
|
|
225
|
+
: null;
|
|
226
|
+
const authority = readPrepareAuthority(body);
|
|
227
|
+
if (typeof body === "object" && body !== null && "authority" in body && !authority) {
|
|
228
|
+
return invalidPrepareRequest("Prepared authority is invalid.");
|
|
229
|
+
}
|
|
230
|
+
return { ok: true, payer, idempotencyKey, authority };
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Header preparation (ADR-0083): the plan parameters travel in
|
|
234
|
+
* `GENESISPAY-Settlement-Prepare-Params`, and the body is the purchase body.
|
|
235
|
+
* This gate prices by configuration and binds no request fingerprint, so the
|
|
236
|
+
* body stays opaque here and is never read; the resource URL alone scopes the
|
|
237
|
+
* requirement. A present but malformed header is refused, never read as a body.
|
|
238
|
+
*/
|
|
239
|
+
function readPrepareParamsHeader(paramsHeader) {
|
|
240
|
+
const params = decodeSettlementPrepareParamsHeader(paramsHeader);
|
|
241
|
+
if (!params)
|
|
242
|
+
return invalidPrepareRequest("Invalid settlement preparation parameters.");
|
|
243
|
+
return {
|
|
244
|
+
ok: true,
|
|
245
|
+
payer: params.payer,
|
|
246
|
+
idempotencyKey: params.idempotencyKey,
|
|
247
|
+
authority: params.authority ?? null,
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
function readPrepareAuthority(body) {
|
|
251
|
+
if (typeof body !== "object" || body === null || !("authority" in body)) {
|
|
252
|
+
return null;
|
|
253
|
+
}
|
|
254
|
+
const authority = body.authority;
|
|
255
|
+
if (typeof authority !== "object" ||
|
|
256
|
+
authority === null ||
|
|
257
|
+
!("sellerNonce" in authority) ||
|
|
258
|
+
typeof authority.sellerNonce !== "string" ||
|
|
259
|
+
!/^0x[0-9a-fA-F]{64}$/.test(authority.sellerNonce) ||
|
|
260
|
+
!("feeNonce" in authority) ||
|
|
261
|
+
(authority.feeNonce !== null &&
|
|
262
|
+
(typeof authority.feeNonce !== "string" ||
|
|
263
|
+
!/^0x[0-9a-fA-F]{64}$/.test(authority.feeNonce))) ||
|
|
264
|
+
!("validBefore" in authority) ||
|
|
265
|
+
typeof authority.validBefore !== "string" ||
|
|
266
|
+
!/^\d+$/.test(authority.validBefore)) {
|
|
267
|
+
return null;
|
|
268
|
+
}
|
|
269
|
+
return authority;
|
|
270
|
+
}
|
|
271
|
+
function hasHistoricalSettlementTransaction(payment) {
|
|
272
|
+
return getHistoricalSettlementTransaction(payment) !== null;
|
|
273
|
+
}
|
|
274
|
+
function getHistoricalSettlementTransaction(payment) {
|
|
275
|
+
const extensions = payment.extensions;
|
|
276
|
+
if (!extensions) {
|
|
277
|
+
return null;
|
|
278
|
+
}
|
|
279
|
+
for (const key of ["txHash", "transaction", "transactionHash"]) {
|
|
280
|
+
const value = extensions[key];
|
|
281
|
+
if (typeof value === "string" && /^0x[0-9a-fA-F]{64}$/.test(value)) {
|
|
282
|
+
return value;
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
return null;
|
|
286
|
+
}
|
|
287
|
+
function payerBroadcastOutcomeUnknownSettlement(input) {
|
|
288
|
+
return {
|
|
289
|
+
...input.settlement,
|
|
290
|
+
success: false,
|
|
291
|
+
transaction: input.transactionHash,
|
|
292
|
+
network: input.settlement?.network ?? input.requirement.network,
|
|
293
|
+
amount: input.settlement?.amount ?? input.requirement.maxAmountRequired,
|
|
294
|
+
errorReason: input.settlement?.errorReason ?? input.errorReason,
|
|
295
|
+
extensions: {
|
|
296
|
+
...input.settlement?.extensions,
|
|
297
|
+
settlementVerified: false,
|
|
298
|
+
},
|
|
299
|
+
};
|
|
300
|
+
}
|
|
301
|
+
function paymentRequirementForPreparedReconciliation(payment, fallback) {
|
|
302
|
+
const accepted = payment.accepted;
|
|
303
|
+
const destination = accepted.payTo ?? accepted.destination;
|
|
304
|
+
const resource = payment.resource?.url;
|
|
305
|
+
if (!accepted.chainId ||
|
|
306
|
+
!accepted.assetAddress ||
|
|
307
|
+
!destination ||
|
|
308
|
+
!resource) {
|
|
309
|
+
return null;
|
|
310
|
+
}
|
|
311
|
+
return {
|
|
312
|
+
...fallback,
|
|
313
|
+
network: accepted.network,
|
|
314
|
+
chainId: accepted.chainId,
|
|
315
|
+
assetAddress: accepted.assetAddress,
|
|
316
|
+
asset: accepted.asset ?? fallback.asset,
|
|
317
|
+
amount: accepted.amount,
|
|
318
|
+
maxAmountRequired: accepted.amount,
|
|
319
|
+
destination,
|
|
320
|
+
payTo: destination,
|
|
321
|
+
resource,
|
|
322
|
+
};
|
|
323
|
+
}
|
|
324
|
+
function paymentRequiredResponse(payload, errorReason, settlement, prepareUrl) {
|
|
325
|
+
const body = errorReason
|
|
326
|
+
? { ...payload, error: errorReason }
|
|
327
|
+
: payload;
|
|
328
|
+
const headers = new Headers({
|
|
329
|
+
"Content-Type": "application/json",
|
|
330
|
+
"Cache-Control": "no-store",
|
|
331
|
+
[PAYMENT_REQUIRED_HEADER]: encodePaymentRequiredHeader(body),
|
|
332
|
+
});
|
|
333
|
+
if (settlement) {
|
|
334
|
+
headers.set(PAYMENT_RESPONSE_HEADER, encodeSettlementResponseHeader(settlement));
|
|
335
|
+
}
|
|
336
|
+
if (prepareUrl) {
|
|
337
|
+
headers.set("GENESISPAY-Settlement-Prepare", prepareUrl);
|
|
338
|
+
headers.set("GENESISPAY-Settlement-Version", "1");
|
|
339
|
+
}
|
|
340
|
+
return new Response(JSON.stringify(body), { status: 402, headers });
|
|
341
|
+
}
|
|
342
|
+
function readPreparePayer(value) {
|
|
343
|
+
if (typeof value !== "object" ||
|
|
344
|
+
value === null ||
|
|
345
|
+
!("payer" in value) ||
|
|
346
|
+
typeof value.payer !== "string" ||
|
|
347
|
+
!isAddress(value.payer)) {
|
|
348
|
+
return null;
|
|
349
|
+
}
|
|
350
|
+
return getAddress(value.payer);
|
|
351
|
+
}
|
|
352
|
+
function withSettlementHeader(response, settlement) {
|
|
353
|
+
const headers = new Headers(response.headers);
|
|
354
|
+
headers.set(PAYMENT_RESPONSE_HEADER, encodeSettlementResponseHeader(settlement));
|
|
355
|
+
return new Response(response.body, {
|
|
356
|
+
status: response.status,
|
|
357
|
+
statusText: response.statusText,
|
|
358
|
+
headers,
|
|
359
|
+
});
|
|
360
|
+
}
|
|
361
|
+
function normalizePayToAddress(payTo) {
|
|
362
|
+
if (typeof payTo !== "string" || !isAddress(payTo.trim())) {
|
|
363
|
+
throw new Error(`Invalid payTo address "${String(payTo)}": expected an EVM address like 0x1234....`);
|
|
364
|
+
}
|
|
365
|
+
return getAddress(payTo.trim());
|
|
366
|
+
}
|
|
367
|
+
function describeError(error) {
|
|
368
|
+
return error instanceof Error ? error.message : "Malformed PAYMENT-SIGNATURE header.";
|
|
369
|
+
}
|
|
370
|
+
//# sourceMappingURL=payment-gate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payment-gate.js","sourceRoot":"","sources":["../src/payment-gate.ts"],"names":[],"mappings":"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"}
|
package/dist/plans.d.ts
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { type GenesisPayRequest } from "./resource.js";
|
|
2
|
+
export type SubscriptionPlanStatus = "active" | "archived";
|
|
3
|
+
export type SubscriptionPlan = {
|
|
4
|
+
/** Internal id. Address a plan by `publicId` — that is what the routes take. */
|
|
5
|
+
id: string;
|
|
6
|
+
publicId: string;
|
|
7
|
+
title: string;
|
|
8
|
+
description: string | null;
|
|
9
|
+
asset: "USDC" | "EURC";
|
|
10
|
+
/** Decimal amount charged per period, e.g. "9.00". */
|
|
11
|
+
amountPerPeriod: string;
|
|
12
|
+
/** Same amount in 6-decimal minor units, as a string (no precision loss). */
|
|
13
|
+
amountPerPeriodMinor: string;
|
|
14
|
+
periodDays: number;
|
|
15
|
+
/**
|
|
16
|
+
* How many periods of allowance the customer approves up front. The mandate's
|
|
17
|
+
* total allowance is `amountPerPeriodMinor * prepaidCycles`; when it runs out
|
|
18
|
+
* the customer signs again.
|
|
19
|
+
*/
|
|
20
|
+
prepaidCycles: number;
|
|
21
|
+
capPerChargeMinor: string;
|
|
22
|
+
allowanceMinor: string;
|
|
23
|
+
destinationWallet: string;
|
|
24
|
+
chainId: number;
|
|
25
|
+
status: SubscriptionPlanStatus;
|
|
26
|
+
/**
|
|
27
|
+
* The hosted subscribe flow (`/subscribe/:publicId`) — send the customer
|
|
28
|
+
* here. This is the whole reason to call the API rather than build the URL
|
|
29
|
+
* yourself: the host depends on the deployment the key points at.
|
|
30
|
+
*/
|
|
31
|
+
checkoutUrl: string;
|
|
32
|
+
createdAt: string;
|
|
33
|
+
archivedAt: string | null;
|
|
34
|
+
};
|
|
35
|
+
export type PlanCreateInput = {
|
|
36
|
+
title: string;
|
|
37
|
+
/** Decimal amount per period, e.g. "9" or "9.00". */
|
|
38
|
+
amountPerPeriod: string;
|
|
39
|
+
/** Billing period in whole days, e.g. 30. */
|
|
40
|
+
periodDays: number;
|
|
41
|
+
description?: string;
|
|
42
|
+
/** Periods of allowance collected in one signature. Server default applies. */
|
|
43
|
+
prepaidCycles?: number;
|
|
44
|
+
/** Defaults to the account's receiving wallet. */
|
|
45
|
+
destinationWallet?: string;
|
|
46
|
+
/** Defaults to USDC. */
|
|
47
|
+
asset?: "USDC" | "EURC";
|
|
48
|
+
};
|
|
49
|
+
export interface PlansResource {
|
|
50
|
+
create(input: PlanCreateInput): Promise<SubscriptionPlan>;
|
|
51
|
+
list(): Promise<SubscriptionPlan[]>;
|
|
52
|
+
retrieve(publicId: string): Promise<SubscriptionPlan>;
|
|
53
|
+
/**
|
|
54
|
+
* Stops the hosted page from taking new subscribers. Mandates already signed
|
|
55
|
+
* from this plan keep billing until the payer revokes them — archiving is not
|
|
56
|
+
* a cancellation. Archiving twice is a no-op that returns the same plan.
|
|
57
|
+
*/
|
|
58
|
+
archive(publicId: string): Promise<SubscriptionPlan>;
|
|
59
|
+
}
|
|
60
|
+
export declare function createPlansResource(request: GenesisPayRequest,
|
|
61
|
+
/**
|
|
62
|
+
* Applies the client's `expectedPayTo` pin to the wallet the server froze
|
|
63
|
+
* onto the plan. A plan's destination is where every future renewal settles,
|
|
64
|
+
* so it is exactly the value the pin exists to guard.
|
|
65
|
+
*/
|
|
66
|
+
assertPinnedDestination?: (wallet: unknown, what: string) => void): PlansResource;
|
|
67
|
+
export declare function toSubscriptionPlan(raw: Record<string, unknown>): SubscriptionPlan;
|
|
68
|
+
//# sourceMappingURL=plans.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plans.d.ts","sourceRoot":"","sources":["../src/plans.ts"],"names":[],"mappings":"AASA,OAAO,EAOL,KAAK,iBAAiB,EACvB,MAAM,eAAe,CAAC;AAEvB,MAAM,MAAM,sBAAsB,GAAG,QAAQ,GAAG,UAAU,CAAC;AAE3D,MAAM,MAAM,gBAAgB,GAAG;IAC7B,gFAAgF;IAChF,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,sDAAsD;IACtD,eAAe,EAAE,MAAM,CAAC;IACxB,6EAA6E;IAC7E,oBAAoB,EAAE,MAAM,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,sBAAsB,CAAC;IAC/B;;;;OAIG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,qDAAqD;IACrD,eAAe,EAAE,MAAM,CAAC;IACxB,6CAA6C;IAC7C,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+EAA+E;IAC/E,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kDAAkD;IAClD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,wBAAwB;IACxB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACzB,CAAC;AAEF,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC1D,IAAI,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;IACpC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACtD;;;;OAIG;IACH,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;CACtD;AAED,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,iBAAiB;AAC1B;;;;GAIG;AACH,uBAAuB,GAAE,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,IAAe,GAC1E,aAAa,CAwEf;AA6BD,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,gBAAgB,CAwBjF"}
|