@metamask/delegation-core 1.1.0 → 2.1.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.
package/CHANGELOG.md CHANGED
@@ -7,6 +7,22 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [2.1.0]
11
+
12
+ ### Changed
13
+
14
+ - `MultiTokenPeriod`, `Erc20TokenPeriodTransfer`, and `NativeTokenPeriodTransfer` encoders now accept `periodDuration` parameter as `bigint. ([#227](https://github.com/MetaMask/smart-accounts-kit/pull/227))
15
+
16
+ ## [2.0.0]
17
+
18
+ ### Added
19
+
20
+ - Encoding and decoding utils for `LogicalOrWrapper` enforcer args and terms ([#219](https://github.com/metamask/smart-accounts-kit/pull/219))
21
+
22
+ ### Changed
23
+
24
+ - **Breaking** Balance change type enforcers now use `BalanceChangeType` enum instead of number type ([#205](https://github.com/metamask/smart-accounts-kit/pull/205))
25
+
10
26
  ## [1.1.0]
11
27
 
12
28
  ### Added
@@ -90,7 +106,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
90
106
 
91
107
  - Add @metamask/delegation-core package, providing utility types, delegation hashing, and terms encoding for a limited set of caveat enforcers.
92
108
 
93
- [Unreleased]: https://github.com/metamask/smart-accounts-kit/compare/@metamask/delegation-core@1.1.0...HEAD
109
+ [Unreleased]: https://github.com/metamask/smart-accounts-kit/compare/@metamask/delegation-core@2.1.0...HEAD
110
+ [2.1.0]: https://github.com/metamask/smart-accounts-kit/compare/@metamask/delegation-core@2.0.0...@metamask/delegation-core@2.1.0
111
+ [2.0.0]: https://github.com/metamask/smart-accounts-kit/compare/@metamask/delegation-core@1.1.0...@metamask/delegation-core@2.0.0
94
112
  [1.1.0]: https://github.com/metamask/smart-accounts-kit/compare/@metamask/delegation-core@1.0.0...@metamask/delegation-core@1.1.0
95
113
  [1.0.0]: https://github.com/metamask/smart-accounts-kit/compare/@metamask/delegation-core@0.4.0...@metamask/delegation-core@1.0.0
96
114
  [0.4.0]: https://github.com/metamask/smart-accounts-kit/compare/@metamask/delegation-core@0.3.0...@metamask/delegation-core@0.4.0
package/dist/index.cjs CHANGED
@@ -1,4 +1,11 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});// src/internalUtils.ts
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }// src/caveats/types.ts
2
+ var BalanceChangeType = /* @__PURE__ */ ((BalanceChangeType2) => {
3
+ BalanceChangeType2[BalanceChangeType2["Increase"] = 0] = "Increase";
4
+ BalanceChangeType2[BalanceChangeType2["Decrease"] = 1] = "Decrease";
5
+ return BalanceChangeType2;
6
+ })(BalanceChangeType || {});
7
+
8
+ // src/internalUtils.ts
2
9
 
3
10
 
4
11
 
@@ -467,7 +474,7 @@ function decodeNativeTokenPaymentTerms(terms, encodingOptions = defaultOptions)
467
474
 
468
475
  // src/caveats/nativeBalanceChange.ts
469
476
  function createNativeBalanceChangeTerms(terms, encodingOptions = defaultOptions) {
470
- const { recipient, balance, changeType: changeTypeNumber } = terms;
477
+ const { recipient, balance, changeType } = terms;
471
478
  const recipientHex = normalizeAddressLowercase(
472
479
  recipient,
473
480
  "Invalid recipient: must be a valid Address"
@@ -475,7 +482,6 @@ function createNativeBalanceChangeTerms(terms, encodingOptions = defaultOptions)
475
482
  if (balance <= 0n) {
476
483
  throw new Error("Invalid balance: must be a positive number");
477
484
  }
478
- const changeType = changeTypeNumber;
479
485
  if (changeType !== 0 /* Increase */ && changeType !== 1 /* Decrease */) {
480
486
  throw new Error("Invalid changeType: must be either Increase or Decrease");
481
487
  }
@@ -653,12 +659,7 @@ function decodeERC20TransferAmountTerms(terms, encodingOptions = defaultOptions)
653
659
 
654
660
  // src/caveats/erc20BalanceChange.ts
655
661
  function createERC20BalanceChangeTerms(terms, encodingOptions = defaultOptions) {
656
- const {
657
- tokenAddress,
658
- recipient,
659
- balance,
660
- changeType: changeTypeNumber
661
- } = terms;
662
+ const { tokenAddress, recipient, balance, changeType } = terms;
662
663
  const tokenAddressHex = normalizeAddressLowercase(
663
664
  tokenAddress,
664
665
  "Invalid tokenAddress: must be a valid address"
@@ -670,7 +671,6 @@ function createERC20BalanceChangeTerms(terms, encodingOptions = defaultOptions)
670
671
  if (balance <= 0n) {
671
672
  throw new Error("Invalid balance: must be a positive number");
672
673
  }
673
- const changeType = changeTypeNumber;
674
674
  if (changeType !== 0 /* Increase */ && changeType !== 1 /* Decrease */) {
675
675
  throw new Error("Invalid changeType: must be either Increase or Decrease");
676
676
  }
@@ -705,12 +705,7 @@ function decodeERC20BalanceChangeTerms(terms, encodingOptions = defaultOptions)
705
705
 
706
706
  // src/caveats/erc721BalanceChange.ts
707
707
  function createERC721BalanceChangeTerms(terms, encodingOptions = defaultOptions) {
708
- const {
709
- tokenAddress,
710
- recipient,
711
- amount,
712
- changeType: changeTypeNumber
713
- } = terms;
708
+ const { tokenAddress, recipient, amount, changeType } = terms;
714
709
  const tokenAddressHex = normalizeAddressLowercase(
715
710
  tokenAddress,
716
711
  "Invalid tokenAddress: must be a valid address"
@@ -722,7 +717,6 @@ function createERC721BalanceChangeTerms(terms, encodingOptions = defaultOptions)
722
717
  if (amount <= 0n) {
723
718
  throw new Error("Invalid balance: must be a positive number");
724
719
  }
725
- const changeType = changeTypeNumber;
726
720
  if (changeType !== 0 /* Increase */ && changeType !== 1 /* Decrease */) {
727
721
  throw new Error("Invalid changeType: must be either Increase or Decrease");
728
722
  }
@@ -786,13 +780,7 @@ function decodeERC721TransferTerms(terms, encodingOptions = defaultOptions) {
786
780
 
787
781
  // src/caveats/erc1155BalanceChange.ts
788
782
  function createERC1155BalanceChangeTerms(terms, encodingOptions = defaultOptions) {
789
- const {
790
- tokenAddress,
791
- recipient,
792
- tokenId,
793
- balance,
794
- changeType: changeTypeNumber
795
- } = terms;
783
+ const { tokenAddress, recipient, tokenId, balance, changeType } = terms;
796
784
  const tokenAddressHex = normalizeAddressLowercase(
797
785
  tokenAddress,
798
786
  "Invalid tokenAddress: must be a valid address"
@@ -807,7 +795,6 @@ function createERC1155BalanceChangeTerms(terms, encodingOptions = defaultOptions
807
795
  if (tokenId < 0n) {
808
796
  throw new Error("Invalid tokenId: must be a non-negative number");
809
797
  }
810
- const changeType = changeTypeNumber;
811
798
  if (changeType !== 0 /* Increase */ && changeType !== 1 /* Decrease */) {
812
799
  throw new Error("Invalid changeType: must be either Increase or Decrease");
813
800
  }
@@ -1311,6 +1298,85 @@ function decodeSpecificActionERC20TransferBatchTerms(terms, encodingOptions = de
1311
1298
  };
1312
1299
  }
1313
1300
 
1301
+ // src/caveats/logicalOrWrapper.ts
1302
+
1303
+
1304
+ var CAVEAT_GROUPS_ABI = "((address,bytes,bytes)[])[]";
1305
+ var SELECTED_GROUP_ABI = "(uint256,bytes[])";
1306
+ function assertValidCaveatGroups(groups) {
1307
+ if (!_optionalChain([groups, 'optionalAccess', _ => _.length])) {
1308
+ throw new Error(
1309
+ "Invalid caveatGroups: must provide at least one caveat group"
1310
+ );
1311
+ }
1312
+ for (let i = 0; i < groups.length; i++) {
1313
+ const group = groups[i];
1314
+ if (!_optionalChain([group, 'optionalAccess', _2 => _2.length])) {
1315
+ throw new Error(
1316
+ `Invalid caveatGroups: group at index ${i} must contain at least one caveat`
1317
+ );
1318
+ }
1319
+ }
1320
+ }
1321
+ function normalizeCaveatTuple(caveat) {
1322
+ return [
1323
+ normalizeAddress(
1324
+ caveat.enforcer,
1325
+ "Invalid enforcer: must be a valid address"
1326
+ ),
1327
+ normalizeHex(caveat.terms, "Invalid terms: must be a valid hex string"),
1328
+ normalizeHex(caveat.args, "Invalid args: must be a valid hex string")
1329
+ ];
1330
+ }
1331
+ function encodeCaveatGroupTuple(group) {
1332
+ return [group.map(normalizeCaveatTuple)];
1333
+ }
1334
+ function createLogicalOrWrapperTerms(terms, encodingOptions = defaultOptions) {
1335
+ assertValidCaveatGroups(terms.caveatGroups);
1336
+ const encodableGroups = terms.caveatGroups.map(encodeCaveatGroupTuple);
1337
+ const hexValue = _abiutils.encodeSingle.call(void 0, CAVEAT_GROUPS_ABI, encodableGroups);
1338
+ return prepareResult(hexValue, encodingOptions);
1339
+ }
1340
+ function decodeLogicalOrWrapperTerms(terms, encodingOptions = defaultOptions) {
1341
+ const hexTerms = bytesLikeToHex(terms);
1342
+ const decoded = _abiutils.decodeSingle.call(void 0,
1343
+ CAVEAT_GROUPS_ABI,
1344
+ hexTerms
1345
+ );
1346
+ const caveatGroups = decoded.map(
1347
+ ([caveats]) => caveats.map(([enforcer, caveatTerms, args]) => ({
1348
+ enforcer: prepareResult(enforcer, encodingOptions),
1349
+ terms: prepareResult(_utils.bytesToHex.call(void 0, caveatTerms), encodingOptions),
1350
+ args: prepareResult(_utils.bytesToHex.call(void 0, args), encodingOptions)
1351
+ }))
1352
+ );
1353
+ return { caveatGroups };
1354
+ }
1355
+ function createLogicalOrWrapperArgs(args, encodingOptions = defaultOptions) {
1356
+ if (args.groupIndex < 0n) {
1357
+ throw new Error("Invalid groupIndex: must be a non-negative number");
1358
+ }
1359
+ const caveatArgsHex = args.caveatArgs.map(
1360
+ (arg) => normalizeHex(arg, "Invalid caveatArgs: must be valid hex strings")
1361
+ );
1362
+ const hexValue = _abiutils.encodeSingle.call(void 0, SELECTED_GROUP_ABI, [
1363
+ args.groupIndex,
1364
+ caveatArgsHex
1365
+ ]);
1366
+ return prepareResult(hexValue, encodingOptions);
1367
+ }
1368
+ function decodeLogicalOrWrapperArgs(args, encodingOptions = defaultOptions) {
1369
+ const hexArgs = bytesLikeToHex(args);
1370
+ const [groupIndex, caveatArgsRaw] = _abiutils.decodeSingle.call(void 0,
1371
+ SELECTED_GROUP_ABI,
1372
+ hexArgs
1373
+ );
1374
+ const caveatArgs = caveatArgsRaw.map(
1375
+ (arg) => prepareResult(_utils.bytesToHex.call(void 0, arg), encodingOptions)
1376
+ );
1377
+ return { groupIndex, caveatArgs };
1378
+ }
1379
+
1314
1380
  // src/delegation.ts
1315
1381
 
1316
1382
 
@@ -1510,5 +1576,10 @@ function getCaveatHash(caveat) {
1510
1576
 
1511
1577
 
1512
1578
 
1513
- exports.ANY_BENEFICIARY = ANY_BENEFICIARY; exports.CAVEAT_TYPEHASH = CAVEAT_TYPEHASH; exports.DELEGATION_TYPEHASH = DELEGATION_TYPEHASH; exports.ROOT_AUTHORITY = ROOT_AUTHORITY; exports.createAllowedCalldataTerms = createAllowedCalldataTerms; exports.createAllowedMethodsTerms = createAllowedMethodsTerms; exports.createAllowedTargetsTerms = createAllowedTargetsTerms; exports.createArgsEqualityCheckTerms = createArgsEqualityCheckTerms; exports.createBlockNumberTerms = createBlockNumberTerms; exports.createDeployedTerms = createDeployedTerms; exports.createERC1155BalanceChangeTerms = createERC1155BalanceChangeTerms; exports.createERC20BalanceChangeTerms = createERC20BalanceChangeTerms; exports.createERC20StreamingTerms = createERC20StreamingTerms; exports.createERC20TokenPeriodTransferTerms = createERC20TokenPeriodTransferTerms; exports.createERC20TransferAmountTerms = createERC20TransferAmountTerms; exports.createERC721BalanceChangeTerms = createERC721BalanceChangeTerms; exports.createERC721TransferTerms = createERC721TransferTerms; exports.createExactCalldataBatchTerms = createExactCalldataBatchTerms; exports.createExactCalldataTerms = createExactCalldataTerms; exports.createExactExecutionBatchTerms = createExactExecutionBatchTerms; exports.createExactExecutionTerms = createExactExecutionTerms; exports.createIdTerms = createIdTerms; exports.createLimitedCallsTerms = createLimitedCallsTerms; exports.createMultiTokenPeriodTerms = createMultiTokenPeriodTerms; exports.createNativeBalanceChangeTerms = createNativeBalanceChangeTerms; exports.createNativeTokenPaymentTerms = createNativeTokenPaymentTerms; exports.createNativeTokenPeriodTransferTerms = createNativeTokenPeriodTransferTerms; exports.createNativeTokenStreamingTerms = createNativeTokenStreamingTerms; exports.createNativeTokenTransferAmountTerms = createNativeTokenTransferAmountTerms; exports.createNonceTerms = createNonceTerms; exports.createOwnershipTransferTerms = createOwnershipTransferTerms; exports.createRedeemerTerms = createRedeemerTerms; exports.createSpecificActionERC20TransferBatchTerms = createSpecificActionERC20TransferBatchTerms; exports.createTimestampTerms = createTimestampTerms; exports.createValueLteTerms = createValueLteTerms; exports.decodeAllowedCalldataTerms = decodeAllowedCalldataTerms; exports.decodeAllowedMethodsTerms = decodeAllowedMethodsTerms; exports.decodeAllowedTargetsTerms = decodeAllowedTargetsTerms; exports.decodeArgsEqualityCheckTerms = decodeArgsEqualityCheckTerms; exports.decodeBlockNumberTerms = decodeBlockNumberTerms; exports.decodeDelegation = decodeDelegation; exports.decodeDelegations = decodeDelegations; exports.decodeDeployedTerms = decodeDeployedTerms; exports.decodeERC1155BalanceChangeTerms = decodeERC1155BalanceChangeTerms; exports.decodeERC20BalanceChangeTerms = decodeERC20BalanceChangeTerms; exports.decodeERC20StreamingTerms = decodeERC20StreamingTerms; exports.decodeERC20TokenPeriodTransferTerms = decodeERC20TokenPeriodTransferTerms; exports.decodeERC20TransferAmountTerms = decodeERC20TransferAmountTerms; exports.decodeERC721BalanceChangeTerms = decodeERC721BalanceChangeTerms; exports.decodeERC721TransferTerms = decodeERC721TransferTerms; exports.decodeExactCalldataBatchTerms = decodeExactCalldataBatchTerms; exports.decodeExactCalldataTerms = decodeExactCalldataTerms; exports.decodeExactExecutionBatchTerms = decodeExactExecutionBatchTerms; exports.decodeExactExecutionTerms = decodeExactExecutionTerms; exports.decodeIdTerms = decodeIdTerms; exports.decodeLimitedCallsTerms = decodeLimitedCallsTerms; exports.decodeMultiTokenPeriodTerms = decodeMultiTokenPeriodTerms; exports.decodeNativeBalanceChangeTerms = decodeNativeBalanceChangeTerms; exports.decodeNativeTokenPaymentTerms = decodeNativeTokenPaymentTerms; exports.decodeNativeTokenPeriodTransferTerms = decodeNativeTokenPeriodTransferTerms; exports.decodeNativeTokenStreamingTerms = decodeNativeTokenStreamingTerms; exports.decodeNativeTokenTransferAmountTerms = decodeNativeTokenTransferAmountTerms; exports.decodeNonceTerms = decodeNonceTerms; exports.decodeOwnershipTransferTerms = decodeOwnershipTransferTerms; exports.decodeRedeemerTerms = decodeRedeemerTerms; exports.decodeSpecificActionERC20TransferBatchTerms = decodeSpecificActionERC20TransferBatchTerms; exports.decodeTimestampTerms = decodeTimestampTerms; exports.decodeValueLteTerms = decodeValueLteTerms; exports.encodeDelegation = encodeDelegation; exports.encodeDelegations = encodeDelegations; exports.hashDelegation = hashDelegation;
1579
+
1580
+
1581
+
1582
+
1583
+
1584
+ exports.ANY_BENEFICIARY = ANY_BENEFICIARY; exports.BalanceChangeType = BalanceChangeType; exports.CAVEAT_TYPEHASH = CAVEAT_TYPEHASH; exports.DELEGATION_TYPEHASH = DELEGATION_TYPEHASH; exports.ROOT_AUTHORITY = ROOT_AUTHORITY; exports.createAllowedCalldataTerms = createAllowedCalldataTerms; exports.createAllowedMethodsTerms = createAllowedMethodsTerms; exports.createAllowedTargetsTerms = createAllowedTargetsTerms; exports.createArgsEqualityCheckTerms = createArgsEqualityCheckTerms; exports.createBlockNumberTerms = createBlockNumberTerms; exports.createDeployedTerms = createDeployedTerms; exports.createERC1155BalanceChangeTerms = createERC1155BalanceChangeTerms; exports.createERC20BalanceChangeTerms = createERC20BalanceChangeTerms; exports.createERC20StreamingTerms = createERC20StreamingTerms; exports.createERC20TokenPeriodTransferTerms = createERC20TokenPeriodTransferTerms; exports.createERC20TransferAmountTerms = createERC20TransferAmountTerms; exports.createERC721BalanceChangeTerms = createERC721BalanceChangeTerms; exports.createERC721TransferTerms = createERC721TransferTerms; exports.createExactCalldataBatchTerms = createExactCalldataBatchTerms; exports.createExactCalldataTerms = createExactCalldataTerms; exports.createExactExecutionBatchTerms = createExactExecutionBatchTerms; exports.createExactExecutionTerms = createExactExecutionTerms; exports.createIdTerms = createIdTerms; exports.createLimitedCallsTerms = createLimitedCallsTerms; exports.createLogicalOrWrapperArgs = createLogicalOrWrapperArgs; exports.createLogicalOrWrapperTerms = createLogicalOrWrapperTerms; exports.createMultiTokenPeriodTerms = createMultiTokenPeriodTerms; exports.createNativeBalanceChangeTerms = createNativeBalanceChangeTerms; exports.createNativeTokenPaymentTerms = createNativeTokenPaymentTerms; exports.createNativeTokenPeriodTransferTerms = createNativeTokenPeriodTransferTerms; exports.createNativeTokenStreamingTerms = createNativeTokenStreamingTerms; exports.createNativeTokenTransferAmountTerms = createNativeTokenTransferAmountTerms; exports.createNonceTerms = createNonceTerms; exports.createOwnershipTransferTerms = createOwnershipTransferTerms; exports.createRedeemerTerms = createRedeemerTerms; exports.createSpecificActionERC20TransferBatchTerms = createSpecificActionERC20TransferBatchTerms; exports.createTimestampTerms = createTimestampTerms; exports.createValueLteTerms = createValueLteTerms; exports.decodeAllowedCalldataTerms = decodeAllowedCalldataTerms; exports.decodeAllowedMethodsTerms = decodeAllowedMethodsTerms; exports.decodeAllowedTargetsTerms = decodeAllowedTargetsTerms; exports.decodeArgsEqualityCheckTerms = decodeArgsEqualityCheckTerms; exports.decodeBlockNumberTerms = decodeBlockNumberTerms; exports.decodeDelegation = decodeDelegation; exports.decodeDelegations = decodeDelegations; exports.decodeDeployedTerms = decodeDeployedTerms; exports.decodeERC1155BalanceChangeTerms = decodeERC1155BalanceChangeTerms; exports.decodeERC20BalanceChangeTerms = decodeERC20BalanceChangeTerms; exports.decodeERC20StreamingTerms = decodeERC20StreamingTerms; exports.decodeERC20TokenPeriodTransferTerms = decodeERC20TokenPeriodTransferTerms; exports.decodeERC20TransferAmountTerms = decodeERC20TransferAmountTerms; exports.decodeERC721BalanceChangeTerms = decodeERC721BalanceChangeTerms; exports.decodeERC721TransferTerms = decodeERC721TransferTerms; exports.decodeExactCalldataBatchTerms = decodeExactCalldataBatchTerms; exports.decodeExactCalldataTerms = decodeExactCalldataTerms; exports.decodeExactExecutionBatchTerms = decodeExactExecutionBatchTerms; exports.decodeExactExecutionTerms = decodeExactExecutionTerms; exports.decodeIdTerms = decodeIdTerms; exports.decodeLimitedCallsTerms = decodeLimitedCallsTerms; exports.decodeLogicalOrWrapperArgs = decodeLogicalOrWrapperArgs; exports.decodeLogicalOrWrapperTerms = decodeLogicalOrWrapperTerms; exports.decodeMultiTokenPeriodTerms = decodeMultiTokenPeriodTerms; exports.decodeNativeBalanceChangeTerms = decodeNativeBalanceChangeTerms; exports.decodeNativeTokenPaymentTerms = decodeNativeTokenPaymentTerms; exports.decodeNativeTokenPeriodTransferTerms = decodeNativeTokenPeriodTransferTerms; exports.decodeNativeTokenStreamingTerms = decodeNativeTokenStreamingTerms; exports.decodeNativeTokenTransferAmountTerms = decodeNativeTokenTransferAmountTerms; exports.decodeNonceTerms = decodeNonceTerms; exports.decodeOwnershipTransferTerms = decodeOwnershipTransferTerms; exports.decodeRedeemerTerms = decodeRedeemerTerms; exports.decodeSpecificActionERC20TransferBatchTerms = decodeSpecificActionERC20TransferBatchTerms; exports.decodeTimestampTerms = decodeTimestampTerms; exports.decodeValueLteTerms = decodeValueLteTerms; exports.encodeDelegation = encodeDelegation; exports.encodeDelegations = encodeDelegations; exports.hashDelegation = hashDelegation;
1514
1585
  //# sourceMappingURL=index.cjs.map