@metamask-previews/gator-permissions-controller 4.2.3-preview-3f58e8b65 → 4.2.3-preview-e0f702919
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 +0 -3
- package/README.md +1 -0
- package/dist/GatorPermissionsController.cjs +12 -11
- package/dist/GatorPermissionsController.cjs.map +1 -1
- package/dist/GatorPermissionsController.d.cts.map +1 -1
- package/dist/GatorPermissionsController.d.mts.map +1 -1
- package/dist/GatorPermissionsController.mjs +9 -8
- package/dist/GatorPermissionsController.mjs.map +1 -1
- package/dist/decodePermission/decoders/erc20PayeeRule.cjs +56 -0
- package/dist/decodePermission/decoders/erc20PayeeRule.cjs.map +1 -0
- package/dist/decodePermission/decoders/erc20PayeeRule.d.cts +22 -0
- package/dist/decodePermission/decoders/erc20PayeeRule.d.cts.map +1 -0
- package/dist/decodePermission/decoders/erc20PayeeRule.d.mts +22 -0
- package/dist/decodePermission/decoders/erc20PayeeRule.d.mts.map +1 -0
- package/dist/decodePermission/decoders/erc20PayeeRule.mjs +52 -0
- package/dist/decodePermission/decoders/erc20PayeeRule.mjs.map +1 -0
- package/dist/decodePermission/decoders/erc20TokenAllowance.cjs +76 -0
- package/dist/decodePermission/decoders/erc20TokenAllowance.cjs.map +1 -0
- package/dist/decodePermission/decoders/erc20TokenAllowance.d.cts +14 -0
- package/dist/decodePermission/decoders/erc20TokenAllowance.d.cts.map +1 -0
- package/dist/decodePermission/decoders/erc20TokenAllowance.d.mts +14 -0
- package/dist/decodePermission/decoders/erc20TokenAllowance.d.mts.map +1 -0
- package/dist/decodePermission/decoders/erc20TokenAllowance.mjs +72 -0
- package/dist/decodePermission/decoders/erc20TokenAllowance.mjs.map +1 -0
- package/dist/decodePermission/decoders/erc20TokenPeriodic.cjs +77 -0
- package/dist/decodePermission/decoders/erc20TokenPeriodic.cjs.map +1 -0
- package/dist/decodePermission/decoders/erc20TokenPeriodic.d.cts +10 -0
- package/dist/decodePermission/decoders/erc20TokenPeriodic.d.cts.map +1 -0
- package/dist/decodePermission/decoders/erc20TokenPeriodic.d.mts +10 -0
- package/dist/decodePermission/decoders/erc20TokenPeriodic.d.mts.map +1 -0
- package/dist/decodePermission/decoders/erc20TokenPeriodic.mjs +73 -0
- package/dist/decodePermission/decoders/erc20TokenPeriodic.mjs.map +1 -0
- package/dist/decodePermission/decoders/erc20TokenRevocation.cjs +62 -0
- package/dist/decodePermission/decoders/erc20TokenRevocation.cjs.map +1 -0
- package/dist/decodePermission/decoders/erc20TokenRevocation.d.cts +15 -0
- package/dist/decodePermission/decoders/erc20TokenRevocation.d.cts.map +1 -0
- package/dist/decodePermission/decoders/erc20TokenRevocation.d.mts +15 -0
- package/dist/decodePermission/decoders/erc20TokenRevocation.d.mts.map +1 -0
- package/dist/decodePermission/decoders/erc20TokenRevocation.mjs +58 -0
- package/dist/decodePermission/decoders/erc20TokenRevocation.mjs.map +1 -0
- package/dist/decodePermission/decoders/erc20TokenStream.cjs +81 -0
- package/dist/decodePermission/decoders/erc20TokenStream.cjs.map +1 -0
- package/dist/decodePermission/decoders/erc20TokenStream.d.cts +10 -0
- package/dist/decodePermission/decoders/erc20TokenStream.d.cts.map +1 -0
- package/dist/decodePermission/decoders/erc20TokenStream.d.mts +10 -0
- package/dist/decodePermission/decoders/erc20TokenStream.d.mts.map +1 -0
- package/dist/decodePermission/decoders/erc20TokenStream.mjs +77 -0
- package/dist/decodePermission/decoders/erc20TokenStream.mjs.map +1 -0
- package/dist/decodePermission/decoders/expiryRule.cjs +35 -0
- package/dist/decodePermission/decoders/expiryRule.cjs.map +1 -0
- package/dist/decodePermission/decoders/expiryRule.d.cts +16 -0
- package/dist/decodePermission/decoders/expiryRule.d.cts.map +1 -0
- package/dist/decodePermission/decoders/expiryRule.d.mts +16 -0
- package/dist/decodePermission/decoders/expiryRule.d.mts.map +1 -0
- package/dist/decodePermission/decoders/expiryRule.mjs +31 -0
- package/dist/decodePermission/decoders/expiryRule.mjs.map +1 -0
- package/dist/decodePermission/decoders/index.cjs +21 -8
- package/dist/decodePermission/decoders/index.cjs.map +1 -1
- package/dist/decodePermission/decoders/index.d.cts +3 -9
- package/dist/decodePermission/decoders/index.d.cts.map +1 -1
- package/dist/decodePermission/decoders/index.d.mts +3 -9
- package/dist/decodePermission/decoders/index.d.mts.map +1 -1
- package/dist/decodePermission/decoders/index.mjs +21 -8
- package/dist/decodePermission/decoders/index.mjs.map +1 -1
- package/dist/decodePermission/decoders/makePermissionDecoder.cjs +3 -32
- package/dist/decodePermission/decoders/makePermissionDecoder.cjs.map +1 -1
- package/dist/decodePermission/decoders/makePermissionDecoder.d.cts +15 -27
- package/dist/decodePermission/decoders/makePermissionDecoder.d.cts.map +1 -1
- package/dist/decodePermission/decoders/makePermissionDecoder.d.mts +15 -27
- package/dist/decodePermission/decoders/makePermissionDecoder.d.mts.map +1 -1
- package/dist/decodePermission/decoders/makePermissionDecoder.mjs +3 -32
- package/dist/decodePermission/decoders/makePermissionDecoder.mjs.map +1 -1
- package/dist/decodePermission/decoders/nativePayeeRule.cjs +44 -0
- package/dist/decodePermission/decoders/nativePayeeRule.cjs.map +1 -0
- package/dist/decodePermission/decoders/nativePayeeRule.d.cts +20 -0
- package/dist/decodePermission/decoders/nativePayeeRule.d.cts.map +1 -0
- package/dist/decodePermission/decoders/nativePayeeRule.d.mts +20 -0
- package/dist/decodePermission/decoders/nativePayeeRule.d.mts.map +1 -0
- package/dist/decodePermission/decoders/nativePayeeRule.mjs +40 -0
- package/dist/decodePermission/decoders/nativePayeeRule.mjs.map +1 -0
- package/dist/decodePermission/decoders/nativeTokenAllowance.cjs +76 -0
- package/dist/decodePermission/decoders/nativeTokenAllowance.cjs.map +1 -0
- package/dist/decodePermission/decoders/nativeTokenAllowance.d.cts +14 -0
- package/dist/decodePermission/decoders/nativeTokenAllowance.d.cts.map +1 -0
- package/dist/decodePermission/decoders/nativeTokenAllowance.d.mts +14 -0
- package/dist/decodePermission/decoders/nativeTokenAllowance.d.mts.map +1 -0
- package/dist/decodePermission/decoders/nativeTokenAllowance.mjs +72 -0
- package/dist/decodePermission/decoders/nativeTokenAllowance.mjs.map +1 -0
- package/dist/decodePermission/decoders/nativeTokenPeriodic.cjs +77 -0
- package/dist/decodePermission/decoders/nativeTokenPeriodic.cjs.map +1 -0
- package/dist/decodePermission/decoders/nativeTokenPeriodic.d.cts +10 -0
- package/dist/decodePermission/decoders/nativeTokenPeriodic.d.cts.map +1 -0
- package/dist/decodePermission/decoders/nativeTokenPeriodic.d.mts +10 -0
- package/dist/decodePermission/decoders/nativeTokenPeriodic.d.mts.map +1 -0
- package/dist/decodePermission/decoders/nativeTokenPeriodic.mjs +73 -0
- package/dist/decodePermission/decoders/nativeTokenPeriodic.mjs.map +1 -0
- package/dist/decodePermission/decoders/nativeTokenStream.cjs +75 -0
- package/dist/decodePermission/decoders/nativeTokenStream.cjs.map +1 -0
- package/dist/decodePermission/decoders/nativeTokenStream.d.cts +10 -0
- package/dist/decodePermission/decoders/nativeTokenStream.d.cts.map +1 -0
- package/dist/decodePermission/decoders/nativeTokenStream.d.mts +10 -0
- package/dist/decodePermission/decoders/nativeTokenStream.d.mts.map +1 -0
- package/dist/decodePermission/decoders/nativeTokenStream.mjs +71 -0
- package/dist/decodePermission/decoders/nativeTokenStream.mjs.map +1 -0
- package/dist/decodePermission/decoders/redeemerRule.cjs +36 -0
- package/dist/decodePermission/decoders/redeemerRule.cjs.map +1 -0
- package/dist/decodePermission/decoders/redeemerRule.d.cts +13 -0
- package/dist/decodePermission/decoders/redeemerRule.d.cts.map +1 -0
- package/dist/decodePermission/decoders/redeemerRule.d.mts +13 -0
- package/dist/decodePermission/decoders/redeemerRule.d.mts.map +1 -0
- package/dist/decodePermission/decoders/redeemerRule.mjs +32 -0
- package/dist/decodePermission/decoders/redeemerRule.mjs.map +1 -0
- package/dist/decodePermission/decoders/tokenApprovalRevocation.cjs +81 -0
- package/dist/decodePermission/decoders/tokenApprovalRevocation.cjs.map +1 -0
- package/dist/decodePermission/decoders/tokenApprovalRevocation.d.cts +10 -0
- package/dist/decodePermission/decoders/tokenApprovalRevocation.d.cts.map +1 -0
- package/dist/decodePermission/decoders/tokenApprovalRevocation.d.mts +10 -0
- package/dist/decodePermission/decoders/tokenApprovalRevocation.d.mts.map +1 -0
- package/dist/decodePermission/decoders/tokenApprovalRevocation.mjs +77 -0
- package/dist/decodePermission/decoders/tokenApprovalRevocation.mjs.map +1 -0
- package/dist/decodePermission/types.cjs.map +1 -1
- package/dist/decodePermission/types.d.cts +85 -4
- package/dist/decodePermission/types.d.cts.map +1 -1
- package/dist/decodePermission/types.d.mts +85 -4
- package/dist/decodePermission/types.d.mts.map +1 -1
- package/dist/decodePermission/types.mjs.map +1 -1
- package/dist/decodePermission/utils.cjs +88 -1
- package/dist/decodePermission/utils.cjs.map +1 -1
- package/dist/decodePermission/utils.d.cts +31 -0
- package/dist/decodePermission/utils.d.cts.map +1 -1
- package/dist/decodePermission/utils.d.mts +31 -0
- package/dist/decodePermission/utils.d.mts.map +1 -1
- package/dist/decodePermission/utils.mjs +85 -0
- package/dist/decodePermission/utils.mjs.map +1 -1
- package/dist/permissionOnChainStatus.cjs +6 -7
- package/dist/permissionOnChainStatus.cjs.map +1 -1
- package/dist/permissionOnChainStatus.d.cts +4 -3
- package/dist/permissionOnChainStatus.d.cts.map +1 -1
- package/dist/permissionOnChainStatus.d.mts +4 -3
- package/dist/permissionOnChainStatus.d.mts.map +1 -1
- package/dist/permissionOnChainStatus.mjs +7 -8
- package/dist/permissionOnChainStatus.mjs.map +1 -1
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.cts +0 -4
- package/dist/types.d.cts.map +1 -1
- package/dist/types.d.mts +0 -4
- package/dist/types.d.mts.map +1 -1
- package/dist/types.mjs.map +1 -1
- package/package.json +2 -2
- package/dist/decodePermission/enforcerAddresses.cjs +0 -39
- package/dist/decodePermission/enforcerAddresses.cjs.map +0 -1
- package/dist/decodePermission/enforcerAddresses.d.cts +0 -13
- package/dist/decodePermission/enforcerAddresses.d.cts.map +0 -1
- package/dist/decodePermission/enforcerAddresses.d.mts +0 -13
- package/dist/decodePermission/enforcerAddresses.d.mts.map +0 -1
- package/dist/decodePermission/enforcerAddresses.mjs +0 -35
- package/dist/decodePermission/enforcerAddresses.mjs.map +0 -1
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { hexToNumber } from "@metamask/utils";
|
|
2
|
+
import { getByteLength, getTermsByEnforcer, splitHex, UINT256_MAX, ZERO_32_BYTES } from "../utils.mjs";
|
|
3
|
+
import { erc20PayeeRule } from "./erc20PayeeRule.mjs";
|
|
4
|
+
import { expiryRule } from "./expiryRule.mjs";
|
|
5
|
+
import { redeemerRule } from "./redeemerRule.mjs";
|
|
6
|
+
/**
|
|
7
|
+
* Builds the configuration for the erc20-token-allowance permission decoder.
|
|
8
|
+
*
|
|
9
|
+
* This permission shares the same enforcer set as `erc20-token-periodic` but
|
|
10
|
+
* is distinguished by a `periodDuration` of `UINT256_MAX`, which effectively
|
|
11
|
+
* disables the periodic reset and turns the caveat into a one-off allowance.
|
|
12
|
+
*
|
|
13
|
+
* @param contractAddresses - Checksummed enforcer addresses for the chain.
|
|
14
|
+
* @returns The erc20-token-allowance permission decoder configuration.
|
|
15
|
+
*/
|
|
16
|
+
export function makeErc20TokenAllowanceDecoderConfig(contractAddresses) {
|
|
17
|
+
const { timestampEnforcer, erc20PeriodicEnforcer, valueLteEnforcer, nonceEnforcer, allowedCalldataEnforcer, redeemerEnforcer, } = contractAddresses;
|
|
18
|
+
return {
|
|
19
|
+
permissionType: 'erc20-token-allowance',
|
|
20
|
+
contractAddresses,
|
|
21
|
+
optionalEnforcers: [
|
|
22
|
+
timestampEnforcer, // expiry rule
|
|
23
|
+
redeemerEnforcer, // redeemer rule
|
|
24
|
+
allowedCalldataEnforcer, // payee rule
|
|
25
|
+
],
|
|
26
|
+
requiredEnforcers: {
|
|
27
|
+
[erc20PeriodicEnforcer]: 1,
|
|
28
|
+
[valueLteEnforcer]: 1,
|
|
29
|
+
[nonceEnforcer]: 1,
|
|
30
|
+
},
|
|
31
|
+
rules: [expiryRule, redeemerRule, erc20PayeeRule],
|
|
32
|
+
validateAndDecodeData,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Decodes erc20-token-allowance permission data from caveats; throws on invalid.
|
|
37
|
+
*
|
|
38
|
+
* @param caveats - Caveats from the permission context (checksummed).
|
|
39
|
+
* @param contractAddresses - Checksummed enforcer addresses for the chain.
|
|
40
|
+
* @returns Decoded allowance terms.
|
|
41
|
+
*/
|
|
42
|
+
function validateAndDecodeData(caveats, contractAddresses) {
|
|
43
|
+
const { erc20PeriodicEnforcer, valueLteEnforcer } = contractAddresses;
|
|
44
|
+
const valueLteTerms = getTermsByEnforcer({
|
|
45
|
+
caveats,
|
|
46
|
+
enforcer: valueLteEnforcer,
|
|
47
|
+
});
|
|
48
|
+
if (valueLteTerms !== ZERO_32_BYTES) {
|
|
49
|
+
throw new Error(`Invalid value-lte terms: must be ${ZERO_32_BYTES}`);
|
|
50
|
+
}
|
|
51
|
+
const terms = getTermsByEnforcer({
|
|
52
|
+
caveats,
|
|
53
|
+
enforcer: erc20PeriodicEnforcer,
|
|
54
|
+
});
|
|
55
|
+
const EXPECTED_TERMS_BYTELENGTH = 116; // 20 + 32 + 32 + 32
|
|
56
|
+
if (getByteLength(terms) !== EXPECTED_TERMS_BYTELENGTH) {
|
|
57
|
+
throw new Error('Invalid erc20-token-allowance terms: expected 116 bytes');
|
|
58
|
+
}
|
|
59
|
+
const [tokenAddress, allowanceAmount, periodDurationRaw, startTimeRaw] = splitHex(terms, [20, 32, 32, 32]);
|
|
60
|
+
if (periodDurationRaw.toLowerCase() !== UINT256_MAX) {
|
|
61
|
+
throw new Error('Invalid erc20-token-allowance terms: periodDuration must be UINT256_MAX');
|
|
62
|
+
}
|
|
63
|
+
const startTime = hexToNumber(startTimeRaw);
|
|
64
|
+
if (startTime === 0) {
|
|
65
|
+
throw new Error('Invalid erc20-token-allowance terms: startTime must be a positive number');
|
|
66
|
+
}
|
|
67
|
+
if (allowanceAmount === ZERO_32_BYTES) {
|
|
68
|
+
throw new Error('Invalid erc20-token-allowance terms: allowanceAmount must be a positive number');
|
|
69
|
+
}
|
|
70
|
+
return { tokenAddress, allowanceAmount, startTime };
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=erc20TokenAllowance.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"erc20TokenAllowance.mjs","sourceRoot":"","sources":["../../../src/decodePermission/decoders/erc20TokenAllowance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,wBAAwB;AAO9C,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,QAAQ,EACR,WAAW,EACX,aAAa,EACd,qBAAoB;AACrB,OAAO,EAAE,cAAc,EAAE,6BAA4B;AACrD,OAAO,EAAE,UAAU,EAAE,yBAAwB;AAE7C,OAAO,EAAE,YAAY,EAAE,2BAA0B;AAEjD;;;;;;;;;GASG;AACH,MAAM,UAAU,oCAAoC,CAClD,iBAA6C;IAE7C,MAAM,EACJ,iBAAiB,EACjB,qBAAqB,EACrB,gBAAgB,EAChB,aAAa,EACb,uBAAuB,EACvB,gBAAgB,GACjB,GAAG,iBAAiB,CAAC;IAEtB,OAAO;QACL,cAAc,EAAE,uBAAuB;QACvC,iBAAiB;QACjB,iBAAiB,EAAE;YACjB,iBAAiB,EAAE,cAAc;YACjC,gBAAgB,EAAE,gBAAgB;YAClC,uBAAuB,EAAE,aAAa;SACvC;QACD,iBAAiB,EAAE;YACjB,CAAC,qBAAqB,CAAC,EAAE,CAAC;YAC1B,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACrB,CAAC,aAAa,CAAC,EAAE,CAAC;SACnB;QACD,KAAK,EAAE,CAAC,UAAU,EAAE,YAAY,EAAE,cAAc,CAAC;QACjD,qBAAqB;KACtB,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,SAAS,qBAAqB,CAC5B,OAAyB,EACzB,iBAA6C;IAE7C,MAAM,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,GAAG,iBAAiB,CAAC;IAEtE,MAAM,aAAa,GAAG,kBAAkB,CAAC;QACvC,OAAO;QACP,QAAQ,EAAE,gBAAgB;KAC3B,CAAC,CAAC;IACH,IAAI,aAAa,KAAK,aAAa,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,oCAAoC,aAAa,EAAE,CAAC,CAAC;IACvE,CAAC;IAED,MAAM,KAAK,GAAG,kBAAkB,CAAC;QAC/B,OAAO;QACP,QAAQ,EAAE,qBAAqB;KAChC,CAAC,CAAC;IAEH,MAAM,yBAAyB,GAAG,GAAG,CAAC,CAAC,oBAAoB;IAE3D,IAAI,aAAa,CAAC,KAAK,CAAC,KAAK,yBAAyB,EAAE,CAAC;QACvD,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;IAC7E,CAAC;IAED,MAAM,CAAC,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,YAAY,CAAC,GACpE,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IAEpC,IAAI,iBAAiB,CAAC,WAAW,EAAE,KAAK,WAAW,EAAE,CAAC;QACpD,MAAM,IAAI,KAAK,CACb,yEAAyE,CAC1E,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC;IAE5C,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CACb,0EAA0E,CAC3E,CAAC;IACJ,CAAC;IAED,IAAI,eAAe,KAAK,aAAa,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CACb,gFAAgF,CACjF,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,SAAS,EAAE,CAAC;AACtD,CAAC","sourcesContent":["import { hexToNumber } from '@metamask/utils';\n\nimport type {\n ChecksumCaveat,\n ChecksumEnforcersByChainId,\n DecodedPermission,\n} from '../types.js';\nimport {\n getByteLength,\n getTermsByEnforcer,\n splitHex,\n UINT256_MAX,\n ZERO_32_BYTES,\n} from '../utils.js';\nimport { erc20PayeeRule } from './erc20PayeeRule.js';\nimport { expiryRule } from './expiryRule.js';\nimport type { MakePermissionDecoderConfig } from './makePermissionDecoder.js';\nimport { redeemerRule } from './redeemerRule.js';\n\n/**\n * Builds the configuration for the erc20-token-allowance permission decoder.\n *\n * This permission shares the same enforcer set as `erc20-token-periodic` but\n * is distinguished by a `periodDuration` of `UINT256_MAX`, which effectively\n * disables the periodic reset and turns the caveat into a one-off allowance.\n *\n * @param contractAddresses - Checksummed enforcer addresses for the chain.\n * @returns The erc20-token-allowance permission decoder configuration.\n */\nexport function makeErc20TokenAllowanceDecoderConfig(\n contractAddresses: ChecksumEnforcersByChainId,\n): MakePermissionDecoderConfig {\n const {\n timestampEnforcer,\n erc20PeriodicEnforcer,\n valueLteEnforcer,\n nonceEnforcer,\n allowedCalldataEnforcer,\n redeemerEnforcer,\n } = contractAddresses;\n\n return {\n permissionType: 'erc20-token-allowance',\n contractAddresses,\n optionalEnforcers: [\n timestampEnforcer, // expiry rule\n redeemerEnforcer, // redeemer rule\n allowedCalldataEnforcer, // payee rule\n ],\n requiredEnforcers: {\n [erc20PeriodicEnforcer]: 1,\n [valueLteEnforcer]: 1,\n [nonceEnforcer]: 1,\n },\n rules: [expiryRule, redeemerRule, erc20PayeeRule],\n validateAndDecodeData,\n };\n}\n\n/**\n * Decodes erc20-token-allowance permission data from caveats; throws on invalid.\n *\n * @param caveats - Caveats from the permission context (checksummed).\n * @param contractAddresses - Checksummed enforcer addresses for the chain.\n * @returns Decoded allowance terms.\n */\nfunction validateAndDecodeData(\n caveats: ChecksumCaveat[],\n contractAddresses: ChecksumEnforcersByChainId,\n): DecodedPermission['permission']['data'] {\n const { erc20PeriodicEnforcer, valueLteEnforcer } = contractAddresses;\n\n const valueLteTerms = getTermsByEnforcer({\n caveats,\n enforcer: valueLteEnforcer,\n });\n if (valueLteTerms !== ZERO_32_BYTES) {\n throw new Error(`Invalid value-lte terms: must be ${ZERO_32_BYTES}`);\n }\n\n const terms = getTermsByEnforcer({\n caveats,\n enforcer: erc20PeriodicEnforcer,\n });\n\n const EXPECTED_TERMS_BYTELENGTH = 116; // 20 + 32 + 32 + 32\n\n if (getByteLength(terms) !== EXPECTED_TERMS_BYTELENGTH) {\n throw new Error('Invalid erc20-token-allowance terms: expected 116 bytes');\n }\n\n const [tokenAddress, allowanceAmount, periodDurationRaw, startTimeRaw] =\n splitHex(terms, [20, 32, 32, 32]);\n\n if (periodDurationRaw.toLowerCase() !== UINT256_MAX) {\n throw new Error(\n 'Invalid erc20-token-allowance terms: periodDuration must be UINT256_MAX',\n );\n }\n\n const startTime = hexToNumber(startTimeRaw);\n\n if (startTime === 0) {\n throw new Error(\n 'Invalid erc20-token-allowance terms: startTime must be a positive number',\n );\n }\n\n if (allowanceAmount === ZERO_32_BYTES) {\n throw new Error(\n 'Invalid erc20-token-allowance terms: allowanceAmount must be a positive number',\n );\n }\n\n return { tokenAddress, allowanceAmount, startTime };\n}\n"]}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.makeErc20TokenPeriodicDecoderConfig = void 0;
|
|
4
|
+
const utils_1 = require("@metamask/utils");
|
|
5
|
+
const utils_js_1 = require("../utils.cjs");
|
|
6
|
+
const erc20PayeeRule_js_1 = require("./erc20PayeeRule.cjs");
|
|
7
|
+
const expiryRule_js_1 = require("./expiryRule.cjs");
|
|
8
|
+
const redeemerRule_js_1 = require("./redeemerRule.cjs");
|
|
9
|
+
/**
|
|
10
|
+
* Builds the configuration for the erc20-token-periodic permission decoder.
|
|
11
|
+
*
|
|
12
|
+
* @param contractAddresses - Checksummed enforcer addresses for the chain.
|
|
13
|
+
* @returns The erc20-token-periodic permission decoder configuration.
|
|
14
|
+
*/
|
|
15
|
+
function makeErc20TokenPeriodicDecoderConfig(contractAddresses) {
|
|
16
|
+
const { timestampEnforcer, erc20PeriodicEnforcer, valueLteEnforcer, nonceEnforcer, allowedCalldataEnforcer, redeemerEnforcer, } = contractAddresses;
|
|
17
|
+
return {
|
|
18
|
+
permissionType: 'erc20-token-periodic',
|
|
19
|
+
contractAddresses,
|
|
20
|
+
optionalEnforcers: [
|
|
21
|
+
timestampEnforcer, // expiry rule
|
|
22
|
+
redeemerEnforcer, // redeemer rule
|
|
23
|
+
allowedCalldataEnforcer, // payee rule
|
|
24
|
+
],
|
|
25
|
+
requiredEnforcers: {
|
|
26
|
+
[erc20PeriodicEnforcer]: 1,
|
|
27
|
+
[valueLteEnforcer]: 1,
|
|
28
|
+
[nonceEnforcer]: 1,
|
|
29
|
+
},
|
|
30
|
+
rules: [expiryRule_js_1.expiryRule, redeemerRule_js_1.redeemerRule, erc20PayeeRule_js_1.erc20PayeeRule],
|
|
31
|
+
validateAndDecodeData,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
exports.makeErc20TokenPeriodicDecoderConfig = makeErc20TokenPeriodicDecoderConfig;
|
|
35
|
+
/**
|
|
36
|
+
* Decodes erc20-token-periodic permission data from caveats; throws on invalid.
|
|
37
|
+
*
|
|
38
|
+
* @param caveats - Caveats from the permission context (checksummed).
|
|
39
|
+
* @param contractAddresses - Checksummed enforcer addresses for the chain.
|
|
40
|
+
* @returns Decoded periodic terms.
|
|
41
|
+
*/
|
|
42
|
+
function validateAndDecodeData(caveats, contractAddresses) {
|
|
43
|
+
const { erc20PeriodicEnforcer, valueLteEnforcer } = contractAddresses;
|
|
44
|
+
const valueLteTerms = (0, utils_js_1.getTermsByEnforcer)({
|
|
45
|
+
caveats,
|
|
46
|
+
enforcer: valueLteEnforcer,
|
|
47
|
+
});
|
|
48
|
+
if (valueLteTerms !== utils_js_1.ZERO_32_BYTES) {
|
|
49
|
+
throw new Error(`Invalid value-lte terms: must be ${utils_js_1.ZERO_32_BYTES}`);
|
|
50
|
+
}
|
|
51
|
+
const terms = (0, utils_js_1.getTermsByEnforcer)({
|
|
52
|
+
caveats,
|
|
53
|
+
enforcer: erc20PeriodicEnforcer,
|
|
54
|
+
});
|
|
55
|
+
const EXPECTED_TERMS_BYTELENGTH = 116; // 20 + 32 + 32 + 32
|
|
56
|
+
if ((0, utils_js_1.getByteLength)(terms) !== EXPECTED_TERMS_BYTELENGTH) {
|
|
57
|
+
throw new Error('Invalid erc20-token-periodic terms: expected 116 bytes');
|
|
58
|
+
}
|
|
59
|
+
const [tokenAddress, periodAmount, periodDurationRaw, startTimeRaw] = (0, utils_js_1.splitHex)(terms, [20, 32, 32, 32]);
|
|
60
|
+
const periodDuration = (0, utils_1.hexToNumber)(periodDurationRaw);
|
|
61
|
+
const periodAmountBigInt = (0, utils_1.hexToBigInt)(periodAmount);
|
|
62
|
+
const startTime = (0, utils_1.hexToNumber)(startTimeRaw);
|
|
63
|
+
if (periodAmountBigInt === 0n) {
|
|
64
|
+
throw new Error('Invalid erc20-token-periodic terms: periodAmount must be a positive number');
|
|
65
|
+
}
|
|
66
|
+
if (periodDuration === 0) {
|
|
67
|
+
throw new Error('Invalid erc20-token-periodic terms: periodDuration must be a positive number');
|
|
68
|
+
}
|
|
69
|
+
if (periodDuration > utils_js_1.MAX_PERIOD_DURATION) {
|
|
70
|
+
throw new Error('Invalid erc20-token-periodic terms: periodDuration must be less than or equal to MAX_PERIOD_DURATION');
|
|
71
|
+
}
|
|
72
|
+
if (startTime === 0) {
|
|
73
|
+
throw new Error('Invalid erc20-token-periodic terms: startTime must be a positive number');
|
|
74
|
+
}
|
|
75
|
+
return { tokenAddress, periodAmount, periodDuration, startTime };
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=erc20TokenPeriodic.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"erc20TokenPeriodic.cjs","sourceRoot":"","sources":["../../../src/decodePermission/decoders/erc20TokenPeriodic.ts"],"names":[],"mappings":";;;AAAA,2CAA2D;AAO3D,2CAMqB;AACrB,4DAAqD;AACrD,oDAA6C;AAE7C,wDAAiD;AAEjD;;;;;GAKG;AACH,SAAgB,mCAAmC,CACjD,iBAA6C;IAE7C,MAAM,EACJ,iBAAiB,EACjB,qBAAqB,EACrB,gBAAgB,EAChB,aAAa,EACb,uBAAuB,EACvB,gBAAgB,GACjB,GAAG,iBAAiB,CAAC;IAEtB,OAAO;QACL,cAAc,EAAE,sBAAsB;QACtC,iBAAiB;QACjB,iBAAiB,EAAE;YACjB,iBAAiB,EAAE,cAAc;YACjC,gBAAgB,EAAE,gBAAgB;YAClC,uBAAuB,EAAE,aAAa;SACvC;QACD,iBAAiB,EAAE;YACjB,CAAC,qBAAqB,CAAC,EAAE,CAAC;YAC1B,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACrB,CAAC,aAAa,CAAC,EAAE,CAAC;SACnB;QACD,KAAK,EAAE,CAAC,0BAAU,EAAE,8BAAY,EAAE,kCAAc,CAAC;QACjD,qBAAqB;KACtB,CAAC;AACJ,CAAC;AA5BD,kFA4BC;AAED;;;;;;GAMG;AACH,SAAS,qBAAqB,CAC5B,OAAyB,EACzB,iBAA6C;IAE7C,MAAM,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,GAAG,iBAAiB,CAAC;IAEtE,MAAM,aAAa,GAAG,IAAA,6BAAkB,EAAC;QACvC,OAAO;QACP,QAAQ,EAAE,gBAAgB;KAC3B,CAAC,CAAC;IACH,IAAI,aAAa,KAAK,wBAAa,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,oCAAoC,wBAAa,EAAE,CAAC,CAAC;IACvE,CAAC;IAED,MAAM,KAAK,GAAG,IAAA,6BAAkB,EAAC;QAC/B,OAAO;QACP,QAAQ,EAAE,qBAAqB;KAChC,CAAC,CAAC;IAEH,MAAM,yBAAyB,GAAG,GAAG,CAAC,CAAC,oBAAoB;IAE3D,IAAI,IAAA,wBAAa,EAAC,KAAK,CAAC,KAAK,yBAAyB,EAAE,CAAC;QACvD,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;IAC5E,CAAC;IAED,MAAM,CAAC,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,YAAY,CAAC,GACjE,IAAA,mBAAQ,EAAC,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IAEpC,MAAM,cAAc,GAAG,IAAA,mBAAW,EAAC,iBAAiB,CAAC,CAAC;IACtD,MAAM,kBAAkB,GAAG,IAAA,mBAAW,EAAC,YAAY,CAAC,CAAC;IACrD,MAAM,SAAS,GAAG,IAAA,mBAAW,EAAC,YAAY,CAAC,CAAC;IAE5C,IAAI,kBAAkB,KAAK,EAAE,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CACb,4EAA4E,CAC7E,CAAC;IACJ,CAAC;IAED,IAAI,cAAc,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CACb,8EAA8E,CAC/E,CAAC;IACJ,CAAC;IAED,IAAI,cAAc,GAAG,8BAAmB,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CACb,sGAAsG,CACvG,CAAC;IACJ,CAAC;IAED,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CACb,yEAAyE,CAC1E,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,SAAS,EAAE,CAAC;AACnE,CAAC","sourcesContent":["import { hexToBigInt, hexToNumber } from '@metamask/utils';\n\nimport type {\n ChecksumCaveat,\n ChecksumEnforcersByChainId,\n DecodedPermission,\n} from '../types.js';\nimport {\n getByteLength,\n getTermsByEnforcer,\n MAX_PERIOD_DURATION,\n splitHex,\n ZERO_32_BYTES,\n} from '../utils.js';\nimport { erc20PayeeRule } from './erc20PayeeRule.js';\nimport { expiryRule } from './expiryRule.js';\nimport type { MakePermissionDecoderConfig } from './makePermissionDecoder.js';\nimport { redeemerRule } from './redeemerRule.js';\n\n/**\n * Builds the configuration for the erc20-token-periodic permission decoder.\n *\n * @param contractAddresses - Checksummed enforcer addresses for the chain.\n * @returns The erc20-token-periodic permission decoder configuration.\n */\nexport function makeErc20TokenPeriodicDecoderConfig(\n contractAddresses: ChecksumEnforcersByChainId,\n): MakePermissionDecoderConfig {\n const {\n timestampEnforcer,\n erc20PeriodicEnforcer,\n valueLteEnforcer,\n nonceEnforcer,\n allowedCalldataEnforcer,\n redeemerEnforcer,\n } = contractAddresses;\n\n return {\n permissionType: 'erc20-token-periodic',\n contractAddresses,\n optionalEnforcers: [\n timestampEnforcer, // expiry rule\n redeemerEnforcer, // redeemer rule\n allowedCalldataEnforcer, // payee rule\n ],\n requiredEnforcers: {\n [erc20PeriodicEnforcer]: 1,\n [valueLteEnforcer]: 1,\n [nonceEnforcer]: 1,\n },\n rules: [expiryRule, redeemerRule, erc20PayeeRule],\n validateAndDecodeData,\n };\n}\n\n/**\n * Decodes erc20-token-periodic permission data from caveats; throws on invalid.\n *\n * @param caveats - Caveats from the permission context (checksummed).\n * @param contractAddresses - Checksummed enforcer addresses for the chain.\n * @returns Decoded periodic terms.\n */\nfunction validateAndDecodeData(\n caveats: ChecksumCaveat[],\n contractAddresses: ChecksumEnforcersByChainId,\n): DecodedPermission['permission']['data'] {\n const { erc20PeriodicEnforcer, valueLteEnforcer } = contractAddresses;\n\n const valueLteTerms = getTermsByEnforcer({\n caveats,\n enforcer: valueLteEnforcer,\n });\n if (valueLteTerms !== ZERO_32_BYTES) {\n throw new Error(`Invalid value-lte terms: must be ${ZERO_32_BYTES}`);\n }\n\n const terms = getTermsByEnforcer({\n caveats,\n enforcer: erc20PeriodicEnforcer,\n });\n\n const EXPECTED_TERMS_BYTELENGTH = 116; // 20 + 32 + 32 + 32\n\n if (getByteLength(terms) !== EXPECTED_TERMS_BYTELENGTH) {\n throw new Error('Invalid erc20-token-periodic terms: expected 116 bytes');\n }\n\n const [tokenAddress, periodAmount, periodDurationRaw, startTimeRaw] =\n splitHex(terms, [20, 32, 32, 32]);\n\n const periodDuration = hexToNumber(periodDurationRaw);\n const periodAmountBigInt = hexToBigInt(periodAmount);\n const startTime = hexToNumber(startTimeRaw);\n\n if (periodAmountBigInt === 0n) {\n throw new Error(\n 'Invalid erc20-token-periodic terms: periodAmount must be a positive number',\n );\n }\n\n if (periodDuration === 0) {\n throw new Error(\n 'Invalid erc20-token-periodic terms: periodDuration must be a positive number',\n );\n }\n\n if (periodDuration > MAX_PERIOD_DURATION) {\n throw new Error(\n 'Invalid erc20-token-periodic terms: periodDuration must be less than or equal to MAX_PERIOD_DURATION',\n );\n }\n\n if (startTime === 0) {\n throw new Error(\n 'Invalid erc20-token-periodic terms: startTime must be a positive number',\n );\n }\n\n return { tokenAddress, periodAmount, periodDuration, startTime };\n}\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ChecksumEnforcersByChainId } from "../types.cjs";
|
|
2
|
+
import type { MakePermissionDecoderConfig } from "./makePermissionDecoder.cjs";
|
|
3
|
+
/**
|
|
4
|
+
* Builds the configuration for the erc20-token-periodic permission decoder.
|
|
5
|
+
*
|
|
6
|
+
* @param contractAddresses - Checksummed enforcer addresses for the chain.
|
|
7
|
+
* @returns The erc20-token-periodic permission decoder configuration.
|
|
8
|
+
*/
|
|
9
|
+
export declare function makeErc20TokenPeriodicDecoderConfig(contractAddresses: ChecksumEnforcersByChainId): MakePermissionDecoderConfig;
|
|
10
|
+
//# sourceMappingURL=erc20TokenPeriodic.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"erc20TokenPeriodic.d.cts","sourceRoot":"","sources":["../../../src/decodePermission/decoders/erc20TokenPeriodic.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEV,0BAA0B,EAE3B,qBAAoB;AAUrB,OAAO,KAAK,EAAE,2BAA2B,EAAE,oCAAmC;AAG9E;;;;;GAKG;AACH,wBAAgB,mCAAmC,CACjD,iBAAiB,EAAE,0BAA0B,GAC5C,2BAA2B,CA0B7B"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ChecksumEnforcersByChainId } from "../types.mjs";
|
|
2
|
+
import type { MakePermissionDecoderConfig } from "./makePermissionDecoder.mjs";
|
|
3
|
+
/**
|
|
4
|
+
* Builds the configuration for the erc20-token-periodic permission decoder.
|
|
5
|
+
*
|
|
6
|
+
* @param contractAddresses - Checksummed enforcer addresses for the chain.
|
|
7
|
+
* @returns The erc20-token-periodic permission decoder configuration.
|
|
8
|
+
*/
|
|
9
|
+
export declare function makeErc20TokenPeriodicDecoderConfig(contractAddresses: ChecksumEnforcersByChainId): MakePermissionDecoderConfig;
|
|
10
|
+
//# sourceMappingURL=erc20TokenPeriodic.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"erc20TokenPeriodic.d.mts","sourceRoot":"","sources":["../../../src/decodePermission/decoders/erc20TokenPeriodic.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEV,0BAA0B,EAE3B,qBAAoB;AAUrB,OAAO,KAAK,EAAE,2BAA2B,EAAE,oCAAmC;AAG9E;;;;;GAKG;AACH,wBAAgB,mCAAmC,CACjD,iBAAiB,EAAE,0BAA0B,GAC5C,2BAA2B,CA0B7B"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { hexToBigInt, hexToNumber } from "@metamask/utils";
|
|
2
|
+
import { getByteLength, getTermsByEnforcer, MAX_PERIOD_DURATION, splitHex, ZERO_32_BYTES } from "../utils.mjs";
|
|
3
|
+
import { erc20PayeeRule } from "./erc20PayeeRule.mjs";
|
|
4
|
+
import { expiryRule } from "./expiryRule.mjs";
|
|
5
|
+
import { redeemerRule } from "./redeemerRule.mjs";
|
|
6
|
+
/**
|
|
7
|
+
* Builds the configuration for the erc20-token-periodic permission decoder.
|
|
8
|
+
*
|
|
9
|
+
* @param contractAddresses - Checksummed enforcer addresses for the chain.
|
|
10
|
+
* @returns The erc20-token-periodic permission decoder configuration.
|
|
11
|
+
*/
|
|
12
|
+
export function makeErc20TokenPeriodicDecoderConfig(contractAddresses) {
|
|
13
|
+
const { timestampEnforcer, erc20PeriodicEnforcer, valueLteEnforcer, nonceEnforcer, allowedCalldataEnforcer, redeemerEnforcer, } = contractAddresses;
|
|
14
|
+
return {
|
|
15
|
+
permissionType: 'erc20-token-periodic',
|
|
16
|
+
contractAddresses,
|
|
17
|
+
optionalEnforcers: [
|
|
18
|
+
timestampEnforcer, // expiry rule
|
|
19
|
+
redeemerEnforcer, // redeemer rule
|
|
20
|
+
allowedCalldataEnforcer, // payee rule
|
|
21
|
+
],
|
|
22
|
+
requiredEnforcers: {
|
|
23
|
+
[erc20PeriodicEnforcer]: 1,
|
|
24
|
+
[valueLteEnforcer]: 1,
|
|
25
|
+
[nonceEnforcer]: 1,
|
|
26
|
+
},
|
|
27
|
+
rules: [expiryRule, redeemerRule, erc20PayeeRule],
|
|
28
|
+
validateAndDecodeData,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Decodes erc20-token-periodic permission data from caveats; throws on invalid.
|
|
33
|
+
*
|
|
34
|
+
* @param caveats - Caveats from the permission context (checksummed).
|
|
35
|
+
* @param contractAddresses - Checksummed enforcer addresses for the chain.
|
|
36
|
+
* @returns Decoded periodic terms.
|
|
37
|
+
*/
|
|
38
|
+
function validateAndDecodeData(caveats, contractAddresses) {
|
|
39
|
+
const { erc20PeriodicEnforcer, valueLteEnforcer } = contractAddresses;
|
|
40
|
+
const valueLteTerms = getTermsByEnforcer({
|
|
41
|
+
caveats,
|
|
42
|
+
enforcer: valueLteEnforcer,
|
|
43
|
+
});
|
|
44
|
+
if (valueLteTerms !== ZERO_32_BYTES) {
|
|
45
|
+
throw new Error(`Invalid value-lte terms: must be ${ZERO_32_BYTES}`);
|
|
46
|
+
}
|
|
47
|
+
const terms = getTermsByEnforcer({
|
|
48
|
+
caveats,
|
|
49
|
+
enforcer: erc20PeriodicEnforcer,
|
|
50
|
+
});
|
|
51
|
+
const EXPECTED_TERMS_BYTELENGTH = 116; // 20 + 32 + 32 + 32
|
|
52
|
+
if (getByteLength(terms) !== EXPECTED_TERMS_BYTELENGTH) {
|
|
53
|
+
throw new Error('Invalid erc20-token-periodic terms: expected 116 bytes');
|
|
54
|
+
}
|
|
55
|
+
const [tokenAddress, periodAmount, periodDurationRaw, startTimeRaw] = splitHex(terms, [20, 32, 32, 32]);
|
|
56
|
+
const periodDuration = hexToNumber(periodDurationRaw);
|
|
57
|
+
const periodAmountBigInt = hexToBigInt(periodAmount);
|
|
58
|
+
const startTime = hexToNumber(startTimeRaw);
|
|
59
|
+
if (periodAmountBigInt === 0n) {
|
|
60
|
+
throw new Error('Invalid erc20-token-periodic terms: periodAmount must be a positive number');
|
|
61
|
+
}
|
|
62
|
+
if (periodDuration === 0) {
|
|
63
|
+
throw new Error('Invalid erc20-token-periodic terms: periodDuration must be a positive number');
|
|
64
|
+
}
|
|
65
|
+
if (periodDuration > MAX_PERIOD_DURATION) {
|
|
66
|
+
throw new Error('Invalid erc20-token-periodic terms: periodDuration must be less than or equal to MAX_PERIOD_DURATION');
|
|
67
|
+
}
|
|
68
|
+
if (startTime === 0) {
|
|
69
|
+
throw new Error('Invalid erc20-token-periodic terms: startTime must be a positive number');
|
|
70
|
+
}
|
|
71
|
+
return { tokenAddress, periodAmount, periodDuration, startTime };
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=erc20TokenPeriodic.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"erc20TokenPeriodic.mjs","sourceRoot":"","sources":["../../../src/decodePermission/decoders/erc20TokenPeriodic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,wBAAwB;AAO3D,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,mBAAmB,EACnB,QAAQ,EACR,aAAa,EACd,qBAAoB;AACrB,OAAO,EAAE,cAAc,EAAE,6BAA4B;AACrD,OAAO,EAAE,UAAU,EAAE,yBAAwB;AAE7C,OAAO,EAAE,YAAY,EAAE,2BAA0B;AAEjD;;;;;GAKG;AACH,MAAM,UAAU,mCAAmC,CACjD,iBAA6C;IAE7C,MAAM,EACJ,iBAAiB,EACjB,qBAAqB,EACrB,gBAAgB,EAChB,aAAa,EACb,uBAAuB,EACvB,gBAAgB,GACjB,GAAG,iBAAiB,CAAC;IAEtB,OAAO;QACL,cAAc,EAAE,sBAAsB;QACtC,iBAAiB;QACjB,iBAAiB,EAAE;YACjB,iBAAiB,EAAE,cAAc;YACjC,gBAAgB,EAAE,gBAAgB;YAClC,uBAAuB,EAAE,aAAa;SACvC;QACD,iBAAiB,EAAE;YACjB,CAAC,qBAAqB,CAAC,EAAE,CAAC;YAC1B,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACrB,CAAC,aAAa,CAAC,EAAE,CAAC;SACnB;QACD,KAAK,EAAE,CAAC,UAAU,EAAE,YAAY,EAAE,cAAc,CAAC;QACjD,qBAAqB;KACtB,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,SAAS,qBAAqB,CAC5B,OAAyB,EACzB,iBAA6C;IAE7C,MAAM,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,GAAG,iBAAiB,CAAC;IAEtE,MAAM,aAAa,GAAG,kBAAkB,CAAC;QACvC,OAAO;QACP,QAAQ,EAAE,gBAAgB;KAC3B,CAAC,CAAC;IACH,IAAI,aAAa,KAAK,aAAa,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,oCAAoC,aAAa,EAAE,CAAC,CAAC;IACvE,CAAC;IAED,MAAM,KAAK,GAAG,kBAAkB,CAAC;QAC/B,OAAO;QACP,QAAQ,EAAE,qBAAqB;KAChC,CAAC,CAAC;IAEH,MAAM,yBAAyB,GAAG,GAAG,CAAC,CAAC,oBAAoB;IAE3D,IAAI,aAAa,CAAC,KAAK,CAAC,KAAK,yBAAyB,EAAE,CAAC;QACvD,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;IAC5E,CAAC;IAED,MAAM,CAAC,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,YAAY,CAAC,GACjE,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IAEpC,MAAM,cAAc,GAAG,WAAW,CAAC,iBAAiB,CAAC,CAAC;IACtD,MAAM,kBAAkB,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC;IACrD,MAAM,SAAS,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC;IAE5C,IAAI,kBAAkB,KAAK,EAAE,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CACb,4EAA4E,CAC7E,CAAC;IACJ,CAAC;IAED,IAAI,cAAc,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CACb,8EAA8E,CAC/E,CAAC;IACJ,CAAC;IAED,IAAI,cAAc,GAAG,mBAAmB,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CACb,sGAAsG,CACvG,CAAC;IACJ,CAAC;IAED,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CACb,yEAAyE,CAC1E,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,SAAS,EAAE,CAAC;AACnE,CAAC","sourcesContent":["import { hexToBigInt, hexToNumber } from '@metamask/utils';\n\nimport type {\n ChecksumCaveat,\n ChecksumEnforcersByChainId,\n DecodedPermission,\n} from '../types.js';\nimport {\n getByteLength,\n getTermsByEnforcer,\n MAX_PERIOD_DURATION,\n splitHex,\n ZERO_32_BYTES,\n} from '../utils.js';\nimport { erc20PayeeRule } from './erc20PayeeRule.js';\nimport { expiryRule } from './expiryRule.js';\nimport type { MakePermissionDecoderConfig } from './makePermissionDecoder.js';\nimport { redeemerRule } from './redeemerRule.js';\n\n/**\n * Builds the configuration for the erc20-token-periodic permission decoder.\n *\n * @param contractAddresses - Checksummed enforcer addresses for the chain.\n * @returns The erc20-token-periodic permission decoder configuration.\n */\nexport function makeErc20TokenPeriodicDecoderConfig(\n contractAddresses: ChecksumEnforcersByChainId,\n): MakePermissionDecoderConfig {\n const {\n timestampEnforcer,\n erc20PeriodicEnforcer,\n valueLteEnforcer,\n nonceEnforcer,\n allowedCalldataEnforcer,\n redeemerEnforcer,\n } = contractAddresses;\n\n return {\n permissionType: 'erc20-token-periodic',\n contractAddresses,\n optionalEnforcers: [\n timestampEnforcer, // expiry rule\n redeemerEnforcer, // redeemer rule\n allowedCalldataEnforcer, // payee rule\n ],\n requiredEnforcers: {\n [erc20PeriodicEnforcer]: 1,\n [valueLteEnforcer]: 1,\n [nonceEnforcer]: 1,\n },\n rules: [expiryRule, redeemerRule, erc20PayeeRule],\n validateAndDecodeData,\n };\n}\n\n/**\n * Decodes erc20-token-periodic permission data from caveats; throws on invalid.\n *\n * @param caveats - Caveats from the permission context (checksummed).\n * @param contractAddresses - Checksummed enforcer addresses for the chain.\n * @returns Decoded periodic terms.\n */\nfunction validateAndDecodeData(\n caveats: ChecksumCaveat[],\n contractAddresses: ChecksumEnforcersByChainId,\n): DecodedPermission['permission']['data'] {\n const { erc20PeriodicEnforcer, valueLteEnforcer } = contractAddresses;\n\n const valueLteTerms = getTermsByEnforcer({\n caveats,\n enforcer: valueLteEnforcer,\n });\n if (valueLteTerms !== ZERO_32_BYTES) {\n throw new Error(`Invalid value-lte terms: must be ${ZERO_32_BYTES}`);\n }\n\n const terms = getTermsByEnforcer({\n caveats,\n enforcer: erc20PeriodicEnforcer,\n });\n\n const EXPECTED_TERMS_BYTELENGTH = 116; // 20 + 32 + 32 + 32\n\n if (getByteLength(terms) !== EXPECTED_TERMS_BYTELENGTH) {\n throw new Error('Invalid erc20-token-periodic terms: expected 116 bytes');\n }\n\n const [tokenAddress, periodAmount, periodDurationRaw, startTimeRaw] =\n splitHex(terms, [20, 32, 32, 32]);\n\n const periodDuration = hexToNumber(periodDurationRaw);\n const periodAmountBigInt = hexToBigInt(periodAmount);\n const startTime = hexToNumber(startTimeRaw);\n\n if (periodAmountBigInt === 0n) {\n throw new Error(\n 'Invalid erc20-token-periodic terms: periodAmount must be a positive number',\n );\n }\n\n if (periodDuration === 0) {\n throw new Error(\n 'Invalid erc20-token-periodic terms: periodDuration must be a positive number',\n );\n }\n\n if (periodDuration > MAX_PERIOD_DURATION) {\n throw new Error(\n 'Invalid erc20-token-periodic terms: periodDuration must be less than or equal to MAX_PERIOD_DURATION',\n );\n }\n\n if (startTime === 0) {\n throw new Error(\n 'Invalid erc20-token-periodic terms: startTime must be a positive number',\n );\n }\n\n return { tokenAddress, periodAmount, periodDuration, startTime };\n}\n"]}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.makeErc20TokenRevocationDecoderConfig = void 0;
|
|
4
|
+
const utils_js_1 = require("../utils.cjs");
|
|
5
|
+
const expiryRule_js_1 = require("./expiryRule.cjs");
|
|
6
|
+
const redeemerRule_js_1 = require("./redeemerRule.cjs");
|
|
7
|
+
/**
|
|
8
|
+
* Builds the configuration for the erc20-token-revocation permission decoder.
|
|
9
|
+
*
|
|
10
|
+
* Revocation permissions intentionally do not support a payee rule: the
|
|
11
|
+
* AllowedCalldataEnforcer is required (with count=2) to encode both the
|
|
12
|
+
* `approve` selector and the zero-amount constraint, so it cannot also be
|
|
13
|
+
* used to extract a payee address.
|
|
14
|
+
*
|
|
15
|
+
* @param contractAddresses - Checksummed enforcer addresses for the chain.
|
|
16
|
+
* @returns The erc20-token-revocation permission decoder configuration.
|
|
17
|
+
*/
|
|
18
|
+
function makeErc20TokenRevocationDecoderConfig(contractAddresses) {
|
|
19
|
+
const { timestampEnforcer, allowedCalldataEnforcer, valueLteEnforcer, nonceEnforcer, redeemerEnforcer, } = contractAddresses;
|
|
20
|
+
return {
|
|
21
|
+
permissionType: 'erc20-token-revocation',
|
|
22
|
+
contractAddresses,
|
|
23
|
+
optionalEnforcers: [
|
|
24
|
+
timestampEnforcer, // expiry rule
|
|
25
|
+
redeemerEnforcer, // redeemer rule
|
|
26
|
+
],
|
|
27
|
+
requiredEnforcers: {
|
|
28
|
+
[allowedCalldataEnforcer]: 2,
|
|
29
|
+
[valueLteEnforcer]: 1,
|
|
30
|
+
[nonceEnforcer]: 1,
|
|
31
|
+
},
|
|
32
|
+
rules: [expiryRule_js_1.expiryRule, redeemerRule_js_1.redeemerRule],
|
|
33
|
+
validateAndDecodeData,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
exports.makeErc20TokenRevocationDecoderConfig = makeErc20TokenRevocationDecoderConfig;
|
|
37
|
+
/**
|
|
38
|
+
* Decodes erc20-token-revocation permission data from caveats; throws on invalid.
|
|
39
|
+
*
|
|
40
|
+
* @param caveats - Caveats from the permission context (checksummed).
|
|
41
|
+
* @param contractAddresses - Checksummed enforcer addresses for the chain.
|
|
42
|
+
* @returns Empty object (revocation has no decoded data payload).
|
|
43
|
+
*/
|
|
44
|
+
function validateAndDecodeData(caveats, contractAddresses) {
|
|
45
|
+
const { allowedCalldataEnforcer, valueLteEnforcer } = contractAddresses;
|
|
46
|
+
const allowedCalldataCaveats = caveats.filter((caveat) => caveat.enforcer === allowedCalldataEnforcer);
|
|
47
|
+
const allowedCalldataTerms = allowedCalldataCaveats.map((caveat) => caveat.terms.toLowerCase());
|
|
48
|
+
const hasApproveSelector = allowedCalldataTerms.includes(utils_js_1.ERC20_APPROVE_SELECTOR_TERMS);
|
|
49
|
+
const hasZeroAmount = allowedCalldataTerms.includes(utils_js_1.ERC20_APPROVE_ZERO_AMOUNT_TERMS);
|
|
50
|
+
if (!hasApproveSelector || !hasZeroAmount) {
|
|
51
|
+
throw new Error('Invalid erc20-token-revocation terms: expected approve selector and zero amount constraints');
|
|
52
|
+
}
|
|
53
|
+
const valueLteTerms = (0, utils_js_1.getTermsByEnforcer)({
|
|
54
|
+
caveats,
|
|
55
|
+
enforcer: valueLteEnforcer,
|
|
56
|
+
});
|
|
57
|
+
if (valueLteTerms !== utils_js_1.ZERO_32_BYTES) {
|
|
58
|
+
throw new Error('Invalid ValueLteEnforcer terms: maxValue must be 0');
|
|
59
|
+
}
|
|
60
|
+
return {};
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=erc20TokenRevocation.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"erc20TokenRevocation.cjs","sourceRoot":"","sources":["../../../src/decodePermission/decoders/erc20TokenRevocation.ts"],"names":[],"mappings":";;;AAKA,2CAKqB;AACrB,oDAA6C;AAE7C,wDAAiD;AAEjD;;;;;;;;;;GAUG;AACH,SAAgB,qCAAqC,CACnD,iBAA6C;IAE7C,MAAM,EACJ,iBAAiB,EACjB,uBAAuB,EACvB,gBAAgB,EAChB,aAAa,EACb,gBAAgB,GACjB,GAAG,iBAAiB,CAAC;IAEtB,OAAO;QACL,cAAc,EAAE,wBAAwB;QACxC,iBAAiB;QACjB,iBAAiB,EAAE;YACjB,iBAAiB,EAAE,cAAc;YACjC,gBAAgB,EAAE,gBAAgB;SACnC;QACD,iBAAiB,EAAE;YACjB,CAAC,uBAAuB,CAAC,EAAE,CAAC;YAC5B,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACrB,CAAC,aAAa,CAAC,EAAE,CAAC;SACnB;QACD,KAAK,EAAE,CAAC,0BAAU,EAAE,8BAAY,CAAC;QACjC,qBAAqB;KACtB,CAAC;AACJ,CAAC;AA1BD,sFA0BC;AAED;;;;;;GAMG;AACH,SAAS,qBAAqB,CAC5B,OAAyB,EACzB,iBAA6C;IAE7C,MAAM,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,GAAG,iBAAiB,CAAC;IAExE,MAAM,sBAAsB,GAAG,OAAO,CAAC,MAAM,CAC3C,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,KAAK,uBAAuB,CACxD,CAAC;IACF,MAAM,oBAAoB,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CACjE,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,CAC3B,CAAC;IAEF,MAAM,kBAAkB,GAAG,oBAAoB,CAAC,QAAQ,CACtD,uCAA4B,CAC7B,CAAC;IAEF,MAAM,aAAa,GAAG,oBAAoB,CAAC,QAAQ,CACjD,0CAA+B,CAChC,CAAC;IAEF,IAAI,CAAC,kBAAkB,IAAI,CAAC,aAAa,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CACb,6FAA6F,CAC9F,CAAC;IACJ,CAAC;IAED,MAAM,aAAa,GAAG,IAAA,6BAAkB,EAAC;QACvC,OAAO;QACP,QAAQ,EAAE,gBAAgB;KAC3B,CAAC,CAAC;IAEH,IAAI,aAAa,KAAK,wBAAa,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;IACxE,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC","sourcesContent":["import type {\n ChecksumCaveat,\n ChecksumEnforcersByChainId,\n DecodedPermission,\n} from '../types.js';\nimport {\n ERC20_APPROVE_SELECTOR_TERMS,\n ERC20_APPROVE_ZERO_AMOUNT_TERMS,\n getTermsByEnforcer,\n ZERO_32_BYTES,\n} from '../utils.js';\nimport { expiryRule } from './expiryRule.js';\nimport type { MakePermissionDecoderConfig } from './makePermissionDecoder.js';\nimport { redeemerRule } from './redeemerRule.js';\n\n/**\n * Builds the configuration for the erc20-token-revocation permission decoder.\n *\n * Revocation permissions intentionally do not support a payee rule: the\n * AllowedCalldataEnforcer is required (with count=2) to encode both the\n * `approve` selector and the zero-amount constraint, so it cannot also be\n * used to extract a payee address.\n *\n * @param contractAddresses - Checksummed enforcer addresses for the chain.\n * @returns The erc20-token-revocation permission decoder configuration.\n */\nexport function makeErc20TokenRevocationDecoderConfig(\n contractAddresses: ChecksumEnforcersByChainId,\n): MakePermissionDecoderConfig {\n const {\n timestampEnforcer,\n allowedCalldataEnforcer,\n valueLteEnforcer,\n nonceEnforcer,\n redeemerEnforcer,\n } = contractAddresses;\n\n return {\n permissionType: 'erc20-token-revocation',\n contractAddresses,\n optionalEnforcers: [\n timestampEnforcer, // expiry rule\n redeemerEnforcer, // redeemer rule\n ],\n requiredEnforcers: {\n [allowedCalldataEnforcer]: 2,\n [valueLteEnforcer]: 1,\n [nonceEnforcer]: 1,\n },\n rules: [expiryRule, redeemerRule],\n validateAndDecodeData,\n };\n}\n\n/**\n * Decodes erc20-token-revocation permission data from caveats; throws on invalid.\n *\n * @param caveats - Caveats from the permission context (checksummed).\n * @param contractAddresses - Checksummed enforcer addresses for the chain.\n * @returns Empty object (revocation has no decoded data payload).\n */\nfunction validateAndDecodeData(\n caveats: ChecksumCaveat[],\n contractAddresses: ChecksumEnforcersByChainId,\n): DecodedPermission['permission']['data'] {\n const { allowedCalldataEnforcer, valueLteEnforcer } = contractAddresses;\n\n const allowedCalldataCaveats = caveats.filter(\n (caveat) => caveat.enforcer === allowedCalldataEnforcer,\n );\n const allowedCalldataTerms = allowedCalldataCaveats.map((caveat) =>\n caveat.terms.toLowerCase(),\n );\n\n const hasApproveSelector = allowedCalldataTerms.includes(\n ERC20_APPROVE_SELECTOR_TERMS,\n );\n\n const hasZeroAmount = allowedCalldataTerms.includes(\n ERC20_APPROVE_ZERO_AMOUNT_TERMS,\n );\n\n if (!hasApproveSelector || !hasZeroAmount) {\n throw new Error(\n 'Invalid erc20-token-revocation terms: expected approve selector and zero amount constraints',\n );\n }\n\n const valueLteTerms = getTermsByEnforcer({\n caveats,\n enforcer: valueLteEnforcer,\n });\n\n if (valueLteTerms !== ZERO_32_BYTES) {\n throw new Error('Invalid ValueLteEnforcer terms: maxValue must be 0');\n }\n\n return {};\n}\n"]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { ChecksumEnforcersByChainId } from "../types.cjs";
|
|
2
|
+
import type { MakePermissionDecoderConfig } from "./makePermissionDecoder.cjs";
|
|
3
|
+
/**
|
|
4
|
+
* Builds the configuration for the erc20-token-revocation permission decoder.
|
|
5
|
+
*
|
|
6
|
+
* Revocation permissions intentionally do not support a payee rule: the
|
|
7
|
+
* AllowedCalldataEnforcer is required (with count=2) to encode both the
|
|
8
|
+
* `approve` selector and the zero-amount constraint, so it cannot also be
|
|
9
|
+
* used to extract a payee address.
|
|
10
|
+
*
|
|
11
|
+
* @param contractAddresses - Checksummed enforcer addresses for the chain.
|
|
12
|
+
* @returns The erc20-token-revocation permission decoder configuration.
|
|
13
|
+
*/
|
|
14
|
+
export declare function makeErc20TokenRevocationDecoderConfig(contractAddresses: ChecksumEnforcersByChainId): MakePermissionDecoderConfig;
|
|
15
|
+
//# sourceMappingURL=erc20TokenRevocation.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"erc20TokenRevocation.d.cts","sourceRoot":"","sources":["../../../src/decodePermission/decoders/erc20TokenRevocation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,0BAA0B,EAE3B,qBAAoB;AAQrB,OAAO,KAAK,EAAE,2BAA2B,EAAE,oCAAmC;AAG9E;;;;;;;;;;GAUG;AACH,wBAAgB,qCAAqC,CACnD,iBAAiB,EAAE,0BAA0B,GAC5C,2BAA2B,CAwB7B"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { ChecksumEnforcersByChainId } from "../types.mjs";
|
|
2
|
+
import type { MakePermissionDecoderConfig } from "./makePermissionDecoder.mjs";
|
|
3
|
+
/**
|
|
4
|
+
* Builds the configuration for the erc20-token-revocation permission decoder.
|
|
5
|
+
*
|
|
6
|
+
* Revocation permissions intentionally do not support a payee rule: the
|
|
7
|
+
* AllowedCalldataEnforcer is required (with count=2) to encode both the
|
|
8
|
+
* `approve` selector and the zero-amount constraint, so it cannot also be
|
|
9
|
+
* used to extract a payee address.
|
|
10
|
+
*
|
|
11
|
+
* @param contractAddresses - Checksummed enforcer addresses for the chain.
|
|
12
|
+
* @returns The erc20-token-revocation permission decoder configuration.
|
|
13
|
+
*/
|
|
14
|
+
export declare function makeErc20TokenRevocationDecoderConfig(contractAddresses: ChecksumEnforcersByChainId): MakePermissionDecoderConfig;
|
|
15
|
+
//# sourceMappingURL=erc20TokenRevocation.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"erc20TokenRevocation.d.mts","sourceRoot":"","sources":["../../../src/decodePermission/decoders/erc20TokenRevocation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,0BAA0B,EAE3B,qBAAoB;AAQrB,OAAO,KAAK,EAAE,2BAA2B,EAAE,oCAAmC;AAG9E;;;;;;;;;;GAUG;AACH,wBAAgB,qCAAqC,CACnD,iBAAiB,EAAE,0BAA0B,GAC5C,2BAA2B,CAwB7B"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { ERC20_APPROVE_SELECTOR_TERMS, ERC20_APPROVE_ZERO_AMOUNT_TERMS, getTermsByEnforcer, ZERO_32_BYTES } from "../utils.mjs";
|
|
2
|
+
import { expiryRule } from "./expiryRule.mjs";
|
|
3
|
+
import { redeemerRule } from "./redeemerRule.mjs";
|
|
4
|
+
/**
|
|
5
|
+
* Builds the configuration for the erc20-token-revocation permission decoder.
|
|
6
|
+
*
|
|
7
|
+
* Revocation permissions intentionally do not support a payee rule: the
|
|
8
|
+
* AllowedCalldataEnforcer is required (with count=2) to encode both the
|
|
9
|
+
* `approve` selector and the zero-amount constraint, so it cannot also be
|
|
10
|
+
* used to extract a payee address.
|
|
11
|
+
*
|
|
12
|
+
* @param contractAddresses - Checksummed enforcer addresses for the chain.
|
|
13
|
+
* @returns The erc20-token-revocation permission decoder configuration.
|
|
14
|
+
*/
|
|
15
|
+
export function makeErc20TokenRevocationDecoderConfig(contractAddresses) {
|
|
16
|
+
const { timestampEnforcer, allowedCalldataEnforcer, valueLteEnforcer, nonceEnforcer, redeemerEnforcer, } = contractAddresses;
|
|
17
|
+
return {
|
|
18
|
+
permissionType: 'erc20-token-revocation',
|
|
19
|
+
contractAddresses,
|
|
20
|
+
optionalEnforcers: [
|
|
21
|
+
timestampEnforcer, // expiry rule
|
|
22
|
+
redeemerEnforcer, // redeemer rule
|
|
23
|
+
],
|
|
24
|
+
requiredEnforcers: {
|
|
25
|
+
[allowedCalldataEnforcer]: 2,
|
|
26
|
+
[valueLteEnforcer]: 1,
|
|
27
|
+
[nonceEnforcer]: 1,
|
|
28
|
+
},
|
|
29
|
+
rules: [expiryRule, redeemerRule],
|
|
30
|
+
validateAndDecodeData,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Decodes erc20-token-revocation permission data from caveats; throws on invalid.
|
|
35
|
+
*
|
|
36
|
+
* @param caveats - Caveats from the permission context (checksummed).
|
|
37
|
+
* @param contractAddresses - Checksummed enforcer addresses for the chain.
|
|
38
|
+
* @returns Empty object (revocation has no decoded data payload).
|
|
39
|
+
*/
|
|
40
|
+
function validateAndDecodeData(caveats, contractAddresses) {
|
|
41
|
+
const { allowedCalldataEnforcer, valueLteEnforcer } = contractAddresses;
|
|
42
|
+
const allowedCalldataCaveats = caveats.filter((caveat) => caveat.enforcer === allowedCalldataEnforcer);
|
|
43
|
+
const allowedCalldataTerms = allowedCalldataCaveats.map((caveat) => caveat.terms.toLowerCase());
|
|
44
|
+
const hasApproveSelector = allowedCalldataTerms.includes(ERC20_APPROVE_SELECTOR_TERMS);
|
|
45
|
+
const hasZeroAmount = allowedCalldataTerms.includes(ERC20_APPROVE_ZERO_AMOUNT_TERMS);
|
|
46
|
+
if (!hasApproveSelector || !hasZeroAmount) {
|
|
47
|
+
throw new Error('Invalid erc20-token-revocation terms: expected approve selector and zero amount constraints');
|
|
48
|
+
}
|
|
49
|
+
const valueLteTerms = getTermsByEnforcer({
|
|
50
|
+
caveats,
|
|
51
|
+
enforcer: valueLteEnforcer,
|
|
52
|
+
});
|
|
53
|
+
if (valueLteTerms !== ZERO_32_BYTES) {
|
|
54
|
+
throw new Error('Invalid ValueLteEnforcer terms: maxValue must be 0');
|
|
55
|
+
}
|
|
56
|
+
return {};
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=erc20TokenRevocation.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"erc20TokenRevocation.mjs","sourceRoot":"","sources":["../../../src/decodePermission/decoders/erc20TokenRevocation.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,4BAA4B,EAC5B,+BAA+B,EAC/B,kBAAkB,EAClB,aAAa,EACd,qBAAoB;AACrB,OAAO,EAAE,UAAU,EAAE,yBAAwB;AAE7C,OAAO,EAAE,YAAY,EAAE,2BAA0B;AAEjD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,qCAAqC,CACnD,iBAA6C;IAE7C,MAAM,EACJ,iBAAiB,EACjB,uBAAuB,EACvB,gBAAgB,EAChB,aAAa,EACb,gBAAgB,GACjB,GAAG,iBAAiB,CAAC;IAEtB,OAAO;QACL,cAAc,EAAE,wBAAwB;QACxC,iBAAiB;QACjB,iBAAiB,EAAE;YACjB,iBAAiB,EAAE,cAAc;YACjC,gBAAgB,EAAE,gBAAgB;SACnC;QACD,iBAAiB,EAAE;YACjB,CAAC,uBAAuB,CAAC,EAAE,CAAC;YAC5B,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACrB,CAAC,aAAa,CAAC,EAAE,CAAC;SACnB;QACD,KAAK,EAAE,CAAC,UAAU,EAAE,YAAY,CAAC;QACjC,qBAAqB;KACtB,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,SAAS,qBAAqB,CAC5B,OAAyB,EACzB,iBAA6C;IAE7C,MAAM,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,GAAG,iBAAiB,CAAC;IAExE,MAAM,sBAAsB,GAAG,OAAO,CAAC,MAAM,CAC3C,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,KAAK,uBAAuB,CACxD,CAAC;IACF,MAAM,oBAAoB,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CACjE,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,CAC3B,CAAC;IAEF,MAAM,kBAAkB,GAAG,oBAAoB,CAAC,QAAQ,CACtD,4BAA4B,CAC7B,CAAC;IAEF,MAAM,aAAa,GAAG,oBAAoB,CAAC,QAAQ,CACjD,+BAA+B,CAChC,CAAC;IAEF,IAAI,CAAC,kBAAkB,IAAI,CAAC,aAAa,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CACb,6FAA6F,CAC9F,CAAC;IACJ,CAAC;IAED,MAAM,aAAa,GAAG,kBAAkB,CAAC;QACvC,OAAO;QACP,QAAQ,EAAE,gBAAgB;KAC3B,CAAC,CAAC;IAEH,IAAI,aAAa,KAAK,aAAa,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;IACxE,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC","sourcesContent":["import type {\n ChecksumCaveat,\n ChecksumEnforcersByChainId,\n DecodedPermission,\n} from '../types.js';\nimport {\n ERC20_APPROVE_SELECTOR_TERMS,\n ERC20_APPROVE_ZERO_AMOUNT_TERMS,\n getTermsByEnforcer,\n ZERO_32_BYTES,\n} from '../utils.js';\nimport { expiryRule } from './expiryRule.js';\nimport type { MakePermissionDecoderConfig } from './makePermissionDecoder.js';\nimport { redeemerRule } from './redeemerRule.js';\n\n/**\n * Builds the configuration for the erc20-token-revocation permission decoder.\n *\n * Revocation permissions intentionally do not support a payee rule: the\n * AllowedCalldataEnforcer is required (with count=2) to encode both the\n * `approve` selector and the zero-amount constraint, so it cannot also be\n * used to extract a payee address.\n *\n * @param contractAddresses - Checksummed enforcer addresses for the chain.\n * @returns The erc20-token-revocation permission decoder configuration.\n */\nexport function makeErc20TokenRevocationDecoderConfig(\n contractAddresses: ChecksumEnforcersByChainId,\n): MakePermissionDecoderConfig {\n const {\n timestampEnforcer,\n allowedCalldataEnforcer,\n valueLteEnforcer,\n nonceEnforcer,\n redeemerEnforcer,\n } = contractAddresses;\n\n return {\n permissionType: 'erc20-token-revocation',\n contractAddresses,\n optionalEnforcers: [\n timestampEnforcer, // expiry rule\n redeemerEnforcer, // redeemer rule\n ],\n requiredEnforcers: {\n [allowedCalldataEnforcer]: 2,\n [valueLteEnforcer]: 1,\n [nonceEnforcer]: 1,\n },\n rules: [expiryRule, redeemerRule],\n validateAndDecodeData,\n };\n}\n\n/**\n * Decodes erc20-token-revocation permission data from caveats; throws on invalid.\n *\n * @param caveats - Caveats from the permission context (checksummed).\n * @param contractAddresses - Checksummed enforcer addresses for the chain.\n * @returns Empty object (revocation has no decoded data payload).\n */\nfunction validateAndDecodeData(\n caveats: ChecksumCaveat[],\n contractAddresses: ChecksumEnforcersByChainId,\n): DecodedPermission['permission']['data'] {\n const { allowedCalldataEnforcer, valueLteEnforcer } = contractAddresses;\n\n const allowedCalldataCaveats = caveats.filter(\n (caveat) => caveat.enforcer === allowedCalldataEnforcer,\n );\n const allowedCalldataTerms = allowedCalldataCaveats.map((caveat) =>\n caveat.terms.toLowerCase(),\n );\n\n const hasApproveSelector = allowedCalldataTerms.includes(\n ERC20_APPROVE_SELECTOR_TERMS,\n );\n\n const hasZeroAmount = allowedCalldataTerms.includes(\n ERC20_APPROVE_ZERO_AMOUNT_TERMS,\n );\n\n if (!hasApproveSelector || !hasZeroAmount) {\n throw new Error(\n 'Invalid erc20-token-revocation terms: expected approve selector and zero amount constraints',\n );\n }\n\n const valueLteTerms = getTermsByEnforcer({\n caveats,\n enforcer: valueLteEnforcer,\n });\n\n if (valueLteTerms !== ZERO_32_BYTES) {\n throw new Error('Invalid ValueLteEnforcer terms: maxValue must be 0');\n }\n\n return {};\n}\n"]}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.makeErc20TokenStreamDecoderConfig = void 0;
|
|
4
|
+
const utils_1 = require("@metamask/utils");
|
|
5
|
+
const utils_js_1 = require("../utils.cjs");
|
|
6
|
+
const erc20PayeeRule_js_1 = require("./erc20PayeeRule.cjs");
|
|
7
|
+
const expiryRule_js_1 = require("./expiryRule.cjs");
|
|
8
|
+
const redeemerRule_js_1 = require("./redeemerRule.cjs");
|
|
9
|
+
/**
|
|
10
|
+
* Builds the configuration for the erc20-token-stream permission decoder.
|
|
11
|
+
*
|
|
12
|
+
* @param contractAddresses - Checksummed enforcer addresses for the chain.
|
|
13
|
+
* @returns The erc20-token-stream permission decoder configuration.
|
|
14
|
+
*/
|
|
15
|
+
function makeErc20TokenStreamDecoderConfig(contractAddresses) {
|
|
16
|
+
const { timestampEnforcer, erc20StreamingEnforcer, valueLteEnforcer, nonceEnforcer, allowedCalldataEnforcer, redeemerEnforcer, } = contractAddresses;
|
|
17
|
+
return {
|
|
18
|
+
permissionType: 'erc20-token-stream',
|
|
19
|
+
contractAddresses,
|
|
20
|
+
optionalEnforcers: [
|
|
21
|
+
timestampEnforcer, // expiry rule
|
|
22
|
+
redeemerEnforcer, // redeemer rule
|
|
23
|
+
allowedCalldataEnforcer, // payee rule
|
|
24
|
+
],
|
|
25
|
+
requiredEnforcers: {
|
|
26
|
+
[erc20StreamingEnforcer]: 1,
|
|
27
|
+
[valueLteEnforcer]: 1,
|
|
28
|
+
[nonceEnforcer]: 1,
|
|
29
|
+
},
|
|
30
|
+
rules: [expiryRule_js_1.expiryRule, redeemerRule_js_1.redeemerRule, erc20PayeeRule_js_1.erc20PayeeRule],
|
|
31
|
+
validateAndDecodeData,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
exports.makeErc20TokenStreamDecoderConfig = makeErc20TokenStreamDecoderConfig;
|
|
35
|
+
/**
|
|
36
|
+
* Decodes erc20-token-stream permission data from caveats; throws on invalid.
|
|
37
|
+
*
|
|
38
|
+
* @param caveats - Caveats from the permission context (checksummed).
|
|
39
|
+
* @param contractAddresses - Checksummed enforcer addresses for the chain.
|
|
40
|
+
* @returns Decoded stream terms.
|
|
41
|
+
*/
|
|
42
|
+
function validateAndDecodeData(caveats, contractAddresses) {
|
|
43
|
+
const { erc20StreamingEnforcer, valueLteEnforcer } = contractAddresses;
|
|
44
|
+
const valueLteTerms = (0, utils_js_1.getTermsByEnforcer)({
|
|
45
|
+
caveats,
|
|
46
|
+
enforcer: valueLteEnforcer,
|
|
47
|
+
});
|
|
48
|
+
if (valueLteTerms !== utils_js_1.ZERO_32_BYTES) {
|
|
49
|
+
throw new Error(`Invalid value-lte terms: must be ${utils_js_1.ZERO_32_BYTES}`);
|
|
50
|
+
}
|
|
51
|
+
const terms = (0, utils_js_1.getTermsByEnforcer)({
|
|
52
|
+
caveats,
|
|
53
|
+
enforcer: erc20StreamingEnforcer,
|
|
54
|
+
});
|
|
55
|
+
const EXPECTED_TERMS_BYTELENGTH = 148;
|
|
56
|
+
if ((0, utils_js_1.getByteLength)(terms) !== EXPECTED_TERMS_BYTELENGTH) {
|
|
57
|
+
throw new Error('Invalid erc20-token-stream terms: expected 148 bytes');
|
|
58
|
+
}
|
|
59
|
+
const [tokenAddress, initialAmount, maxAmount, amountPerSecond, startTimeRaw,] = (0, utils_js_1.splitHex)(terms, [20, 32, 32, 32, 32]);
|
|
60
|
+
const startTime = (0, utils_1.hexToNumber)(startTimeRaw);
|
|
61
|
+
const initialAmountBigInt = (0, utils_1.hexToBigInt)(initialAmount);
|
|
62
|
+
const maxAmountBigInt = (0, utils_1.hexToBigInt)(maxAmount);
|
|
63
|
+
const amountPerSecondBigInt = (0, utils_1.hexToBigInt)(amountPerSecond);
|
|
64
|
+
if (maxAmountBigInt <= initialAmountBigInt) {
|
|
65
|
+
throw new Error('Invalid erc20-token-stream terms: maxAmount must be greater than initialAmount');
|
|
66
|
+
}
|
|
67
|
+
if (amountPerSecondBigInt === 0n) {
|
|
68
|
+
throw new Error('Invalid erc20-token-stream terms: amountPerSecond must be a positive number');
|
|
69
|
+
}
|
|
70
|
+
if (startTime === 0) {
|
|
71
|
+
throw new Error('Invalid erc20-token-stream terms: startTime must be a positive number');
|
|
72
|
+
}
|
|
73
|
+
return {
|
|
74
|
+
tokenAddress,
|
|
75
|
+
initialAmount,
|
|
76
|
+
maxAmount,
|
|
77
|
+
amountPerSecond,
|
|
78
|
+
startTime,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=erc20TokenStream.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"erc20TokenStream.cjs","sourceRoot":"","sources":["../../../src/decodePermission/decoders/erc20TokenStream.ts"],"names":[],"mappings":";;;AAAA,2CAA2D;AAO3D,2CAKqB;AACrB,4DAAqD;AACrD,oDAA6C;AAE7C,wDAAiD;AAEjD;;;;;GAKG;AACH,SAAgB,iCAAiC,CAC/C,iBAA6C;IAE7C,MAAM,EACJ,iBAAiB,EACjB,sBAAsB,EACtB,gBAAgB,EAChB,aAAa,EACb,uBAAuB,EACvB,gBAAgB,GACjB,GAAG,iBAAiB,CAAC;IAEtB,OAAO;QACL,cAAc,EAAE,oBAAoB;QACpC,iBAAiB;QACjB,iBAAiB,EAAE;YACjB,iBAAiB,EAAE,cAAc;YACjC,gBAAgB,EAAE,gBAAgB;YAClC,uBAAuB,EAAE,aAAa;SACvC;QACD,iBAAiB,EAAE;YACjB,CAAC,sBAAsB,CAAC,EAAE,CAAC;YAC3B,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACrB,CAAC,aAAa,CAAC,EAAE,CAAC;SACnB;QACD,KAAK,EAAE,CAAC,0BAAU,EAAE,8BAAY,EAAE,kCAAc,CAAC;QACjD,qBAAqB;KACtB,CAAC;AACJ,CAAC;AA5BD,8EA4BC;AAED;;;;;;GAMG;AACH,SAAS,qBAAqB,CAC5B,OAAyB,EACzB,iBAA6C;IAE7C,MAAM,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,GAAG,iBAAiB,CAAC;IACvE,MAAM,aAAa,GAAG,IAAA,6BAAkB,EAAC;QACvC,OAAO;QACP,QAAQ,EAAE,gBAAgB;KAC3B,CAAC,CAAC;IAEH,IAAI,aAAa,KAAK,wBAAa,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,oCAAoC,wBAAa,EAAE,CAAC,CAAC;IACvE,CAAC;IAED,MAAM,KAAK,GAAG,IAAA,6BAAkB,EAAC;QAC/B,OAAO;QACP,QAAQ,EAAE,sBAAsB;KACjC,CAAC,CAAC;IAEH,MAAM,yBAAyB,GAAG,GAAG,CAAC;IAEtC,IAAI,IAAA,wBAAa,EAAC,KAAK,CAAC,KAAK,yBAAyB,EAAE,CAAC;QACvD,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,CACJ,YAAY,EACZ,aAAa,EACb,SAAS,EACT,eAAe,EACf,YAAY,EACb,GAAG,IAAA,mBAAQ,EAAC,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IAE1C,MAAM,SAAS,GAAG,IAAA,mBAAW,EAAC,YAAY,CAAC,CAAC;IAC5C,MAAM,mBAAmB,GAAG,IAAA,mBAAW,EAAC,aAAa,CAAC,CAAC;IACvD,MAAM,eAAe,GAAG,IAAA,mBAAW,EAAC,SAAS,CAAC,CAAC;IAC/C,MAAM,qBAAqB,GAAG,IAAA,mBAAW,EAAC,eAAe,CAAC,CAAC;IAE3D,IAAI,eAAe,IAAI,mBAAmB,EAAE,CAAC;QAC3C,MAAM,IAAI,KAAK,CACb,gFAAgF,CACjF,CAAC;IACJ,CAAC;IAED,IAAI,qBAAqB,KAAK,EAAE,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CACb,6EAA6E,CAC9E,CAAC;IACJ,CAAC;IAED,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CACb,uEAAuE,CACxE,CAAC;IACJ,CAAC;IAED,OAAO;QACL,YAAY;QACZ,aAAa;QACb,SAAS;QACT,eAAe;QACf,SAAS;KACV,CAAC;AACJ,CAAC","sourcesContent":["import { hexToBigInt, hexToNumber } from '@metamask/utils';\n\nimport type {\n ChecksumCaveat,\n ChecksumEnforcersByChainId,\n DecodedPermission,\n} from '../types.js';\nimport {\n getByteLength,\n getTermsByEnforcer,\n splitHex,\n ZERO_32_BYTES,\n} from '../utils.js';\nimport { erc20PayeeRule } from './erc20PayeeRule.js';\nimport { expiryRule } from './expiryRule.js';\nimport type { MakePermissionDecoderConfig } from './makePermissionDecoder.js';\nimport { redeemerRule } from './redeemerRule.js';\n\n/**\n * Builds the configuration for the erc20-token-stream permission decoder.\n *\n * @param contractAddresses - Checksummed enforcer addresses for the chain.\n * @returns The erc20-token-stream permission decoder configuration.\n */\nexport function makeErc20TokenStreamDecoderConfig(\n contractAddresses: ChecksumEnforcersByChainId,\n): MakePermissionDecoderConfig {\n const {\n timestampEnforcer,\n erc20StreamingEnforcer,\n valueLteEnforcer,\n nonceEnforcer,\n allowedCalldataEnforcer,\n redeemerEnforcer,\n } = contractAddresses;\n\n return {\n permissionType: 'erc20-token-stream',\n contractAddresses,\n optionalEnforcers: [\n timestampEnforcer, // expiry rule\n redeemerEnforcer, // redeemer rule\n allowedCalldataEnforcer, // payee rule\n ],\n requiredEnforcers: {\n [erc20StreamingEnforcer]: 1,\n [valueLteEnforcer]: 1,\n [nonceEnforcer]: 1,\n },\n rules: [expiryRule, redeemerRule, erc20PayeeRule],\n validateAndDecodeData,\n };\n}\n\n/**\n * Decodes erc20-token-stream permission data from caveats; throws on invalid.\n *\n * @param caveats - Caveats from the permission context (checksummed).\n * @param contractAddresses - Checksummed enforcer addresses for the chain.\n * @returns Decoded stream terms.\n */\nfunction validateAndDecodeData(\n caveats: ChecksumCaveat[],\n contractAddresses: ChecksumEnforcersByChainId,\n): DecodedPermission['permission']['data'] {\n const { erc20StreamingEnforcer, valueLteEnforcer } = contractAddresses;\n const valueLteTerms = getTermsByEnforcer({\n caveats,\n enforcer: valueLteEnforcer,\n });\n\n if (valueLteTerms !== ZERO_32_BYTES) {\n throw new Error(`Invalid value-lte terms: must be ${ZERO_32_BYTES}`);\n }\n\n const terms = getTermsByEnforcer({\n caveats,\n enforcer: erc20StreamingEnforcer,\n });\n\n const EXPECTED_TERMS_BYTELENGTH = 148;\n\n if (getByteLength(terms) !== EXPECTED_TERMS_BYTELENGTH) {\n throw new Error('Invalid erc20-token-stream terms: expected 148 bytes');\n }\n\n const [\n tokenAddress,\n initialAmount,\n maxAmount,\n amountPerSecond,\n startTimeRaw,\n ] = splitHex(terms, [20, 32, 32, 32, 32]);\n\n const startTime = hexToNumber(startTimeRaw);\n const initialAmountBigInt = hexToBigInt(initialAmount);\n const maxAmountBigInt = hexToBigInt(maxAmount);\n const amountPerSecondBigInt = hexToBigInt(amountPerSecond);\n\n if (maxAmountBigInt <= initialAmountBigInt) {\n throw new Error(\n 'Invalid erc20-token-stream terms: maxAmount must be greater than initialAmount',\n );\n }\n\n if (amountPerSecondBigInt === 0n) {\n throw new Error(\n 'Invalid erc20-token-stream terms: amountPerSecond must be a positive number',\n );\n }\n\n if (startTime === 0) {\n throw new Error(\n 'Invalid erc20-token-stream terms: startTime must be a positive number',\n );\n }\n\n return {\n tokenAddress,\n initialAmount,\n maxAmount,\n amountPerSecond,\n startTime,\n };\n}\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ChecksumEnforcersByChainId } from "../types.cjs";
|
|
2
|
+
import type { MakePermissionDecoderConfig } from "./makePermissionDecoder.cjs";
|
|
3
|
+
/**
|
|
4
|
+
* Builds the configuration for the erc20-token-stream permission decoder.
|
|
5
|
+
*
|
|
6
|
+
* @param contractAddresses - Checksummed enforcer addresses for the chain.
|
|
7
|
+
* @returns The erc20-token-stream permission decoder configuration.
|
|
8
|
+
*/
|
|
9
|
+
export declare function makeErc20TokenStreamDecoderConfig(contractAddresses: ChecksumEnforcersByChainId): MakePermissionDecoderConfig;
|
|
10
|
+
//# sourceMappingURL=erc20TokenStream.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"erc20TokenStream.d.cts","sourceRoot":"","sources":["../../../src/decodePermission/decoders/erc20TokenStream.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEV,0BAA0B,EAE3B,qBAAoB;AASrB,OAAO,KAAK,EAAE,2BAA2B,EAAE,oCAAmC;AAG9E;;;;;GAKG;AACH,wBAAgB,iCAAiC,CAC/C,iBAAiB,EAAE,0BAA0B,GAC5C,2BAA2B,CA0B7B"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ChecksumEnforcersByChainId } from "../types.mjs";
|
|
2
|
+
import type { MakePermissionDecoderConfig } from "./makePermissionDecoder.mjs";
|
|
3
|
+
/**
|
|
4
|
+
* Builds the configuration for the erc20-token-stream permission decoder.
|
|
5
|
+
*
|
|
6
|
+
* @param contractAddresses - Checksummed enforcer addresses for the chain.
|
|
7
|
+
* @returns The erc20-token-stream permission decoder configuration.
|
|
8
|
+
*/
|
|
9
|
+
export declare function makeErc20TokenStreamDecoderConfig(contractAddresses: ChecksumEnforcersByChainId): MakePermissionDecoderConfig;
|
|
10
|
+
//# sourceMappingURL=erc20TokenStream.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"erc20TokenStream.d.mts","sourceRoot":"","sources":["../../../src/decodePermission/decoders/erc20TokenStream.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEV,0BAA0B,EAE3B,qBAAoB;AASrB,OAAO,KAAK,EAAE,2BAA2B,EAAE,oCAAmC;AAG9E;;;;;GAKG;AACH,wBAAgB,iCAAiC,CAC/C,iBAAiB,EAAE,0BAA0B,GAC5C,2BAA2B,CA0B7B"}
|