@rhinestone/sdk 1.0.41-alpha.0 → 1.0.41

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 (208) hide show
  1. package/dist/src/accounts/error.d.ts +114 -0
  2. package/dist/src/accounts/error.d.ts.map +1 -0
  3. package/dist/src/accounts/error.js +174 -0
  4. package/dist/src/accounts/index.d.ts +50 -0
  5. package/dist/src/accounts/index.d.ts.map +1 -0
  6. package/dist/src/accounts/index.js +669 -0
  7. package/dist/src/accounts/index.test.d.ts +2 -0
  8. package/dist/src/accounts/index.test.d.ts.map +1 -0
  9. package/dist/src/accounts/index.test.js +33 -0
  10. package/dist/src/accounts/json-rpc/index.d.ts +5 -0
  11. package/dist/src/accounts/json-rpc/index.d.ts.map +1 -0
  12. package/dist/src/accounts/json-rpc/index.js +20 -0
  13. package/dist/src/accounts/json-rpc/index.test.d.ts +2 -0
  14. package/dist/src/accounts/json-rpc/index.test.d.ts.map +1 -0
  15. package/dist/src/accounts/json-rpc/index.test.js +33 -0
  16. package/dist/src/accounts/json-rpc/providers.d.ts +5 -0
  17. package/dist/src/accounts/json-rpc/providers.d.ts.map +1 -0
  18. package/dist/src/accounts/json-rpc/providers.js +22 -0
  19. package/dist/src/accounts/json-rpc/providers.test.d.ts +2 -0
  20. package/dist/src/accounts/json-rpc/providers.test.d.ts.map +1 -0
  21. package/dist/src/accounts/json-rpc/providers.test.js +43 -0
  22. package/dist/src/accounts/kernel.d.ts +29 -0
  23. package/dist/src/accounts/kernel.d.ts.map +1 -0
  24. package/dist/src/accounts/kernel.js +297 -0
  25. package/dist/src/accounts/kernel.test.d.ts +2 -0
  26. package/dist/src/accounts/kernel.test.d.ts.map +1 -0
  27. package/dist/src/accounts/kernel.test.js +132 -0
  28. package/dist/src/accounts/nexus.d.ts +35 -0
  29. package/dist/src/accounts/nexus.d.ts.map +1 -0
  30. package/dist/src/accounts/nexus.js +471 -0
  31. package/dist/src/accounts/nexus.test.d.ts +2 -0
  32. package/dist/src/accounts/nexus.test.d.ts.map +1 -0
  33. package/dist/src/accounts/nexus.test.js +118 -0
  34. package/dist/src/accounts/passport.d.ts +12 -0
  35. package/dist/src/accounts/passport.d.ts.map +1 -0
  36. package/dist/src/accounts/passport.js +173 -0
  37. package/dist/src/accounts/safe.d.ts +35 -0
  38. package/dist/src/accounts/safe.d.ts.map +1 -0
  39. package/dist/src/accounts/safe.js +365 -0
  40. package/dist/src/accounts/safe.test.d.ts +2 -0
  41. package/dist/src/accounts/safe.test.d.ts.map +1 -0
  42. package/dist/src/accounts/safe.test.js +118 -0
  43. package/dist/src/accounts/signing/common.d.ts +27 -0
  44. package/dist/src/accounts/signing/common.d.ts.map +1 -0
  45. package/dist/src/accounts/signing/common.js +183 -0
  46. package/dist/src/accounts/signing/message.d.ts +5 -0
  47. package/dist/src/accounts/signing/message.d.ts.map +1 -0
  48. package/dist/src/accounts/signing/message.js +47 -0
  49. package/dist/src/accounts/signing/passkeys.d.ts +36 -0
  50. package/dist/src/accounts/signing/passkeys.d.ts.map +1 -0
  51. package/dist/src/accounts/signing/passkeys.js +125 -0
  52. package/dist/src/accounts/signing/passkeys.test.d.ts +2 -0
  53. package/dist/src/accounts/signing/passkeys.test.d.ts.map +1 -0
  54. package/dist/src/accounts/signing/passkeys.test.js +88 -0
  55. package/dist/src/accounts/signing/typedData.d.ts +5 -0
  56. package/dist/src/accounts/signing/typedData.d.ts.map +1 -0
  57. package/dist/src/accounts/signing/typedData.js +35 -0
  58. package/dist/src/accounts/startale.d.ts +27 -0
  59. package/dist/src/accounts/startale.d.ts.map +1 -0
  60. package/dist/src/accounts/startale.js +116 -0
  61. package/dist/src/accounts/startale.test.d.ts +2 -0
  62. package/dist/src/accounts/startale.test.d.ts.map +1 -0
  63. package/dist/src/accounts/startale.test.js +92 -0
  64. package/dist/src/accounts/utils.d.ts +33 -0
  65. package/dist/src/accounts/utils.d.ts.map +1 -0
  66. package/dist/src/accounts/utils.js +208 -0
  67. package/dist/src/accounts/utils.test.d.ts +2 -0
  68. package/dist/src/accounts/utils.test.d.ts.map +1 -0
  69. package/dist/src/accounts/utils.test.js +49 -0
  70. package/dist/src/accounts/walletClient.d.ts +34 -0
  71. package/dist/src/accounts/walletClient.d.ts.map +1 -0
  72. package/dist/src/accounts/walletClient.js +121 -0
  73. package/dist/src/actions/compact.d.ts +13 -0
  74. package/dist/src/actions/compact.d.ts.map +1 -0
  75. package/dist/src/actions/compact.js +210 -0
  76. package/dist/src/actions/deployment.d.ts +19 -0
  77. package/dist/src/actions/deployment.d.ts.map +1 -0
  78. package/dist/src/actions/deployment.js +78 -0
  79. package/dist/src/actions/ecdsa.d.ts +35 -0
  80. package/dist/src/actions/ecdsa.d.ts.map +1 -0
  81. package/dist/src/actions/ecdsa.js +114 -0
  82. package/dist/src/actions/ecdsa.test.d.ts +2 -0
  83. package/dist/src/actions/ecdsa.test.d.ts.map +1 -0
  84. package/dist/src/actions/ecdsa.test.js +99 -0
  85. package/dist/src/actions/index.d.ts +17 -0
  86. package/dist/src/actions/index.d.ts.map +1 -0
  87. package/dist/src/actions/index.js +53 -0
  88. package/dist/src/actions/mfa.d.ts +37 -0
  89. package/dist/src/actions/mfa.d.ts.map +1 -0
  90. package/dist/src/actions/mfa.js +133 -0
  91. package/dist/src/actions/passkeys.d.ts +37 -0
  92. package/dist/src/actions/passkeys.d.ts.map +1 -0
  93. package/dist/src/actions/passkeys.js +129 -0
  94. package/dist/src/actions/passkeys.test.d.ts +2 -0
  95. package/dist/src/actions/passkeys.test.d.ts.map +1 -0
  96. package/dist/src/actions/passkeys.test.js +54 -0
  97. package/dist/src/actions/recovery.d.ts +33 -0
  98. package/dist/src/actions/recovery.d.ts.map +1 -0
  99. package/dist/src/actions/recovery.js +193 -0
  100. package/dist/src/actions/recovery.test.d.ts +2 -0
  101. package/dist/src/actions/recovery.test.d.ts.map +1 -0
  102. package/dist/src/actions/recovery.test.js +168 -0
  103. package/dist/src/actions/smart-sessions.d.ts +14 -0
  104. package/dist/src/actions/smart-sessions.d.ts.map +1 -0
  105. package/dist/src/actions/smart-sessions.js +16 -0
  106. package/dist/src/errors/index.d.ts +5 -0
  107. package/dist/src/errors/index.d.ts.map +1 -0
  108. package/dist/src/errors/index.js +53 -0
  109. package/dist/src/execution/compact.d.ts +151 -0
  110. package/dist/src/execution/compact.d.ts.map +1 -0
  111. package/dist/src/execution/compact.js +122 -0
  112. package/dist/src/execution/error.d.ts +61 -0
  113. package/dist/src/execution/error.d.ts.map +1 -0
  114. package/dist/src/execution/error.js +87 -0
  115. package/dist/src/execution/index.d.ts +41 -0
  116. package/dist/src/execution/index.d.ts.map +1 -0
  117. package/dist/src/execution/index.js +233 -0
  118. package/dist/src/execution/permit2.d.ts +148 -0
  119. package/dist/src/execution/permit2.d.ts.map +1 -0
  120. package/dist/src/execution/permit2.js +291 -0
  121. package/dist/src/execution/singleChainOps.d.ts +28 -0
  122. package/dist/src/execution/singleChainOps.d.ts.map +1 -0
  123. package/dist/src/execution/singleChainOps.js +32 -0
  124. package/dist/src/execution/smart-session.d.ts +13 -0
  125. package/dist/src/execution/smart-session.d.ts.map +1 -0
  126. package/dist/src/execution/smart-session.js +178 -0
  127. package/dist/src/execution/types.d.ts +36 -0
  128. package/dist/src/execution/types.d.ts.map +1 -0
  129. package/dist/src/execution/types.js +2 -0
  130. package/dist/src/execution/utils.d.ts +83 -0
  131. package/dist/src/execution/utils.d.ts.map +1 -0
  132. package/dist/src/execution/utils.js +705 -0
  133. package/dist/src/index.d.ts +74 -0
  134. package/dist/src/index.d.ts.map +1 -0
  135. package/dist/src/index.js +317 -0
  136. package/dist/src/modules/abi/smart-sessions.d.ts +104 -0
  137. package/dist/src/modules/abi/smart-sessions.d.ts.map +1 -0
  138. package/dist/src/modules/abi/smart-sessions.js +131 -0
  139. package/dist/src/modules/chain-abstraction.d.ts +5 -0
  140. package/dist/src/modules/chain-abstraction.d.ts.map +1 -0
  141. package/dist/src/modules/chain-abstraction.js +7 -0
  142. package/dist/src/modules/common.d.ts +30 -0
  143. package/dist/src/modules/common.d.ts.map +1 -0
  144. package/dist/src/modules/common.js +42 -0
  145. package/dist/src/modules/index.d.ts +10 -0
  146. package/dist/src/modules/index.d.ts.map +1 -0
  147. package/dist/src/modules/index.js +94 -0
  148. package/dist/src/modules/index.test.d.ts +2 -0
  149. package/dist/src/modules/index.test.d.ts.map +1 -0
  150. package/dist/src/modules/index.test.js +81 -0
  151. package/dist/src/modules/legacy.d.ts +10 -0
  152. package/dist/src/modules/legacy.d.ts.map +1 -0
  153. package/dist/src/modules/legacy.js +65 -0
  154. package/dist/src/modules/read.d.ts +9 -0
  155. package/dist/src/modules/read.d.ts.map +1 -0
  156. package/dist/src/modules/read.js +125 -0
  157. package/dist/src/modules/validators/core.d.ts +29 -0
  158. package/dist/src/modules/validators/core.d.ts.map +1 -0
  159. package/dist/src/modules/validators/core.js +278 -0
  160. package/dist/src/modules/validators/core.test.d.ts +2 -0
  161. package/dist/src/modules/validators/core.test.d.ts.map +1 -0
  162. package/dist/src/modules/validators/core.test.js +101 -0
  163. package/dist/src/modules/validators/index.d.ts +4 -0
  164. package/dist/src/modules/validators/index.d.ts.map +1 -0
  165. package/dist/src/modules/validators/index.js +15 -0
  166. package/dist/src/modules/validators/smart-sessions.d.ts +96 -0
  167. package/dist/src/modules/validators/smart-sessions.d.ts.map +1 -0
  168. package/dist/src/modules/validators/smart-sessions.js +497 -0
  169. package/dist/src/modules/validators/smart-sessions.test.d.ts +2 -0
  170. package/dist/src/modules/validators/smart-sessions.test.d.ts.map +1 -0
  171. package/dist/src/modules/validators/smart-sessions.test.js +219 -0
  172. package/dist/src/orchestrator/client.d.ts +27 -0
  173. package/dist/src/orchestrator/client.d.ts.map +1 -0
  174. package/dist/src/orchestrator/client.js +354 -0
  175. package/dist/src/orchestrator/consts.d.ts +5 -0
  176. package/dist/src/orchestrator/consts.d.ts.map +1 -0
  177. package/dist/src/orchestrator/consts.js +9 -0
  178. package/dist/src/orchestrator/error.d.ts +232 -0
  179. package/dist/src/orchestrator/error.d.ts.map +1 -0
  180. package/dist/src/orchestrator/error.js +268 -0
  181. package/dist/src/orchestrator/index.d.ts +10 -0
  182. package/dist/src/orchestrator/index.d.ts.map +1 -0
  183. package/dist/src/orchestrator/index.js +57 -0
  184. package/dist/src/orchestrator/registry.d.ts +22 -0
  185. package/dist/src/orchestrator/registry.d.ts.map +1 -0
  186. package/dist/src/orchestrator/registry.js +121 -0
  187. package/dist/src/orchestrator/registry.test.d.ts +2 -0
  188. package/dist/src/orchestrator/registry.test.d.ts.map +1 -0
  189. package/dist/src/orchestrator/registry.test.js +150 -0
  190. package/dist/src/orchestrator/types.d.ts +295 -0
  191. package/dist/src/orchestrator/types.d.ts.map +1 -0
  192. package/dist/src/orchestrator/types.js +17 -0
  193. package/dist/src/orchestrator/utils.d.ts +3 -0
  194. package/dist/src/orchestrator/utils.d.ts.map +1 -0
  195. package/dist/src/orchestrator/utils.js +24 -0
  196. package/dist/src/types.d.ts +284 -0
  197. package/dist/src/types.d.ts.map +1 -0
  198. package/dist/src/types.js +2 -0
  199. package/dist/src/utils/index.d.ts +26 -0
  200. package/dist/src/utils/index.d.ts.map +1 -0
  201. package/dist/src/utils/index.js +63 -0
  202. package/dist/test/consts.d.ts +10 -0
  203. package/dist/test/consts.d.ts.map +1 -0
  204. package/dist/test/consts.js +22 -0
  205. package/dist/test/utils/utils.d.ts +5 -0
  206. package/dist/test/utils/utils.d.ts.map +1 -0
  207. package/dist/test/utils/utils.js +20 -0
  208. package/package.json +1 -1
@@ -0,0 +1,497 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SMART_SESSIONS_FALLBACK_TARGET_SELECTOR_FLAG_PERMITTED_TO_CALL_SMARTSESSION = exports.SMART_SESSIONS_FALLBACK_TARGET_SELECTOR_FLAG = exports.SMART_SESSIONS_FALLBACK_TARGET_FLAG = exports.SMART_SESSIONS_VALIDATOR_ADDRESS = exports.SMART_SESSION_MODE_ENABLE = exports.SMART_SESSION_MODE_USE = void 0;
4
+ exports.getSmartSessionData = getSmartSessionData;
5
+ exports.getSmartSessionValidator = getSmartSessionValidator;
6
+ exports.getEnableSessionCall = getEnableSessionCall;
7
+ exports.encodeSmartSessionSignature = encodeSmartSessionSignature;
8
+ exports.getPermissionId = getPermissionId;
9
+ exports.isSessionEnabled = isSessionEnabled;
10
+ const solady_1 = require("solady");
11
+ const viem_1 = require("viem");
12
+ const smart_sessions_1 = require("../abi/smart-sessions");
13
+ const common_1 = require("../common");
14
+ const core_1 = require("./core");
15
+ const SMART_SESSIONS_VALIDATOR_ADDRESS = '0x00000000008bdaba73cd9815d79069c247eb4bda';
16
+ exports.SMART_SESSIONS_VALIDATOR_ADDRESS = SMART_SESSIONS_VALIDATOR_ADDRESS;
17
+ const SMART_SESSION_MODE_USE = '0x00';
18
+ exports.SMART_SESSION_MODE_USE = SMART_SESSION_MODE_USE;
19
+ const SMART_SESSION_MODE_ENABLE = '0x01';
20
+ exports.SMART_SESSION_MODE_ENABLE = SMART_SESSION_MODE_ENABLE;
21
+ const SMART_SESSION_MODE_UNSAFE_ENABLE = '0x02';
22
+ const SPENDING_LIMITS_POLICY_ADDRESS = '0x00000088D48cF102A8Cdb0137A9b173f957c6343';
23
+ const TIME_FRAME_POLICY_ADDRESS = '0x8177451511dE0577b911C254E9551D981C26dc72';
24
+ const SUDO_POLICY_ADDRESS = '0x0000003111cD8e92337C100F22B7A9dbf8DEE301';
25
+ const UNIVERSAL_ACTION_POLICY_ADDRESS = '0x0000006DDA6c463511C4e9B05CFc34C1247fCF1F';
26
+ const USAGE_LIMIT_POLICY_ADDRESS = '0x1F34eF8311345A3A4a4566aF321b313052F51493';
27
+ const VALUE_LIMIT_POLICY_ADDRESS = '0x730DA93267E7E513e932301B47F2ac7D062abC83';
28
+ const SMART_SESSIONS_FALLBACK_TARGET_FLAG = '0x0000000000000000000000000000000000000001';
29
+ exports.SMART_SESSIONS_FALLBACK_TARGET_FLAG = SMART_SESSIONS_FALLBACK_TARGET_FLAG;
30
+ const SMART_SESSIONS_FALLBACK_TARGET_SELECTOR_FLAG = '0x00000001';
31
+ exports.SMART_SESSIONS_FALLBACK_TARGET_SELECTOR_FLAG = SMART_SESSIONS_FALLBACK_TARGET_SELECTOR_FLAG;
32
+ const SMART_SESSIONS_FALLBACK_TARGET_SELECTOR_FLAG_PERMITTED_TO_CALL_SMARTSESSION = '0x00000002';
33
+ exports.SMART_SESSIONS_FALLBACK_TARGET_SELECTOR_FLAG_PERMITTED_TO_CALL_SMARTSESSION = SMART_SESSIONS_FALLBACK_TARGET_SELECTOR_FLAG_PERMITTED_TO_CALL_SMARTSESSION;
34
+ const ACTION_CONDITION_EQUAL = 0;
35
+ const ACTION_CONDITION_GREATER_THAN = 1;
36
+ const ACTION_CONDITION_LESS_THAN = 2;
37
+ const ACTION_CONDITION_GREATER_THAN_OR_EQUAL = 3;
38
+ const ACTION_CONDITION_LESS_THAN_OR_EQUAL = 4;
39
+ const ACTION_CONDITION_NOT_EQUAL = 5;
40
+ const ACTION_CONDITION_IN_RANGE = 6;
41
+ async function getEnableSessionCall(session) {
42
+ const sessionData = getSmartSessionData(session);
43
+ return {
44
+ to: SMART_SESSIONS_VALIDATOR_ADDRESS,
45
+ data: (0, viem_1.encodeFunctionData)({
46
+ abi: smart_sessions_1.enableSessionsAbi,
47
+ functionName: 'enableSessions',
48
+ args: [[sessionData]],
49
+ }),
50
+ };
51
+ }
52
+ function getSmartSessionData(session) {
53
+ const sessionValidator = (0, core_1.getValidator)(session.owners);
54
+ const userOpPolicies = (session.policies || [
55
+ {
56
+ type: 'sudo',
57
+ },
58
+ ]).map((policy) => {
59
+ return getPolicyData(policy);
60
+ });
61
+ return {
62
+ sessionValidator: sessionValidator.address,
63
+ sessionValidatorInitData: sessionValidator.initData,
64
+ salt: session.salt ?? viem_1.zeroHash,
65
+ userOpPolicies,
66
+ // Using the fallback action by default (any transaction will pass)
67
+ actions: (session.actions || [
68
+ {
69
+ target: SMART_SESSIONS_FALLBACK_TARGET_FLAG,
70
+ selector: SMART_SESSIONS_FALLBACK_TARGET_SELECTOR_FLAG,
71
+ },
72
+ ]).map((action) => {
73
+ const actionPolicies = (action.policies || [
74
+ {
75
+ type: 'sudo',
76
+ },
77
+ ]).map((policy) => getPolicyData(policy));
78
+ return {
79
+ actionTargetSelector: action.selector,
80
+ actionTarget: action.target,
81
+ actionPolicies,
82
+ };
83
+ }),
84
+ erc7739Policies: session.signing
85
+ ? {
86
+ allowedERC7739Content: session.signing.allowedContent.map((content) => ({
87
+ appDomainSeparator: content.domainSeparator,
88
+ contentName: content.contentName,
89
+ })),
90
+ erc1271Policies: (session.signing.policies || [
91
+ {
92
+ type: 'sudo',
93
+ },
94
+ ]).map((policy) => getPolicyData(policy)),
95
+ }
96
+ : {
97
+ allowedERC7739Content: [],
98
+ erc1271Policies: [],
99
+ },
100
+ permitERC4337Paymaster: true,
101
+ };
102
+ }
103
+ function getSmartSessionValidator(config) {
104
+ if (!config.experimental_sessions) {
105
+ return null;
106
+ }
107
+ const { enabled, module } = config.experimental_sessions;
108
+ if (!enabled) {
109
+ return null;
110
+ }
111
+ return {
112
+ address: module ?? SMART_SESSIONS_VALIDATOR_ADDRESS,
113
+ initData: '0x',
114
+ deInitData: '0x',
115
+ additionalContext: '0x',
116
+ type: common_1.MODULE_TYPE_ID_VALIDATOR,
117
+ };
118
+ }
119
+ function getPolicyData(policy) {
120
+ switch (policy.type) {
121
+ case 'sudo':
122
+ return {
123
+ policy: SUDO_POLICY_ADDRESS,
124
+ initData: '0x',
125
+ };
126
+ case 'universal-action': {
127
+ function getCondition(condition) {
128
+ switch (condition) {
129
+ case 'equal':
130
+ return ACTION_CONDITION_EQUAL;
131
+ case 'greaterThan':
132
+ return ACTION_CONDITION_GREATER_THAN;
133
+ case 'lessThan':
134
+ return ACTION_CONDITION_LESS_THAN;
135
+ case 'greaterThanOrEqual':
136
+ return ACTION_CONDITION_GREATER_THAN_OR_EQUAL;
137
+ case 'lessThanOrEqual':
138
+ return ACTION_CONDITION_LESS_THAN_OR_EQUAL;
139
+ case 'notEqual':
140
+ return ACTION_CONDITION_NOT_EQUAL;
141
+ case 'inRange':
142
+ return ACTION_CONDITION_IN_RANGE;
143
+ }
144
+ }
145
+ const MAX_RULES = 16;
146
+ const rules = createFixedArray(MAX_RULES, () => ({
147
+ condition: ACTION_CONDITION_EQUAL,
148
+ offset: 0n,
149
+ isLimited: false,
150
+ ref: viem_1.zeroHash,
151
+ usage: { limit: 0n, used: 0n },
152
+ }));
153
+ for (let i = 0; i < policy.rules.length; i++) {
154
+ const rule = policy.rules[i];
155
+ const ref = (0, viem_1.isHex)(rule.referenceValue)
156
+ ? (0, viem_1.padHex)(rule.referenceValue)
157
+ : (0, viem_1.toHex)(rule.referenceValue, { size: 32 });
158
+ rules[i] = {
159
+ condition: getCondition(rule.condition),
160
+ offset: rule.calldataOffset,
161
+ isLimited: rule.usageLimit !== undefined,
162
+ ref,
163
+ usage: {
164
+ limit: rule.usageLimit ? rule.usageLimit : 0n,
165
+ used: 0n,
166
+ },
167
+ };
168
+ }
169
+ return {
170
+ policy: UNIVERSAL_ACTION_POLICY_ADDRESS,
171
+ initData: (0, viem_1.encodeAbiParameters)([
172
+ {
173
+ components: [
174
+ {
175
+ name: 'valueLimitPerUse',
176
+ type: 'uint256',
177
+ },
178
+ {
179
+ components: [
180
+ {
181
+ name: 'length',
182
+ type: 'uint256',
183
+ },
184
+ {
185
+ components: [
186
+ {
187
+ name: 'condition',
188
+ type: 'uint8',
189
+ },
190
+ {
191
+ name: 'offset',
192
+ type: 'uint64',
193
+ },
194
+ {
195
+ name: 'isLimited',
196
+ type: 'bool',
197
+ },
198
+ {
199
+ name: 'ref',
200
+ type: 'bytes32',
201
+ },
202
+ {
203
+ components: [
204
+ {
205
+ name: 'limit',
206
+ type: 'uint256',
207
+ },
208
+ {
209
+ name: 'used',
210
+ type: 'uint256',
211
+ },
212
+ ],
213
+ name: 'usage',
214
+ type: 'tuple',
215
+ },
216
+ ],
217
+ name: 'rules',
218
+ type: 'tuple[16]',
219
+ },
220
+ ],
221
+ name: 'paramRules',
222
+ type: 'tuple',
223
+ },
224
+ ],
225
+ name: 'ActionConfig',
226
+ type: 'tuple',
227
+ },
228
+ ], [
229
+ {
230
+ valueLimitPerUse: policy.valueLimitPerUse ?? 0n,
231
+ paramRules: {
232
+ length: BigInt(policy.rules.length),
233
+ rules: rules,
234
+ },
235
+ },
236
+ ]),
237
+ };
238
+ }
239
+ case 'spending-limits': {
240
+ const tokens = policy.limits.map(({ token }) => token);
241
+ const limits = policy.limits.map(({ amount }) => amount);
242
+ return {
243
+ policy: SPENDING_LIMITS_POLICY_ADDRESS,
244
+ initData: (0, viem_1.encodeAbiParameters)([{ type: 'address[]' }, { type: 'uint256[]' }], [tokens, limits]),
245
+ };
246
+ }
247
+ case 'time-frame': {
248
+ return {
249
+ policy: TIME_FRAME_POLICY_ADDRESS,
250
+ initData: (0, viem_1.encodePacked)(['uint48', 'uint48'], [
251
+ Math.floor(policy.validUntil / 1000),
252
+ Math.floor(policy.validAfter / 1000),
253
+ ]),
254
+ };
255
+ }
256
+ case 'usage-limit': {
257
+ return {
258
+ policy: USAGE_LIMIT_POLICY_ADDRESS,
259
+ initData: (0, viem_1.encodePacked)(['uint128'], [policy.limit]),
260
+ };
261
+ }
262
+ case 'value-limit': {
263
+ return {
264
+ policy: VALUE_LIMIT_POLICY_ADDRESS,
265
+ initData: (0, viem_1.encodeAbiParameters)([{ type: 'uint256' }], [policy.limit]),
266
+ };
267
+ }
268
+ }
269
+ }
270
+ function createFixedArray(length, getValue) {
271
+ return Array.from({ length }, (_, i) => getValue(i));
272
+ }
273
+ async function isSessionEnabled(client, address, permissionId) {
274
+ return await client.readContract({
275
+ address: SMART_SESSIONS_VALIDATOR_ADDRESS,
276
+ abi: [
277
+ {
278
+ inputs: [
279
+ {
280
+ internalType: 'PermissionId',
281
+ name: 'permissionId',
282
+ type: 'bytes32',
283
+ },
284
+ {
285
+ internalType: 'address',
286
+ name: 'account',
287
+ type: 'address',
288
+ },
289
+ ],
290
+ name: 'isPermissionEnabled',
291
+ outputs: [
292
+ {
293
+ internalType: 'bool',
294
+ name: '',
295
+ type: 'bool',
296
+ },
297
+ ],
298
+ stateMutability: 'view',
299
+ type: 'function',
300
+ },
301
+ ],
302
+ functionName: 'isPermissionEnabled',
303
+ args: [permissionId, address],
304
+ });
305
+ }
306
+ function encodeSmartSessionSignature(mode, permissionId, signature, enableSessionData) {
307
+ switch (mode) {
308
+ case SMART_SESSION_MODE_USE:
309
+ return (0, viem_1.encodePacked)(['bytes1', 'bytes32', 'bytes'], [mode, permissionId, signature]);
310
+ case SMART_SESSION_MODE_ENABLE:
311
+ case SMART_SESSION_MODE_UNSAFE_ENABLE:
312
+ if (!enableSessionData) {
313
+ throw new Error('enableSession is required for ENABLE mode');
314
+ }
315
+ return (0, viem_1.encodePacked)(['bytes1', 'bytes'], [
316
+ mode,
317
+ solady_1.LibZip.flzCompress(encodeEnableSessionSignature(enableSessionData, signature)),
318
+ ]);
319
+ default:
320
+ throw new Error(`Unknown mode ${mode}`);
321
+ }
322
+ }
323
+ function encodeEnableSessionSignature(enableSessionData, signature) {
324
+ return (0, viem_1.encodeAbiParameters)([
325
+ {
326
+ components: [
327
+ {
328
+ type: 'uint8',
329
+ name: 'chainDigestIndex',
330
+ },
331
+ {
332
+ type: 'tuple[]',
333
+ components: [
334
+ {
335
+ internalType: 'uint64',
336
+ name: 'chainId',
337
+ type: 'uint64',
338
+ },
339
+ {
340
+ internalType: 'bytes32',
341
+ name: 'sessionDigest',
342
+ type: 'bytes32',
343
+ },
344
+ ],
345
+ name: 'hashesAndChainIds',
346
+ },
347
+ {
348
+ components: [
349
+ {
350
+ internalType: 'contract ISessionValidator',
351
+ name: 'sessionValidator',
352
+ type: 'address',
353
+ },
354
+ {
355
+ internalType: 'bytes',
356
+ name: 'sessionValidatorInitData',
357
+ type: 'bytes',
358
+ },
359
+ { internalType: 'bytes32', name: 'salt', type: 'bytes32' },
360
+ {
361
+ components: [
362
+ { internalType: 'address', name: 'policy', type: 'address' },
363
+ { internalType: 'bytes', name: 'initData', type: 'bytes' },
364
+ ],
365
+ internalType: 'struct PolicyData[]',
366
+ name: 'userOpPolicies',
367
+ type: 'tuple[]',
368
+ },
369
+ {
370
+ components: [
371
+ {
372
+ components: [
373
+ {
374
+ internalType: 'bytes32',
375
+ name: 'appDomainSeparator',
376
+ type: 'bytes32',
377
+ },
378
+ {
379
+ internalType: 'string[]',
380
+ name: 'contentName',
381
+ type: 'string[]',
382
+ },
383
+ ],
384
+ internalType: 'struct ERC7739Context[]',
385
+ name: 'allowedERC7739Content',
386
+ type: 'tuple[]',
387
+ },
388
+ {
389
+ components: [
390
+ {
391
+ internalType: 'address',
392
+ name: 'policy',
393
+ type: 'address',
394
+ },
395
+ {
396
+ internalType: 'bytes',
397
+ name: 'initData',
398
+ type: 'bytes',
399
+ },
400
+ ],
401
+ internalType: 'struct PolicyData[]',
402
+ name: 'erc1271Policies',
403
+ type: 'tuple[]',
404
+ },
405
+ ],
406
+ internalType: 'struct ERC7739Data',
407
+ name: 'erc7739Policies',
408
+ type: 'tuple',
409
+ },
410
+ {
411
+ components: [
412
+ {
413
+ internalType: 'bytes4',
414
+ name: 'actionTargetSelector',
415
+ type: 'bytes4',
416
+ },
417
+ {
418
+ internalType: 'address',
419
+ name: 'actionTarget',
420
+ type: 'address',
421
+ },
422
+ {
423
+ components: [
424
+ {
425
+ internalType: 'address',
426
+ name: 'policy',
427
+ type: 'address',
428
+ },
429
+ {
430
+ internalType: 'bytes',
431
+ name: 'initData',
432
+ type: 'bytes',
433
+ },
434
+ ],
435
+ internalType: 'struct PolicyData[]',
436
+ name: 'actionPolicies',
437
+ type: 'tuple[]',
438
+ },
439
+ ],
440
+ internalType: 'struct ActionData[]',
441
+ name: 'actions',
442
+ type: 'tuple[]',
443
+ },
444
+ {
445
+ internalType: 'bool',
446
+ name: 'permitERC4337Paymaster',
447
+ type: 'bool',
448
+ },
449
+ ],
450
+ internalType: 'struct Session',
451
+ name: 'sessionToEnable',
452
+ type: 'tuple',
453
+ },
454
+ {
455
+ type: 'bytes',
456
+ name: 'permissionEnableSig',
457
+ },
458
+ ],
459
+ internalType: 'struct EnableSession',
460
+ name: 'enableSession',
461
+ type: 'tuple',
462
+ },
463
+ {
464
+ type: 'bytes',
465
+ name: 'signature',
466
+ },
467
+ ], [
468
+ {
469
+ chainDigestIndex: enableSessionData.chainDigestIndex,
470
+ hashesAndChainIds: enableSessionData.hashesAndChainIds,
471
+ sessionToEnable: enableSessionData.sessionToEnable,
472
+ permissionEnableSig: enableSessionData.signature,
473
+ },
474
+ signature,
475
+ ]);
476
+ }
477
+ function getPermissionId(session) {
478
+ const sessionValidator = (0, core_1.getValidator)(session.owners);
479
+ return (0, viem_1.keccak256)((0, viem_1.encodeAbiParameters)([
480
+ {
481
+ type: 'address',
482
+ name: 'sessionValidator',
483
+ },
484
+ {
485
+ type: 'bytes',
486
+ name: 'sessionValidatorInitData',
487
+ },
488
+ {
489
+ type: 'bytes32',
490
+ name: 'salt',
491
+ },
492
+ ], [
493
+ sessionValidator.address,
494
+ sessionValidator.initData,
495
+ session.salt ?? viem_1.zeroHash,
496
+ ]));
497
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=smart-sessions.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"smart-sessions.test.d.ts","sourceRoot":"","sources":["../../../../modules/validators/smart-sessions.test.ts"],"names":[],"mappings":""}