{"version":3,"file":"ng-idle-core.mjs","sources":["../../../projects/core/src/lib/interrupt.ts","../../../projects/core/src/lib/idleexpiry.ts","../../../projects/core/src/lib/alternativestorage.ts","../../../projects/core/src/lib/localstorage.ts","../../../projects/core/src/lib/localstorageexpiry.ts","../../../projects/core/src/lib/keepalivesvc.ts","../../../projects/core/src/lib/idle.ts","../../../projects/core/src/lib/interruptargs.ts","../../../projects/core/src/lib/interruptsource.ts","../../../projects/core/src/lib/eventtargetinterruptsource.ts","../../../projects/core/src/lib/documentinterruptsource.ts","../../../projects/core/src/lib/windowinterruptsource.ts","../../../projects/core/src/lib/storageinterruptsource.ts","../../../projects/core/src/lib/simpleexpiry.ts","../../../projects/core/src/lib/module.ts","../../../projects/core/src/lib/defaultinterruptsources.ts","../../../projects/core/src/public-api.ts","../../../projects/core/src/ng-idle-core.ts"],"sourcesContent":["import { Subscription } from 'rxjs';\r\n\r\nimport { InterruptArgs } from './interruptargs';\r\nimport { InterruptOptions } from './interruptoptions';\r\nimport { InterruptSource } from './interruptsource';\r\n\r\n/*\r\n * A class for managing an interrupt from an interrupt source.\r\n */\r\nexport class Interrupt {\r\n  private sub: Subscription;\r\n\r\n  constructor(public source: InterruptSource, options?: InterruptOptions) {\r\n    if (source.initialize) {\r\n      source.initialize(options);\r\n    }\r\n  }\r\n\r\n  /*\r\n   * Subscribes to the interrupt using the specified function.\r\n   * @param fn - The subscription function.\r\n   */\r\n  subscribe(fn: (args: InterruptArgs) => void): void {\r\n    this.sub = this.source.onInterrupt.subscribe(fn);\r\n  }\r\n\r\n  /*\r\n   * Unsubscribes the interrupt.\r\n   */\r\n  unsubscribe(): void {\r\n    this.sub.unsubscribe();\r\n    this.sub = null;\r\n  }\r\n\r\n  /*\r\n   * Keeps the subscription but resumes interrupt events.\r\n   */\r\n  resume(): void {\r\n    this.source.attach();\r\n  }\r\n\r\n  /*\r\n   * Keeps the subscription but pauses interrupt events.\r\n   */\r\n  pause(): void {\r\n    this.source.detach();\r\n  }\r\n}\r\n","/*\r\n * Represents a base class for types that provide expiry detection for the Idle service.\r\n */\r\nexport abstract class IdleExpiry {\r\n  protected idValue: any;\r\n  protected idlingValue: boolean;\r\n\r\n  constructor() {\r\n    this.idValue = new Date();\r\n    this.idlingValue = false;\r\n  }\r\n\r\n  /*\r\n   * Gets or sets a unique ID for the window\r\n   * @param id - The id.\r\n   * @return The current id.\r\n   */\r\n  id(value?: any): any {\r\n    if (value !== void 0) {\r\n      if (!value) {\r\n        throw new Error('A value must be specified for the ID.');\r\n      }\r\n\r\n      this.idValue = value;\r\n    }\r\n\r\n    return this.idValue;\r\n  }\r\n\r\n  /*\r\n   * Gets or sets the last expiry date.\r\n   * @param value - The value to set.\r\n   * @return The last expiry value.\r\n   */\r\n  abstract last(value?: Date): Date;\r\n\r\n  /*\r\n   * Gets or sets the idling value.\r\n   * @param value - The value to set.\r\n   * @return The idling value.\r\n   */\r\n  idling(value?: boolean): boolean {\r\n    if (value !== void 0) {\r\n      this.idlingValue = value;\r\n    }\r\n\r\n    return this.idlingValue;\r\n  }\r\n\r\n  /*\r\n   * Returns the current Date.\r\n   * @return The current Date.\r\n   */\r\n  now(): Date {\r\n    /* istanbul ignore next */\r\n    return new Date();\r\n  }\r\n\r\n  /*\r\n   * Returns whether or not it is expired.\r\n   * @return True if expired; otherwise, false.\r\n   */\r\n  isExpired(): boolean {\r\n    const expiry = this.last();\r\n    return expiry != null && expiry <= this.now();\r\n  }\r\n}\r\n","/*\r\n * Represents an alternative storage for browser that doesn't support localstorage. (i.e. Safari in\r\n * private mode)\r\n * @implements Storage\r\n */\r\nexport class AlternativeStorage implements Storage {\r\n  private storageMap: any = {};\r\n\r\n  /*\r\n   * Returns an integer representing the number of data items stored in the storageMap object.\r\n   */\r\n  get length() {\r\n    return Object.keys(this.storageMap).length;\r\n  }\r\n\r\n  /*\r\n   * Remove all keys out of the storage.\r\n   */\r\n  clear(): void {\r\n    this.storageMap = {};\r\n  }\r\n\r\n  /*\r\n   * Return the key's value\r\n   *\r\n   * @param key - name of the key to retrieve the value of.\r\n   * @return The key's value\r\n   */\r\n  getItem(key: string): string | null {\r\n    if (typeof this.storageMap[key] !== 'undefined') {\r\n      return this.storageMap[key];\r\n    }\r\n    return null;\r\n  }\r\n\r\n  /*\r\n   * Return the nth key in the storage\r\n   *\r\n   * @param index - the number of the key you want to get the name of.\r\n   * @return The name of the key.\r\n   */\r\n  key(index: number): string | null {\r\n    return Object.keys(this.storageMap)[index] || null;\r\n  }\r\n\r\n  /*\r\n   * Remove a key from the storage.\r\n   *\r\n   * @param key - the name of the key you want to remove.\r\n   */\r\n  removeItem(key: string): void {\r\n    this.storageMap[key] = undefined;\r\n  }\r\n\r\n  /*\r\n   * Add a key to the storage, or update a key's value if it already exists.\r\n   *\r\n   * @param key - the name of the key.\r\n   * @param value - the value you want to give to the key.\r\n   */\r\n  setItem(key: string, value: string): void {\r\n    this.storageMap[key] = value;\r\n  }\r\n\r\n  [key: string]: any;\r\n  [index: number]: string;\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { AlternativeStorage } from './alternativestorage';\r\n\r\n/*\r\n * Represents a localStorage store.\r\n */\r\n@Injectable()\r\nexport class LocalStorage {\r\n  private storage: Storage;\r\n\r\n  constructor() {\r\n    this.storage = this.getStorage();\r\n  }\r\n\r\n  /*\r\n   * Safari, in Private Browsing Mode, looks like it supports localStorage but all calls to setItem\r\n   * throw QuotaExceededError. We're going to detect this and just silently drop any calls to\r\n   * setItem\r\n   * to avoid the entire page breaking, without having to do a check at each usage of Storage.\r\n   */\r\n  private getStorage(): Storage {\r\n    try {\r\n      const storage = localStorage;\r\n      storage.setItem('ng2IdleStorage', '');\r\n      storage.removeItem('ng2IdleStorage');\r\n      return storage;\r\n    } catch (err) {\r\n      return new AlternativeStorage();\r\n    }\r\n  }\r\n\r\n  /*\r\n   * Gets an item in the storage.\r\n   *\r\n   * @param value - The value to get.\r\n   * @return The current value.\r\n   */\r\n  getItem(key: string): string | null {\r\n    return this.storage.getItem('ng2Idle.' + key);\r\n  }\r\n\r\n  /*\r\n   * Removes an item in the storage.\r\n   *\r\n   * @param value - The value to remove.\r\n   */\r\n  removeItem(key: string): void {\r\n    this.storage.removeItem('ng2Idle.' + key);\r\n  }\r\n\r\n  /*\r\n   * Sets an item in the storage.\r\n   *\r\n   * @param key - The key to set the value.\r\n   * @param value - The value to set to the key.\r\n   */\r\n  setItem(key: string, data: string): void {\r\n    this.storage.setItem('ng2Idle.' + key, data);\r\n  }\r\n\r\n  /*\r\n   * Represents the storage, commonly use for testing purposes.\r\n   *\r\n   * @param key - The key to set the value.\r\n   * @param value - The value to set to the key.\r\n   */\r\n  _wrapped(): Storage {\r\n    return this.storage;\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { IdleExpiry } from './idleexpiry';\r\nimport { LocalStorage } from './localstorage';\r\n\r\n/*\r\n * Represents a localStorage store of expiry values.\r\n * @extends IdleExpiry\r\n */\r\n@Injectable()\r\nexport class LocalStorageExpiry extends IdleExpiry {\r\n  private idleName = 'main';\r\n\r\n  constructor(private localStorage: LocalStorage) {\r\n    super();\r\n  }\r\n\r\n  /*\r\n   * Gets or sets the last expiry date in localStorage.\r\n   * If localStorage doesn't work correctly (i.e. Safari in private mode), we store the expiry value in memory.\r\n   * @param value - The expiry value to set; omit to only return the value.\r\n   * @return The current expiry value.\r\n   */\r\n  last(value?: Date): Date {\r\n    if (value !== void 0) {\r\n      this.setExpiry(value);\r\n    }\r\n    return this.getExpiry();\r\n  }\r\n\r\n  idling(value?: boolean): boolean {\r\n    if (value !== void 0) {\r\n      this.setIdling(value);\r\n    }\r\n    return this.getIdling();\r\n  }\r\n\r\n  /*\r\n   * Gets the idle name.\r\n   * @return The name of the idle.\r\n   */\r\n  getIdleName(): string {\r\n    return this.idleName;\r\n  }\r\n\r\n  /*\r\n   * Sets the idle name.\r\n   * @param The name of the idle.\r\n   */\r\n  setIdleName(key: string): void {\r\n    if (key) {\r\n      this.idleName = key;\r\n    }\r\n  }\r\n\r\n  private getExpiry(): Date {\r\n    const expiry: string = this.localStorage.getItem(this.idleName + '.expiry');\r\n    if (expiry) {\r\n      return new Date(parseInt(expiry, 10));\r\n    } else {\r\n      return null;\r\n    }\r\n  }\r\n\r\n  private setExpiry(value: Date) {\r\n    if (value) {\r\n      this.localStorage.setItem(\r\n        this.idleName + '.expiry',\r\n        value.getTime().toString()\r\n      );\r\n    } else {\r\n      this.localStorage.removeItem(this.idleName + '.expiry');\r\n    }\r\n  }\r\n\r\n  private getIdling(): boolean {\r\n    const idling: string = this.localStorage.getItem(this.idleName + '.idling');\r\n    if (idling) {\r\n      return idling === 'true';\r\n    } else {\r\n      return false;\r\n    }\r\n  }\r\n\r\n  private setIdling(value: boolean) {\r\n    if (value) {\r\n      this.localStorage.setItem(this.idleName + '.idling', value.toString());\r\n    } else {\r\n      this.localStorage.setItem(this.idleName + '.idling', 'false');\r\n    }\r\n  }\r\n}\r\n","export abstract class KeepaliveSvc {\r\n  abstract start(): void;\r\n  abstract stop(): void;\r\n  abstract ping(): void;\r\n}\r\n","import {\r\n  EventEmitter,\r\n  Inject,\r\n  Injectable,\r\n  NgZone,\r\n  OnDestroy,\r\n  Optional,\r\n  PLATFORM_ID\r\n} from '@angular/core';\r\n\r\nimport { IdleExpiry } from './idleexpiry';\r\nimport { Interrupt } from './interrupt';\r\nimport { InterruptArgs } from './interruptargs';\r\nimport { InterruptSource } from './interruptsource';\r\nimport { KeepaliveSvc } from './keepalivesvc';\r\nimport { LocalStorageExpiry } from './localstorageexpiry';\r\n\r\n/*\r\n * Indicates the desired auto resume behavior.\r\n */\r\nexport enum AutoResume {\r\n  /*\r\n   * Auto resume functionality will be disabled.\r\n   */\r\n  disabled,\r\n  /*\r\n   * Can resume automatically even if they are idle.\r\n   */\r\n  idle,\r\n  /*\r\n   * Can only resume automatically if they are not yet idle.\r\n   */\r\n  notIdle\r\n}\r\n\r\n/**\r\n * A service for detecting and responding to user idleness.\r\n */\r\n@Injectable()\r\nexport class Idle implements OnDestroy {\r\n  private idle: number = 20 * 60; // in seconds\r\n  private timeoutVal = 30; // in seconds\r\n  private autoResume: AutoResume = AutoResume.idle;\r\n  private interrupts: Array<Interrupt> = new Array();\r\n  private running = false;\r\n  private idling: boolean;\r\n  private idleHandle: any;\r\n  private timeoutHandle: any;\r\n  private countdown: number;\r\n  private keepaliveEnabled = false;\r\n  private keepaliveSvc: KeepaliveSvc;\r\n\r\n  public onIdleStart: EventEmitter<any> = new EventEmitter();\r\n  public onIdleEnd: EventEmitter<any> = new EventEmitter();\r\n  public onTimeoutWarning: EventEmitter<number> = new EventEmitter<number>();\r\n  public onTimeout: EventEmitter<number> = new EventEmitter<number>();\r\n  public onInterrupt: EventEmitter<any> = new EventEmitter();\r\n\r\n  [key: string]: any;\r\n\r\n  constructor(\r\n    private expiry: IdleExpiry,\r\n    private zone: NgZone,\r\n    @Optional() keepaliveSvc?: KeepaliveSvc,\r\n    // eslint-disable-next-line @typescript-eslint/ban-types\r\n    @Optional() @Inject(PLATFORM_ID) private platformId?: Object\r\n  ) {\r\n    if (keepaliveSvc) {\r\n      this.keepaliveSvc = keepaliveSvc;\r\n      this.keepaliveEnabled = true;\r\n    }\r\n    this.setIdling(false);\r\n  }\r\n\r\n  /*\r\n   * Sets the idle name for localStorage.\r\n   * Important to set if multiple instances of Idle with LocalStorageExpiry\r\n   * @param The name of the idle.\r\n   */\r\n  setIdleName(key: string): void {\r\n    if (this.expiry instanceof LocalStorageExpiry) {\r\n      this.expiry.setIdleName(key);\r\n    } else {\r\n      throw new Error(\r\n        'Cannot set expiry key name because no LocalStorageExpiry has been provided.'\r\n      );\r\n    }\r\n  }\r\n\r\n  /*\r\n   * Returns whether or not keepalive integration is enabled.\r\n   * @return True if integration is enabled; otherwise, false.\r\n   */\r\n  getKeepaliveEnabled(): boolean {\r\n    return this.keepaliveEnabled;\r\n  }\r\n\r\n  /*\r\n   * Sets and returns whether or not keepalive integration is enabled.\r\n   * @param True if the integration is enabled; otherwise, false.\r\n   * @return The current value.\r\n   */\r\n  setKeepaliveEnabled(value: boolean): boolean {\r\n    if (!this.keepaliveSvc) {\r\n      throw new Error(\r\n        'Cannot enable keepalive integration because no KeepaliveSvc has been provided.'\r\n      );\r\n    }\r\n\r\n    return (this.keepaliveEnabled = value);\r\n  }\r\n\r\n  /*\r\n   * Returns the current timeout value.\r\n   * @return The timeout value in seconds.\r\n   */\r\n  getTimeout(): number {\r\n    return this.timeoutVal;\r\n  }\r\n\r\n  /*\r\n   * Sets the timeout value.\r\n   * @param seconds - The timeout value in seconds. 0 or false to disable timeout feature.\r\n   * @return The current value. If disabled, the value will be 0.\r\n   */\r\n  setTimeout(seconds: number | boolean): number {\r\n    if (seconds === false) {\r\n      this.timeoutVal = 0;\r\n    } else if (typeof seconds === 'number' && seconds >= 0) {\r\n      this.timeoutVal = seconds;\r\n    } else {\r\n      throw new Error(\"'seconds' can only be 'false' or a positive number.\");\r\n    }\r\n\r\n    return this.timeoutVal;\r\n  }\r\n\r\n  /*\r\n   * Returns the current idle value.\r\n   * @return The idle value in seconds.\r\n   */\r\n  getIdle(): number {\r\n    return this.idle;\r\n  }\r\n\r\n  /*\r\n   * Sets the idle value.\r\n   * @param seconds - The idle value in seconds.\r\n   * @return The idle value in seconds.\r\n   */\r\n  setIdle(seconds: number): number {\r\n    if (seconds <= 0) {\r\n      throw new Error(\"'seconds' must be greater zero\");\r\n    }\r\n\r\n    return (this.idle = seconds);\r\n  }\r\n\r\n  /*\r\n   * Returns the current autoresume value.\r\n   * @return The current value.\r\n   */\r\n  getAutoResume(): AutoResume {\r\n    return this.autoResume;\r\n  }\r\n\r\n  setAutoResume(value: AutoResume): AutoResume {\r\n    return (this.autoResume = value);\r\n  }\r\n\r\n  /*\r\n   * Sets interrupts from the specified sources.\r\n   * @param sources - Interrupt sources.\r\n   * @return The resulting interrupts.\r\n   */\r\n  setInterrupts(sources: Array<InterruptSource>): Array<Interrupt> {\r\n    this.clearInterrupts();\r\n\r\n    const self = this;\r\n\r\n    for (const source of sources) {\r\n      const options = { platformId: this.platformId };\r\n      const sub = new Interrupt(source, options);\r\n      sub.subscribe((args: InterruptArgs) => {\r\n        self.interrupt(args.force, args.innerArgs);\r\n      });\r\n\r\n      this.interrupts.push(sub);\r\n    }\r\n\r\n    return this.interrupts;\r\n  }\r\n\r\n  /*\r\n   * Returns the current interrupts.\r\n   * @return The current interrupts.\r\n   */\r\n  getInterrupts(): Array<Interrupt> {\r\n    return this.interrupts;\r\n  }\r\n\r\n  /*\r\n   * Pauses, unsubscribes, and clears the current interrupt subscriptions.\r\n   */\r\n  clearInterrupts(): void {\r\n    for (const sub of this.interrupts) {\r\n      sub.pause();\r\n      sub.unsubscribe();\r\n    }\r\n\r\n    this.interrupts.length = 0;\r\n  }\r\n\r\n  /*\r\n   * Returns whether or not the service is running i.e. watching for idleness.\r\n   * @return True if service is watching; otherwise, false.\r\n   */\r\n  isRunning(): boolean {\r\n    return this.running;\r\n  }\r\n\r\n  /*\r\n   * Returns whether or not the user is considered idle.\r\n   * @return True if the user is in the idle state; otherwise, false.\r\n   */\r\n  isIdling(): boolean {\r\n    return this.idling;\r\n  }\r\n\r\n  /*\r\n   * Starts watching for inactivity.\r\n   */\r\n  watch(skipExpiry?: boolean): void {\r\n    this.safeClearInterval('idleHandle');\r\n    this.safeClearInterval('timeoutHandle');\r\n\r\n    const timeout = !this.timeoutVal ? 0 : this.timeoutVal;\r\n    if (!skipExpiry) {\r\n      const value = new Date(\r\n        this.expiry.now().getTime() + (this.idle + timeout) * 1000\r\n      );\r\n      this.expiry.last(value);\r\n    }\r\n\r\n    if (this.idling) {\r\n      this.toggleState();\r\n    }\r\n    if (!this.running) {\r\n      this.startKeepalive();\r\n      this.toggleInterrupts(true);\r\n    }\r\n\r\n    this.running = true;\r\n\r\n    const watchFn = () => {\r\n      this.zone.run(() => {\r\n        const diff = this.getExpiryDiff(timeout);\r\n        if (diff > 0) {\r\n          this.safeClearInterval('idleHandle');\r\n          this.setIdleIntervalOutsideOfZone(watchFn, diff);\r\n        } else {\r\n          this.toggleState();\r\n        }\r\n      });\r\n    };\r\n\r\n    this.setIdleIntervalOutsideOfZone(watchFn, this.idle * 1000);\r\n  }\r\n\r\n  /*\r\n   * Allows protractor tests to call waitForAngular without hanging\r\n   */\r\n  setIdleIntervalOutsideOfZone(watchFn: () => void, frequency: number): void {\r\n    this.zone.runOutsideAngular(() => {\r\n      this.idleHandle = setInterval(watchFn, frequency);\r\n    });\r\n  }\r\n\r\n  /*\r\n   * Stops watching for inactivity.\r\n   */\r\n  stop(): void {\r\n    this.stopKeepalive();\r\n\r\n    this.toggleInterrupts(false);\r\n\r\n    this.safeClearInterval('idleHandle');\r\n    this.safeClearInterval('timeoutHandle');\r\n\r\n    this.setIdling(false);\r\n    this.running = false;\r\n\r\n    this.expiry.last(null);\r\n  }\r\n\r\n  /*\r\n   * Forces a timeout event and state.\r\n   */\r\n  timeout(): void {\r\n    this.stopKeepalive();\r\n\r\n    this.toggleInterrupts(false);\r\n\r\n    this.safeClearInterval('idleHandle');\r\n    this.safeClearInterval('timeoutHandle');\r\n\r\n    this.setIdling(true);\r\n    this.running = false;\r\n    this.countdown = 0;\r\n\r\n    this.onTimeout.emit(null);\r\n  }\r\n\r\n  /*\r\n   * Signals that user activity has occurred.\r\n   * @param force - Forces watch to be called, unless they are timed out.\r\n   * @param eventArgs - Optional source event arguments.\r\n   */\r\n  interrupt(force?: boolean, eventArgs?: any): void {\r\n    if (!this.running) {\r\n      return;\r\n    }\r\n\r\n    if (this.timeoutVal && this.expiry.isExpired()) {\r\n      this.timeout();\r\n      return;\r\n    }\r\n    this.onInterrupt.emit(eventArgs);\r\n\r\n    if (\r\n      force === true ||\r\n      this.autoResume === AutoResume.idle ||\r\n      (this.autoResume === AutoResume.notIdle && !this.expiry.idling())\r\n    ) {\r\n      this.watch(force);\r\n    }\r\n  }\r\n\r\n  private setIdling(value: boolean): void {\r\n    this.idling = value;\r\n    this.expiry.idling(value);\r\n  }\r\n\r\n  private toggleState(): void {\r\n    this.setIdling(!this.idling);\r\n\r\n    if (this.idling) {\r\n      this.onIdleStart.emit(null);\r\n      this.stopKeepalive();\r\n\r\n      if (this.timeoutVal > 0) {\r\n        this.countdown = this.timeoutVal;\r\n        this.doCountdown();\r\n        this.setTimoutIntervalOutsideZone(() => {\r\n          this.doCountdownInZone();\r\n        }, 1000);\r\n      }\r\n    } else {\r\n      this.toggleInterrupts(true);\r\n      this.onIdleEnd.emit(null);\r\n      this.startKeepalive();\r\n    }\r\n\r\n    this.safeClearInterval('idleHandle');\r\n  }\r\n\r\n  private setTimoutIntervalOutsideZone(\r\n    intervalFn: () => void,\r\n    frequency: number\r\n  ) {\r\n    this.zone.runOutsideAngular(() => {\r\n      this.timeoutHandle = setInterval(() => {\r\n        intervalFn();\r\n      }, frequency);\r\n    });\r\n  }\r\n\r\n  private toggleInterrupts(resume: boolean): void {\r\n    for (const interrupt of this.interrupts) {\r\n      if (resume) {\r\n        interrupt.resume();\r\n      } else {\r\n        interrupt.pause();\r\n      }\r\n    }\r\n  }\r\n\r\n  private getExpiryDiff(timeout: number): number {\r\n    const now: Date = this.expiry.now();\r\n    const last: Date = this.expiry.last() || now;\r\n    return last.getTime() - now.getTime() - timeout * 1000;\r\n  }\r\n\r\n  private doCountdownInZone(): void {\r\n    this.zone.run(() => {\r\n      this.doCountdown();\r\n    });\r\n  }\r\n\r\n  private doCountdown(): void {\r\n    const diff = this.getExpiryDiff(this.timeoutVal);\r\n    if (diff > 0) {\r\n      this.safeClearInterval('timeoutHandle');\r\n      this.interrupt(true);\r\n      return;\r\n    }\r\n\r\n    if (!this.idling) {\r\n      return;\r\n    }\r\n\r\n    if (this.countdown <= 0) {\r\n      this.timeout();\r\n      return;\r\n    }\r\n\r\n    this.onTimeoutWarning.emit(this.countdown);\r\n    this.countdown--;\r\n  }\r\n\r\n  private safeClearInterval(handleName: string): void {\r\n    const handle = this[handleName];\r\n    if (handle !== null && typeof handle !== 'undefined') {\r\n      clearInterval(this[handleName]);\r\n      this[handleName] = null;\r\n    }\r\n  }\r\n\r\n  private startKeepalive(): void {\r\n    if (!this.keepaliveSvc || !this.keepaliveEnabled) {\r\n      return;\r\n    }\r\n\r\n    if (this.running) {\r\n      this.keepaliveSvc.ping();\r\n    }\r\n\r\n    this.keepaliveSvc.start();\r\n  }\r\n\r\n  private stopKeepalive(): void {\r\n    if (!this.keepaliveSvc || !this.keepaliveEnabled) {\r\n      return;\r\n    }\r\n\r\n    this.keepaliveSvc.stop();\r\n  }\r\n\r\n  /*\r\n   * Called by Angular when destroying the instance.\r\n   */\r\n  ngOnDestroy(): void {\r\n    this.stop();\r\n    this.clearInterrupts();\r\n  }\r\n}\r\n","import { InterruptSource } from './interruptsource';\r\n\r\n/*\r\n * A class for expressing arguments to interrupt events.\r\n */\r\nexport class InterruptArgs {\r\n  constructor(\r\n    public source: InterruptSource,\r\n    public innerArgs: any,\r\n    public force = false\r\n  ) {}\r\n}\r\n","import { EventEmitter } from '@angular/core';\r\n\r\nimport { InterruptArgs } from './interruptargs';\r\nimport { InterruptOptions } from './interruptoptions';\r\n\r\ndeclare const Zone: any;\r\n\r\n/*\r\n * A base for classes that act as a source for interrupts.\r\n */\r\nexport abstract class InterruptSource {\r\n  isAttached = false;\r\n\r\n  public onInterrupt: EventEmitter<InterruptArgs> = new EventEmitter<\r\n    InterruptArgs\r\n  >();\r\n\r\n  constructor(\r\n    protected attachFn?: (source: InterruptSource) => void,\r\n    protected detachFn?: (source: InterruptSource) => void\r\n  ) {}\r\n\r\n  /*\r\n   * Attaches to the specified events on the specified source.\r\n   */\r\n  attach(): void {\r\n    // If the current zone is the 'angular' zone (a.k.a. NgZone) then re-enter this method in its parent zone\r\n    // The parent zone is usually the '<root>' zone but it can also be 'long-stack-trace-zone' in debug mode\r\n    // In tests, the current zone is typically a 'ProxyZone' created by async/fakeAsync (from @angular/core/testing)\r\n    if (Zone.current.get('isAngularZone') === true) {\r\n      Zone.current.parent.run(() => this.attach());\r\n      return;\r\n    }\r\n\r\n    if (!this.isAttached && this.attachFn) {\r\n      this.attachFn(this);\r\n    }\r\n\r\n    this.isAttached = true;\r\n  }\r\n\r\n  /*\r\n   * Detaches from the specified events on the specified source.\r\n   */\r\n  detach(): void {\r\n    if (this.isAttached && this.detachFn) {\r\n      this.detachFn(this);\r\n    }\r\n\r\n    this.isAttached = false;\r\n  }\r\n\r\n  initialize?(options?: InterruptOptions): void;\r\n}\r\n","import { isPlatformServer } from '@angular/common';\r\nimport { Observable, Subscription, fromEvent, merge } from 'rxjs';\r\nimport { filter, throttleTime } from 'rxjs/operators';\r\n\r\nimport { EventTarget } from './eventtarget';\r\nimport { InterruptArgs } from './interruptargs';\r\nimport { InterruptOptions } from './interruptoptions';\r\nimport { InterruptSource } from './interruptsource';\r\n\r\n/**\r\n * Options for EventTargetInterruptSource\r\n */\r\nexport interface EventTargetInterruptOptions {\r\n  /**\r\n   * The number of milliseconds to throttle the events coming from the target.\r\n   */\r\n  throttleDelay?: number;\r\n\r\n  /**\r\n   * Whether or not to use passive event listeners.\r\n   * Note: you need to detect if the browser supports passive listeners, and only set this to true if it does.\r\n   */\r\n  passive?: boolean;\r\n}\r\n\r\nconst defaultThrottleDelay = 500;\r\n\r\n/*\r\n * An interrupt source on an EventTarget object, such as a Window or HTMLElement.\r\n */\r\nexport class EventTargetInterruptSource extends InterruptSource {\r\n  private eventSrc: Observable<any>;\r\n  private eventSubscription: Subscription = new Subscription();\r\n  protected throttleDelay: number;\r\n  protected passive: boolean;\r\n\r\n  constructor(\r\n    protected target: EventTarget<any> | (() => EventTarget<any>),\r\n    protected events: string,\r\n    private opts?: number | EventTargetInterruptOptions\r\n  ) {\r\n    super(null, null);\r\n\r\n    if (typeof this.opts === 'number') {\r\n      this.opts = { throttleDelay: this.opts, passive: false };\r\n    }\r\n\r\n    this.opts = this.opts || {\r\n      passive: false,\r\n      throttleDelay: defaultThrottleDelay\r\n    };\r\n\r\n    if (this.opts.throttleDelay === undefined || this.opts.throttleDelay === null) {\r\n      this.opts.throttleDelay = defaultThrottleDelay;\r\n    }\r\n\r\n    this.throttleDelay = this.opts.throttleDelay;\r\n    this.passive = !!this.opts.passive;\r\n  }\r\n\r\n  initialize(options?: InterruptOptions) {\r\n    if (options?.platformId && isPlatformServer(options.platformId)) {\r\n      return;\r\n    }\r\n\r\n    const eventTarget = typeof this.target === 'function' ? this.target() : this.target;\r\n    const opts = this.passive ? { passive: true } : null;\r\n    const fromEvents = this.events\r\n      .split(' ')\r\n      .map(eventName => fromEvent(eventTarget as any, eventName, opts));\r\n    this.eventSrc = merge(...fromEvents);\r\n    this.eventSrc = this.eventSrc.pipe(\r\n      filter(innerArgs => !this.filterEvent(innerArgs))\r\n    );\r\n    if (this.throttleDelay > 0) {\r\n      this.eventSrc = this.eventSrc.pipe(throttleTime(this.throttleDelay));\r\n    }\r\n\r\n    const handler = (innerArgs: any) =>\r\n      this.onInterrupt.emit(new InterruptArgs(this, innerArgs));\r\n\r\n    this.attachFn = () =>\r\n      (this.eventSubscription = this.eventSrc.subscribe(handler));\r\n\r\n    this.detachFn = () => this.eventSubscription.unsubscribe();\r\n  }\r\n\r\n  /*\r\n   * Checks to see if the event should be filtered. Always returns false unless overriden.\r\n   * @param event - The original event object.\r\n   * @return True if the event should be filtered (don't cause an interrupt); otherwise, false.\r\n   */\r\n  protected filterEvent(event: any): boolean {\r\n    return false;\r\n  }\r\n\r\n  /**\r\n   * Returns the current options being used.\r\n   * @return The current option values.\r\n   */\r\n  get options(): EventTargetInterruptOptions {\r\n    return {\r\n      passive: this.passive,\r\n      throttleDelay: this.throttleDelay\r\n    };\r\n  }\r\n}\r\n","import {\r\n  EventTargetInterruptOptions,\r\n  EventTargetInterruptSource\r\n} from './eventtargetinterruptsource';\r\n\r\n/*\r\n * An interrupt source that uses events on the document element (html tag).\r\n */\r\nexport class DocumentInterruptSource extends EventTargetInterruptSource {\r\n  constructor(events: string, options?: number | EventTargetInterruptOptions) {\r\n    super(() => document.documentElement, events, options);\r\n  }\r\n\r\n  /*\r\n   * Checks to see if the event should be filtered.\r\n   * @param event - The original event object.\r\n   * @return True if the event should be filtered (don't cause an interrupt); otherwise, false.\r\n   */\r\n  filterEvent(event: any): boolean {\r\n    // some browser bad input hacks\r\n    if (\r\n      event.type === 'mousemove' &&\r\n      // fix for Chrome destop notifications\r\n      ((event.originalEvent &&\r\n        event.originalEvent.movementX === 0 &&\r\n        event.originalEvent.movementY === 0) ||\r\n        // fix for webkit fake mousemove\r\n        ((event.movementX !== void 0 && !event.movementX) || !event.movementY))\r\n    ) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n}\r\n","import {\r\n  EventTargetInterruptOptions,\r\n  EventTargetInterruptSource\r\n} from './eventtargetinterruptsource';\r\n\r\n/*\r\n * An interrupt source on the Window object.\r\n */\r\nexport class WindowInterruptSource extends EventTargetInterruptSource {\r\n  constructor(events: string, options?: number | EventTargetInterruptOptions) {\r\n    super(() => window, events, options);\r\n  }\r\n}\r\n","import { WindowInterruptSource } from './windowinterruptsource';\r\nimport { EventTargetInterruptOptions } from './eventtargetinterruptsource';\r\n\r\n/*\r\n * An interrupt source on the storage event of Window.\r\n */\r\nexport class StorageInterruptSource extends WindowInterruptSource {\r\n  constructor(options: number | EventTargetInterruptOptions = 500) {\r\n    super('storage', options);\r\n  }\r\n\r\n  /*\r\n   * Checks to see if the event should be filtered.\r\n   * @param event - The original event object.\r\n   * @return True if the event should be filtered (don't cause an interrupt); otherwise, false.\r\n   */\r\n  filterEvent(event: StorageEvent): boolean {\r\n    if (\r\n      event.key &&\r\n      event.key.indexOf('ng2Idle.') >= 0 &&\r\n      event.key.indexOf('.expiry') >= 0\r\n    ) {\r\n      return false;\r\n    }\r\n    return true;\r\n  }\r\n}\r\n","import { IdleExpiry } from './idleexpiry';\r\n\r\n/*\r\n * Represents a simple in-memory store of expiry values.\r\n * @extends IdleExpiry\r\n */\r\nexport class SimpleExpiry extends IdleExpiry {\r\n  private lastValue: Date = null;\r\n\r\n  constructor() {\r\n    super();\r\n  }\r\n\r\n  /*\r\n   * Gets or sets the last expiry date.\r\n   * @param value - The expiry value to set; omit to only return the value.\r\n   * @return The current expiry value.\r\n   */\r\n  last(value?: Date): Date {\r\n    if (value !== void 0) {\r\n      this.lastValue = value;\r\n    }\r\n\r\n    return this.lastValue;\r\n  }\r\n}\r\n","import { ModuleWithProviders, NgModule } from '@angular/core';\r\n\r\nimport { Idle } from './idle';\r\nimport { IdleExpiry } from './idleexpiry';\r\nimport { LocalStorageExpiry } from './localstorageexpiry';\r\nimport { LocalStorage } from './localstorage';\r\n\r\n@NgModule({\r\n  providers: [LocalStorage]\r\n})\r\nexport class NgIdleModule {\r\n  static forRoot(): ModuleWithProviders<NgIdleModule> {\r\n    return {\r\n      ngModule: NgIdleModule,\r\n      providers: [\r\n        LocalStorageExpiry,\r\n        { provide: IdleExpiry, useExisting: LocalStorageExpiry },\r\n        Idle\r\n      ]\r\n    };\r\n  }\r\n}\r\n","import { DocumentInterruptSource } from './documentinterruptsource';\r\nimport { EventTargetInterruptOptions } from './eventtargetinterruptsource';\r\nimport { StorageInterruptSource } from './storageinterruptsource';\r\n\r\nexport function createDefaultInterruptSources(\r\n  options?: EventTargetInterruptOptions\r\n) {\r\n  return [\r\n    new DocumentInterruptSource(\r\n      'mousemove keydown DOMMouseScroll mousewheel mousedown touchstart touchmove scroll',\r\n      options\r\n    ),\r\n    new StorageInterruptSource(options)\r\n  ];\r\n}\r\n\r\nexport const DEFAULT_INTERRUPTSOURCES = createDefaultInterruptSources();\r\n","/*\r\n * Public API Surface of core\r\n */\r\n\r\nexport * from './lib/idle';\r\nexport * from './lib/interruptargs';\r\nexport * from './lib/interruptsource';\r\nexport * from './lib/eventtargetinterruptsource';\r\nexport * from './lib/documentinterruptsource';\r\nexport * from './lib/windowinterruptsource';\r\nexport * from './lib/storageinterruptsource';\r\nexport * from './lib/keepalivesvc';\r\nexport * from './lib/idleexpiry';\r\nexport * from './lib/simpleexpiry';\r\nexport * from './lib/localstorage';\r\nexport * from './lib/localstorageexpiry';\r\nexport * from './lib/module';\r\nexport * from './lib/defaultinterruptsources';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.LocalStorage"],"mappings":"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"}