diff --git a/packages/snaps-controllers/src/cronjob/utils.test.ts b/packages/snaps-controllers/src/cronjob/utils.test.ts index ad7e149d96..2344040c84 100644 --- a/packages/snaps-controllers/src/cronjob/utils.test.ts +++ b/packages/snaps-controllers/src/cronjob/utils.test.ts @@ -62,6 +62,10 @@ describe('getExecutionDate', () => { expect(() => getExecutionDate('100 * * * * *')).toThrow( 'Unable to parse "100 * * * * *" as ISO 8601 date, ISO 8601 duration, or cron expression.', ); + + expect(() => getExecutionDate('P1000000Y')).toThrow( + 'Unable to parse "P1000000Y" as ISO 8601 date, ISO 8601 duration, or cron expression.', + ); }); it('throws an error for dates in the past', () => { diff --git a/packages/snaps-controllers/src/cronjob/utils.ts b/packages/snaps-controllers/src/cronjob/utils.ts index 1d61fa7f9c..2ff44db0cc 100644 --- a/packages/snaps-controllers/src/cronjob/utils.ts +++ b/packages/snaps-controllers/src/cronjob/utils.ts @@ -65,14 +65,16 @@ export function getExecutionDate(schedule: string) { }); } - const duration = Duration.fromISO(schedule); - if (duration.isValid) { - // This ensures the duration is at least 1 second. - const validatedDuration = getDuration(duration); - return DateTime.now().toUTC().plus(validatedDuration).toISO(); - } - try { + const duration = Duration.fromISO(schedule); + if (duration.isValid) { + // This ensures the duration is at least 1 second. + const validatedDuration = getDuration(duration); + const offsetDate = DateTime.now().toUTC().plus(validatedDuration); + assert(offsetDate.isValid); + return offsetDate.toISO(); + } + const parsed = parseExpression(schedule, { utc: true }); const next = parsed.next(); const nextDate = DateTime.fromJSDate(next.toDate());