UNPKG

ng2-idle-timeout

Version:

Zoneless-friendly session timeout management for Angular 16-20.

96 lines 9.9 kB
export const DEFAULT_HTTP_ACTIVITY = Object.freeze({ enabled: true, strategy: 'allowlist', allowlist: [/\/(create|update|submit|checkout)/i], denylist: [/\/(metrics|prefetch|health|refresh-token)/i], ignoreOnInitMs: 3000, cooldownMs: 3000, onlyWhenTabFocused: true, primaryTabOnly: true }); export const DEFAULT_ACTION_DELAYS = Object.freeze({ start: 0, stop: 0, resetIdle: 0, extend: 0, pause: 0, resume: 0, expire: 0 }); export const DEFAULT_DOM_ACTIVITY_EVENTS = Object.freeze([ 'mousedown', 'click', 'wheel', 'scroll', 'keydown', 'keyup', 'touchstart', 'touchend', 'visibilitychange' ]); export const DEFAULT_SESSION_TIMEOUT_CONFIG = { idleGraceMs: 120_000, countdownMs: 3_600_000, warnBeforeMs: 300_000, pollingMs: 500, activityResetCooldownMs: 0, storageKeyPrefix: 'ng2-idle-timeout', appInstanceId: undefined, strategy: 'userOnly', httpActivity: { ...DEFAULT_HTTP_ACTIVITY, strategy: 'allowlist' }, actionDelays: { ...DEFAULT_ACTION_DELAYS }, openNewTabBehavior: 'inherit', routerCountsAsActivity: true, domActivityEvents: DEFAULT_DOM_ACTIVITY_EVENTS, debounceMouseMs: 800, debounceKeyMs: 200, maxExtendPerSession: 0, onExpire: 'emit', timeSource: 'client', serverTimeEndpoint: undefined, logging: 'warn', ignoreUserActivityWhenPaused: false, allowManualExtendWhenExpired: false }; export const DEFAULT_STORAGE_KEYS = Object.freeze({ idleMetadata: 'session', countdown: 'countdown', config: 'config' }); export function mergeConfig(partial) { if (!partial) { return { ...DEFAULT_SESSION_TIMEOUT_CONFIG, domActivityEvents: [...DEFAULT_SESSION_TIMEOUT_CONFIG.domActivityEvents] }; } const { httpActivity, actionDelays, domActivityEvents, ...shallow } = partial; const mergedHttp = { ...DEFAULT_SESSION_TIMEOUT_CONFIG.httpActivity, ...(httpActivity ?? {}) }; const mergedDelays = { ...DEFAULT_SESSION_TIMEOUT_CONFIG.actionDelays, ...(actionDelays ?? {}) }; const next = { ...DEFAULT_SESSION_TIMEOUT_CONFIG, ...shallow, httpActivity: { ...mergedHttp, allowlist: mergedHttp.allowlist ?? [], denylist: mergedHttp.denylist ?? [] }, actionDelays: mergedDelays, domActivityEvents: Array.isArray(domActivityEvents) ? [...domActivityEvents] : [...DEFAULT_SESSION_TIMEOUT_CONFIG.domActivityEvents] }; return next; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2RlZmF1bHRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDakQsT0FBTyxFQUFFLElBQUk7SUFDYixRQUFRLEVBQUUsV0FBVztJQUNyQixTQUFTLEVBQUUsQ0FBQyxvQ0FBb0MsQ0FBQztJQUNqRCxRQUFRLEVBQUUsQ0FBQyw0Q0FBNEMsQ0FBQztJQUN4RCxjQUFjLEVBQUUsSUFBSTtJQUNwQixVQUFVLEVBQUUsSUFBSTtJQUNoQixrQkFBa0IsRUFBRSxJQUFJO0lBQ3hCLGNBQWMsRUFBRSxJQUFJO0NBQ1osQ0FBQyxDQUFDO0FBRVosTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUNqRCxLQUFLLEVBQUUsQ0FBQztJQUNSLElBQUksRUFBRSxDQUFDO0lBQ1AsU0FBUyxFQUFFLENBQUM7SUFDWixNQUFNLEVBQUUsQ0FBQztJQUNULEtBQUssRUFBRSxDQUFDO0lBQ1IsTUFBTSxFQUFFLENBQUM7SUFDVCxNQUFNLEVBQUUsQ0FBQztDQUNvQixDQUFDLENBQUM7QUFFakMsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUN2RCxXQUFXO0lBQ1gsT0FBTztJQUNQLE9BQU87SUFDUCxRQUFRO0lBQ1IsU0FBUztJQUNULE9BQU87SUFDUCxZQUFZO0lBQ1osVUFBVTtJQUNWLGtCQUFrQjtDQUNnQyxDQUFDLENBQUM7QUFFdEQsTUFBTSxDQUFDLE1BQU0sOEJBQThCLEdBQXlCO0lBQ2xFLFdBQVcsRUFBRSxPQUFPO0lBQ3BCLFdBQVcsRUFBRSxTQUFTO0lBQ3RCLFlBQVksRUFBRSxPQUFPO0lBQ3JCLFNBQVMsRUFBRSxHQUFHO0lBQ2QsdUJBQXVCLEVBQUUsQ0FBQztJQUMxQixnQkFBZ0IsRUFBRSxrQkFBa0I7SUFDcEMsYUFBYSxFQUFFLFNBQVM7SUFDeEIsUUFBUSxFQUFFLFVBQVU7SUFDcEIsWUFBWSxFQUFFO1FBQ1osR0FBRyxxQkFBcUI7UUFDeEIsUUFBUSxFQUFFLFdBQVc7S0FDdEI7SUFDRCxZQUFZLEVBQUU7UUFDWixHQUFHLHFCQUFxQjtLQUN6QjtJQUNELGtCQUFrQixFQUFFLFNBQVM7SUFDN0Isc0JBQXNCLEVBQUUsSUFBSTtJQUM1QixpQkFBaUIsRUFBRSwyQkFBMkI7SUFDOUMsZUFBZSxFQUFFLEdBQUc7SUFDcEIsYUFBYSxFQUFFLEdBQUc7SUFDbEIsbUJBQW1CLEVBQUUsQ0FBQztJQUN0QixRQUFRLEVBQUUsTUFBTTtJQUNoQixVQUFVLEVBQUUsUUFBUTtJQUNwQixrQkFBa0IsRUFBRSxTQUFTO0lBQzdCLE9BQU8sRUFBRSxNQUFNO0lBQ2YsNEJBQTRCLEVBQUUsS0FBSztJQUNuQyw0QkFBNEIsRUFBRSxLQUFLO0NBQ3BDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ2hELFlBQVksRUFBRSxTQUFTO0lBQ3ZCLFNBQVMsRUFBRSxXQUFXO0lBQ3RCLE1BQU0sRUFBRSxRQUFRO0NBQ2pCLENBQUMsQ0FBQztBQUVILE1BQU0sVUFBVSxXQUFXLENBQUMsT0FBa0Q7SUFDNUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2IsT0FBTztZQUNMLEdBQUcsOEJBQThCO1lBQ2pDLGlCQUFpQixFQUFFLENBQUMsR0FBRyw4QkFBOEIsQ0FBQyxpQkFBaUIsQ0FBQztTQUN6RSxDQUFDO0lBQ0osQ0FBQztJQUVELE1BQU0sRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixFQUFFLEdBQUcsT0FBTyxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBRTlFLE1BQU0sVUFBVSxHQUFHO1FBQ2pCLEdBQUcsOEJBQThCLENBQUMsWUFBWTtRQUM5QyxHQUFHLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQztLQUN4QixDQUFDO0lBRUYsTUFBTSxZQUFZLEdBQXdCO1FBQ3hDLEdBQUcsOEJBQThCLENBQUMsWUFBWTtRQUM5QyxHQUFHLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQztLQUN4QixDQUFDO0lBRUYsTUFBTSxJQUFJLEdBQXlCO1FBQ2pDLEdBQUcsOEJBQThCO1FBQ2pDLEdBQUcsT0FBTztRQUNWLFlBQVksRUFBRTtZQUNaLEdBQUcsVUFBVTtZQUNiLFNBQVMsRUFBRSxVQUFVLENBQUMsU0FBUyxJQUFJLEVBQUU7WUFDckMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxRQUFRLElBQUksRUFBRTtTQUNwQztRQUNELFlBQVksRUFBRSxZQUFZO1FBQzFCLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUM7WUFDakQsQ0FBQyxDQUFDLENBQUMsR0FBRyxpQkFBaUIsQ0FBQztZQUN4QixDQUFDLENBQUMsQ0FBQyxHQUFHLDhCQUE4QixDQUFDLGlCQUFpQixDQUFDO0tBQzFELENBQUM7SUFFRixPQUFPLElBQUksQ0FBQztBQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFNlc3Npb25BY3Rpb25EZWxheXMsIFNlc3Npb25UaW1lb3V0Q29uZmlnLCBEb21BY3Rpdml0eUV2ZW50TmFtZSB9IGZyb20gJy4vbW9kZWxzL3Nlc3Npb24tdGltZW91dC1jb25maWcnO1xyXG5cclxuZXhwb3J0IGNvbnN0IERFRkFVTFRfSFRUUF9BQ1RJVklUWSA9IE9iamVjdC5mcmVlemUoe1xyXG4gIGVuYWJsZWQ6IHRydWUsXHJcbiAgc3RyYXRlZ3k6ICdhbGxvd2xpc3QnLFxyXG4gIGFsbG93bGlzdDogWy9cXC8oY3JlYXRlfHVwZGF0ZXxzdWJtaXR8Y2hlY2tvdXQpL2ldLFxyXG4gIGRlbnlsaXN0OiBbL1xcLyhtZXRyaWNzfHByZWZldGNofGhlYWx0aHxyZWZyZXNoLXRva2VuKS9pXSxcclxuICBpZ25vcmVPbkluaXRNczogMzAwMCxcclxuICBjb29sZG93bk1zOiAzMDAwLFxyXG4gIG9ubHlXaGVuVGFiRm9jdXNlZDogdHJ1ZSxcclxuICBwcmltYXJ5VGFiT25seTogdHJ1ZVxyXG59IGFzIGNvbnN0KTtcclxuXHJcbmV4cG9ydCBjb25zdCBERUZBVUxUX0FDVElPTl9ERUxBWVMgPSBPYmplY3QuZnJlZXplKHtcclxuICBzdGFydDogMCxcclxuICBzdG9wOiAwLFxyXG4gIHJlc2V0SWRsZTogMCxcclxuICBleHRlbmQ6IDAsXHJcbiAgcGF1c2U6IDAsXHJcbiAgcmVzdW1lOiAwLFxyXG4gIGV4cGlyZTogMFxyXG59IHNhdGlzZmllcyBTZXNzaW9uQWN0aW9uRGVsYXlzKTtcclxuXHJcbmV4cG9ydCBjb25zdCBERUZBVUxUX0RPTV9BQ1RJVklUWV9FVkVOVFMgPSBPYmplY3QuZnJlZXplKFtcclxuICAnbW91c2Vkb3duJyxcclxuICAnY2xpY2snLFxyXG4gICd3aGVlbCcsXHJcbiAgJ3Njcm9sbCcsXHJcbiAgJ2tleWRvd24nLFxyXG4gICdrZXl1cCcsXHJcbiAgJ3RvdWNoc3RhcnQnLFxyXG4gICd0b3VjaGVuZCcsXHJcbiAgJ3Zpc2liaWxpdHljaGFuZ2UnXHJcbl0gYXMgY29uc3Qgc2F0aXNmaWVzIHJlYWRvbmx5IERvbUFjdGl2aXR5RXZlbnROYW1lW10pO1xyXG5cclxuZXhwb3J0IGNvbnN0IERFRkFVTFRfU0VTU0lPTl9USU1FT1VUX0NPTkZJRzogU2Vzc2lvblRpbWVvdXRDb25maWcgPSB7XHJcbiAgaWRsZUdyYWNlTXM6IDEyMF8wMDAsXHJcbiAgY291bnRkb3duTXM6IDNfNjAwXzAwMCxcclxuICB3YXJuQmVmb3JlTXM6IDMwMF8wMDAsXHJcbiAgcG9sbGluZ01zOiA1MDAsXHJcbiAgYWN0aXZpdHlSZXNldENvb2xkb3duTXM6IDAsXHJcbiAgc3RvcmFnZUtleVByZWZpeDogJ25nMi1pZGxlLXRpbWVvdXQnLFxyXG4gIGFwcEluc3RhbmNlSWQ6IHVuZGVmaW5lZCxcclxuICBzdHJhdGVneTogJ3VzZXJPbmx5JyxcclxuICBodHRwQWN0aXZpdHk6IHtcclxuICAgIC4uLkRFRkFVTFRfSFRUUF9BQ1RJVklUWSxcclxuICAgIHN0cmF0ZWd5OiAnYWxsb3dsaXN0J1xyXG4gIH0sXHJcbiAgYWN0aW9uRGVsYXlzOiB7XHJcbiAgICAuLi5ERUZBVUxUX0FDVElPTl9ERUxBWVNcclxuICB9LFxyXG4gIG9wZW5OZXdUYWJCZWhhdmlvcjogJ2luaGVyaXQnLFxyXG4gIHJvdXRlckNvdW50c0FzQWN0aXZpdHk6IHRydWUsXHJcbiAgZG9tQWN0aXZpdHlFdmVudHM6IERFRkFVTFRfRE9NX0FDVElWSVRZX0VWRU5UUyxcclxuICBkZWJvdW5jZU1vdXNlTXM6IDgwMCxcclxuICBkZWJvdW5jZUtleU1zOiAyMDAsXHJcbiAgbWF4RXh0ZW5kUGVyU2Vzc2lvbjogMCxcclxuICBvbkV4cGlyZTogJ2VtaXQnLFxyXG4gIHRpbWVTb3VyY2U6ICdjbGllbnQnLFxyXG4gIHNlcnZlclRpbWVFbmRwb2ludDogdW5kZWZpbmVkLFxyXG4gIGxvZ2dpbmc6ICd3YXJuJyxcclxuICBpZ25vcmVVc2VyQWN0aXZpdHlXaGVuUGF1c2VkOiBmYWxzZSxcclxuICBhbGxvd01hbnVhbEV4dGVuZFdoZW5FeHBpcmVkOiBmYWxzZVxyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IERFRkFVTFRfU1RPUkFHRV9LRVlTID0gT2JqZWN0LmZyZWV6ZSh7XHJcbiAgaWRsZU1ldGFkYXRhOiAnc2Vzc2lvbicsXHJcbiAgY291bnRkb3duOiAnY291bnRkb3duJyxcclxuICBjb25maWc6ICdjb25maWcnXHJcbn0pO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlQ29uZmlnKHBhcnRpYWw6IFBhcnRpYWw8U2Vzc2lvblRpbWVvdXRDb25maWc+IHwgdW5kZWZpbmVkKTogU2Vzc2lvblRpbWVvdXRDb25maWcge1xyXG4gIGlmICghcGFydGlhbCkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgLi4uREVGQVVMVF9TRVNTSU9OX1RJTUVPVVRfQ09ORklHLFxyXG4gICAgICBkb21BY3Rpdml0eUV2ZW50czogWy4uLkRFRkFVTFRfU0VTU0lPTl9USU1FT1VUX0NPTkZJRy5kb21BY3Rpdml0eUV2ZW50c11cclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBjb25zdCB7IGh0dHBBY3Rpdml0eSwgYWN0aW9uRGVsYXlzLCBkb21BY3Rpdml0eUV2ZW50cywgLi4uc2hhbGxvdyB9ID0gcGFydGlhbDtcclxuXHJcbiAgY29uc3QgbWVyZ2VkSHR0cCA9IHtcclxuICAgIC4uLkRFRkFVTFRfU0VTU0lPTl9USU1FT1VUX0NPTkZJRy5odHRwQWN0aXZpdHksXHJcbiAgICAuLi4oaHR0cEFjdGl2aXR5ID8/IHt9KVxyXG4gIH07XHJcblxyXG4gIGNvbnN0IG1lcmdlZERlbGF5czogU2Vzc2lvbkFjdGlvbkRlbGF5cyA9IHtcclxuICAgIC4uLkRFRkFVTFRfU0VTU0lPTl9USU1FT1VUX0NPTkZJRy5hY3Rpb25EZWxheXMsXHJcbiAgICAuLi4oYWN0aW9uRGVsYXlzID8/IHt9KVxyXG4gIH07XHJcblxyXG4gIGNvbnN0IG5leHQ6IFNlc3Npb25UaW1lb3V0Q29uZmlnID0ge1xyXG4gICAgLi4uREVGQVVMVF9TRVNTSU9OX1RJTUVPVVRfQ09ORklHLFxyXG4gICAgLi4uc2hhbGxvdyxcclxuICAgIGh0dHBBY3Rpdml0eToge1xyXG4gICAgICAuLi5tZXJnZWRIdHRwLFxyXG4gICAgICBhbGxvd2xpc3Q6IG1lcmdlZEh0dHAuYWxsb3dsaXN0ID8/IFtdLFxyXG4gICAgICBkZW55bGlzdDogbWVyZ2VkSHR0cC5kZW55bGlzdCA/PyBbXVxyXG4gICAgfSxcclxuICAgIGFjdGlvbkRlbGF5czogbWVyZ2VkRGVsYXlzLFxyXG4gICAgZG9tQWN0aXZpdHlFdmVudHM6IEFycmF5LmlzQXJyYXkoZG9tQWN0aXZpdHlFdmVudHMpXHJcbiAgICAgID8gWy4uLmRvbUFjdGl2aXR5RXZlbnRzXVxyXG4gICAgICA6IFsuLi5ERUZBVUxUX1NFU1NJT05fVElNRU9VVF9DT05GSUcuZG9tQWN0aXZpdHlFdmVudHNdXHJcbiAgfTtcclxuXHJcbiAgcmV0dXJuIG5leHQ7XHJcbn1cclxuIl19