@embrace-io/web-sdk
Version:
1 lines • 3.83 kB
Source Map (JSON)
{"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"}