{"version":3,"file":"EmbraceInstrumentationBase.cjs","names":["InstrumentationAbstract","OTelPerformanceManager","session","log"],"sources":["../../../src/instrumentations/EmbraceInstrumentationBase/EmbraceInstrumentationBase.ts"],"sourcesContent":["import type {\n  Instrumentation,\n  InstrumentationConfig,\n  InstrumentationModuleDefinition,\n} from '@opentelemetry/instrumentation';\nimport type { LogManager } from '../../api-logs/index.ts';\nimport { log } from '../../api-logs/index.ts';\nimport type { SessionPartStartedEvent } from '../../api-sessions/index.ts';\nimport { session } from '../../api-sessions/index.ts';\nimport type {\n  LimitManagerInternal,\n  UserSessionManagerInternal,\n} from '../../managers/index.ts';\nimport type { PerformanceManager } from '../../utils/index.ts';\nimport { OTelPerformanceManager } from '../../utils/index.ts';\nimport { InstrumentationAbstract } from '../InstrumentationAbstract/index.ts';\nimport type { EmbraceInstrumentationBaseArgs } from './types.ts';\n\ntype SessionPartListeners = {\n  start?: (event: SessionPartStartedEvent) => void;\n  end?: () => void;\n};\ntype RemoveSessionPartListeners = {\n  start?: () => void;\n  end?: () => void;\n};\nexport abstract class EmbraceInstrumentationBase<\n    ConfigType extends InstrumentationConfig = InstrumentationConfig,\n  >\n  extends InstrumentationAbstract<ConfigType>\n  implements Instrumentation<ConfigType>\n{\n  private _userSessionManager: UserSessionManagerInternal;\n  private _logManager: LogManager;\n  private readonly _perf: PerformanceManager;\n  private _limitManager: LimitManagerInternal | undefined;\n  protected _isEnabled = false;\n  private _removeSessionPartListeners: RemoveSessionPartListeners = {};\n  private _sessionPartListeners: SessionPartListeners = {};\n\n  protected constructor({\n    instrumentationName,\n    instrumentationVersion,\n    config,\n    diag,\n    perf,\n    limitManager,\n  }: EmbraceInstrumentationBaseArgs<ConfigType>) {\n    super(instrumentationName, instrumentationVersion, config);\n    // optionally override the diag logger from the base class\n    if (diag) {\n      this._diag = diag;\n    }\n    this._perf = perf ?? new OTelPerformanceManager();\n    this._limitManager = limitManager;\n    this._userSessionManager = session.getUserSessionManager();\n    this._logManager = log.getLogManager();\n  }\n\n  /* Returns session provider */\n  protected get userSessionManager(): UserSessionManagerInternal {\n    return this._userSessionManager;\n  }\n\n  /* Returns log manager */\n  protected get logManager(): LogManager {\n    return this._logManager;\n  }\n\n  /* Returns the performance manager */\n  protected get perf(): PerformanceManager {\n    return this._perf;\n  }\n\n  /* Returns the limit manager */\n  protected get limitManager(): LimitManagerInternal | undefined {\n    return this._limitManager;\n  }\n\n  public setLimitManager(limitManager: LimitManagerInternal): void {\n    this._limitManager = limitManager;\n  }\n\n  // no-op\n  // Note: OTel uses `| void` but we use `| undefined` for semantic clarity.\n  // `void` in union types is confusing because it mixes \"returns nothing\" with \"returns data or nothing\".\n  // `undefined` better expresses the intent: this method may or may not return a value.\n  protected override init():\n    | InstrumentationModuleDefinition\n    | InstrumentationModuleDefinition[]\n    | undefined {\n    return;\n  }\n\n  public setLogManager(logManager: LogManager): void {\n    this._logManager = logManager;\n  }\n\n  public setUserSessionManager(\n    userSessionManager: UserSessionManagerInternal,\n  ): void {\n    this._userSessionManager = userSessionManager;\n    this._registerSessionPartListeners();\n  }\n\n  /*\n   * Management of session part listeners\n   */\n\n  protected setSessionPartListeners(listeners: SessionPartListeners): void {\n    this._sessionPartListeners = listeners;\n    this._registerSessionPartListeners();\n  }\n\n  protected unregisterSessionPartListeners(): void {\n    if (this._removeSessionPartListeners.start) {\n      this._removeSessionPartListeners.start();\n    }\n\n    if (this._removeSessionPartListeners.end) {\n      this._removeSessionPartListeners.end();\n    }\n\n    this._removeSessionPartListeners = {};\n  }\n\n  private _registerSessionPartListeners(): void {\n    if (this._isEnabled && this.userSessionManager) {\n      this.unregisterSessionPartListeners();\n\n      if (this._sessionPartListeners.start) {\n        this._removeSessionPartListeners.start =\n          this.userSessionManager.addSessionPartStartedListener((event) =>\n            this._sessionPartListeners.start?.(event),\n          );\n      }\n\n      if (this._sessionPartListeners.end) {\n        this._removeSessionPartListeners.end =\n          this.userSessionManager.addSessionPartEndedListener(() =>\n            this._sessionPartListeners.end?.(),\n          );\n      }\n    }\n  }\n\n  public override disable(): void {\n    if (!this._isEnabled) {\n      return;\n    }\n\n    this._isEnabled = false;\n    this.onDisable();\n    this.unregisterSessionPartListeners();\n  }\n\n  public override enable(): void {\n    if (this._isEnabled) {\n      return;\n    }\n\n    this._isEnabled = true;\n    this.onEnable();\n  }\n\n  /* Only triggered when the instrumentation transitions to disabled */\n  protected abstract onDisable(): void;\n\n  /* Only triggered when the instrumentation transitions to enabled */\n  public abstract onEnable(): void;\n}\n"],"mappings":";;;;;;AA0BA,IAAsB,6BAAtB,cAGUA,yEAAAA,wBAEV;CACE;CACA;CACA;CACA;CACA,aAAuB;CACvB,8BAAkE,CAAC;CACnE,wBAAsD,CAAC;CAEvD,YAAsB,EACpB,qBACA,wBACA,QACA,MACA,MACA,gBAC6C;EAC7C,MAAM,qBAAqB,wBAAwB,MAAM;EAEzD,IAAI,MACF,KAAK,QAAQ;EAEf,KAAK,QAAQ,QAAQ,IAAIC,wDAAAA,uBAAuB;EAChD,KAAK,gBAAgB;EACrB,KAAK,sBAAsBC,gCAAAA,QAAQ,sBAAsB;EACzD,KAAK,cAAcC,wBAAAA,IAAI,cAAc;CACvC;CAGA,IAAc,qBAAiD;EAC7D,OAAO,KAAK;CACd;CAGA,IAAc,aAAyB;EACrC,OAAO,KAAK;CACd;CAGA,IAAc,OAA2B;EACvC,OAAO,KAAK;CACd;CAGA,IAAc,eAAiD;EAC7D,OAAO,KAAK;CACd;CAEA,gBAAuB,cAA0C;EAC/D,KAAK,gBAAgB;CACvB;CAMA,OAGc,CAEd;CAEA,cAAqB,YAA8B;EACjD,KAAK,cAAc;CACrB;CAEA,sBACE,oBACM;EACN,KAAK,sBAAsB;EAC3B,KAAK,8BAA8B;CACrC;CAMA,wBAAkC,WAAuC;EACvE,KAAK,wBAAwB;EAC7B,KAAK,8BAA8B;CACrC;CAEA,iCAAiD;EAC/C,IAAI,KAAK,4BAA4B,OACnC,KAAK,4BAA4B,MAAM;EAGzC,IAAI,KAAK,4BAA4B,KACnC,KAAK,4BAA4B,IAAI;EAGvC,KAAK,8BAA8B,CAAC;CACtC;CAEA,gCAA8C;EAC5C,IAAI,KAAK,cAAc,KAAK,oBAAoB;GAC9C,KAAK,+BAA+B;GAEpC,IAAI,KAAK,sBAAsB,OAC7B,KAAK,4BAA4B,QAC/B,KAAK,mBAAmB,+BAA+B,UACrD,KAAK,sBAAsB,QAAQ,KAAK,CAC1C;GAGJ,IAAI,KAAK,sBAAsB,KAC7B,KAAK,4BAA4B,MAC/B,KAAK,mBAAmB,kCACtB,KAAK,sBAAsB,MAAM,CACnC;EAEN;CACF;CAEA,UAAgC;EAC9B,IAAI,CAAC,KAAK,YACR;EAGF,KAAK,aAAa;EAClB,KAAK,UAAU;EACf,KAAK,+BAA+B;CACtC;CAEA,SAA+B;EAC7B,IAAI,KAAK,YACP;EAGF,KAAK,aAAa;EAClB,KAAK,SAAS;CAChB;AAOF"}