@metamask/smart-accounts-kit 0.1.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/CHANGELOG.md +20 -1
  2. package/dist/actions/index.cjs +5 -5
  3. package/dist/actions/index.d.cts +1 -1
  4. package/dist/actions/index.d.ts +1 -1
  5. package/dist/actions/index.mjs +4 -4
  6. package/dist/{chunk-RB4SOJM3.mjs → chunk-2HNEALPY.mjs} +44 -22
  7. package/dist/chunk-2HNEALPY.mjs.map +1 -0
  8. package/dist/{chunk-MVKT5CLQ.mjs → chunk-3JBYBEYP.mjs} +2 -2
  9. package/dist/{chunk-D4ILRL6Z.cjs → chunk-4QBJFYZ7.cjs} +12 -12
  10. package/dist/{chunk-D4ILRL6Z.cjs.map → chunk-4QBJFYZ7.cjs.map} +1 -1
  11. package/dist/{chunk-HD4O6IVC.cjs → chunk-5ZBCTLQS.cjs} +8 -8
  12. package/dist/{chunk-HD4O6IVC.cjs.map → chunk-5ZBCTLQS.cjs.map} +1 -1
  13. package/dist/{chunk-TEI2NRPU.mjs → chunk-72UQFUL5.mjs} +2 -2
  14. package/dist/{chunk-UUDQWENY.mjs → chunk-BJGZGTRU.mjs} +46 -55
  15. package/dist/{chunk-HLCOMYYU.cjs.map → chunk-BJGZGTRU.mjs.map} +1 -1
  16. package/dist/{chunk-BFDBNFIP.cjs → chunk-BWR5ZK6Z.cjs} +3 -3
  17. package/dist/{chunk-BFDBNFIP.cjs.map → chunk-BWR5ZK6Z.cjs.map} +1 -1
  18. package/dist/{chunk-2EIX7ZYT.cjs → chunk-DLR4BZKP.cjs} +102 -102
  19. package/dist/{chunk-2EIX7ZYT.cjs.map → chunk-DLR4BZKP.cjs.map} +1 -1
  20. package/dist/{chunk-KUEXI4ME.mjs → chunk-F5U55BIP.mjs} +2 -2
  21. package/dist/{chunk-HLCOMYYU.cjs → chunk-HJETDDBN.cjs} +7 -16
  22. package/dist/chunk-HJETDDBN.cjs.map +1 -0
  23. package/dist/{chunk-6RN5RBOR.mjs → chunk-KTAXE6PZ.mjs} +4 -4
  24. package/dist/{chunk-662KDAAG.cjs → chunk-QHDMZSGQ.cjs} +11 -11
  25. package/dist/{chunk-662KDAAG.cjs.map → chunk-QHDMZSGQ.cjs.map} +1 -1
  26. package/dist/{chunk-WA2O2K3K.cjs → chunk-QPCM4XRT.cjs} +58 -36
  27. package/dist/chunk-QPCM4XRT.cjs.map +1 -0
  28. package/dist/{chunk-7MRTROLV.mjs → chunk-Y5MOTV4T.mjs} +2 -2
  29. package/dist/contracts/index.cjs +5 -5
  30. package/dist/contracts/index.d.cts +2 -2
  31. package/dist/contracts/index.d.ts +2 -2
  32. package/dist/contracts/index.mjs +4 -4
  33. package/dist/{delegation-d52Owevd.d.cts → delegation-C7M1fy5Q.d.cts} +2 -2
  34. package/dist/{delegation-7PtFix8Y.d.ts → delegation-CCMAKs7W.d.ts} +2 -2
  35. package/dist/experimental/index.cjs +3 -3
  36. package/dist/experimental/index.mjs +1 -1
  37. package/dist/{index-0-B0YlEP.d.cts → index-BGXTbonF.d.cts} +1 -1
  38. package/dist/{index-CLkk7zr4.d.cts → index-DYq7aOEN.d.cts} +7 -1
  39. package/dist/{index-D1WbhKCc.d.ts → index-DeHcI5-n.d.ts} +1 -1
  40. package/dist/{index-18Alar1P.d.ts → index-Do0GpCXe.d.ts} +7 -1
  41. package/dist/index.cjs +19 -19
  42. package/dist/index.d.cts +4 -4
  43. package/dist/index.d.ts +4 -4
  44. package/dist/index.mjs +7 -7
  45. package/dist/utils/index.cjs +5 -5
  46. package/dist/utils/index.d.cts +1 -1
  47. package/dist/utils/index.d.ts +1 -1
  48. package/dist/utils/index.mjs +4 -4
  49. package/package.json +20 -4
  50. package/dist/chunk-RB4SOJM3.mjs.map +0 -1
  51. package/dist/chunk-UUDQWENY.mjs.map +0 -1
  52. package/dist/chunk-WA2O2K3K.cjs.map +0 -1
  53. /package/dist/{chunk-MVKT5CLQ.mjs.map → chunk-3JBYBEYP.mjs.map} +0 -0
  54. /package/dist/{chunk-TEI2NRPU.mjs.map → chunk-72UQFUL5.mjs.map} +0 -0
  55. /package/dist/{chunk-KUEXI4ME.mjs.map → chunk-F5U55BIP.mjs.map} +0 -0
  56. /package/dist/{chunk-6RN5RBOR.mjs.map → chunk-KTAXE6PZ.mjs.map} +0 -0
  57. /package/dist/{chunk-7MRTROLV.mjs.map → chunk-Y5MOTV4T.mjs.map} +0 -0
package/CHANGELOG.md CHANGED
@@ -7,11 +7,30 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.3.0]
11
+
12
+ ### Fixed
13
+
14
+ - **Breaking** `function-call` scope no longer allows native token value, unless explicitly configured ([#118](https://github.com/MetaMask/smart-accounts-kit/pull/118))
15
+ - Add `typesVersions` to `package.json` so that subpath exports can be resolved for packages using `moduleResolution: node` ([#112](https://github.com/MetaMask/smart-accounts-kit/pull/112))
16
+
17
+ ## [0.2.0]
18
+
19
+ ### Added
20
+
21
+ - New permission type `erc20-token-revocation` to ERC-7715 actions ([#110](https://github.com/MetaMask/smart-accounts-kit/pull/110))
22
+
23
+ ### Fixed
24
+
25
+ - Throw meaningful errors in validation of ERC-7715 request parameters ([#107](https://github.com/MetaMask/smart-accounts-kit/pull/107), [#103](https://github.com/MetaMask/smart-accounts-kit/pull/103))
26
+
10
27
  ## [0.1.0]
11
28
 
12
29
  ### Changed
13
30
 
14
31
  - Promote readable permissions actions (`requestExecutionPermissions`, `sendTransactionWithDelegation`, and `sendUserOperationWithDelegation`) from experimental ([#91](https://github.com/MetaMask/smart-accounts-kit/pull/91))
15
32
 
16
- [Unreleased]: https://github.com/metamask/smart-accounts-kit/compare/@metamask/smart-accounts-kit@0.1.0...HEAD
33
+ [Unreleased]: https://github.com/metamask/smart-accounts-kit/compare/@metamask/smart-accounts-kit@0.3.0...HEAD
34
+ [0.3.0]: https://github.com/metamask/smart-accounts-kit/compare/@metamask/smart-accounts-kit@0.2.0...@metamask/smart-accounts-kit@0.3.0
35
+ [0.2.0]: https://github.com/metamask/smart-accounts-kit/compare/@metamask/smart-accounts-kit@0.1.0...@metamask/smart-accounts-kit@0.2.0
17
36
  [0.1.0]: https://github.com/metamask/smart-accounts-kit/releases/tag/@metamask/smart-accounts-kit@0.1.0
@@ -14,11 +14,11 @@
14
14
 
15
15
 
16
16
 
17
- var _chunkWA2O2K3Kcjs = require('../chunk-WA2O2K3K.cjs');
18
- require('../chunk-D4ILRL6Z.cjs');
19
- require('../chunk-BFDBNFIP.cjs');
17
+ var _chunkQPCM4XRTcjs = require('../chunk-QPCM4XRT.cjs');
18
+ require('../chunk-4QBJFYZ7.cjs');
19
+ require('../chunk-BWR5ZK6Z.cjs');
20
20
  require('../chunk-T6PSFUOZ.cjs');
21
- require('../chunk-HLCOMYYU.cjs');
21
+ require('../chunk-HJETDDBN.cjs');
22
22
 
23
23
 
24
24
 
@@ -35,5 +35,5 @@ require('../chunk-HLCOMYYU.cjs');
35
35
 
36
36
 
37
37
 
38
- exports.caveatEnforcerActions = _chunkWA2O2K3Kcjs.caveatEnforcerActions; exports.erc7710BundlerActions = _chunkWA2O2K3Kcjs.erc7710BundlerActions; exports.erc7710WalletActions = _chunkWA2O2K3Kcjs.erc7710WalletActions; exports.erc7715ProviderActions = _chunkWA2O2K3Kcjs.erc7715ProviderActions; exports.getErc20PeriodTransferEnforcerAvailableAmount = _chunkWA2O2K3Kcjs.getErc20PeriodTransferEnforcerAvailableAmount; exports.getErc20StreamingEnforcerAvailableAmount = _chunkWA2O2K3Kcjs.getErc20StreamingEnforcerAvailableAmount; exports.getMultiTokenPeriodEnforcerAvailableAmount = _chunkWA2O2K3Kcjs.getMultiTokenPeriodEnforcerAvailableAmount; exports.getNativeTokenPeriodTransferEnforcerAvailableAmount = _chunkWA2O2K3Kcjs.getNativeTokenPeriodTransferEnforcerAvailableAmount; exports.getNativeTokenStreamingEnforcerAvailableAmount = _chunkWA2O2K3Kcjs.getNativeTokenStreamingEnforcerAvailableAmount; exports.isValid7702Implementation = _chunkWA2O2K3Kcjs.isValid7702Implementation; exports.requestExecutionPermissions = _chunkWA2O2K3Kcjs.erc7715RequestExecutionPermissionsAction; exports.signDelegation = _chunkWA2O2K3Kcjs.signDelegation; exports.signDelegationActions = _chunkWA2O2K3Kcjs.signDelegationActions; exports.signUserOperation = _chunkWA2O2K3Kcjs.signUserOperation; exports.signUserOperationActions = _chunkWA2O2K3Kcjs.signUserOperationActions;
38
+ exports.caveatEnforcerActions = _chunkQPCM4XRTcjs.caveatEnforcerActions; exports.erc7710BundlerActions = _chunkQPCM4XRTcjs.erc7710BundlerActions; exports.erc7710WalletActions = _chunkQPCM4XRTcjs.erc7710WalletActions; exports.erc7715ProviderActions = _chunkQPCM4XRTcjs.erc7715ProviderActions; exports.getErc20PeriodTransferEnforcerAvailableAmount = _chunkQPCM4XRTcjs.getErc20PeriodTransferEnforcerAvailableAmount; exports.getErc20StreamingEnforcerAvailableAmount = _chunkQPCM4XRTcjs.getErc20StreamingEnforcerAvailableAmount; exports.getMultiTokenPeriodEnforcerAvailableAmount = _chunkQPCM4XRTcjs.getMultiTokenPeriodEnforcerAvailableAmount; exports.getNativeTokenPeriodTransferEnforcerAvailableAmount = _chunkQPCM4XRTcjs.getNativeTokenPeriodTransferEnforcerAvailableAmount; exports.getNativeTokenStreamingEnforcerAvailableAmount = _chunkQPCM4XRTcjs.getNativeTokenStreamingEnforcerAvailableAmount; exports.isValid7702Implementation = _chunkQPCM4XRTcjs.isValid7702Implementation; exports.requestExecutionPermissions = _chunkQPCM4XRTcjs.erc7715RequestExecutionPermissionsAction; exports.signDelegation = _chunkQPCM4XRTcjs.signDelegation; exports.signDelegationActions = _chunkQPCM4XRTcjs.signDelegationActions; exports.signUserOperation = _chunkQPCM4XRTcjs.signUserOperation; exports.signUserOperationActions = _chunkQPCM4XRTcjs.signUserOperationActions;
39
39
  //# sourceMappingURL=index.cjs.map
@@ -1,4 +1,4 @@
1
- export { C as CaveatEnforcerParams, D as DelegatedCall, M as MetaMaskExtensionClient, u as MetaMaskExtensionSchema, P as PeriodTransferResult, R as RequestExecutionPermissionsParameters, v as RequestExecutionPermissionsReturnType, m as SignDelegationParameters, n as SignDelegationReturnType, q as SignUserOperationParameters, r as SignUserOperationReturnType, S as StreamingResult, c as caveatEnforcerActions, b as erc7710BundlerActions, a as erc7710WalletActions, e as erc7715ProviderActions, g as getErc20PeriodTransferEnforcerAvailableAmount, d as getErc20StreamingEnforcerAvailableAmount, f as getMultiTokenPeriodEnforcerAvailableAmount, h as getNativeTokenPeriodTransferEnforcerAvailableAmount, j as getNativeTokenStreamingEnforcerAvailableAmount, k as isValid7702Implementation, t as requestExecutionPermissions, s as signDelegation, l as signDelegationActions, o as signUserOperation, p as signUserOperationActions } from '../index-CLkk7zr4.cjs';
1
+ export { C as CaveatEnforcerParams, D as DelegatedCall, M as MetaMaskExtensionClient, u as MetaMaskExtensionSchema, P as PeriodTransferResult, R as RequestExecutionPermissionsParameters, v as RequestExecutionPermissionsReturnType, m as SignDelegationParameters, n as SignDelegationReturnType, q as SignUserOperationParameters, r as SignUserOperationReturnType, S as StreamingResult, c as caveatEnforcerActions, b as erc7710BundlerActions, a as erc7710WalletActions, e as erc7715ProviderActions, g as getErc20PeriodTransferEnforcerAvailableAmount, d as getErc20StreamingEnforcerAvailableAmount, f as getMultiTokenPeriodEnforcerAvailableAmount, h as getNativeTokenPeriodTransferEnforcerAvailableAmount, j as getNativeTokenStreamingEnforcerAvailableAmount, k as isValid7702Implementation, t as requestExecutionPermissions, s as signDelegation, l as signDelegationActions, o as signUserOperation, p as signUserOperationActions } from '../index-DYq7aOEN.cjs';
2
2
  import 'viem';
3
3
  import '@metamask/7715-permission-types';
4
4
  import 'viem/account-abstraction';
@@ -1,4 +1,4 @@
1
- export { C as CaveatEnforcerParams, D as DelegatedCall, M as MetaMaskExtensionClient, u as MetaMaskExtensionSchema, P as PeriodTransferResult, R as RequestExecutionPermissionsParameters, v as RequestExecutionPermissionsReturnType, m as SignDelegationParameters, n as SignDelegationReturnType, q as SignUserOperationParameters, r as SignUserOperationReturnType, S as StreamingResult, c as caveatEnforcerActions, b as erc7710BundlerActions, a as erc7710WalletActions, e as erc7715ProviderActions, g as getErc20PeriodTransferEnforcerAvailableAmount, d as getErc20StreamingEnforcerAvailableAmount, f as getMultiTokenPeriodEnforcerAvailableAmount, h as getNativeTokenPeriodTransferEnforcerAvailableAmount, j as getNativeTokenStreamingEnforcerAvailableAmount, k as isValid7702Implementation, t as requestExecutionPermissions, s as signDelegation, l as signDelegationActions, o as signUserOperation, p as signUserOperationActions } from '../index-18Alar1P.js';
1
+ export { C as CaveatEnforcerParams, D as DelegatedCall, M as MetaMaskExtensionClient, u as MetaMaskExtensionSchema, P as PeriodTransferResult, R as RequestExecutionPermissionsParameters, v as RequestExecutionPermissionsReturnType, m as SignDelegationParameters, n as SignDelegationReturnType, q as SignUserOperationParameters, r as SignUserOperationReturnType, S as StreamingResult, c as caveatEnforcerActions, b as erc7710BundlerActions, a as erc7710WalletActions, e as erc7715ProviderActions, g as getErc20PeriodTransferEnforcerAvailableAmount, d as getErc20StreamingEnforcerAvailableAmount, f as getMultiTokenPeriodEnforcerAvailableAmount, h as getNativeTokenPeriodTransferEnforcerAvailableAmount, j as getNativeTokenStreamingEnforcerAvailableAmount, k as isValid7702Implementation, t as requestExecutionPermissions, s as signDelegation, l as signDelegationActions, o as signUserOperation, p as signUserOperationActions } from '../index-Do0GpCXe.js';
2
2
  import 'viem';
3
3
  import '@metamask/7715-permission-types';
4
4
  import 'viem/account-abstraction';
@@ -14,11 +14,11 @@ import {
14
14
  signDelegationActions,
15
15
  signUserOperation,
16
16
  signUserOperationActions
17
- } from "../chunk-RB4SOJM3.mjs";
18
- import "../chunk-KUEXI4ME.mjs";
19
- import "../chunk-MVKT5CLQ.mjs";
17
+ } from "../chunk-2HNEALPY.mjs";
18
+ import "../chunk-F5U55BIP.mjs";
19
+ import "../chunk-3JBYBEYP.mjs";
20
20
  import "../chunk-CPLIK3VF.mjs";
21
- import "../chunk-UUDQWENY.mjs";
21
+ import "../chunk-BJGZGTRU.mjs";
22
22
  export {
23
23
  caveatEnforcerActions,
24
24
  erc7710BundlerActions,
@@ -4,11 +4,11 @@ import {
4
4
  read_exports3,
5
5
  read_exports4,
6
6
  read_exports5
7
- } from "./chunk-KUEXI4ME.mjs";
7
+ } from "./chunk-F5U55BIP.mjs";
8
8
  import {
9
9
  getSmartAccountsEnvironment,
10
10
  prepareSignUserOperationTypedData
11
- } from "./chunk-MVKT5CLQ.mjs";
11
+ } from "./chunk-3JBYBEYP.mjs";
12
12
  import {
13
13
  createExecution,
14
14
  encodeExecutionCalldatas
@@ -17,7 +17,7 @@ import {
17
17
  __export,
18
18
  getDelegationHashOffchain,
19
19
  prepareSignDelegationTypedData
20
- } from "./chunk-UUDQWENY.mjs";
20
+ } from "./chunk-BJGZGTRU.mjs";
21
21
 
22
22
  // src/actions/index.ts
23
23
  var actions_exports = {};
@@ -182,16 +182,20 @@ function formatPermissionsRequest(parameters) {
182
182
  function isDefined(value) {
183
183
  return value !== void 0 && value !== null;
184
184
  }
185
- function assertIsDefined(value, message) {
185
+ function assertIsDefined(value, parameterName) {
186
186
  if (!isDefined(value)) {
187
- throw new Error(message ?? "Invalid parameters: value is required");
187
+ throw new Error(
188
+ `Invalid parameters: ${parameterName ?? "value"} is required`
189
+ );
188
190
  }
189
191
  }
190
- function toHexOrThrow(value, message) {
191
- assertIsDefined(value, message);
192
+ function toHexOrThrow(value, parameterName) {
193
+ assertIsDefined(value, parameterName);
192
194
  if (typeof value === "string") {
193
195
  if (!isHex(value)) {
194
- throw new Error("Invalid parameters: invalid hex value");
196
+ throw new Error(
197
+ `Invalid parameters: ${parameterName ?? "value"} is not a valid hex value`
198
+ );
195
199
  }
196
200
  return value;
197
201
  }
@@ -219,6 +223,11 @@ function getPermissionFormatter(permissionType) {
219
223
  permission,
220
224
  isAdjustmentAllowed
221
225
  });
226
+ case "erc20-token-revocation":
227
+ return ({ permission, isAdjustmentAllowed }) => formatErc20TokenRevocationPermission({
228
+ permission,
229
+ isAdjustmentAllowed
230
+ });
222
231
  default:
223
232
  throw new Error(`Unsupported permission type: ${permissionType}`);
224
233
  }
@@ -238,10 +247,10 @@ function formatNativeTokenStreamPermission({
238
247
  } = permission;
239
248
  const optionalFields = {
240
249
  ...isDefined(initialAmount) && {
241
- initialAmount: toHexOrThrow(initialAmount)
250
+ initialAmount: toHexOrThrow(initialAmount, "initialAmount")
242
251
  },
243
252
  ...isDefined(maxAmount) && {
244
- maxAmount: toHexOrThrow(maxAmount)
253
+ maxAmount: toHexOrThrow(maxAmount, "maxAmount")
245
254
  },
246
255
  ...isDefined(startTime) && {
247
256
  startTime: Number(startTime)
@@ -251,10 +260,7 @@ function formatNativeTokenStreamPermission({
251
260
  return {
252
261
  type: "native-token-stream",
253
262
  data: {
254
- amountPerSecond: toHexOrThrow(
255
- amountPerSecond,
256
- "Invalid parameters: amountPerSecond is required"
257
- ),
263
+ amountPerSecond: toHexOrThrow(amountPerSecond, "amountPerSecond"),
258
264
  ...optionalFields
259
265
  },
260
266
  isAdjustmentAllowed
@@ -276,10 +282,10 @@ function formatErc20TokenStreamPermission({
276
282
  } = permission;
277
283
  const optionalFields = {
278
284
  ...isDefined(initialAmount) && {
279
- initialAmount: toHexOrThrow(initialAmount)
285
+ initialAmount: toHexOrThrow(initialAmount, "initialAmount")
280
286
  },
281
287
  ...isDefined(maxAmount) && {
282
- maxAmount: toHexOrThrow(maxAmount)
288
+ maxAmount: toHexOrThrow(maxAmount, "maxAmount")
283
289
  },
284
290
  ...isDefined(startTime) && {
285
291
  startTime: Number(startTime)
@@ -289,8 +295,8 @@ function formatErc20TokenStreamPermission({
289
295
  return {
290
296
  type: "erc20-token-stream",
291
297
  data: {
292
- tokenAddress: toHexOrThrow(tokenAddress),
293
- amountPerSecond: toHexOrThrow(amountPerSecond),
298
+ tokenAddress: toHexOrThrow(tokenAddress, "tokenAddress"),
299
+ amountPerSecond: toHexOrThrow(amountPerSecond, "amountPerSecond"),
294
300
  ...optionalFields
295
301
  },
296
302
  isAdjustmentAllowed
@@ -312,7 +318,7 @@ function formatNativeTokenPeriodicPermission({
312
318
  return {
313
319
  type: "native-token-periodic",
314
320
  data: {
315
- periodAmount: toHexOrThrow(periodAmount),
321
+ periodAmount: toHexOrThrow(periodAmount, "periodAmount"),
316
322
  periodDuration: Number(periodDuration),
317
323
  ...optionalFields
318
324
  },
@@ -341,14 +347,30 @@ function formatErc20TokenPeriodicPermission({
341
347
  return {
342
348
  type: "erc20-token-periodic",
343
349
  data: {
344
- tokenAddress: toHexOrThrow(tokenAddress),
345
- periodAmount: toHexOrThrow(periodAmount),
350
+ tokenAddress: toHexOrThrow(tokenAddress, "tokenAddress"),
351
+ periodAmount: toHexOrThrow(periodAmount, "periodAmount"),
346
352
  periodDuration: Number(periodDuration),
347
353
  ...optionalFields
348
354
  },
349
355
  isAdjustmentAllowed
350
356
  };
351
357
  }
358
+ function formatErc20TokenRevocationPermission({
359
+ permission,
360
+ isAdjustmentAllowed
361
+ }) {
362
+ const {
363
+ data: { justification }
364
+ } = permission;
365
+ const data = {
366
+ ...justification ? { justification } : {}
367
+ };
368
+ return {
369
+ type: "erc20-token-revocation",
370
+ data,
371
+ isAdjustmentAllowed
372
+ };
373
+ }
352
374
 
353
375
  // src/actions/getCaveatAvailableAmount.ts
354
376
  function findMatchingCaveat({
@@ -726,4 +748,4 @@ export {
726
748
  erc7710BundlerActions,
727
749
  actions_exports
728
750
  };
729
- //# sourceMappingURL=chunk-RB4SOJM3.mjs.map
751
+ //# sourceMappingURL=chunk-2HNEALPY.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/actions/index.ts","../src/actions/erc7710RedeemDelegationAction.ts","../src/actions/erc7715RequestExecutionPermissionsAction.ts","../src/actions/getCaveatAvailableAmount.ts","../src/actions/isValid7702Implementation.ts","../src/actions/signDelegation.ts","../src/actions/signUserOperation.ts"],"sourcesContent":["import type { Client, WalletClient } from 'viem';\nimport type { BundlerClient } from 'viem/account-abstraction';\n\nimport type {\n SendTransactionWithDelegationParameters,\n SendUserOperationWithDelegationParameters,\n} from './erc7710RedeemDelegationAction';\nimport {\n sendTransactionWithDelegationAction,\n sendUserOperationWithDelegationAction,\n} from './erc7710RedeemDelegationAction';\nimport { erc7715RequestExecutionPermissionsAction } from './erc7715RequestExecutionPermissionsAction';\nimport type {\n MetaMaskExtensionClient,\n RequestExecutionPermissionsParameters,\n} from './erc7715RequestExecutionPermissionsAction';\n\nexport {\n // Individual action functions\n getErc20PeriodTransferEnforcerAvailableAmount,\n getErc20StreamingEnforcerAvailableAmount,\n getMultiTokenPeriodEnforcerAvailableAmount,\n getNativeTokenPeriodTransferEnforcerAvailableAmount,\n getNativeTokenStreamingEnforcerAvailableAmount,\n // Action builder\n caveatEnforcerActions,\n // Parameter types\n type CaveatEnforcerParams,\n // Result types\n type PeriodTransferResult,\n type StreamingResult,\n} from './getCaveatAvailableAmount';\n\nexport { isValid7702Implementation } from './isValid7702Implementation';\n\n// Signing actions\nexport {\n signDelegation,\n signDelegationActions,\n type SignDelegationParameters,\n type SignDelegationReturnType,\n} from './signDelegation';\n\nexport {\n signUserOperation,\n signUserOperationActions,\n type SignUserOperationParameters,\n type SignUserOperationReturnType,\n} from './signUserOperation';\n\nexport {\n erc7715RequestExecutionPermissionsAction as requestExecutionPermissions,\n type MetaMaskExtensionClient,\n type MetaMaskExtensionSchema,\n type RequestExecutionPermissionsParameters,\n type RequestExecutionPermissionsReturnType,\n} from './erc7715RequestExecutionPermissionsAction';\n\nexport type { DelegatedCall } from './erc7710RedeemDelegationAction';\n\nexport const erc7715ProviderActions = () => (client: Client) => ({\n requestExecutionPermissions: async (\n parameters: RequestExecutionPermissionsParameters,\n ) => {\n return erc7715RequestExecutionPermissionsAction(\n client as MetaMaskExtensionClient,\n parameters,\n );\n },\n});\n\nexport const erc7710WalletActions = () => (client: WalletClient) => ({\n sendTransactionWithDelegation: async (\n args: SendTransactionWithDelegationParameters,\n ) => sendTransactionWithDelegationAction(client, args),\n});\n\nexport const erc7710BundlerActions = () => (client: Client) => ({\n sendUserOperationWithDelegation: async (\n args: SendUserOperationWithDelegationParameters,\n ) => sendUserOperationWithDelegationAction(client as BundlerClient, args),\n});\n","import { DelegationManager } from '@metamask/delegation-abis';\nimport type {\n Account,\n Chain,\n Hex,\n OneOf,\n PublicClient,\n SendTransactionParameters,\n SendTransactionRequest,\n Transport,\n WalletClient,\n} from 'viem';\nimport { concat, encodeFunctionData, isAddressEqual } from 'viem';\nimport type {\n BundlerClient,\n SendUserOperationParameters,\n SmartAccount,\n} from 'viem/account-abstraction';\n\nimport {\n createExecution,\n encodeExecutionCalldatas,\n ExecutionMode,\n} from '../executions';\nimport { getSmartAccountsEnvironment } from '../smartAccountsEnvironment';\nimport type { Call } from '../types';\n\nexport type DelegatedCall = Call &\n OneOf<{ permissionsContext: Hex; delegationManager: Hex } | object>;\n\nexport type SendTransactionWithDelegationParameters<\n TChain extends Chain | undefined = Chain | undefined,\n TAccount extends Account | undefined = Account | undefined,\n TChainOverride extends Chain | undefined = Chain | undefined,\n TRequest extends SendTransactionRequest<\n TChain,\n TChainOverride\n > = SendTransactionRequest<TChain, TChainOverride>,\n> = SendTransactionParameters<TChain, TAccount, TChainOverride, TRequest> & {\n permissionsContext: Hex;\n delegationManager: Hex;\n};\n\n/**\n * Sends a transaction using delegation to execute operations on behalf of another account.\n *\n * @param client - The wallet client to use for sending the transaction.\n * @param args - Transaction parameters with delegation details.\n * @returns Transaction hash of the executed transaction.\n */\nexport async function sendTransactionWithDelegationAction<\n TChain extends Chain | undefined,\n TAccount extends Account | undefined,\n>(\n client: WalletClient<Transport, TChain, TAccount>,\n args: SendTransactionWithDelegationParameters<TChain, TAccount>,\n) {\n if (!args.to) {\n throw new Error(\n '`to` is required. `sendTransactionWithDelegation` cannot be used to deploy contracts.',\n );\n }\n\n const executions = [\n createExecution({\n target: args.to,\n value: args.value,\n callData: args.data,\n }),\n ];\n\n const calldata = encodeFunctionData({\n abi: DelegationManager.abi,\n functionName: 'redeemDelegations',\n args: [\n [args.permissionsContext],\n [ExecutionMode.SingleDefault],\n encodeExecutionCalldatas([executions]),\n ],\n });\n\n const {\n value: _value,\n permissionsContext: _permissionsContext,\n delegationManager: _delegationManager,\n ...rest\n } = args;\n\n const hash = await client.sendTransaction({\n ...rest,\n to: args.delegationManager,\n data: calldata,\n } as unknown as SendTransactionParameters);\n\n return hash;\n}\n\nexport type SendUserOperationWithDelegationParameters<\n TAccount extends SmartAccount | undefined = SmartAccount | undefined,\n TAccountOverride extends SmartAccount | undefined = SmartAccount | undefined,\n> = SendUserOperationParameters<TAccount, TAccountOverride, DelegatedCall[]> & {\n accountMetadata?: { factory: Hex; factoryData: Hex }[];\n calls: DelegatedCall[];\n publicClient: PublicClient<Transport, Chain>;\n};\n\n/**\n * Broadcasts a User Operation with delegation to the Bundler.\n *\n * @param client - Client to use for sending the user operation.\n * @param parameters - Parameters for the user operation with delegation.\n * @returns The User Operation hash of the broadcasted operation.\n * @example\n * import { createBundlerClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n *\n * const bundlerClient = createBundlerClient({\n * chain: mainnet,\n * transport: http(),\n * })\n *\n * const userOpHash = await sendUserOperationWithDelegationAction(bundlerClient, {\n * account: bobSmartAccount,\n * calls: [\n * {\n * to: aliceCounterContractAddress,\n * data: encodeFunctionData({\n * abi: CounterMetadata.abi,\n * functionName: 'increment',\n * }),\n * value: 0n,\n * permissionsContext: '0x...',\n * delegationManager: '0x...',\n * },\n * ],\n * accountMetadata: [{ factory: '0x...', factoryData: '0x...' }], // Optional: for deploying accounts\n * })\n */\nexport async function sendUserOperationWithDelegationAction<\n TAccount extends SmartAccount | undefined,\n TAccountOverride extends SmartAccount | undefined = undefined,\n>(\n client: BundlerClient<Transport, Chain | undefined, TAccount>,\n parameters: SendUserOperationWithDelegationParameters<\n TAccount,\n TAccountOverride\n >,\n) {\n if (parameters.accountMetadata) {\n const { publicClient } = parameters;\n\n const includedAccountKeys: Record<Hex, boolean> = {};\n\n const chainId = publicClient.chain?.id;\n\n if (!chainId) {\n throw new Error('Chain ID is not set');\n }\n\n const { SimpleFactory } = getSmartAccountsEnvironment(chainId);\n\n const uniqueAccountMetadatas = parameters.accountMetadata.filter(\n (accountMetadata) => {\n if (!isAddressEqual(accountMetadata.factory, SimpleFactory)) {\n throw new Error(\n `Invalid accountMetadata: ${accountMetadata.factory} is not allowed.`,\n );\n }\n\n // ensure that factory calls are not duplicated\n const accountKey = concat([\n accountMetadata.factory,\n accountMetadata.factoryData,\n ]);\n const isDuplicate = includedAccountKeys[accountKey];\n\n includedAccountKeys[accountKey] = true;\n return !isDuplicate;\n },\n );\n\n const factoryCalls = (\n await Promise.all(\n uniqueAccountMetadatas.map(async ({ factory, factoryData }) => {\n const isDeployed = await publicClient\n .call({\n to: factory,\n data: factoryData,\n })\n .then(() => false)\n .catch(() => true);\n\n if (isDeployed) {\n return undefined;\n }\n return {\n to: factory,\n value: 0n,\n data: factoryData,\n };\n }),\n )\n ).filter((call: Call | undefined) => call !== undefined) as Call[];\n\n parameters.calls = [\n ...(factoryCalls as DelegatedCall[]),\n ...parameters.calls,\n ];\n }\n\n return client.sendUserOperation(\n parameters as unknown as SendUserOperationParameters,\n );\n}\n","import type {\n AccountSigner,\n Erc20TokenPeriodicPermission,\n Erc20TokenStreamPermission,\n Erc20TokenRevocationPermission,\n NativeTokenPeriodicPermission,\n NativeTokenStreamPermission,\n PermissionRequest,\n PermissionResponse,\n PermissionTypes,\n Rule,\n} from '@metamask/7715-permission-types';\nimport { isHex, toHex } from 'viem';\nimport type {\n Client,\n Account,\n RpcSchema,\n Transport,\n Chain,\n Address,\n} from 'viem';\n\n/**\n * RPC schema for MetaMask related methods.\n *\n * Extends the base RPC schema with methods specific to interacting with EIP-7715:\n * - `wallet_invokeSnap`: Invokes a method on a specific Snap.\n */\nexport type MetaMaskExtensionSchema = RpcSchema &\n [\n {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n Method: 'wallet_requestExecutionPermissions';\n // eslint-disable-next-line @typescript-eslint/naming-convention\n Params: PermissionRequest<AccountSigner, PermissionTypes>[];\n // eslint-disable-next-line @typescript-eslint/naming-convention\n ReturnType: PermissionResponse<AccountSigner, PermissionTypes>[];\n },\n ];\n\n/**\n * A Viem client extended with MetaMask Snap-specific RPC methods.\n *\n * This client type allows for interaction with MetaMask Snaps through\n * the standard Viem client interface, with added type safety for\n * Snap-specific methods.\n */\nexport type MetaMaskExtensionClient = Client<\n Transport,\n Chain | undefined,\n Account | undefined,\n MetaMaskExtensionSchema\n>;\n\ntype PermissionParameter = {\n type: string;\n data: Record<string, unknown>;\n};\n\n/**\n * Represents a native token stream permission.\n * This allows for continuous token streaming with defined parameters.\n */\nexport type NativeTokenStreamPermissionParameter = PermissionParameter & {\n type: 'native-token-stream';\n data: {\n amountPerSecond: bigint;\n initialAmount?: bigint;\n maxAmount?: bigint;\n startTime?: number;\n justification?: string;\n };\n};\n\n/**\n * Represents an ERC-20 token stream permission.\n * This allows for continuous ERC-20 token streaming with defined parameters.\n */\nexport type Erc20TokenStreamPermissionParameter = PermissionParameter & {\n type: 'erc20-token-stream';\n data: {\n tokenAddress: Address;\n amountPerSecond: bigint;\n initialAmount?: bigint;\n maxAmount?: bigint;\n startTime?: number;\n justification?: string;\n };\n};\n\n/**\n * Represents a native token periodic permission.\n * This allows for periodic native token transfers with defined parameters.\n */\nexport type NativeTokenPeriodicPermissionParameter = PermissionParameter & {\n type: 'native-token-periodic';\n data: {\n periodAmount: bigint;\n periodDuration: number;\n startTime?: number;\n justification?: string;\n };\n};\n\n/**\n * Represents an ERC-20 token periodic permission.\n * This allows for periodic ERC-20 token transfers with defined parameters.\n */\nexport type Erc20TokenPeriodicPermissionParameter = PermissionParameter & {\n type: 'erc20-token-periodic';\n data: {\n tokenAddress: Address;\n periodAmount: bigint;\n periodDuration: number;\n startTime?: number;\n justification?: string;\n };\n};\n\n/**\n * Represents an ERC-20 token revocation permission.\n * This allows for revoking an ERC-20 token allowance.\n */\nexport type Erc20TokenRevocationPermissionParameter = PermissionParameter & {\n type: 'erc20-token-revocation';\n data: {\n justification?: string;\n };\n};\n\nexport type SupportedPermissionParams =\n | NativeTokenStreamPermissionParameter\n | Erc20TokenStreamPermissionParameter\n | NativeTokenPeriodicPermissionParameter\n | Erc20TokenPeriodicPermissionParameter\n | Erc20TokenRevocationPermissionParameter;\n\nexport type SignerParam = Address | AccountSigner;\n\n/**\n * Represents a single permission request.\n */\nexport type PermissionRequestParameter = {\n chainId: number;\n // The permission to grant to the user.\n permission: SupportedPermissionParams;\n // Whether the caller allows the permission to be adjusted.\n isAdjustmentAllowed: boolean;\n // Account to assign the permission to.\n signer: SignerParam;\n // address from which the permission should be granted.\n address?: Address;\n // Timestamp (in seconds) that specifies the time by which this permission MUST expire.\n expiry: number;\n};\n\n/**\n * Parameters for the RequestExecutionPermissions action.\n *\n * @template Signer - The type of the signer, either an Address or Account.\n */\nexport type RequestExecutionPermissionsParameters =\n PermissionRequestParameter[];\n\n/**\n * Return type for the request execution permissions action.\n */\nexport type RequestExecutionPermissionsReturnType = PermissionResponse<\n AccountSigner,\n PermissionTypes\n>[];\n\n/**\n * Grants permissions according to EIP-7715 specification.\n *\n * @template Signer - The type of the signer, either an Address or Account.\n * @param client - The client to use for the request.\n * @param parameters - The permissions requests to grant.\n * @returns A promise that resolves to the permission responses.\n * @description\n * This function formats the permissions requests and invokes the wallet method to grant permissions.\n * It will throw an error if the permissions could not be granted.\n */\nexport async function erc7715RequestExecutionPermissionsAction(\n client: MetaMaskExtensionClient,\n parameters: RequestExecutionPermissionsParameters,\n): Promise<RequestExecutionPermissionsReturnType> {\n const formattedPermissionRequest = parameters.map(formatPermissionsRequest);\n\n const result = await client.request(\n {\n method: 'wallet_requestExecutionPermissions',\n params: formattedPermissionRequest,\n },\n { retryCount: 0 },\n );\n\n if (!result) {\n throw new Error('Failed to grant permissions');\n }\n\n return result;\n}\n\n/**\n * Formats a permissions request for submission to the wallet.\n *\n * @param parameters - The permissions request to format.\n * @returns The formatted permissions request.\n * @internal\n */\nfunction formatPermissionsRequest(\n parameters: PermissionRequestParameter,\n): PermissionRequest<AccountSigner, PermissionTypes> {\n const { chainId, address, expiry, isAdjustmentAllowed } = parameters;\n\n const permissionFormatter = getPermissionFormatter(\n parameters.permission.type,\n );\n\n const signerAddress =\n typeof parameters.signer === 'string'\n ? parameters.signer\n : parameters.signer.data.address;\n\n const rules: Rule[] = [\n {\n type: 'expiry',\n isAdjustmentAllowed,\n data: {\n timestamp: expiry,\n },\n },\n ];\n\n const optionalFields = {\n ...(address ? { address } : {}),\n };\n\n return {\n ...optionalFields,\n chainId: toHex(chainId),\n permission: permissionFormatter({\n permission: parameters.permission,\n isAdjustmentAllowed,\n }),\n signer: {\n // MetaMask 7715 implementation only supports AccountSigner\n type: 'account',\n data: {\n address: signerAddress,\n },\n },\n rules,\n };\n}\n\n/**\n * Checks if a value is defined (not null or undefined).\n *\n * @param value - The value to check.\n * @returns A boolean indicating whether the value is defined.\n */\nfunction isDefined<TValue>(value: TValue | null | undefined): value is TValue {\n return value !== undefined && value !== null;\n}\n\n/**\n * Asserts that a value is defined (not null or undefined).\n *\n * @param value - The value to check.\n * @param parameterName - Optional: The name of the parameter that is being checked.\n * @throws {Error} If the value is null or undefined.\n */\nfunction assertIsDefined<TValue>(\n value: TValue | null | undefined,\n parameterName?: string,\n): asserts value is TValue {\n if (!isDefined(value)) {\n throw new Error(\n `Invalid parameters: ${parameterName ?? 'value'} is required`,\n );\n }\n}\n\n/**\n * Converts a value to a hex string or throws an error if the value is invalid.\n *\n * @param value - The value to convert to hex.\n * @param parameterName - Optional: The name of the parameter that is being converted to hex.\n * @returns The value as a hex string.\n */\nfunction toHexOrThrow(\n value: Parameters<typeof toHex>[0] | undefined,\n parameterName?: string,\n) {\n assertIsDefined(value, parameterName);\n\n if (typeof value === 'string') {\n if (!isHex(value)) {\n throw new Error(\n `Invalid parameters: ${parameterName ?? 'value'} is not a valid hex value`,\n );\n }\n return value;\n }\n\n return toHex(value);\n}\n\ntype PermissionFormatter = (params: {\n permission: PermissionParameter;\n isAdjustmentAllowed: boolean;\n}) => PermissionTypes;\n\n/**\n * Gets the appropriate formatter function for a specific permission type.\n *\n * @param permissionType - The type of permission to format.\n * @returns A formatter function for the specified permission type.\n */\nfunction getPermissionFormatter(permissionType: string): PermissionFormatter {\n switch (permissionType) {\n case 'native-token-stream':\n return ({ permission, isAdjustmentAllowed }) =>\n formatNativeTokenStreamPermission({\n permission: permission as NativeTokenStreamPermissionParameter,\n isAdjustmentAllowed,\n });\n case 'erc20-token-stream':\n return ({ permission, isAdjustmentAllowed }) =>\n formatErc20TokenStreamPermission({\n permission: permission as Erc20TokenStreamPermissionParameter,\n isAdjustmentAllowed,\n });\n\n case 'native-token-periodic':\n return ({ permission, isAdjustmentAllowed }) =>\n formatNativeTokenPeriodicPermission({\n permission: permission as NativeTokenPeriodicPermissionParameter,\n isAdjustmentAllowed,\n });\n case 'erc20-token-periodic':\n return ({ permission, isAdjustmentAllowed }) =>\n formatErc20TokenPeriodicPermission({\n permission: permission as Erc20TokenPeriodicPermissionParameter,\n isAdjustmentAllowed,\n });\n case 'erc20-token-revocation':\n return ({ permission, isAdjustmentAllowed }) =>\n formatErc20TokenRevocationPermission({\n permission: permission as Erc20TokenRevocationPermissionParameter,\n isAdjustmentAllowed,\n });\n default:\n throw new Error(`Unsupported permission type: ${permissionType}`);\n }\n}\n\n/**\n * Formats a native token stream permission for the wallet.\n *\n * @param permission - The native token stream permission to format.\n * @param permission.permission - The native token stream permission to format.\n * @param permission.isAdjustmentAllowed - Whether the permission is allowed to be adjusted.\n * @returns The formatted permission object.\n */\nfunction formatNativeTokenStreamPermission({\n permission,\n isAdjustmentAllowed,\n}: {\n permission: NativeTokenStreamPermissionParameter;\n isAdjustmentAllowed: boolean;\n}): NativeTokenStreamPermission {\n const {\n data: {\n initialAmount,\n justification,\n maxAmount,\n startTime,\n amountPerSecond,\n },\n } = permission;\n\n const optionalFields = {\n ...(isDefined(initialAmount) && {\n initialAmount: toHexOrThrow(initialAmount, 'initialAmount'),\n }),\n ...(isDefined(maxAmount) && {\n maxAmount: toHexOrThrow(maxAmount, 'maxAmount'),\n }),\n ...(isDefined(startTime) && {\n startTime: Number(startTime),\n }),\n ...(justification ? { justification } : {}),\n };\n\n return {\n type: 'native-token-stream',\n data: {\n amountPerSecond: toHexOrThrow(amountPerSecond, 'amountPerSecond'),\n ...optionalFields,\n },\n isAdjustmentAllowed,\n };\n}\n\n/**\n * Formats an ERC-20 token stream permission parameter into the required\n * Erc20TokenStreamPermission object, converting numeric values to hex strings\n * and including only specified optional fields.\n *\n * @param params - The parameters for formatting the ERC-20 token stream permission.\n * @param params.permission - The ERC-20 token stream permission parameter to format.\n * @param params.isAdjustmentAllowed - Whether adjustment of the stream is allowed.\n * @returns The formatted Erc20TokenStreamPermission object.\n */\nfunction formatErc20TokenStreamPermission({\n permission,\n isAdjustmentAllowed,\n}: {\n permission: Erc20TokenStreamPermissionParameter;\n isAdjustmentAllowed: boolean;\n}): Erc20TokenStreamPermission {\n const {\n data: {\n tokenAddress,\n amountPerSecond,\n initialAmount,\n startTime,\n maxAmount,\n justification,\n },\n } = permission;\n\n const optionalFields = {\n ...(isDefined(initialAmount) && {\n initialAmount: toHexOrThrow(initialAmount, 'initialAmount'),\n }),\n ...(isDefined(maxAmount) && {\n maxAmount: toHexOrThrow(maxAmount, 'maxAmount'),\n }),\n ...(isDefined(startTime) && {\n startTime: Number(startTime),\n }),\n ...(justification ? { justification } : {}),\n };\n\n return {\n type: 'erc20-token-stream',\n data: {\n tokenAddress: toHexOrThrow(tokenAddress, 'tokenAddress'),\n amountPerSecond: toHexOrThrow(amountPerSecond, 'amountPerSecond'),\n ...optionalFields,\n },\n isAdjustmentAllowed,\n };\n}\n\n/**\n * Formats a native token periodic permission for submission to the wallet.\n *\n * @param params - The parameters for formatting the native token periodic permission.\n * @param params.permission - The native token periodic permission parameter to format.\n * @param params.isAdjustmentAllowed - Whether the permission is allowed to be adjusted.\n * @returns The formatted NativeTokenPeriodicPermission object.\n */\nfunction formatNativeTokenPeriodicPermission({\n permission,\n isAdjustmentAllowed,\n}: {\n permission: NativeTokenPeriodicPermissionParameter;\n isAdjustmentAllowed: boolean;\n}): NativeTokenPeriodicPermission {\n const {\n data: { periodAmount, periodDuration, startTime, justification },\n } = permission;\n\n const optionalFields = {\n ...(isDefined(startTime) && {\n startTime: Number(startTime),\n }),\n ...(justification ? { justification } : {}),\n };\n\n return {\n type: 'native-token-periodic',\n data: {\n periodAmount: toHexOrThrow(periodAmount, 'periodAmount'),\n periodDuration: Number(periodDuration),\n ...optionalFields,\n },\n isAdjustmentAllowed,\n };\n}\n\n/**\n * Formats an ERC20 token periodic permission for submission to the wallet.\n *\n * @param params - The parameters for formatting the ERC20 token periodic permission.\n * @param params.permission - The ERC20 token periodic permission parameter to format.\n * @param params.isAdjustmentAllowed - Whether the permission is allowed to be adjusted.\n * @returns The formatted Erc20TokenPeriodicPermission object.\n */\nfunction formatErc20TokenPeriodicPermission({\n permission,\n isAdjustmentAllowed,\n}: {\n permission: Erc20TokenPeriodicPermissionParameter;\n isAdjustmentAllowed: boolean;\n}): Erc20TokenPeriodicPermission {\n const {\n data: {\n tokenAddress,\n periodAmount,\n periodDuration,\n startTime,\n justification,\n },\n } = permission;\n\n const optionalFields = {\n ...(isDefined(startTime) && {\n startTime: Number(startTime),\n }),\n ...(justification ? { justification } : {}),\n };\n\n return {\n type: 'erc20-token-periodic',\n data: {\n tokenAddress: toHexOrThrow(tokenAddress, 'tokenAddress'),\n periodAmount: toHexOrThrow(periodAmount, 'periodAmount'),\n periodDuration: Number(periodDuration),\n ...optionalFields,\n },\n isAdjustmentAllowed,\n };\n}\n\n/**\n * Formats an ERC-20 token revocation permission for submission to the wallet.\n *\n * @param params - The parameters for formatting the ERC-20 token revocation permission.\n * @param params.permission - The ERC-20 token revocation permission parameter to format.\n * @param params.isAdjustmentAllowed - Whether the permission is allowed to be adjusted.\n * @returns The formatted Erc20TokenRevocationPermission object.\n */\nfunction formatErc20TokenRevocationPermission({\n permission,\n isAdjustmentAllowed,\n}: {\n permission: Erc20TokenRevocationPermissionParameter;\n isAdjustmentAllowed: boolean;\n}): Erc20TokenRevocationPermission {\n const {\n data: { justification },\n } = permission;\n\n const data = {\n ...(justification ? { justification } : {}),\n };\n return {\n type: 'erc20-token-revocation',\n data,\n isAdjustmentAllowed,\n };\n}\n","import type { Address, Hex, Client } from 'viem';\n\nimport { getDelegationHashOffchain } from '../delegation';\nimport * as ERC20PeriodTransferEnforcer from '../DelegationFramework/ERC20PeriodTransferEnforcer';\nimport * as ERC20StreamingEnforcer from '../DelegationFramework/ERC20StreamingEnforcer';\nimport * as MultiTokenPeriodEnforcer from '../DelegationFramework/MultiTokenPeriodEnforcer';\nimport * as NativeTokenPeriodTransferEnforcer from '../DelegationFramework/NativeTokenPeriodTransferEnforcer';\nimport * as NativeTokenStreamingEnforcer from '../DelegationFramework/NativeTokenStreamingEnforcer';\nimport type { SmartAccountsEnvironment, Delegation } from '../types';\n\n/**\n * Parameters for all caveat enforcer actions.\n */\nexport type CaveatEnforcerParams = {\n delegation: Delegation;\n};\n\n/**\n * Return type for period-based transfer enforcers\n */\nexport type PeriodTransferResult = {\n availableAmount: bigint;\n isNewPeriod: boolean;\n currentPeriod: bigint;\n};\n\n/**\n * Return type for streaming enforcers\n */\nexport type StreamingResult = {\n availableAmount: bigint;\n};\n\n/**\n * Finds a caveat that matches the specified enforcer address.\n * @param config - The configuration object.\n * @param config.delegation - The delegation to search.\n * @param config.enforcerAddress - The enforcer address to match.\n * @param config.enforcerName - The name of the enforcer.\n * @returns The matching caveat.\n * @throws Error if no matching caveat is found.\n * @throws Error if multiple matching caveats are found.\n */\nfunction findMatchingCaveat({\n delegation,\n enforcerAddress,\n enforcerName,\n}: {\n delegation: Delegation;\n enforcerAddress: Address;\n enforcerName: keyof SmartAccountsEnvironment['caveatEnforcers'];\n}): { terms: Hex; args: Hex } {\n const matchingCaveats = delegation.caveats.filter(\n (caveat) => caveat.enforcer.toLowerCase() === enforcerAddress.toLowerCase(),\n );\n\n if (matchingCaveats.length === 0) {\n throw new Error(`No caveat found with enforcer matching ${enforcerName}`);\n }\n\n if (matchingCaveats.length > 1) {\n throw new Error(\n `Multiple caveats found with enforcer matching ${enforcerName}`,\n );\n }\n\n const [{ terms, args }] = matchingCaveats as unknown as [\n { terms: Hex; args: Hex },\n ];\n\n return {\n terms,\n args,\n };\n}\n\n/**\n * Gets the delegation manager address from environment.\n *\n * @param environment - The SmartAccountsEnvironment.\n * @returns The delegation manager address.\n */\nfunction getDelegationManager(environment: SmartAccountsEnvironment): Address {\n if (!environment.DelegationManager) {\n throw new Error('Delegation manager address not found');\n }\n\n return environment.DelegationManager;\n}\n\n/**\n * Gets the enforcer address from environment.\n *\n * @param config - The configuration object.\n * @param config.enforcerName - The name of the enforcer.\n * @param config.environment - The SmartAccountsEnvironment.\n * @returns The enforcer address.\n */\nfunction getEnforcerAddress({\n enforcerName,\n environment,\n}: {\n enforcerName: keyof SmartAccountsEnvironment['caveatEnforcers'];\n environment: SmartAccountsEnvironment;\n}): Address {\n const enforcerAddress = environment.caveatEnforcers[enforcerName];\n if (!enforcerAddress) {\n throw new Error(`${enforcerName} not found in environment`);\n }\n\n return enforcerAddress;\n}\n\n/**\n * Get available amount for ERC20 period transfer enforcer.\n *\n * @param client - The viem client.\n * @param environment - The SmartAccountsEnvironment.\n * @param params - The parameters for the ERC20 period transfer enforcer.\n * @returns Promise resolving to the period transfer result.\n */\nexport async function getErc20PeriodTransferEnforcerAvailableAmount(\n client: Client,\n environment: SmartAccountsEnvironment,\n params: CaveatEnforcerParams,\n): Promise<PeriodTransferResult> {\n const enforcerName = 'ERC20PeriodTransferEnforcer';\n\n const delegationManager = getDelegationManager(environment);\n const enforcerAddress = getEnforcerAddress({\n enforcerName,\n environment,\n });\n\n const delegationHash = getDelegationHashOffchain(params.delegation);\n const { terms } = findMatchingCaveat({\n delegation: params.delegation,\n enforcerAddress,\n enforcerName,\n });\n\n return ERC20PeriodTransferEnforcer.read.getAvailableAmount({\n client,\n contractAddress: enforcerAddress,\n delegationHash,\n delegationManager,\n terms,\n });\n}\n\n/**\n * Get available amount for ERC20 streaming enforcer.\n *\n * @param client - The viem client.\n * @param environment - The SmartAccountsEnvironment.\n * @param params - The parameters for the ERC20 streaming enforcer.\n * @returns Promise resolving to the streaming result.\n */\nexport async function getErc20StreamingEnforcerAvailableAmount(\n client: Client,\n environment: SmartAccountsEnvironment,\n params: CaveatEnforcerParams,\n): Promise<StreamingResult> {\n const enforcerName = 'ERC20StreamingEnforcer';\n const delegationManager = getDelegationManager(environment);\n const enforcerAddress = getEnforcerAddress({\n enforcerName,\n environment,\n });\n\n const delegationHash = getDelegationHashOffchain(params.delegation);\n const { terms } = findMatchingCaveat({\n delegation: params.delegation,\n enforcerAddress,\n enforcerName,\n });\n\n return ERC20StreamingEnforcer.read.getAvailableAmount({\n client,\n contractAddress: enforcerAddress,\n delegationManager,\n delegationHash,\n terms,\n });\n}\n\n/**\n * Get available amount for multi-token period enforcer.\n *\n * @param client - The viem client.\n * @param environment - The SmartAccountsEnvironment.\n * @param params - The parameters for the multi-token period enforcer.\n * @returns Promise resolving to the period transfer result.\n */\nexport async function getMultiTokenPeriodEnforcerAvailableAmount(\n client: Client,\n environment: SmartAccountsEnvironment,\n params: CaveatEnforcerParams,\n): Promise<PeriodTransferResult> {\n const enforcerName = 'MultiTokenPeriodEnforcer';\n const delegationManager = getDelegationManager(environment);\n const enforcerAddress = getEnforcerAddress({\n enforcerName,\n environment,\n });\n\n const delegationHash = getDelegationHashOffchain(params.delegation);\n const { terms, args } = findMatchingCaveat({\n delegation: params.delegation,\n enforcerAddress,\n enforcerName,\n });\n\n return MultiTokenPeriodEnforcer.read.getAvailableAmount({\n client,\n contractAddress: enforcerAddress,\n delegationHash,\n delegationManager,\n terms,\n args,\n });\n}\n\n/**\n * Get available amount for native token period transfer enforcer.\n *\n * @param client - The viem client.\n * @param environment - The SmartAccountsEnvironment.\n * @param params - The parameters for the native token period transfer enforcer.\n * @returns Promise resolving to the period transfer result.\n */\nexport async function getNativeTokenPeriodTransferEnforcerAvailableAmount(\n client: Client,\n environment: SmartAccountsEnvironment,\n params: CaveatEnforcerParams,\n): Promise<PeriodTransferResult> {\n const enforcerName = 'NativeTokenPeriodTransferEnforcer';\n const delegationManager = getDelegationManager(environment);\n const enforcerAddress = getEnforcerAddress({\n enforcerName,\n environment,\n });\n\n const delegationHash = getDelegationHashOffchain(params.delegation);\n const { terms } = findMatchingCaveat({\n delegation: params.delegation,\n enforcerAddress,\n enforcerName,\n });\n\n return NativeTokenPeriodTransferEnforcer.read.getAvailableAmount({\n client,\n contractAddress: enforcerAddress,\n delegationHash,\n delegationManager,\n terms,\n });\n}\n\n/**\n * Get available amount for native token streaming enforcer.\n *\n * @param client - The viem client.\n * @param environment - The SmartAccountsEnvironment.\n * @param params - The parameters for the native token streaming enforcer.\n * @returns Promise resolving to the streaming result.\n */\nexport async function getNativeTokenStreamingEnforcerAvailableAmount(\n client: Client,\n environment: SmartAccountsEnvironment,\n params: CaveatEnforcerParams,\n): Promise<StreamingResult> {\n const enforcerName = 'NativeTokenStreamingEnforcer';\n const delegationManager = getDelegationManager(environment);\n const enforcerAddress = getEnforcerAddress({\n enforcerName,\n environment,\n });\n\n const delegationHash = getDelegationHashOffchain(params.delegation);\n const { terms } = findMatchingCaveat({\n delegation: params.delegation,\n enforcerAddress,\n enforcerName,\n });\n\n return NativeTokenStreamingEnforcer.read.getAvailableAmount({\n client,\n contractAddress: enforcerAddress,\n delegationManager,\n delegationHash,\n terms,\n });\n}\n\n/**\n * Caveat enforcer actions for extending viem clients.\n *\n * @param params - The parameters object.\n * @param params.environment - The SmartAccountsEnvironment.\n * @returns A function that takes a client and returns the client extension with caveat enforcer actions.\n */\nexport const caveatEnforcerActions =\n ({ environment }: { environment: SmartAccountsEnvironment }) =>\n (client: Client) => ({\n /**\n * Get available amount for ERC20 period transfer enforcer.\n *\n * @param params - The parameters for the ERC20 period transfer enforcer.\n * @returns Promise resolving to the period transfer result.\n */\n getErc20PeriodTransferEnforcerAvailableAmount: async (\n params: CaveatEnforcerParams,\n ): Promise<PeriodTransferResult> => {\n return getErc20PeriodTransferEnforcerAvailableAmount(\n client,\n environment,\n params,\n );\n },\n\n /**\n * Get available amount for ERC20 streaming enforcer.\n *\n * @param params - The parameters for the ERC20 streaming enforcer.\n * @returns Promise resolving to the streaming result.\n */\n getErc20StreamingEnforcerAvailableAmount: async (\n params: CaveatEnforcerParams,\n ): Promise<StreamingResult> => {\n return getErc20StreamingEnforcerAvailableAmount(\n client,\n environment,\n params,\n );\n },\n\n /**\n * Get available amount for multi-token period enforcer.\n *\n * @param params - The parameters for the multi-token period enforcer.\n * @returns Promise resolving to the period transfer result.\n */\n getMultiTokenPeriodEnforcerAvailableAmount: async (\n params: CaveatEnforcerParams,\n ): Promise<PeriodTransferResult> => {\n return getMultiTokenPeriodEnforcerAvailableAmount(\n client,\n environment,\n params,\n );\n },\n\n /**\n * Get available amount for native token period transfer enforcer.\n *\n * @param params - The parameters for the native token period transfer enforcer.\n * @returns Promise resolving to the period transfer result.\n */\n getNativeTokenPeriodTransferEnforcerAvailableAmount: async (\n params: CaveatEnforcerParams,\n ): Promise<PeriodTransferResult> => {\n return getNativeTokenPeriodTransferEnforcerAvailableAmount(\n client,\n environment,\n params,\n );\n },\n\n /**\n * Get available amount for native token streaming enforcer.\n *\n * @param params - The parameters for the native token streaming enforcer.\n * @returns Promise resolving to the streaming result.\n */\n getNativeTokenStreamingEnforcerAvailableAmount: async (\n params: CaveatEnforcerParams,\n ): Promise<StreamingResult> => {\n return getNativeTokenStreamingEnforcerAvailableAmount(\n client,\n environment,\n params,\n );\n },\n });\n","import type { Client, Address, Hex } from 'viem';\nimport { isAddressEqual } from 'viem';\nimport { getCode } from 'viem/actions';\n\nimport type { SmartAccountsEnvironment } from '../types';\n\n// EIP-7702 delegation prefix (0xef0100)\nconst DELEGATION_PREFIX = '0xef0100' as const;\n\n/**\n * Parameters for checking if an account is delegated to the EIP-7702 implementation.\n */\nexport type IsValid7702ImplementationParameters = {\n /** The client to use for the query. */\n client: Client;\n /** The address to check for proper delegation. */\n accountAddress: Address;\n /** The SmartAccountsEnvironment containing contract addresses. */\n environment: SmartAccountsEnvironment;\n};\n\n/**\n * Extracts the delegated contract address from EIP-7702 delegation code.\n *\n * @param code - The code returned from getCode for a delegated account.\n * @returns The delegated contract address or null if not a valid delegation.\n */\nfunction extractDelegatedAddress(code: Hex | undefined): Address | null {\n if (code?.length !== 48) {\n // 0x (2 chars) + ef0100 (6 chars) + address (40 chars) = 48 chars\n return null;\n }\n\n if (!code.toLowerCase().startsWith(DELEGATION_PREFIX.toLowerCase())) {\n return null;\n }\n\n // Extract the 20-byte address after the delegation prefix\n const addressHex = code.slice(8); // Remove '0xef0100' prefix (8 chars)\n return `0x${addressHex}`;\n}\n\n/**\n * Checks if an account is properly delegated to the EIP-7702 implementation.\n *\n * This function validates EIP-7702 delegations by checking if the EOA has a 7702\n * contract assigned to it and comparing the delegated address against the 7702\n * implementation found in the environment.\n *\n * @param params - The parameters for checking the delegation.\n * @param params.client - The client to use for the query.\n * @param params.accountAddress - The address to check for proper delegation.\n * @param params.environment - The SmartAccountsEnvironment containing contract addresses.\n * @returns A promise that resolves to true if the account is properly delegated to the 7702 implementation, false otherwise.\n * @example\n * ```typescript\n * const isValid = await isValid7702Implementation({\n * client: publicClient,\n * accountAddress: '0x...',\n * environment: smartAccountEnvironment,\n * });\n *\n * if (isValid) {\n * console.log('Account is properly delegated to EIP-7702 implementation');\n * } else {\n * console.log('Account is not properly delegated');\n * }\n * ```\n */\nexport async function isValid7702Implementation({\n client,\n accountAddress,\n environment,\n}: IsValid7702ImplementationParameters): Promise<boolean> {\n try {\n // Get the code at the account address\n const code = await getCode(client, {\n address: accountAddress,\n });\n\n // Extract the delegated contract address from the EIP-7702 delegation code\n const delegatedAddress = extractDelegatedAddress(code);\n\n // If no valid delegation found, return false\n if (!delegatedAddress) {\n return false;\n }\n\n // Compare the delegated address with the 7702 implementation in the environment\n const expectedImplementation =\n environment.implementations.EIP7702StatelessDeleGatorImpl;\n if (!expectedImplementation) {\n return false;\n }\n\n return isAddressEqual(delegatedAddress, expectedImplementation);\n } catch (error) {\n // If the call fails (e.g., no code at address, network error),\n // then it's not properly delegated to our implementation\n return false;\n }\n}\n","import type {\n Account,\n Address,\n Chain,\n Client,\n Hex,\n Transport,\n WalletClient,\n} from 'viem';\nimport { BaseError } from 'viem';\nimport { parseAccount } from 'viem/accounts';\n\nimport { prepareSignDelegationTypedData } from '../delegation';\nimport type { Delegation } from '../types';\n\nexport type SignDelegationParameters = {\n /** Account to sign with */\n account?: Account | Address;\n /** The delegation to sign */\n delegation: Omit<Delegation, 'signature'>;\n /** The address of the delegation manager contract */\n delegationManager: Address;\n /** The chain ID for the signature */\n chainId: number;\n /** The name of the contract */\n name?: string;\n /** The version of the contract */\n version?: string;\n /** Whether to allow insecure unrestricted delegation */\n allowInsecureUnrestrictedDelegation?: boolean;\n};\n\nexport type SignDelegationReturnType = Hex;\n\n/**\n * Signs a delegation using a wallet client.\n * @param client - The wallet client to use for signing.\n * @param parameters - The parameters for signing the delegation.\n * @returns The signature of the delegation.\n * @example\n * ```ts\n * const signature = await signDelegation(walletClient, {\n * delegation: {\n * delegate: '0x...',\n * delegator: '0x...',\n * authority: '0x...',\n * caveats: [],\n * salt: '0x'\n * },\n * delegationManager: '0x...',\n * chainId: 1\n * });\n * ```\n */\nexport async function signDelegation<\n TChain extends Chain | undefined,\n TAccount extends Account | undefined,\n>(\n client: Client<Transport, TChain, TAccount> & {\n signTypedData: WalletClient['signTypedData'];\n },\n parameters: SignDelegationParameters,\n): Promise<SignDelegationReturnType> {\n const {\n account: accountParam = client.account,\n delegation,\n delegationManager,\n chainId,\n name = 'DelegationManager',\n version = '1',\n allowInsecureUnrestrictedDelegation = false,\n } = parameters;\n\n if (!accountParam) {\n throw new BaseError('Account not found. Please provide an account.');\n }\n\n const account = parseAccount(accountParam);\n\n const typedData = prepareSignDelegationTypedData({\n delegation,\n delegationManager,\n chainId,\n name,\n version,\n allowInsecureUnrestrictedDelegation,\n });\n\n return client.signTypedData({\n account,\n ...typedData,\n });\n}\n\n/**\n * Creates a sign delegation action that can be used to extend a wallet client.\n * @returns A function that can be used with wallet client extend method.\n * @example\n * ```ts\n * const walletClient = createWalletClient({\n * chain: mainnet,\n * transport: http()\n * }).extend(signDelegationActions());\n * ```\n */\nexport function signDelegationActions() {\n return <\n TChain extends Chain | undefined,\n TAccount extends Account | undefined,\n >(\n client: Client<Transport, TChain, TAccount> & {\n signTypedData: WalletClient['signTypedData'];\n },\n ) => ({\n signDelegation: async (\n parameters: Omit<SignDelegationParameters, 'chainId'> & {\n chainId?: number;\n },\n ) =>\n signDelegation(client, {\n chainId:\n parameters.chainId ??\n (() => {\n if (!client.chain?.id) {\n throw new BaseError(\n 'Chain ID is required. Either provide it in parameters or configure the client with a chain.',\n );\n }\n return client.chain.id;\n })(),\n ...parameters,\n }),\n });\n}\n","import type {\n Account,\n Address,\n Chain,\n Client,\n Hex,\n Transport,\n WalletClient,\n} from 'viem';\nimport { BaseError } from 'viem';\nimport { parseAccount } from 'viem/accounts';\n\nimport { prepareSignUserOperationTypedData } from '../userOp';\nimport type { UserOperationV07 } from '../userOp';\n\nexport type SignUserOperationParameters = {\n /** Account to sign with */\n account?: Account | Address;\n /** The user operation to sign */\n userOperation: Omit<UserOperationV07, 'signature'>;\n /** The entry point contract address */\n entryPoint: { address: Address };\n /** The chain ID that the entry point is deployed on */\n chainId: number;\n /** The address of the smart account */\n address: Address;\n /** The name of the domain of the implementation contract */\n name: 'HybridDeleGator' | 'MultiSigDeleGator';\n /** The version of the domain of the implementation contract */\n version?: string;\n};\n\nexport type SignUserOperationReturnType = Hex;\n\n/**\n * Signs a user operation using a wallet client.\n * @param client - The wallet client to use for signing.\n * @param parameters - The parameters for signing the user operation.\n * @returns The signature of the user operation.\n * @example\n * ```ts\n * const signature = await signUserOperation(walletClient, {\n * userOperation: {\n * sender: '0x...',\n * nonce: 0n,\n * callData: '0x',\n * callGasLimit: 1000000n,\n * verificationGasLimit: 1000000n,\n * preVerificationGas: 21000n,\n * maxFeePerGas: 1000000000n,\n * maxPriorityFeePerGas: 1000000000n\n * },\n * entryPoint: { address: '0x...' },\n * chainId: 1,\n * address: '0x...',\n * name: 'HybridDeleGator'\n * });\n * ```\n */\nexport async function signUserOperation<\n TChain extends Chain | undefined,\n TAccount extends Account | undefined,\n>(\n client: Client<Transport, TChain, TAccount> & {\n signTypedData: WalletClient['signTypedData'];\n },\n parameters: SignUserOperationParameters,\n): Promise<SignUserOperationReturnType> {\n const {\n account: accountParam = client.account,\n userOperation,\n entryPoint,\n chainId,\n name,\n address,\n version = '1',\n } = parameters;\n\n if (!accountParam) {\n throw new BaseError('Account not found. Please provide an account.');\n }\n\n const account = parseAccount(accountParam);\n\n const typedData = prepareSignUserOperationTypedData({\n userOperation,\n entryPoint,\n chainId,\n name,\n address,\n version,\n });\n\n return client.signTypedData({\n account,\n ...typedData,\n });\n}\n\n/**\n * Creates a sign user operation action that can be used to extend a wallet client.\n * @returns A function that can be used with wallet client extend method.\n * @example\n * ```ts\n * const walletClient = createWalletClient({\n * chain: mainnet,\n * transport: http()\n * }).extend(signUserOperationActions());\n * ```\n */\nexport function signUserOperationActions() {\n return <\n TChain extends Chain | undefined,\n TAccount extends Account | undefined,\n >(\n client: Client<Transport, TChain, TAccount> & {\n signTypedData: WalletClient['signTypedData'];\n },\n ) => ({\n signUserOperation: async (\n parameters: Omit<SignUserOperationParameters, 'chainId'> & {\n chainId?: number;\n },\n ) =>\n signUserOperation(client, {\n chainId:\n parameters.chainId ??\n (() => {\n if (!client.chain?.id) {\n throw new BaseError(\n 'Chain ID is required. Either provide it in parameters or configure the client with a chain.',\n );\n }\n return client.chain.id;\n })(),\n ...parameters,\n }),\n });\n}\n"],"mappings":"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","names":["read_exports","isAddressEqual","BaseError","parseAccount","BaseError","parseAccount"]}
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-CPLIK3VF.mjs";
4
4
  import {
5
5
  encodePermissionContexts
6
- } from "./chunk-UUDQWENY.mjs";
6
+ } from "./chunk-BJGZGTRU.mjs";
7
7
 
8
8
  // src/write.ts
9
9
  import { SimpleFactory, DelegationManager } from "@metamask/delegation-abis";
@@ -333,4 +333,4 @@ export {
333
333
  prepareSignUserOperationTypedData,
334
334
  signUserOperation
335
335
  };
336
- //# sourceMappingURL=chunk-MVKT5CLQ.mjs.map
336
+ //# sourceMappingURL=chunk-3JBYBEYP.mjs.map
@@ -1,16 +1,16 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
- var _chunkHLCOMYYUcjs = require('./chunk-HLCOMYYU.cjs');
3
+ var _chunkHJETDDBNcjs = require('./chunk-HJETDDBN.cjs');
4
4
 
5
5
  // src/DelegationFramework/ERC20PeriodTransferEnforcer/index.ts
6
6
  var ERC20PeriodTransferEnforcer_exports = {};
7
- _chunkHLCOMYYUcjs.__export.call(void 0, ERC20PeriodTransferEnforcer_exports, {
7
+ _chunkHJETDDBNcjs.__export.call(void 0, ERC20PeriodTransferEnforcer_exports, {
8
8
  read: () => read_exports
9
9
  });
10
10
 
11
11
  // src/DelegationFramework/ERC20PeriodTransferEnforcer/read.ts
12
12
  var read_exports = {};
13
- _chunkHLCOMYYUcjs.__export.call(void 0, read_exports, {
13
+ _chunkHJETDDBNcjs.__export.call(void 0, read_exports, {
14
14
  getAvailableAmount: () => read
15
15
  });
16
16
 
@@ -42,13 +42,13 @@ var read = async ({
42
42
 
43
43
  // src/DelegationFramework/ERC20StreamingEnforcer/index.ts
44
44
  var ERC20StreamingEnforcer_exports = {};
45
- _chunkHLCOMYYUcjs.__export.call(void 0, ERC20StreamingEnforcer_exports, {
45
+ _chunkHJETDDBNcjs.__export.call(void 0, ERC20StreamingEnforcer_exports, {
46
46
  read: () => read_exports2
47
47
  });
48
48
 
49
49
  // src/DelegationFramework/ERC20StreamingEnforcer/read.ts
50
50
  var read_exports2 = {};
51
- _chunkHLCOMYYUcjs.__export.call(void 0, read_exports2, {
51
+ _chunkHJETDDBNcjs.__export.call(void 0, read_exports2, {
52
52
  getAvailableAmount: () => read2
53
53
  });
54
54
 
@@ -126,13 +126,13 @@ function getAvailableAmount(allowance) {
126
126
 
127
127
  // src/DelegationFramework/MultiTokenPeriodEnforcer/index.ts
128
128
  var MultiTokenPeriodEnforcer_exports = {};
129
- _chunkHLCOMYYUcjs.__export.call(void 0, MultiTokenPeriodEnforcer_exports, {
129
+ _chunkHJETDDBNcjs.__export.call(void 0, MultiTokenPeriodEnforcer_exports, {
130
130
  read: () => read_exports3
131
131
  });
132
132
 
133
133
  // src/DelegationFramework/MultiTokenPeriodEnforcer/read.ts
134
134
  var read_exports3 = {};
135
- _chunkHLCOMYYUcjs.__export.call(void 0, read_exports3, {
135
+ _chunkHJETDDBNcjs.__export.call(void 0, read_exports3, {
136
136
  getAvailableAmount: () => read3
137
137
  });
138
138
 
@@ -165,13 +165,13 @@ var read3 = async ({
165
165
 
166
166
  // src/DelegationFramework/NativeTokenPeriodTransferEnforcer/index.ts
167
167
  var NativeTokenPeriodTransferEnforcer_exports = {};
168
- _chunkHLCOMYYUcjs.__export.call(void 0, NativeTokenPeriodTransferEnforcer_exports, {
168
+ _chunkHJETDDBNcjs.__export.call(void 0, NativeTokenPeriodTransferEnforcer_exports, {
169
169
  read: () => read_exports4
170
170
  });
171
171
 
172
172
  // src/DelegationFramework/NativeTokenPeriodTransferEnforcer/read.ts
173
173
  var read_exports4 = {};
174
- _chunkHLCOMYYUcjs.__export.call(void 0, read_exports4, {
174
+ _chunkHJETDDBNcjs.__export.call(void 0, read_exports4, {
175
175
  getAvailableAmount: () => read4
176
176
  });
177
177
 
@@ -203,13 +203,13 @@ var read4 = async ({
203
203
 
204
204
  // src/DelegationFramework/NativeTokenStreamingEnforcer/index.ts
205
205
  var NativeTokenStreamingEnforcer_exports = {};
206
- _chunkHLCOMYYUcjs.__export.call(void 0, NativeTokenStreamingEnforcer_exports, {
206
+ _chunkHJETDDBNcjs.__export.call(void 0, NativeTokenStreamingEnforcer_exports, {
207
207
  read: () => read_exports5
208
208
  });
209
209
 
210
210
  // src/DelegationFramework/NativeTokenStreamingEnforcer/read.ts
211
211
  var read_exports5 = {};
212
- _chunkHLCOMYYUcjs.__export.call(void 0, read_exports5, {
212
+ _chunkHJETDDBNcjs.__export.call(void 0, read_exports5, {
213
213
  getAvailableAmount: () => read5
214
214
  });
215
215
 
@@ -296,4 +296,4 @@ function getAvailableAmount2(allowance) {
296
296
 
297
297
 
298
298
  exports.read_exports = read_exports; exports.ERC20PeriodTransferEnforcer_exports = ERC20PeriodTransferEnforcer_exports; exports.read_exports2 = read_exports2; exports.ERC20StreamingEnforcer_exports = ERC20StreamingEnforcer_exports; exports.read_exports3 = read_exports3; exports.MultiTokenPeriodEnforcer_exports = MultiTokenPeriodEnforcer_exports; exports.read_exports4 = read_exports4; exports.NativeTokenPeriodTransferEnforcer_exports = NativeTokenPeriodTransferEnforcer_exports; exports.read_exports5 = read_exports5; exports.NativeTokenStreamingEnforcer_exports = NativeTokenStreamingEnforcer_exports;
299
- //# sourceMappingURL=chunk-D4ILRL6Z.cjs.map
299
+ //# sourceMappingURL=chunk-4QBJFYZ7.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/smart-accounts-kit/smart-accounts-kit/packages/smart-accounts-kit/dist/chunk-D4ILRL6Z.cjs","../src/DelegationFramework/ERC20PeriodTransferEnforcer/index.ts","../src/DelegationFramework/ERC20PeriodTransferEnforcer/read.ts","../src/DelegationFramework/ERC20PeriodTransferEnforcer/methods/getAvailableAmount.ts","../src/DelegationFramework/ERC20StreamingEnforcer/index.ts","../src/DelegationFramework/ERC20StreamingEnforcer/read.ts","../src/DelegationFramework/ERC20StreamingEnforcer/methods/getAvailableAmount.ts","../src/DelegationFramework/MultiTokenPeriodEnforcer/index.ts","../src/DelegationFramework/MultiTokenPeriodEnforcer/read.ts","../src/DelegationFramework/MultiTokenPeriodEnforcer/methods/getAvailableAmount.ts","../src/DelegationFramework/NativeTokenPeriodTransferEnforcer/index.ts","../src/DelegationFramework/NativeTokenPeriodTransferEnforcer/read.ts","../src/DelegationFramework/NativeTokenPeriodTransferEnforcer/methods/getAvailableAmount.ts","../src/DelegationFramework/NativeTokenStreamingEnforcer/index.ts","../src/DelegationFramework/NativeTokenStreamingEnforcer/read.ts","../src/DelegationFramework/NativeTokenStreamingEnforcer/methods/getAvailableAmount.ts"],"names":["read_exports","read","readContract","availableAmount","getBlock","getAvailableAmount"],"mappings":"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","file":"/home/runner/work/smart-accounts-kit/smart-accounts-kit/packages/smart-accounts-kit/dist/chunk-D4ILRL6Z.cjs","sourcesContent":[null,"import * as read from './read';\n\nexport { read };\n","import { read as getAvailableAmount } from './methods/getAvailableAmount';\n\nexport { getAvailableAmount };\n","import { ERC20PeriodTransferEnforcer } from '@metamask/delegation-abis';\nimport type { Address, Client, Hex } from 'viem';\nimport { readContract } from 'viem/actions';\n\nexport type ReadGetAvailableAmountParameters = {\n client: Client;\n contractAddress: Address;\n delegationHash: Hex;\n delegationManager: Address;\n terms: Hex;\n};\n\nexport const read = async ({\n client,\n contractAddress,\n delegationHash,\n delegationManager,\n terms,\n}: ReadGetAvailableAmountParameters) => {\n const [availableAmount, isNewPeriod, currentPeriod] = await readContract(\n client,\n {\n address: contractAddress,\n abi: ERC20PeriodTransferEnforcer.abi,\n functionName: 'getAvailableAmount',\n args: [delegationHash, delegationManager, terms],\n },\n );\n\n return {\n availableAmount,\n isNewPeriod,\n currentPeriod,\n };\n};\n","import * as read from './read';\n\nexport { read };\n","import { read as getAvailableAmount } from './methods/getAvailableAmount';\n\nexport { getAvailableAmount };\n","import { ERC20StreamingEnforcer } from '@metamask/delegation-abis';\nimport type { Address, Client, Hex } from 'viem';\nimport { readContract, getBlock } from 'viem/actions';\n\nexport type ReadGetAvailableAmountParameters = {\n client: Client;\n contractAddress: Address;\n delegationManager: Address;\n delegationHash: Hex;\n terms: Hex;\n};\n\nexport const read = async ({\n client,\n contractAddress,\n delegationManager,\n delegationHash,\n terms,\n}: ReadGetAvailableAmountParameters) => {\n // Get current block timestamp from blockchain\n const currentBlock = await getBlock(client);\n const currentTimestamp = currentBlock.timestamp;\n\n // First, get the current state from the contract\n const allowanceState = await readContract(client, {\n address: contractAddress,\n abi: ERC20StreamingEnforcer.abi,\n functionName: 'streamingAllowances',\n args: [delegationManager, delegationHash],\n });\n\n const [initialAmount, maxAmount, amountPerSecond, startTime, spent] =\n allowanceState;\n\n // Check if state exists (startTime != 0)\n if (startTime !== 0n) {\n // State exists, calculate available amount using the stored state\n const availableAmount = getAvailableAmount({\n initialAmount,\n maxAmount,\n amountPerSecond,\n startTime,\n spent,\n currentTimestamp,\n });\n\n return {\n availableAmount,\n };\n }\n\n // State doesn't exist, decode terms and simulate with spent = 0\n const decodedTerms = await readContract(client, {\n address: contractAddress,\n abi: ERC20StreamingEnforcer.abi,\n functionName: 'getTermsInfo',\n args: [terms],\n });\n\n const [\n ,\n decodedInitialAmount,\n decodedMaxAmount,\n decodedAmountPerSecond,\n decodedStartTime,\n ] = decodedTerms;\n\n // Simulate using decoded terms with spent = 0\n const availableAmount = getAvailableAmount({\n initialAmount: decodedInitialAmount,\n maxAmount: decodedMaxAmount,\n amountPerSecond: decodedAmountPerSecond,\n startTime: decodedStartTime,\n spent: 0n,\n currentTimestamp,\n });\n\n return {\n availableAmount,\n };\n};\n\n/**\n * Replicates the internal _getAvailableAmount logic from the smart contract.\n *\n * @param allowance - The allowance object containing all parameters.\n * @param allowance.initialAmount - The initial amount available.\n * @param allowance.maxAmount - The maximum amount allowed.\n * @param allowance.amountPerSecond - The amount streamed per second.\n * @param allowance.startTime - The start time of the streaming.\n * @param allowance.spent - The amount already spent.\n * @param allowance.currentTimestamp - The current timestamp.\n * @returns The available amount that can be spent.\n */\nfunction getAvailableAmount(allowance: {\n initialAmount: bigint;\n maxAmount: bigint;\n amountPerSecond: bigint;\n startTime: bigint;\n spent: bigint;\n currentTimestamp: bigint;\n}): bigint {\n // If current time is before start time, nothing is available\n if (allowance.currentTimestamp < allowance.startTime) {\n return 0n;\n }\n\n // Calculate elapsed time since start\n const elapsed = allowance.currentTimestamp - allowance.startTime;\n\n // Calculate total unlocked amount\n let unlocked = allowance.initialAmount + allowance.amountPerSecond * elapsed;\n\n // Cap by max amount\n if (unlocked > allowance.maxAmount) {\n unlocked = allowance.maxAmount;\n }\n\n // If spent >= unlocked, nothing available\n if (allowance.spent >= unlocked) {\n return 0n;\n }\n\n // Return available amount\n return unlocked - allowance.spent;\n}\n","import * as read from './read';\n\nexport { read };\n","import { read as getAvailableAmount } from './methods/getAvailableAmount';\n\nexport { getAvailableAmount };\n","import { MultiTokenPeriodEnforcer } from '@metamask/delegation-abis';\nimport type { Address, Client, Hex } from 'viem';\nimport { readContract } from 'viem/actions';\n\nexport type ReadGetAvailableAmountParameters = {\n client: Client;\n contractAddress: Address;\n delegationHash: Hex;\n delegationManager: Address;\n terms: Hex;\n args: Hex;\n};\n\nexport const read = async ({\n client,\n contractAddress,\n delegationHash,\n delegationManager,\n terms,\n args,\n}: ReadGetAvailableAmountParameters) => {\n const [availableAmount, isNewPeriod, currentPeriod] = await readContract(\n client,\n {\n address: contractAddress,\n abi: MultiTokenPeriodEnforcer.abi,\n functionName: 'getAvailableAmount',\n args: [delegationHash, delegationManager, terms, args],\n },\n );\n\n return {\n availableAmount,\n isNewPeriod,\n currentPeriod,\n };\n};\n","import * as read from './read';\n\nexport { read };\n","import { read as getAvailableAmount } from './methods/getAvailableAmount';\n\nexport { getAvailableAmount };\n","import { NativeTokenPeriodTransferEnforcer } from '@metamask/delegation-abis';\nimport type { Address, Client, Hex } from 'viem';\nimport { readContract } from 'viem/actions';\n\nexport type ReadGetAvailableAmountParameters = {\n client: Client;\n contractAddress: Address;\n delegationHash: Hex;\n delegationManager: Address;\n terms: Hex;\n};\n\nexport const read = async ({\n client,\n contractAddress,\n delegationHash,\n delegationManager,\n terms,\n}: ReadGetAvailableAmountParameters) => {\n const [availableAmount, isNewPeriod, currentPeriod] = await readContract(\n client,\n {\n address: contractAddress,\n abi: NativeTokenPeriodTransferEnforcer.abi,\n functionName: 'getAvailableAmount',\n args: [delegationHash, delegationManager, terms],\n },\n );\n\n return {\n availableAmount,\n isNewPeriod,\n currentPeriod,\n };\n};\n","import * as read from './read';\n\nexport { read };\n","import { read as getAvailableAmount } from './methods/getAvailableAmount';\n\nexport { getAvailableAmount };\n","import { NativeTokenStreamingEnforcer } from '@metamask/delegation-abis';\nimport type { Address, Client, Hex } from 'viem';\nimport { readContract, getBlock } from 'viem/actions';\n\nexport type ReadGetAvailableAmountParameters = {\n client: Client;\n contractAddress: Address;\n delegationManager: Address;\n delegationHash: Hex;\n terms: Hex;\n};\n\nexport const read = async ({\n client,\n contractAddress,\n delegationManager,\n delegationHash,\n terms,\n}: ReadGetAvailableAmountParameters) => {\n // Get current block timestamp from blockchain\n const currentBlock = await getBlock(client);\n const currentTimestamp = currentBlock.timestamp;\n\n // First, get the current state from the contract\n const allowanceState = await readContract(client, {\n address: contractAddress,\n abi: NativeTokenStreamingEnforcer.abi,\n functionName: 'streamingAllowances',\n args: [delegationManager, delegationHash],\n });\n\n const [initialAmount, maxAmount, amountPerSecond, startTime, spent] =\n allowanceState;\n\n // Check if state exists (startTime != 0)\n if (startTime !== 0n) {\n // State exists, calculate available amount using the stored state\n const availableAmount = getAvailableAmount({\n initialAmount,\n maxAmount,\n amountPerSecond,\n startTime,\n spent,\n currentTimestamp,\n });\n\n return {\n availableAmount,\n };\n }\n\n // State doesn't exist, decode terms and simulate with spent = 0\n const decodedTerms = await readContract(client, {\n address: contractAddress,\n abi: NativeTokenStreamingEnforcer.abi,\n functionName: 'getTermsInfo',\n args: [terms],\n });\n\n const [\n decodedInitialAmount,\n decodedMaxAmount,\n decodedAmountPerSecond,\n decodedStartTime,\n ] = decodedTerms;\n\n // Simulate using decoded terms with spent = 0\n const availableAmount = getAvailableAmount({\n initialAmount: decodedInitialAmount,\n maxAmount: decodedMaxAmount,\n amountPerSecond: decodedAmountPerSecond,\n startTime: decodedStartTime,\n spent: 0n,\n currentTimestamp,\n });\n\n return {\n availableAmount,\n };\n};\n\n/**\n * Replicates the internal _getAvailableAmount logic from the smart contract.\n *\n * @param allowance - The allowance object containing all parameters.\n * @param allowance.initialAmount - The initial amount available.\n * @param allowance.maxAmount - The maximum amount allowed.\n * @param allowance.amountPerSecond - The amount streamed per second.\n * @param allowance.startTime - The start time of the streaming.\n * @param allowance.spent - The amount already spent.\n * @param allowance.currentTimestamp - The current timestamp.\n * @returns The available amount that can be spent.\n */\nfunction getAvailableAmount(allowance: {\n initialAmount: bigint;\n maxAmount: bigint;\n amountPerSecond: bigint;\n startTime: bigint;\n spent: bigint;\n currentTimestamp: bigint;\n}): bigint {\n // If current time is before start time, nothing is available\n if (allowance.currentTimestamp < allowance.startTime) {\n return 0n;\n }\n\n // Calculate elapsed time since start\n const elapsed = allowance.currentTimestamp - allowance.startTime;\n\n // Calculate total unlocked amount\n let unlocked = allowance.initialAmount + allowance.amountPerSecond * elapsed;\n\n // Cap by max amount\n if (unlocked > allowance.maxAmount) {\n unlocked = allowance.maxAmount;\n }\n\n // If spent >= unlocked, nothing available\n if (allowance.spent >= unlocked) {\n return 0n;\n }\n\n // Return available amount\n return unlocked - allowance.spent;\n}\n"]}
1
+ {"version":3,"sources":["/home/runner/work/smart-accounts-kit/smart-accounts-kit/packages/smart-accounts-kit/dist/chunk-4QBJFYZ7.cjs","../src/DelegationFramework/ERC20PeriodTransferEnforcer/index.ts","../src/DelegationFramework/ERC20PeriodTransferEnforcer/read.ts","../src/DelegationFramework/ERC20PeriodTransferEnforcer/methods/getAvailableAmount.ts","../src/DelegationFramework/ERC20StreamingEnforcer/index.ts","../src/DelegationFramework/ERC20StreamingEnforcer/read.ts","../src/DelegationFramework/ERC20StreamingEnforcer/methods/getAvailableAmount.ts","../src/DelegationFramework/MultiTokenPeriodEnforcer/index.ts","../src/DelegationFramework/MultiTokenPeriodEnforcer/read.ts","../src/DelegationFramework/MultiTokenPeriodEnforcer/methods/getAvailableAmount.ts","../src/DelegationFramework/NativeTokenPeriodTransferEnforcer/index.ts","../src/DelegationFramework/NativeTokenPeriodTransferEnforcer/read.ts","../src/DelegationFramework/NativeTokenPeriodTransferEnforcer/methods/getAvailableAmount.ts","../src/DelegationFramework/NativeTokenStreamingEnforcer/index.ts","../src/DelegationFramework/NativeTokenStreamingEnforcer/read.ts","../src/DelegationFramework/NativeTokenStreamingEnforcer/methods/getAvailableAmount.ts"],"names":["read_exports","read","readContract","availableAmount","getBlock","getAvailableAmount"],"mappings":"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","file":"/home/runner/work/smart-accounts-kit/smart-accounts-kit/packages/smart-accounts-kit/dist/chunk-4QBJFYZ7.cjs","sourcesContent":[null,"import * as read from './read';\n\nexport { read };\n","import { read as getAvailableAmount } from './methods/getAvailableAmount';\n\nexport { getAvailableAmount };\n","import { ERC20PeriodTransferEnforcer } from '@metamask/delegation-abis';\nimport type { Address, Client, Hex } from 'viem';\nimport { readContract } from 'viem/actions';\n\nexport type ReadGetAvailableAmountParameters = {\n client: Client;\n contractAddress: Address;\n delegationHash: Hex;\n delegationManager: Address;\n terms: Hex;\n};\n\nexport const read = async ({\n client,\n contractAddress,\n delegationHash,\n delegationManager,\n terms,\n}: ReadGetAvailableAmountParameters) => {\n const [availableAmount, isNewPeriod, currentPeriod] = await readContract(\n client,\n {\n address: contractAddress,\n abi: ERC20PeriodTransferEnforcer.abi,\n functionName: 'getAvailableAmount',\n args: [delegationHash, delegationManager, terms],\n },\n );\n\n return {\n availableAmount,\n isNewPeriod,\n currentPeriod,\n };\n};\n","import * as read from './read';\n\nexport { read };\n","import { read as getAvailableAmount } from './methods/getAvailableAmount';\n\nexport { getAvailableAmount };\n","import { ERC20StreamingEnforcer } from '@metamask/delegation-abis';\nimport type { Address, Client, Hex } from 'viem';\nimport { readContract, getBlock } from 'viem/actions';\n\nexport type ReadGetAvailableAmountParameters = {\n client: Client;\n contractAddress: Address;\n delegationManager: Address;\n delegationHash: Hex;\n terms: Hex;\n};\n\nexport const read = async ({\n client,\n contractAddress,\n delegationManager,\n delegationHash,\n terms,\n}: ReadGetAvailableAmountParameters) => {\n // Get current block timestamp from blockchain\n const currentBlock = await getBlock(client);\n const currentTimestamp = currentBlock.timestamp;\n\n // First, get the current state from the contract\n const allowanceState = await readContract(client, {\n address: contractAddress,\n abi: ERC20StreamingEnforcer.abi,\n functionName: 'streamingAllowances',\n args: [delegationManager, delegationHash],\n });\n\n const [initialAmount, maxAmount, amountPerSecond, startTime, spent] =\n allowanceState;\n\n // Check if state exists (startTime != 0)\n if (startTime !== 0n) {\n // State exists, calculate available amount using the stored state\n const availableAmount = getAvailableAmount({\n initialAmount,\n maxAmount,\n amountPerSecond,\n startTime,\n spent,\n currentTimestamp,\n });\n\n return {\n availableAmount,\n };\n }\n\n // State doesn't exist, decode terms and simulate with spent = 0\n const decodedTerms = await readContract(client, {\n address: contractAddress,\n abi: ERC20StreamingEnforcer.abi,\n functionName: 'getTermsInfo',\n args: [terms],\n });\n\n const [\n ,\n decodedInitialAmount,\n decodedMaxAmount,\n decodedAmountPerSecond,\n decodedStartTime,\n ] = decodedTerms;\n\n // Simulate using decoded terms with spent = 0\n const availableAmount = getAvailableAmount({\n initialAmount: decodedInitialAmount,\n maxAmount: decodedMaxAmount,\n amountPerSecond: decodedAmountPerSecond,\n startTime: decodedStartTime,\n spent: 0n,\n currentTimestamp,\n });\n\n return {\n availableAmount,\n };\n};\n\n/**\n * Replicates the internal _getAvailableAmount logic from the smart contract.\n *\n * @param allowance - The allowance object containing all parameters.\n * @param allowance.initialAmount - The initial amount available.\n * @param allowance.maxAmount - The maximum amount allowed.\n * @param allowance.amountPerSecond - The amount streamed per second.\n * @param allowance.startTime - The start time of the streaming.\n * @param allowance.spent - The amount already spent.\n * @param allowance.currentTimestamp - The current timestamp.\n * @returns The available amount that can be spent.\n */\nfunction getAvailableAmount(allowance: {\n initialAmount: bigint;\n maxAmount: bigint;\n amountPerSecond: bigint;\n startTime: bigint;\n spent: bigint;\n currentTimestamp: bigint;\n}): bigint {\n // If current time is before start time, nothing is available\n if (allowance.currentTimestamp < allowance.startTime) {\n return 0n;\n }\n\n // Calculate elapsed time since start\n const elapsed = allowance.currentTimestamp - allowance.startTime;\n\n // Calculate total unlocked amount\n let unlocked = allowance.initialAmount + allowance.amountPerSecond * elapsed;\n\n // Cap by max amount\n if (unlocked > allowance.maxAmount) {\n unlocked = allowance.maxAmount;\n }\n\n // If spent >= unlocked, nothing available\n if (allowance.spent >= unlocked) {\n return 0n;\n }\n\n // Return available amount\n return unlocked - allowance.spent;\n}\n","import * as read from './read';\n\nexport { read };\n","import { read as getAvailableAmount } from './methods/getAvailableAmount';\n\nexport { getAvailableAmount };\n","import { MultiTokenPeriodEnforcer } from '@metamask/delegation-abis';\nimport type { Address, Client, Hex } from 'viem';\nimport { readContract } from 'viem/actions';\n\nexport type ReadGetAvailableAmountParameters = {\n client: Client;\n contractAddress: Address;\n delegationHash: Hex;\n delegationManager: Address;\n terms: Hex;\n args: Hex;\n};\n\nexport const read = async ({\n client,\n contractAddress,\n delegationHash,\n delegationManager,\n terms,\n args,\n}: ReadGetAvailableAmountParameters) => {\n const [availableAmount, isNewPeriod, currentPeriod] = await readContract(\n client,\n {\n address: contractAddress,\n abi: MultiTokenPeriodEnforcer.abi,\n functionName: 'getAvailableAmount',\n args: [delegationHash, delegationManager, terms, args],\n },\n );\n\n return {\n availableAmount,\n isNewPeriod,\n currentPeriod,\n };\n};\n","import * as read from './read';\n\nexport { read };\n","import { read as getAvailableAmount } from './methods/getAvailableAmount';\n\nexport { getAvailableAmount };\n","import { NativeTokenPeriodTransferEnforcer } from '@metamask/delegation-abis';\nimport type { Address, Client, Hex } from 'viem';\nimport { readContract } from 'viem/actions';\n\nexport type ReadGetAvailableAmountParameters = {\n client: Client;\n contractAddress: Address;\n delegationHash: Hex;\n delegationManager: Address;\n terms: Hex;\n};\n\nexport const read = async ({\n client,\n contractAddress,\n delegationHash,\n delegationManager,\n terms,\n}: ReadGetAvailableAmountParameters) => {\n const [availableAmount, isNewPeriod, currentPeriod] = await readContract(\n client,\n {\n address: contractAddress,\n abi: NativeTokenPeriodTransferEnforcer.abi,\n functionName: 'getAvailableAmount',\n args: [delegationHash, delegationManager, terms],\n },\n );\n\n return {\n availableAmount,\n isNewPeriod,\n currentPeriod,\n };\n};\n","import * as read from './read';\n\nexport { read };\n","import { read as getAvailableAmount } from './methods/getAvailableAmount';\n\nexport { getAvailableAmount };\n","import { NativeTokenStreamingEnforcer } from '@metamask/delegation-abis';\nimport type { Address, Client, Hex } from 'viem';\nimport { readContract, getBlock } from 'viem/actions';\n\nexport type ReadGetAvailableAmountParameters = {\n client: Client;\n contractAddress: Address;\n delegationManager: Address;\n delegationHash: Hex;\n terms: Hex;\n};\n\nexport const read = async ({\n client,\n contractAddress,\n delegationManager,\n delegationHash,\n terms,\n}: ReadGetAvailableAmountParameters) => {\n // Get current block timestamp from blockchain\n const currentBlock = await getBlock(client);\n const currentTimestamp = currentBlock.timestamp;\n\n // First, get the current state from the contract\n const allowanceState = await readContract(client, {\n address: contractAddress,\n abi: NativeTokenStreamingEnforcer.abi,\n functionName: 'streamingAllowances',\n args: [delegationManager, delegationHash],\n });\n\n const [initialAmount, maxAmount, amountPerSecond, startTime, spent] =\n allowanceState;\n\n // Check if state exists (startTime != 0)\n if (startTime !== 0n) {\n // State exists, calculate available amount using the stored state\n const availableAmount = getAvailableAmount({\n initialAmount,\n maxAmount,\n amountPerSecond,\n startTime,\n spent,\n currentTimestamp,\n });\n\n return {\n availableAmount,\n };\n }\n\n // State doesn't exist, decode terms and simulate with spent = 0\n const decodedTerms = await readContract(client, {\n address: contractAddress,\n abi: NativeTokenStreamingEnforcer.abi,\n functionName: 'getTermsInfo',\n args: [terms],\n });\n\n const [\n decodedInitialAmount,\n decodedMaxAmount,\n decodedAmountPerSecond,\n decodedStartTime,\n ] = decodedTerms;\n\n // Simulate using decoded terms with spent = 0\n const availableAmount = getAvailableAmount({\n initialAmount: decodedInitialAmount,\n maxAmount: decodedMaxAmount,\n amountPerSecond: decodedAmountPerSecond,\n startTime: decodedStartTime,\n spent: 0n,\n currentTimestamp,\n });\n\n return {\n availableAmount,\n };\n};\n\n/**\n * Replicates the internal _getAvailableAmount logic from the smart contract.\n *\n * @param allowance - The allowance object containing all parameters.\n * @param allowance.initialAmount - The initial amount available.\n * @param allowance.maxAmount - The maximum amount allowed.\n * @param allowance.amountPerSecond - The amount streamed per second.\n * @param allowance.startTime - The start time of the streaming.\n * @param allowance.spent - The amount already spent.\n * @param allowance.currentTimestamp - The current timestamp.\n * @returns The available amount that can be spent.\n */\nfunction getAvailableAmount(allowance: {\n initialAmount: bigint;\n maxAmount: bigint;\n amountPerSecond: bigint;\n startTime: bigint;\n spent: bigint;\n currentTimestamp: bigint;\n}): bigint {\n // If current time is before start time, nothing is available\n if (allowance.currentTimestamp < allowance.startTime) {\n return 0n;\n }\n\n // Calculate elapsed time since start\n const elapsed = allowance.currentTimestamp - allowance.startTime;\n\n // Calculate total unlocked amount\n let unlocked = allowance.initialAmount + allowance.amountPerSecond * elapsed;\n\n // Cap by max amount\n if (unlocked > allowance.maxAmount) {\n unlocked = allowance.maxAmount;\n }\n\n // If spent >= unlocked, nothing available\n if (allowance.spent >= unlocked) {\n return 0n;\n }\n\n // Return available amount\n return unlocked - allowance.spent;\n}\n"]}