18 lines
575 B
TypeScript
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}`;
|
|
};
|