Skip to content

Commit b9704d5

Browse files
committed
Refactor periodDuration handling to change type from string to number across ERC20 and native token contexts; update related tests for consistency
1 parent 390adaf commit b9704d5

File tree

11 files changed

+28
-26
lines changed

11 files changed

+28
-26
lines changed

packages/gator-permissions-snap/src/permissions/contextValidation.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -157,12 +157,12 @@ export function calculateAmountPerSecond(
157157
* @param periodDuration - The period duration string to validate.
158158
* @returns Object containing parsed duration and any validation error.
159159
*/
160-
export function validatePeriodDuration(periodDuration: string): {
160+
export function validatePeriodDuration(periodDuration: number): {
161161
duration: number | undefined;
162162
error: string | undefined;
163163
} {
164164
try {
165-
const duration = parseInt(periodDuration, 10);
165+
const duration = periodDuration;
166166
if (isNaN(duration) || duration <= 0) {
167167
return {
168168
duration: undefined,

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ export async function applyContext({
7474
periodAmount: bigIntToHex(
7575
parseUnits({ formatted: permissionDetails.periodAmount, decimals }),
7676
),
77-
periodDuration: parseInt(permissionDetails.periodDuration, 10),
77+
periodDuration: permissionDetails.periodDuration,
7878
startTime: permissionDetails.startTime,
7979
justification: originalRequest.permission.data.justification,
8080
tokenAddress: originalRequest.permission.data.tokenAddress,
@@ -176,7 +176,7 @@ export async function buildContext({
176176
decimals,
177177
});
178178

179-
const periodDuration = data.periodDuration.toString();
179+
const { periodDuration } = data;
180180

181181
const startTime = data.startTime ?? Math.floor(Date.now() / 1000);
182182

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

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,7 @@ export const periodDurationRule: RuleDefinition<
4747
type: 'dropdown',
4848
getRuleData: ({ context, metadata }) => ({
4949
isAdjustmentAllowed: context.isAdjustmentAllowed,
50-
value: getClosestTimePeriod(
51-
parseInt(context.permissionDetails.periodDuration, 10),
52-
),
50+
value: getClosestTimePeriod(context.permissionDetails.periodDuration),
5351
isVisible: true,
5452
tooltip: 'The duration of the period',
5553
options: Object.values(TimePeriod),
@@ -73,7 +71,7 @@ export const periodDurationRule: RuleDefinition<
7371
);
7472
}
7573

76-
const periodDuration = Number(periodSeconds).toString();
74+
const periodDuration = Number(periodSeconds);
7775

7876
return {
7977
...context,

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ export type Erc20TokenPeriodicMetadata = BaseMetadata & {
2727
export type Erc20TokenPeriodicContext = BaseContext & {
2828
permissionDetails: {
2929
periodAmount: string;
30-
periodDuration: string;
30+
periodDuration: number;
3131
startTime: number;
3232
};
3333
};

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ export async function applyContext({
7575
periodAmount: bigIntToHex(
7676
parseUnits({ formatted: permissionDetails.periodAmount, decimals }),
7777
),
78-
periodDuration: parseInt(permissionDetails.periodDuration, 10),
78+
periodDuration: permissionDetails.periodDuration,
7979
startTime: permissionDetails.startTime,
8080
justification: originalRequest.permission.data.justification,
8181
};
@@ -176,7 +176,7 @@ export async function buildContext({
176176
decimals,
177177
});
178178

179-
const periodDuration = data.periodDuration.toString();
179+
const { periodDuration } = data;
180180

181181
const startTime = data.startTime ?? Math.floor(Date.now() / 1000);
182182

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

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,7 @@ export const periodDurationRule: RuleDefinition<
4747
type: 'dropdown',
4848
getRuleData: ({ context, metadata }) => ({
4949
isAdjustmentAllowed: context.isAdjustmentAllowed,
50-
value: getClosestTimePeriod(
51-
parseInt(context.permissionDetails.periodDuration, 10),
52-
),
50+
value: getClosestTimePeriod(context.permissionDetails.periodDuration),
5351
isVisible: true,
5452
tooltip: 'The duration of the period',
5553
options: Object.values(TimePeriod),
@@ -73,7 +71,7 @@ export const periodDurationRule: RuleDefinition<
7371
);
7472
}
7573

76-
const periodDuration = Number(periodSeconds).toString();
74+
const periodDuration = Number(periodSeconds);
7775

7876
return {
7977
...context,

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ export type NativeTokenPeriodicMetadata = BaseMetadata & {
2626
export type NativeTokenPeriodicContext = BaseContext & {
2727
permissionDetails: {
2828
periodAmount: string;
29-
periodDuration: string;
29+
periodDuration: number;
3030
startTime: number;
3131
};
3232
};

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ const alreadyPopulatedContext: Erc20TokenPeriodicContext = {
8989
},
9090
permissionDetails: {
9191
periodAmount: '100',
92-
periodDuration: Number(TIME_PERIOD_TO_SECONDS[TimePeriod.DAILY]).toString(),
92+
periodDuration: Number(TIME_PERIOD_TO_SECONDS[TimePeriod.DAILY]),
9393
startTime: 1729900800,
9494
},
9595
} as const;
@@ -306,7 +306,7 @@ describe('erc20TokenPeriodic:context', () => {
306306
...context,
307307
permissionDetails: {
308308
...context.permissionDetails,
309-
periodDuration: 'invalid',
309+
periodDuration: 'invalid' as unknown as number,
310310
},
311311
};
312312

@@ -324,7 +324,7 @@ describe('erc20TokenPeriodic:context', () => {
324324
...context,
325325
permissionDetails: {
326326
...context.permissionDetails,
327-
periodDuration: '-1',
327+
periodDuration: '-1' as unknown as number,
328328
},
329329
};
330330

@@ -452,7 +452,7 @@ describe('erc20TokenPeriodic:context', () => {
452452
permissionDetails: {
453453
...alreadyPopulatedContext.permissionDetails,
454454
periodAmount: '200',
455-
periodDuration: '604800', // 1 week
455+
periodDuration: 604800, // 1 week
456456
startTime: Math.floor(Date.now() / 1000),
457457
},
458458
expiry: {

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ const alreadyPopulatedContext: NativeTokenPeriodicContext = {
8484
},
8585
permissionDetails: {
8686
periodAmount: '1',
87-
periodDuration: Number(TIME_PERIOD_TO_SECONDS[TimePeriod.DAILY]).toString(),
87+
periodDuration: Number(TIME_PERIOD_TO_SECONDS[TimePeriod.DAILY]),
8888
startTime: 1729900800,
8989
},
9090
} as const;
@@ -296,7 +296,7 @@ describe('nativeTokenPeriodic:context', () => {
296296
...context,
297297
permissionDetails: {
298298
...context.permissionDetails,
299-
periodDuration: 'invalid',
299+
periodDuration: 'invalid' as unknown as number,
300300
},
301301
};
302302

@@ -314,7 +314,7 @@ describe('nativeTokenPeriodic:context', () => {
314314
...context,
315315
permissionDetails: {
316316
...context.permissionDetails,
317-
periodDuration: '-1',
317+
periodDuration: '-1' as unknown as number,
318318
},
319319
};
320320

packages/site/src/components/permissions/ERC20TokenPeriodicForm.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { useCallback, useEffect, useState } from 'react';
22
import { parseUnits, toHex, type Hex } from 'viem';
3+
34
import type { ERC20TokenPeriodicPermissionRequest } from './types';
45

56
type ERC20TokenPeriodicFormProps = {
@@ -15,7 +16,9 @@ export const ERC20TokenPeriodicForm = ({
1516
BigInt(toHex(parseUnits('1', decimals))),
1617
);
1718
const [periodDuration, setPeriodDuration] = useState(2592000); // 30 days in seconds
18-
const [startTime, setStartTime] = useState<number | null>(Math.floor(Date.now() / 1000));
19+
const [startTime, setStartTime] = useState<number | null>(
20+
Math.floor(Date.now() / 1000),
21+
);
1922
const [expiry, setExpiry] = useState(
2023
Math.floor(Date.now() / 1000) + 60 * 60 * 24 * 30, // 30 days from now
2124
);

0 commit comments

Comments
 (0)