{"version":3,"file":"EmbraceUserManager.cjs","names":["diag","EMBRACE_USER_ID_STORAGE_KEY","isUserId","generateUUID","EMBRACE_EXTERNAL_USER_ID_KEY"],"sources":["../../../src/managers/EmbraceUserManager/EmbraceUserManager.ts"],"sourcesContent":["import type { DiagLogger } from '@opentelemetry/api';\nimport { diag } from '@opentelemetry/api';\nimport type { UserManagerInternal } from '../../api-users/index.ts';\nimport type { NamespacedStorage } from '../../utils/index.ts';\nimport { generateUUID } from '../../utils/index.ts';\nimport {\n  EMBRACE_EXTERNAL_USER_ID_KEY,\n  EMBRACE_USER_ID_STORAGE_KEY,\n} from './constants.ts';\nimport type { EmbraceUserManagerArgs } from './types.ts';\nimport { isUserId } from './types.ts';\n\nexport class EmbraceUserManager implements UserManagerInternal {\n  private readonly _diag: DiagLogger;\n  private readonly _storage: NamespacedStorage;\n  private _embraceUserId: string | null = null;\n\n  public constructor({ diag: diagParam, storage }: EmbraceUserManagerArgs) {\n    this._diag =\n      diagParam ??\n      diag.createComponentLogger({\n        namespace: 'EmbraceUserManager',\n      });\n    this._storage = storage;\n    this._initialSetup();\n  }\n\n  // No need to make this API more complicated by returning string | null\n  // embraceUserId should never be null at this point, but just in case defaulting to a new one if is not present\n  public getEmbraceUserId(): string {\n    return this._embraceUserId || this._generateNewEmbraceUserId();\n  }\n\n  public setEmbraceUserId(userId: string) {\n    this._embraceUserId = userId;\n    this._storage.setItem(EMBRACE_USER_ID_STORAGE_KEY, userId);\n  }\n\n  public clearEmbraceUserId() {\n    this._embraceUserId = null;\n    this._storage.removeItem(EMBRACE_USER_ID_STORAGE_KEY);\n  }\n\n  private _initialSetup() {\n    const embraceUserId = this._storage.getItem(EMBRACE_USER_ID_STORAGE_KEY);\n    if (!embraceUserId) {\n      this._diag.debug('No existing user found in storage, creating a new one');\n    } else if (isUserId(embraceUserId)) {\n      this._embraceUserId = embraceUserId;\n    } else {\n      this._diag.warn('Invalid embrace user id, generating a new one');\n      this.clearEmbraceUserId();\n    }\n\n    if (!this._embraceUserId) {\n      this._embraceUserId = this._generateNewEmbraceUserId();\n    }\n  }\n\n  private _generateNewEmbraceUserId() {\n    const newUserId = generateUUID();\n    this.setEmbraceUserId(newUserId);\n\n    return newUserId;\n  }\n\n  public getUserId(): string | null {\n    return this._storage.getItem(EMBRACE_EXTERNAL_USER_ID_KEY);\n  }\n\n  // Storage is the source of truth so multiple tabs can share the same user id.\n  public setUserId(userId: string): void {\n    this._storage.setItem(EMBRACE_EXTERNAL_USER_ID_KEY, userId);\n  }\n\n  public clearUserId(): void {\n    this._storage.removeItem(EMBRACE_EXTERNAL_USER_ID_KEY);\n  }\n}\n"],"mappings":";;;;;;AAYA,IAAa,qBAAb,MAA+D;CAC7D;CACA;CACA,iBAAwC;CAExC,YAAmB,EAAE,MAAM,WAAW,WAAmC;EACvE,KAAK,QACH,aACAA,mBAAAA,KAAK,sBAAsB,EACzB,WAAW,qBACb,CAAC;EACH,KAAK,WAAW;EAChB,KAAK,cAAc;CACrB;CAIA,mBAAkC;EAChC,OAAO,KAAK,kBAAkB,KAAK,0BAA0B;CAC/D;CAEA,iBAAwB,QAAgB;EACtC,KAAK,iBAAiB;EACtB,KAAK,SAAS,QAAQC,8CAAAA,6BAA6B,MAAM;CAC3D;CAEA,qBAA4B;EAC1B,KAAK,iBAAiB;EACtB,KAAK,SAAS,WAAWA,8CAAAA,2BAA2B;CACtD;CAEA,gBAAwB;EACtB,MAAM,gBAAgB,KAAK,SAAS,QAAQA,8CAAAA,2BAA2B;EACvE,IAAI,CAAC,eACH,KAAK,MAAM,MAAM,uDAAuD;OACnE,IAAIC,0CAAAA,SAAS,aAAa,GAC/B,KAAK,iBAAiB;OACjB;GACL,KAAK,MAAM,KAAK,+CAA+C;GAC/D,KAAK,mBAAmB;EAC1B;EAEA,IAAI,CAAC,KAAK,gBACR,KAAK,iBAAiB,KAAK,0BAA0B;CAEzD;CAEA,4BAAoC;EAClC,MAAM,YAAYC,2BAAAA,aAAa;EAC/B,KAAK,iBAAiB,SAAS;EAE/B,OAAO;CACT;CAEA,YAAkC;EAChC,OAAO,KAAK,SAAS,QAAQC,8CAAAA,4BAA4B;CAC3D;CAGA,UAAiB,QAAsB;EACrC,KAAK,SAAS,QAAQA,8CAAAA,8BAA8B,MAAM;CAC5D;CAEA,cAA2B;EACzB,KAAK,SAAS,WAAWA,8CAAAA,4BAA4B;CACvD;AACF"}