@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,77 @@
|
|
|
1
|
+
import { hexToBigInt, hexToNumber } from "@metamask/utils";
|
|
2
|
+
import { getByteLength, getTermsByEnforcer, 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-stream permission decoder.
|
|
8
|
+
*
|
|
9
|
+
* @param contractAddresses - Checksummed enforcer addresses for the chain.
|
|
10
|
+
* @returns The erc20-token-stream permission decoder configuration.
|
|
11
|
+
*/
|
|
12
|
+
export function makeErc20TokenStreamDecoderConfig(contractAddresses) {
|
|
13
|
+
const { timestampEnforcer, erc20StreamingEnforcer, valueLteEnforcer, nonceEnforcer, allowedCalldataEnforcer, redeemerEnforcer, } = contractAddresses;
|
|
14
|
+
return {
|
|
15
|
+
permissionType: 'erc20-token-stream',
|
|
16
|
+
contractAddresses,
|
|
17
|
+
optionalEnforcers: [
|
|
18
|
+
timestampEnforcer, // expiry rule
|
|
19
|
+
redeemerEnforcer, // redeemer rule
|
|
20
|
+
allowedCalldataEnforcer, // payee rule
|
|
21
|
+
],
|
|
22
|
+
requiredEnforcers: {
|
|
23
|
+
[erc20StreamingEnforcer]: 1,
|
|
24
|
+
[valueLteEnforcer]: 1,
|
|
25
|
+
[nonceEnforcer]: 1,
|
|
26
|
+
},
|
|
27
|
+
rules: [expiryRule, redeemerRule, erc20PayeeRule],
|
|
28
|
+
validateAndDecodeData,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Decodes erc20-token-stream 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 stream terms.
|
|
37
|
+
*/
|
|
38
|
+
function validateAndDecodeData(caveats, contractAddresses) {
|
|
39
|
+
const { erc20StreamingEnforcer, 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: erc20StreamingEnforcer,
|
|
50
|
+
});
|
|
51
|
+
const EXPECTED_TERMS_BYTELENGTH = 148;
|
|
52
|
+
if (getByteLength(terms) !== EXPECTED_TERMS_BYTELENGTH) {
|
|
53
|
+
throw new Error('Invalid erc20-token-stream terms: expected 148 bytes');
|
|
54
|
+
}
|
|
55
|
+
const [tokenAddress, initialAmount, maxAmount, amountPerSecond, startTimeRaw,] = splitHex(terms, [20, 32, 32, 32, 32]);
|
|
56
|
+
const startTime = hexToNumber(startTimeRaw);
|
|
57
|
+
const initialAmountBigInt = hexToBigInt(initialAmount);
|
|
58
|
+
const maxAmountBigInt = hexToBigInt(maxAmount);
|
|
59
|
+
const amountPerSecondBigInt = hexToBigInt(amountPerSecond);
|
|
60
|
+
if (maxAmountBigInt <= initialAmountBigInt) {
|
|
61
|
+
throw new Error('Invalid erc20-token-stream terms: maxAmount must be greater than initialAmount');
|
|
62
|
+
}
|
|
63
|
+
if (amountPerSecondBigInt === 0n) {
|
|
64
|
+
throw new Error('Invalid erc20-token-stream terms: amountPerSecond must be a positive number');
|
|
65
|
+
}
|
|
66
|
+
if (startTime === 0) {
|
|
67
|
+
throw new Error('Invalid erc20-token-stream terms: startTime must be a positive number');
|
|
68
|
+
}
|
|
69
|
+
return {
|
|
70
|
+
tokenAddress,
|
|
71
|
+
initialAmount,
|
|
72
|
+
maxAmount,
|
|
73
|
+
amountPerSecond,
|
|
74
|
+
startTime,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=erc20TokenStream.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"erc20TokenStream.mjs","sourceRoot":"","sources":["../../../src/decodePermission/decoders/erc20TokenStream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,wBAAwB;AAO3D,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,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,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,UAAU,EAAE,YAAY,EAAE,cAAc,CAAC;QACjD,qBAAqB;KACtB,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,SAAS,qBAAqB,CAC5B,OAAyB,EACzB,iBAA6C;IAE7C,MAAM,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,GAAG,iBAAiB,CAAC;IACvE,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,oCAAoC,aAAa,EAAE,CAAC,CAAC;IACvE,CAAC;IAED,MAAM,KAAK,GAAG,kBAAkB,CAAC;QAC/B,OAAO;QACP,QAAQ,EAAE,sBAAsB;KACjC,CAAC,CAAC;IAEH,MAAM,yBAAyB,GAAG,GAAG,CAAC;IAEtC,IAAI,aAAa,CAAC,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,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IAE1C,MAAM,SAAS,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC;IAC5C,MAAM,mBAAmB,GAAG,WAAW,CAAC,aAAa,CAAC,CAAC;IACvD,MAAM,eAAe,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;IAC/C,MAAM,qBAAqB,GAAG,WAAW,CAAC,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,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.expiryRule = void 0;
|
|
4
|
+
const constants_js_1 = require("../../constants.cjs");
|
|
5
|
+
const utils_js_1 = require("../utils.cjs");
|
|
6
|
+
/**
|
|
7
|
+
* Rule decoder that extracts the expiry timestamp from a TimestampEnforcer
|
|
8
|
+
* caveat, when present. Returns a standard {@link Rule} so that
|
|
9
|
+
* `makePermissionDecoder` can append it to the decoded permission's `rules`
|
|
10
|
+
* array. The decoder body additionally hoists the timestamp onto the
|
|
11
|
+
* top-level `expiry` field of the response.
|
|
12
|
+
*
|
|
13
|
+
* @param args - The arguments to this function.
|
|
14
|
+
* @param args.contractAddresses - Checksummed enforcer addresses for the chain.
|
|
15
|
+
* @param args.caveats - Checksummed caveats from the delegation.
|
|
16
|
+
* @returns A `{ type: 'expiry', data: { timestamp } }` rule when a
|
|
17
|
+
* TimestampEnforcer caveat exists, otherwise `null`.
|
|
18
|
+
*/
|
|
19
|
+
const expiryRule = ({ contractAddresses, caveats }) => {
|
|
20
|
+
const { timestampEnforcer } = contractAddresses;
|
|
21
|
+
const expiryTerms = (0, utils_js_1.getTermsByEnforcer)({
|
|
22
|
+
caveats,
|
|
23
|
+
enforcer: timestampEnforcer,
|
|
24
|
+
throwIfNotFound: false,
|
|
25
|
+
});
|
|
26
|
+
if (!expiryTerms) {
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
return {
|
|
30
|
+
type: constants_js_1.EXECUTION_PERMISSION_EXPIRY_RULE_TYPE,
|
|
31
|
+
data: { timestamp: (0, utils_js_1.extractExpiryFromCaveatTerms)(expiryTerms) },
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
exports.expiryRule = expiryRule;
|
|
35
|
+
//# sourceMappingURL=expiryRule.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expiryRule.cjs","sourceRoot":"","sources":["../../../src/decodePermission/decoders/expiryRule.ts"],"names":[],"mappings":";;;AAAA,sDAA2E;AAE3E,2CAA+E;AAE/E;;;;;;;;;;;;GAYG;AACI,MAAM,UAAU,GAAgB,CAAC,EAAE,iBAAiB,EAAE,OAAO,EAAE,EAAE,EAAE;IACxE,MAAM,EAAE,iBAAiB,EAAE,GAAG,iBAAiB,CAAC;IAEhD,MAAM,WAAW,GAAG,IAAA,6BAAkB,EAAC;QACrC,OAAO;QACP,QAAQ,EAAE,iBAAiB;QAC3B,eAAe,EAAE,KAAK;KACvB,CAAC,CAAC;IAEH,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO;QACL,IAAI,EAAE,oDAAqC;QAC3C,IAAI,EAAE,EAAE,SAAS,EAAE,IAAA,uCAA4B,EAAC,WAAW,CAAC,EAAE;KAC/D,CAAC;AACJ,CAAC,CAAC;AAjBW,QAAA,UAAU,cAiBrB","sourcesContent":["import { EXECUTION_PERMISSION_EXPIRY_RULE_TYPE } from '../../constants.js';\nimport type { RuleDecoder } from '../types.js';\nimport { extractExpiryFromCaveatTerms, getTermsByEnforcer } from '../utils.js';\n\n/**\n * Rule decoder that extracts the expiry timestamp from a TimestampEnforcer\n * caveat, when present. Returns a standard {@link Rule} so that\n * `makePermissionDecoder` can append it to the decoded permission's `rules`\n * array. The decoder body additionally hoists the timestamp onto the\n * top-level `expiry` field of the response.\n *\n * @param args - The arguments to this function.\n * @param args.contractAddresses - Checksummed enforcer addresses for the chain.\n * @param args.caveats - Checksummed caveats from the delegation.\n * @returns A `{ type: 'expiry', data: { timestamp } }` rule when a\n * TimestampEnforcer caveat exists, otherwise `null`.\n */\nexport const expiryRule: RuleDecoder = ({ contractAddresses, caveats }) => {\n const { timestampEnforcer } = contractAddresses;\n\n const expiryTerms = getTermsByEnforcer({\n caveats,\n enforcer: timestampEnforcer,\n throwIfNotFound: false,\n });\n\n if (!expiryTerms) {\n return null;\n }\n\n return {\n type: EXECUTION_PERMISSION_EXPIRY_RULE_TYPE,\n data: { timestamp: extractExpiryFromCaveatTerms(expiryTerms) },\n };\n};\n"]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { RuleDecoder } from "../types.cjs";
|
|
2
|
+
/**
|
|
3
|
+
* Rule decoder that extracts the expiry timestamp from a TimestampEnforcer
|
|
4
|
+
* caveat, when present. Returns a standard {@link Rule} so that
|
|
5
|
+
* `makePermissionDecoder` can append it to the decoded permission's `rules`
|
|
6
|
+
* array. The decoder body additionally hoists the timestamp onto the
|
|
7
|
+
* top-level `expiry` field of the response.
|
|
8
|
+
*
|
|
9
|
+
* @param args - The arguments to this function.
|
|
10
|
+
* @param args.contractAddresses - Checksummed enforcer addresses for the chain.
|
|
11
|
+
* @param args.caveats - Checksummed caveats from the delegation.
|
|
12
|
+
* @returns A `{ type: 'expiry', data: { timestamp } }` rule when a
|
|
13
|
+
* TimestampEnforcer caveat exists, otherwise `null`.
|
|
14
|
+
*/
|
|
15
|
+
export declare const expiryRule: RuleDecoder;
|
|
16
|
+
//# sourceMappingURL=expiryRule.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expiryRule.d.cts","sourceRoot":"","sources":["../../../src/decodePermission/decoders/expiryRule.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAoB;AAG/C;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,UAAU,EAAE,WAiBxB,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { RuleDecoder } from "../types.mjs";
|
|
2
|
+
/**
|
|
3
|
+
* Rule decoder that extracts the expiry timestamp from a TimestampEnforcer
|
|
4
|
+
* caveat, when present. Returns a standard {@link Rule} so that
|
|
5
|
+
* `makePermissionDecoder` can append it to the decoded permission's `rules`
|
|
6
|
+
* array. The decoder body additionally hoists the timestamp onto the
|
|
7
|
+
* top-level `expiry` field of the response.
|
|
8
|
+
*
|
|
9
|
+
* @param args - The arguments to this function.
|
|
10
|
+
* @param args.contractAddresses - Checksummed enforcer addresses for the chain.
|
|
11
|
+
* @param args.caveats - Checksummed caveats from the delegation.
|
|
12
|
+
* @returns A `{ type: 'expiry', data: { timestamp } }` rule when a
|
|
13
|
+
* TimestampEnforcer caveat exists, otherwise `null`.
|
|
14
|
+
*/
|
|
15
|
+
export declare const expiryRule: RuleDecoder;
|
|
16
|
+
//# sourceMappingURL=expiryRule.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expiryRule.d.mts","sourceRoot":"","sources":["../../../src/decodePermission/decoders/expiryRule.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAoB;AAG/C;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,UAAU,EAAE,WAiBxB,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { EXECUTION_PERMISSION_EXPIRY_RULE_TYPE } from "../../constants.mjs";
|
|
2
|
+
import { extractExpiryFromCaveatTerms, getTermsByEnforcer } from "../utils.mjs";
|
|
3
|
+
/**
|
|
4
|
+
* Rule decoder that extracts the expiry timestamp from a TimestampEnforcer
|
|
5
|
+
* caveat, when present. Returns a standard {@link Rule} so that
|
|
6
|
+
* `makePermissionDecoder` can append it to the decoded permission's `rules`
|
|
7
|
+
* array. The decoder body additionally hoists the timestamp onto the
|
|
8
|
+
* top-level `expiry` field of the response.
|
|
9
|
+
*
|
|
10
|
+
* @param args - The arguments to this function.
|
|
11
|
+
* @param args.contractAddresses - Checksummed enforcer addresses for the chain.
|
|
12
|
+
* @param args.caveats - Checksummed caveats from the delegation.
|
|
13
|
+
* @returns A `{ type: 'expiry', data: { timestamp } }` rule when a
|
|
14
|
+
* TimestampEnforcer caveat exists, otherwise `null`.
|
|
15
|
+
*/
|
|
16
|
+
export const expiryRule = ({ contractAddresses, caveats }) => {
|
|
17
|
+
const { timestampEnforcer } = contractAddresses;
|
|
18
|
+
const expiryTerms = getTermsByEnforcer({
|
|
19
|
+
caveats,
|
|
20
|
+
enforcer: timestampEnforcer,
|
|
21
|
+
throwIfNotFound: false,
|
|
22
|
+
});
|
|
23
|
+
if (!expiryTerms) {
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
return {
|
|
27
|
+
type: EXECUTION_PERMISSION_EXPIRY_RULE_TYPE,
|
|
28
|
+
data: { timestamp: extractExpiryFromCaveatTerms(expiryTerms) },
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
//# sourceMappingURL=expiryRule.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expiryRule.mjs","sourceRoot":"","sources":["../../../src/decodePermission/decoders/expiryRule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qCAAqC,EAAE,4BAA2B;AAE3E,OAAO,EAAE,4BAA4B,EAAE,kBAAkB,EAAE,qBAAoB;AAE/E;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,UAAU,GAAgB,CAAC,EAAE,iBAAiB,EAAE,OAAO,EAAE,EAAE,EAAE;IACxE,MAAM,EAAE,iBAAiB,EAAE,GAAG,iBAAiB,CAAC;IAEhD,MAAM,WAAW,GAAG,kBAAkB,CAAC;QACrC,OAAO;QACP,QAAQ,EAAE,iBAAiB;QAC3B,eAAe,EAAE,KAAK;KACvB,CAAC,CAAC;IAEH,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO;QACL,IAAI,EAAE,qCAAqC;QAC3C,IAAI,EAAE,EAAE,SAAS,EAAE,4BAA4B,CAAC,WAAW,CAAC,EAAE;KAC/D,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import { EXECUTION_PERMISSION_EXPIRY_RULE_TYPE } from '../../constants.js';\nimport type { RuleDecoder } from '../types.js';\nimport { extractExpiryFromCaveatTerms, getTermsByEnforcer } from '../utils.js';\n\n/**\n * Rule decoder that extracts the expiry timestamp from a TimestampEnforcer\n * caveat, when present. Returns a standard {@link Rule} so that\n * `makePermissionDecoder` can append it to the decoded permission's `rules`\n * array. The decoder body additionally hoists the timestamp onto the\n * top-level `expiry` field of the response.\n *\n * @param args - The arguments to this function.\n * @param args.contractAddresses - Checksummed enforcer addresses for the chain.\n * @param args.caveats - Checksummed caveats from the delegation.\n * @returns A `{ type: 'expiry', data: { timestamp } }` rule when a\n * TimestampEnforcer caveat exists, otherwise `null`.\n */\nexport const expiryRule: RuleDecoder = ({ contractAddresses, caveats }) => {\n const { timestampEnforcer } = contractAddresses;\n\n const expiryTerms = getTermsByEnforcer({\n caveats,\n enforcer: timestampEnforcer,\n throwIfNotFound: false,\n });\n\n if (!expiryTerms) {\n return null;\n }\n\n return {\n type: EXECUTION_PERMISSION_EXPIRY_RULE_TYPE,\n data: { timestamp: extractExpiryFromCaveatTerms(expiryTerms) },\n };\n};\n"]}
|
|
@@ -1,8 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.createPermissionDecodersForContracts = void 0;
|
|
4
|
-
const
|
|
4
|
+
const utils_js_1 = require("../utils.cjs");
|
|
5
|
+
const erc20TokenAllowance_js_1 = require("./erc20TokenAllowance.cjs");
|
|
6
|
+
const erc20TokenPeriodic_js_1 = require("./erc20TokenPeriodic.cjs");
|
|
7
|
+
const erc20TokenRevocation_js_1 = require("./erc20TokenRevocation.cjs");
|
|
8
|
+
const erc20TokenStream_js_1 = require("./erc20TokenStream.cjs");
|
|
5
9
|
const makePermissionDecoder_js_1 = require("./makePermissionDecoder.cjs");
|
|
10
|
+
const nativeTokenAllowance_js_1 = require("./nativeTokenAllowance.cjs");
|
|
11
|
+
const nativeTokenPeriodic_js_1 = require("./nativeTokenPeriodic.cjs");
|
|
12
|
+
const nativeTokenStream_js_1 = require("./nativeTokenStream.cjs");
|
|
13
|
+
const tokenApprovalRevocation_js_1 = require("./tokenApprovalRevocation.cjs");
|
|
6
14
|
/**
|
|
7
15
|
* Builds the canonical set of permission decoders for a chain.
|
|
8
16
|
*
|
|
@@ -10,17 +18,22 @@ const makePermissionDecoder_js_1 = require("./makePermissionDecoder.cjs");
|
|
|
10
18
|
* and provides `caveatAddressesMatch` and `validateAndDecodePermission` so the
|
|
11
19
|
* entire decode flow can be driven by the decoders.
|
|
12
20
|
*
|
|
13
|
-
*
|
|
14
|
-
* `makePermissionDecoderConfigs` checksums them again, and {@link makePermissionDecoder}
|
|
15
|
-
* normalizes enforcer sets once more — see the module comment in
|
|
16
|
-
* `makePermissionDecoder.ts` for why checksumming is layered this way.
|
|
17
|
-
*
|
|
18
|
-
* @param contracts - The deployed enforcer addresses for the chain.
|
|
21
|
+
* @param contracts - The deployed contracts for the chain.
|
|
19
22
|
* @returns A list of permission decoders used to identify and decode permission types.
|
|
20
23
|
* @throws Propagates any errors from resolving enforcer addresses.
|
|
21
24
|
*/
|
|
22
25
|
const createPermissionDecodersForContracts = (contracts) => {
|
|
23
|
-
|
|
26
|
+
const contractAddresses = (0, utils_js_1.getChecksumEnforcersByChainId)(contracts);
|
|
27
|
+
return [
|
|
28
|
+
(0, nativeTokenStream_js_1.makeNativeTokenStreamDecoderConfig)(contractAddresses),
|
|
29
|
+
(0, nativeTokenPeriodic_js_1.makeNativeTokenPeriodicDecoderConfig)(contractAddresses),
|
|
30
|
+
(0, nativeTokenAllowance_js_1.makeNativeTokenAllowanceDecoderConfig)(contractAddresses),
|
|
31
|
+
(0, erc20TokenStream_js_1.makeErc20TokenStreamDecoderConfig)(contractAddresses),
|
|
32
|
+
(0, erc20TokenPeriodic_js_1.makeErc20TokenPeriodicDecoderConfig)(contractAddresses),
|
|
33
|
+
(0, erc20TokenAllowance_js_1.makeErc20TokenAllowanceDecoderConfig)(contractAddresses),
|
|
34
|
+
(0, erc20TokenRevocation_js_1.makeErc20TokenRevocationDecoderConfig)(contractAddresses),
|
|
35
|
+
(0, tokenApprovalRevocation_js_1.makeTokenApprovalRevocationDecoderConfig)(contractAddresses),
|
|
36
|
+
].map(makePermissionDecoder_js_1.makePermissionDecoder);
|
|
24
37
|
};
|
|
25
38
|
exports.createPermissionDecodersForContracts = createPermissionDecodersForContracts;
|
|
26
39
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sourceRoot":"","sources":["../../../src/decodePermission/decoders/index.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"index.cjs","sourceRoot":"","sources":["../../../src/decodePermission/decoders/index.ts"],"names":[],"mappings":";;;AACA,2CAA4D;AAC5D,sEAAgF;AAChF,oEAA8E;AAC9E,wEAAkF;AAClF,gEAA0E;AAC1E,0EAAmE;AACnE,wEAAkF;AAClF,sEAAgF;AAChF,kEAA4E;AAC5E,8EAAwF;AAExF;;;;;;;;;;GAUG;AACI,MAAM,oCAAoC,GAAG,CAClD,SAAkC,EACb,EAAE;IACvB,MAAM,iBAAiB,GAAG,IAAA,wCAA6B,EAAC,SAAS,CAAC,CAAC;IACnE,OAAO;QACL,IAAA,yDAAkC,EAAC,iBAAiB,CAAC;QACrD,IAAA,6DAAoC,EAAC,iBAAiB,CAAC;QACvD,IAAA,+DAAqC,EAAC,iBAAiB,CAAC;QACxD,IAAA,uDAAiC,EAAC,iBAAiB,CAAC;QACpD,IAAA,2DAAmC,EAAC,iBAAiB,CAAC;QACtD,IAAA,6DAAoC,EAAC,iBAAiB,CAAC;QACvD,IAAA,+DAAqC,EAAC,iBAAiB,CAAC;QACxD,IAAA,qEAAwC,EAAC,iBAAiB,CAAC;KAC5D,CAAC,GAAG,CAAC,gDAAqB,CAAC,CAAC;AAC/B,CAAC,CAAC;AAdW,QAAA,oCAAoC,wCAc/C","sourcesContent":["import type { DeployedContractsByName, PermissionDecoder } from '../types.js';\nimport { getChecksumEnforcersByChainId } from '../utils.js';\nimport { makeErc20TokenAllowanceDecoderConfig } from './erc20TokenAllowance.js';\nimport { makeErc20TokenPeriodicDecoderConfig } from './erc20TokenPeriodic.js';\nimport { makeErc20TokenRevocationDecoderConfig } from './erc20TokenRevocation.js';\nimport { makeErc20TokenStreamDecoderConfig } from './erc20TokenStream.js';\nimport { makePermissionDecoder } from './makePermissionDecoder.js';\nimport { makeNativeTokenAllowanceDecoderConfig } from './nativeTokenAllowance.js';\nimport { makeNativeTokenPeriodicDecoderConfig } from './nativeTokenPeriodic.js';\nimport { makeNativeTokenStreamDecoderConfig } from './nativeTokenStream.js';\nimport { makeTokenApprovalRevocationDecoderConfig } from './tokenApprovalRevocation.js';\n\n/**\n * Builds the canonical set of permission decoders for a chain.\n *\n * Each decoder specifies the `permissionType`, required/optional enforcers,\n * and provides `caveatAddressesMatch` and `validateAndDecodePermission` so the\n * entire decode flow can be driven by the decoders.\n *\n * @param contracts - The deployed contracts for the chain.\n * @returns A list of permission decoders used to identify and decode permission types.\n * @throws Propagates any errors from resolving enforcer addresses.\n */\nexport const createPermissionDecodersForContracts = (\n contracts: DeployedContractsByName,\n): PermissionDecoder[] => {\n const contractAddresses = getChecksumEnforcersByChainId(contracts);\n return [\n makeNativeTokenStreamDecoderConfig(contractAddresses),\n makeNativeTokenPeriodicDecoderConfig(contractAddresses),\n makeNativeTokenAllowanceDecoderConfig(contractAddresses),\n makeErc20TokenStreamDecoderConfig(contractAddresses),\n makeErc20TokenPeriodicDecoderConfig(contractAddresses),\n makeErc20TokenAllowanceDecoderConfig(contractAddresses),\n makeErc20TokenRevocationDecoderConfig(contractAddresses),\n makeTokenApprovalRevocationDecoderConfig(contractAddresses),\n ].map(makePermissionDecoder);\n};\n"]}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type { PermissionDecoder } from "../types.cjs";
|
|
1
|
+
import type { DeployedContractsByName, PermissionDecoder } from "../types.cjs";
|
|
3
2
|
/**
|
|
4
3
|
* Builds the canonical set of permission decoders for a chain.
|
|
5
4
|
*
|
|
@@ -7,14 +6,9 @@ import type { PermissionDecoder } from "../types.cjs";
|
|
|
7
6
|
* and provides `caveatAddressesMatch` and `validateAndDecodePermission` so the
|
|
8
7
|
* entire decode flow can be driven by the decoders.
|
|
9
8
|
*
|
|
10
|
-
*
|
|
11
|
-
* `makePermissionDecoderConfigs` checksums them again, and {@link makePermissionDecoder}
|
|
12
|
-
* normalizes enforcer sets once more — see the module comment in
|
|
13
|
-
* `makePermissionDecoder.ts` for why checksumming is layered this way.
|
|
14
|
-
*
|
|
15
|
-
* @param contracts - The deployed enforcer addresses for the chain.
|
|
9
|
+
* @param contracts - The deployed contracts for the chain.
|
|
16
10
|
* @returns A list of permission decoders used to identify and decode permission types.
|
|
17
11
|
* @throws Propagates any errors from resolving enforcer addresses.
|
|
18
12
|
*/
|
|
19
|
-
export declare const createPermissionDecodersForContracts: (contracts:
|
|
13
|
+
export declare const createPermissionDecodersForContracts: (contracts: DeployedContractsByName) => PermissionDecoder[];
|
|
20
14
|
//# sourceMappingURL=index.d.cts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../../../src/decodePermission/decoders/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../../../src/decodePermission/decoders/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,qBAAoB;AAY9E;;;;;;;;;;GAUG;AACH,eAAO,MAAM,oCAAoC,cACpC,uBAAuB,KACjC,iBAAiB,EAYnB,CAAC"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type { PermissionDecoder } from "../types.mjs";
|
|
1
|
+
import type { DeployedContractsByName, PermissionDecoder } from "../types.mjs";
|
|
3
2
|
/**
|
|
4
3
|
* Builds the canonical set of permission decoders for a chain.
|
|
5
4
|
*
|
|
@@ -7,14 +6,9 @@ import type { PermissionDecoder } from "../types.mjs";
|
|
|
7
6
|
* and provides `caveatAddressesMatch` and `validateAndDecodePermission` so the
|
|
8
7
|
* entire decode flow can be driven by the decoders.
|
|
9
8
|
*
|
|
10
|
-
*
|
|
11
|
-
* `makePermissionDecoderConfigs` checksums them again, and {@link makePermissionDecoder}
|
|
12
|
-
* normalizes enforcer sets once more — see the module comment in
|
|
13
|
-
* `makePermissionDecoder.ts` for why checksumming is layered this way.
|
|
14
|
-
*
|
|
15
|
-
* @param contracts - The deployed enforcer addresses for the chain.
|
|
9
|
+
* @param contracts - The deployed contracts for the chain.
|
|
16
10
|
* @returns A list of permission decoders used to identify and decode permission types.
|
|
17
11
|
* @throws Propagates any errors from resolving enforcer addresses.
|
|
18
12
|
*/
|
|
19
|
-
export declare const createPermissionDecodersForContracts: (contracts:
|
|
13
|
+
export declare const createPermissionDecodersForContracts: (contracts: DeployedContractsByName) => PermissionDecoder[];
|
|
20
14
|
//# sourceMappingURL=index.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../../src/decodePermission/decoders/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../../src/decodePermission/decoders/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,qBAAoB;AAY9E;;;;;;;;;;GAUG;AACH,eAAO,MAAM,oCAAoC,cACpC,uBAAuB,KACjC,iBAAiB,EAYnB,CAAC"}
|
|
@@ -1,5 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { getChecksumEnforcersByChainId } from "../utils.mjs";
|
|
2
|
+
import { makeErc20TokenAllowanceDecoderConfig } from "./erc20TokenAllowance.mjs";
|
|
3
|
+
import { makeErc20TokenPeriodicDecoderConfig } from "./erc20TokenPeriodic.mjs";
|
|
4
|
+
import { makeErc20TokenRevocationDecoderConfig } from "./erc20TokenRevocation.mjs";
|
|
5
|
+
import { makeErc20TokenStreamDecoderConfig } from "./erc20TokenStream.mjs";
|
|
2
6
|
import { makePermissionDecoder } from "./makePermissionDecoder.mjs";
|
|
7
|
+
import { makeNativeTokenAllowanceDecoderConfig } from "./nativeTokenAllowance.mjs";
|
|
8
|
+
import { makeNativeTokenPeriodicDecoderConfig } from "./nativeTokenPeriodic.mjs";
|
|
9
|
+
import { makeNativeTokenStreamDecoderConfig } from "./nativeTokenStream.mjs";
|
|
10
|
+
import { makeTokenApprovalRevocationDecoderConfig } from "./tokenApprovalRevocation.mjs";
|
|
3
11
|
/**
|
|
4
12
|
* Builds the canonical set of permission decoders for a chain.
|
|
5
13
|
*
|
|
@@ -7,16 +15,21 @@ import { makePermissionDecoder } from "./makePermissionDecoder.mjs";
|
|
|
7
15
|
* and provides `caveatAddressesMatch` and `validateAndDecodePermission` so the
|
|
8
16
|
* entire decode flow can be driven by the decoders.
|
|
9
17
|
*
|
|
10
|
-
*
|
|
11
|
-
* `makePermissionDecoderConfigs` checksums them again, and {@link makePermissionDecoder}
|
|
12
|
-
* normalizes enforcer sets once more — see the module comment in
|
|
13
|
-
* `makePermissionDecoder.ts` for why checksumming is layered this way.
|
|
14
|
-
*
|
|
15
|
-
* @param contracts - The deployed enforcer addresses for the chain.
|
|
18
|
+
* @param contracts - The deployed contracts for the chain.
|
|
16
19
|
* @returns A list of permission decoders used to identify and decode permission types.
|
|
17
20
|
* @throws Propagates any errors from resolving enforcer addresses.
|
|
18
21
|
*/
|
|
19
22
|
export const createPermissionDecodersForContracts = (contracts) => {
|
|
20
|
-
|
|
23
|
+
const contractAddresses = getChecksumEnforcersByChainId(contracts);
|
|
24
|
+
return [
|
|
25
|
+
makeNativeTokenStreamDecoderConfig(contractAddresses),
|
|
26
|
+
makeNativeTokenPeriodicDecoderConfig(contractAddresses),
|
|
27
|
+
makeNativeTokenAllowanceDecoderConfig(contractAddresses),
|
|
28
|
+
makeErc20TokenStreamDecoderConfig(contractAddresses),
|
|
29
|
+
makeErc20TokenPeriodicDecoderConfig(contractAddresses),
|
|
30
|
+
makeErc20TokenAllowanceDecoderConfig(contractAddresses),
|
|
31
|
+
makeErc20TokenRevocationDecoderConfig(contractAddresses),
|
|
32
|
+
makeTokenApprovalRevocationDecoderConfig(contractAddresses),
|
|
33
|
+
].map(makePermissionDecoder);
|
|
21
34
|
};
|
|
22
35
|
//# sourceMappingURL=index.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sourceRoot":"","sources":["../../../src/decodePermission/decoders/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.mjs","sourceRoot":"","sources":["../../../src/decodePermission/decoders/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,6BAA6B,EAAE,qBAAoB;AAC5D,OAAO,EAAE,oCAAoC,EAAE,kCAAiC;AAChF,OAAO,EAAE,mCAAmC,EAAE,iCAAgC;AAC9E,OAAO,EAAE,qCAAqC,EAAE,mCAAkC;AAClF,OAAO,EAAE,iCAAiC,EAAE,+BAA8B;AAC1E,OAAO,EAAE,qBAAqB,EAAE,oCAAmC;AACnE,OAAO,EAAE,qCAAqC,EAAE,mCAAkC;AAClF,OAAO,EAAE,oCAAoC,EAAE,kCAAiC;AAChF,OAAO,EAAE,kCAAkC,EAAE,gCAA+B;AAC5E,OAAO,EAAE,wCAAwC,EAAE,sCAAqC;AAExF;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,oCAAoC,GAAG,CAClD,SAAkC,EACb,EAAE;IACvB,MAAM,iBAAiB,GAAG,6BAA6B,CAAC,SAAS,CAAC,CAAC;IACnE,OAAO;QACL,kCAAkC,CAAC,iBAAiB,CAAC;QACrD,oCAAoC,CAAC,iBAAiB,CAAC;QACvD,qCAAqC,CAAC,iBAAiB,CAAC;QACxD,iCAAiC,CAAC,iBAAiB,CAAC;QACpD,mCAAmC,CAAC,iBAAiB,CAAC;QACtD,oCAAoC,CAAC,iBAAiB,CAAC;QACvD,qCAAqC,CAAC,iBAAiB,CAAC;QACxD,wCAAwC,CAAC,iBAAiB,CAAC;KAC5D,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;AAC/B,CAAC,CAAC","sourcesContent":["import type { DeployedContractsByName, PermissionDecoder } from '../types.js';\nimport { getChecksumEnforcersByChainId } from '../utils.js';\nimport { makeErc20TokenAllowanceDecoderConfig } from './erc20TokenAllowance.js';\nimport { makeErc20TokenPeriodicDecoderConfig } from './erc20TokenPeriodic.js';\nimport { makeErc20TokenRevocationDecoderConfig } from './erc20TokenRevocation.js';\nimport { makeErc20TokenStreamDecoderConfig } from './erc20TokenStream.js';\nimport { makePermissionDecoder } from './makePermissionDecoder.js';\nimport { makeNativeTokenAllowanceDecoderConfig } from './nativeTokenAllowance.js';\nimport { makeNativeTokenPeriodicDecoderConfig } from './nativeTokenPeriodic.js';\nimport { makeNativeTokenStreamDecoderConfig } from './nativeTokenStream.js';\nimport { makeTokenApprovalRevocationDecoderConfig } from './tokenApprovalRevocation.js';\n\n/**\n * Builds the canonical set of permission decoders for a chain.\n *\n * Each decoder specifies the `permissionType`, required/optional enforcers,\n * and provides `caveatAddressesMatch` and `validateAndDecodePermission` so the\n * entire decode flow can be driven by the decoders.\n *\n * @param contracts - The deployed contracts for the chain.\n * @returns A list of permission decoders used to identify and decode permission types.\n * @throws Propagates any errors from resolving enforcer addresses.\n */\nexport const createPermissionDecodersForContracts = (\n contracts: DeployedContractsByName,\n): PermissionDecoder[] => {\n const contractAddresses = getChecksumEnforcersByChainId(contracts);\n return [\n makeNativeTokenStreamDecoderConfig(contractAddresses),\n makeNativeTokenPeriodicDecoderConfig(contractAddresses),\n makeNativeTokenAllowanceDecoderConfig(contractAddresses),\n makeErc20TokenStreamDecoderConfig(contractAddresses),\n makeErc20TokenPeriodicDecoderConfig(contractAddresses),\n makeErc20TokenAllowanceDecoderConfig(contractAddresses),\n makeErc20TokenRevocationDecoderConfig(contractAddresses),\n makeTokenApprovalRevocationDecoderConfig(contractAddresses),\n ].map(makePermissionDecoder);\n};\n"]}
|
|
@@ -4,39 +4,13 @@ exports.makePermissionDecoder = void 0;
|
|
|
4
4
|
const utils_1 = require("@metamask/utils");
|
|
5
5
|
const constants_js_1 = require("../../constants.cjs");
|
|
6
6
|
const utils_js_1 = require("../utils.cjs");
|
|
7
|
-
/**
|
|
8
|
-
* Address checksumming in the permission decode flow.
|
|
9
|
-
*
|
|
10
|
-
* Enforcer addresses come from three sources, each of which may use a
|
|
11
|
-
* different hex encoding (EIP-55 checksummed vs lowercase). Comparisons rely
|
|
12
|
-
* on strict equality, so we normalize at function boundaries instead of
|
|
13
|
-
* requiring callers to pass a specific encoding. `getChecksumAddress` is
|
|
14
|
-
* idempotent, so repeated normalization is intentional and cheap.
|
|
15
|
-
*
|
|
16
|
-
* 1. **Canonical contract addresses** (`EnforcerAddressesByName`): normalized
|
|
17
|
-
* in {@link toEnforcerAddressesByName}, again in
|
|
18
|
-
* `makePermissionDecoderConfigs` (`checksumEnforcerAddresses` in
|
|
19
|
-
* `@metamask/7715-permission-types`), and once more below when building
|
|
20
|
-
* each decoder's required/optional enforcer sets.
|
|
21
|
-
*
|
|
22
|
-
* 2. **Delegation caveat enforcers**: read from the encoded permission
|
|
23
|
-
* context with unpredictable casing. Normalized in
|
|
24
|
-
* {@link buildEnforcerCountsAndSet} during address matching and again in
|
|
25
|
-
* `validateAndDecodePermission` before term decoding (rule decoders and
|
|
26
|
-
* `getTermsByEnforcer` compare enforcer addresses with `===`).
|
|
27
|
-
*
|
|
28
|
-
* 3. **Decoder required/optional enforcers**: populated from contract
|
|
29
|
-
* addresses by `makePermissionDecoderConfigs`; normalized at decoder
|
|
30
|
-
* construction so `caveatAddressesMatch` compares like-for-like with
|
|
31
|
-
* caveat addresses from source (2).
|
|
32
|
-
*/
|
|
33
7
|
/**
|
|
34
8
|
* Creates a single {@link PermissionDecoder} with the given type, enforcer
|
|
35
9
|
* sets, rule decoders, and decode/validate callback.
|
|
36
10
|
*
|
|
37
11
|
* @param config - The configuration describing the permission type's
|
|
38
12
|
* enforcers, rule decoders, and data decoder. See
|
|
39
|
-
* {@link
|
|
13
|
+
* {@link MakePermissionDecoderConfig} for field documentation.
|
|
40
14
|
* @param config.permissionType - The type of permission to decode.
|
|
41
15
|
* @param config.contractAddresses - Checksummed enforcer addresses for the chain.
|
|
42
16
|
* @param config.optionalEnforcers - Optional enforcers for the permission.
|
|
@@ -47,11 +21,8 @@ const utils_js_1 = require("../utils.cjs");
|
|
|
47
21
|
* `validateAndDecodePermission`.
|
|
48
22
|
*/
|
|
49
23
|
function makePermissionDecoder({ permissionType, contractAddresses, optionalEnforcers, requiredEnforcers, rules, validateAndDecodeData, }) {
|
|
50
|
-
const optionalEnforcersSet = new Set(optionalEnforcers
|
|
51
|
-
const requiredEnforcersMap = new Map(Object.entries(requiredEnforcers)
|
|
52
|
-
(0, utils_1.getChecksumAddress)(enforcer),
|
|
53
|
-
count,
|
|
54
|
-
]));
|
|
24
|
+
const optionalEnforcersSet = new Set(optionalEnforcers);
|
|
25
|
+
const requiredEnforcersMap = new Map(Object.entries(requiredEnforcers));
|
|
55
26
|
const caveatAddressesMatch = (caveatAddresses) => {
|
|
56
27
|
const { counts, enforcersSet } = (0, utils_js_1.buildEnforcerCountsAndSet)(caveatAddresses);
|
|
57
28
|
return (0, utils_js_1.enforcersMatchRule)(counts, enforcersSet, requiredEnforcersMap, optionalEnforcersSet);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"makePermissionDecoder.cjs","sourceRoot":"","sources":["../../../src/decodePermission/decoders/makePermissionDecoder.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"makePermissionDecoder.cjs","sourceRoot":"","sources":["../../../src/decodePermission/decoders/makePermissionDecoder.ts"],"names":[],"mappings":";;;AAEA,2CAAwE;AAGxE,sDAA2E;AAU3E,2CAA4E;AAoB5E;;;;;;;;;;;;;;;GAeG;AACH,SAAgB,qBAAqB,CAAC,EACpC,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,KAAK,EACL,qBAAqB,GACO;IAC5B,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACxD,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAClC,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,CACd,CAAC;IAEtB,MAAM,oBAAoB,GAAG,CAAC,eAAsB,EAAW,EAAE;QAC/D,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,IAAA,oCAAyB,EAAC,eAAe,CAAC,CAAC;QAE5E,OAAO,IAAA,6BAAkB,EACvB,MAAM,EACN,YAAY,EACZ,oBAAoB,EACpB,oBAAoB,CACrB,CAAC;IACJ,CAAC,CAAC;IAEF,MAAM,2BAA2B,GAAG,CAClC,OAAsB,EACG,EAAE;QAC3B,MAAM,eAAe,GAAqB,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YACjE,GAAG,MAAM;YACT,QAAQ,EAAE,IAAA,0BAAkB,EAAC,MAAM,CAAC,QAAQ,CAAC;SAC9C,CAAC,CAAC,CAAC;QACJ,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,eAAe,CAAC,MAAM;YACzC,8DAA8D;YAC9D,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,KAAK,IAAI,IAAI,CAAC,IAAA,yBAAiB,EAAC,KAAK,CAAC,CAC3D,CAAC;YAEF,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5B,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;YACzD,CAAC;YAED,IAAI,MAAM,GAAkB,IAAI,CAAC;YACjC,MAAM,YAAY,GAAW,EAAE,CAAC;YAEhC,KAAK,MAAM,MAAM,IAAI,KAAK,EAAE,CAAC;gBAC3B,MAAM,IAAI,GAAG,MAAM,CAAC;oBAClB,iBAAiB;oBACjB,OAAO,EAAE,eAAe;oBACxB,iBAAiB,EAAE,oBAAoB;iBACxC,CAAC,CAAC;gBAEH,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;oBAClB,SAAS;gBACX,CAAC;gBAED,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAExB,IAAI,IAAI,CAAC,IAAI,KAAK,oDAAqC,EAAE,CAAC;oBACxD,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,SAAmB,CAAC;gBACzC,CAAC;YACH,CAAC;YAED,MAAM,IAAI,GAAG,qBAAqB,CAAC,eAAe,EAAE,iBAAiB,CAAC,CAAC;YAEvE,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,MAAM;gBACN,IAAI;gBACJ,KAAK,EAAE,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;aAC1D,CAAC;QACJ,CAAC;QAAC,OAAO,WAAW,EAAE,CAAC;YACrB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,WAAoB,EAAE,CAAC;QACzD,CAAC;IACH,CAAC,CAAC;IAEF,OAAO;QACL,cAAc;QACd,oBAAoB;QACpB,2BAA2B;QAC3B,iBAAiB,EAAE,oBAAoB;QACvC,iBAAiB,EAAE,oBAAoB;KACxC,CAAC;AACJ,CAAC;AAlFD,sDAkFC","sourcesContent":["import type { Rule } from '@metamask/7715-permission-types';\nimport type { Caveat } from '@metamask/delegation-core';\nimport { getChecksumAddress, isStrictHexString } from '@metamask/utils';\nimport type { Hex } from '@metamask/utils';\n\nimport { EXECUTION_PERMISSION_EXPIRY_RULE_TYPE } from '../../constants.js';\nimport type {\n ChecksumCaveat,\n ChecksumEnforcersByChainId,\n DecodedPermission,\n PermissionDecoder,\n PermissionType,\n RuleDecoder,\n ValidateAndDecodeResult,\n} from '../types.js';\nimport { buildEnforcerCountsAndSet, enforcersMatchRule } from '../utils.js';\n\n/**\n * Configuration object describing how to decode a single permission type.\n *\n * Returned by each `make<PermissionType>DecoderConfig` factory and consumed by\n * {@link makePermissionDecoder} to produce a {@link PermissionDecoder}.\n */\nexport type MakePermissionDecoderConfig = {\n permissionType: PermissionType;\n contractAddresses: ChecksumEnforcersByChainId;\n optionalEnforcers: Hex[];\n requiredEnforcers: Record<Hex, number>;\n rules: RuleDecoder[];\n validateAndDecodeData: (\n caveats: ChecksumCaveat[],\n contractAddresses: ChecksumEnforcersByChainId,\n ) => DecodedPermission['permission']['data'];\n};\n\n/**\n * Creates a single {@link PermissionDecoder} with the given type, enforcer\n * sets, rule decoders, and decode/validate callback.\n *\n * @param config - The configuration describing the permission type's\n * enforcers, rule decoders, and data decoder. See\n * {@link MakePermissionDecoderConfig} for field documentation.\n * @param config.permissionType - The type of permission to decode.\n * @param config.contractAddresses - Checksummed enforcer addresses for the chain.\n * @param config.optionalEnforcers - Optional enforcers for the permission.\n * @param config.requiredEnforcers - Required enforcers for the permission.\n * @param config.rules - Rule decoders for the permission.\n * @param config.validateAndDecodeData - Data decoder for the permission.\n * @returns A {@link PermissionDecoder} with `caveatAddressesMatch` and\n * `validateAndDecodePermission`.\n */\nexport function makePermissionDecoder({\n permissionType,\n contractAddresses,\n optionalEnforcers,\n requiredEnforcers,\n rules,\n validateAndDecodeData,\n}: MakePermissionDecoderConfig): PermissionDecoder {\n const optionalEnforcersSet = new Set(optionalEnforcers);\n const requiredEnforcersMap = new Map(\n Object.entries(requiredEnforcers),\n ) as Map<Hex, number>;\n\n const caveatAddressesMatch = (caveatAddresses: Hex[]): boolean => {\n const { counts, enforcersSet } = buildEnforcerCountsAndSet(caveatAddresses);\n\n return enforcersMatchRule(\n counts,\n enforcersSet,\n requiredEnforcersMap,\n optionalEnforcersSet,\n );\n };\n\n const validateAndDecodePermission = (\n caveats: Caveat<Hex>[],\n ): ValidateAndDecodeResult => {\n const checksumCaveats: ChecksumCaveat[] = caveats.map((caveat) => ({\n ...caveat,\n enforcer: getChecksumAddress(caveat.enforcer),\n }));\n try {\n const invalidTerms = checksumCaveats.filter(\n // isStrictHexString rejects '0x' which is a valid terms value\n ({ terms }) => terms !== '0x' && !isStrictHexString(terms),\n );\n\n if (invalidTerms.length > 0) {\n throw new Error('Invalid terms: must be a hex string');\n }\n\n let expiry: number | null = null;\n const decodedRules: Rule[] = [];\n\n for (const decode of rules) {\n const rule = decode({\n contractAddresses,\n caveats: checksumCaveats,\n requiredEnforcers: requiredEnforcersMap,\n });\n\n if (rule === null) {\n continue;\n }\n\n decodedRules.push(rule);\n\n if (rule.type === EXECUTION_PERMISSION_EXPIRY_RULE_TYPE) {\n expiry = rule.data.timestamp as number;\n }\n }\n\n const data = validateAndDecodeData(checksumCaveats, contractAddresses);\n\n return {\n isValid: true,\n expiry,\n data,\n rules: decodedRules.length > 0 ? decodedRules : undefined,\n };\n } catch (caughtError) {\n return { isValid: false, error: caughtError as Error };\n }\n };\n\n return {\n permissionType,\n caveatAddressesMatch,\n validateAndDecodePermission,\n optionalEnforcers: optionalEnforcersSet,\n requiredEnforcers: requiredEnforcersMap,\n };\n}\n"]}
|
|
@@ -1,38 +1,26 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type { PermissionDecoder } from "../types.cjs";
|
|
1
|
+
import type { Hex } from "@metamask/utils";
|
|
2
|
+
import type { ChecksumCaveat, ChecksumEnforcersByChainId, DecodedPermission, PermissionDecoder, PermissionType, RuleDecoder } from "../types.cjs";
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
4
|
+
* Configuration object describing how to decode a single permission type.
|
|
5
5
|
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* on strict equality, so we normalize at function boundaries instead of
|
|
9
|
-
* requiring callers to pass a specific encoding. `getChecksumAddress` is
|
|
10
|
-
* idempotent, so repeated normalization is intentional and cheap.
|
|
11
|
-
*
|
|
12
|
-
* 1. **Canonical contract addresses** (`EnforcerAddressesByName`): normalized
|
|
13
|
-
* in {@link toEnforcerAddressesByName}, again in
|
|
14
|
-
* `makePermissionDecoderConfigs` (`checksumEnforcerAddresses` in
|
|
15
|
-
* `@metamask/7715-permission-types`), and once more below when building
|
|
16
|
-
* each decoder's required/optional enforcer sets.
|
|
17
|
-
*
|
|
18
|
-
* 2. **Delegation caveat enforcers**: read from the encoded permission
|
|
19
|
-
* context with unpredictable casing. Normalized in
|
|
20
|
-
* {@link buildEnforcerCountsAndSet} during address matching and again in
|
|
21
|
-
* `validateAndDecodePermission` before term decoding (rule decoders and
|
|
22
|
-
* `getTermsByEnforcer` compare enforcer addresses with `===`).
|
|
23
|
-
*
|
|
24
|
-
* 3. **Decoder required/optional enforcers**: populated from contract
|
|
25
|
-
* addresses by `makePermissionDecoderConfigs`; normalized at decoder
|
|
26
|
-
* construction so `caveatAddressesMatch` compares like-for-like with
|
|
27
|
-
* caveat addresses from source (2).
|
|
6
|
+
* Returned by each `make<PermissionType>DecoderConfig` factory and consumed by
|
|
7
|
+
* {@link makePermissionDecoder} to produce a {@link PermissionDecoder}.
|
|
28
8
|
*/
|
|
9
|
+
export type MakePermissionDecoderConfig = {
|
|
10
|
+
permissionType: PermissionType;
|
|
11
|
+
contractAddresses: ChecksumEnforcersByChainId;
|
|
12
|
+
optionalEnforcers: Hex[];
|
|
13
|
+
requiredEnforcers: Record<Hex, number>;
|
|
14
|
+
rules: RuleDecoder[];
|
|
15
|
+
validateAndDecodeData: (caveats: ChecksumCaveat[], contractAddresses: ChecksumEnforcersByChainId) => DecodedPermission['permission']['data'];
|
|
16
|
+
};
|
|
29
17
|
/**
|
|
30
18
|
* Creates a single {@link PermissionDecoder} with the given type, enforcer
|
|
31
19
|
* sets, rule decoders, and decode/validate callback.
|
|
32
20
|
*
|
|
33
21
|
* @param config - The configuration describing the permission type's
|
|
34
22
|
* enforcers, rule decoders, and data decoder. See
|
|
35
|
-
* {@link
|
|
23
|
+
* {@link MakePermissionDecoderConfig} for field documentation.
|
|
36
24
|
* @param config.permissionType - The type of permission to decode.
|
|
37
25
|
* @param config.contractAddresses - Checksummed enforcer addresses for the chain.
|
|
38
26
|
* @param config.optionalEnforcers - Optional enforcers for the permission.
|
|
@@ -42,5 +30,5 @@ import type { PermissionDecoder } from "../types.cjs";
|
|
|
42
30
|
* @returns A {@link PermissionDecoder} with `caveatAddressesMatch` and
|
|
43
31
|
* `validateAndDecodePermission`.
|
|
44
32
|
*/
|
|
45
|
-
export declare function makePermissionDecoder({ permissionType, contractAddresses, optionalEnforcers, requiredEnforcers, rules, validateAndDecodeData, }:
|
|
33
|
+
export declare function makePermissionDecoder({ permissionType, contractAddresses, optionalEnforcers, requiredEnforcers, rules, validateAndDecodeData, }: MakePermissionDecoderConfig): PermissionDecoder;
|
|
46
34
|
//# sourceMappingURL=makePermissionDecoder.d.cts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"makePermissionDecoder.d.cts","sourceRoot":"","sources":["../../../src/decodePermission/decoders/makePermissionDecoder.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"makePermissionDecoder.d.cts","sourceRoot":"","sources":["../../../src/decodePermission/decoders/makePermissionDecoder.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAG3C,OAAO,KAAK,EACV,cAAc,EACd,0BAA0B,EAC1B,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACd,WAAW,EAEZ,qBAAoB;AAGrB;;;;;GAKG;AACH,MAAM,MAAM,2BAA2B,GAAG;IACxC,cAAc,EAAE,cAAc,CAAC;IAC/B,iBAAiB,EAAE,0BAA0B,CAAC;IAC9C,iBAAiB,EAAE,GAAG,EAAE,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACvC,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,qBAAqB,EAAE,CACrB,OAAO,EAAE,cAAc,EAAE,EACzB,iBAAiB,EAAE,0BAA0B,KAC1C,iBAAiB,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;CAC9C,CAAC;AAEF;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,qBAAqB,CAAC,EACpC,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,KAAK,EACL,qBAAqB,GACtB,EAAE,2BAA2B,GAAG,iBAAiB,CA2EjD"}
|