Skip to content

Commit 09f520e

Browse files
committed
All permission decoders are now permission-type specific typed, ensuring returned data is appropriately typed.
1 parent 64b1713 commit 09f520e

12 files changed

Lines changed: 55 additions & 28 deletions

packages/7715-permission-types/src/permissions/caveats/erc20TokenAllowance.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import type { Erc20TokenAllowancePermission } from '../../types';
12
import { expiryRule } from '../rules/expiry';
23
import { erc20PayeeRuleDecoder } from '../rules/payee';
34
import { redeemerRuleDecoder } from '../rules/redeemer';
@@ -61,7 +62,7 @@ export function makeErc20TokenAllowanceDecoderConfig(
6162
function validateAndDecodeData(
6263
caveats: ChecksumCaveat[],
6364
contractAddresses: ChecksumEnforcersByChainId,
64-
): DecodedPermissionData {
65+
): DecodedPermissionData<Erc20TokenAllowancePermission> {
6566
const { erc20PeriodicEnforcer, valueLteEnforcer } = contractAddresses;
6667

6768
const valueLteTerms = getTermsByEnforcer({

packages/7715-permission-types/src/permissions/caveats/erc20TokenPeriodic.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import { decodeERC20TokenPeriodTransferTerms } from '@metamask/delegation-core';
2+
import { bigIntToHex } from '@metamask/utils';
23

4+
import type { Erc20TokenPeriodicPermission } from '../../types';
35
import { expiryRule } from '../rules/expiry';
46
import { erc20PayeeRuleDecoder } from '../rules/payee';
57
import { redeemerRuleDecoder } from '../rules/redeemer';
@@ -61,7 +63,7 @@ export function makeErc20TokenPeriodicDecoderConfig(
6163
function validateAndDecodeData(
6264
caveats: ChecksumCaveat[],
6365
contractAddresses: ChecksumEnforcersByChainId,
64-
): DecodedPermissionData {
66+
): DecodedPermissionData<Erc20TokenPeriodicPermission> {
6567
const { erc20PeriodicEnforcer, valueLteEnforcer } = contractAddresses;
6668

6769
const valueLteTerms = getTermsByEnforcer({
@@ -108,5 +110,10 @@ function validateAndDecodeData(
108110
);
109111
}
110112

111-
return { tokenAddress, periodAmount, periodDuration, startTime };
113+
return {
114+
tokenAddress,
115+
periodAmount: bigIntToHex(periodAmount),
116+
periodDuration,
117+
startTime,
118+
};
112119
}

packages/7715-permission-types/src/permissions/caveats/erc20TokenStream.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import { decodeERC20StreamingTerms } from '@metamask/delegation-core';
2+
import { bigIntToHex } from '@metamask/utils';
23

4+
import type { Erc20TokenStreamPermission } from '../../types';
35
import { expiryRule } from '../rules/expiry';
46
import { erc20PayeeRuleDecoder } from '../rules/payee';
57
import { redeemerRuleDecoder } from '../rules/redeemer';
@@ -57,7 +59,7 @@ export function makeErc20TokenStreamDecoderConfig(
5759
function validateAndDecodeData(
5860
caveats: ChecksumCaveat[],
5961
contractAddresses: ChecksumEnforcersByChainId,
60-
): DecodedPermissionData {
62+
): DecodedPermissionData<Erc20TokenStreamPermission> {
6163
const { erc20StreamingEnforcer, valueLteEnforcer } = contractAddresses;
6264

6365
const valueLteTerms = getTermsByEnforcer({
@@ -96,9 +98,9 @@ function validateAndDecodeData(
9698

9799
return {
98100
tokenAddress,
99-
initialAmount,
100-
maxAmount,
101-
amountPerSecond,
101+
initialAmount: bigIntToHex(initialAmount),
102+
maxAmount: bigIntToHex(maxAmount),
103+
amountPerSecond: bigIntToHex(amountPerSecond),
102104
startTime,
103105
};
104106
}

packages/7715-permission-types/src/permissions/caveats/nativeTokenAllowance.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { hexToNumber } from '@metamask/utils';
22

3+
import type { NativeTokenAllowancePermission } from '../../types';
34
import { expiryRule } from '../rules/expiry';
45
import { nativePayeeRuleDecoder } from '../rules/payee';
56
import { redeemerRuleDecoder } from '../rules/redeemer';
@@ -63,7 +64,7 @@ export function makeNativeTokenAllowanceDecoderConfig(
6364
function validateAndDecodeData(
6465
caveats: ChecksumCaveat[],
6566
contractAddresses: ChecksumEnforcersByChainId,
66-
): DecodedPermissionData {
67+
): DecodedPermissionData<NativeTokenAllowancePermission> {
6768
const { nativeTokenPeriodicEnforcer, exactCalldataEnforcer } =
6869
contractAddresses;
6970

packages/7715-permission-types/src/permissions/caveats/nativeTokenPeriodic.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import { decodeNativeTokenPeriodTransferTerms } from '@metamask/delegation-core';
2+
import { bigIntToHex } from '@metamask/utils';
23

4+
import type { NativeTokenPeriodicPermission } from '../../types';
35
import { expiryRule } from '../rules/expiry';
46
import { nativePayeeRuleDecoder } from '../rules/payee';
57
import { redeemerRuleDecoder } from '../rules/redeemer';
@@ -57,7 +59,7 @@ export function makeNativeTokenPeriodicDecoderConfig(
5759
function validateAndDecodeData(
5860
caveats: ChecksumCaveat[],
5961
contractAddresses: ChecksumEnforcersByChainId,
60-
): DecodedPermissionData {
62+
): DecodedPermissionData<NativeTokenPeriodicPermission> {
6163
const { nativeTokenPeriodicEnforcer, exactCalldataEnforcer } =
6264
contractAddresses;
6365

@@ -104,5 +106,9 @@ function validateAndDecodeData(
104106
);
105107
}
106108

107-
return { periodAmount, periodDuration, startTime };
109+
return {
110+
periodAmount: bigIntToHex(periodAmount),
111+
periodDuration,
112+
startTime,
113+
};
108114
}

packages/7715-permission-types/src/permissions/caveats/nativeTokenStream.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import { decodeNativeTokenStreamingTerms } from '@metamask/delegation-core';
2+
import { bigIntToHex } from '@metamask/utils';
23

4+
import type { NativeTokenStreamPermission } from '../../types';
35
import { expiryRule } from '../rules/expiry';
46
import { nativePayeeRuleDecoder } from '../rules/payee';
57
import { redeemerRuleDecoder } from '../rules/redeemer';
@@ -57,7 +59,7 @@ export function makeNativeTokenStreamDecoderConfig(
5759
function validateAndDecodeData(
5860
caveats: ChecksumCaveat[],
5961
contractAddresses: ChecksumEnforcersByChainId,
60-
): DecodedPermissionData {
62+
): DecodedPermissionData<NativeTokenStreamPermission> {
6163
const { nativeTokenStreamingEnforcer, exactCalldataEnforcer } =
6264
contractAddresses;
6365

@@ -95,5 +97,10 @@ function validateAndDecodeData(
9597
);
9698
}
9799

98-
return { initialAmount, maxAmount, amountPerSecond, startTime };
100+
return {
101+
initialAmount: bigIntToHex(initialAmount),
102+
maxAmount: bigIntToHex(maxAmount),
103+
amountPerSecond: bigIntToHex(amountPerSecond),
104+
startTime,
105+
};
99106
}

packages/7715-permission-types/src/permissions/caveats/tokenApprovalRevocation.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { decodeApprovalRevocationTerms } from '@metamask/delegation-core';
22

3+
import type { TokenApprovalRevocationPermission } from '../../types';
34
import { expiryRule } from '../rules/expiry';
45
import type {
56
ChecksumCaveat,
@@ -46,7 +47,7 @@ export function makeTokenApprovalRevocationDecoderConfig(
4647
function validateAndDecodeData(
4748
caveats: ChecksumCaveat[],
4849
contractAddresses: ChecksumEnforcersByChainId,
49-
): DecodedPermissionData {
50+
): DecodedPermissionData<TokenApprovalRevocationPermission> {
5051
const { approvalRevocationEnforcer } = contractAddresses;
5152

5253
const terms = getTermsByEnforcer({

packages/7715-permission-types/src/permissions/types.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,9 @@ export type ChecksumCaveat = Caveat<Hex>;
2626
/**
2727
* Type of the `data` parameter of a decoded permission.
2828
*/
29-
export type DecodedPermissionData = PermissionTypes['data'];
29+
export type DecodedPermissionData<
30+
TPermissionType extends PermissionTypes = PermissionTypes,
31+
> = TPermissionType['data'];
3032

3133
/**
3234
* Supported permission type identifiers that can be decoded from a permission context.

packages/7715-permission-types/test/permissions/caveats/erc20TokenPeriodic.test.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import {
33
CHAIN_ID,
44
DELEGATOR_CONTRACTS,
55
} from '@metamask/delegation-deployments';
6-
import type { Hex } from '@metamask/utils';
6+
import { bigIntToHex, type Hex } from '@metamask/utils';
77
import { describe, it, expect } from 'vitest';
88

99
import { makePermissionDecoderConfigs } from '../../../src/permissions';
@@ -113,7 +113,7 @@ describe('erc20-token-periodic decoder config', () => {
113113
),
114114
).toStrictEqual({
115115
tokenAddress: TOKEN_ADDRESS,
116-
periodAmount: 100n,
116+
periodAmount: bigIntToHex(100n),
117117
periodDuration: 86400,
118118
startTime: START_TIME,
119119
});
@@ -165,7 +165,7 @@ describe('erc20-token-periodic decoder config', () => {
165165
),
166166
).toStrictEqual({
167167
tokenAddress: TOKEN_ADDRESS,
168-
periodAmount: 100n,
168+
periodAmount: bigIntToHex(100n),
169169
periodDuration: MAX_PERIOD_DURATION,
170170
startTime: START_TIME,
171171
});

packages/7715-permission-types/test/permissions/caveats/erc20TokenStream.test.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import {
33
CHAIN_ID,
44
DELEGATOR_CONTRACTS,
55
} from '@metamask/delegation-deployments';
6-
import type { Hex } from '@metamask/utils';
6+
import { bigIntToHex, type Hex } from '@metamask/utils';
77
import { describe, it, expect } from 'vitest';
88

99
import { makePermissionDecoderConfigs } from '../../../src/permissions';
@@ -122,9 +122,9 @@ describe('erc20-token-stream decoder config', () => {
122122
),
123123
).toStrictEqual({
124124
tokenAddress: TOKEN_ADDRESS,
125-
initialAmount: 10n,
126-
maxAmount: 100n,
127-
amountPerSecond: 5n,
125+
initialAmount: bigIntToHex(10n),
126+
maxAmount: bigIntToHex(100n),
127+
amountPerSecond: bigIntToHex(5n),
128128
startTime: START_TIME,
129129
});
130130
});

0 commit comments

Comments
 (0)