@agoric/orchestration 0.1.1-dev-d57b08e.0.d57b08e → 0.1.1-dev-2ae3f1f.0.2ae3f1f

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/package.json +16 -16
  2. package/src/stubs/{viem-abi.d.ts → viem-typedData.ts} +9 -4
  3. package/src/utils/abitype.d.ts +6 -0
  4. package/src/utils/abitype.d.ts.map +1 -0
  5. package/src/utils/abitype.ts +13 -0
  6. package/src/utils/permit2/signatureTransfer.d.ts +208 -0
  7. package/src/utils/permit2/signatureTransfer.d.ts.map +1 -0
  8. package/src/utils/permit2/signatureTransfer.ts +240 -0
  9. package/src/utils/permit2/signatureTransferHelpers.d.ts +21 -0
  10. package/src/utils/permit2/signatureTransferHelpers.d.ts.map +1 -0
  11. package/src/utils/permit2/signatureTransferHelpers.ts +139 -0
  12. package/src/utils/permit2.d.ts +11 -0
  13. package/src/utils/permit2.d.ts.map +1 -0
  14. package/src/utils/permit2.ts +11 -0
  15. package/src/utils/viem-utils/hashTypedData.d.ts +17 -0
  16. package/src/utils/viem-utils/hashTypedData.d.ts.map +1 -0
  17. package/src/utils/viem-utils/hashTypedData.ts +57 -0
  18. package/src/utils/viem-utils/types.d.ts +6 -0
  19. package/src/utils/viem-utils/types.d.ts.map +1 -0
  20. package/src/utils/viem-utils/types.ts +18 -0
  21. package/src/utils/viem.d.ts +11 -0
  22. package/src/utils/viem.d.ts.map +1 -0
  23. package/src/utils/viem.ts +11 -0
  24. package/src/vendor/viem/{_esm-YOAV66U4.js → _esm-OKAICHVC.js} +2 -2
  25. package/src/vendor/viem/{ccip-AAQDZF3N.js → ccip-34BSSMV5.js} +1 -2
  26. package/src/vendor/viem/{chunk-4EF4K2MH.js → chunk-GCI53Z2G.js} +35 -1
  27. package/src/vendor/viem/chunk-OFIEVWYB.js +326 -0
  28. package/src/vendor/viem/viem-abi.js +2 -2
  29. package/src/vendor/viem/viem-typedData.d.ts +19 -0
  30. package/src/vendor/viem/viem-typedData.js +56 -0
  31. package/tsup.config.ts +13 -2
  32. package/src/stubs/viem-abi.d.ts.map +0 -1
  33. package/src/vendor/viem/chunk-XN4LUOIH.js +0 -253
  34. package/src/vendor/viem/secp256k1-WHBDSQB2.js +0 -1914
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agoric/orchestration",
3
- "version": "0.1.1-dev-d57b08e.0.d57b08e",
3
+ "version": "0.1.1-dev-2ae3f1f.0.2ae3f1f",
4
4
  "description": "Chain abstraction for Agoric's orchestration clients",
5
5
  "type": "module",
6
6
  "main": "index.js",
@@ -35,19 +35,19 @@
35
35
  },
36
36
  "homepage": "https://github.com/Agoric/agoric-sdk#readme",
37
37
  "dependencies": {
38
- "@agoric/async-flow": "0.1.1-dev-d57b08e.0.d57b08e",
39
- "@agoric/cosmic-proto": "0.4.1-dev-d57b08e.0.d57b08e",
40
- "@agoric/ertp": "0.16.3-dev-d57b08e.0.d57b08e",
41
- "@agoric/internal": "0.3.3-dev-d57b08e.0.d57b08e",
42
- "@agoric/network": "0.1.1-dev-d57b08e.0.d57b08e",
43
- "@agoric/notifier": "0.6.3-dev-d57b08e.0.d57b08e",
44
- "@agoric/store": "0.9.3-dev-d57b08e.0.d57b08e",
45
- "@agoric/time": "0.3.3-dev-d57b08e.0.d57b08e",
46
- "@agoric/vat-data": "0.5.3-dev-d57b08e.0.d57b08e",
47
- "@agoric/vats": "0.15.2-dev-d57b08e.0.d57b08e",
48
- "@agoric/vow": "0.1.1-dev-d57b08e.0.d57b08e",
49
- "@agoric/zoe": "0.26.3-dev-d57b08e.0.d57b08e",
50
- "@agoric/zone": "0.2.3-dev-d57b08e.0.d57b08e",
38
+ "@agoric/async-flow": "0.1.1-dev-2ae3f1f.0.2ae3f1f",
39
+ "@agoric/cosmic-proto": "0.4.1-dev-2ae3f1f.0.2ae3f1f",
40
+ "@agoric/ertp": "0.16.3-dev-2ae3f1f.0.2ae3f1f",
41
+ "@agoric/internal": "0.3.3-dev-2ae3f1f.0.2ae3f1f",
42
+ "@agoric/network": "0.1.1-dev-2ae3f1f.0.2ae3f1f",
43
+ "@agoric/notifier": "0.6.3-dev-2ae3f1f.0.2ae3f1f",
44
+ "@agoric/store": "0.9.3-dev-2ae3f1f.0.2ae3f1f",
45
+ "@agoric/time": "0.3.3-dev-2ae3f1f.0.2ae3f1f",
46
+ "@agoric/vat-data": "0.5.3-dev-2ae3f1f.0.2ae3f1f",
47
+ "@agoric/vats": "0.15.2-dev-2ae3f1f.0.2ae3f1f",
48
+ "@agoric/vow": "0.1.1-dev-2ae3f1f.0.2ae3f1f",
49
+ "@agoric/zoe": "0.26.3-dev-2ae3f1f.0.2ae3f1f",
50
+ "@agoric/zone": "0.2.3-dev-2ae3f1f.0.2ae3f1f",
51
51
  "@cosmjs/encoding": "^0.36.0",
52
52
  "@endo/base64": "^1.0.12",
53
53
  "@endo/errors": "^1.2.13",
@@ -60,7 +60,7 @@
60
60
  "bs58": "^6.0.0"
61
61
  },
62
62
  "devDependencies": {
63
- "@agoric/swingset-liveslots": "0.10.3-dev-d57b08e.0.d57b08e",
63
+ "@agoric/swingset-liveslots": "0.10.3-dev-2ae3f1f.0.2ae3f1f",
64
64
  "@chain-registry/client": "^1.53.194",
65
65
  "@cosmjs/amino": "^0.36.0",
66
66
  "@cosmjs/proto-signing": "^0.36.0",
@@ -106,5 +106,5 @@
106
106
  "typeCoverage": {
107
107
  "atLeast": 97.46
108
108
  },
109
- "gitHead": "d57b08e6945269499ff15845f664405099f0f39b"
109
+ "gitHead": "2ae3f1fb1423324b633432fe7149a26bcaadd843"
110
110
  }
@@ -6,7 +6,12 @@
6
6
  * So we use tsup to do dead code elimination, aka tree-shaking,
7
7
  * while preserving type info.
8
8
  */
9
- export { encodeFunctionData } from 'viem/utils';
10
- export { decodeAbiParameters } from 'viem/utils';
11
- export { encodeAbiParameters } from 'viem/utils';
12
- //# sourceMappingURL=viem-abi.d.ts.map
9
+ export {
10
+ hashStruct,
11
+ hashTypedData,
12
+ recoverTypedDataAddress,
13
+ verifyTypedData,
14
+ serializeTypedData,
15
+ validateTypedData,
16
+ } from 'viem/utils';
17
+ export { encodeType } from '../utils/viem-utils/hashTypedData.ts';
@@ -0,0 +1,6 @@
1
+ import type { TypedDataType, TypedData } from 'abitype';
2
+ export type TypedDataParameter<TN extends string = string, TT extends string = TypedDataType | keyof TypedData | `${keyof TypedData}[${string | ''}]`> = {
3
+ name: TN;
4
+ type: TT;
5
+ };
6
+ //# sourceMappingURL=abitype.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abitype.d.ts","sourceRoot":"","sources":["abitype.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAGxD,MAAM,MAAM,kBAAkB,CAC5B,EAAE,SAAS,MAAM,GAAG,MAAM,EAC1B,EAAE,SAAS,MAAM,GACb,aAAa,GACb,MAAM,SAAS,GACf,GAAG,MAAM,SAAS,IAAI,MAAM,GAAG,EAAE,GAAG,IACtC;IACF,IAAI,EAAE,EAAE,CAAC;IACT,IAAI,EAAE,EAAE,CAAC;CACV,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { TypedDataType, TypedData } from 'abitype';
2
+
3
+ // Redefine abitype's TypedDataParameter to make it generic
4
+ export type TypedDataParameter<
5
+ TN extends string = string,
6
+ TT extends string =
7
+ | TypedDataType
8
+ | keyof TypedData
9
+ | `${keyof TypedData}[${string | ''}]`,
10
+ > = {
11
+ name: TN;
12
+ type: TT;
13
+ };
@@ -0,0 +1,208 @@
1
+ /**
2
+ * @file Signature transfer permit2 types and utilities
3
+ *
4
+ * @license MIT
5
+ * Copyright (c) 2021 Uniswap Lab
6
+ * Copied and adapted from https://github.com/Uniswap/sdks/blob/de28419fcae6e6ba6f88e4a4ae46b2fc9d226cd6/sdks/permit2-sdk/src/signatureTransfer.ts
7
+ *
8
+ * The modifications made are to generalize the witness type to allow defining the field name,
9
+ * and use viem types instead of ethers types.
10
+ *
11
+ * Some stylistic changes have also been made to conform to our code style.
12
+ */
13
+ import type { TypedDataToPrimitiveTypes } from 'abitype';
14
+ import type { Address, TypedData, TypedDataDefinition } from 'viem';
15
+ import type { TypedDataParameter } from '../abitype.ts';
16
+ interface WitnessDefinition<T extends TypedData = TypedData, TD extends TypedDataParameter<string, Extract<keyof T, string>> = TypedDataParameter<'witness', Extract<keyof T, string>>> {
17
+ witnessField: TD;
18
+ witnessTypes: T;
19
+ }
20
+ export interface Witness<T extends TypedData = TypedData, TD extends TypedDataParameter<string, Extract<keyof T, string>> = TypedDataParameter<'witness', Extract<keyof T, string>>> extends WitnessDefinition<T, TD> {
21
+ witness: TypedDataToPrimitiveTypes<T>[TD['type']];
22
+ }
23
+ export declare function makeWitness<T extends TypedData, TD extends TypedDataParameter<string, Extract<keyof T, string>>>(data: NoInfer<TypedDataToPrimitiveTypes<T>[TD['type']]>, types: T, typeParam: TD): Witness<T, TD>;
24
+ export type TokenPermissions = {
25
+ token: Address;
26
+ amount: bigint;
27
+ };
28
+ export type PermitTransferFrom = {
29
+ permitted: TokenPermissions;
30
+ spender: Address;
31
+ nonce: bigint;
32
+ deadline: bigint;
33
+ };
34
+ export type PermitBatchTransferFrom = {
35
+ permitted: readonly TokenPermissions[];
36
+ spender: Address;
37
+ nonce: bigint;
38
+ deadline: bigint;
39
+ };
40
+ export declare const PermitTransferFromTypeParams: [{
41
+ readonly name: "permitted";
42
+ readonly type: "TokenPermissions";
43
+ }, {
44
+ readonly name: "spender";
45
+ readonly type: "address";
46
+ }, {
47
+ readonly name: "nonce";
48
+ readonly type: "uint256";
49
+ }, {
50
+ readonly name: "deadline";
51
+ readonly type: "uint256";
52
+ }];
53
+ export declare const PermitBatchTransferFromTypeParams: [{
54
+ readonly name: "permitted";
55
+ readonly type: "TokenPermissions[]";
56
+ }, {
57
+ readonly name: "spender";
58
+ readonly type: "address";
59
+ }, {
60
+ readonly name: "nonce";
61
+ readonly type: "uint256";
62
+ }, {
63
+ readonly name: "deadline";
64
+ readonly type: "uint256";
65
+ }];
66
+ export declare const PermitTransferFromTypes: {
67
+ readonly EIP712Domain: [{
68
+ readonly name: "name";
69
+ readonly type: "string";
70
+ }, {
71
+ readonly name: "chainId";
72
+ readonly type: "uint256";
73
+ }, {
74
+ readonly name: "verifyingContract";
75
+ readonly type: "address";
76
+ }];
77
+ readonly PermitTransferFrom: [{
78
+ readonly name: "permitted";
79
+ readonly type: "TokenPermissions";
80
+ }, {
81
+ readonly name: "spender";
82
+ readonly type: "address";
83
+ }, {
84
+ readonly name: "nonce";
85
+ readonly type: "uint256";
86
+ }, {
87
+ readonly name: "deadline";
88
+ readonly type: "uint256";
89
+ }];
90
+ readonly TokenPermissions: [{
91
+ readonly name: "token";
92
+ readonly type: "address";
93
+ }, {
94
+ readonly name: "amount";
95
+ readonly type: "uint256";
96
+ }];
97
+ };
98
+ export declare const PermitBatchTransferFromTypes: {
99
+ readonly EIP712Domain: [{
100
+ readonly name: "name";
101
+ readonly type: "string";
102
+ }, {
103
+ readonly name: "chainId";
104
+ readonly type: "uint256";
105
+ }, {
106
+ readonly name: "verifyingContract";
107
+ readonly type: "address";
108
+ }];
109
+ readonly PermitBatchTransferFrom: [{
110
+ readonly name: "permitted";
111
+ readonly type: "TokenPermissions[]";
112
+ }, {
113
+ readonly name: "spender";
114
+ readonly type: "address";
115
+ }, {
116
+ readonly name: "nonce";
117
+ readonly type: "uint256";
118
+ }, {
119
+ readonly name: "deadline";
120
+ readonly type: "uint256";
121
+ }];
122
+ readonly TokenPermissions: [{
123
+ readonly name: "token";
124
+ readonly type: "address";
125
+ }, {
126
+ readonly name: "amount";
127
+ readonly type: "uint256";
128
+ }];
129
+ };
130
+ export declare function permitWitnessTransferFromTypes<T extends TypedData, TD extends TypedDataParameter<string, Extract<keyof T, string>> = TypedDataParameter<'witness', Extract<keyof T, string>>>(witness: WitnessDefinition<T, TD>): {
131
+ readonly EIP712Domain: [{
132
+ readonly name: "name";
133
+ readonly type: "string";
134
+ }, {
135
+ readonly name: "chainId";
136
+ readonly type: "uint256";
137
+ }, {
138
+ readonly name: "verifyingContract";
139
+ readonly type: "address";
140
+ }];
141
+ readonly PermitWitnessTransferFrom: readonly [{
142
+ readonly name: "permitted";
143
+ readonly type: "TokenPermissions";
144
+ }, {
145
+ readonly name: "spender";
146
+ readonly type: "address";
147
+ }, {
148
+ readonly name: "nonce";
149
+ readonly type: "uint256";
150
+ }, {
151
+ readonly name: "deadline";
152
+ readonly type: "uint256";
153
+ }, TD];
154
+ readonly TokenPermissions: [{
155
+ readonly name: "token";
156
+ readonly type: "address";
157
+ }, {
158
+ readonly name: "amount";
159
+ readonly type: "uint256";
160
+ }];
161
+ } & T;
162
+ export declare function permitBatchWitnessTransferFromTypes<T extends TypedData, TD extends TypedDataParameter<string, Extract<keyof T, string>> = TypedDataParameter<'witness', Extract<keyof T, string>>>(witness: WitnessDefinition<T, TD>): {
163
+ readonly EIP712Domain: [{
164
+ readonly name: "name";
165
+ readonly type: "string";
166
+ }, {
167
+ readonly name: "chainId";
168
+ readonly type: "uint256";
169
+ }, {
170
+ readonly name: "verifyingContract";
171
+ readonly type: "address";
172
+ }];
173
+ readonly PermitBatchWitnessTransferFrom: readonly [{
174
+ readonly name: "permitted";
175
+ readonly type: "TokenPermissions[]";
176
+ }, {
177
+ readonly name: "spender";
178
+ readonly type: "address";
179
+ }, {
180
+ readonly name: "nonce";
181
+ readonly type: "uint256";
182
+ }, {
183
+ readonly name: "deadline";
184
+ readonly type: "uint256";
185
+ }, TD];
186
+ readonly TokenPermissions: [{
187
+ readonly name: "token";
188
+ readonly type: "address";
189
+ }, {
190
+ readonly name: "amount";
191
+ readonly type: "uint256";
192
+ }];
193
+ } & T;
194
+ export type PermitWitnessTransferFrom<T extends Record<string, unknown>, TN extends string = 'witness'> = PermitTransferFrom & {
195
+ [key in TN]: T;
196
+ };
197
+ export type PermitBatchWitnessTransferFrom<T extends Record<string, unknown>, TN extends string = 'witness'> = PermitBatchTransferFrom & {
198
+ [key in TN]: T;
199
+ };
200
+ export declare function permit2Domain(permit2Address: Address, chainId: number | bigint): {
201
+ readonly name: "Permit2";
202
+ readonly chainId: number | bigint;
203
+ readonly verifyingContract: `0x${string}`;
204
+ };
205
+ export declare function getPermitWitnessTransferFromData<T extends TypedData, TD extends TypedDataParameter<string, Extract<keyof T, string>> = TypedDataParameter<'witness', Extract<keyof T, string>>>(permit: PermitTransferFrom, permit2Address: Address, chainId: number | bigint, witness: Witness<T, TD>): TypedDataDefinition<ReturnType<typeof permitWitnessTransferFromTypes<T, TD>>, 'PermitWitnessTransferFrom', 'PermitWitnessTransferFrom'>;
206
+ export declare function getPermitBatchWitnessTransferFromData<T extends TypedData, TD extends TypedDataParameter<string, Extract<keyof T, string>> = TypedDataParameter<'witness', Extract<keyof T, string>>>(permit: PermitBatchTransferFrom, permit2Address: Address, chainId: number | bigint, witness: Witness<T, TD>): TypedDataDefinition<ReturnType<typeof permitBatchWitnessTransferFromTypes<T, TD>>, 'PermitBatchWitnessTransferFrom', 'PermitBatchWitnessTransferFrom'>;
207
+ export {};
208
+ //# sourceMappingURL=signatureTransfer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signatureTransfer.d.ts","sourceRoot":"","sources":["signatureTransfer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,240 @@
1
+ /**
2
+ * @file Signature transfer permit2 types and utilities
3
+ *
4
+ * @license MIT
5
+ * Copyright (c) 2021 Uniswap Lab
6
+ * Copied and adapted from https://github.com/Uniswap/sdks/blob/de28419fcae6e6ba6f88e4a4ae46b2fc9d226cd6/sdks/permit2-sdk/src/signatureTransfer.ts
7
+ *
8
+ * The modifications made are to generalize the witness type to allow defining the field name,
9
+ * and use viem types instead of ethers types.
10
+ *
11
+ * Some stylistic changes have also been made to conform to our code style.
12
+ */
13
+
14
+ import type { TypedDataToPrimitiveTypes } from 'abitype';
15
+ import type {
16
+ Address,
17
+ TypedData,
18
+ TypedDataDefinition,
19
+ TypedDataDomain,
20
+ } from 'viem';
21
+ import type { TypedDataParameter } from '../abitype.ts';
22
+
23
+ const PERMIT2_DOMAIN_NAME = 'Permit2';
24
+
25
+ // TODO: disallow witness type field being another Permit field name
26
+ interface WitnessDefinition<
27
+ T extends TypedData = TypedData,
28
+ TD extends TypedDataParameter<string, Extract<keyof T, string>> =
29
+ TypedDataParameter<'witness', Extract<keyof T, string>>,
30
+ > {
31
+ witnessField: TD;
32
+ witnessTypes: T;
33
+ }
34
+
35
+ export interface Witness<
36
+ T extends TypedData = TypedData,
37
+ TD extends TypedDataParameter<string, Extract<keyof T, string>> =
38
+ TypedDataParameter<'witness', Extract<keyof T, string>>,
39
+ > extends WitnessDefinition<T, TD> {
40
+ witness: TypedDataToPrimitiveTypes<T>[TD['type']];
41
+ }
42
+
43
+ export function makeWitness<
44
+ T extends TypedData,
45
+ TD extends TypedDataParameter<string, Extract<keyof T, string>>,
46
+ >(
47
+ data: NoInfer<TypedDataToPrimitiveTypes<T>[TD['type']]>,
48
+ types: T,
49
+ typeParam: TD,
50
+ ): Witness<T, TD> {
51
+ return {
52
+ witness: data,
53
+ witnessTypes: types,
54
+ witnessField: typeParam,
55
+ };
56
+ }
57
+
58
+ export type TokenPermissions = {
59
+ token: Address;
60
+ amount: bigint;
61
+ };
62
+
63
+ export type PermitTransferFrom = {
64
+ permitted: TokenPermissions;
65
+ spender: Address;
66
+ nonce: bigint;
67
+ deadline: bigint;
68
+ };
69
+
70
+ export type PermitBatchTransferFrom = {
71
+ permitted: readonly TokenPermissions[];
72
+ spender: Address;
73
+ nonce: bigint;
74
+ deadline: bigint;
75
+ };
76
+
77
+ const Permit2DomainTypeParams = [
78
+ { name: 'name', type: 'string' },
79
+ { name: 'chainId', type: 'uint256' },
80
+ { name: 'verifyingContract', type: 'address' },
81
+ ] as const satisfies TypedDataParameter[];
82
+
83
+ export const PermitTransferFromTypeParams = [
84
+ { name: 'permitted', type: 'TokenPermissions' },
85
+ { name: 'spender', type: 'address' },
86
+ { name: 'nonce', type: 'uint256' },
87
+ { name: 'deadline', type: 'uint256' },
88
+ ] as const satisfies TypedDataParameter[];
89
+
90
+ export const PermitBatchTransferFromTypeParams = [
91
+ { name: 'permitted', type: 'TokenPermissions[]' },
92
+ { name: 'spender', type: 'address' },
93
+ { name: 'nonce', type: 'uint256' },
94
+ { name: 'deadline', type: 'uint256' },
95
+ ] as const satisfies TypedDataParameter[];
96
+
97
+ const TokenPermissionTypeParams = [
98
+ { name: 'token', type: 'address' },
99
+ { name: 'amount', type: 'uint256' },
100
+ ] as const satisfies TypedDataParameter[];
101
+
102
+ export const PermitTransferFromTypes = {
103
+ EIP712Domain: Permit2DomainTypeParams,
104
+ PermitTransferFrom: PermitTransferFromTypeParams,
105
+ TokenPermissions: TokenPermissionTypeParams,
106
+ } as const satisfies TypedData;
107
+
108
+ export const PermitBatchTransferFromTypes = {
109
+ EIP712Domain: Permit2DomainTypeParams,
110
+ PermitBatchTransferFrom: PermitBatchTransferFromTypeParams,
111
+ TokenPermissions: TokenPermissionTypeParams,
112
+ } as const satisfies TypedData;
113
+
114
+ export function permitWitnessTransferFromTypes<
115
+ T extends TypedData,
116
+ TD extends TypedDataParameter<string, Extract<keyof T, string>> =
117
+ TypedDataParameter<'witness', Extract<keyof T, string>>,
118
+ >(witness: WitnessDefinition<T, TD>) {
119
+ return {
120
+ EIP712Domain: Permit2DomainTypeParams,
121
+ PermitWitnessTransferFrom: [
122
+ ...PermitTransferFromTypeParams,
123
+ // Enable runtime type to accept undefined field for base type extraction
124
+ ...((witness ? [witness.witnessField] : []) as [TD]),
125
+ ],
126
+ TokenPermissions: TokenPermissionTypeParams,
127
+ ...witness?.witnessTypes,
128
+ } as const satisfies TypedData;
129
+ }
130
+
131
+ export function permitBatchWitnessTransferFromTypes<
132
+ T extends TypedData,
133
+ TD extends TypedDataParameter<string, Extract<keyof T, string>> =
134
+ TypedDataParameter<'witness', Extract<keyof T, string>>,
135
+ >(witness: WitnessDefinition<T, TD>) {
136
+ return {
137
+ EIP712Domain: Permit2DomainTypeParams,
138
+ PermitBatchWitnessTransferFrom: [
139
+ ...PermitBatchTransferFromTypeParams,
140
+ // Enable runtime type to accept undefined field for base type extraction
141
+ ...((witness ? [witness.witnessField] : []) as [TD]),
142
+ ],
143
+ TokenPermissions: TokenPermissionTypeParams,
144
+ ...witness?.witnessTypes,
145
+ } as const satisfies TypedData;
146
+ }
147
+
148
+ export type PermitWitnessTransferFrom<
149
+ T extends Record<string, unknown>,
150
+ TN extends string = 'witness',
151
+ > = PermitTransferFrom & { [key in TN]: T };
152
+
153
+ export type PermitBatchWitnessTransferFrom<
154
+ T extends Record<string, unknown>,
155
+ TN extends string = 'witness',
156
+ > = PermitBatchTransferFrom & { [key in TN]: T };
157
+
158
+ export function permit2Domain(
159
+ permit2Address: Address,
160
+ chainId: number | bigint,
161
+ ) {
162
+ return {
163
+ name: PERMIT2_DOMAIN_NAME,
164
+ chainId,
165
+ verifyingContract: permit2Address,
166
+ } as const satisfies TypedDataDomain;
167
+ }
168
+
169
+ // XXX: restore permit to be either PermitTransferFrom or PermitBatchTransferFrom
170
+ // and remove duplication between the two functions below
171
+ // Original method was `SignatureTransfer.getPermitData`
172
+ export function getPermitWitnessTransferFromData<
173
+ T extends TypedData,
174
+ TD extends TypedDataParameter<string, Extract<keyof T, string>> =
175
+ TypedDataParameter<'witness', Extract<keyof T, string>>,
176
+ >(
177
+ permit: PermitTransferFrom,
178
+ permit2Address: Address,
179
+ chainId: number | bigint,
180
+ witness: Witness<T, TD>,
181
+ ): TypedDataDefinition<
182
+ ReturnType<typeof permitWitnessTransferFromTypes<T, TD>>,
183
+ 'PermitWitnessTransferFrom',
184
+ 'PermitWitnessTransferFrom'
185
+ > {
186
+ // type MessageType = TypedDataToPrimitiveTypes<
187
+ // ReturnType<typeof permitWitnessTransferFromTypes<T, TD>>
188
+ // >['PermitWitnessTransferFrom'];
189
+
190
+ const domain = permit2Domain(permit2Address, chainId);
191
+
192
+ const types = permitWitnessTransferFromTypes(witness);
193
+
194
+ return {
195
+ // @ts-expect-error some generic type inference issue
196
+ domain,
197
+ types,
198
+ primaryType: 'PermitWitnessTransferFrom',
199
+ // @ts-expect-error some generic type inference issue
200
+ message: {
201
+ ...permit,
202
+ [witness.witnessField.name]: witness.witness,
203
+ },
204
+ };
205
+ }
206
+
207
+ export function getPermitBatchWitnessTransferFromData<
208
+ T extends TypedData,
209
+ TD extends TypedDataParameter<string, Extract<keyof T, string>> =
210
+ TypedDataParameter<'witness', Extract<keyof T, string>>,
211
+ >(
212
+ permit: PermitBatchTransferFrom,
213
+ permit2Address: Address,
214
+ chainId: number | bigint,
215
+ witness: Witness<T, TD>,
216
+ ): TypedDataDefinition<
217
+ ReturnType<typeof permitBatchWitnessTransferFromTypes<T, TD>>,
218
+ 'PermitBatchWitnessTransferFrom',
219
+ 'PermitBatchWitnessTransferFrom'
220
+ > {
221
+ // type MessageType = TypedDataToPrimitiveTypes<
222
+ // ReturnType<typeof permitBatchWitnessTransferFromTypes<T, TD>>
223
+ // >['PermitBatchWitnessTransferFrom'];
224
+
225
+ const domain = permit2Domain(permit2Address, chainId);
226
+
227
+ const types = permitBatchWitnessTransferFromTypes(witness);
228
+
229
+ return {
230
+ // @ts-expect-error some generic type inference issue
231
+ domain,
232
+ types,
233
+ primaryType: 'PermitBatchWitnessTransferFrom',
234
+ // @ts-expect-error some generic type inference issue
235
+ message: {
236
+ ...permit,
237
+ [witness.witnessField.name]: witness.witness,
238
+ },
239
+ };
240
+ }
@@ -0,0 +1,21 @@
1
+ /**
2
+ * @file Helpers for working with permit2 signature transfer witness types
3
+ *
4
+ * This is original code that was adapted for permit2-sdk, unlike @see ./permit2SignatureTransfer.ts
5
+ */
6
+ import type { TypedData } from 'viem';
7
+ import type { TypedDataParameter } from '../abitype.ts';
8
+ import { PermitBatchTransferFromTypeParams, PermitTransferFromTypeParams } from './signatureTransfer.ts';
9
+ export declare const makeWitnessTypeStringExtractor: ({ encodeType, }: {
10
+ encodeType: ({ primaryType, types, }: {
11
+ primaryType: string;
12
+ types: TypedData;
13
+ }) => string;
14
+ }) => (types: TypedData) => string;
15
+ export declare const extractWitnessFieldFromTypes: <T extends Readonly<TypedDataParameter>>(types: {
16
+ PermitBatchWitnessTransferFrom: readonly [...typeof PermitBatchTransferFromTypeParams, T];
17
+ } | {
18
+ PermitWitnessTransferFrom: readonly [...typeof PermitTransferFromTypeParams, T];
19
+ }) => T;
20
+ export declare const isPermit2MessageType: (type: string) => type is "PermitWitnessTransferFrom" | "PermitBatchWitnessTransferFrom";
21
+ //# sourceMappingURL=signatureTransferHelpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signatureTransferHelpers.d.ts","sourceRoot":"","sources":["signatureTransferHelpers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACtC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EACL,iCAAiC,EAEjC,4BAA4B,EAE7B,MAAM,wBAAwB,CAAC;AAEhC,eAAO,MAAM,8BAA8B,GAAI,iBAE5C;IACD,UAAU,EAAE,CAAC,EACX,WAAW,EACX,KAAK,GACN,EAAE;QACD,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE,SAAS,CAAC;KAClB,KAAK,MAAM,CAAC;CACd,MAiBsC,OAAO,SAAS,WA0BtD,CAAC;AAUF,eAAO,MAAM,4BAA4B,GACvC,CAAC,SAAS,QAAQ,CAAC,kBAAkB,CAAC,EAEtC,OACI;IACE,8BAA8B,EAAE,SAAS,CACvC,GAAG,OAAO,iCAAiC,EAC3C,CAAC,CACF,CAAC;CACH,GACD;IACE,yBAAyB,EAAE,SAAS,CAClC,GAAG,OAAO,4BAA4B,EACtC,CAAC,CACF,CAAC;CACH,KACJ,CAqCF,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAI,MAAM,MAAM,2EAKhD,CAAC"}