Skip to content

Commit 71e997b

Browse files
committed
Don't call makePermissionDecoder in each of the permission type files, just return the config.
1 parent 68d21d3 commit 71e997b

9 files changed

Lines changed: 87 additions & 95 deletions

File tree

packages/gator-permissions-controller/src/decodePermission/decoders/erc20TokenAllowance.ts

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import type {
44
ChecksumCaveat,
55
ChecksumEnforcersByChainId,
66
DecodedPermission,
7-
PermissionDecoder,
87
} from '../types';
98
import {
109
getByteLength,
@@ -15,22 +14,22 @@ import {
1514
} from '../utils';
1615
import { erc20PayeeRule } from './erc20PayeeRule';
1716
import { expiryRule } from './expiryRule';
18-
import { makePermissionDecoder } from './makePermissionDecoder';
17+
import type { MakePermissionDecoderConfig } from './makePermissionDecoder';
1918
import { redeemerRule } from './redeemerRule';
2019

2120
/**
22-
* Creates the erc20-token-allowance permission decoder.
21+
* Builds the configuration for the erc20-token-allowance permission decoder.
2322
*
2423
* This permission shares the same enforcer set as `erc20-token-periodic` but
2524
* is distinguished by a `periodDuration` of `UINT256_MAX`, which effectively
2625
* disables the periodic reset and turns the caveat into a one-off allowance.
2726
*
2827
* @param contractAddresses - Checksummed enforcer addresses for the chain.
29-
* @returns The erc20-token-allowance permission decoder.
28+
* @returns The erc20-token-allowance permission decoder configuration.
3029
*/
31-
export function makeErc20TokenAllowanceDecoder(
30+
export function makeErc20TokenAllowanceDecoderConfig(
3231
contractAddresses: ChecksumEnforcersByChainId,
33-
): PermissionDecoder {
32+
): MakePermissionDecoderConfig {
3433
const {
3534
timestampEnforcer,
3635
erc20PeriodicEnforcer,
@@ -40,7 +39,7 @@ export function makeErc20TokenAllowanceDecoder(
4039
redeemerEnforcer,
4140
} = contractAddresses;
4241

43-
return makePermissionDecoder({
42+
return {
4443
permissionType: 'erc20-token-allowance',
4544
contractAddresses,
4645
optionalEnforcers: [
@@ -55,7 +54,7 @@ export function makeErc20TokenAllowanceDecoder(
5554
},
5655
rules: [expiryRule, redeemerRule, erc20PayeeRule],
5756
validateAndDecodeData,
58-
});
57+
};
5958
}
6059

6160
/**

packages/gator-permissions-controller/src/decodePermission/decoders/erc20TokenPeriodic.ts

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import type {
44
ChecksumCaveat,
55
ChecksumEnforcersByChainId,
66
DecodedPermission,
7-
PermissionDecoder,
87
} from '../types';
98
import {
109
getByteLength,
@@ -15,18 +14,18 @@ import {
1514
} from '../utils';
1615
import { erc20PayeeRule } from './erc20PayeeRule';
1716
import { expiryRule } from './expiryRule';
18-
import { makePermissionDecoder } from './makePermissionDecoder';
17+
import type { MakePermissionDecoderConfig } from './makePermissionDecoder';
1918
import { redeemerRule } from './redeemerRule';
2019

2120
/**
22-
* Creates the erc20-token-periodic permission decoder.
21+
* Builds the configuration for the erc20-token-periodic permission decoder.
2322
*
2423
* @param contractAddresses - Checksummed enforcer addresses for the chain.
25-
* @returns The erc20-token-periodic permission decoder.
24+
* @returns The erc20-token-periodic permission decoder configuration.
2625
*/
27-
export function makeErc20TokenPeriodicDecoder(
26+
export function makeErc20TokenPeriodicDecoderConfig(
2827
contractAddresses: ChecksumEnforcersByChainId,
29-
): PermissionDecoder {
28+
): MakePermissionDecoderConfig {
3029
const {
3130
timestampEnforcer,
3231
erc20PeriodicEnforcer,
@@ -36,7 +35,7 @@ export function makeErc20TokenPeriodicDecoder(
3635
redeemerEnforcer,
3736
} = contractAddresses;
3837

39-
return makePermissionDecoder({
38+
return {
4039
permissionType: 'erc20-token-periodic',
4140
contractAddresses,
4241
optionalEnforcers: [
@@ -51,7 +50,7 @@ export function makeErc20TokenPeriodicDecoder(
5150
},
5251
rules: [expiryRule, redeemerRule, erc20PayeeRule],
5352
validateAndDecodeData,
54-
});
53+
};
5554
}
5655

5756
/**

packages/gator-permissions-controller/src/decodePermission/decoders/erc20TokenRevocation.ts

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import type {
22
ChecksumCaveat,
33
ChecksumEnforcersByChainId,
44
DecodedPermission,
5-
PermissionDecoder,
65
} from '../types';
76
import {
87
ERC20_APPROVE_SELECTOR_TERMS,
@@ -11,23 +10,23 @@ import {
1110
ZERO_32_BYTES,
1211
} from '../utils';
1312
import { expiryRule } from './expiryRule';
14-
import { makePermissionDecoder } from './makePermissionDecoder';
13+
import type { MakePermissionDecoderConfig } from './makePermissionDecoder';
1514
import { redeemerRule } from './redeemerRule';
1615

1716
/**
18-
* Creates the erc20-token-revocation permission decoder.
17+
* Builds the configuration for the erc20-token-revocation permission decoder.
1918
*
2019
* Revocation permissions intentionally do not support a payee rule: the
2120
* AllowedCalldataEnforcer is required (with count=2) to encode both the
2221
* `approve` selector and the zero-amount constraint, so it cannot also be
2322
* used to extract a payee address.
2423
*
2524
* @param contractAddresses - Checksummed enforcer addresses for the chain.
26-
* @returns The erc20-token-revocation permission decoder.
25+
* @returns The erc20-token-revocation permission decoder configuration.
2726
*/
28-
export function makeErc20TokenRevocationDecoder(
27+
export function makeErc20TokenRevocationDecoderConfig(
2928
contractAddresses: ChecksumEnforcersByChainId,
30-
): PermissionDecoder {
29+
): MakePermissionDecoderConfig {
3130
const {
3231
timestampEnforcer,
3332
allowedCalldataEnforcer,
@@ -36,7 +35,7 @@ export function makeErc20TokenRevocationDecoder(
3635
redeemerEnforcer,
3736
} = contractAddresses;
3837

39-
return makePermissionDecoder({
38+
return {
4039
permissionType: 'erc20-token-revocation',
4140
contractAddresses,
4241
optionalEnforcers: [
@@ -50,7 +49,7 @@ export function makeErc20TokenRevocationDecoder(
5049
},
5150
rules: [expiryRule, redeemerRule],
5251
validateAndDecodeData,
53-
});
52+
};
5453
}
5554

5655
/**

packages/gator-permissions-controller/src/decodePermission/decoders/erc20TokenStream.ts

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import type {
44
ChecksumCaveat,
55
ChecksumEnforcersByChainId,
66
DecodedPermission,
7-
PermissionDecoder,
87
} from '../types';
98
import {
109
getByteLength,
@@ -14,18 +13,18 @@ import {
1413
} from '../utils';
1514
import { erc20PayeeRule } from './erc20PayeeRule';
1615
import { expiryRule } from './expiryRule';
17-
import { makePermissionDecoder } from './makePermissionDecoder';
16+
import type { MakePermissionDecoderConfig } from './makePermissionDecoder';
1817
import { redeemerRule } from './redeemerRule';
1918

2019
/**
21-
* Creates the erc20-token-stream permission decoder.
20+
* Builds the configuration for the erc20-token-stream permission decoder.
2221
*
2322
* @param contractAddresses - Checksummed enforcer addresses for the chain.
24-
* @returns The erc20-token-stream permission decoder.
23+
* @returns The erc20-token-stream permission decoder configuration.
2524
*/
26-
export function makeErc20TokenStreamDecoder(
25+
export function makeErc20TokenStreamDecoderConfig(
2726
contractAddresses: ChecksumEnforcersByChainId,
28-
): PermissionDecoder {
27+
): MakePermissionDecoderConfig {
2928
const {
3029
timestampEnforcer,
3130
erc20StreamingEnforcer,
@@ -35,7 +34,7 @@ export function makeErc20TokenStreamDecoder(
3534
redeemerEnforcer,
3635
} = contractAddresses;
3736

38-
return makePermissionDecoder({
37+
return {
3938
permissionType: 'erc20-token-stream',
4039
contractAddresses,
4140
optionalEnforcers: [
@@ -50,7 +49,7 @@ export function makeErc20TokenStreamDecoder(
5049
},
5150
rules: [expiryRule, redeemerRule, erc20PayeeRule],
5251
validateAndDecodeData,
53-
});
52+
};
5453
}
5554

5655
/**
Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
import type { DeployedContractsByName, PermissionDecoder } from '../types';
22
import { getChecksumEnforcersByChainId } from '../utils';
3-
import { makeErc20TokenAllowanceDecoder } from './erc20TokenAllowance';
4-
import { makeErc20TokenPeriodicDecoder } from './erc20TokenPeriodic';
5-
import { makeErc20TokenRevocationDecoder } from './erc20TokenRevocation';
6-
import { makeErc20TokenStreamDecoder } from './erc20TokenStream';
7-
import { makeNativeTokenAllowanceDecoder } from './nativeTokenAllowance';
8-
import { makeNativeTokenPeriodicDecoder } from './nativeTokenPeriodic';
9-
import { makeNativeTokenStreamDecoder } from './nativeTokenStream';
3+
import { makeErc20TokenAllowanceDecoderConfig } from './erc20TokenAllowance';
4+
import { makeErc20TokenPeriodicDecoderConfig } from './erc20TokenPeriodic';
5+
import { makeErc20TokenRevocationDecoderConfig } from './erc20TokenRevocation';
6+
import { makeErc20TokenStreamDecoderConfig } from './erc20TokenStream';
7+
import { makePermissionDecoder } from './makePermissionDecoder';
8+
import { makeNativeTokenAllowanceDecoderConfig } from './nativeTokenAllowance';
9+
import { makeNativeTokenPeriodicDecoderConfig } from './nativeTokenPeriodic';
10+
import { makeNativeTokenStreamDecoderConfig } from './nativeTokenStream';
1011

1112
/**
1213
* Builds the canonical set of permission decoders for a chain.
@@ -24,12 +25,12 @@ export const createPermissionDecodersForContracts = (
2425
): PermissionDecoder[] => {
2526
const contractAddresses = getChecksumEnforcersByChainId(contracts);
2627
return [
27-
makeNativeTokenStreamDecoder(contractAddresses),
28-
makeNativeTokenPeriodicDecoder(contractAddresses),
29-
makeNativeTokenAllowanceDecoder(contractAddresses),
30-
makeErc20TokenStreamDecoder(contractAddresses),
31-
makeErc20TokenPeriodicDecoder(contractAddresses),
32-
makeErc20TokenAllowanceDecoder(contractAddresses),
33-
makeErc20TokenRevocationDecoder(contractAddresses),
34-
];
28+
makeNativeTokenStreamDecoderConfig(contractAddresses),
29+
makeNativeTokenPeriodicDecoderConfig(contractAddresses),
30+
makeNativeTokenAllowanceDecoderConfig(contractAddresses),
31+
makeErc20TokenStreamDecoderConfig(contractAddresses),
32+
makeErc20TokenPeriodicDecoderConfig(contractAddresses),
33+
makeErc20TokenAllowanceDecoderConfig(contractAddresses),
34+
makeErc20TokenRevocationDecoderConfig(contractAddresses),
35+
].map(makePermissionDecoder);
3536
};

packages/gator-permissions-controller/src/decodePermission/decoders/makePermissionDecoder.ts

Lines changed: 22 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -15,23 +15,31 @@ import type {
1515
} from '../types';
1616
import { buildEnforcerCountsAndSet, enforcersMatchRule } from '../utils';
1717

18+
/**
19+
* Configuration object describing how to decode a single permission type.
20+
*
21+
* Returned by each `make<PermissionType>DecoderConfig` factory and consumed by
22+
* {@link makePermissionDecoder} to produce a {@link PermissionDecoder}.
23+
*/
24+
export type MakePermissionDecoderConfig = {
25+
permissionType: PermissionType;
26+
contractAddresses: ChecksumEnforcersByChainId;
27+
optionalEnforcers: Hex[];
28+
requiredEnforcers: Record<Hex, number>;
29+
rules: RuleDecoder[];
30+
validateAndDecodeData: (
31+
caveats: ChecksumCaveat[],
32+
contractAddresses: ChecksumEnforcersByChainId,
33+
) => DecodedPermission['permission']['data'];
34+
};
35+
1836
/**
1937
* Creates a single {@link PermissionDecoder} with the given type, enforcer
2038
* sets, rule decoders, and decode/validate callback.
2139
*
22-
* @param args - The arguments to this function.
23-
* @param args.permissionType - The permission type identifier.
24-
* @param args.contractAddresses - Checksummed enforcer addresses for the chain.
25-
* @param args.optionalEnforcers - Enforcer addresses that may appear in addition
26-
* to the required ones.
27-
* @param args.requiredEnforcers - Map of required enforcer address to required
28-
* count.
29-
* @param args.rules - Rule decoder functions invoked to decode rules (e.g.
30-
* `redeemer`, `payee`, `expiry`) from the caveats. Each may emit a {@link Rule}
31-
* to append to the decoded permission's `rules` array. The `expiry` rule is
32-
* additionally hoisted onto the top-level `expiry` field of the result.
33-
* @param args.validateAndDecodeData - Callback to decode the permission's
34-
* `data` payload from the caveats; may throw on invalid input.
40+
* @param config - The configuration describing the permission type's
41+
* enforcers, rule decoders, and data decoder. See
42+
* {@link MakePermissionDecoderConfig} for field documentation.
3543
* @returns A {@link PermissionDecoder} with `caveatAddressesMatch` and
3644
* `validateAndDecodePermission`.
3745
*/
@@ -42,17 +50,7 @@ export function makePermissionDecoder({
4250
requiredEnforcers,
4351
rules,
4452
validateAndDecodeData,
45-
}: {
46-
permissionType: PermissionType;
47-
contractAddresses: ChecksumEnforcersByChainId;
48-
optionalEnforcers: Hex[];
49-
requiredEnforcers: Record<Hex, number>;
50-
rules: RuleDecoder[];
51-
validateAndDecodeData: (
52-
caveats: ChecksumCaveat[],
53-
contractAddresses: ChecksumEnforcersByChainId,
54-
) => DecodedPermission['permission']['data'];
55-
}): PermissionDecoder {
53+
}: MakePermissionDecoderConfig): PermissionDecoder {
5654
const optionalEnforcersSet = new Set(optionalEnforcers);
5755
const requiredEnforcersMap = new Map(
5856
Object.entries(requiredEnforcers),

packages/gator-permissions-controller/src/decodePermission/decoders/nativeTokenAllowance.ts

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import type {
44
ChecksumCaveat,
55
ChecksumEnforcersByChainId,
66
DecodedPermission,
7-
PermissionDecoder,
87
} from '../types';
98
import {
109
getByteLength,
@@ -14,23 +13,23 @@ import {
1413
ZERO_32_BYTES,
1514
} from '../utils';
1615
import { expiryRule } from './expiryRule';
17-
import { makePermissionDecoder } from './makePermissionDecoder';
16+
import type { MakePermissionDecoderConfig } from './makePermissionDecoder';
1817
import { nativePayeeRule } from './nativePayeeRule';
1918
import { redeemerRule } from './redeemerRule';
2019

2120
/**
22-
* Creates the native-token-allowance permission decoder.
21+
* Builds the configuration for the native-token-allowance permission decoder.
2322
*
2423
* This permission shares the same enforcer set as `native-token-periodic` but
2524
* is distinguished by a `periodDuration` of `UINT256_MAX`, which effectively
2625
* disables the periodic reset and turns the caveat into a one-off allowance.
2726
*
2827
* @param contractAddresses - Checksummed enforcer addresses for the chain.
29-
* @returns The native-token-allowance permission decoder.
28+
* @returns The native-token-allowance permission decoder configuration.
3029
*/
31-
export function makeNativeTokenAllowanceDecoder(
30+
export function makeNativeTokenAllowanceDecoderConfig(
3231
contractAddresses: ChecksumEnforcersByChainId,
33-
): PermissionDecoder {
32+
): MakePermissionDecoderConfig {
3433
const {
3534
timestampEnforcer,
3635
nativeTokenPeriodicEnforcer,
@@ -40,7 +39,7 @@ export function makeNativeTokenAllowanceDecoder(
4039
redeemerEnforcer,
4140
} = contractAddresses;
4241

43-
return makePermissionDecoder({
42+
return {
4443
permissionType: 'native-token-allowance',
4544
contractAddresses,
4645
optionalEnforcers: [
@@ -55,7 +54,7 @@ export function makeNativeTokenAllowanceDecoder(
5554
},
5655
rules: [expiryRule, redeemerRule, nativePayeeRule],
5756
validateAndDecodeData,
58-
});
57+
};
5958
}
6059

6160
/**

0 commit comments

Comments
 (0)