@rhinestone/sdk 0.0.0-dev-20260326103934 → 0.0.0-dev-20260331130650
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/accounts/json-rpc/providers.js +1 -1
- package/dist/src/accounts/safe.d.ts.map +1 -1
- package/dist/src/accounts/safe.js +4 -1
- package/dist/src/accounts/safe.test.js +50 -0
- package/dist/src/actions/recovery.test.js +1 -1
- package/dist/src/execution/signing.test.d.ts +2 -0
- package/dist/src/execution/signing.test.d.ts.map +1 -0
- package/dist/src/execution/signing.test.js +334 -0
- package/dist/src/execution/utils.d.ts +1 -0
- package/dist/src/execution/utils.d.ts.map +1 -1
- package/dist/src/execution/utils.js +27 -5
- package/dist/src/modules/validators/index.d.ts +2 -2
- package/dist/src/modules/validators/index.d.ts.map +1 -1
- package/dist/src/modules/validators/index.js +2 -1
- package/dist/src/modules/validators/smart-sessions.d.ts +11 -3
- package/dist/src/modules/validators/smart-sessions.d.ts.map +1 -1
- package/dist/src/modules/validators/smart-sessions.js +26 -15
- package/dist/src/modules/validators/smart-sessions.test.js +240 -16
- package/dist/src/orchestrator/consts.d.ts +1 -1
- package/dist/src/orchestrator/consts.js +1 -1
- package/dist/src/orchestrator/registry.d.ts.map +1 -1
- package/dist/src/orchestrator/registry.js +5 -1
- package/dist/src/types.d.ts +3 -0
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/utils/index.d.ts +3 -9
- package/dist/src/utils/index.d.ts.map +1 -1
- package/dist/src/utils/index.test.d.ts +2 -0
- package/dist/src/utils/index.test.d.ts.map +1 -0
- package/dist/src/utils/index.test.js +42 -0
- package/dist/test/utils/utils.js +1 -1
- package/package.json +1 -1
|
@@ -11,7 +11,7 @@ function getAlchemyUrl(chainId, apiKey) {
|
|
|
11
11
|
}
|
|
12
12
|
return urlTemplate
|
|
13
13
|
.replace('{{chain_param}}', chainParam)
|
|
14
|
-
.replace('
|
|
14
|
+
.replace('${ALCHEMY_API_KEY}', apiKey);
|
|
15
15
|
}
|
|
16
16
|
function getCustomUrl(chainId, urls) {
|
|
17
17
|
return urls[chainId];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"safe.d.ts","sourceRoot":"","sources":["../../../accounts/safe.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,GAAG,EACR,KAAK,OAAO,EACZ,KAAK,KAAK,EAOV,KAAK,GAAG,EAER,KAAK,YAAY,EAKlB,MAAM,MAAM,CAAA;AACb,OAAO,EAIL,KAAK,YAAY,EACjB,KAAK,0BAA0B,EAEhC,MAAM,0BAA0B,CAAA;AAGjC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAM/C,OAAO,KAAK,EAAE,QAAQ,EAAE,uBAAuB,EAAe,MAAM,UAAU,CAAA;AAM9E,OAAO,EAAoC,KAAK,eAAe,EAAE,MAAM,SAAS,CAAA;AAoBhF,iBAAS,aAAa,CAAC,MAAM,EAAE,uBAAuB;;;;;;SAmGrD;AAED,iBAAS,eAAe,CAAC,MAAM,EAAE,uBAAuB;;;;;;EAgFvD;AAED,iBAAS,UAAU,CAAC,MAAM,EAAE,uBAAuB,
|
|
1
|
+
{"version":3,"file":"safe.d.ts","sourceRoot":"","sources":["../../../accounts/safe.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,GAAG,EACR,KAAK,OAAO,EACZ,KAAK,KAAK,EAOV,KAAK,GAAG,EAER,KAAK,YAAY,EAKlB,MAAM,MAAM,CAAA;AACb,OAAO,EAIL,KAAK,YAAY,EACjB,KAAK,0BAA0B,EAEhC,MAAM,0BAA0B,CAAA;AAGjC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAM/C,OAAO,KAAK,EAAE,QAAQ,EAAE,uBAAuB,EAAe,MAAM,UAAU,CAAA;AAM9E,OAAO,EAAoC,KAAK,eAAe,EAAE,MAAM,SAAS,CAAA;AAoBhF,iBAAS,aAAa,CAAC,MAAM,EAAE,uBAAuB;;;;;;SAmGrD;AAED,iBAAS,eAAe,CAAC,MAAM,EAAE,uBAAuB;;;;;;EAgFvD;AAED,iBAAS,UAAU,CAAC,MAAM,EAAE,uBAAuB,iBAoBlD;AAED,iBAAS,eAAe,CAAC,MAAM,EAAE,uBAAuB,EAAE,KAAK,EAAE,KAAK;;;;;;EAarE;AAED,iBAAS,cAAc,CAAC,MAAM,EAAE,MAAM,iBA2BrC;AAED,iBAAe,aAAa,CAC1B,SAAS,EAAE,GAAG,EACd,SAAS,EAAE,eAAe,EAC1B,kBAAkB,GAAE,CAAC,SAAS,EAAE,GAAG,KAAK,GAA8B,0BAMvE;AAED,iBAAe,eAAe,CAC5B,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,QAAQ,EAChB,gBAAgB,EAAE,OAAO,EACzB,IAAI,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,iEAWlC;AAED,iBAAe,uBAAuB,CACpC,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,QAAQ,EACnB,gBAAgB,EAAE,OAAO,EACzB,IAAI,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,iEAalC;AA0GD,OAAO,EACL,eAAe,EACf,cAAc,EACd,UAAU,EACV,aAAa,EACb,aAAa,EACb,eAAe,EACf,eAAe,EACf,uBAAuB,GACxB,CAAA"}
|
|
@@ -186,6 +186,9 @@ function getV0DeployArgs(config) {
|
|
|
186
186
|
function getAddress(config) {
|
|
187
187
|
const deployArgs = getDeployArgs(config);
|
|
188
188
|
if (!deployArgs) {
|
|
189
|
+
if (config.initData?.address) {
|
|
190
|
+
return config.initData.address;
|
|
191
|
+
}
|
|
189
192
|
throw new Error('Cannot derive address: deploy args not available');
|
|
190
193
|
}
|
|
191
194
|
const { factory, implementation, salt } = deployArgs;
|
|
@@ -199,7 +202,7 @@ function getAddress(config) {
|
|
|
199
202
|
return address;
|
|
200
203
|
}
|
|
201
204
|
function getEip712Domain(config, chain) {
|
|
202
|
-
if (config.initData) {
|
|
205
|
+
if (config.initData && !('factory' in config.initData)) {
|
|
203
206
|
throw new error_1.Eip712DomainNotAvailableError('Existing Safe-7579 accounts are not yet supported');
|
|
204
207
|
}
|
|
205
208
|
return {
|
|
@@ -91,6 +91,56 @@ const MOCK_MODULE_ADDRESS = '0x28de6501fa86f2e6cd0b33c3aabdaeb4a1b93f3f';
|
|
|
91
91
|
});
|
|
92
92
|
(0, vitest_1.expect)(address).toEqual('0xc41bb9cfB2658dD3D74Ada0862044f5f30304b38');
|
|
93
93
|
});
|
|
94
|
+
(0, vitest_1.test)('Address-only initData fallback', () => {
|
|
95
|
+
const address = (0, safe_1.getAddress)({
|
|
96
|
+
account: {
|
|
97
|
+
type: 'safe',
|
|
98
|
+
},
|
|
99
|
+
owners: {
|
|
100
|
+
type: 'ecdsa',
|
|
101
|
+
accounts: [consts_1.accountA, consts_1.accountB],
|
|
102
|
+
},
|
|
103
|
+
initData: {
|
|
104
|
+
address: '0xc41bb9cfB2658dD3D74Ada0862044f5f30304b38',
|
|
105
|
+
},
|
|
106
|
+
});
|
|
107
|
+
(0, vitest_1.expect)(address).toEqual('0xc41bb9cfB2658dD3D74Ada0862044f5f30304b38');
|
|
108
|
+
});
|
|
109
|
+
});
|
|
110
|
+
(0, vitest_1.describe)('EIP-712 Domain', () => {
|
|
111
|
+
(0, vitest_1.test)('Factory-backed initData stays signable', () => {
|
|
112
|
+
const domain = (0, safe_1.getEip712Domain)({
|
|
113
|
+
owners: {
|
|
114
|
+
type: 'ecdsa',
|
|
115
|
+
accounts: [consts_1.accountA, consts_1.accountB],
|
|
116
|
+
},
|
|
117
|
+
initData: {
|
|
118
|
+
factory: '0x4e1dcf7ad4e460cfd30791ccc4f9c8a4f820ec67',
|
|
119
|
+
factoryData: '0x1688f0b90000000000000000000000007579011ab74c46090561ea277ba79d510c6c00ff0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000844fff40e1ec88f0966a6bc17a138345cdf7519caf9a1e0bb840330108a6a4315f1028c39000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',
|
|
120
|
+
address: '0xc41bb9cfB2658dD3D74Ada0862044f5f30304b38',
|
|
121
|
+
intentExecutorInstalled: true,
|
|
122
|
+
},
|
|
123
|
+
}, {
|
|
124
|
+
id: 1,
|
|
125
|
+
});
|
|
126
|
+
(0, vitest_1.expect)(domain.verifyingContract).toEqual('0xc41bb9cfB2658dD3D74Ada0862044f5f30304b38');
|
|
127
|
+
});
|
|
128
|
+
(0, vitest_1.test)('Address-only initData remains unsupported', () => {
|
|
129
|
+
(0, vitest_1.expect)(() => (0, safe_1.getEip712Domain)({
|
|
130
|
+
account: {
|
|
131
|
+
type: 'safe',
|
|
132
|
+
},
|
|
133
|
+
owners: {
|
|
134
|
+
type: 'ecdsa',
|
|
135
|
+
accounts: [consts_1.accountA, consts_1.accountB],
|
|
136
|
+
},
|
|
137
|
+
initData: {
|
|
138
|
+
address: '0xc41bb9cfB2658dD3D74Ada0862044f5f30304b38',
|
|
139
|
+
},
|
|
140
|
+
}, {
|
|
141
|
+
id: 1,
|
|
142
|
+
})).toThrow('Existing Safe-7579 accounts are not yet supported');
|
|
143
|
+
});
|
|
94
144
|
});
|
|
95
145
|
(0, vitest_1.describe)('Get Install Data', () => {
|
|
96
146
|
(0, vitest_1.test)('Module', () => {
|
|
@@ -12,7 +12,7 @@ const accountAddress = '0x36C03e7D593F7B2C6b06fC18B5f4E9a4A29C99b0';
|
|
|
12
12
|
vitest_1.vi.mock('viem', async (importOriginal) => {
|
|
13
13
|
const actual = await importOriginal();
|
|
14
14
|
return {
|
|
15
|
-
// @ts-
|
|
15
|
+
// @ts-expect-error
|
|
16
16
|
...actual,
|
|
17
17
|
createPublicClient: vitest_1.vi.fn(),
|
|
18
18
|
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signing.test.d.ts","sourceRoot":"","sources":["../../../execution/signing.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,334 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const viem_1 = require("viem");
|
|
4
|
+
const chains_1 = require("viem/chains");
|
|
5
|
+
const vitest_1 = require("vitest");
|
|
6
|
+
const consts_1 = require("../../test/consts");
|
|
7
|
+
const utils_1 = require("./utils");
|
|
8
|
+
const { MOCK_EMISSARY, MOCK_EIP1271, MOCK_ACCOUNT, MOCK_EXECUTOR, MOCK_VALIDATOR, mockGetEmissarySignature, mockGetEip1271Signature, mockIsSessionEnabled, MOCK_TYPED_DATA, } = vitest_1.vi.hoisted(() => {
|
|
9
|
+
const MOCK_ACCOUNT = '0x1111111111111111111111111111111111111111';
|
|
10
|
+
const MOCK_EXECUTOR = '0x2222222222222222222222222222222222222222';
|
|
11
|
+
const MOCK_VALIDATOR = '0x3333333333333333333333333333333333333333';
|
|
12
|
+
const MOCK_EMISSARY = `0x${'ee'.repeat(65)}`;
|
|
13
|
+
const MOCK_EIP1271 = `0x${'12'.repeat(65)}`;
|
|
14
|
+
const mockGetEmissarySignature = vitest_1.vi.fn().mockResolvedValue(MOCK_EMISSARY);
|
|
15
|
+
const mockGetEip1271Signature = vitest_1.vi.fn().mockResolvedValue(MOCK_EIP1271);
|
|
16
|
+
const mockIsSessionEnabled = vitest_1.vi.fn().mockResolvedValue(true);
|
|
17
|
+
const MOCK_TYPED_DATA = {
|
|
18
|
+
domain: {
|
|
19
|
+
name: 'Test',
|
|
20
|
+
version: '1',
|
|
21
|
+
chainId: 8453,
|
|
22
|
+
verifyingContract: MOCK_EXECUTOR,
|
|
23
|
+
},
|
|
24
|
+
types: {
|
|
25
|
+
Test: [{ name: 'value', type: 'uint256' }],
|
|
26
|
+
},
|
|
27
|
+
primaryType: 'Test',
|
|
28
|
+
message: { value: 1n },
|
|
29
|
+
};
|
|
30
|
+
return {
|
|
31
|
+
MOCK_EMISSARY: MOCK_EMISSARY,
|
|
32
|
+
MOCK_EIP1271: MOCK_EIP1271,
|
|
33
|
+
MOCK_ACCOUNT: MOCK_ACCOUNT,
|
|
34
|
+
MOCK_EXECUTOR: MOCK_EXECUTOR,
|
|
35
|
+
MOCK_VALIDATOR: MOCK_VALIDATOR,
|
|
36
|
+
mockGetEmissarySignature,
|
|
37
|
+
mockGetEip1271Signature,
|
|
38
|
+
mockIsSessionEnabled,
|
|
39
|
+
MOCK_TYPED_DATA,
|
|
40
|
+
};
|
|
41
|
+
});
|
|
42
|
+
vitest_1.vi.mock('../orchestrator', () => ({
|
|
43
|
+
getOrchestrator: vitest_1.vi.fn(),
|
|
44
|
+
}));
|
|
45
|
+
vitest_1.vi.mock('../accounts', () => ({
|
|
46
|
+
getAddress: vitest_1.vi.fn().mockReturnValue(MOCK_ACCOUNT),
|
|
47
|
+
getEmissarySignature: mockGetEmissarySignature,
|
|
48
|
+
getEip1271Signature: mockGetEip1271Signature,
|
|
49
|
+
getSmartAccount: vitest_1.vi.fn(),
|
|
50
|
+
getEip712Domain: vitest_1.vi.fn(),
|
|
51
|
+
getAccountProvider: vitest_1.vi.fn(),
|
|
52
|
+
getInitCode: vitest_1.vi.fn(),
|
|
53
|
+
getGuardianSmartAccount: vitest_1.vi.fn(),
|
|
54
|
+
getTypedDataPackedSignature: vitest_1.vi.fn(),
|
|
55
|
+
toErc6492Signature: vitest_1.vi.fn(),
|
|
56
|
+
is7702: vitest_1.vi.fn().mockReturnValue(false),
|
|
57
|
+
getEip7702InitCall: vitest_1.vi.fn(),
|
|
58
|
+
EoaAccountMustHaveAccountError: class extends Error {
|
|
59
|
+
},
|
|
60
|
+
EoaSigningMethodNotConfiguredError: class extends Error {
|
|
61
|
+
},
|
|
62
|
+
FactoryArgsNotAvailableError: class extends Error {
|
|
63
|
+
},
|
|
64
|
+
}));
|
|
65
|
+
vitest_1.vi.mock('../accounts/signing/common', () => ({
|
|
66
|
+
convertOwnerSetToSignerSet: vitest_1.vi.fn(),
|
|
67
|
+
}));
|
|
68
|
+
vitest_1.vi.mock('../accounts/startale', () => ({
|
|
69
|
+
K1_DEFAULT_VALIDATOR_ADDRESS: '0x0000000000000000000000000000000000000000',
|
|
70
|
+
}));
|
|
71
|
+
vitest_1.vi.mock('../accounts/utils', () => ({
|
|
72
|
+
createTransport: vitest_1.vi.fn(),
|
|
73
|
+
getBundlerClient: vitest_1.vi.fn(),
|
|
74
|
+
}));
|
|
75
|
+
vitest_1.vi.mock('../modules', () => ({
|
|
76
|
+
getIntentExecutor: vitest_1.vi.fn().mockReturnValue({
|
|
77
|
+
address: MOCK_EXECUTOR,
|
|
78
|
+
type: 7,
|
|
79
|
+
initData: '0x',
|
|
80
|
+
deInitData: '0x',
|
|
81
|
+
additionalContext: '0x',
|
|
82
|
+
}),
|
|
83
|
+
}));
|
|
84
|
+
vitest_1.vi.mock('../modules/validators', () => ({
|
|
85
|
+
isSessionEnabled: mockIsSessionEnabled,
|
|
86
|
+
getOwnerValidator: vitest_1.vi.fn().mockReturnValue({
|
|
87
|
+
address: MOCK_VALIDATOR,
|
|
88
|
+
type: 1,
|
|
89
|
+
initData: '0x',
|
|
90
|
+
deInitData: '0x',
|
|
91
|
+
additionalContext: '0x',
|
|
92
|
+
}),
|
|
93
|
+
buildMockSignature: vitest_1.vi.fn(),
|
|
94
|
+
getPermissionId: vitest_1.vi.fn().mockReturnValue('0x' + 'cc'.repeat(32)),
|
|
95
|
+
getSmartSessionValidator: vitest_1.vi.fn().mockReturnValue({
|
|
96
|
+
address: MOCK_VALIDATOR,
|
|
97
|
+
type: 1,
|
|
98
|
+
initData: '0x',
|
|
99
|
+
deInitData: '0x',
|
|
100
|
+
additionalContext: '0x',
|
|
101
|
+
}),
|
|
102
|
+
}));
|
|
103
|
+
vitest_1.vi.mock('../modules/validators/core', () => ({
|
|
104
|
+
supportsEip712: vitest_1.vi.fn().mockReturnValue(false),
|
|
105
|
+
getMultiFactorValidator: vitest_1.vi.fn(),
|
|
106
|
+
getSocialRecoveryValidator: vitest_1.vi.fn(),
|
|
107
|
+
getWebAuthnValidator: vitest_1.vi.fn(),
|
|
108
|
+
}));
|
|
109
|
+
vitest_1.vi.mock('../orchestrator/registry', () => ({
|
|
110
|
+
getChainById: vitest_1.vi.fn().mockReturnValue(chains_1.base),
|
|
111
|
+
getTokenAddress: vitest_1.vi.fn(),
|
|
112
|
+
resolveTokenAddress: vitest_1.vi.fn(),
|
|
113
|
+
}));
|
|
114
|
+
vitest_1.vi.mock('./singleChainOps', () => ({
|
|
115
|
+
getTypedData: vitest_1.vi.fn().mockReturnValue(MOCK_TYPED_DATA),
|
|
116
|
+
}));
|
|
117
|
+
vitest_1.vi.mock('./compact', () => ({
|
|
118
|
+
getCompactTypedData: vitest_1.vi.fn().mockReturnValue(MOCK_TYPED_DATA),
|
|
119
|
+
}));
|
|
120
|
+
vitest_1.vi.mock('./error', () => ({
|
|
121
|
+
Eip7702InitSignatureRequiredError: class extends Error {
|
|
122
|
+
},
|
|
123
|
+
SignerNotSupportedError: class extends Error {
|
|
124
|
+
},
|
|
125
|
+
}));
|
|
126
|
+
vitest_1.vi.mock('./permit2', () => ({
|
|
127
|
+
getTypedData: vitest_1.vi.fn().mockReturnValue(MOCK_TYPED_DATA),
|
|
128
|
+
}));
|
|
129
|
+
// --- Helpers ---
|
|
130
|
+
const makeElement = (settlementLayer) => ({
|
|
131
|
+
mandate: {
|
|
132
|
+
destinationChainId: chains_1.base.id,
|
|
133
|
+
destinationOps: {
|
|
134
|
+
vt: ('0x' + '00'.repeat(32)),
|
|
135
|
+
ops: [],
|
|
136
|
+
},
|
|
137
|
+
preClaimOps: {
|
|
138
|
+
vt: ('0x' + '00'.repeat(32)),
|
|
139
|
+
ops: [],
|
|
140
|
+
},
|
|
141
|
+
qualifier: {
|
|
142
|
+
settlementContext: {
|
|
143
|
+
settlementLayer,
|
|
144
|
+
fundingMethod: 'NO_FUNDING',
|
|
145
|
+
using7579: true,
|
|
146
|
+
gasRefund: {
|
|
147
|
+
token: viem_1.zeroAddress,
|
|
148
|
+
exchangeRate: 0n,
|
|
149
|
+
overhead: 0n,
|
|
150
|
+
},
|
|
151
|
+
},
|
|
152
|
+
},
|
|
153
|
+
},
|
|
154
|
+
});
|
|
155
|
+
const makeIntentOp = (settlementLayer, targetExecutionNonce = '200') => {
|
|
156
|
+
const layers = Array.isArray(settlementLayer)
|
|
157
|
+
? settlementLayer
|
|
158
|
+
: [settlementLayer];
|
|
159
|
+
return {
|
|
160
|
+
sponsor: MOCK_ACCOUNT,
|
|
161
|
+
nonce: '100',
|
|
162
|
+
targetExecutionNonce,
|
|
163
|
+
expires: '9999999999',
|
|
164
|
+
elements: layers.map(makeElement),
|
|
165
|
+
serverSignature: '0x',
|
|
166
|
+
signedMetadata: { fees: {} },
|
|
167
|
+
};
|
|
168
|
+
};
|
|
169
|
+
// verifyExecutions auto-derived as true when session.actions is non-empty
|
|
170
|
+
const sessionWithActions = {
|
|
171
|
+
chain: chains_1.base,
|
|
172
|
+
owners: { type: 'ecdsa', accounts: [consts_1.accountA] },
|
|
173
|
+
actions: [{ policies: [{ type: 'usage-limit', limit: 1n }] }],
|
|
174
|
+
};
|
|
175
|
+
// verifyExecutions auto-derived as false when session.actions is absent
|
|
176
|
+
const sessionNoActions = {
|
|
177
|
+
chain: chains_1.base,
|
|
178
|
+
owners: { type: 'ecdsa', accounts: [consts_1.accountA] },
|
|
179
|
+
};
|
|
180
|
+
const config = {
|
|
181
|
+
apiKey: 'test',
|
|
182
|
+
owners: { type: 'ecdsa', accounts: [consts_1.accountA] },
|
|
183
|
+
};
|
|
184
|
+
const makeSessionSigners = (session) => ({
|
|
185
|
+
type: 'experimental_session',
|
|
186
|
+
session,
|
|
187
|
+
});
|
|
188
|
+
const ownerSigners = {
|
|
189
|
+
type: 'owner',
|
|
190
|
+
kind: 'ecdsa',
|
|
191
|
+
accounts: [consts_1.accountA],
|
|
192
|
+
};
|
|
193
|
+
// --- Tests ---
|
|
194
|
+
(0, vitest_1.beforeEach)(() => {
|
|
195
|
+
vitest_1.vi.clearAllMocks();
|
|
196
|
+
mockGetEmissarySignature.mockResolvedValue(MOCK_EMISSARY);
|
|
197
|
+
mockGetEip1271Signature.mockResolvedValue(MOCK_EIP1271);
|
|
198
|
+
mockIsSessionEnabled.mockResolvedValue(true);
|
|
199
|
+
});
|
|
200
|
+
(0, vitest_1.describe)('getTargetExecutionSignature', () => {
|
|
201
|
+
(0, vitest_1.test)('undefined signers returns undefined', async () => {
|
|
202
|
+
const intentOp = makeIntentOp('INTENT_EXECUTOR');
|
|
203
|
+
const result = await (0, utils_1.getTargetExecutionSignature)(config, intentOp, chains_1.base, undefined);
|
|
204
|
+
(0, vitest_1.expect)(result).toBeUndefined();
|
|
205
|
+
});
|
|
206
|
+
(0, vitest_1.test)('non-session signers returns undefined', async () => {
|
|
207
|
+
const intentOp = makeIntentOp('INTENT_EXECUTOR');
|
|
208
|
+
const result = await (0, utils_1.getTargetExecutionSignature)(config, intentOp, chains_1.base, ownerSigners);
|
|
209
|
+
(0, vitest_1.expect)(result).toBeUndefined();
|
|
210
|
+
});
|
|
211
|
+
(0, vitest_1.test)('no INTENT_EXECUTOR ops (SAME_CHAIN only) returns undefined', async () => {
|
|
212
|
+
// PERMIT2 settlement also uses SAME_CHAIN layer — both are covered by this case
|
|
213
|
+
const intentOp = makeIntentOp('SAME_CHAIN');
|
|
214
|
+
const signers = makeSessionSigners(sessionWithActions);
|
|
215
|
+
const result = await (0, utils_1.getTargetExecutionSignature)(config, intentOp, chains_1.base, signers);
|
|
216
|
+
(0, vitest_1.expect)(result).toBeUndefined();
|
|
217
|
+
});
|
|
218
|
+
(0, vitest_1.test)('INTENT_EXECUTOR + verifyExecutions: false (no actions) returns undefined', async () => {
|
|
219
|
+
const intentOp = makeIntentOp('INTENT_EXECUTOR');
|
|
220
|
+
const signers = makeSessionSigners(sessionNoActions);
|
|
221
|
+
const result = await (0, utils_1.getTargetExecutionSignature)(config, intentOp, chains_1.base, signers);
|
|
222
|
+
(0, vitest_1.expect)(result).toBeUndefined();
|
|
223
|
+
});
|
|
224
|
+
(0, vitest_1.test)('explicit verifyExecutions: false on signers overrides session with actions', async () => {
|
|
225
|
+
const intentOp = makeIntentOp('INTENT_EXECUTOR');
|
|
226
|
+
const signers = {
|
|
227
|
+
type: 'experimental_session',
|
|
228
|
+
session: sessionWithActions,
|
|
229
|
+
verifyExecutions: false,
|
|
230
|
+
};
|
|
231
|
+
const result = await (0, utils_1.getTargetExecutionSignature)(config, intentOp, chains_1.base, signers);
|
|
232
|
+
(0, vitest_1.expect)(result).toBeUndefined();
|
|
233
|
+
});
|
|
234
|
+
(0, vitest_1.test)('explicit verifyExecutions: true on signers overrides session without actions', async () => {
|
|
235
|
+
const intentOp = makeIntentOp('INTENT_EXECUTOR');
|
|
236
|
+
const signers = {
|
|
237
|
+
type: 'experimental_session',
|
|
238
|
+
session: sessionNoActions,
|
|
239
|
+
verifyExecutions: true,
|
|
240
|
+
};
|
|
241
|
+
const result = await (0, utils_1.getTargetExecutionSignature)(config, intentOp, chains_1.base, signers);
|
|
242
|
+
(0, vitest_1.expect)(result).toBe(MOCK_EMISSARY);
|
|
243
|
+
});
|
|
244
|
+
(0, vitest_1.test)('session not yet enabled still resolves verifyExecutions from actions', async () => {
|
|
245
|
+
mockIsSessionEnabled.mockResolvedValueOnce(false);
|
|
246
|
+
const intentOp = makeIntentOp('INTENT_EXECUTOR');
|
|
247
|
+
const signers = makeSessionSigners(sessionWithActions);
|
|
248
|
+
const result = await (0, utils_1.getTargetExecutionSignature)(config, intentOp, chains_1.base, signers);
|
|
249
|
+
(0, vitest_1.expect)(result).toBe(MOCK_EMISSARY);
|
|
250
|
+
});
|
|
251
|
+
(0, vitest_1.test)('mixed INTENT_EXECUTOR + SAME_CHAIN elements returns emissary sig', async () => {
|
|
252
|
+
const intentOp = makeIntentOp(['INTENT_EXECUTOR', 'SAME_CHAIN']);
|
|
253
|
+
const signers = makeSessionSigners(sessionWithActions);
|
|
254
|
+
const result = await (0, utils_1.getTargetExecutionSignature)(config, intentOp, chains_1.base, signers);
|
|
255
|
+
(0, vitest_1.expect)(result).toBe(MOCK_EMISSARY);
|
|
256
|
+
});
|
|
257
|
+
(0, vitest_1.test)('INTENT_EXECUTOR + verifyExecutions: true returns emissary sig', async () => {
|
|
258
|
+
const intentOp = makeIntentOp('INTENT_EXECUTOR');
|
|
259
|
+
const signers = makeSessionSigners(sessionWithActions);
|
|
260
|
+
const result = await (0, utils_1.getTargetExecutionSignature)(config, intentOp, chains_1.base, signers);
|
|
261
|
+
(0, vitest_1.expect)(result).toBe(MOCK_EMISSARY);
|
|
262
|
+
(0, vitest_1.expect)(mockGetEmissarySignature).toHaveBeenCalledTimes(1);
|
|
263
|
+
(0, vitest_1.expect)(mockGetEip1271Signature).not.toHaveBeenCalled();
|
|
264
|
+
});
|
|
265
|
+
});
|
|
266
|
+
(0, vitest_1.describe)('signIntent with owner signers', () => {
|
|
267
|
+
(0, vitest_1.test)('gives EIP-1271 destinationSignature, not emissary', async () => {
|
|
268
|
+
const intentOp = makeIntentOp('INTENT_EXECUTOR');
|
|
269
|
+
const { destinationSignature, originSignatures } = await (0, utils_1.signIntent)(config, intentOp, chains_1.base, ownerSigners);
|
|
270
|
+
(0, vitest_1.expect)(destinationSignature).toBe(MOCK_EIP1271);
|
|
271
|
+
(0, vitest_1.expect)(mockGetEip1271Signature).toHaveBeenCalled();
|
|
272
|
+
(0, vitest_1.expect)(mockGetEmissarySignature).not.toHaveBeenCalled();
|
|
273
|
+
(0, vitest_1.expect)(originSignatures).toHaveLength(1);
|
|
274
|
+
});
|
|
275
|
+
});
|
|
276
|
+
(0, vitest_1.describe)('signIntent destinationSignature', () => {
|
|
277
|
+
(0, vitest_1.test)('verifyExecutions: true + INTENT_EXECUTOR — emissary destinationSignature, both sigs generated', async () => {
|
|
278
|
+
const intentOp = makeIntentOp('INTENT_EXECUTOR');
|
|
279
|
+
const signers = makeSessionSigners(sessionWithActions);
|
|
280
|
+
const { destinationSignature, originSignatures } = await (0, utils_1.signIntent)(config, intentOp, chains_1.base, signers);
|
|
281
|
+
// destinationSignature picks preClaimSig (emissary format) from the { preClaimSig, notarizedClaimSig } pair
|
|
282
|
+
(0, vitest_1.expect)(destinationSignature).toBe(MOCK_EMISSARY);
|
|
283
|
+
// Both emissary and EIP-1271 are produced internally (preClaimSig + notarizedClaimSig)
|
|
284
|
+
(0, vitest_1.expect)(mockGetEmissarySignature).toHaveBeenCalled();
|
|
285
|
+
(0, vitest_1.expect)(mockGetEip1271Signature).toHaveBeenCalled();
|
|
286
|
+
(0, vitest_1.expect)(originSignatures).toHaveLength(1);
|
|
287
|
+
});
|
|
288
|
+
(0, vitest_1.test)('verifyExecutions: false + INTENT_EXECUTOR — EIP-1271 destinationSignature only', async () => {
|
|
289
|
+
const intentOp = makeIntentOp('INTENT_EXECUTOR');
|
|
290
|
+
const signers = makeSessionSigners(sessionNoActions);
|
|
291
|
+
const { destinationSignature, originSignatures } = await (0, utils_1.signIntent)(config, intentOp, chains_1.base, signers);
|
|
292
|
+
(0, vitest_1.expect)(destinationSignature).toBe(MOCK_EIP1271);
|
|
293
|
+
(0, vitest_1.expect)(mockGetEmissarySignature).not.toHaveBeenCalled();
|
|
294
|
+
(0, vitest_1.expect)(originSignatures).toHaveLength(1);
|
|
295
|
+
});
|
|
296
|
+
(0, vitest_1.test)('verifyExecutions: true + SAME_CHAIN — emissary destinationSignature', async () => {
|
|
297
|
+
const intentOp = makeIntentOp('SAME_CHAIN');
|
|
298
|
+
const signers = makeSessionSigners(sessionWithActions);
|
|
299
|
+
const { destinationSignature } = await (0, utils_1.signIntent)(config, intentOp, chains_1.base, signers);
|
|
300
|
+
(0, vitest_1.expect)(destinationSignature).toBe(MOCK_EMISSARY);
|
|
301
|
+
});
|
|
302
|
+
(0, vitest_1.test)('multi-element op produces one originSignature per element', async () => {
|
|
303
|
+
const intentOp = makeIntentOp(['INTENT_EXECUTOR', 'INTENT_EXECUTOR']);
|
|
304
|
+
const signers = makeSessionSigners(sessionWithActions);
|
|
305
|
+
const { originSignatures } = await (0, utils_1.signIntent)(config, intentOp, chains_1.base, signers);
|
|
306
|
+
(0, vitest_1.expect)(originSignatures).toHaveLength(2);
|
|
307
|
+
});
|
|
308
|
+
});
|
|
309
|
+
(0, vitest_1.describe)('signIntent + getTargetExecutionSignature routing', () => {
|
|
310
|
+
(0, vitest_1.test)('INTENT_EXECUTOR + verifyExecutions: true — EMISSARY for both', async () => {
|
|
311
|
+
const intentOp = makeIntentOp('INTENT_EXECUTOR');
|
|
312
|
+
const signers = makeSessionSigners(sessionWithActions);
|
|
313
|
+
const { destinationSignature } = await (0, utils_1.signIntent)(config, intentOp, chains_1.base, signers);
|
|
314
|
+
const targetExecutionSignature = await (0, utils_1.getTargetExecutionSignature)(config, intentOp, chains_1.base, signers);
|
|
315
|
+
(0, vitest_1.expect)(destinationSignature).toBe(MOCK_EMISSARY);
|
|
316
|
+
(0, vitest_1.expect)(targetExecutionSignature).toBe(MOCK_EMISSARY);
|
|
317
|
+
});
|
|
318
|
+
(0, vitest_1.test)('INTENT_EXECUTOR + verifyExecutions: false — EIP-1271 destination, undefined target', async () => {
|
|
319
|
+
const intentOp = makeIntentOp('INTENT_EXECUTOR');
|
|
320
|
+
const signers = makeSessionSigners(sessionNoActions);
|
|
321
|
+
const { destinationSignature } = await (0, utils_1.signIntent)(config, intentOp, chains_1.base, signers);
|
|
322
|
+
const targetExecutionSignature = await (0, utils_1.getTargetExecutionSignature)(config, intentOp, chains_1.base, signers);
|
|
323
|
+
(0, vitest_1.expect)(destinationSignature).toBe(MOCK_EIP1271);
|
|
324
|
+
(0, vitest_1.expect)(targetExecutionSignature).toBeUndefined();
|
|
325
|
+
});
|
|
326
|
+
(0, vitest_1.test)('SAME_CHAIN + verifyExecutions: true — EMISSARY destination, undefined target', async () => {
|
|
327
|
+
const intentOp = makeIntentOp('SAME_CHAIN');
|
|
328
|
+
const signers = makeSessionSigners(sessionWithActions);
|
|
329
|
+
const { destinationSignature } = await (0, utils_1.signIntent)(config, intentOp, chains_1.base, signers);
|
|
330
|
+
const targetExecutionSignature = await (0, utils_1.getTargetExecutionSignature)(config, intentOp, chains_1.base, signers);
|
|
331
|
+
(0, vitest_1.expect)(destinationSignature).toBe(MOCK_EMISSARY);
|
|
332
|
+
(0, vitest_1.expect)(targetExecutionSignature).toBeUndefined();
|
|
333
|
+
});
|
|
334
|
+
});
|
|
@@ -8,6 +8,7 @@ type InternalSignerSet = Exclude<SignerSet, SessionSignerSet> | ResolvedSessionS
|
|
|
8
8
|
declare function resolveSessionForChain(signers: SessionSignerSet, chainId: number): {
|
|
9
9
|
session: Session;
|
|
10
10
|
enableData?: SessionEnableData;
|
|
11
|
+
verifyExecutions?: boolean;
|
|
11
12
|
};
|
|
12
13
|
interface UserOperationResult {
|
|
13
14
|
type: 'userop';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../execution/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,KAAK,EAMV,KAAK,uBAAuB,EAC5B,KAAK,GAAG,EAOR,KAAK,YAAY,EAEjB,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,uBAAuB,EAC5B,KAAK,SAAS,EACd,KAAK,mBAAmB,EACxB,KAAK,eAAe,EAErB,MAAM,MAAM,CAAA;AACb,OAAO,EAGL,KAAK,aAAa,EACnB,MAAM,0BAA0B,CAAA;AAyCjC,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAA;AACpF,OAAO,EAGL,KAAK,QAAQ,EACb,KAAK,WAAW,EAEjB,MAAM,iBAAiB,CAAA;AAMxB,OAAO,EAEL,KAAK,cAAc,EAGnB,KAAK,eAAe,EACpB,KAAK,eAAe,EAIrB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,KAAK,EAEV,IAAI,EACJ,aAAa,EACb,SAAS,EAET,uBAAuB,EACvB,gBAAgB,EAChB,OAAO,EACP,iBAAiB,EACjB,gBAAgB,EAChB,SAAS,EAET,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,WAAW,EACX,WAAW,EACX,wBAAwB,EACzB,MAAM,UAAU,CAAA;AASjB,KAAK,iBAAiB,GAClB,OAAO,CAAC,SAAS,EAAE,gBAAgB,CAAC,GACpC,wBAAwB,CAAA;
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../execution/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,KAAK,EAMV,KAAK,uBAAuB,EAC5B,KAAK,GAAG,EAOR,KAAK,YAAY,EAEjB,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,uBAAuB,EAC5B,KAAK,SAAS,EACd,KAAK,mBAAmB,EACxB,KAAK,eAAe,EAErB,MAAM,MAAM,CAAA;AACb,OAAO,EAGL,KAAK,aAAa,EACnB,MAAM,0BAA0B,CAAA;AAyCjC,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAA;AACpF,OAAO,EAGL,KAAK,QAAQ,EACb,KAAK,WAAW,EAEjB,MAAM,iBAAiB,CAAA;AAMxB,OAAO,EAEL,KAAK,cAAc,EAGnB,KAAK,eAAe,EACpB,KAAK,eAAe,EAIrB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,KAAK,EAEV,IAAI,EACJ,aAAa,EACb,SAAS,EAET,uBAAuB,EACvB,gBAAgB,EAChB,OAAO,EACP,iBAAiB,EACjB,gBAAgB,EAChB,SAAS,EAET,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,WAAW,EACX,WAAW,EACX,wBAAwB,EACzB,MAAM,UAAU,CAAA;AASjB,KAAK,iBAAiB,GAClB,OAAO,CAAC,SAAS,EAAE,gBAAgB,CAAC,GACpC,wBAAwB,CAAA;AAqC5B,iBAAS,sBAAsB,CAC7B,OAAO,EAAE,gBAAgB,EACzB,OAAO,EAAE,MAAM,GACd;IACD,OAAO,EAAE,OAAO,CAAA;IAChB,UAAU,CAAC,EAAE,iBAAiB,CAAA;IAC9B,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B,CASA;AAED,UAAU,mBAAmB;IAC3B,IAAI,EAAE,QAAQ,CAAA;IACd,IAAI,EAAE,GAAG,CAAA;IACT,KAAK,EAAE,MAAM,CAAA;CACd;AAED,UAAU,iBAAiB;IACzB,IAAI,EAAE,QAAQ,CAAA;IACd,EAAE,EAAE,MAAM,CAAA;IACV,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,UAAU,uBAAuB;IAC/B,WAAW,EAAE,WAAW,CAAA;IACxB,WAAW,EAAE,WAAW,CAAA;CACzB;AAED,UAAU,yBAAyB;IACjC,aAAa,EAAE,aAAa,CAAA;IAC5B,IAAI,EAAE,GAAG,CAAA;IACT,WAAW,EAAE,wBAAwB,CAAA;CACtC;AAED,UAAU,qBAAsB,SAAQ,uBAAuB;IAC7D,gBAAgB,EAAE,eAAe,EAAE,CAAA;IACnC,oBAAoB,EAAE,GAAG,CAAA;IACzB,wBAAwB,EAAE,GAAG,GAAG,SAAS,CAAA;CAC1C;AAED,UAAU,uBAAwB,SAAQ,yBAAyB;IACjE,SAAS,EAAE,GAAG,CAAA;CACf;AAED,iBAAe,kBAAkB,CAC/B,MAAM,EAAE,gBAAgB,EACxB,WAAW,EAAE,WAAW,GACvB,OAAO,CAAC,uBAAuB,CAAC,CAkDlC;AAED,iBAAe,oBAAoB,CACjC,MAAM,EAAE,gBAAgB,EACxB,WAAW,EAAE,wBAAwB,GACpC,OAAO,CAAC,yBAAyB,CAAC,CAgBpC;AAED,iBAAe,iBAAiB,CAC9B,MAAM,EAAE,SAAS,EAAE,GAAG,SAAS,EAC/B,MAAM,EAAE,gBAAgB,EACxB,KAAK,EAAE,KAAK,EACZ,cAAc,EAAE,OAAO,GACtB,OAAO,CAAC,aAAa,EAAE,CAAC,CAkB1B;AAED,iBAAS,sBAAsB,CAC7B,MAAM,EAAE,gBAAgB,EACxB,mBAAmB,EAAE,uBAAuB,GAC3C;IACD,MAAM,EAAE,mBAAmB,EAAE,CAAA;IAC7B,WAAW,EAAE,mBAAmB,CAAA;CACjC,CAEA;AAED,iBAAe,eAAe,CAC5B,MAAM,EAAE,gBAAgB,EACxB,mBAAmB,EAAE,uBAAuB,GAC3C,OAAO,CAAC,qBAAqB,CAAC,CA4BhC;AAED,iBAAe,2BAA2B,CACxC,MAAM,EAAE,gBAAgB,EACxB,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,KAAK,EAClB,OAAO,EAAE,SAAS,GAAG,SAAS,sCA4C/B;AAED,iBAAe,iBAAiB,CAC9B,MAAM,EAAE,gBAAgB,EACxB,qBAAqB,EAAE,yBAAyB,GAC/C,OAAO,CAAC,uBAAuB,CAAC,CAYlC;AAED,iBAAe,kBAAkB,CAC/B,MAAM,EAAE,gBAAgB,EACxB,mBAAmB,EAAE,uBAAuB,kCAM7C;AAED,iBAAe,WAAW,CACxB,MAAM,EAAE,gBAAgB,EACxB,OAAO,EAAE,eAAe,EACxB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,SAAS,GAAG,SAAS,0BAqB/B;AAED,iBAAe,aAAa,CAC1B,SAAS,SAAS,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EACjE,WAAW,SAAS,MAAM,SAAS,GAAG,cAAc,GAAG,MAAM,SAAS,EAEtE,MAAM,EAAE,gBAAgB,EACxB,UAAU,EAAE,uBAAuB,CAAC,SAAS,EAAE,WAAW,CAAC,EAC3D,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,SAAS,GAAG,SAAS,EAC9B,OAAO,CAAC,EAAE;IACR,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB,0BA0DF;AA8DD,iBAAe,0BAA0B,CACvC,MAAM,EAAE,gBAAgB,EACxB,IAAI,EAAE,WAAW,GAAG,aAAa,kCAmClC;AAED,iBAAe,iBAAiB,CAC9B,MAAM,EAAE,gBAAgB,EACxB,iBAAiB,EAAE,qBAAqB,EACxC,cAAc,EAAE,uBAAuB,EACvC,MAAM,GAAE,OAAe,GACtB,OAAO,CAAC,iBAAiB,CAAC,CAqB5B;AAED,iBAAe,mBAAmB,CAChC,MAAM,EAAE,gBAAgB,EACxB,mBAAmB,EAAE,uBAAuB,gCAO7C;AAwCD,iBAAS,gBAAgB,CACvB,WAAW,EAAE,KAAK,EAClB,oBAAoB,EAAE,YAAY,EAAE,GAAG,SAAS,kBASjD;AAkDD,iBAAS,gBAAgB,CACvB,MAAM,EAAE,gBAAgB,EACxB,oBAAoB,EAAE,GAAG,GAAG,SAAS,EACrC,OAAO,EACH;IACE,QAAQ,CAAC,EAAE;QACT,EAAE,EAAE,OAAO,CAAA;QACX,IAAI,EAAE,GAAG,CAAA;KACV,EAAE,CAAA;CACJ,GACD,SAAS;;;;YAJD,OAAO;cACL,GAAG;;;;;;;EAmBlB;AAED,iBAAe,0BAA0B,CACvC,MAAM,EAAE,gBAAgB,EACxB,YAAY,EAAE,KAAK,EAAE,GAAG,SAAS,EACjC,WAAW,EAAE,KAAK,EAClB,UAAU,EAAE,aAAa,EAAE,EAC3B,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,aAAa,EAAE,YAAY,EAAE,EAC7B,cAAc,EAAE,uBAAuB,GAAG,OAAO,GAAG,SAAS,EAC7D,SAAS,EAAE,WAAW,GAAG,SAAS,EAClC,oBAAoB,EAAE,GAAG,GAAG,SAAS,EACrC,gBAAgB,EAAE,eAAe,EAAE,GAAG,SAAS,EAC/C,YAAY,EAAE,gBAAgB,GAAG,SAAS,EAC1C,QAAQ,EAAE,OAAO,GAAG,WAAW,GAAG,SAAS,EAC3C,SAAS,EAAE,OAAO,GAAG,SAAS,EAC9B,cAAc,EAAE,cAAc,GAAG,SAAS,EAC1C,OAAO,EACH;IACE,QAAQ,CAAC,EAAE;QACT,EAAE,EAAE,OAAO,CAAA;QACX,IAAI,EAAE,GAAG,CAAA;KACV,EAAE,CAAA;CACJ,GACD,SAAS,EACb,OAAO,EAAE,SAAS,GAAG,SAAS,wBA+E/B;AAED,iBAAe,UAAU,CACvB,MAAM,EAAE,gBAAgB,EACxB,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,KAAK,EAClB,OAAO,CAAC,EAAE,SAAS,EACnB,eAAe,CAAC,EAAE,OAAO;;;GAwE1B;AAgXD,iBAAe,oBAAoB,CACjC,MAAM,EAAE,gBAAgB,EACxB,YAAY,EAAE,KAAK,EAAE,GAAG,SAAS,EACjC,WAAW,EAAE,KAAK,EAClB,QAAQ,EAAE,QAAQ,EAClB,gBAAgB,EAAE,eAAe,EAAE,EACnC,oBAAoB,EAAE,GAAG,EACzB,wBAAwB,EAAE,GAAG,GAAG,SAAS,EACzC,cAAc,EAAE,uBAAuB,EACvC,MAAM,EAAE,OAAO,8BAqBhB;AAED,iBAAe,mBAAmB,CAChC,MAAM,EAAE,gBAAgB,EACxB,OAAO,EAAE,SAAS,GAAG,SAAS,EAC9B,YAAY,EAAE,YAAY,EAC1B,KAAK,EAAE,KAAK,yKAoBb;AAiDD,iBAAS,UAAU,CAAC,KAAK,EAAE,aAAa,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,EAAE,CAMnE;AAwKD,iBAAS,6BAA6B,CAAC,EACrC,MAAM,EACN,KAAK,EACL,WAAW,EACX,OAAO,EACP,cAAc,GACf,EAAE;IACD,MAAM,EAAE,eAAe,CAAA;IACvB,KAAK,EAAE,SAAS,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAChC,cAAc,EAAE;QACd,IAAI,EAAE,MAAM,CAAA;QACZ,OAAO,EAAE,MAAM,CAAA;QACf,OAAO,EAAE,MAAM,CAAA;QACf,iBAAiB,EAAE,OAAO,CAAA;QAC1B,IAAI,EAAE,GAAG,CAAA;KACV,CAAA;CACF,GAAG,GAAG,CAoFN;AAED,OAAO,EACL,kBAAkB,EAClB,sBAAsB,EACtB,eAAe,EACf,kBAAkB,EAClB,0BAA0B,EAC1B,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,EACnB,UAAU,EACV,0BAA0B,EAC1B,oBAAoB,EACpB,mBAAmB,EACnB,UAAU,EACV,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,2BAA2B,EAC3B,6BAA6B,EAC7B,sBAAsB,GACvB,CAAA;AACD,YAAY,EACV,iBAAiB,EACjB,WAAW,EACX,iBAAiB,EACjB,uBAAuB,EACvB,yBAAyB,EACzB,qBAAqB,EACrB,uBAAuB,EACvB,mBAAmB,GACpB,CAAA"}
|
|
@@ -49,11 +49,13 @@ async function resolveSignersForChain(config, signers, chainId) {
|
|
|
49
49
|
const resolved = resolveSessionForChain(signers, chainId);
|
|
50
50
|
const enabled = await (0, validators_1.isSessionEnabled)((0, accounts_1.getAddress)(config), config.provider, resolved.session, config.useDevContracts);
|
|
51
51
|
const enableData = enabled ? undefined : resolved.enableData;
|
|
52
|
+
const hasExplicitActions = !!resolved.session.actions?.length;
|
|
53
|
+
const verifyExecutions = resolved.verifyExecutions ?? signers.verifyExecutions ?? hasExplicitActions;
|
|
52
54
|
return {
|
|
53
55
|
type: 'experimental_session',
|
|
54
56
|
session: resolved.session,
|
|
55
57
|
enableData,
|
|
56
|
-
verifyExecutions
|
|
58
|
+
verifyExecutions,
|
|
57
59
|
};
|
|
58
60
|
}
|
|
59
61
|
function resolveSessionForChain(signers, chainId) {
|
|
@@ -134,7 +136,16 @@ async function getTargetExecutionSignature(config, intentOp, targetChain, signer
|
|
|
134
136
|
if (signers?.type !== 'experimental_session') {
|
|
135
137
|
return undefined;
|
|
136
138
|
}
|
|
139
|
+
const settlementLayers = intentOp.elements.map((e) => e.mandate.qualifier.settlementContext.settlementLayer);
|
|
140
|
+
const hasIntentExecutorOps = settlementLayers.some((l) => l === 'INTENT_EXECUTOR');
|
|
141
|
+
if (!hasIntentExecutorOps) {
|
|
142
|
+
return undefined;
|
|
143
|
+
}
|
|
137
144
|
const resolvedSigners = await resolveSignersForChain(config, signers, targetChain.id);
|
|
145
|
+
if (!isResolvedSessionSignerSet(resolvedSigners) ||
|
|
146
|
+
!resolvedSigners.verifyExecutions) {
|
|
147
|
+
return undefined;
|
|
148
|
+
}
|
|
138
149
|
const destination = getTargetExecutionMessage(config, intentOp);
|
|
139
150
|
const validator = getValidator(config, signers);
|
|
140
151
|
if (!validator) {
|
|
@@ -564,18 +575,23 @@ async function signIntentTypedData(config, signers, validator, isRoot, parameter
|
|
|
564
575
|
const hash = (0, viem_1.hashTypedData)(parameters);
|
|
565
576
|
if (isResolvedSessionSignerSet(signers) && signers.verifyExecutions) {
|
|
566
577
|
if (targetExecution) {
|
|
567
|
-
|
|
578
|
+
const targetSigners = {
|
|
568
579
|
type: 'experimental_session',
|
|
569
580
|
session: signers.session,
|
|
570
581
|
verifyExecutions: true,
|
|
571
|
-
|
|
582
|
+
enableData: signers.enableData,
|
|
583
|
+
};
|
|
584
|
+
// signWithSession (called inside getEmissarySignature) already calls packSignature
|
|
585
|
+
// internally, so no transform is needed here
|
|
586
|
+
return await (0, accounts_1.getEmissarySignature)(config, targetSigners, chain, hash);
|
|
572
587
|
}
|
|
573
|
-
const
|
|
588
|
+
const sessionSignersForEip1271 = {
|
|
574
589
|
type: 'experimental_session',
|
|
575
590
|
session: signers.session,
|
|
576
591
|
verifyExecutions: false,
|
|
577
592
|
enableData: signers.enableData,
|
|
578
|
-
}
|
|
593
|
+
};
|
|
594
|
+
const eip1271Signature = await (0, accounts_1.getEip1271Signature)(config, sessionSignersForEip1271, chain, {
|
|
579
595
|
address: validator.address,
|
|
580
596
|
isRoot,
|
|
581
597
|
}, hash);
|
|
@@ -590,6 +606,12 @@ async function signIntentTypedData(config, signers, validator, isRoot, parameter
|
|
|
590
606
|
notarizedClaimSig: eip1271Signature,
|
|
591
607
|
};
|
|
592
608
|
}
|
|
609
|
+
if (isResolvedSessionSignerSet(signers)) {
|
|
610
|
+
return await (0, accounts_1.getEip1271Signature)(config, signers, chain, {
|
|
611
|
+
address: validator.address,
|
|
612
|
+
isRoot,
|
|
613
|
+
}, hash);
|
|
614
|
+
}
|
|
593
615
|
return await (0, accounts_1.getEip1271Signature)(config, signers, chain, {
|
|
594
616
|
address: validator.address,
|
|
595
617
|
isRoot,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { getMockSignature, getOwnerValidator, MULTI_FACTOR_VALIDATOR_ADDRESS, OWNABLE_VALIDATOR_ADDRESS, SMART_SESSION_EMISSARY_ADDRESS, WEBAUTHN_VALIDATOR_ADDRESS } from './core';
|
|
2
|
-
import { buildMockSignature, getEnableSessionCall, getPermissionId, getSmartSessionValidator, isSessionEnabled } from './smart-sessions';
|
|
3
|
-
export { OWNABLE_VALIDATOR_ADDRESS, WEBAUTHN_VALIDATOR_ADDRESS, MULTI_FACTOR_VALIDATOR_ADDRESS, SMART_SESSION_EMISSARY_ADDRESS, getOwnerValidator, getSmartSessionValidator, getEnableSessionCall, getPermissionId, getMockSignature, buildMockSignature, isSessionEnabled, };
|
|
2
|
+
import { buildMockSignature, getEnableSessionCall, getPermissionId, getSmartSessionValidator, isSessionEnabled, packSignature } from './smart-sessions';
|
|
3
|
+
export { OWNABLE_VALIDATOR_ADDRESS, WEBAUTHN_VALIDATOR_ADDRESS, MULTI_FACTOR_VALIDATOR_ADDRESS, SMART_SESSION_EMISSARY_ADDRESS, getOwnerValidator, getSmartSessionValidator, getEnableSessionCall, getPermissionId, getMockSignature, buildMockSignature, isSessionEnabled, packSignature, };
|
|
4
4
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../modules/validators/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,8BAA8B,EAC9B,yBAAyB,EACzB,8BAA8B,EAC9B,0BAA0B,EAC3B,MAAM,QAAQ,CAAA;AACf,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,eAAe,EACf,wBAAwB,EACxB,gBAAgB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../modules/validators/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,8BAA8B,EAC9B,yBAAyB,EACzB,8BAA8B,EAC9B,0BAA0B,EAC3B,MAAM,QAAQ,CAAA;AACf,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,eAAe,EACf,wBAAwB,EACxB,gBAAgB,EAChB,aAAa,EACd,MAAM,kBAAkB,CAAA;AAEzB,OAAO,EACL,yBAAyB,EACzB,0BAA0B,EAC1B,8BAA8B,EAC9B,8BAA8B,EAC9B,iBAAiB,EACjB,wBAAwB,EACxB,oBAAoB,EACpB,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,aAAa,GACd,CAAA"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.isSessionEnabled = exports.buildMockSignature = exports.getMockSignature = exports.getPermissionId = exports.getEnableSessionCall = exports.getSmartSessionValidator = exports.getOwnerValidator = exports.SMART_SESSION_EMISSARY_ADDRESS = exports.MULTI_FACTOR_VALIDATOR_ADDRESS = exports.WEBAUTHN_VALIDATOR_ADDRESS = exports.OWNABLE_VALIDATOR_ADDRESS = void 0;
|
|
3
|
+
exports.packSignature = exports.isSessionEnabled = exports.buildMockSignature = exports.getMockSignature = exports.getPermissionId = exports.getEnableSessionCall = exports.getSmartSessionValidator = exports.getOwnerValidator = exports.SMART_SESSION_EMISSARY_ADDRESS = exports.MULTI_FACTOR_VALIDATOR_ADDRESS = exports.WEBAUTHN_VALIDATOR_ADDRESS = exports.OWNABLE_VALIDATOR_ADDRESS = void 0;
|
|
4
4
|
const core_1 = require("./core");
|
|
5
5
|
Object.defineProperty(exports, "getMockSignature", { enumerable: true, get: function () { return core_1.getMockSignature; } });
|
|
6
6
|
Object.defineProperty(exports, "getOwnerValidator", { enumerable: true, get: function () { return core_1.getOwnerValidator; } });
|
|
@@ -14,3 +14,4 @@ Object.defineProperty(exports, "getEnableSessionCall", { enumerable: true, get:
|
|
|
14
14
|
Object.defineProperty(exports, "getPermissionId", { enumerable: true, get: function () { return smart_sessions_1.getPermissionId; } });
|
|
15
15
|
Object.defineProperty(exports, "getSmartSessionValidator", { enumerable: true, get: function () { return smart_sessions_1.getSmartSessionValidator; } });
|
|
16
16
|
Object.defineProperty(exports, "isSessionEnabled", { enumerable: true, get: function () { return smart_sessions_1.isSessionEnabled; } });
|
|
17
|
+
Object.defineProperty(exports, "packSignature", { enumerable: true, get: function () { return smart_sessions_1.packSignature; } });
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type Address, type Hex, type TypedDataDefinition } from 'viem';
|
|
2
|
-
import type { ProviderConfig, RhinestoneAccountConfig, RhinestoneConfig, Session, SessionEnableData } from '../../types';
|
|
2
|
+
import type { Policy, ProviderConfig, RhinestoneAccountConfig, RhinestoneConfig, Session, SessionEnableData } from '../../types';
|
|
3
3
|
import { type Module } from '../common';
|
|
4
4
|
import { SMART_SESSION_EMISSARY_ADDRESS, SMART_SESSION_EMISSARY_ADDRESS_DEV } from './core';
|
|
5
5
|
interface SessionData {
|
|
@@ -164,6 +164,13 @@ declare const SMART_SESSION_MODE_ENABLE = "0x01";
|
|
|
164
164
|
declare const SMART_SESSIONS_FALLBACK_TARGET_FLAG: Address;
|
|
165
165
|
declare const SMART_SESSIONS_FALLBACK_TARGET_SELECTOR_FLAG: Hex;
|
|
166
166
|
declare const SMART_SESSIONS_FALLBACK_TARGET_SELECTOR_FLAG_PERMITTED_TO_CALL_SMARTSESSION: Hex;
|
|
167
|
+
declare const SPENDING_LIMITS_POLICY_ADDRESS: Address;
|
|
168
|
+
declare const TIME_FRAME_POLICY_ADDRESS: Address;
|
|
169
|
+
declare const SUDO_POLICY_ADDRESS: Address;
|
|
170
|
+
declare const UNIVERSAL_ACTION_POLICY_ADDRESS: Address;
|
|
171
|
+
declare const USAGE_LIMIT_POLICY_ADDRESS: Address;
|
|
172
|
+
declare const VALUE_LIMIT_POLICY_ADDRESS: Address;
|
|
173
|
+
declare const INTENT_EXECUTION_POLICY_ADDRESS: Address;
|
|
167
174
|
interface ResolvedSessionSignerSet {
|
|
168
175
|
type: 'experimental_session';
|
|
169
176
|
session: Session;
|
|
@@ -181,8 +188,9 @@ declare function getEnableSessionCall(account: Address, session: Session, enable
|
|
|
181
188
|
to: `0x${string}`;
|
|
182
189
|
data: `0x${string}`;
|
|
183
190
|
}>;
|
|
184
|
-
declare function getSessionData(session: Session): SessionData;
|
|
191
|
+
declare function getSessionData(session: Session, useDevContracts?: boolean): SessionData;
|
|
185
192
|
declare function getPermissionId(session: Session): `0x${string}`;
|
|
193
|
+
declare function getPolicyData(policy: Policy, useDevContracts?: boolean): PolicyData;
|
|
186
194
|
declare function getSmartSessionValidator(config: RhinestoneConfig): Module | null;
|
|
187
195
|
/**
|
|
188
196
|
* Builds a mockSignature for SSX validation gas estimation.
|
|
@@ -193,6 +201,6 @@ declare function getSmartSessionValidator(config: RhinestoneConfig): Module | nu
|
|
|
193
201
|
* simulates verifyExecution with the mock emissary to estimate gas before the user signs.
|
|
194
202
|
*/
|
|
195
203
|
declare function buildMockSignature(session: Session, useDevContracts?: boolean, chainCount?: number): Hex;
|
|
196
|
-
export { SMART_SESSION_EMISSARY_ADDRESS, SMART_SESSION_EMISSARY_ADDRESS_DEV, SMART_SESSIONS_FALLBACK_TARGET_FLAG, SMART_SESSIONS_FALLBACK_TARGET_SELECTOR_FLAG, SMART_SESSIONS_FALLBACK_TARGET_SELECTOR_FLAG_PERMITTED_TO_CALL_SMARTSESSION, packSignature, getSessionData, getEnableSessionCall, getPermissionId, getSmartSessionValidator, getSessionDetails, isSessionEnabled, signEnableSession, buildMockSignature, };
|
|
204
|
+
export { SMART_SESSION_EMISSARY_ADDRESS, SMART_SESSION_EMISSARY_ADDRESS_DEV, SMART_SESSIONS_FALLBACK_TARGET_FLAG, SMART_SESSIONS_FALLBACK_TARGET_SELECTOR_FLAG, SMART_SESSIONS_FALLBACK_TARGET_SELECTOR_FLAG_PERMITTED_TO_CALL_SMARTSESSION, SPENDING_LIMITS_POLICY_ADDRESS, TIME_FRAME_POLICY_ADDRESS, SUDO_POLICY_ADDRESS, UNIVERSAL_ACTION_POLICY_ADDRESS, USAGE_LIMIT_POLICY_ADDRESS, VALUE_LIMIT_POLICY_ADDRESS, INTENT_EXECUTION_POLICY_ADDRESS, packSignature, getSessionData, getPolicyData, getEnableSessionCall, getPermissionId, getSmartSessionValidator, getSessionDetails, isSessionEnabled, signEnableSession, buildMockSignature, };
|
|
197
205
|
export type { ChainSession, ChainDigest, ResolvedSessionSignerSet, SessionData, SmartSessionModeType, SessionDetails, };
|
|
198
206
|
//# sourceMappingURL=smart-sessions.d.ts.map
|