@metamask/delegation-core 2.1.0 → 2.2.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/dist/index.d.cts CHANGED
@@ -239,6 +239,18 @@ declare function createAllowedTargetsTerms(terms: AllowedTargetsTerms, encodingO
239
239
  declare function decodeAllowedTargetsTerms(terms: BytesLike, encodingOptions?: EncodingOptions<'hex'>): AllowedTargetsTerms<DecodedBytesLike<'hex'>>;
240
240
  declare function decodeAllowedTargetsTerms(terms: BytesLike, encodingOptions: EncodingOptions<'bytes'>): AllowedTargetsTerms<DecodedBytesLike<'bytes'>>;
241
241
 
242
+ type ApprovalRevocationTerms = {
243
+ erc20Approve: boolean;
244
+ erc721Approve: boolean;
245
+ erc721SetApprovalForAll: boolean;
246
+ permit2ApproveZero: boolean;
247
+ permit2Lockdown: boolean;
248
+ permit2InvalidateNonces: boolean;
249
+ };
250
+ declare function createApprovalRevocationTerms(terms: ApprovalRevocationTerms, encodingOptions?: EncodingOptions<'hex'>): Hex;
251
+ declare function createApprovalRevocationTerms(terms: ApprovalRevocationTerms, encodingOptions: EncodingOptions<'bytes'>): Uint8Array;
252
+ declare function decodeApprovalRevocationTerms(terms: BytesLike): ApprovalRevocationTerms;
253
+
242
254
  type ArgsEqualityCheckTerms<TBytesLike extends BytesLike = BytesLike> = {
243
255
  args: TBytesLike;
244
256
  };
@@ -352,4 +364,4 @@ declare function decodeDelegation(encoded: BytesLike, options: EncodingOptions<'
352
364
  declare function hashDelegation(delegation: DelegationStruct, options?: EncodingOptions<'hex'>): Hex;
353
365
  declare function hashDelegation(delegation: DelegationStruct, options: EncodingOptions<'bytes'>): Uint8Array;
354
366
 
355
- export { ANY_BENEFICIARY, BalanceChangeType, CAVEAT_TYPEHASH, type CaveatStruct as Caveat, DELEGATION_TYPEHASH, type DelegationStruct as Delegation, ROOT_AUTHORITY, createAllowedCalldataTerms, createAllowedMethodsTerms, createAllowedTargetsTerms, createArgsEqualityCheckTerms, createBlockNumberTerms, createDeployedTerms, createERC1155BalanceChangeTerms, createERC20BalanceChangeTerms, createERC20StreamingTerms, createERC20TokenPeriodTransferTerms, createERC20TransferAmountTerms, createERC721BalanceChangeTerms, createERC721TransferTerms, createExactCalldataBatchTerms, createExactCalldataTerms, createExactExecutionBatchTerms, createExactExecutionTerms, createIdTerms, createLimitedCallsTerms, createLogicalOrWrapperArgs, createLogicalOrWrapperTerms, createMultiTokenPeriodTerms, createNativeBalanceChangeTerms, createNativeTokenPaymentTerms, createNativeTokenPeriodTransferTerms, createNativeTokenStreamingTerms, createNativeTokenTransferAmountTerms, createNonceTerms, createOwnershipTransferTerms, createRedeemerTerms, createSpecificActionERC20TransferBatchTerms, createTimestampTerms, createValueLteTerms, decodeAllowedCalldataTerms, decodeAllowedMethodsTerms, decodeAllowedTargetsTerms, decodeArgsEqualityCheckTerms, decodeBlockNumberTerms, decodeDelegation, decodeDelegations, decodeDeployedTerms, decodeERC1155BalanceChangeTerms, decodeERC20BalanceChangeTerms, decodeERC20StreamingTerms, decodeERC20TokenPeriodTransferTerms, decodeERC20TransferAmountTerms, decodeERC721BalanceChangeTerms, decodeERC721TransferTerms, decodeExactCalldataBatchTerms, decodeExactCalldataTerms, decodeExactExecutionBatchTerms, decodeExactExecutionTerms, decodeIdTerms, decodeLimitedCallsTerms, decodeLogicalOrWrapperArgs, decodeLogicalOrWrapperTerms, decodeMultiTokenPeriodTerms, decodeNativeBalanceChangeTerms, decodeNativeTokenPaymentTerms, decodeNativeTokenPeriodTransferTerms, decodeNativeTokenStreamingTerms, decodeNativeTokenTransferAmountTerms, decodeNonceTerms, decodeOwnershipTransferTerms, decodeRedeemerTerms, decodeSpecificActionERC20TransferBatchTerms, decodeTimestampTerms, decodeValueLteTerms, encodeDelegation, encodeDelegations, hashDelegation };
367
+ export { ANY_BENEFICIARY, type ApprovalRevocationTerms, BalanceChangeType, CAVEAT_TYPEHASH, type CaveatStruct as Caveat, DELEGATION_TYPEHASH, type DelegationStruct as Delegation, ROOT_AUTHORITY, createAllowedCalldataTerms, createAllowedMethodsTerms, createAllowedTargetsTerms, createApprovalRevocationTerms, createArgsEqualityCheckTerms, createBlockNumberTerms, createDeployedTerms, createERC1155BalanceChangeTerms, createERC20BalanceChangeTerms, createERC20StreamingTerms, createERC20TokenPeriodTransferTerms, createERC20TransferAmountTerms, createERC721BalanceChangeTerms, createERC721TransferTerms, createExactCalldataBatchTerms, createExactCalldataTerms, createExactExecutionBatchTerms, createExactExecutionTerms, createIdTerms, createLimitedCallsTerms, createLogicalOrWrapperArgs, createLogicalOrWrapperTerms, createMultiTokenPeriodTerms, createNativeBalanceChangeTerms, createNativeTokenPaymentTerms, createNativeTokenPeriodTransferTerms, createNativeTokenStreamingTerms, createNativeTokenTransferAmountTerms, createNonceTerms, createOwnershipTransferTerms, createRedeemerTerms, createSpecificActionERC20TransferBatchTerms, createTimestampTerms, createValueLteTerms, decodeAllowedCalldataTerms, decodeAllowedMethodsTerms, decodeAllowedTargetsTerms, decodeApprovalRevocationTerms, decodeArgsEqualityCheckTerms, decodeBlockNumberTerms, decodeDelegation, decodeDelegations, decodeDeployedTerms, decodeERC1155BalanceChangeTerms, decodeERC20BalanceChangeTerms, decodeERC20StreamingTerms, decodeERC20TokenPeriodTransferTerms, decodeERC20TransferAmountTerms, decodeERC721BalanceChangeTerms, decodeERC721TransferTerms, decodeExactCalldataBatchTerms, decodeExactCalldataTerms, decodeExactExecutionBatchTerms, decodeExactExecutionTerms, decodeIdTerms, decodeLimitedCallsTerms, decodeLogicalOrWrapperArgs, decodeLogicalOrWrapperTerms, decodeMultiTokenPeriodTerms, decodeNativeBalanceChangeTerms, decodeNativeTokenPaymentTerms, decodeNativeTokenPeriodTransferTerms, decodeNativeTokenStreamingTerms, decodeNativeTokenTransferAmountTerms, decodeNonceTerms, decodeOwnershipTransferTerms, decodeRedeemerTerms, decodeSpecificActionERC20TransferBatchTerms, decodeTimestampTerms, decodeValueLteTerms, encodeDelegation, encodeDelegations, hashDelegation };
package/dist/index.d.ts CHANGED
@@ -239,6 +239,18 @@ declare function createAllowedTargetsTerms(terms: AllowedTargetsTerms, encodingO
239
239
  declare function decodeAllowedTargetsTerms(terms: BytesLike, encodingOptions?: EncodingOptions<'hex'>): AllowedTargetsTerms<DecodedBytesLike<'hex'>>;
240
240
  declare function decodeAllowedTargetsTerms(terms: BytesLike, encodingOptions: EncodingOptions<'bytes'>): AllowedTargetsTerms<DecodedBytesLike<'bytes'>>;
241
241
 
242
+ type ApprovalRevocationTerms = {
243
+ erc20Approve: boolean;
244
+ erc721Approve: boolean;
245
+ erc721SetApprovalForAll: boolean;
246
+ permit2ApproveZero: boolean;
247
+ permit2Lockdown: boolean;
248
+ permit2InvalidateNonces: boolean;
249
+ };
250
+ declare function createApprovalRevocationTerms(terms: ApprovalRevocationTerms, encodingOptions?: EncodingOptions<'hex'>): Hex;
251
+ declare function createApprovalRevocationTerms(terms: ApprovalRevocationTerms, encodingOptions: EncodingOptions<'bytes'>): Uint8Array;
252
+ declare function decodeApprovalRevocationTerms(terms: BytesLike): ApprovalRevocationTerms;
253
+
242
254
  type ArgsEqualityCheckTerms<TBytesLike extends BytesLike = BytesLike> = {
243
255
  args: TBytesLike;
244
256
  };
@@ -352,4 +364,4 @@ declare function decodeDelegation(encoded: BytesLike, options: EncodingOptions<'
352
364
  declare function hashDelegation(delegation: DelegationStruct, options?: EncodingOptions<'hex'>): Hex;
353
365
  declare function hashDelegation(delegation: DelegationStruct, options: EncodingOptions<'bytes'>): Uint8Array;
354
366
 
355
- export { ANY_BENEFICIARY, BalanceChangeType, CAVEAT_TYPEHASH, type CaveatStruct as Caveat, DELEGATION_TYPEHASH, type DelegationStruct as Delegation, ROOT_AUTHORITY, createAllowedCalldataTerms, createAllowedMethodsTerms, createAllowedTargetsTerms, createArgsEqualityCheckTerms, createBlockNumberTerms, createDeployedTerms, createERC1155BalanceChangeTerms, createERC20BalanceChangeTerms, createERC20StreamingTerms, createERC20TokenPeriodTransferTerms, createERC20TransferAmountTerms, createERC721BalanceChangeTerms, createERC721TransferTerms, createExactCalldataBatchTerms, createExactCalldataTerms, createExactExecutionBatchTerms, createExactExecutionTerms, createIdTerms, createLimitedCallsTerms, createLogicalOrWrapperArgs, createLogicalOrWrapperTerms, createMultiTokenPeriodTerms, createNativeBalanceChangeTerms, createNativeTokenPaymentTerms, createNativeTokenPeriodTransferTerms, createNativeTokenStreamingTerms, createNativeTokenTransferAmountTerms, createNonceTerms, createOwnershipTransferTerms, createRedeemerTerms, createSpecificActionERC20TransferBatchTerms, createTimestampTerms, createValueLteTerms, decodeAllowedCalldataTerms, decodeAllowedMethodsTerms, decodeAllowedTargetsTerms, decodeArgsEqualityCheckTerms, decodeBlockNumberTerms, decodeDelegation, decodeDelegations, decodeDeployedTerms, decodeERC1155BalanceChangeTerms, decodeERC20BalanceChangeTerms, decodeERC20StreamingTerms, decodeERC20TokenPeriodTransferTerms, decodeERC20TransferAmountTerms, decodeERC721BalanceChangeTerms, decodeERC721TransferTerms, decodeExactCalldataBatchTerms, decodeExactCalldataTerms, decodeExactExecutionBatchTerms, decodeExactExecutionTerms, decodeIdTerms, decodeLimitedCallsTerms, decodeLogicalOrWrapperArgs, decodeLogicalOrWrapperTerms, decodeMultiTokenPeriodTerms, decodeNativeBalanceChangeTerms, decodeNativeTokenPaymentTerms, decodeNativeTokenPeriodTransferTerms, decodeNativeTokenStreamingTerms, decodeNativeTokenTransferAmountTerms, decodeNonceTerms, decodeOwnershipTransferTerms, decodeRedeemerTerms, decodeSpecificActionERC20TransferBatchTerms, decodeTimestampTerms, decodeValueLteTerms, encodeDelegation, encodeDelegations, hashDelegation };
367
+ export { ANY_BENEFICIARY, type ApprovalRevocationTerms, BalanceChangeType, CAVEAT_TYPEHASH, type CaveatStruct as Caveat, DELEGATION_TYPEHASH, type DelegationStruct as Delegation, ROOT_AUTHORITY, createAllowedCalldataTerms, createAllowedMethodsTerms, createAllowedTargetsTerms, createApprovalRevocationTerms, createArgsEqualityCheckTerms, createBlockNumberTerms, createDeployedTerms, createERC1155BalanceChangeTerms, createERC20BalanceChangeTerms, createERC20StreamingTerms, createERC20TokenPeriodTransferTerms, createERC20TransferAmountTerms, createERC721BalanceChangeTerms, createERC721TransferTerms, createExactCalldataBatchTerms, createExactCalldataTerms, createExactExecutionBatchTerms, createExactExecutionTerms, createIdTerms, createLimitedCallsTerms, createLogicalOrWrapperArgs, createLogicalOrWrapperTerms, createMultiTokenPeriodTerms, createNativeBalanceChangeTerms, createNativeTokenPaymentTerms, createNativeTokenPeriodTransferTerms, createNativeTokenStreamingTerms, createNativeTokenTransferAmountTerms, createNonceTerms, createOwnershipTransferTerms, createRedeemerTerms, createSpecificActionERC20TransferBatchTerms, createTimestampTerms, createValueLteTerms, decodeAllowedCalldataTerms, decodeAllowedMethodsTerms, decodeAllowedTargetsTerms, decodeApprovalRevocationTerms, decodeArgsEqualityCheckTerms, decodeBlockNumberTerms, decodeDelegation, decodeDelegations, decodeDeployedTerms, decodeERC1155BalanceChangeTerms, decodeERC20BalanceChangeTerms, decodeERC20StreamingTerms, decodeERC20TokenPeriodTransferTerms, decodeERC20TransferAmountTerms, decodeERC721BalanceChangeTerms, decodeERC721TransferTerms, decodeExactCalldataBatchTerms, decodeExactCalldataTerms, decodeExactExecutionBatchTerms, decodeExactExecutionTerms, decodeIdTerms, decodeLimitedCallsTerms, decodeLogicalOrWrapperArgs, decodeLogicalOrWrapperTerms, decodeMultiTokenPeriodTerms, decodeNativeBalanceChangeTerms, decodeNativeTokenPaymentTerms, decodeNativeTokenPeriodTransferTerms, decodeNativeTokenStreamingTerms, decodeNativeTokenTransferAmountTerms, decodeNonceTerms, decodeOwnershipTransferTerms, decodeRedeemerTerms, decodeSpecificActionERC20TransferBatchTerms, decodeTimestampTerms, decodeValueLteTerms, encodeDelegation, encodeDelegations, hashDelegation };
package/dist/index.mjs CHANGED
@@ -975,6 +975,74 @@ function decodeAllowedTargetsTerms(terms, encodingOptions = defaultOptions) {
975
975
  return { targets };
976
976
  }
977
977
 
978
+ // src/caveats/approvalRevocationEnforcer.ts
979
+ var BIT_ERC20_APPROVE_ZERO = 1;
980
+ var BIT_ERC721_PER_TOKEN_CLEAR = 2;
981
+ var BIT_SET_APPROVAL_FOR_ALL_REVOKE = 4;
982
+ var BIT_PERMIT2_APPROVE_ZERO = 8;
983
+ var BIT_PERMIT2_LOCKDOWN = 16;
984
+ var BIT_PERMIT2_INVALIDATE_NONCES = 32;
985
+ var ALLOWED_APPROVAL_REVOCATION_MAX_MASK = BIT_ERC20_APPROVE_ZERO | BIT_ERC721_PER_TOKEN_CLEAR | BIT_SET_APPROVAL_FOR_ALL_REVOKE | BIT_PERMIT2_APPROVE_ZERO | BIT_PERMIT2_LOCKDOWN | BIT_PERMIT2_INVALIDATE_NONCES;
986
+ var NO_FLAGS_SET_ERROR = "Invalid ApprovalRevocation terms: at least one revocation primitive must be enabled";
987
+ function termsToMask(terms) {
988
+ let mask = 0;
989
+ if (terms.erc20Approve) {
990
+ mask |= BIT_ERC20_APPROVE_ZERO;
991
+ }
992
+ if (terms.erc721Approve) {
993
+ mask |= BIT_ERC721_PER_TOKEN_CLEAR;
994
+ }
995
+ if (terms.erc721SetApprovalForAll) {
996
+ mask |= BIT_SET_APPROVAL_FOR_ALL_REVOKE;
997
+ }
998
+ if (terms.permit2ApproveZero) {
999
+ mask |= BIT_PERMIT2_APPROVE_ZERO;
1000
+ }
1001
+ if (terms.permit2Lockdown) {
1002
+ mask |= BIT_PERMIT2_LOCKDOWN;
1003
+ }
1004
+ if (terms.permit2InvalidateNonces) {
1005
+ mask |= BIT_PERMIT2_INVALIDATE_NONCES;
1006
+ }
1007
+ if (mask === 0) {
1008
+ throw new Error(NO_FLAGS_SET_ERROR);
1009
+ }
1010
+ return mask;
1011
+ }
1012
+ function maskToTerms(mask) {
1013
+ if (mask > ALLOWED_APPROVAL_REVOCATION_MAX_MASK) {
1014
+ throw new Error(
1015
+ "Invalid ApprovalRevocation terms: reserved bits must be zero (only bits 0-5 are defined)"
1016
+ );
1017
+ }
1018
+ if (mask === 0) {
1019
+ throw new Error(NO_FLAGS_SET_ERROR);
1020
+ }
1021
+ return {
1022
+ erc20Approve: (mask & BIT_ERC20_APPROVE_ZERO) !== 0,
1023
+ erc721Approve: (mask & BIT_ERC721_PER_TOKEN_CLEAR) !== 0,
1024
+ erc721SetApprovalForAll: (mask & BIT_SET_APPROVAL_FOR_ALL_REVOKE) !== 0,
1025
+ permit2ApproveZero: (mask & BIT_PERMIT2_APPROVE_ZERO) !== 0,
1026
+ permit2Lockdown: (mask & BIT_PERMIT2_LOCKDOWN) !== 0,
1027
+ permit2InvalidateNonces: (mask & BIT_PERMIT2_INVALIDATE_NONCES) !== 0
1028
+ };
1029
+ }
1030
+ function createApprovalRevocationTerms(terms, encodingOptions = defaultOptions) {
1031
+ const mask = termsToMask(terms);
1032
+ const hexValue = `0x${toHexString({ value: mask, size: 1 })}`;
1033
+ return prepareResult(hexValue, encodingOptions);
1034
+ }
1035
+ function decodeApprovalRevocationTerms(terms) {
1036
+ const hexTerms = bytesLikeToHex(terms);
1037
+ assertHexByteExactLength(
1038
+ hexTerms,
1039
+ 1,
1040
+ "Invalid ApprovalRevocation terms: must be exactly 1 byte"
1041
+ );
1042
+ const mask = extractNumber(hexTerms, 0, 1);
1043
+ return maskToTerms(mask);
1044
+ }
1045
+
978
1046
  // src/caveats/argsEqualityCheck.ts
979
1047
  function createArgsEqualityCheckTerms(terms, encodingOptions = defaultOptions) {
980
1048
  const { args } = terms;
@@ -1513,6 +1581,7 @@ export {
1513
1581
  createAllowedCalldataTerms,
1514
1582
  createAllowedMethodsTerms,
1515
1583
  createAllowedTargetsTerms,
1584
+ createApprovalRevocationTerms,
1516
1585
  createArgsEqualityCheckTerms,
1517
1586
  createBlockNumberTerms,
1518
1587
  createDeployedTerms,
@@ -1546,6 +1615,7 @@ export {
1546
1615
  decodeAllowedCalldataTerms,
1547
1616
  decodeAllowedMethodsTerms,
1548
1617
  decodeAllowedTargetsTerms,
1618
+ decodeApprovalRevocationTerms,
1549
1619
  decodeArgsEqualityCheckTerms,
1550
1620
  decodeBlockNumberTerms,
1551
1621
  decodeDelegation,