Skip to content

Commit 390adaf

Browse files
committed
Refactor period handling to replace periodType with periodDuration in ERC20 and native token contexts; update related tests for consistency
1 parent 1234de0 commit 390adaf

File tree

12 files changed

+23
-59
lines changed

12 files changed

+23
-59
lines changed

packages/gator-permissions-snap/src/permissions/erc20TokenPeriodic/content.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { Box, Section } from '@metamask/snaps-sdk/jsx';
33

44
import {
55
periodAmountRule,
6-
periodTypeRule,
6+
periodDurationRule,
77
startTimeRule,
88
expiryRule,
99
} from './rules';
@@ -31,7 +31,7 @@ export async function createConfirmationContent({
3131
<Box>
3232
<Section>
3333
{renderRules({
34-
rules: [startTimeRule, periodAmountRule, periodTypeRule],
34+
rules: [startTimeRule, periodAmountRule, periodDurationRule],
3535
context,
3636
metadata,
3737
})}

packages/gator-permissions-snap/src/permissions/erc20TokenPeriodic/context.ts

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,7 @@ import {
88
type Hex,
99
} from '@metamask/utils';
1010

11-
import type { TimePeriod } from '../../core/types';
1211
import type { TokenMetadataService } from '../../services/tokenMetadataService';
13-
import { TIME_PERIOD_TO_SECONDS } from '../../utils/time';
1412
import { parseUnits, formatUnitsFromHex } from '../../utils/value';
1513
import {
1614
validateAndParseAmount,
@@ -178,10 +176,6 @@ export async function buildContext({
178176
decimals,
179177
});
180178

181-
const periodType = (Object.keys(TIME_PERIOD_TO_SECONDS) as TimePeriod[]).find(
182-
(key: TimePeriod) =>
183-
Number(TIME_PERIOD_TO_SECONDS[key]) === data.periodDuration,
184-
);
185179
const periodDuration = data.periodDuration.toString();
186180

187181
const startTime = data.startTime ?? Math.floor(Date.now() / 1000);
@@ -212,7 +206,6 @@ export async function buildContext({
212206
},
213207
permissionDetails: {
214208
periodAmount,
215-
periodType,
216209
periodDuration,
217210
startTime,
218211
},

packages/gator-permissions-snap/src/permissions/erc20TokenPeriodic/rules.ts

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { InvalidInputError } from '@metamask/snaps-sdk';
22

33
import { TimePeriod } from '../../core/types';
44
import type { RuleDefinition } from '../../core/types';
5-
import { TIME_PERIOD_TO_SECONDS } from '../../utils/time';
5+
import { getClosestTimePeriod, TIME_PERIOD_TO_SECONDS } from '../../utils/time';
66
import { getIconData } from '../iconUtil';
77
import type {
88
Erc20TokenPeriodicContext,
@@ -38,7 +38,7 @@ export const periodAmountRule: RuleDefinition<
3838
}),
3939
};
4040

41-
export const periodTypeRule: RuleDefinition<
41+
export const periodDurationRule: RuleDefinition<
4242
Erc20TokenPeriodicContext,
4343
Erc20TokenPeriodicMetadata
4444
> = {
@@ -47,18 +47,13 @@ export const periodTypeRule: RuleDefinition<
4747
type: 'dropdown',
4848
getRuleData: ({ context, metadata }) => ({
4949
isAdjustmentAllowed: context.isAdjustmentAllowed,
50-
value: context.permissionDetails.periodType,
50+
value: getClosestTimePeriod(
51+
parseInt(context.permissionDetails.periodDuration, 10),
52+
),
5153
isVisible: true,
5254
tooltip: 'The duration of the period',
53-
options: [
54-
TimePeriod.HOURLY,
55-
TimePeriod.DAILY,
56-
TimePeriod.WEEKLY,
57-
TimePeriod.BIWEEKLY,
58-
TimePeriod.MONTHLY,
59-
TimePeriod.YEARLY,
60-
],
61-
error: metadata.validationErrors.periodTypeError,
55+
options: Object.values(TimePeriod),
56+
error: metadata.validationErrors.periodDurationError,
6257
}),
6358
updateContext: (context: Erc20TokenPeriodicContext, value: string) => {
6459
// Validate that value is a valid TimePeriod
@@ -84,7 +79,6 @@ export const periodTypeRule: RuleDefinition<
8479
...context,
8580
permissionDetails: {
8681
...context.permissionDetails,
87-
periodType,
8882
periodDuration,
8983
},
9084
};
@@ -159,7 +153,7 @@ export const expiryRule: RuleDefinition<
159153

160154
export const allRules = [
161155
periodAmountRule,
162-
periodTypeRule,
156+
periodDurationRule,
163157
startTimeRule,
164158
expiryRule,
165159
];

packages/gator-permissions-snap/src/permissions/erc20TokenPeriodic/types.ts

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import type {
1111
DeepRequired,
1212
TypedPermissionRequest,
1313
BaseContext,
14-
TimePeriod,
1514
BaseMetadata,
1615
} from '../../core/types';
1716
import { zPeriodDuration } from '../../utils/time';
@@ -20,7 +19,6 @@ export type Erc20TokenPeriodicMetadata = BaseMetadata & {
2019
validationErrors: {
2120
periodAmountError?: string;
2221
periodDurationError?: string;
23-
periodTypeError?: string;
2422
startTimeError?: string;
2523
expiryError?: string;
2624
};
@@ -29,7 +27,6 @@ export type Erc20TokenPeriodicMetadata = BaseMetadata & {
2927
export type Erc20TokenPeriodicContext = BaseContext & {
3028
permissionDetails: {
3129
periodAmount: string;
32-
periodType: TimePeriod;
3330
periodDuration: string;
3431
startTime: number;
3532
};

packages/gator-permissions-snap/src/permissions/nativeTokenPeriodic/content.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { Box, Section } from '@metamask/snaps-sdk/jsx';
33

44
import {
55
periodAmountRule,
6-
periodTypeRule,
6+
periodDurationRule,
77
startTimeRule,
88
expiryRule,
99
} from './rules';
@@ -31,7 +31,7 @@ export async function createConfirmationContent({
3131
<Box>
3232
<Section>
3333
{renderRules({
34-
rules: [startTimeRule, periodAmountRule, periodTypeRule],
34+
rules: [startTimeRule, periodAmountRule, periodDurationRule],
3535
context,
3636
metadata,
3737
})}

packages/gator-permissions-snap/src/permissions/nativeTokenPeriodic/context.ts

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,7 @@ import {
88
type Hex,
99
} from '@metamask/utils';
1010

11-
import type { TimePeriod } from '../../core/types';
1211
import type { TokenMetadataService } from '../../services/tokenMetadataService';
13-
import { TIME_PERIOD_TO_SECONDS } from '../../utils/time';
1412
import { parseUnits, formatUnitsFromHex } from '../../utils/value';
1513
import {
1614
validateAndParseAmount,
@@ -178,10 +176,6 @@ export async function buildContext({
178176
decimals,
179177
});
180178

181-
const periodType = (Object.keys(TIME_PERIOD_TO_SECONDS) as TimePeriod[]).find(
182-
(key: TimePeriod) =>
183-
Number(TIME_PERIOD_TO_SECONDS[key]) === data.periodDuration,
184-
);
185179
const periodDuration = data.periodDuration.toString();
186180

187181
const startTime = data.startTime ?? Math.floor(Date.now() / 1000);
@@ -212,7 +206,6 @@ export async function buildContext({
212206
},
213207
permissionDetails: {
214208
periodAmount,
215-
periodType,
216209
periodDuration,
217210
startTime,
218211
},

packages/gator-permissions-snap/src/permissions/nativeTokenPeriodic/rules.ts

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { InvalidInputError } from '@metamask/snaps-sdk';
22

33
import { TimePeriod } from '../../core/types';
44
import type { RuleDefinition } from '../../core/types';
5-
import { TIME_PERIOD_TO_SECONDS } from '../../utils/time';
5+
import { getClosestTimePeriod, TIME_PERIOD_TO_SECONDS } from '../../utils/time';
66
import { getIconData } from '../iconUtil';
77
import type {
88
NativeTokenPeriodicContext,
@@ -38,7 +38,7 @@ export const periodAmountRule: RuleDefinition<
3838
}),
3939
};
4040

41-
export const periodTypeRule: RuleDefinition<
41+
export const periodDurationRule: RuleDefinition<
4242
NativeTokenPeriodicContext,
4343
NativeTokenPeriodicMetadata
4444
> = {
@@ -47,18 +47,13 @@ export const periodTypeRule: RuleDefinition<
4747
type: 'dropdown',
4848
getRuleData: ({ context, metadata }) => ({
4949
isAdjustmentAllowed: context.isAdjustmentAllowed,
50-
value: context.permissionDetails.periodType,
50+
value: getClosestTimePeriod(
51+
parseInt(context.permissionDetails.periodDuration, 10),
52+
),
5153
isVisible: true,
5254
tooltip: 'The duration of the period',
53-
options: [
54-
TimePeriod.HOURLY,
55-
TimePeriod.DAILY,
56-
TimePeriod.WEEKLY,
57-
TimePeriod.BIWEEKLY,
58-
TimePeriod.MONTHLY,
59-
TimePeriod.YEARLY,
60-
],
61-
error: metadata.validationErrors.periodTypeError,
55+
options: Object.values(TimePeriod),
56+
error: metadata.validationErrors.periodDurationError,
6257
}),
6358
updateContext: (context: NativeTokenPeriodicContext, value: string) => {
6459
// Validate that value is a valid TimePeriod
@@ -84,7 +79,6 @@ export const periodTypeRule: RuleDefinition<
8479
...context,
8580
permissionDetails: {
8681
...context.permissionDetails,
87-
periodType,
8882
periodDuration,
8983
},
9084
};
@@ -159,7 +153,7 @@ export const expiryRule: RuleDefinition<
159153

160154
export const allRules = [
161155
periodAmountRule,
162-
periodTypeRule,
156+
periodDurationRule,
163157
startTimeRule,
164158
expiryRule,
165159
];

packages/gator-permissions-snap/src/permissions/nativeTokenPeriodic/types.ts

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import type {
1010
DeepRequired,
1111
TypedPermissionRequest,
1212
BaseContext,
13-
TimePeriod,
1413
BaseMetadata,
1514
} from '../../core/types';
1615
import { zPeriodDuration } from '../../utils/time';
@@ -19,7 +18,6 @@ export type NativeTokenPeriodicMetadata = BaseMetadata & {
1918
validationErrors: {
2019
periodAmountError?: string;
2120
periodDurationError?: string;
22-
periodTypeError?: string;
2321
startTimeError?: string;
2422
expiryError?: string;
2523
};
@@ -28,7 +26,6 @@ export type NativeTokenPeriodicMetadata = BaseMetadata & {
2826
export type NativeTokenPeriodicContext = BaseContext & {
2927
permissionDetails: {
3028
periodAmount: string;
31-
periodType: TimePeriod;
3229
periodDuration: string;
3330
startTime: number;
3431
};

packages/gator-permissions-snap/test/permissions/erc20TokenPeriodic/content.test.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ const mockContext: Erc20TokenPeriodicContext = {
2727
},
2828
permissionDetails: {
2929
periodAmount: '100',
30-
periodType: TimePeriod.DAILY,
3130
periodDuration: Number(TIME_PERIOD_TO_SECONDS[TimePeriod.DAILY]).toString(),
3231
startTime: 499161600, // 10/26/1985
3332
},
@@ -1115,7 +1114,6 @@ describe('erc20TokenPeriodic:content', () => {
11151114
...mockContext,
11161115
permissionDetails: {
11171116
...mockContext.permissionDetails,
1118-
periodType: TimePeriod.WEEKLY,
11191117
periodDuration: Number(
11201118
TIME_PERIOD_TO_SECONDS[TimePeriod.WEEKLY],
11211119
).toString(),
@@ -3086,6 +3084,7 @@ describe('erc20TokenPeriodic:content', () => {
30863084
},
30873085
"type": "Dropdown",
30883086
},
3087+
"error": "Invalid period duration",
30893088
},
30903089
"type": "Field",
30913090
},

packages/gator-permissions-snap/test/permissions/erc20TokenPeriodic/context.test.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,6 @@ const alreadyPopulatedContext: Erc20TokenPeriodicContext = {
8989
},
9090
permissionDetails: {
9191
periodAmount: '100',
92-
periodType: TimePeriod.DAILY,
9392
periodDuration: Number(TIME_PERIOD_TO_SECONDS[TimePeriod.DAILY]).toString(),
9493
startTime: 1729900800,
9594
},
@@ -220,7 +219,7 @@ describe('erc20TokenPeriodic:context', () => {
220219
it('throws an error if the permission request has no rules', async () => {
221220
const permissionRequest = {
222221
...alreadyPopulatedPermissionRequest,
223-
rules: undefined,
222+
rules: [],
224223
};
225224

226225
await expect(

0 commit comments

Comments
 (0)