42 lines
884 B
TypeScript
42 lines
884 B
TypeScript
/**
|
|
* Resolve the TTL for an idempotency key.
|
|
*
|
|
* The TTL format is a string like "5m", "1h", "7d"
|
|
*
|
|
* @param ttl The TTL string
|
|
* @returns The date when the key will expire
|
|
* @throws If the TTL string is invalid
|
|
*/
|
|
export function resolveIdempotencyKeyTTL(ttl: string | undefined | null): Date | undefined {
|
|
if (!ttl) {
|
|
return undefined;
|
|
}
|
|
|
|
const match = ttl.match(/^(\d+)([smhd])$/);
|
|
|
|
if (!match) {
|
|
return;
|
|
}
|
|
|
|
const [, value, unit] = match;
|
|
|
|
const now = new Date();
|
|
|
|
switch (unit) {
|
|
case "s":
|
|
now.setSeconds(now.getSeconds() + parseInt(value, 10));
|
|
break;
|
|
case "m":
|
|
now.setMinutes(now.getMinutes() + parseInt(value, 10));
|
|
break;
|
|
case "h":
|
|
now.setHours(now.getHours() + parseInt(value, 10));
|
|
break;
|
|
case "d":
|
|
now.setDate(now.getDate() + parseInt(value, 10));
|
|
break;
|
|
}
|
|
|
|
return now;
|
|
}
|