Greenlens/utils/idempotency.ts

18 lines
575 B
TypeScript

const sanitizeSeed = (value: string): string => {
return value
.toLowerCase()
.replace(/[^a-z0-9]+/g, '-')
.replace(/^-+|-+$/g, '')
.slice(0, 36);
};
export const createIdempotencyKey = (scope: string, seed?: string): string => {
const base = sanitizeSeed(scope || 'action') || 'action';
const seedPart = seed ? sanitizeSeed(seed) : '';
const timestamp = Date.now().toString(36);
const random = Math.random().toString(36).slice(2, 10);
return seedPart
? `${base}-${seedPart}-${timestamp}-${random}`
: `${base}-${timestamp}-${random}`;
};