@faremeter/payment-evm 0.6.0 → 0.8.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/dist/src/exact/client.d.ts +4 -1
- package/dist/src/exact/client.d.ts.map +1 -1
- package/dist/src/exact/client.js +14 -22
- package/dist/src/exact/common.d.ts +18 -0
- package/dist/src/exact/common.d.ts.map +1 -0
- package/dist/src/exact/common.js +36 -0
- package/dist/src/exact/constants.d.ts +0 -1
- package/dist/src/exact/constants.d.ts.map +1 -1
- package/dist/src/exact/constants.js +0 -1
- package/dist/src/exact/facilitator.d.ts +8 -2
- package/dist/src/exact/facilitator.d.ts.map +1 -1
- package/dist/src/exact/facilitator.js +81 -51
- package/dist/src/exact/index.d.ts +1 -1
- package/dist/src/exact/index.d.ts.map +1 -1
- package/dist/src/exact/index.js +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/exact/client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,cAAc,EAGf,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/exact/client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,cAAc,EAGf,MAAM,yBAAyB,CAAC;AAGjC,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAWhC,UAAU,gBAAgB;IACxB,KAAK,EAAE;QACL,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,OAAO,EAAE,GAAG,CAAC;IACb,OAAO,EAAE;QACP,aAAa,EAAE,CAAC,MAAM,EAAE;YACtB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAChC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAC/B,WAAW,EAAE,MAAM,CAAC;YACpB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;SAClC,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;KACpB,CAAC;CACH;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,gBAAgB,GAAG,cAAc,CAkG7E"}
|
package/dist/src/exact/client.js
CHANGED
|
@@ -1,22 +1,16 @@
|
|
|
1
1
|
import { randomBytes } from "crypto";
|
|
2
|
-
import {
|
|
2
|
+
import { lookupX402Network, lookupKnownAsset } from "@faremeter/info/evm";
|
|
3
3
|
import { isAddress } from "viem";
|
|
4
4
|
import { type } from "arktype";
|
|
5
5
|
import { X402_EXACT_SCHEME, EIP712_TYPES, eip712Domain, } from "./constants.js";
|
|
6
6
|
export function createPaymentHandler(wallet) {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
}
|
|
10
|
-
const networkInfo = lookupKnownNetwork(wallet.network);
|
|
11
|
-
if (!networkInfo) {
|
|
12
|
-
throw new Error(`Couldn't look up network info for network '${wallet.network}'`);
|
|
13
|
-
}
|
|
14
|
-
const assetInfo = lookupKnownAsset(wallet.network, "USDC");
|
|
7
|
+
const x402Network = lookupX402Network(wallet.chain.id);
|
|
8
|
+
const assetInfo = lookupKnownAsset(wallet.chain.id, "USDC");
|
|
15
9
|
if (!assetInfo) {
|
|
16
|
-
throw new Error(`Couldn't look up USDC information on network '${
|
|
10
|
+
throw new Error(`Couldn't look up USDC information on network '${x402Network}'`);
|
|
17
11
|
}
|
|
18
12
|
return async function handlePayment(context, accepts) {
|
|
19
|
-
const compatibleRequirements = accepts.filter((req) => req.scheme === X402_EXACT_SCHEME && req.network ===
|
|
13
|
+
const compatibleRequirements = accepts.filter((req) => req.scheme === X402_EXACT_SCHEME && req.network === x402Network);
|
|
20
14
|
return compatibleRequirements.map((requirements) => ({
|
|
21
15
|
requirements,
|
|
22
16
|
exec: async () => {
|
|
@@ -43,19 +37,17 @@ export function createPaymentHandler(wallet) {
|
|
|
43
37
|
if (extraResult instanceof type.errors) {
|
|
44
38
|
throw new Error(`Invalid EIP-712 domain parameters: ${extraResult.summary}`);
|
|
45
39
|
}
|
|
40
|
+
const verifyingContract = extraResult.verifyingContract ??
|
|
41
|
+
requirements.asset ??
|
|
42
|
+
assetInfo.address;
|
|
43
|
+
if (!isAddress(verifyingContract)) {
|
|
44
|
+
throw new Error(`Invalid verifying contract: ${verifyingContract}`);
|
|
45
|
+
}
|
|
46
46
|
const domain = {
|
|
47
|
-
name: extraResult.name ?? assetInfo.
|
|
47
|
+
name: extraResult.name ?? assetInfo.contractName,
|
|
48
48
|
version: extraResult.version ?? "2",
|
|
49
|
-
chainId: extraResult.chainId ??
|
|
50
|
-
verifyingContract
|
|
51
|
-
const asset = extraResult.verifyingContract ??
|
|
52
|
-
requirements.asset ??
|
|
53
|
-
assetInfo.address;
|
|
54
|
-
if (!isAddress(asset)) {
|
|
55
|
-
throw new Error(`Invalid asset address: ${asset}`);
|
|
56
|
-
}
|
|
57
|
-
return asset;
|
|
58
|
-
})(),
|
|
49
|
+
chainId: extraResult.chainId ?? wallet.chain.id,
|
|
50
|
+
verifyingContract,
|
|
59
51
|
};
|
|
60
52
|
const types = EIP712_TYPES;
|
|
61
53
|
// Message for EIP-712 signing (using BigInt for signing)
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { PublicClient, Hex } from "viem";
|
|
2
|
+
export declare function generateDomain(publicClient: PublicClient, chainId: number, asset: Hex): Promise<{
|
|
3
|
+
name: string;
|
|
4
|
+
version: string;
|
|
5
|
+
chainId: number;
|
|
6
|
+
verifyingContract: `0x${string}`;
|
|
7
|
+
}>;
|
|
8
|
+
export declare function generateForwarderDomain(chainId: number, domainInfo: {
|
|
9
|
+
version: string;
|
|
10
|
+
name: string;
|
|
11
|
+
verifyingContract: `0x${string}`;
|
|
12
|
+
}): {
|
|
13
|
+
chainId: number;
|
|
14
|
+
version: string;
|
|
15
|
+
name: string;
|
|
16
|
+
verifyingContract: `0x${string}`;
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=common.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../../src/exact/common.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAI9C,wBAAsB,cAAc,CAClC,YAAY,EAAE,YAAY,EAC1B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,GAAG;;;;;GA8BX;AAED,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,MAAM,EACf,UAAU,EAAE;IACV,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,EAAE,KAAK,MAAM,EAAE,CAAC;CAClC;;aAHU,MAAM;UACT,MAAM;uBACO,KAAK,MAAM,EAAE;EAOnC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { TRANSFER_WITH_AUTHORIZATION_ABI } from "./constants.js";
|
|
2
|
+
export async function generateDomain(publicClient, chainId, asset) {
|
|
3
|
+
// Read domain parameters from chain
|
|
4
|
+
let tokenName;
|
|
5
|
+
let tokenVersion;
|
|
6
|
+
try {
|
|
7
|
+
[tokenName, tokenVersion] = await Promise.all([
|
|
8
|
+
publicClient.readContract({
|
|
9
|
+
address: asset,
|
|
10
|
+
abi: TRANSFER_WITH_AUTHORIZATION_ABI,
|
|
11
|
+
functionName: "name",
|
|
12
|
+
}),
|
|
13
|
+
publicClient.readContract({
|
|
14
|
+
address: asset,
|
|
15
|
+
abi: TRANSFER_WITH_AUTHORIZATION_ABI,
|
|
16
|
+
functionName: "version",
|
|
17
|
+
}),
|
|
18
|
+
]);
|
|
19
|
+
}
|
|
20
|
+
catch (cause) {
|
|
21
|
+
throw new Error("Failed to read contract parameters", { cause });
|
|
22
|
+
}
|
|
23
|
+
const domain = {
|
|
24
|
+
name: tokenName,
|
|
25
|
+
version: tokenVersion,
|
|
26
|
+
chainId,
|
|
27
|
+
verifyingContract: asset,
|
|
28
|
+
};
|
|
29
|
+
return domain;
|
|
30
|
+
}
|
|
31
|
+
export function generateForwarderDomain(chainId, domainInfo) {
|
|
32
|
+
return {
|
|
33
|
+
...domainInfo,
|
|
34
|
+
chainId,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/exact/constants.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,iBAAiB,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/exact/constants.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,iBAAiB,UAAU,CAAC;AAEzC,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiDlC,CAAC;AAEX,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;CASf,CAAC;AAEX,eAAO,MAAM,gBAAgB;;;;;;;;;;MAU3B,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,OAAO,gBAAgB,CAAC,KAAK,CAAC;AAC7D,MAAM,MAAM,oBAAoB,GAAG,gBAAgB,CAAC,eAAe,CAAC,CAAC;AAErE,eAAO,MAAM,YAAY;;;;;MAKvB,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,OAAO,YAAY,CAAC,KAAK,CAAC"}
|
|
@@ -7,7 +7,6 @@ const prefixedHexString = type("string").pipe.try((x) => {
|
|
|
7
7
|
return toHex(x);
|
|
8
8
|
});
|
|
9
9
|
export const X402_EXACT_SCHEME = "exact";
|
|
10
|
-
export const BASE_SEPOLIA_NETWORK = "base-sepolia";
|
|
11
10
|
export const TRANSFER_WITH_AUTHORIZATION_ABI = [
|
|
12
11
|
{
|
|
13
12
|
name: "transferWithAuthorization",
|
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
import { type FacilitatorHandler } from "@faremeter/types/facilitator";
|
|
2
|
-
import type {
|
|
3
|
-
|
|
2
|
+
import type { Chain, Transport } from "viem";
|
|
3
|
+
import { type KnownNetwork, type ContractInfo } from "@faremeter/info/evm";
|
|
4
|
+
type CreateFacilitatorHandlerOpts = {
|
|
5
|
+
network?: KnownNetwork;
|
|
6
|
+
transport?: Transport;
|
|
7
|
+
};
|
|
8
|
+
export declare function createFacilitatorHandler(chain: Chain, privateKey: string, assetNameOrInfo: string | ContractInfo, opts?: CreateFacilitatorHandlerOpts): Promise<FacilitatorHandler>;
|
|
9
|
+
export {};
|
|
4
10
|
//# sourceMappingURL=facilitator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"facilitator.d.ts","sourceRoot":"","sources":["../../../src/exact/facilitator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"facilitator.d.ts","sourceRoot":"","sources":["../../../src/exact/facilitator.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAGvE,OAAO,KAAK,EAAgB,KAAK,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAY3D,OAAO,EAIL,KAAK,YAAY,EACjB,KAAK,YAAY,EAClB,MAAM,qBAAqB,CAAC;AA8B7B,KAAK,4BAA4B,GAAG;IAClC,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB,CAAC;AACF,wBAAsB,wBAAwB,CAC5C,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,MAAM,EAClB,eAAe,EAAE,MAAM,GAAG,YAAY,EACtC,IAAI,GAAE,4BAAiC,GACtC,OAAO,CAAC,kBAAkB,CAAC,CAsT7B"}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { isValidationError, caseInsensitiveLiteral } from "@faremeter/types";
|
|
2
|
+
import { isPrivateKey } from "@faremeter/types/evm";
|
|
2
3
|
import {} from "@faremeter/types/facilitator";
|
|
3
4
|
import { type } from "arktype";
|
|
4
|
-
import { verifyTypedData, encodeFunctionData, isAddress } from "viem";
|
|
5
|
-
import {
|
|
6
|
-
import { isKnownAsset, lookupKnownAsset,
|
|
7
|
-
import { X402_EXACT_SCHEME,
|
|
5
|
+
import { createPublicClient, createWalletClient, http, verifyTypedData, encodeFunctionData, isAddress, } from "viem";
|
|
6
|
+
import { privateKeyToAccount } from "viem/accounts";
|
|
7
|
+
import { isKnownAsset, lookupKnownAsset, lookupX402Network, } from "@faremeter/info/evm";
|
|
8
|
+
import { X402_EXACT_SCHEME, TRANSFER_WITH_AUTHORIZATION_ABI, EIP712_TYPES, x402ExactPayload, } from "./constants.js";
|
|
9
|
+
import { generateDomain, generateForwarderDomain } from "./common.js";
|
|
8
10
|
function errorResponse(msg) {
|
|
9
11
|
return {
|
|
10
12
|
success: false,
|
|
@@ -21,25 +23,65 @@ function parseSignature(signature) {
|
|
|
21
23
|
const v = parseInt(sig.slice(128, 130), 16);
|
|
22
24
|
return { v, r, s };
|
|
23
25
|
}
|
|
24
|
-
export function createFacilitatorHandler(
|
|
25
|
-
if (
|
|
26
|
-
throw new Error(`
|
|
26
|
+
export async function createFacilitatorHandler(chain, privateKey, assetNameOrInfo, opts = {}) {
|
|
27
|
+
if (!isPrivateKey(privateKey)) {
|
|
28
|
+
throw new Error(`Invalid private key: ${privateKey}`);
|
|
27
29
|
}
|
|
28
|
-
const
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
30
|
+
const network = opts.network ?? lookupX402Network(chain.id);
|
|
31
|
+
const chainId = chain.id;
|
|
32
|
+
let assetInfo;
|
|
33
|
+
if (typeof assetNameOrInfo == "string") {
|
|
34
|
+
if (!isKnownAsset(assetNameOrInfo)) {
|
|
35
|
+
throw new Error(`Unknown asset: ${assetNameOrInfo}`);
|
|
36
|
+
}
|
|
37
|
+
const t = lookupKnownAsset(network, assetNameOrInfo);
|
|
38
|
+
if (!t) {
|
|
39
|
+
throw new Error(`Couldn't look up asset ${assetNameOrInfo} on ${network}`);
|
|
40
|
+
}
|
|
41
|
+
assetInfo = t;
|
|
34
42
|
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
throw new Error(`Couldn't look up asset ${assetName} on ${network}`);
|
|
43
|
+
else {
|
|
44
|
+
assetInfo = assetNameOrInfo;
|
|
38
45
|
}
|
|
39
46
|
const asset = assetInfo.address;
|
|
47
|
+
const useForwarder = assetInfo.forwarder !== undefined && assetInfo.forwarderName !== undefined;
|
|
40
48
|
if (!isAddress(asset)) {
|
|
41
49
|
throw new Error(`Invalid asset address: ${asset}`);
|
|
42
50
|
}
|
|
51
|
+
const transport = opts.transport ?? http(chain.rpcUrls.default.http[0]);
|
|
52
|
+
const account = privateKeyToAccount(privateKey);
|
|
53
|
+
const publicClient = createPublicClient({
|
|
54
|
+
chain,
|
|
55
|
+
transport,
|
|
56
|
+
});
|
|
57
|
+
const walletClient = createWalletClient({
|
|
58
|
+
account,
|
|
59
|
+
chain,
|
|
60
|
+
transport,
|
|
61
|
+
});
|
|
62
|
+
let domain;
|
|
63
|
+
if (useForwarder) {
|
|
64
|
+
if (!assetInfo.forwarder) {
|
|
65
|
+
throw new Error("Missing Forwarding Contract");
|
|
66
|
+
}
|
|
67
|
+
if (!assetInfo.forwarderVersion) {
|
|
68
|
+
throw new Error("Missing Forwarding Version");
|
|
69
|
+
}
|
|
70
|
+
if (!assetInfo.forwarderName) {
|
|
71
|
+
throw new Error("Missing Forwarding Name");
|
|
72
|
+
}
|
|
73
|
+
domain = generateForwarderDomain(chainId, {
|
|
74
|
+
version: assetInfo.forwarderVersion,
|
|
75
|
+
name: assetInfo.forwarderName,
|
|
76
|
+
verifyingContract: assetInfo.forwarder,
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
domain = await generateDomain(publicClient, chainId, asset);
|
|
81
|
+
if (domain.name != assetInfo.contractName) {
|
|
82
|
+
throw new Error(`On chain contract name (${domain.name}) doesn't match configured asset name (${assetInfo.contractName})`);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
43
85
|
const checkTuple = type({
|
|
44
86
|
scheme: caseInsensitiveLiteral(X402_EXACT_SCHEME),
|
|
45
87
|
network: caseInsensitiveLiteral(network),
|
|
@@ -56,10 +98,10 @@ export function createFacilitatorHandler(network, publicClient, walletClient, as
|
|
|
56
98
|
maxTimeoutSeconds: 300,
|
|
57
99
|
// Provide EIP-712 domain parameters for client signing
|
|
58
100
|
extra: {
|
|
59
|
-
name:
|
|
60
|
-
version: "2",
|
|
61
|
-
chainId
|
|
62
|
-
verifyingContract: asset,
|
|
101
|
+
name: useForwarder ? assetInfo.forwarderName : assetInfo.contractName,
|
|
102
|
+
version: useForwarder ? assetInfo.forwarderVersion : "2",
|
|
103
|
+
chainId,
|
|
104
|
+
verifyingContract: useForwarder ? assetInfo.forwarder : asset,
|
|
63
105
|
},
|
|
64
106
|
}));
|
|
65
107
|
};
|
|
@@ -105,7 +147,7 @@ export function createFacilitatorHandler(network, publicClient, walletClient, as
|
|
|
105
147
|
let onChainUsed;
|
|
106
148
|
try {
|
|
107
149
|
onChainUsed = await publicClient.readContract({
|
|
108
|
-
address: asset,
|
|
150
|
+
address: assetInfo.forwarder ?? asset,
|
|
109
151
|
abi: TRANSFER_WITH_AUTHORIZATION_ABI,
|
|
110
152
|
functionName: "authorizationState",
|
|
111
153
|
args: [authorization.from, authorization.nonce],
|
|
@@ -117,34 +159,22 @@ export function createFacilitatorHandler(network, publicClient, walletClient, as
|
|
|
117
159
|
if (onChainUsed) {
|
|
118
160
|
return errorResponse("Authorization already used on-chain");
|
|
119
161
|
}
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
address: asset,
|
|
133
|
-
abi: TRANSFER_WITH_AUTHORIZATION_ABI,
|
|
134
|
-
functionName: "version",
|
|
135
|
-
}),
|
|
136
|
-
publicClient.getChainId(),
|
|
137
|
-
]);
|
|
162
|
+
let domain;
|
|
163
|
+
if (useForwarder) {
|
|
164
|
+
if (!assetInfo.forwarderVersion ||
|
|
165
|
+
!assetInfo.forwarderName ||
|
|
166
|
+
!assetInfo.forwarder) {
|
|
167
|
+
throw new Error("Secondary Forwardign Information Missing");
|
|
168
|
+
}
|
|
169
|
+
domain = generateForwarderDomain(chainId, {
|
|
170
|
+
version: assetInfo.forwarderVersion,
|
|
171
|
+
name: assetInfo.forwarderName,
|
|
172
|
+
verifyingContract: assetInfo.forwarder,
|
|
173
|
+
});
|
|
138
174
|
}
|
|
139
|
-
|
|
140
|
-
|
|
175
|
+
else {
|
|
176
|
+
domain = await generateDomain(publicClient, chainId, asset);
|
|
141
177
|
}
|
|
142
|
-
const domain = {
|
|
143
|
-
name: tokenName,
|
|
144
|
-
version: tokenVersion ?? "2",
|
|
145
|
-
chainId,
|
|
146
|
-
verifyingContract: asset,
|
|
147
|
-
};
|
|
148
178
|
const types = EIP712_TYPES;
|
|
149
179
|
const message = {
|
|
150
180
|
from: authorization.from,
|
|
@@ -175,7 +205,7 @@ export function createFacilitatorHandler(network, publicClient, walletClient, as
|
|
|
175
205
|
// Verify contract supports EIP-712
|
|
176
206
|
try {
|
|
177
207
|
await publicClient.readContract({
|
|
178
|
-
address: asset,
|
|
208
|
+
address: useForwarder ? domain.verifyingContract : asset,
|
|
179
209
|
abi: TRANSFER_WITH_AUTHORIZATION_ABI,
|
|
180
210
|
functionName: "DOMAIN_SEPARATOR",
|
|
181
211
|
});
|
|
@@ -206,10 +236,10 @@ export function createFacilitatorHandler(network, publicClient, walletClient, as
|
|
|
206
236
|
// Build and send the transaction
|
|
207
237
|
try {
|
|
208
238
|
const request = await walletClient.prepareTransactionRequest({
|
|
209
|
-
to: asset,
|
|
239
|
+
to: useForwarder ? domain.verifyingContract : asset,
|
|
210
240
|
data,
|
|
211
241
|
account: acct,
|
|
212
|
-
chain:
|
|
242
|
+
chain: undefined,
|
|
213
243
|
});
|
|
214
244
|
const serializedTransaction = await walletClient.signTransaction(request);
|
|
215
245
|
const txHash = await publicClient.sendRawTransaction({
|
|
@@ -226,7 +256,7 @@ export function createFacilitatorHandler(network, publicClient, walletClient, as
|
|
|
226
256
|
success: true,
|
|
227
257
|
error: null,
|
|
228
258
|
txHash,
|
|
229
|
-
networkId:
|
|
259
|
+
networkId: chainId.toString(),
|
|
230
260
|
};
|
|
231
261
|
}
|
|
232
262
|
catch (cause) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export { createPaymentHandler } from "./client.js";
|
|
2
2
|
export { createFacilitatorHandler } from "./facilitator.js";
|
|
3
|
-
export { X402_EXACT_SCHEME,
|
|
3
|
+
export { X402_EXACT_SCHEME, TRANSFER_WITH_AUTHORIZATION_ABI, EIP712_TYPES, x402ExactPayload, eip712Domain, } from "./constants.js";
|
|
4
4
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/exact/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EACL,iBAAiB,EACjB
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/exact/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EACL,iBAAiB,EACjB,+BAA+B,EAC/B,YAAY,EACZ,gBAAgB,EAChB,YAAY,GACb,MAAM,gBAAgB,CAAC"}
|
package/dist/src/exact/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export { createPaymentHandler } from "./client.js";
|
|
2
2
|
export { createFacilitatorHandler } from "./facilitator.js";
|
|
3
|
-
export { X402_EXACT_SCHEME,
|
|
3
|
+
export { X402_EXACT_SCHEME, TRANSFER_WITH_AUTHORIZATION_ABI, EIP712_TYPES, x402ExactPayload, eip712Domain, } from "./constants.js";
|