@bankofai/x402-evm 1.0.0-beta.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/README.md +172 -0
- package/dist/cjs/auth-capture/client/index.d.ts +44 -0
- package/dist/cjs/auth-capture/client/index.js +298 -0
- package/dist/cjs/auth-capture/client/index.js.map +1 -0
- package/dist/cjs/batch-settlement/client/file-storage.d.ts +47 -0
- package/dist/cjs/batch-settlement/client/file-storage.js +116 -0
- package/dist/cjs/batch-settlement/client/file-storage.js.map +1 -0
- package/dist/cjs/batch-settlement/client/index.d.ts +111 -0
- package/dist/cjs/batch-settlement/client/index.js +1565 -0
- package/dist/cjs/batch-settlement/client/index.js.map +1 -0
- package/dist/cjs/batch-settlement/facilitator/index.d.ts +72 -0
- package/dist/cjs/batch-settlement/facilitator/index.js +2102 -0
- package/dist/cjs/batch-settlement/facilitator/index.js.map +1 -0
- package/dist/cjs/batch-settlement/server/file-storage.d.ts +53 -0
- package/dist/cjs/batch-settlement/server/file-storage.js +181 -0
- package/dist/cjs/batch-settlement/server/file-storage.js.map +1 -0
- package/dist/cjs/batch-settlement/server/index.d.ts +491 -0
- package/dist/cjs/batch-settlement/server/index.js +1978 -0
- package/dist/cjs/batch-settlement/server/index.js.map +1 -0
- package/dist/cjs/batch-settlement/server/redis-storage.d.ts +87 -0
- package/dist/cjs/batch-settlement/server/redis-storage.js +181 -0
- package/dist/cjs/batch-settlement/server/redis-storage.js.map +1 -0
- package/dist/cjs/client/agent-wallet.d.ts +69 -0
- package/dist/cjs/client/agent-wallet.js +84 -0
- package/dist/cjs/client/agent-wallet.js.map +1 -0
- package/dist/cjs/exact/client/index.d.ts +63 -0
- package/dist/cjs/exact/client/index.js +739 -0
- package/dist/cjs/exact/client/index.js.map +1 -0
- package/dist/cjs/exact/facilitator/index.d.ts +141 -0
- package/dist/cjs/exact/facilitator/index.js +1989 -0
- package/dist/cjs/exact/facilitator/index.js.map +1 -0
- package/dist/cjs/exact/server/index.d.ts +118 -0
- package/dist/cjs/exact/server/index.js +326 -0
- package/dist/cjs/exact/server/index.js.map +1 -0
- package/dist/cjs/exact/v1/client/index.d.ts +38 -0
- package/dist/cjs/exact/v1/client/index.js +193 -0
- package/dist/cjs/exact/v1/client/index.js.map +1 -0
- package/dist/cjs/exact/v1/facilitator/index.d.ts +84 -0
- package/dist/cjs/exact/v1/facilitator/index.js +739 -0
- package/dist/cjs/exact/v1/facilitator/index.js.map +1 -0
- package/dist/cjs/facilitator/agent-wallet.d.ts +109 -0
- package/dist/cjs/facilitator/agent-wallet.js +105 -0
- package/dist/cjs/facilitator/agent-wallet.js.map +1 -0
- package/dist/cjs/index.d.ts +338 -0
- package/dist/cjs/index.js +2860 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/permit2-DK5A8alk.d.ts +729 -0
- package/dist/cjs/permit2-DhJRUcgY.d.ts +729 -0
- package/dist/cjs/rpc-DULZzRne.d.ts +13 -0
- package/dist/cjs/scheme-7ehldYoO.d.ts +307 -0
- package/dist/cjs/scheme-BjBJzHF7.d.ts +307 -0
- package/dist/cjs/scheme-DWgpkDgz.d.ts +47 -0
- package/dist/cjs/signer-BFelv8DL.d.ts +170 -0
- package/dist/cjs/storage-6W5MO46W.d.ts +50 -0
- package/dist/cjs/storage-CHNote8s.d.ts +81 -0
- package/dist/cjs/storage-DjCv5IPh.d.ts +81 -0
- package/dist/cjs/types-CKd3Xoi1.d.ts +180 -0
- package/dist/cjs/types-DIt9uAUy.d.ts +180 -0
- package/dist/cjs/upto/client/index.d.ts +34 -0
- package/dist/cjs/upto/client/index.js +509 -0
- package/dist/cjs/upto/client/index.js.map +1 -0
- package/dist/cjs/upto/facilitator/index.d.ts +54 -0
- package/dist/cjs/upto/facilitator/index.js +1313 -0
- package/dist/cjs/upto/facilitator/index.js.map +1 -0
- package/dist/cjs/upto/server/index.d.ts +69 -0
- package/dist/cjs/upto/server/index.js +296 -0
- package/dist/cjs/upto/server/index.js.map +1 -0
- package/dist/cjs/v1/index.d.ts +40 -0
- package/dist/cjs/v1/index.js +199 -0
- package/dist/cjs/v1/index.js.map +1 -0
- package/dist/esm/auth-capture/client/index.d.mts +44 -0
- package/dist/esm/auth-capture/client/index.mjs +8 -0
- package/dist/esm/auth-capture/client/index.mjs.map +1 -0
- package/dist/esm/batch-settlement/client/file-storage.d.mts +47 -0
- package/dist/esm/batch-settlement/client/file-storage.mjs +63 -0
- package/dist/esm/batch-settlement/client/file-storage.mjs.map +1 -0
- package/dist/esm/batch-settlement/client/index.d.mts +111 -0
- package/dist/esm/batch-settlement/client/index.mjs +58 -0
- package/dist/esm/batch-settlement/client/index.mjs.map +1 -0
- package/dist/esm/batch-settlement/facilitator/index.d.mts +72 -0
- package/dist/esm/batch-settlement/facilitator/index.mjs +1252 -0
- package/dist/esm/batch-settlement/facilitator/index.mjs.map +1 -0
- package/dist/esm/batch-settlement/server/file-storage.d.mts +53 -0
- package/dist/esm/batch-settlement/server/file-storage.mjs +128 -0
- package/dist/esm/batch-settlement/server/file-storage.mjs.map +1 -0
- package/dist/esm/batch-settlement/server/index.d.mts +491 -0
- package/dist/esm/batch-settlement/server/index.mjs +1640 -0
- package/dist/esm/batch-settlement/server/index.mjs.map +1 -0
- package/dist/esm/batch-settlement/server/redis-storage.d.mts +87 -0
- package/dist/esm/batch-settlement/server/redis-storage.mjs +156 -0
- package/dist/esm/batch-settlement/server/redis-storage.mjs.map +1 -0
- package/dist/esm/chunk-2EUQTNJO.mjs +38 -0
- package/dist/esm/chunk-2EUQTNJO.mjs.map +1 -0
- package/dist/esm/chunk-3WZF6722.mjs +36 -0
- package/dist/esm/chunk-3WZF6722.mjs.map +1 -0
- package/dist/esm/chunk-E4Z7PNXC.mjs +275 -0
- package/dist/esm/chunk-E4Z7PNXC.mjs.map +1 -0
- package/dist/esm/chunk-GQVMVP4N.mjs +911 -0
- package/dist/esm/chunk-GQVMVP4N.mjs.map +1 -0
- package/dist/esm/chunk-H2EYJIZL.mjs +489 -0
- package/dist/esm/chunk-H2EYJIZL.mjs.map +1 -0
- package/dist/esm/chunk-H3KPLYGI.mjs +152 -0
- package/dist/esm/chunk-H3KPLYGI.mjs.map +1 -0
- package/dist/esm/chunk-HYABYUBD.mjs +432 -0
- package/dist/esm/chunk-HYABYUBD.mjs.map +1 -0
- package/dist/esm/chunk-I2DVUHM5.mjs +123 -0
- package/dist/esm/chunk-I2DVUHM5.mjs.map +1 -0
- package/dist/esm/chunk-JK7SLLF7.mjs +34 -0
- package/dist/esm/chunk-JK7SLLF7.mjs.map +1 -0
- package/dist/esm/chunk-JNT7C46S.mjs +352 -0
- package/dist/esm/chunk-JNT7C46S.mjs.map +1 -0
- package/dist/esm/chunk-MACPBXCT.mjs +415 -0
- package/dist/esm/chunk-MACPBXCT.mjs.map +1 -0
- package/dist/esm/chunk-P3QOX3QZ.mjs +113 -0
- package/dist/esm/chunk-P3QOX3QZ.mjs.map +1 -0
- package/dist/esm/chunk-QVATVA3J.mjs +47 -0
- package/dist/esm/chunk-QVATVA3J.mjs.map +1 -0
- package/dist/esm/chunk-SHJFA25H.mjs +159 -0
- package/dist/esm/chunk-SHJFA25H.mjs.map +1 -0
- package/dist/esm/chunk-TW7Z65AO.mjs +34 -0
- package/dist/esm/chunk-TW7Z65AO.mjs.map +1 -0
- package/dist/esm/chunk-U4HCGTLU.mjs +35 -0
- package/dist/esm/chunk-U4HCGTLU.mjs.map +1 -0
- package/dist/esm/chunk-VS3RYAYE.mjs +80 -0
- package/dist/esm/chunk-VS3RYAYE.mjs.map +1 -0
- package/dist/esm/chunk-W6ON4LG2.mjs +39 -0
- package/dist/esm/chunk-W6ON4LG2.mjs.map +1 -0
- package/dist/esm/chunk-XG2JLZVJ.mjs +627 -0
- package/dist/esm/chunk-XG2JLZVJ.mjs.map +1 -0
- package/dist/esm/chunk-ZCJRY5LQ.mjs +162 -0
- package/dist/esm/chunk-ZCJRY5LQ.mjs.map +1 -0
- package/dist/esm/client/agent-wallet.d.mts +69 -0
- package/dist/esm/client/agent-wallet.mjs +36 -0
- package/dist/esm/client/agent-wallet.mjs.map +1 -0
- package/dist/esm/exact/client/index.d.mts +63 -0
- package/dist/esm/exact/client/index.mjs +25 -0
- package/dist/esm/exact/client/index.mjs.map +1 -0
- package/dist/esm/exact/facilitator/index.d.mts +141 -0
- package/dist/esm/exact/facilitator/index.mjs +694 -0
- package/dist/esm/exact/facilitator/index.mjs.map +1 -0
- package/dist/esm/exact/server/index.d.mts +118 -0
- package/dist/esm/exact/server/index.mjs +153 -0
- package/dist/esm/exact/server/index.mjs.map +1 -0
- package/dist/esm/exact/v1/client/index.d.mts +38 -0
- package/dist/esm/exact/v1/client/index.mjs +12 -0
- package/dist/esm/exact/v1/client/index.mjs.map +1 -0
- package/dist/esm/exact/v1/facilitator/index.d.mts +84 -0
- package/dist/esm/exact/v1/facilitator/index.mjs +12 -0
- package/dist/esm/exact/v1/facilitator/index.mjs.map +1 -0
- package/dist/esm/facilitator/agent-wallet.d.mts +109 -0
- package/dist/esm/facilitator/agent-wallet.mjs +74 -0
- package/dist/esm/facilitator/agent-wallet.mjs.map +1 -0
- package/dist/esm/index.d.mts +338 -0
- package/dist/esm/index.mjs +144 -0
- package/dist/esm/index.mjs.map +1 -0
- package/dist/esm/permit2-DhJRUcgY.d.mts +729 -0
- package/dist/esm/rpc-DULZzRne.d.mts +13 -0
- package/dist/esm/scheme-CkNhpXrG.d.mts +307 -0
- package/dist/esm/scheme-D8ZbykGV.d.mts +47 -0
- package/dist/esm/signer-BFelv8DL.d.mts +170 -0
- package/dist/esm/storage-6W5MO46W.d.mts +50 -0
- package/dist/esm/storage-BEzTEiUr.d.mts +81 -0
- package/dist/esm/types-DIt9uAUy.d.mts +180 -0
- package/dist/esm/upto/client/index.d.mts +34 -0
- package/dist/esm/upto/client/index.mjs +22 -0
- package/dist/esm/upto/client/index.mjs.map +1 -0
- package/dist/esm/upto/facilitator/index.d.mts +54 -0
- package/dist/esm/upto/facilitator/index.mjs +507 -0
- package/dist/esm/upto/facilitator/index.mjs.map +1 -0
- package/dist/esm/upto/server/index.d.mts +69 -0
- package/dist/esm/upto/server/index.mjs +124 -0
- package/dist/esm/upto/server/index.mjs.map +1 -0
- package/dist/esm/v1/index.d.mts +40 -0
- package/dist/esm/v1/index.mjs +18 -0
- package/dist/esm/v1/index.mjs.map +1 -0
- package/package.json +250 -0
|
@@ -0,0 +1,432 @@
|
|
|
1
|
+
import {
|
|
2
|
+
getEvmChainId
|
|
3
|
+
} from "./chunk-TW7Z65AO.mjs";
|
|
4
|
+
|
|
5
|
+
// src/batch-settlement/constants.ts
|
|
6
|
+
import { keccak256, toBytes } from "viem";
|
|
7
|
+
var BATCH_SETTLEMENT_SCHEME = "batch-settlement";
|
|
8
|
+
var BATCH_SETTLEMENT_ADDRESS = "0x4020074e9dF2ce1deE5A9C1b5c3f541D02a10003";
|
|
9
|
+
var ERC3009_DEPOSIT_COLLECTOR_ADDRESS = "0x4020806089470a89826cB9fB1f4059150b550004";
|
|
10
|
+
var PERMIT2_DEPOSIT_COLLECTOR_ADDRESS = "0x4020425FAf3B746C082C2f942b4E5159887B0005";
|
|
11
|
+
var MIN_WITHDRAW_DELAY = 900;
|
|
12
|
+
var MAX_WITHDRAW_DELAY = 2592e3;
|
|
13
|
+
var BATCH_SETTLEMENT_DOMAIN = {
|
|
14
|
+
name: "x402 Batch Settlement",
|
|
15
|
+
version: "1"
|
|
16
|
+
};
|
|
17
|
+
var CHANNEL_CONFIG_TYPEHASH = keccak256(
|
|
18
|
+
toBytes(
|
|
19
|
+
"ChannelConfig(address payer,address payerAuthorizer,address receiver,address receiverAuthorizer,address token,uint40 withdrawDelay,bytes32 salt)"
|
|
20
|
+
)
|
|
21
|
+
);
|
|
22
|
+
var channelConfigTypes = {
|
|
23
|
+
ChannelConfig: [
|
|
24
|
+
{ name: "payer", type: "address" },
|
|
25
|
+
{ name: "payerAuthorizer", type: "address" },
|
|
26
|
+
{ name: "receiver", type: "address" },
|
|
27
|
+
{ name: "receiverAuthorizer", type: "address" },
|
|
28
|
+
{ name: "token", type: "address" },
|
|
29
|
+
{ name: "withdrawDelay", type: "uint40" },
|
|
30
|
+
{ name: "salt", type: "bytes32" }
|
|
31
|
+
]
|
|
32
|
+
};
|
|
33
|
+
var voucherTypes = {
|
|
34
|
+
Voucher: [
|
|
35
|
+
{ name: "channelId", type: "bytes32" },
|
|
36
|
+
{ name: "maxClaimableAmount", type: "uint128" }
|
|
37
|
+
]
|
|
38
|
+
};
|
|
39
|
+
var refundTypes = {
|
|
40
|
+
Refund: [
|
|
41
|
+
{ name: "channelId", type: "bytes32" },
|
|
42
|
+
{ name: "nonce", type: "uint256" },
|
|
43
|
+
{ name: "amount", type: "uint128" }
|
|
44
|
+
]
|
|
45
|
+
};
|
|
46
|
+
var claimBatchTypes = {
|
|
47
|
+
ClaimBatch: [{ name: "claims", type: "ClaimEntry[]" }],
|
|
48
|
+
ClaimEntry: [
|
|
49
|
+
{ name: "channelId", type: "bytes32" },
|
|
50
|
+
{ name: "maxClaimableAmount", type: "uint128" },
|
|
51
|
+
{ name: "totalClaimed", type: "uint128" }
|
|
52
|
+
]
|
|
53
|
+
};
|
|
54
|
+
var receiveAuthorizationTypes = {
|
|
55
|
+
ReceiveWithAuthorization: [
|
|
56
|
+
{ name: "from", type: "address" },
|
|
57
|
+
{ name: "to", type: "address" },
|
|
58
|
+
{ name: "value", type: "uint256" },
|
|
59
|
+
{ name: "validAfter", type: "uint256" },
|
|
60
|
+
{ name: "validBefore", type: "uint256" },
|
|
61
|
+
{ name: "nonce", type: "bytes32" }
|
|
62
|
+
]
|
|
63
|
+
};
|
|
64
|
+
var batchPermit2WitnessTypes = {
|
|
65
|
+
PermitWitnessTransferFrom: [
|
|
66
|
+
{ name: "permitted", type: "TokenPermissions" },
|
|
67
|
+
{ name: "spender", type: "address" },
|
|
68
|
+
{ name: "nonce", type: "uint256" },
|
|
69
|
+
{ name: "deadline", type: "uint256" },
|
|
70
|
+
{ name: "witness", type: "DepositWitness" }
|
|
71
|
+
],
|
|
72
|
+
TokenPermissions: [
|
|
73
|
+
{ name: "token", type: "address" },
|
|
74
|
+
{ name: "amount", type: "uint256" }
|
|
75
|
+
],
|
|
76
|
+
DepositWitness: [{ name: "channelId", type: "bytes32" }]
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
// src/batch-settlement/utils.ts
|
|
80
|
+
import { getAddress, hashTypedData } from "viem";
|
|
81
|
+
function computeChannelId(config, networkOrChainId) {
|
|
82
|
+
const chainId = typeof networkOrChainId === "number" ? networkOrChainId : getEvmChainId(networkOrChainId);
|
|
83
|
+
return hashTypedData({
|
|
84
|
+
domain: getBatchSettlementEip712Domain(chainId),
|
|
85
|
+
types: channelConfigTypes,
|
|
86
|
+
primaryType: "ChannelConfig",
|
|
87
|
+
message: {
|
|
88
|
+
payer: config.payer,
|
|
89
|
+
payerAuthorizer: config.payerAuthorizer,
|
|
90
|
+
receiver: config.receiver,
|
|
91
|
+
receiverAuthorizer: config.receiverAuthorizer,
|
|
92
|
+
token: config.token,
|
|
93
|
+
withdrawDelay: config.withdrawDelay,
|
|
94
|
+
salt: config.salt
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
function getBatchSettlementEip712Domain(chainId) {
|
|
99
|
+
return {
|
|
100
|
+
...BATCH_SETTLEMENT_DOMAIN,
|
|
101
|
+
chainId,
|
|
102
|
+
verifyingContract: getAddress(BATCH_SETTLEMENT_ADDRESS)
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// src/batch-settlement/errors.ts
|
|
107
|
+
var ErrChannelNotFound = "invalid_batch_settlement_evm_channel_not_found";
|
|
108
|
+
var ErrTokenMismatch = "invalid_batch_settlement_evm_token_mismatch";
|
|
109
|
+
var ErrInvalidVoucherSignature = "invalid_batch_settlement_evm_voucher_signature";
|
|
110
|
+
var ErrCumulativeExceedsBalance = "invalid_batch_settlement_evm_cumulative_exceeds_balance";
|
|
111
|
+
var ErrCumulativeAmountBelowClaimed = "invalid_batch_settlement_evm_cumulative_below_claimed";
|
|
112
|
+
var ErrInsufficientBalance = "invalid_batch_settlement_evm_insufficient_balance";
|
|
113
|
+
var ErrDepositTransactionFailed = "invalid_batch_settlement_evm_deposit_transaction_failed";
|
|
114
|
+
var ErrClaimTransactionFailed = "invalid_batch_settlement_evm_claim_transaction_failed";
|
|
115
|
+
var ErrSettleTransactionFailed = "invalid_batch_settlement_evm_settle_transaction_failed";
|
|
116
|
+
var ErrInvalidScheme = "invalid_batch_settlement_evm_scheme";
|
|
117
|
+
var ErrNetworkMismatch = "invalid_batch_settlement_evm_network_mismatch";
|
|
118
|
+
var ErrMissingEip712Domain = "invalid_batch_settlement_evm_missing_eip712_domain";
|
|
119
|
+
var ErrValidBeforeExpired = "invalid_batch_settlement_evm_payload_authorization_valid_before";
|
|
120
|
+
var ErrValidAfterInFuture = "invalid_batch_settlement_evm_payload_authorization_valid_after";
|
|
121
|
+
var ErrInvalidReceiveAuthorizationSignature = "invalid_batch_settlement_evm_receive_authorization_signature";
|
|
122
|
+
var ErrErc3009AuthorizationRequired = "invalid_batch_settlement_evm_erc3009_authorization_required";
|
|
123
|
+
var ErrRefundTransactionFailed = "invalid_batch_settlement_evm_refund_transaction_failed";
|
|
124
|
+
var ErrInvalidPayloadType = "invalid_batch_settlement_evm_payload_type";
|
|
125
|
+
var ErrWithdrawDelayOutOfRange = "invalid_batch_settlement_evm_withdraw_delay_out_of_range";
|
|
126
|
+
var ErrChannelIdMismatch = "invalid_batch_settlement_evm_channel_id_mismatch";
|
|
127
|
+
var ErrReceiverMismatch = "invalid_batch_settlement_evm_receiver_mismatch";
|
|
128
|
+
var ErrReceiverAuthorizerMismatch = "invalid_batch_settlement_evm_receiver_authorizer_mismatch";
|
|
129
|
+
var ErrWithdrawDelayMismatch = "invalid_batch_settlement_evm_withdraw_delay_mismatch";
|
|
130
|
+
var ErrAuthorizerAddressMismatch = "invalid_batch_settlement_evm_authorizer_address_mismatch";
|
|
131
|
+
var ErrDepositSimulationFailed = "invalid_batch_settlement_evm_deposit_simulation_failed";
|
|
132
|
+
var ErrClaimSimulationFailed = "invalid_batch_settlement_evm_claim_simulation_failed";
|
|
133
|
+
var ErrSettleSimulationFailed = "invalid_batch_settlement_evm_settle_simulation_failed";
|
|
134
|
+
var ErrNothingToSettle = "invalid_batch_settlement_evm_nothing_to_settle";
|
|
135
|
+
var ErrRefundPayload = "invalid_batch_settlement_evm_refund_payload";
|
|
136
|
+
var ErrRefundSimulationFailed = "invalid_batch_settlement_evm_refund_simulation_failed";
|
|
137
|
+
var ErrRpcReadFailed = "invalid_batch_settlement_evm_rpc_read_failed";
|
|
138
|
+
var ErrPermit2AuthorizationRequired = "invalid_batch_settlement_evm_permit2_authorization_required";
|
|
139
|
+
var ErrPermit2InvalidSpender = "invalid_batch_settlement_evm_permit2_invalid_spender";
|
|
140
|
+
var ErrPermit2AmountMismatch = "invalid_batch_settlement_evm_permit2_amount_mismatch";
|
|
141
|
+
var ErrPermit2DeadlineExpired = "invalid_batch_settlement_evm_permit2_deadline_expired";
|
|
142
|
+
var ErrPermit2InvalidSignature = "invalid_batch_settlement_evm_permit2_invalid_signature";
|
|
143
|
+
var ErrPermit2AllowanceRequired = "invalid_batch_settlement_evm_permit2_allowance_required";
|
|
144
|
+
var ErrEip2612AmountMismatch = "invalid_batch_settlement_evm_eip2612_amount_mismatch";
|
|
145
|
+
var ErrErc20ApprovalUnavailable = "invalid_batch_settlement_evm_erc20_approval_unavailable";
|
|
146
|
+
var ErrCumulativeAmountMismatch = "invalid_batch_settlement_evm_cumulative_amount_mismatch";
|
|
147
|
+
var ErrChannelBusy = "invalid_batch_settlement_evm_channel_busy";
|
|
148
|
+
var ErrChargeExceedsSignedCumulative = "invalid_batch_settlement_evm_charge_exceeds_signed_cumulative";
|
|
149
|
+
var ErrMissingChannel = "invalid_batch_settlement_evm_missing_channel";
|
|
150
|
+
var ErrRefundNoBalance = "invalid_batch_settlement_evm_refund_no_balance";
|
|
151
|
+
var ErrRefundAmountInvalid = "invalid_batch_settlement_evm_refund_amount_invalid";
|
|
152
|
+
|
|
153
|
+
// src/batch-settlement/abi.ts
|
|
154
|
+
var channelConfigComponents = [
|
|
155
|
+
{ name: "payer", type: "address" },
|
|
156
|
+
{ name: "payerAuthorizer", type: "address" },
|
|
157
|
+
{ name: "receiver", type: "address" },
|
|
158
|
+
{ name: "receiverAuthorizer", type: "address" },
|
|
159
|
+
{ name: "token", type: "address" },
|
|
160
|
+
{ name: "withdrawDelay", type: "uint40" },
|
|
161
|
+
{ name: "salt", type: "bytes32" }
|
|
162
|
+
];
|
|
163
|
+
var voucherClaimComponents = [
|
|
164
|
+
{
|
|
165
|
+
name: "voucher",
|
|
166
|
+
type: "tuple",
|
|
167
|
+
components: [
|
|
168
|
+
{
|
|
169
|
+
name: "channel",
|
|
170
|
+
type: "tuple",
|
|
171
|
+
components: channelConfigComponents
|
|
172
|
+
},
|
|
173
|
+
{ name: "maxClaimableAmount", type: "uint128" }
|
|
174
|
+
]
|
|
175
|
+
},
|
|
176
|
+
{ name: "signature", type: "bytes" },
|
|
177
|
+
{ name: "totalClaimed", type: "uint128" }
|
|
178
|
+
];
|
|
179
|
+
var batchSettlementABI = [
|
|
180
|
+
{
|
|
181
|
+
type: "function",
|
|
182
|
+
name: "multicall",
|
|
183
|
+
inputs: [{ name: "data", type: "bytes[]" }],
|
|
184
|
+
outputs: [{ name: "results", type: "bytes[]" }],
|
|
185
|
+
stateMutability: "nonpayable"
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
type: "function",
|
|
189
|
+
name: "deposit",
|
|
190
|
+
inputs: [
|
|
191
|
+
{ name: "config", type: "tuple", components: channelConfigComponents },
|
|
192
|
+
{ name: "amount", type: "uint128" },
|
|
193
|
+
{ name: "collector", type: "address" },
|
|
194
|
+
{ name: "collectorData", type: "bytes" }
|
|
195
|
+
],
|
|
196
|
+
outputs: [],
|
|
197
|
+
stateMutability: "nonpayable"
|
|
198
|
+
},
|
|
199
|
+
{
|
|
200
|
+
type: "function",
|
|
201
|
+
name: "claim",
|
|
202
|
+
inputs: [{ name: "voucherClaims", type: "tuple[]", components: voucherClaimComponents }],
|
|
203
|
+
outputs: [],
|
|
204
|
+
stateMutability: "nonpayable"
|
|
205
|
+
},
|
|
206
|
+
{
|
|
207
|
+
type: "function",
|
|
208
|
+
name: "claimWithSignature",
|
|
209
|
+
inputs: [
|
|
210
|
+
{ name: "voucherClaims", type: "tuple[]", components: voucherClaimComponents },
|
|
211
|
+
{ name: "authorizerSignature", type: "bytes" }
|
|
212
|
+
],
|
|
213
|
+
outputs: [],
|
|
214
|
+
stateMutability: "nonpayable"
|
|
215
|
+
},
|
|
216
|
+
{
|
|
217
|
+
type: "function",
|
|
218
|
+
name: "settle",
|
|
219
|
+
inputs: [
|
|
220
|
+
{ name: "receiver", type: "address" },
|
|
221
|
+
{ name: "token", type: "address" }
|
|
222
|
+
],
|
|
223
|
+
outputs: [],
|
|
224
|
+
stateMutability: "nonpayable"
|
|
225
|
+
},
|
|
226
|
+
{
|
|
227
|
+
type: "function",
|
|
228
|
+
name: "initiateWithdraw",
|
|
229
|
+
inputs: [
|
|
230
|
+
{ name: "config", type: "tuple", components: channelConfigComponents },
|
|
231
|
+
{ name: "amount", type: "uint128" }
|
|
232
|
+
],
|
|
233
|
+
outputs: [],
|
|
234
|
+
stateMutability: "nonpayable"
|
|
235
|
+
},
|
|
236
|
+
{
|
|
237
|
+
type: "function",
|
|
238
|
+
name: "finalizeWithdraw",
|
|
239
|
+
inputs: [{ name: "config", type: "tuple", components: channelConfigComponents }],
|
|
240
|
+
outputs: [],
|
|
241
|
+
stateMutability: "nonpayable"
|
|
242
|
+
},
|
|
243
|
+
{
|
|
244
|
+
type: "function",
|
|
245
|
+
name: "refund",
|
|
246
|
+
inputs: [
|
|
247
|
+
{ name: "config", type: "tuple", components: channelConfigComponents },
|
|
248
|
+
{ name: "amount", type: "uint128" }
|
|
249
|
+
],
|
|
250
|
+
outputs: [],
|
|
251
|
+
stateMutability: "nonpayable"
|
|
252
|
+
},
|
|
253
|
+
{
|
|
254
|
+
type: "function",
|
|
255
|
+
name: "refundWithSignature",
|
|
256
|
+
inputs: [
|
|
257
|
+
{ name: "config", type: "tuple", components: channelConfigComponents },
|
|
258
|
+
{ name: "amount", type: "uint128" },
|
|
259
|
+
{ name: "nonce", type: "uint256" },
|
|
260
|
+
{ name: "receiverAuthorizerSignature", type: "bytes" }
|
|
261
|
+
],
|
|
262
|
+
outputs: [],
|
|
263
|
+
stateMutability: "nonpayable"
|
|
264
|
+
},
|
|
265
|
+
{
|
|
266
|
+
type: "function",
|
|
267
|
+
name: "getChannelId",
|
|
268
|
+
inputs: [{ name: "config", type: "tuple", components: channelConfigComponents }],
|
|
269
|
+
outputs: [{ name: "", type: "bytes32" }],
|
|
270
|
+
stateMutability: "view"
|
|
271
|
+
},
|
|
272
|
+
{
|
|
273
|
+
type: "function",
|
|
274
|
+
name: "CHANNEL_CONFIG_TYPEHASH",
|
|
275
|
+
inputs: [],
|
|
276
|
+
outputs: [{ name: "", type: "bytes32" }],
|
|
277
|
+
stateMutability: "view"
|
|
278
|
+
},
|
|
279
|
+
{
|
|
280
|
+
type: "function",
|
|
281
|
+
name: "channels",
|
|
282
|
+
inputs: [{ name: "channelId", type: "bytes32" }],
|
|
283
|
+
outputs: [
|
|
284
|
+
{ name: "balance", type: "uint128" },
|
|
285
|
+
{ name: "totalClaimed", type: "uint128" }
|
|
286
|
+
],
|
|
287
|
+
stateMutability: "view"
|
|
288
|
+
},
|
|
289
|
+
{
|
|
290
|
+
type: "function",
|
|
291
|
+
name: "pendingWithdrawals",
|
|
292
|
+
inputs: [{ name: "channelId", type: "bytes32" }],
|
|
293
|
+
outputs: [
|
|
294
|
+
{ name: "amount", type: "uint128" },
|
|
295
|
+
{ name: "initiatedAt", type: "uint40" }
|
|
296
|
+
],
|
|
297
|
+
stateMutability: "view"
|
|
298
|
+
},
|
|
299
|
+
{
|
|
300
|
+
type: "function",
|
|
301
|
+
name: "receivers",
|
|
302
|
+
inputs: [
|
|
303
|
+
{ name: "receiver", type: "address" },
|
|
304
|
+
{ name: "token", type: "address" }
|
|
305
|
+
],
|
|
306
|
+
outputs: [
|
|
307
|
+
{ name: "totalClaimed", type: "uint128" },
|
|
308
|
+
{ name: "totalSettled", type: "uint128" }
|
|
309
|
+
],
|
|
310
|
+
stateMutability: "view"
|
|
311
|
+
},
|
|
312
|
+
{
|
|
313
|
+
type: "function",
|
|
314
|
+
name: "getVoucherDigest",
|
|
315
|
+
inputs: [
|
|
316
|
+
{ name: "channelId", type: "bytes32" },
|
|
317
|
+
{ name: "maxClaimableAmount", type: "uint128" }
|
|
318
|
+
],
|
|
319
|
+
outputs: [{ name: "", type: "bytes32" }],
|
|
320
|
+
stateMutability: "view"
|
|
321
|
+
},
|
|
322
|
+
{
|
|
323
|
+
type: "function",
|
|
324
|
+
name: "getRefundDigest",
|
|
325
|
+
inputs: [
|
|
326
|
+
{ name: "channelId", type: "bytes32" },
|
|
327
|
+
{ name: "nonce", type: "uint256" },
|
|
328
|
+
{ name: "amount", type: "uint128" }
|
|
329
|
+
],
|
|
330
|
+
outputs: [{ name: "", type: "bytes32" }],
|
|
331
|
+
stateMutability: "view"
|
|
332
|
+
},
|
|
333
|
+
{
|
|
334
|
+
type: "function",
|
|
335
|
+
name: "refundNonce",
|
|
336
|
+
inputs: [{ name: "channelId", type: "bytes32" }],
|
|
337
|
+
outputs: [{ name: "", type: "uint256" }],
|
|
338
|
+
stateMutability: "view"
|
|
339
|
+
},
|
|
340
|
+
{
|
|
341
|
+
type: "function",
|
|
342
|
+
name: "getClaimBatchDigest",
|
|
343
|
+
inputs: [{ name: "voucherClaims", type: "tuple[]", components: voucherClaimComponents }],
|
|
344
|
+
outputs: [{ name: "", type: "bytes32" }],
|
|
345
|
+
stateMutability: "view"
|
|
346
|
+
},
|
|
347
|
+
{
|
|
348
|
+
type: "event",
|
|
349
|
+
name: "Settled",
|
|
350
|
+
inputs: [
|
|
351
|
+
{ name: "receiver", type: "address", indexed: true },
|
|
352
|
+
{ name: "token", type: "address", indexed: true },
|
|
353
|
+
{ name: "sender", type: "address", indexed: true },
|
|
354
|
+
{ name: "amount", type: "uint128", indexed: false }
|
|
355
|
+
],
|
|
356
|
+
anonymous: false
|
|
357
|
+
}
|
|
358
|
+
];
|
|
359
|
+
var erc20BalanceOfABI = [
|
|
360
|
+
{
|
|
361
|
+
type: "function",
|
|
362
|
+
name: "balanceOf",
|
|
363
|
+
inputs: [{ name: "account", type: "address" }],
|
|
364
|
+
outputs: [{ name: "", type: "uint256" }],
|
|
365
|
+
stateMutability: "view"
|
|
366
|
+
}
|
|
367
|
+
];
|
|
368
|
+
|
|
369
|
+
export {
|
|
370
|
+
BATCH_SETTLEMENT_SCHEME,
|
|
371
|
+
BATCH_SETTLEMENT_ADDRESS,
|
|
372
|
+
ERC3009_DEPOSIT_COLLECTOR_ADDRESS,
|
|
373
|
+
PERMIT2_DEPOSIT_COLLECTOR_ADDRESS,
|
|
374
|
+
MIN_WITHDRAW_DELAY,
|
|
375
|
+
MAX_WITHDRAW_DELAY,
|
|
376
|
+
BATCH_SETTLEMENT_DOMAIN,
|
|
377
|
+
voucherTypes,
|
|
378
|
+
refundTypes,
|
|
379
|
+
claimBatchTypes,
|
|
380
|
+
receiveAuthorizationTypes,
|
|
381
|
+
batchPermit2WitnessTypes,
|
|
382
|
+
computeChannelId,
|
|
383
|
+
getBatchSettlementEip712Domain,
|
|
384
|
+
ErrChannelNotFound,
|
|
385
|
+
ErrTokenMismatch,
|
|
386
|
+
ErrInvalidVoucherSignature,
|
|
387
|
+
ErrCumulativeExceedsBalance,
|
|
388
|
+
ErrCumulativeAmountBelowClaimed,
|
|
389
|
+
ErrInsufficientBalance,
|
|
390
|
+
ErrDepositTransactionFailed,
|
|
391
|
+
ErrClaimTransactionFailed,
|
|
392
|
+
ErrSettleTransactionFailed,
|
|
393
|
+
ErrInvalidScheme,
|
|
394
|
+
ErrNetworkMismatch,
|
|
395
|
+
ErrMissingEip712Domain,
|
|
396
|
+
ErrValidBeforeExpired,
|
|
397
|
+
ErrValidAfterInFuture,
|
|
398
|
+
ErrInvalidReceiveAuthorizationSignature,
|
|
399
|
+
ErrErc3009AuthorizationRequired,
|
|
400
|
+
ErrRefundTransactionFailed,
|
|
401
|
+
ErrInvalidPayloadType,
|
|
402
|
+
ErrWithdrawDelayOutOfRange,
|
|
403
|
+
ErrChannelIdMismatch,
|
|
404
|
+
ErrReceiverMismatch,
|
|
405
|
+
ErrReceiverAuthorizerMismatch,
|
|
406
|
+
ErrWithdrawDelayMismatch,
|
|
407
|
+
ErrAuthorizerAddressMismatch,
|
|
408
|
+
ErrDepositSimulationFailed,
|
|
409
|
+
ErrClaimSimulationFailed,
|
|
410
|
+
ErrSettleSimulationFailed,
|
|
411
|
+
ErrNothingToSettle,
|
|
412
|
+
ErrRefundPayload,
|
|
413
|
+
ErrRefundSimulationFailed,
|
|
414
|
+
ErrRpcReadFailed,
|
|
415
|
+
ErrPermit2AuthorizationRequired,
|
|
416
|
+
ErrPermit2InvalidSpender,
|
|
417
|
+
ErrPermit2AmountMismatch,
|
|
418
|
+
ErrPermit2DeadlineExpired,
|
|
419
|
+
ErrPermit2InvalidSignature,
|
|
420
|
+
ErrPermit2AllowanceRequired,
|
|
421
|
+
ErrEip2612AmountMismatch,
|
|
422
|
+
ErrErc20ApprovalUnavailable,
|
|
423
|
+
ErrCumulativeAmountMismatch,
|
|
424
|
+
ErrChannelBusy,
|
|
425
|
+
ErrChargeExceedsSignedCumulative,
|
|
426
|
+
ErrMissingChannel,
|
|
427
|
+
ErrRefundNoBalance,
|
|
428
|
+
ErrRefundAmountInvalid,
|
|
429
|
+
batchSettlementABI,
|
|
430
|
+
erc20BalanceOfABI
|
|
431
|
+
};
|
|
432
|
+
//# sourceMappingURL=chunk-HYABYUBD.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/batch-settlement/constants.ts","../../src/batch-settlement/utils.ts","../../src/batch-settlement/errors.ts","../../src/batch-settlement/abi.ts"],"sourcesContent":["import { keccak256, toBytes } from \"viem\";\n\n/** Scheme identifier for the batch-settlement payment scheme. */\nexport const BATCH_SETTLEMENT_SCHEME = \"batch-settlement\" as const;\n\n/** Deployed address of the x402BatchSettlement contract. */\nexport const BATCH_SETTLEMENT_ADDRESS = \"0x4020074e9dF2ce1deE5A9C1b5c3f541D02a10003\" as const;\n\n/** Deployed address of the ERC3009DepositCollector contract. */\nexport const ERC3009_DEPOSIT_COLLECTOR_ADDRESS =\n \"0x4020806089470a89826cB9fB1f4059150b550004\" as const;\n\n/** Deployed address of the Permit2DepositCollector contract. */\nexport const PERMIT2_DEPOSIT_COLLECTOR_ADDRESS =\n \"0x4020425FAf3B746C082C2f942b4E5159887B0005\" as const;\n\n/** Minimum withdraw delay in seconds (15 minutes), matching the onchain constant. */\nexport const MIN_WITHDRAW_DELAY = 900;\n\n/** Maximum withdraw delay in seconds (30 days), matching the onchain constant. */\nexport const MAX_WITHDRAW_DELAY = 2_592_000;\n\n/** EIP-712 domain fields shared across all batch-settlement typed-data signatures. */\nexport const BATCH_SETTLEMENT_DOMAIN = {\n name: \"x402 Batch Settlement\",\n version: \"1\",\n} as const;\n\n/** EIP-712 type hash for channel identity. */\nexport const CHANNEL_CONFIG_TYPEHASH = keccak256(\n toBytes(\n \"ChannelConfig(address payer,address payerAuthorizer,address receiver,address receiverAuthorizer,address token,uint40 withdrawDelay,bytes32 salt)\",\n ),\n);\n\n/** EIP-712 type definition for a channel configuration. */\nexport const channelConfigTypes = {\n ChannelConfig: [\n { name: \"payer\", type: \"address\" },\n { name: \"payerAuthorizer\", type: \"address\" },\n { name: \"receiver\", type: \"address\" },\n { name: \"receiverAuthorizer\", type: \"address\" },\n { name: \"token\", type: \"address\" },\n { name: \"withdrawDelay\", type: \"uint40\" },\n { name: \"salt\", type: \"bytes32\" },\n ],\n} as const;\n\n/** EIP-712 type definition for a cumulative voucher: `Voucher(bytes32 channelId, uint128 maxClaimableAmount)`. */\nexport const voucherTypes = {\n Voucher: [\n { name: \"channelId\", type: \"bytes32\" },\n { name: \"maxClaimableAmount\", type: \"uint128\" },\n ],\n} as const;\n\n/** EIP-712 type definition for cooperative refund: `Refund(bytes32 channelId, uint256 nonce, uint128 amount)`. */\nexport const refundTypes = {\n Refund: [\n { name: \"channelId\", type: \"bytes32\" },\n { name: \"nonce\", type: \"uint256\" },\n { name: \"amount\", type: \"uint128\" },\n ],\n} as const;\n\n/** EIP-712 type definitions for a receiver-authorizer claim batch (nested ClaimEntry). */\nexport const claimBatchTypes = {\n ClaimBatch: [{ name: \"claims\", type: \"ClaimEntry[]\" }],\n ClaimEntry: [\n { name: \"channelId\", type: \"bytes32\" },\n { name: \"maxClaimableAmount\", type: \"uint128\" },\n { name: \"totalClaimed\", type: \"uint128\" },\n ],\n} as const;\n\n/** EIP-712 type definition for ERC-3009 `ReceiveWithAuthorization` (used for gasless deposits). */\nexport const receiveAuthorizationTypes = {\n ReceiveWithAuthorization: [\n { name: \"from\", type: \"address\" },\n { name: \"to\", type: \"address\" },\n { name: \"value\", type: \"uint256\" },\n { name: \"validAfter\", type: \"uint256\" },\n { name: \"validBefore\", type: \"uint256\" },\n { name: \"nonce\", type: \"bytes32\" },\n ],\n} as const;\n\n/** Permit2 typed data for channel-bound batch deposits. */\nexport const batchPermit2WitnessTypes = {\n PermitWitnessTransferFrom: [\n { name: \"permitted\", type: \"TokenPermissions\" },\n { name: \"spender\", type: \"address\" },\n { name: \"nonce\", type: \"uint256\" },\n { name: \"deadline\", type: \"uint256\" },\n { name: \"witness\", type: \"DepositWitness\" },\n ],\n TokenPermissions: [\n { name: \"token\", type: \"address\" },\n { name: \"amount\", type: \"uint256\" },\n ],\n DepositWitness: [{ name: \"channelId\", type: \"bytes32\" }],\n} as const;\n","import { getAddress, hashTypedData } from \"viem\";\nimport { BATCH_SETTLEMENT_ADDRESS, BATCH_SETTLEMENT_DOMAIN, channelConfigTypes } from \"./constants\";\nimport type { ChannelConfig } from \"./types\";\nimport { getEvmChainId } from \"../utils\";\n\n/**\n * Computes the chain-bound channel id from a {@link ChannelConfig} struct.\n *\n * @param config - The immutable channel configuration.\n * @param networkOrChainId - CAIP-2 network identifier or numeric EVM chain id.\n * @returns The `bytes32` channel id as a hex string.\n */\nexport function computeChannelId(\n config: ChannelConfig,\n networkOrChainId: string | number,\n): `0x${string}` {\n const chainId =\n typeof networkOrChainId === \"number\" ? networkOrChainId : getEvmChainId(networkOrChainId);\n return hashTypedData({\n domain: getBatchSettlementEip712Domain(chainId),\n types: channelConfigTypes,\n primaryType: \"ChannelConfig\",\n message: {\n payer: config.payer,\n payerAuthorizer: config.payerAuthorizer,\n receiver: config.receiver,\n receiverAuthorizer: config.receiverAuthorizer,\n token: config.token,\n withdrawDelay: config.withdrawDelay,\n salt: config.salt,\n },\n });\n}\n\n/**\n * Returns the full EIP-712 domain for the batch-settlement contract on the given chain.\n *\n * @param chainId - Numeric EVM chain id.\n * @returns EIP-712 domain with `name`, `version`, `chainId`, and checksummed `verifyingContract`.\n */\nexport function getBatchSettlementEip712Domain(chainId: number) {\n return {\n ...BATCH_SETTLEMENT_DOMAIN,\n chainId,\n verifyingContract: getAddress(BATCH_SETTLEMENT_ADDRESS),\n } as const;\n}\n","/** Error codes for the batch-settlement EVM scheme (see scheme_batch_settlement_evm2.md). */\n\nexport const ErrChannelNotFound = \"invalid_batch_settlement_evm_channel_not_found\";\nexport const ErrTokenMismatch = \"invalid_batch_settlement_evm_token_mismatch\";\nexport const ErrInvalidVoucherSignature = \"invalid_batch_settlement_evm_voucher_signature\";\nexport const ErrCumulativeExceedsBalance =\n \"invalid_batch_settlement_evm_cumulative_exceeds_balance\";\nexport const ErrCumulativeAmountBelowClaimed =\n \"invalid_batch_settlement_evm_cumulative_below_claimed\";\nexport const ErrInsufficientBalance = \"invalid_batch_settlement_evm_insufficient_balance\";\nexport const ErrDepositTransactionFailed =\n \"invalid_batch_settlement_evm_deposit_transaction_failed\";\nexport const ErrClaimTransactionFailed = \"invalid_batch_settlement_evm_claim_transaction_failed\";\nexport const ErrSettleTransactionFailed = \"invalid_batch_settlement_evm_settle_transaction_failed\";\nexport const ErrInvalidScheme = \"invalid_batch_settlement_evm_scheme\";\nexport const ErrNetworkMismatch = \"invalid_batch_settlement_evm_network_mismatch\";\nexport const ErrMissingEip712Domain = \"invalid_batch_settlement_evm_missing_eip712_domain\";\nexport const ErrValidBeforeExpired =\n \"invalid_batch_settlement_evm_payload_authorization_valid_before\";\nexport const ErrValidAfterInFuture =\n \"invalid_batch_settlement_evm_payload_authorization_valid_after\";\nexport const ErrInvalidReceiveAuthorizationSignature =\n \"invalid_batch_settlement_evm_receive_authorization_signature\";\nexport const ErrErc3009AuthorizationRequired =\n \"invalid_batch_settlement_evm_erc3009_authorization_required\";\nexport const ErrRefundTransactionFailed = \"invalid_batch_settlement_evm_refund_transaction_failed\";\nexport const ErrInvalidPayloadType = \"invalid_batch_settlement_evm_payload_type\";\nexport const ErrWithdrawDelayOutOfRange =\n \"invalid_batch_settlement_evm_withdraw_delay_out_of_range\";\nexport const ErrChannelIdMismatch = \"invalid_batch_settlement_evm_channel_id_mismatch\";\nexport const ErrReceiverMismatch = \"invalid_batch_settlement_evm_receiver_mismatch\";\nexport const ErrReceiverAuthorizerMismatch =\n \"invalid_batch_settlement_evm_receiver_authorizer_mismatch\";\nexport const ErrWithdrawDelayMismatch = \"invalid_batch_settlement_evm_withdraw_delay_mismatch\";\nexport const ErrAuthorizerAddressMismatch =\n \"invalid_batch_settlement_evm_authorizer_address_mismatch\";\nexport const ErrDepositSimulationFailed = \"invalid_batch_settlement_evm_deposit_simulation_failed\";\nexport const ErrClaimSimulationFailed = \"invalid_batch_settlement_evm_claim_simulation_failed\";\nexport const ErrSettleSimulationFailed = \"invalid_batch_settlement_evm_settle_simulation_failed\";\nexport const ErrNothingToSettle = \"invalid_batch_settlement_evm_nothing_to_settle\";\nexport const ErrRefundPayload = \"invalid_batch_settlement_evm_refund_payload\";\nexport const ErrRefundSimulationFailed = \"invalid_batch_settlement_evm_refund_simulation_failed\";\nexport const ErrRpcReadFailed = \"invalid_batch_settlement_evm_rpc_read_failed\";\nexport const ErrPermit2AuthorizationRequired =\n \"invalid_batch_settlement_evm_permit2_authorization_required\";\nexport const ErrPermit2InvalidSpender = \"invalid_batch_settlement_evm_permit2_invalid_spender\";\nexport const ErrPermit2AmountMismatch = \"invalid_batch_settlement_evm_permit2_amount_mismatch\";\nexport const ErrPermit2DeadlineExpired = \"invalid_batch_settlement_evm_permit2_deadline_expired\";\nexport const ErrPermit2InvalidSignature = \"invalid_batch_settlement_evm_permit2_invalid_signature\";\nexport const ErrPermit2AllowanceRequired =\n \"invalid_batch_settlement_evm_permit2_allowance_required\";\nexport const ErrEip2612AmountMismatch = \"invalid_batch_settlement_evm_eip2612_amount_mismatch\";\nexport const ErrEip2612OwnerMismatch = \"invalid_batch_settlement_evm_eip2612_owner_mismatch\";\nexport const ErrEip2612AssetMismatch = \"invalid_batch_settlement_evm_eip2612_asset_mismatch\";\nexport const ErrEip2612SpenderMismatch = \"invalid_batch_settlement_evm_eip2612_spender_mismatch\";\nexport const ErrEip2612DeadlineExpired = \"invalid_batch_settlement_evm_eip2612_deadline_expired\";\nexport const ErrErc20ApprovalUnavailable =\n \"invalid_batch_settlement_evm_erc20_approval_unavailable\";\n\n/** Resource server: 402 `error` and lifecycle `reason` (same strings as the spec). */\nexport const ErrCumulativeAmountMismatch =\n \"invalid_batch_settlement_evm_cumulative_amount_mismatch\";\nexport const ErrChannelBusy = \"invalid_batch_settlement_evm_channel_busy\";\nexport const ErrChargeExceedsSignedCumulative =\n \"invalid_batch_settlement_evm_charge_exceeds_signed_cumulative\";\nexport const ErrMissingChannel = \"invalid_batch_settlement_evm_missing_channel\";\nexport const ErrRefundNoBalance = \"invalid_batch_settlement_evm_refund_no_balance\";\nexport const ErrRefundAmountInvalid = \"invalid_batch_settlement_evm_refund_amount_invalid\";\n","export const channelConfigComponents = [\n { name: \"payer\", type: \"address\" },\n { name: \"payerAuthorizer\", type: \"address\" },\n { name: \"receiver\", type: \"address\" },\n { name: \"receiverAuthorizer\", type: \"address\" },\n { name: \"token\", type: \"address\" },\n { name: \"withdrawDelay\", type: \"uint40\" },\n { name: \"salt\", type: \"bytes32\" },\n] as const;\n\nconst voucherClaimComponents = [\n {\n name: \"voucher\",\n type: \"tuple\",\n components: [\n {\n name: \"channel\",\n type: \"tuple\",\n components: channelConfigComponents,\n },\n { name: \"maxClaimableAmount\", type: \"uint128\" },\n ],\n },\n { name: \"signature\", type: \"bytes\" },\n { name: \"totalClaimed\", type: \"uint128\" },\n] as const;\n\nexport const batchSettlementABI = [\n {\n type: \"function\",\n name: \"multicall\",\n inputs: [{ name: \"data\", type: \"bytes[]\" }],\n outputs: [{ name: \"results\", type: \"bytes[]\" }],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"deposit\",\n inputs: [\n { name: \"config\", type: \"tuple\", components: channelConfigComponents },\n { name: \"amount\", type: \"uint128\" },\n { name: \"collector\", type: \"address\" },\n { name: \"collectorData\", type: \"bytes\" },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"claim\",\n inputs: [{ name: \"voucherClaims\", type: \"tuple[]\", components: voucherClaimComponents }],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"claimWithSignature\",\n inputs: [\n { name: \"voucherClaims\", type: \"tuple[]\", components: voucherClaimComponents },\n { name: \"authorizerSignature\", type: \"bytes\" },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"settle\",\n inputs: [\n { name: \"receiver\", type: \"address\" },\n { name: \"token\", type: \"address\" },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"initiateWithdraw\",\n inputs: [\n { name: \"config\", type: \"tuple\", components: channelConfigComponents },\n { name: \"amount\", type: \"uint128\" },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"finalizeWithdraw\",\n inputs: [{ name: \"config\", type: \"tuple\", components: channelConfigComponents }],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"refund\",\n inputs: [\n { name: \"config\", type: \"tuple\", components: channelConfigComponents },\n { name: \"amount\", type: \"uint128\" },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"refundWithSignature\",\n inputs: [\n { name: \"config\", type: \"tuple\", components: channelConfigComponents },\n { name: \"amount\", type: \"uint128\" },\n { name: \"nonce\", type: \"uint256\" },\n { name: \"receiverAuthorizerSignature\", type: \"bytes\" },\n ],\n outputs: [],\n stateMutability: \"nonpayable\",\n },\n {\n type: \"function\",\n name: \"getChannelId\",\n inputs: [{ name: \"config\", type: \"tuple\", components: channelConfigComponents }],\n outputs: [{ name: \"\", type: \"bytes32\" }],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"CHANNEL_CONFIG_TYPEHASH\",\n inputs: [],\n outputs: [{ name: \"\", type: \"bytes32\" }],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"channels\",\n inputs: [{ name: \"channelId\", type: \"bytes32\" }],\n outputs: [\n { name: \"balance\", type: \"uint128\" },\n { name: \"totalClaimed\", type: \"uint128\" },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"pendingWithdrawals\",\n inputs: [{ name: \"channelId\", type: \"bytes32\" }],\n outputs: [\n { name: \"amount\", type: \"uint128\" },\n { name: \"initiatedAt\", type: \"uint40\" },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"receivers\",\n inputs: [\n { name: \"receiver\", type: \"address\" },\n { name: \"token\", type: \"address\" },\n ],\n outputs: [\n { name: \"totalClaimed\", type: \"uint128\" },\n { name: \"totalSettled\", type: \"uint128\" },\n ],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"getVoucherDigest\",\n inputs: [\n { name: \"channelId\", type: \"bytes32\" },\n { name: \"maxClaimableAmount\", type: \"uint128\" },\n ],\n outputs: [{ name: \"\", type: \"bytes32\" }],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"getRefundDigest\",\n inputs: [\n { name: \"channelId\", type: \"bytes32\" },\n { name: \"nonce\", type: \"uint256\" },\n { name: \"amount\", type: \"uint128\" },\n ],\n outputs: [{ name: \"\", type: \"bytes32\" }],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"refundNonce\",\n inputs: [{ name: \"channelId\", type: \"bytes32\" }],\n outputs: [{ name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n },\n {\n type: \"function\",\n name: \"getClaimBatchDigest\",\n inputs: [{ name: \"voucherClaims\", type: \"tuple[]\", components: voucherClaimComponents }],\n outputs: [{ name: \"\", type: \"bytes32\" }],\n stateMutability: \"view\",\n },\n {\n type: \"event\",\n name: \"Settled\",\n inputs: [\n { name: \"receiver\", type: \"address\", indexed: true },\n { name: \"token\", type: \"address\", indexed: true },\n { name: \"sender\", type: \"address\", indexed: true },\n { name: \"amount\", type: \"uint128\", indexed: false },\n ],\n anonymous: false,\n },\n] as const;\n\nexport const erc20BalanceOfABI = [\n {\n type: \"function\",\n name: \"balanceOf\",\n inputs: [{ name: \"account\", type: \"address\" }],\n outputs: [{ name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n },\n] as const;\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import {
|
|
2
|
+
trySignEip2612PermitExtension,
|
|
3
|
+
trySignErc20ApprovalExtension
|
|
4
|
+
} from "./chunk-JNT7C46S.mjs";
|
|
5
|
+
import {
|
|
6
|
+
PERMIT2_ADDRESS,
|
|
7
|
+
uptoPermit2WitnessTypes,
|
|
8
|
+
x402UptoPermit2ProxyAddress
|
|
9
|
+
} from "./chunk-MACPBXCT.mjs";
|
|
10
|
+
import {
|
|
11
|
+
createPermit2Nonce,
|
|
12
|
+
getEvmChainId
|
|
13
|
+
} from "./chunk-TW7Z65AO.mjs";
|
|
14
|
+
|
|
15
|
+
// src/upto/client/permit2.ts
|
|
16
|
+
import { getAddress } from "viem";
|
|
17
|
+
async function createUptoPermit2Payload(signer, x402Version, paymentRequirements) {
|
|
18
|
+
const facilitatorAddress = paymentRequirements.extra?.facilitatorAddress;
|
|
19
|
+
if (!facilitatorAddress) {
|
|
20
|
+
throw new Error(
|
|
21
|
+
"upto scheme requires facilitatorAddress in paymentRequirements.extra. Ensure the server is configured with an upto facilitator that provides getExtra()."
|
|
22
|
+
);
|
|
23
|
+
}
|
|
24
|
+
const now = Math.floor(Date.now() / 1e3);
|
|
25
|
+
const nonce = createPermit2Nonce();
|
|
26
|
+
const validAfter = "0";
|
|
27
|
+
const deadline = (now + paymentRequirements.maxTimeoutSeconds).toString();
|
|
28
|
+
if (BigInt(deadline) <= BigInt(validAfter)) {
|
|
29
|
+
throw new Error(
|
|
30
|
+
`Invalid time window: deadline (${deadline}) must be after validAfter (${validAfter}). Check that maxTimeoutSeconds (${paymentRequirements.maxTimeoutSeconds}) is positive.`
|
|
31
|
+
);
|
|
32
|
+
}
|
|
33
|
+
const permit2Authorization = {
|
|
34
|
+
from: signer.address,
|
|
35
|
+
permitted: {
|
|
36
|
+
token: getAddress(paymentRequirements.asset),
|
|
37
|
+
amount: paymentRequirements.amount
|
|
38
|
+
},
|
|
39
|
+
spender: x402UptoPermit2ProxyAddress,
|
|
40
|
+
nonce,
|
|
41
|
+
deadline,
|
|
42
|
+
witness: {
|
|
43
|
+
to: getAddress(paymentRequirements.payTo),
|
|
44
|
+
facilitator: getAddress(facilitatorAddress),
|
|
45
|
+
validAfter
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
const chainId = getEvmChainId(paymentRequirements.network);
|
|
49
|
+
const signature = await signer.signTypedData({
|
|
50
|
+
domain: { name: "Permit2", chainId, verifyingContract: PERMIT2_ADDRESS },
|
|
51
|
+
types: uptoPermit2WitnessTypes,
|
|
52
|
+
primaryType: "PermitWitnessTransferFrom",
|
|
53
|
+
message: {
|
|
54
|
+
permitted: {
|
|
55
|
+
token: getAddress(permit2Authorization.permitted.token),
|
|
56
|
+
amount: BigInt(permit2Authorization.permitted.amount)
|
|
57
|
+
},
|
|
58
|
+
spender: getAddress(permit2Authorization.spender),
|
|
59
|
+
nonce: BigInt(permit2Authorization.nonce),
|
|
60
|
+
deadline: BigInt(permit2Authorization.deadline),
|
|
61
|
+
witness: {
|
|
62
|
+
to: getAddress(permit2Authorization.witness.to),
|
|
63
|
+
facilitator: getAddress(permit2Authorization.witness.facilitator),
|
|
64
|
+
validAfter: BigInt(permit2Authorization.witness.validAfter)
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
return {
|
|
69
|
+
x402Version,
|
|
70
|
+
payload: { signature, permit2Authorization }
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// src/upto/client/scheme.ts
|
|
75
|
+
var UptoEvmScheme = class {
|
|
76
|
+
/**
|
|
77
|
+
* Creates a new UptoEvmScheme instance.
|
|
78
|
+
*
|
|
79
|
+
* @param signer - The EVM signer for client operations
|
|
80
|
+
* @param options - Optional RPC configuration
|
|
81
|
+
*/
|
|
82
|
+
constructor(signer, options) {
|
|
83
|
+
this.signer = signer;
|
|
84
|
+
this.options = options;
|
|
85
|
+
this.scheme = "upto";
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Creates a payment payload for the Upto scheme using Permit2.
|
|
89
|
+
*
|
|
90
|
+
* @param x402Version - The x402 protocol version
|
|
91
|
+
* @param paymentRequirements - The payment requirements
|
|
92
|
+
* @param context - Optional context with server-declared extensions
|
|
93
|
+
* @returns Promise resolving to a payment payload result
|
|
94
|
+
*/
|
|
95
|
+
async createPaymentPayload(x402Version, paymentRequirements, context) {
|
|
96
|
+
const result = await createUptoPermit2Payload(this.signer, x402Version, paymentRequirements);
|
|
97
|
+
const eip2612Extensions = await trySignEip2612PermitExtension(
|
|
98
|
+
this.signer,
|
|
99
|
+
this.options,
|
|
100
|
+
paymentRequirements,
|
|
101
|
+
result,
|
|
102
|
+
context
|
|
103
|
+
);
|
|
104
|
+
if (eip2612Extensions) {
|
|
105
|
+
return { ...result, extensions: eip2612Extensions };
|
|
106
|
+
}
|
|
107
|
+
const erc20Extensions = await trySignErc20ApprovalExtension(
|
|
108
|
+
this.signer,
|
|
109
|
+
this.options,
|
|
110
|
+
paymentRequirements,
|
|
111
|
+
context
|
|
112
|
+
);
|
|
113
|
+
if (erc20Extensions) {
|
|
114
|
+
return { ...result, extensions: erc20Extensions };
|
|
115
|
+
}
|
|
116
|
+
return result;
|
|
117
|
+
}
|
|
118
|
+
};
|
|
119
|
+
|
|
120
|
+
export {
|
|
121
|
+
UptoEvmScheme
|
|
122
|
+
};
|
|
123
|
+
//# sourceMappingURL=chunk-I2DVUHM5.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/upto/client/permit2.ts","../../src/upto/client/scheme.ts"],"sourcesContent":["import { PaymentRequirements, PaymentPayloadResult } from \"@bankofai/x402-core/types\";\nimport {\n PERMIT2_ADDRESS,\n uptoPermit2WitnessTypes,\n x402UptoPermit2ProxyAddress,\n} from \"../../constants\";\nimport { ClientEvmSigner } from \"../../signer\";\nimport { UptoPermit2Authorization } from \"../../types\";\nimport { createPermit2Nonce, getEvmChainId } from \"../../utils\";\nimport { getAddress } from \"viem\";\n\n// Re-export Permit2-generic approval helpers\nexport { createPermit2ApprovalTx, getPermit2AllowanceReadParams } from \"../../exact/client/permit2\";\nexport type { Permit2AllowanceParams } from \"../../exact/client/permit2\";\n\n/**\n * Creates a signed upto Permit2 payment payload for the given requirements.\n *\n * Constructs a Permit2 authorization with an upto witness (including facilitator address)\n * and signs it using EIP-712 typed data.\n *\n * @param signer - The EVM client signer for signing typed data\n * @param x402Version - The x402 protocol version\n * @param paymentRequirements - The payment requirements including asset, amount, and payTo\n * @returns Promise resolving to a payment payload result with the signed authorization\n */\nexport async function createUptoPermit2Payload(\n signer: ClientEvmSigner,\n x402Version: number,\n paymentRequirements: PaymentRequirements,\n): Promise<PaymentPayloadResult> {\n const facilitatorAddress = paymentRequirements.extra?.facilitatorAddress as\n | `0x${string}`\n | undefined;\n if (!facilitatorAddress) {\n throw new Error(\n \"upto scheme requires facilitatorAddress in paymentRequirements.extra. \" +\n \"Ensure the server is configured with an upto facilitator that provides getExtra().\",\n );\n }\n\n const now = Math.floor(Date.now() / 1000);\n const nonce = createPermit2Nonce();\n const validAfter = \"0\";\n const deadline = (now + paymentRequirements.maxTimeoutSeconds).toString();\n\n if (BigInt(deadline) <= BigInt(validAfter)) {\n throw new Error(\n `Invalid time window: deadline (${deadline}) must be after validAfter (${validAfter}). ` +\n `Check that maxTimeoutSeconds (${paymentRequirements.maxTimeoutSeconds}) is positive.`,\n );\n }\n\n const permit2Authorization: UptoPermit2Authorization & { from: `0x${string}` } = {\n from: signer.address,\n permitted: {\n token: getAddress(paymentRequirements.asset),\n amount: paymentRequirements.amount,\n },\n spender: x402UptoPermit2ProxyAddress,\n nonce,\n deadline,\n witness: {\n to: getAddress(paymentRequirements.payTo),\n facilitator: getAddress(facilitatorAddress),\n validAfter,\n },\n };\n\n const chainId = getEvmChainId(paymentRequirements.network);\n\n const signature = await signer.signTypedData({\n domain: { name: \"Permit2\", chainId, verifyingContract: PERMIT2_ADDRESS },\n types: uptoPermit2WitnessTypes,\n primaryType: \"PermitWitnessTransferFrom\",\n message: {\n permitted: {\n token: getAddress(permit2Authorization.permitted.token),\n amount: BigInt(permit2Authorization.permitted.amount),\n },\n spender: getAddress(permit2Authorization.spender),\n nonce: BigInt(permit2Authorization.nonce),\n deadline: BigInt(permit2Authorization.deadline),\n witness: {\n to: getAddress(permit2Authorization.witness.to),\n facilitator: getAddress(permit2Authorization.witness.facilitator),\n validAfter: BigInt(permit2Authorization.witness.validAfter),\n },\n },\n });\n\n return {\n x402Version,\n payload: { signature, permit2Authorization },\n };\n}\n","import {\n SchemeNetworkClient,\n PaymentRequirements,\n PaymentPayloadResult,\n PaymentPayloadContext,\n} from \"@bankofai/x402-core/types\";\nimport { ClientEvmSigner } from \"../../signer\";\nimport { createUptoPermit2Payload } from \"./permit2\";\nimport {\n trySignEip2612PermitExtension,\n trySignErc20ApprovalExtension,\n} from \"../../shared/extensions\";\nimport { UptoEvmSchemeOptions } from \"./rpc\";\n\n/**\n * EVM client implementation for the Upto payment scheme.\n * Handles Permit2-based payment payload creation and gas-sponsoring extensions.\n */\nexport class UptoEvmScheme implements SchemeNetworkClient {\n readonly scheme = \"upto\";\n\n /**\n * Creates a new UptoEvmScheme instance.\n *\n * @param signer - The EVM signer for client operations\n * @param options - Optional RPC configuration\n */\n constructor(\n private readonly signer: ClientEvmSigner,\n private readonly options?: UptoEvmSchemeOptions,\n ) {}\n\n /**\n * Creates a payment payload for the Upto scheme using Permit2.\n *\n * @param x402Version - The x402 protocol version\n * @param paymentRequirements - The payment requirements\n * @param context - Optional context with server-declared extensions\n * @returns Promise resolving to a payment payload result\n */\n async createPaymentPayload(\n x402Version: number,\n paymentRequirements: PaymentRequirements,\n context?: PaymentPayloadContext,\n ): Promise<PaymentPayloadResult> {\n const result = await createUptoPermit2Payload(this.signer, x402Version, paymentRequirements);\n\n const eip2612Extensions = await trySignEip2612PermitExtension(\n this.signer,\n this.options,\n paymentRequirements,\n result,\n context,\n );\n if (eip2612Extensions) {\n return { ...result, extensions: eip2612Extensions };\n }\n\n const erc20Extensions = await trySignErc20ApprovalExtension(\n this.signer,\n this.options,\n paymentRequirements,\n context,\n );\n if (erc20Extensions) {\n return { ...result, extensions: erc20Extensions };\n }\n\n return result;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;AASA,SAAS,kBAAkB;AAiB3B,eAAsB,yBACpB,QACA,aACA,qBAC+B;AAC/B,QAAM,qBAAqB,oBAAoB,OAAO;AAGtD,MAAI,CAAC,oBAAoB;AACvB,UAAM,IAAI;AAAA,MACR;AAAA,IAEF;AAAA,EACF;AAEA,QAAM,MAAM,KAAK,MAAM,KAAK,IAAI,IAAI,GAAI;AACxC,QAAM,QAAQ,mBAAmB;AACjC,QAAM,aAAa;AACnB,QAAM,YAAY,MAAM,oBAAoB,mBAAmB,SAAS;AAExE,MAAI,OAAO,QAAQ,KAAK,OAAO,UAAU,GAAG;AAC1C,UAAM,IAAI;AAAA,MACR,kCAAkC,QAAQ,+BAA+B,UAAU,oCAChD,oBAAoB,iBAAiB;AAAA,IAC1E;AAAA,EACF;AAEA,QAAM,uBAA2E;AAAA,IAC/E,MAAM,OAAO;AAAA,IACb,WAAW;AAAA,MACT,OAAO,WAAW,oBAAoB,KAAK;AAAA,MAC3C,QAAQ,oBAAoB;AAAA,IAC9B;AAAA,IACA,SAAS;AAAA,IACT;AAAA,IACA;AAAA,IACA,SAAS;AAAA,MACP,IAAI,WAAW,oBAAoB,KAAK;AAAA,MACxC,aAAa,WAAW,kBAAkB;AAAA,MAC1C;AAAA,IACF;AAAA,EACF;AAEA,QAAM,UAAU,cAAc,oBAAoB,OAAO;AAEzD,QAAM,YAAY,MAAM,OAAO,cAAc;AAAA,IAC3C,QAAQ,EAAE,MAAM,WAAW,SAAS,mBAAmB,gBAAgB;AAAA,IACvE,OAAO;AAAA,IACP,aAAa;AAAA,IACb,SAAS;AAAA,MACP,WAAW;AAAA,QACT,OAAO,WAAW,qBAAqB,UAAU,KAAK;AAAA,QACtD,QAAQ,OAAO,qBAAqB,UAAU,MAAM;AAAA,MACtD;AAAA,MACA,SAAS,WAAW,qBAAqB,OAAO;AAAA,MAChD,OAAO,OAAO,qBAAqB,KAAK;AAAA,MACxC,UAAU,OAAO,qBAAqB,QAAQ;AAAA,MAC9C,SAAS;AAAA,QACP,IAAI,WAAW,qBAAqB,QAAQ,EAAE;AAAA,QAC9C,aAAa,WAAW,qBAAqB,QAAQ,WAAW;AAAA,QAChE,YAAY,OAAO,qBAAqB,QAAQ,UAAU;AAAA,MAC5D;AAAA,IACF;AAAA,EACF,CAAC;AAED,SAAO;AAAA,IACL;AAAA,IACA,SAAS,EAAE,WAAW,qBAAqB;AAAA,EAC7C;AACF;;;AC7EO,IAAM,gBAAN,MAAmD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASxD,YACmB,QACA,SACjB;AAFiB;AACA;AAVnB,SAAS,SAAS;AAAA,EAWf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUH,MAAM,qBACJ,aACA,qBACA,SAC+B;AAC/B,UAAM,SAAS,MAAM,yBAAyB,KAAK,QAAQ,aAAa,mBAAmB;AAE3F,UAAM,oBAAoB,MAAM;AAAA,MAC9B,KAAK;AAAA,MACL,KAAK;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,QAAI,mBAAmB;AACrB,aAAO,EAAE,GAAG,QAAQ,YAAY,kBAAkB;AAAA,IACpD;AAEA,UAAM,kBAAkB,MAAM;AAAA,MAC5B,KAAK;AAAA,MACL,KAAK;AAAA,MACL;AAAA,MACA;AAAA,IACF;AACA,QAAI,iBAAiB;AACnB,aAAO,EAAE,GAAG,QAAQ,YAAY,gBAAgB;AAAA,IAClD;AAEA,WAAO;AAAA,EACT;AACF;","names":[]}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
// src/types.ts
|
|
2
|
+
function isPermit2Payload(payload) {
|
|
3
|
+
return "permit2Authorization" in payload;
|
|
4
|
+
}
|
|
5
|
+
function isEIP3009Payload(payload) {
|
|
6
|
+
return "authorization" in payload;
|
|
7
|
+
}
|
|
8
|
+
function isUptoPermit2Payload(payload) {
|
|
9
|
+
if (typeof payload.signature !== "string") return false;
|
|
10
|
+
if (!("permit2Authorization" in payload)) return false;
|
|
11
|
+
const auth = payload.permit2Authorization;
|
|
12
|
+
if (typeof auth !== "object" || auth === null) return false;
|
|
13
|
+
const a = auth;
|
|
14
|
+
if (typeof a.from !== "string") return false;
|
|
15
|
+
if (typeof a.spender !== "string") return false;
|
|
16
|
+
if (typeof a.nonce !== "string") return false;
|
|
17
|
+
if (typeof a.deadline !== "string") return false;
|
|
18
|
+
const permitted = a.permitted;
|
|
19
|
+
if (typeof permitted !== "object" || permitted === null) return false;
|
|
20
|
+
const p = permitted;
|
|
21
|
+
if (typeof p.token !== "string") return false;
|
|
22
|
+
if (typeof p.amount !== "string") return false;
|
|
23
|
+
const witness = a.witness;
|
|
24
|
+
if (typeof witness !== "object" || witness === null) return false;
|
|
25
|
+
const w = witness;
|
|
26
|
+
return typeof w.facilitator === "string" && typeof w.to === "string" && typeof w.validAfter === "string";
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export {
|
|
30
|
+
isPermit2Payload,
|
|
31
|
+
isEIP3009Payload,
|
|
32
|
+
isUptoPermit2Payload
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=chunk-JK7SLLF7.mjs.map
|