{"version":3,"file":"ServerTimingInstrumentation.cjs","names":["EmbraceInstrumentationBase","SERVER_TIMING_EVENT_NAME","SeverityNumber","KEY_EMB_TYPE","KEY_EMB_SERVER_TIMING_NAME","KEY_EMB_SERVER_TIMING_DURATION","KEY_EMB_SERVER_TIMING_DESCRIPTION"],"sources":["../../../../src/instrumentations/server-timing/ServerTimingInstrumentation/ServerTimingInstrumentation.ts"],"sourcesContent":["import { SeverityNumber } from '@opentelemetry/api-logs';\nimport { EMB_TYPES, KEY_EMB_TYPE } from '../../../constants/index.ts';\nimport { EmbraceInstrumentationBase } from '../../EmbraceInstrumentationBase/index.ts';\nimport {\n  KEY_EMB_SERVER_TIMING_DESCRIPTION,\n  KEY_EMB_SERVER_TIMING_DURATION,\n  KEY_EMB_SERVER_TIMING_NAME,\n  SERVER_TIMING_EVENT_NAME,\n} from './constants.ts';\nimport type { ServerTimingInstrumentationArgs } from './types.ts';\n\nexport class ServerTimingInstrumentation extends EmbraceInstrumentationBase {\n  private readonly _onLoad: () => void;\n  private _performanceCollected = false;\n\n  public constructor({\n    diag,\n    perf,\n    limitManager,\n  }: ServerTimingInstrumentationArgs = {}) {\n    super({\n      instrumentationName: 'ServerTimingInstrumentation',\n      instrumentationVersion: '1.0.0',\n      diag,\n      perf,\n      limitManager,\n      config: {},\n    });\n\n    this._onLoad = () => {\n      this._readServerTiming();\n    };\n\n    if (this._config.enabled) {\n      this.enable();\n    }\n  }\n\n  public override onEnable(): void {\n    window.removeEventListener('load', this._onLoad);\n\n    if (window.document.readyState === 'complete') {\n      this._readServerTiming();\n      return;\n    }\n\n    window.addEventListener('load', this._onLoad);\n  }\n\n  public override onDisable(): void {\n    window.removeEventListener('load', this._onLoad);\n  }\n\n  private _readServerTiming(): void {\n    if (this._performanceCollected) {\n      return;\n    }\n    this._performanceCollected = true;\n\n    const navEntries = performance.getEntriesByType(\n      'navigation',\n    ) as PerformanceNavigationTiming[];\n    const serverTiming = navEntries[0]?.serverTiming;\n\n    if (!serverTiming?.length) {\n      return;\n    }\n\n    for (const entry of serverTiming) {\n      if (this.limitManager?.limitServerTimingEntry()) {\n        return;\n      }\n\n      this.logger.emit({\n        eventName: SERVER_TIMING_EVENT_NAME,\n        severityNumber: SeverityNumber.INFO,\n        attributes: {\n          [KEY_EMB_TYPE]: EMB_TYPES.ServerTiming,\n          [KEY_EMB_SERVER_TIMING_NAME]: entry.name,\n          [KEY_EMB_SERVER_TIMING_DURATION]: entry.duration,\n          [KEY_EMB_SERVER_TIMING_DESCRIPTION]: entry.description,\n        },\n      });\n    }\n  }\n}\n"],"mappings":";;;;;;AAWA,IAAa,8BAAb,cAAiDA,+EAAAA,2BAA2B;CAC1E;CACA,wBAAgC;CAEhC,YAAmB,EACjB,MACA,MACA,iBACmC,CAAC,GAAG;EACvC,MAAM;GACJ,qBAAqB;GACrB,wBAAwB;GACxB;GACA;GACA;GACA,QAAQ,CAAC;EACX,CAAC;EAED,KAAK,gBAAgB;GACnB,KAAK,kBAAkB;EACzB;EAEA,IAAI,KAAK,QAAQ,SACf,KAAK,OAAO;CAEhB;CAEA,WAAiC;EAC/B,OAAO,oBAAoB,QAAQ,KAAK,OAAO;EAE/C,IAAI,OAAO,SAAS,eAAe,YAAY;GAC7C,KAAK,kBAAkB;GACvB;EACF;EAEA,OAAO,iBAAiB,QAAQ,KAAK,OAAO;CAC9C;CAEA,YAAkC;EAChC,OAAO,oBAAoB,QAAQ,KAAK,OAAO;CACjD;CAEA,oBAAkC;EAChC,IAAI,KAAK,uBACP;EAEF,KAAK,wBAAwB;EAK7B,MAAM,eAHa,YAAY,iBAC7B,YAE4B,CAAC,CAAC,EAAE,EAAE;EAEpC,IAAI,CAAC,cAAc,QACjB;EAGF,KAAK,MAAM,SAAS,cAAc;GAChC,IAAI,KAAK,cAAc,uBAAuB,GAC5C;GAGF,KAAK,OAAO,KAAK;IACf,WAAWC,6EAAAA;IACX,gBAAgBC,wBAAAA,eAAe;IAC/B,YAAY;MACTC,6BAAAA,eAAAA;MACAC,6EAAAA,6BAA6B,MAAM;MACnCC,6EAAAA,iCAAiC,MAAM;MACvCC,6EAAAA,oCAAoC,MAAM;IAC7C;GACF,CAAC;EACH;CACF;AACF"}