{"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 enable(): 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 disable(): 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,EAAE,EAAE;AACvC,QAAM;GACJ,qBAAqB;GACrB,wBAAwB;GACxB;GACA;GACA;GACA,QAAQ,EAAE;GACX,CAAC;AAEF,OAAK,gBAAgB;AACnB,QAAK,mBAAmB;;AAG1B,MAAI,KAAK,QAAQ,QACf,MAAK,QAAQ;;CAIjB,SAAsB;AACpB,SAAO,oBAAoB,QAAQ,KAAK,QAAQ;AAEhD,MAAI,OAAO,SAAS,eAAe,YAAY;AAC7C,QAAK,mBAAmB;AACxB;;AAGF,SAAO,iBAAiB,QAAQ,KAAK,QAAQ;;CAG/C,UAAuB;AACrB,SAAO,oBAAoB,QAAQ,KAAK,QAAQ;;CAGlD,oBAAkC;AAChC,MAAI,KAAK,sBACP;AAEF,OAAK,wBAAwB;EAK7B,MAAM,eAHa,YAAY,iBAC7B,aACD,CAC+B,IAAI;AAEpC,MAAI,CAAC,cAAc,OACjB;AAGF,OAAK,MAAM,SAAS,cAAc;AAChC,OAAI,KAAK,cAAc,wBAAwB,CAC7C;AAGF,QAAK,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;KAC5C;IACF,CAAC"}