MOON
Server: Apache
System: Linux nserver.cafsindia.com 4.18.0-553.104.1.lve.el8.x86_64 #1 SMP Tue Feb 10 20:07:30 UTC 2026 x86_64
User: cafsindia (1002)
PHP: 8.2.30
Disabled: NONE
Upload Files
File: //home/cafsindia/snap.cafsinfotech.in/node_modules/@sentry/core/esm/sessionflusher.js.map
{"version":3,"file":"sessionflusher.js","sources":["../../src/sessionflusher.ts"],"sourcesContent":["import type {\n  AggregationCounts,\n  Client,\n  RequestSessionStatus,\n  SessionAggregates,\n  SessionFlusherLike,\n} from '@sentry/types';\nimport { dropUndefinedKeys } from '@sentry/utils';\n\nimport { getCurrentHub } from './hub';\n\ntype ReleaseHealthAttributes = {\n  environment?: string;\n  release: string;\n};\n\n/**\n * @inheritdoc\n */\nexport class SessionFlusher implements SessionFlusherLike {\n  public readonly flushTimeout: number;\n  private _pendingAggregates: Record<number, AggregationCounts>;\n  private _sessionAttrs: ReleaseHealthAttributes;\n  private _intervalId: ReturnType<typeof setInterval>;\n  private _isEnabled: boolean;\n  private _client: Client;\n\n  public constructor(client: Client, attrs: ReleaseHealthAttributes) {\n    this._client = client;\n    this.flushTimeout = 60;\n    this._pendingAggregates = {};\n    this._isEnabled = true;\n\n    // Call to setInterval, so that flush is called every 60 seconds\n    this._intervalId = setInterval(() => this.flush(), this.flushTimeout * 1000);\n    this._sessionAttrs = attrs;\n  }\n\n  /** Checks if `pendingAggregates` has entries, and if it does flushes them by calling `sendSession` */\n  public flush(): void {\n    const sessionAggregates = this.getSessionAggregates();\n    if (sessionAggregates.aggregates.length === 0) {\n      return;\n    }\n    this._pendingAggregates = {};\n    this._client.sendSession(sessionAggregates);\n  }\n\n  /** Massages the entries in `pendingAggregates` and returns aggregated sessions */\n  public getSessionAggregates(): SessionAggregates {\n    const aggregates: AggregationCounts[] = Object.keys(this._pendingAggregates).map((key: string) => {\n      return this._pendingAggregates[parseInt(key)];\n    });\n\n    const sessionAggregates: SessionAggregates = {\n      attrs: this._sessionAttrs,\n      aggregates,\n    };\n    return dropUndefinedKeys(sessionAggregates);\n  }\n\n  /** JSDoc */\n  public close(): void {\n    clearInterval(this._intervalId);\n    this._isEnabled = false;\n    this.flush();\n  }\n\n  /**\n   * Wrapper function for _incrementSessionStatusCount that checks if the instance of SessionFlusher is enabled then\n   * fetches the session status of the request from `Scope.getRequestSession().status` on the scope and passes them to\n   * `_incrementSessionStatusCount` along with the start date\n   */\n  public incrementSessionStatusCount(): void {\n    if (!this._isEnabled) {\n      return;\n    }\n    const scope = getCurrentHub().getScope();\n    const requestSession = scope.getRequestSession();\n\n    if (requestSession && requestSession.status) {\n      this._incrementSessionStatusCount(requestSession.status, new Date());\n      // This is not entirely necessarily but is added as a safe guard to indicate the bounds of a request and so in\n      // case captureRequestSession is called more than once to prevent double count\n      scope.setRequestSession(undefined);\n      /* eslint-enable @typescript-eslint/no-unsafe-member-access */\n    }\n  }\n\n  /**\n   * Increments status bucket in pendingAggregates buffer (internal state) corresponding to status of\n   * the session received\n   */\n  private _incrementSessionStatusCount(status: RequestSessionStatus, date: Date): number {\n    // Truncate minutes and seconds on Session Started attribute to have one minute bucket keys\n    const sessionStartedTrunc = new Date(date).setSeconds(0, 0);\n    this._pendingAggregates[sessionStartedTrunc] = this._pendingAggregates[sessionStartedTrunc] || {};\n\n    // corresponds to aggregated sessions in one specific minute bucket\n    // for example, {\"started\":\"2021-03-16T08:00:00.000Z\",\"exited\":4, \"errored\": 1}\n    const aggregationCounts: AggregationCounts = this._pendingAggregates[sessionStartedTrunc];\n    if (!aggregationCounts.started) {\n      aggregationCounts.started = new Date(sessionStartedTrunc).toISOString();\n    }\n\n    switch (status) {\n      case 'errored':\n        aggregationCounts.errored = (aggregationCounts.errored || 0) + 1;\n        return aggregationCounts.errored;\n      case 'ok':\n        aggregationCounts.exited = (aggregationCounts.exited || 0) + 1;\n        return aggregationCounts.exited;\n      default:\n        aggregationCounts.crashed = (aggregationCounts.crashed || 0) + 1;\n        return aggregationCounts.crashed;\n    }\n  }\n}\n"],"names":[],"mappings":"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"}