@charterlabs/rhinestone-sdk 0.3.0 → 0.3.1

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 (123) hide show
  1. package/dist/src/accounts/error.d.ts +8 -1
  2. package/dist/src/accounts/error.d.ts.map +1 -1
  3. package/dist/src/accounts/error.js +10 -1
  4. package/dist/src/accounts/index.d.ts +9 -9
  5. package/dist/src/accounts/index.d.ts.map +1 -1
  6. package/dist/src/accounts/index.js +65 -44
  7. package/dist/src/accounts/kernel.d.ts +3 -5
  8. package/dist/src/accounts/kernel.d.ts.map +1 -1
  9. package/dist/src/accounts/kernel.js +8 -17
  10. package/dist/src/accounts/kernel.test.js +10 -3
  11. package/dist/src/accounts/nexus.d.ts +3 -5
  12. package/dist/src/accounts/nexus.d.ts.map +1 -1
  13. package/dist/src/accounts/nexus.js +108 -57
  14. package/dist/src/accounts/nexus.test.js +10 -3
  15. package/dist/src/accounts/passport.d.ts +4 -7
  16. package/dist/src/accounts/passport.d.ts.map +1 -1
  17. package/dist/src/accounts/passport.js +0 -91
  18. package/dist/src/accounts/safe.d.ts +9 -4
  19. package/dist/src/accounts/safe.d.ts.map +1 -1
  20. package/dist/src/accounts/safe.js +108 -38
  21. package/dist/src/accounts/safe.test.js +10 -3
  22. package/dist/src/accounts/signing/common.d.ts +3 -3
  23. package/dist/src/accounts/signing/common.d.ts.map +1 -1
  24. package/dist/src/accounts/signing/common.js +36 -3
  25. package/dist/src/accounts/signing/message.js +2 -2
  26. package/dist/src/accounts/signing/typedData.d.ts.map +1 -1
  27. package/dist/src/accounts/signing/typedData.js +3 -3
  28. package/dist/src/accounts/startale.d.ts +2 -4
  29. package/dist/src/accounts/startale.d.ts.map +1 -1
  30. package/dist/src/accounts/startale.js +0 -4
  31. package/dist/src/accounts/utils.d.ts.map +1 -1
  32. package/dist/src/accounts/utils.js +10 -3
  33. package/dist/src/accounts/walletClient.d.ts.map +1 -1
  34. package/dist/src/accounts/walletClient.js +6 -0
  35. package/dist/src/actions/compact.d.ts +3 -2
  36. package/dist/src/actions/compact.d.ts.map +1 -1
  37. package/dist/src/actions/compact.js +1 -0
  38. package/dist/src/actions/deployment.d.ts +19 -0
  39. package/dist/src/actions/deployment.d.ts.map +1 -0
  40. package/dist/src/actions/deployment.js +78 -0
  41. package/dist/src/actions/index.d.ts +3 -1
  42. package/dist/src/actions/index.d.ts.map +1 -1
  43. package/dist/src/actions/index.js +12 -0
  44. package/dist/src/actions/smart-sessions.d.ts +7 -8
  45. package/dist/src/actions/smart-sessions.d.ts.map +1 -1
  46. package/dist/src/actions/smart-sessions.js +7 -4
  47. package/dist/src/errors/index.d.ts +2 -2
  48. package/dist/src/errors/index.d.ts.map +1 -1
  49. package/dist/src/errors/index.js +2 -1
  50. package/dist/src/execution/compact.d.ts +12 -17
  51. package/dist/src/execution/compact.d.ts.map +1 -1
  52. package/dist/src/execution/compact.js +10 -16
  53. package/dist/src/execution/error.d.ts +1 -8
  54. package/dist/src/execution/error.d.ts.map +1 -1
  55. package/dist/src/execution/error.js +1 -10
  56. package/dist/src/execution/index.d.ts +3 -3
  57. package/dist/src/execution/index.d.ts.map +1 -1
  58. package/dist/src/execution/index.js +10 -21
  59. package/dist/src/execution/permit2.d.ts +12 -17
  60. package/dist/src/execution/permit2.d.ts.map +1 -1
  61. package/dist/src/execution/permit2.js +10 -16
  62. package/dist/src/execution/singleChainOps.d.ts +15 -3
  63. package/dist/src/execution/singleChainOps.d.ts.map +1 -1
  64. package/dist/src/execution/singleChainOps.js +17 -3
  65. package/dist/src/execution/utils.d.ts +29 -7
  66. package/dist/src/execution/utils.d.ts.map +1 -1
  67. package/dist/src/execution/utils.js +103 -127
  68. package/dist/src/index.d.ts +22 -6
  69. package/dist/src/index.d.ts.map +1 -1
  70. package/dist/src/index.js +36 -5
  71. package/dist/src/modules/abi/smart-session-emissary.d.ts +696 -0
  72. package/dist/src/modules/abi/smart-session-emissary.d.ts.map +1 -0
  73. package/dist/src/modules/abi/smart-session-emissary.js +565 -0
  74. package/dist/src/modules/chain-abstraction.d.ts +5 -0
  75. package/dist/src/modules/chain-abstraction.d.ts.map +1 -0
  76. package/dist/src/modules/chain-abstraction.js +7 -0
  77. package/dist/src/modules/common.d.ts +7 -1
  78. package/dist/src/modules/common.d.ts.map +1 -1
  79. package/dist/src/modules/index.d.ts +3 -9
  80. package/dist/src/modules/index.d.ts.map +1 -1
  81. package/dist/src/modules/index.js +10 -8
  82. package/dist/src/modules/index.test.js +3 -9
  83. package/dist/src/modules/legacy.d.ts +10 -0
  84. package/dist/src/modules/legacy.d.ts.map +1 -0
  85. package/dist/src/modules/legacy.js +65 -0
  86. package/dist/src/modules/validators/core.d.ts.map +1 -1
  87. package/dist/src/modules/validators/core.js +2 -0
  88. package/dist/src/modules/validators/index.d.ts +2 -2
  89. package/dist/src/modules/validators/index.d.ts.map +1 -1
  90. package/dist/src/modules/validators/index.js +1 -6
  91. package/dist/src/modules/validators/smart-sessions.d.ts +105 -20
  92. package/dist/src/modules/validators/smart-sessions.d.ts.map +1 -1
  93. package/dist/src/modules/validators/smart-sessions.js +199 -435
  94. package/dist/src/orchestrator/client.d.ts +7 -3
  95. package/dist/src/orchestrator/client.d.ts.map +1 -1
  96. package/dist/src/orchestrator/client.js +3 -13
  97. package/dist/src/orchestrator/index.d.ts +2 -2
  98. package/dist/src/orchestrator/index.d.ts.map +1 -1
  99. package/dist/src/orchestrator/index.js +2 -1
  100. package/dist/src/orchestrator/registry.d.ts +2 -1
  101. package/dist/src/orchestrator/registry.d.ts.map +1 -1
  102. package/dist/src/orchestrator/registry.js +12 -0
  103. package/dist/src/orchestrator/registry.test.js +13 -0
  104. package/dist/src/orchestrator/types.d.ts +8 -5
  105. package/dist/src/orchestrator/types.d.ts.map +1 -1
  106. package/dist/src/types.d.ts +31 -21
  107. package/dist/src/types.d.ts.map +1 -1
  108. package/dist/src/utils/index.d.ts +14 -2
  109. package/dist/src/utils/index.d.ts.map +1 -1
  110. package/dist/src/utils/index.js +46 -4
  111. package/dist/test/utils/utils.d.ts +5 -0
  112. package/dist/test/utils/utils.d.ts.map +1 -0
  113. package/dist/test/utils/utils.js +20 -0
  114. package/package.json +32 -2
  115. package/dist/src/execution/smart-session.d.ts +0 -13
  116. package/dist/src/execution/smart-session.d.ts.map +0 -1
  117. package/dist/src/execution/smart-session.js +0 -178
  118. package/dist/src/modules/omni-account.d.ts +0 -8
  119. package/dist/src/modules/omni-account.d.ts.map +0 -1
  120. package/dist/src/modules/omni-account.js +0 -13
  121. package/dist/src/modules/validators/smart-sessions.test.d.ts +0 -2
  122. package/dist/src/modules/validators/smart-sessions.test.d.ts.map +0 -1
  123. package/dist/src/modules/validators/smart-sessions.test.js +0 -222
@@ -1,13 +0,0 @@
1
- import { type Chain, type Hex } from 'viem';
2
- import { type EnableSessionData } from '../modules/validators/smart-sessions';
3
- import type { RhinestoneConfig, Session } from '../types';
4
- interface SessionDetails {
5
- signature: Hex;
6
- nonces: bigint[];
7
- enableSessionData: EnableSessionData;
8
- }
9
- declare function getSessionDetails(config: RhinestoneConfig, sessions: Session[], sessionIndex: number, initialNonces?: bigint[], signature?: Hex): Promise<SessionDetails>;
10
- declare function enableSmartSession(chain: Chain, config: RhinestoneConfig, session: Session): Promise<void>;
11
- export { enableSmartSession, getSessionDetails };
12
- export type { SessionDetails };
13
- //# sourceMappingURL=smart-session.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"smart-session.d.ts","sourceRoot":"","sources":["../../../execution/smart-session.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,KAAK,EAEV,KAAK,GAAG,EAIT,MAAM,MAAM,CAAA;AAiBb,OAAO,EACL,KAAK,iBAAiB,EAKvB,MAAM,sCAAsC,CAAA;AAC7C,OAAO,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAGzD,UAAU,cAAc;IACtB,SAAS,EAAE,GAAG,CAAA;IACd,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,iBAAiB,EAAE,iBAAiB,CAAA;CACrC;AA6CD,iBAAe,iBAAiB,CAC9B,MAAM,EAAE,gBAAgB,EACxB,QAAQ,EAAE,OAAO,EAAE,EACnB,YAAY,EAAE,MAAM,EACpB,aAAa,CAAC,EAAE,MAAM,EAAE,EACxB,SAAS,CAAC,EAAE,GAAG,GACd,OAAO,CAAC,cAAc,CAAC,CAiHzB;AA+BD,iBAAe,kBAAkB,CAC/B,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,gBAAgB,EACxB,OAAO,EAAE,OAAO,iBA2BjB;AAED,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,CAAA;AAChD,YAAY,EAAE,cAAc,EAAE,CAAA"}
@@ -1,178 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.enableSmartSession = enableSmartSession;
4
- exports.getSessionDetails = getSessionDetails;
5
- const viem_1 = require("viem");
6
- const accounts_1 = require("../accounts");
7
- const utils_1 = require("../accounts/utils");
8
- const validators_1 = require("../modules/validators");
9
- const smart_sessions_1 = require("../modules/validators/smart-sessions");
10
- const error_1 = require("./error");
11
- const smartSessionTypes = {
12
- PolicyData: [
13
- { name: 'policy', type: 'address' },
14
- { name: 'initData', type: 'bytes' },
15
- ],
16
- ActionData: [
17
- { name: 'actionTargetSelector', type: 'bytes4' },
18
- { name: 'actionTarget', type: 'address' },
19
- { name: 'actionPolicies', type: 'PolicyData[]' },
20
- ],
21
- ERC7739Context: [
22
- { name: 'appDomainSeparator', type: 'bytes32' },
23
- { name: 'contentName', type: 'string[]' },
24
- ],
25
- ERC7739Data: [
26
- { name: 'allowedERC7739Content', type: 'ERC7739Context[]' },
27
- { name: 'erc1271Policies', type: 'PolicyData[]' },
28
- ],
29
- SignedPermissions: [
30
- { name: 'permitGenericPolicy', type: 'bool' },
31
- { name: 'permitAdminAccess', type: 'bool' },
32
- { name: 'ignoreSecurityAttestations', type: 'bool' },
33
- { name: 'permitERC4337Paymaster', type: 'bool' },
34
- { name: 'userOpPolicies', type: 'PolicyData[]' },
35
- { name: 'erc7739Policies', type: 'ERC7739Data' },
36
- { name: 'actions', type: 'ActionData[]' },
37
- ],
38
- SignedSession: [
39
- { name: 'account', type: 'address' },
40
- { name: 'permissions', type: 'SignedPermissions' },
41
- { name: 'sessionValidator', type: 'address' },
42
- { name: 'sessionValidatorInitData', type: 'bytes' },
43
- { name: 'salt', type: 'bytes32' },
44
- { name: 'smartSession', type: 'address' },
45
- { name: 'nonce', type: 'uint256' },
46
- ],
47
- ChainSession: [
48
- { name: 'chainId', type: 'uint64' },
49
- { name: 'session', type: 'SignedSession' },
50
- ],
51
- MultiChainSession: [{ name: 'sessionsAndChainIds', type: 'ChainSession[]' }],
52
- };
53
- async function getSessionDetails(config, sessions, sessionIndex, initialNonces, signature) {
54
- const chains = sessions
55
- .map((session) => session.chain)
56
- .filter((chain) => !!chain);
57
- if (chains.length !== sessions.length) {
58
- throw new error_1.SessionChainRequiredError();
59
- }
60
- const accountAddress = (0, accounts_1.getAddress)(config);
61
- const publicClients = chains.map((chain) => (0, viem_1.createPublicClient)({
62
- chain,
63
- transport: (0, utils_1.createTransport)(chain, config.provider),
64
- }));
65
- const sessionDatas = sessions.map((session) => (0, smart_sessions_1.getSmartSessionData)(session));
66
- const sessionNonces = await Promise.all(sessions.map((session, index) => initialNonces?.[index] ??
67
- getSessionNonce(publicClients[index], accountAddress, (0, validators_1.getPermissionId)(session))));
68
- const signedSessions = sessionDatas.map((session, index) => ({
69
- account: accountAddress,
70
- permissions: {
71
- permitGenericPolicy: session.actions.some((action) => action.actionTarget === smart_sessions_1.SMART_SESSIONS_FALLBACK_TARGET_FLAG &&
72
- action.actionTargetSelector ===
73
- smart_sessions_1.SMART_SESSIONS_FALLBACK_TARGET_SELECTOR_FLAG),
74
- permitAdminAccess: session.actions.some((action) => action.actionTargetSelector ===
75
- smart_sessions_1.SMART_SESSIONS_FALLBACK_TARGET_SELECTOR_FLAG_PERMITTED_TO_CALL_SMARTSESSION),
76
- ignoreSecurityAttestations: false,
77
- permitERC4337Paymaster: session.permitERC4337Paymaster,
78
- userOpPolicies: session.userOpPolicies,
79
- erc7739Policies: session.erc7739Policies,
80
- actions: session.actions,
81
- },
82
- sessionValidator: session.sessionValidator,
83
- sessionValidatorInitData: session.sessionValidatorInitData,
84
- salt: session.salt,
85
- smartSession: validators_1.SMART_SESSIONS_VALIDATOR_ADDRESS,
86
- nonce: sessionNonces[index],
87
- }));
88
- const chainDigests = signedSessions.map((session, index) => ({
89
- chainId: BigInt(chains[index].id),
90
- sessionDigest: (0, viem_1.hashStruct)({
91
- types: smartSessionTypes,
92
- primaryType: 'SignedSession',
93
- data: session,
94
- }),
95
- }));
96
- const typedData = {
97
- domain: {
98
- name: 'SmartSession',
99
- version: '1',
100
- },
101
- types: smartSessionTypes,
102
- primaryType: 'MultiChainSession',
103
- message: {
104
- sessionsAndChainIds: signedSessions.map((session, index) => ({
105
- chainId: BigInt(chains[index].id),
106
- session,
107
- })),
108
- },
109
- };
110
- const chain = sessions[sessionIndex].chain;
111
- if (!chain) {
112
- throw new error_1.SessionChainRequiredError();
113
- }
114
- const validator = {
115
- address: sessionDatas[sessionIndex].sessionValidator,
116
- isRoot: false,
117
- };
118
- const sessionSignature = signature ??
119
- (await (0, accounts_1.getTypedDataPackedSignature)(config, undefined, chain, validator, typedData));
120
- return {
121
- nonces: sessionNonces,
122
- signature: sessionSignature,
123
- enableSessionData: {
124
- chainDigestIndex: sessionIndex,
125
- hashesAndChainIds: chainDigests.map((chainDigest) => ({
126
- chainId: BigInt(chainDigest.chainId),
127
- sessionDigest: chainDigest.sessionDigest,
128
- })),
129
- sessionToEnable: sessionDatas[sessionIndex],
130
- signature: sessionSignature,
131
- },
132
- };
133
- }
134
- async function getSessionNonce(client, account, permissionId) {
135
- const nonce = await client.readContract({
136
- address: validators_1.SMART_SESSIONS_VALIDATOR_ADDRESS,
137
- abi: [
138
- {
139
- type: 'function',
140
- name: 'getNonce',
141
- inputs: [
142
- {
143
- name: 'permissionId',
144
- type: 'bytes32',
145
- internalType: 'PermissionId',
146
- },
147
- { name: 'account', type: 'address', internalType: 'address' },
148
- ],
149
- outputs: [{ name: '', type: 'uint256', internalType: 'uint256' }],
150
- stateMutability: 'view',
151
- },
152
- ],
153
- functionName: 'getNonce',
154
- args: [permissionId, account],
155
- });
156
- return nonce;
157
- }
158
- async function enableSmartSession(chain, config, session) {
159
- const publicClient = (0, viem_1.createPublicClient)({
160
- chain,
161
- transport: (0, utils_1.createTransport)(chain, config.provider),
162
- });
163
- const address = (0, accounts_1.getAddress)(config);
164
- const isEnabled = await (0, validators_1.isSessionEnabled)(publicClient, address, (0, validators_1.getPermissionId)(session));
165
- if (isEnabled) {
166
- return;
167
- }
168
- const enableSessionCall = await (0, validators_1.getEnableSessionCall)(session);
169
- const smartAccount = await (0, accounts_1.getSmartAccount)(config, publicClient, chain);
170
- const bundlerClient = (0, utils_1.getBundlerClient)(config, publicClient);
171
- const opHash = await bundlerClient.sendUserOperation({
172
- account: smartAccount,
173
- calls: [enableSessionCall],
174
- });
175
- await bundlerClient.waitForUserOperationReceipt({
176
- hash: opHash,
177
- });
178
- }
@@ -1,8 +0,0 @@
1
- import type { Address } from 'viem';
2
- declare const HOOK_ADDRESS: Address;
3
- declare const TARGET_MODULE_ADDRESS: Address;
4
- declare const SAME_CHAIN_MODULE_ADDRESS: Address;
5
- declare const INTENT_EXECUTOR_ADDRESS: Address;
6
- declare const INTENT_EXECUTOR_ADDRESS_DEV: Address;
7
- export { HOOK_ADDRESS, TARGET_MODULE_ADDRESS, SAME_CHAIN_MODULE_ADDRESS, INTENT_EXECUTOR_ADDRESS, INTENT_EXECUTOR_ADDRESS_DEV, };
8
- //# sourceMappingURL=omni-account.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"omni-account.d.ts","sourceRoot":"","sources":["../../../modules/omni-account.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAEnC,QAAA,MAAM,YAAY,EAAE,OAAsD,CAAA;AAC1E,QAAA,MAAM,qBAAqB,EAAE,OACiB,CAAA;AAC9C,QAAA,MAAM,yBAAyB,EAAE,OACa,CAAA;AAE9C,QAAA,MAAM,uBAAuB,EAAE,OACe,CAAA;AAC9C,QAAA,MAAM,2BAA2B,EAAE,OACW,CAAA;AAE9C,OAAO,EACL,YAAY,EACZ,qBAAqB,EACrB,yBAAyB,EACzB,uBAAuB,EACvB,2BAA2B,GAC5B,CAAA"}
@@ -1,13 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.INTENT_EXECUTOR_ADDRESS_DEV = exports.INTENT_EXECUTOR_ADDRESS = exports.SAME_CHAIN_MODULE_ADDRESS = exports.TARGET_MODULE_ADDRESS = exports.HOOK_ADDRESS = void 0;
4
- const HOOK_ADDRESS = '0x0000000000f6Ed8Be424d673c63eeFF8b9267420';
5
- exports.HOOK_ADDRESS = HOOK_ADDRESS;
6
- const TARGET_MODULE_ADDRESS = '0x0000000000E5a37279A001301A837a91b5de1D5E';
7
- exports.TARGET_MODULE_ADDRESS = TARGET_MODULE_ADDRESS;
8
- const SAME_CHAIN_MODULE_ADDRESS = '0x000000000043ff16d5776c7F0f65Ec485C17Ca04';
9
- exports.SAME_CHAIN_MODULE_ADDRESS = SAME_CHAIN_MODULE_ADDRESS;
10
- const INTENT_EXECUTOR_ADDRESS = '0x00000000005aD9ce1f5035FD62CA96CEf16AdAAF';
11
- exports.INTENT_EXECUTOR_ADDRESS = INTENT_EXECUTOR_ADDRESS;
12
- const INTENT_EXECUTOR_ADDRESS_DEV = '0xbf9b5b917a83f8adac17b0752846d41d8d7b7e17';
13
- exports.INTENT_EXECUTOR_ADDRESS_DEV = INTENT_EXECUTOR_ADDRESS_DEV;
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=smart-sessions.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"smart-sessions.test.d.ts","sourceRoot":"","sources":["../../../../modules/validators/smart-sessions.test.ts"],"names":[],"mappings":""}
@@ -1,222 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const viem_1 = require("viem");
4
- const vitest_1 = require("vitest");
5
- const consts_1 = require("../../../test/consts");
6
- const smart_sessions_1 = require("../abi/smart-sessions");
7
- const common_1 = require("../common");
8
- const smart_sessions_2 = require("./smart-sessions");
9
- (0, vitest_1.describe)('Smart Sessions', () => {
10
- (0, vitest_1.describe)('Permission ID', () => {
11
- (0, vitest_1.test)('default', () => {
12
- (0, vitest_1.expect)((0, smart_sessions_2.getPermissionId)({
13
- owners: {
14
- type: 'ecdsa',
15
- accounts: [consts_1.accountA, consts_1.accountB],
16
- },
17
- })).toBe('0xd3b39024e437b4cac278e33965b9a9326e81ee46bd45d890adbfc8eb45412fa1');
18
- });
19
- (0, vitest_1.test)('with salt', () => {
20
- (0, vitest_1.expect)((0, smart_sessions_2.getPermissionId)({
21
- owners: {
22
- type: 'ecdsa',
23
- accounts: [consts_1.accountA, consts_1.accountB],
24
- },
25
- salt: '0x97340e1cfff3319c76ef22b2bc9d3231071d550125d68c9d4a8972823f166320',
26
- })).toBe('0xeb47b4699298a847a0f6fb7365e56aefcc95630e7d0e3d9ca5917620c7dc3d08');
27
- });
28
- });
29
- (0, vitest_1.describe)('Smart Session Validator', () => {
30
- (0, vitest_1.test)('no session', () => {
31
- (0, vitest_1.expect)((0, smart_sessions_2.getSmartSessionValidator)({
32
- owners: {
33
- type: 'ecdsa',
34
- accounts: [consts_1.accountA],
35
- },
36
- })).toBeNull();
37
- });
38
- (0, vitest_1.test)('empty session list', () => {
39
- (0, vitest_1.expect)((0, smart_sessions_2.getSmartSessionValidator)({
40
- owners: {
41
- type: 'ecdsa',
42
- accounts: [consts_1.accountA],
43
- },
44
- sessions: [],
45
- })).not.toBeNull();
46
- });
47
- (0, vitest_1.test)('single session', () => {
48
- const validator = (0, smart_sessions_2.getSmartSessionValidator)({
49
- owners: {
50
- type: 'ecdsa',
51
- accounts: [consts_1.accountA],
52
- },
53
- sessions: [
54
- {
55
- owners: {
56
- type: 'ecdsa',
57
- accounts: [consts_1.accountA],
58
- },
59
- },
60
- ],
61
- });
62
- (0, vitest_1.expect)(validator).not.toBeNull();
63
- (0, vitest_1.expect)(validator?.type).toEqual(common_1.MODULE_TYPE_ID_VALIDATOR);
64
- (0, vitest_1.expect)(validator && (0, viem_1.isAddress)(validator.address)).toEqual(true);
65
- });
66
- });
67
- (0, vitest_1.describe)('Enable Session Call', () => {
68
- vitest_1.vi.mock('viem', async (importOriginal) => {
69
- const actual = await importOriginal();
70
- return {
71
- // @ts-ignore
72
- ...actual,
73
- createPublicClient: vitest_1.vi.fn().mockReturnValue({
74
- readContract: vitest_1.vi.fn(),
75
- }),
76
- };
77
- });
78
- const client = viem_1.createPublicClient;
79
- client.mockImplementation((_) => {
80
- return {
81
- readContract: (params) => {
82
- if (params.functionName === 'DOMAIN_SEPARATOR') {
83
- return '0xf5f6dfa751763cc5278cba45d03ea9797c1660b2cb7f5ffd188fa3e8523abdca';
84
- }
85
- throw new Error('Unknown function call');
86
- },
87
- };
88
- });
89
- const TARGET = '0x063DFbDb1610EC7BbfA1fFBE603Ac5aA1B67a935';
90
- const SELECTOR = '0x12345678';
91
- const FALLBACK_TARGET = '0x0000000000000000000000000000000000000001';
92
- const FALLBACK_SELECTOR = '0x00000001';
93
- (0, vitest_1.test)('default', async () => {
94
- const call = await (0, smart_sessions_2.getEnableSessionCall)({
95
- owners: {
96
- type: 'ecdsa',
97
- accounts: [consts_1.accountA],
98
- },
99
- });
100
- const sessionData = toSessionData(call);
101
- // Should have a fallback action
102
- (0, vitest_1.expect)(sessionData.actions.some((action) => action.actionTarget === FALLBACK_TARGET &&
103
- action.actionTargetSelector === FALLBACK_SELECTOR)).toEqual(true);
104
- });
105
- (0, vitest_1.test)('with action', async () => {
106
- const call = await (0, smart_sessions_2.getEnableSessionCall)({
107
- owners: {
108
- type: 'ecdsa',
109
- accounts: [consts_1.accountA],
110
- },
111
- actions: [
112
- {
113
- target: TARGET,
114
- selector: SELECTOR,
115
- },
116
- ],
117
- });
118
- const sessionData = toSessionData(call);
119
- // Should have the action
120
- (0, vitest_1.expect)(sessionData.actions.some((action) => action.actionTarget === TARGET &&
121
- action.actionTargetSelector === SELECTOR)).toEqual(true);
122
- // Should not have the fallback action
123
- (0, vitest_1.expect)(sessionData.actions.some((action) => action.actionTarget === FALLBACK_TARGET &&
124
- action.actionTargetSelector === FALLBACK_SELECTOR)).toEqual(false);
125
- });
126
- (0, vitest_1.test)('with policy', async () => {
127
- const call = await (0, smart_sessions_2.getEnableSessionCall)({
128
- owners: {
129
- type: 'ecdsa',
130
- accounts: [consts_1.accountA],
131
- },
132
- policies: [
133
- {
134
- type: 'sudo',
135
- },
136
- {
137
- type: 'universal-action',
138
- rules: [
139
- {
140
- condition: 'equal',
141
- calldataOffset: 0n,
142
- referenceValue: '0xd8da6bf26964af9d7eed9e03e53415d37aa96045',
143
- },
144
- ],
145
- },
146
- ],
147
- });
148
- const sessionData = toSessionData(call);
149
- // Should have two policies
150
- (0, vitest_1.expect)(sessionData.userOpPolicies.length).toEqual(2);
151
- (0, vitest_1.expect)((0, viem_1.isAddress)(sessionData.userOpPolicies[0].policy)).toEqual(true);
152
- (0, vitest_1.expect)((0, viem_1.isHex)(sessionData.userOpPolicies[0].initData)).toEqual(true);
153
- (0, vitest_1.expect)((0, viem_1.isAddress)(sessionData.userOpPolicies[1].policy)).toEqual(true);
154
- (0, vitest_1.expect)((0, viem_1.isHex)(sessionData.userOpPolicies[1].initData)).toEqual(true);
155
- });
156
- (0, vitest_1.test)('with action policy', async () => {
157
- const call = await (0, smart_sessions_2.getEnableSessionCall)({
158
- owners: {
159
- type: 'ecdsa',
160
- accounts: [consts_1.accountA],
161
- },
162
- actions: [
163
- {
164
- target: TARGET,
165
- selector: SELECTOR,
166
- policies: [
167
- {
168
- type: 'sudo',
169
- },
170
- {
171
- type: 'universal-action',
172
- rules: [
173
- {
174
- condition: 'equal',
175
- calldataOffset: 0n,
176
- referenceValue: '0xd8da6bf26964af9d7eed9e03e53415d37aa96045',
177
- },
178
- ],
179
- },
180
- ],
181
- },
182
- ],
183
- });
184
- const sessionData = toSessionData(call);
185
- // Should have the action
186
- const action = sessionData.actions.find((action) => action.actionTarget === TARGET &&
187
- action.actionTargetSelector === SELECTOR);
188
- (0, vitest_1.expect)(action).toBeDefined();
189
- if (!action) {
190
- throw new Error('No action');
191
- }
192
- // Should have 2 policies
193
- const actionPolicies = action.actionPolicies;
194
- (0, vitest_1.expect)(actionPolicies.length).toEqual(2);
195
- (0, vitest_1.expect)((0, viem_1.isAddress)(actionPolicies[0].policy)).toEqual(true);
196
- (0, vitest_1.expect)((0, viem_1.isHex)(actionPolicies[0].initData)).toEqual(true);
197
- (0, vitest_1.expect)((0, viem_1.isAddress)(actionPolicies[1].policy)).toEqual(true);
198
- (0, vitest_1.expect)((0, viem_1.isHex)(actionPolicies[1].initData)).toEqual(true);
199
- });
200
- function toSessionData(call) {
201
- (0, vitest_1.expect)((0, viem_1.isHex)(call.data)).toEqual(true);
202
- (0, vitest_1.expect)((0, viem_1.isAddress)(call.to)).toEqual(true);
203
- const decoded = (0, viem_1.decodeFunctionData)({
204
- abi: smart_sessions_1.enableSessionsAbi,
205
- data: call.data,
206
- });
207
- (0, vitest_1.expect)(decoded.functionName).toEqual('enableSessions');
208
- (0, vitest_1.expect)(decoded.args.length).toEqual(1);
209
- (0, vitest_1.expect)(decoded.args[0].length).toEqual(1);
210
- const session = decoded.args[0][0];
211
- return session;
212
- }
213
- });
214
- (0, vitest_1.describe)('Encode Smart Session Signature', () => {
215
- (0, vitest_1.test)('use mode', () => {
216
- const permissionId = '0xd3b39024e437b4cac278e33965b9a9326e81ee46bd45d890adbfc8eb45412fa1';
217
- const signature = '0xabcdef';
218
- const sessionSignature = (0, smart_sessions_2.encodeSmartSessionSignature)(smart_sessions_2.SMART_SESSION_MODE_USE, permissionId, signature);
219
- (0, vitest_1.expect)(sessionSignature).toEqual('0x00d3b39024e437b4cac278e33965b9a9326e81ee46bd45d890adbfc8eb45412fa1abcdef');
220
- });
221
- });
222
- });