ng2-idle-timeout
Version:
Zoneless-friendly session timeout management for Angular 16-20.
96 lines • 9.9 kB
JavaScript
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