@multiplayer-app/session-recorder-common 1.3.16 → 1.3.18-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/dist/esm/SessionRecorderIdGenerator.d.ts +2 -1
  2. package/dist/esm/SessionRecorderIdGenerator.d.ts.map +1 -1
  3. package/dist/esm/SessionRecorderIdGenerator.js +21 -15
  4. package/dist/esm/SessionRecorderIdGenerator.js.map +1 -1
  5. package/dist/esm/SessionRecorderTraceIdRatioBasedSampler.d.ts.map +1 -1
  6. package/dist/esm/SessionRecorderTraceIdRatioBasedSampler.js +8 -2
  7. package/dist/esm/SessionRecorderTraceIdRatioBasedSampler.js.map +1 -1
  8. package/dist/esm/constants/constants.base.d.ts +7 -1
  9. package/dist/esm/constants/constants.base.d.ts.map +1 -1
  10. package/dist/esm/constants/constants.base.js +13 -1
  11. package/dist/esm/constants/constants.base.js.map +1 -1
  12. package/dist/esm/exporters/SessionRecorderBrowserTraceExporter.d.ts +3 -1
  13. package/dist/esm/exporters/SessionRecorderBrowserTraceExporter.d.ts.map +1 -1
  14. package/dist/esm/exporters/SessionRecorderBrowserTraceExporter.js +22 -17
  15. package/dist/esm/exporters/SessionRecorderBrowserTraceExporter.js.map +1 -1
  16. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  17. package/dist/esm/type/crash-buffer.d.ts +59 -0
  18. package/dist/esm/type/crash-buffer.d.ts.map +1 -0
  19. package/dist/esm/type/crash-buffer.js +2 -0
  20. package/dist/esm/type/crash-buffer.js.map +1 -0
  21. package/dist/esm/type/index.d.ts +1 -0
  22. package/dist/esm/type/index.d.ts.map +1 -1
  23. package/dist/esm/type/index.js +1 -0
  24. package/dist/esm/type/index.js.map +1 -1
  25. package/dist/esm/type/session-type.enum.d.ts +3 -1
  26. package/dist/esm/type/session-type.enum.d.ts.map +1 -1
  27. package/dist/esm/type/session-type.enum.js +2 -0
  28. package/dist/esm/type/session-type.enum.js.map +1 -1
  29. package/dist/esm/type/session.d.ts +2 -2
  30. package/dist/esm/type/session.d.ts.map +1 -1
  31. package/dist/esm/type/session.js.map +1 -1
  32. package/dist/esnext/SessionRecorderIdGenerator.d.ts +2 -1
  33. package/dist/esnext/SessionRecorderIdGenerator.d.ts.map +1 -1
  34. package/dist/esnext/SessionRecorderIdGenerator.js +20 -15
  35. package/dist/esnext/SessionRecorderIdGenerator.js.map +1 -1
  36. package/dist/esnext/SessionRecorderTraceIdRatioBasedSampler.d.ts.map +1 -1
  37. package/dist/esnext/SessionRecorderTraceIdRatioBasedSampler.js +8 -2
  38. package/dist/esnext/SessionRecorderTraceIdRatioBasedSampler.js.map +1 -1
  39. package/dist/esnext/constants/constants.base.d.ts +7 -1
  40. package/dist/esnext/constants/constants.base.d.ts.map +1 -1
  41. package/dist/esnext/constants/constants.base.js +12 -1
  42. package/dist/esnext/constants/constants.base.js.map +1 -1
  43. package/dist/esnext/exporters/SessionRecorderBrowserTraceExporter.d.ts +3 -1
  44. package/dist/esnext/exporters/SessionRecorderBrowserTraceExporter.d.ts.map +1 -1
  45. package/dist/esnext/exporters/SessionRecorderBrowserTraceExporter.js +23 -19
  46. package/dist/esnext/exporters/SessionRecorderBrowserTraceExporter.js.map +1 -1
  47. package/dist/esnext/tsconfig.esnext.tsbuildinfo +1 -1
  48. package/dist/esnext/type/crash-buffer.d.ts +59 -0
  49. package/dist/esnext/type/crash-buffer.d.ts.map +1 -0
  50. package/dist/esnext/type/crash-buffer.js +2 -0
  51. package/dist/esnext/type/crash-buffer.js.map +1 -0
  52. package/dist/esnext/type/index.d.ts +1 -0
  53. package/dist/esnext/type/index.d.ts.map +1 -1
  54. package/dist/esnext/type/index.js +1 -0
  55. package/dist/esnext/type/index.js.map +1 -1
  56. package/dist/esnext/type/session-type.enum.d.ts +3 -1
  57. package/dist/esnext/type/session-type.enum.d.ts.map +1 -1
  58. package/dist/esnext/type/session-type.enum.js +2 -0
  59. package/dist/esnext/type/session-type.enum.js.map +1 -1
  60. package/dist/esnext/type/session.d.ts +2 -2
  61. package/dist/esnext/type/session.d.ts.map +1 -1
  62. package/dist/esnext/type/session.js.map +1 -1
  63. package/dist/src/SessionRecorderIdGenerator.d.ts +2 -1
  64. package/dist/src/SessionRecorderIdGenerator.d.ts.map +1 -1
  65. package/dist/src/SessionRecorderIdGenerator.js +20 -15
  66. package/dist/src/SessionRecorderIdGenerator.js.map +1 -1
  67. package/dist/src/SessionRecorderTraceIdRatioBasedSampler.d.ts.map +1 -1
  68. package/dist/src/SessionRecorderTraceIdRatioBasedSampler.js +4 -1
  69. package/dist/src/SessionRecorderTraceIdRatioBasedSampler.js.map +1 -1
  70. package/dist/src/constants/constants.base.d.ts +7 -1
  71. package/dist/src/constants/constants.base.d.ts.map +1 -1
  72. package/dist/src/constants/constants.base.js +13 -2
  73. package/dist/src/constants/constants.base.js.map +1 -1
  74. package/dist/src/exporters/SessionRecorderBrowserTraceExporter.d.ts +3 -1
  75. package/dist/src/exporters/SessionRecorderBrowserTraceExporter.d.ts.map +1 -1
  76. package/dist/src/exporters/SessionRecorderBrowserTraceExporter.js +22 -18
  77. package/dist/src/exporters/SessionRecorderBrowserTraceExporter.js.map +1 -1
  78. package/dist/src/type/crash-buffer.d.ts +59 -0
  79. package/dist/src/type/crash-buffer.d.ts.map +1 -0
  80. package/dist/src/type/crash-buffer.js +3 -0
  81. package/dist/src/type/crash-buffer.js.map +1 -0
  82. package/dist/src/type/index.d.ts +1 -0
  83. package/dist/src/type/index.d.ts.map +1 -1
  84. package/dist/src/type/index.js +1 -0
  85. package/dist/src/type/index.js.map +1 -1
  86. package/dist/src/type/session-type.enum.d.ts +3 -1
  87. package/dist/src/type/session-type.enum.d.ts.map +1 -1
  88. package/dist/src/type/session-type.enum.js +2 -0
  89. package/dist/src/type/session-type.enum.js.map +1 -1
  90. package/dist/src/type/session.d.ts +2 -2
  91. package/dist/src/type/session.d.ts.map +1 -1
  92. package/dist/src/type/session.js.map +1 -1
  93. package/package.json +1 -1
  94. package/src/SessionRecorderIdGenerator.ts +26 -19
  95. package/src/SessionRecorderTraceIdRatioBasedSampler.ts +4 -0
  96. package/src/constants/constants.base.ts +18 -1
  97. package/src/exporters/SessionRecorderBrowserTraceExporter.ts +31 -25
  98. package/src/type/crash-buffer.ts +73 -0
  99. package/src/type/index.ts +2 -1
  100. package/src/type/session-type.enum.ts +3 -0
  101. package/src/type/session.ts +2 -2
@@ -0,0 +1,59 @@
1
+ export type CrashBufferAttrs = {
2
+ sessionAttributes?: Record<string, any>;
3
+ resourceAttributes?: Record<string, any>;
4
+ userAttributes?: any;
5
+ };
6
+ export type CrashBufferRrwebEventPayload = {
7
+ ts: number;
8
+ isFullSnapshot?: boolean;
9
+ event: any;
10
+ };
11
+ export type CrashBufferOtelSpanPayload = {
12
+ ts: number;
13
+ span: any;
14
+ };
15
+ /**
16
+ * Batch append payload for OTEL spans.
17
+ * This is intentionally the same per-span shape as `CrashBufferOtelSpanPayload`,
18
+ * just provided as an array to allow implementations to persist efficiently.
19
+ */
20
+ export type CrashBufferOtelSpanBatchPayload = CrashBufferOtelSpanPayload[];
21
+ export type CrashBufferErrorSpanAppendedEvent = CrashBufferOtelSpanPayload;
22
+ export type CrashBufferEventName = 'error-span-appended';
23
+ export type CrashBufferEventMap = {
24
+ 'error-span-appended': CrashBufferErrorSpanAppendedEvent;
25
+ };
26
+ export type CrashBufferSnapshot = {
27
+ rrwebEvents: CrashBufferRrwebEventPayload[];
28
+ otelSpans: CrashBufferOtelSpanPayload[];
29
+ attrs: CrashBufferAttrs | null;
30
+ windowMs: number;
31
+ fromTs: number;
32
+ toTs: number;
33
+ };
34
+ /**
35
+ * Shared CrashBuffer contract used across browser + react-native implementations.
36
+ *
37
+ * Notes:
38
+ * - `windowMs` is optional because browser implementations usually bake the window into the instance,
39
+ * while React Native typically passes it per call.
40
+ * - `pruneOlderThan` is optional because browser implementations can handle pruning internally.
41
+ */
42
+ export interface CrashBuffer {
43
+ setAttrs(attrs: CrashBufferAttrs): Promise<void>;
44
+ appendEvent(payload: CrashBufferRrwebEventPayload, windowMs?: number): Promise<void>;
45
+ appendSpans(payload: CrashBufferOtelSpanBatchPayload, windowMs?: number): Promise<void>;
46
+ snapshot(windowMs?: number, now?: number): Promise<CrashBufferSnapshot>;
47
+ clear(): Promise<void>;
48
+ pruneOlderThan?(cutoffTs: number): Promise<void>;
49
+ on?(event: CrashBufferEventName, listener: (payload: CrashBufferEventMap[CrashBufferEventName]) => void): () => void;
50
+ off?(event: CrashBufferEventName, listener: (payload: CrashBufferEventMap[CrashBufferEventName]) => void): void;
51
+ }
52
+ /**
53
+ * Optional lifecycle controls supported by some CrashBuffer implementations (e.g. browser tabs).
54
+ */
55
+ export interface CrashBufferLifecycle extends CrashBuffer {
56
+ setActive(active: boolean): void;
57
+ needsFullSnapshot(): boolean;
58
+ }
59
+ //# sourceMappingURL=crash-buffer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crash-buffer.d.ts","sourceRoot":"","sources":["../../../src/type/crash-buffer.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GAAG;IAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACvC,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACxC,cAAc,CAAC,EAAE,GAAG,CAAA;CACrB,CAAA;AAED,MAAM,MAAM,4BAA4B,GAAG;IACzC,EAAE,EAAE,MAAM,CAAA;IACV,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,KAAK,EAAE,GAAG,CAAA;CACX,CAAA;AAED,MAAM,MAAM,0BAA0B,GAAG;IACvC,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,GAAG,CAAA;CACV,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,+BAA+B,GAAG,0BAA0B,EAAE,CAAA;AAE1E,MAAM,MAAM,iCAAiC,GAAG,0BAA0B,CAAA;AAE1E,MAAM,MAAM,oBAAoB,GAAG,qBAAqB,CAAA;AAExD,MAAM,MAAM,mBAAmB,GAAG;IAChC,qBAAqB,EAAE,iCAAiC,CAAA;CACzD,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,WAAW,EAAE,4BAA4B,EAAE,CAAA;IAC3C,SAAS,EAAE,0BAA0B,EAAE,CAAA;IACvC,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAAA;IAC9B,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAChD,WAAW,CAAC,OAAO,EAAE,4BAA4B,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACpF,WAAW,CAAC,OAAO,EAAE,+BAA+B,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACvF,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAA;IACvE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACtB,cAAc,CAAC,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAChD,EAAE,CAAC,CACD,KAAK,EAAE,oBAAoB,EAC3B,QAAQ,EAAE,CAAC,OAAO,EAAE,mBAAmB,CAAC,oBAAoB,CAAC,KAAK,IAAI,GACrE,MAAM,IAAI,CAAA;IACb,GAAG,CAAC,CACF,KAAK,EAAE,oBAAoB,EAC3B,QAAQ,EAAE,CAAC,OAAO,EAAE,mBAAmB,CAAC,oBAAoB,CAAC,KAAK,IAAI,GACrE,IAAI,CAAA;CACR;AAED;;GAEG;AACH,MAAM,WAAW,oBAAqB,SAAQ,WAAW;IACvD,SAAS,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAAA;IAChC,iBAAiB,IAAI,OAAO,CAAA;CAC7B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=crash-buffer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crash-buffer.js","sourceRoot":"","sources":["../../../src/type/crash-buffer.ts"],"names":[],"mappings":"","sourcesContent":["export type CrashBufferAttrs = {\n sessionAttributes?: Record<string, any>\n resourceAttributes?: Record<string, any>\n userAttributes?: any\n}\n\nexport type CrashBufferRrwebEventPayload = {\n ts: number\n isFullSnapshot?: boolean\n event: any\n}\n\nexport type CrashBufferOtelSpanPayload = {\n ts: number\n span: any\n}\n\n/**\n * Batch append payload for OTEL spans.\n * This is intentionally the same per-span shape as `CrashBufferOtelSpanPayload`,\n * just provided as an array to allow implementations to persist efficiently.\n */\nexport type CrashBufferOtelSpanBatchPayload = CrashBufferOtelSpanPayload[]\n\nexport type CrashBufferErrorSpanAppendedEvent = CrashBufferOtelSpanPayload\n\nexport type CrashBufferEventName = 'error-span-appended'\n\nexport type CrashBufferEventMap = {\n 'error-span-appended': CrashBufferErrorSpanAppendedEvent\n}\n\nexport type CrashBufferSnapshot = {\n rrwebEvents: CrashBufferRrwebEventPayload[]\n otelSpans: CrashBufferOtelSpanPayload[]\n attrs: CrashBufferAttrs | null\n windowMs: number\n fromTs: number\n toTs: number\n}\n\n/**\n * Shared CrashBuffer contract used across browser + react-native implementations.\n *\n * Notes:\n * - `windowMs` is optional because browser implementations usually bake the window into the instance,\n * while React Native typically passes it per call.\n * - `pruneOlderThan` is optional because browser implementations can handle pruning internally.\n */\nexport interface CrashBuffer {\n setAttrs(attrs: CrashBufferAttrs): Promise<void>\n appendEvent(payload: CrashBufferRrwebEventPayload, windowMs?: number): Promise<void>\n appendSpans(payload: CrashBufferOtelSpanBatchPayload, windowMs?: number): Promise<void>\n snapshot(windowMs?: number, now?: number): Promise<CrashBufferSnapshot>\n clear(): Promise<void>\n pruneOlderThan?(cutoffTs: number): Promise<void>\n on?(\n event: CrashBufferEventName,\n listener: (payload: CrashBufferEventMap[CrashBufferEventName]) => void\n ): () => void\n off?(\n event: CrashBufferEventName,\n listener: (payload: CrashBufferEventMap[CrashBufferEventName]) => void\n ): void\n}\n\n/**\n * Optional lifecycle controls supported by some CrashBuffer implementations (e.g. browser tabs).\n */\nexport interface CrashBufferLifecycle extends CrashBuffer {\n setActive(active: boolean): void\n needsFullSnapshot(): boolean\n}\n"]}
@@ -1,4 +1,5 @@
1
1
  export * from './session-type.enum';
2
2
  export * from './user-type.enum';
3
3
  export * from './session';
4
+ export * from './crash-buffer';
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/type/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAA;AACnC,cAAc,kBAAkB,CAAA;AAChC,cAAc,WAAW,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/type/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAA;AACnC,cAAc,kBAAkB,CAAA;AAChC,cAAc,WAAW,CAAA;AACzB,cAAc,gBAAgB,CAAA"}
@@ -1,4 +1,5 @@
1
1
  export * from './session-type.enum';
2
2
  export * from './user-type.enum';
3
3
  export * from './session';
4
+ export * from './crash-buffer';
4
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/type/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAA;AACnC,cAAc,kBAAkB,CAAA;AAChC,cAAc,WAAW,CAAA","sourcesContent":["export * from './session-type.enum'\nexport * from './user-type.enum'\nexport * from './session'"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/type/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAA;AACnC,cAAc,kBAAkB,CAAA;AAChC,cAAc,WAAW,CAAA;AACzB,cAAc,gBAAgB,CAAA","sourcesContent":["export * from './session-type.enum'\nexport * from './user-type.enum'\nexport * from './session'\nexport * from './crash-buffer'\n"]}
@@ -4,6 +4,8 @@ export declare enum SessionType {
4
4
  * @deprecated Use MANUAL instead
5
5
  */
6
6
  PLAIN = "MANUAL",
7
- MANUAL = "MANUAL"
7
+ MANUAL = "MANUAL",
8
+ CONTINUOUS_SESSION_CACHE = "CONTINUOUS_SESSION_CACHE",
9
+ SESSION_CACHE = "SESSION_CACHE"
8
10
  }
9
11
  //# sourceMappingURL=session-type.enum.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"session-type.enum.d.ts","sourceRoot":"","sources":["../../../src/type/session-type.enum.ts"],"names":[],"mappings":"AAAA,oBAAY,WAAW;IACrB,UAAU,eAAe;IACzB;;OAEG;IACH,KAAK,WAAW;IAChB,MAAM,WAAW;CAClB"}
1
+ {"version":3,"file":"session-type.enum.d.ts","sourceRoot":"","sources":["../../../src/type/session-type.enum.ts"],"names":[],"mappings":"AAAA,oBAAY,WAAW;IACrB,UAAU,eAAe;IACzB;;OAEG;IACH,KAAK,WAAW;IAChB,MAAM,WAAW;IAEjB,wBAAwB,6BAA6B;IACrD,aAAa,kBAAkB;CAChC"}
@@ -6,5 +6,7 @@ export var SessionType;
6
6
  */
7
7
  SessionType["PLAIN"] = "MANUAL";
8
8
  SessionType["MANUAL"] = "MANUAL";
9
+ SessionType["CONTINUOUS_SESSION_CACHE"] = "CONTINUOUS_SESSION_CACHE";
10
+ SessionType["SESSION_CACHE"] = "SESSION_CACHE";
9
11
  })(SessionType || (SessionType = {}));
10
12
  //# sourceMappingURL=session-type.enum.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"session-type.enum.js","sourceRoot":"","sources":["../../../src/type/session-type.enum.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,WAOX;AAPD,WAAY,WAAW;IACrB,wCAAyB,CAAA;IACzB;;OAEG;IACH,+BAAgB,CAAA;IAChB,gCAAiB,CAAA;AACnB,CAAC,EAPW,WAAW,KAAX,WAAW,QAOtB","sourcesContent":["export enum SessionType {\n CONTINUOUS = 'CONTINUOUS',\n /**\n * @deprecated Use MANUAL instead\n */\n PLAIN = 'MANUAL',\n MANUAL = 'MANUAL',\n}\n"]}
1
+ {"version":3,"file":"session-type.enum.js","sourceRoot":"","sources":["../../../src/type/session-type.enum.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,WAUX;AAVD,WAAY,WAAW;IACrB,wCAAyB,CAAA;IACzB;;OAEG;IACH,+BAAgB,CAAA;IAChB,gCAAiB,CAAA;IAEjB,oEAAqD,CAAA;IACrD,8CAA+B,CAAA;AACjC,CAAC,EAVW,WAAW,KAAX,WAAW,QAUtB","sourcesContent":["export enum SessionType {\n CONTINUOUS = 'CONTINUOUS',\n /**\n * @deprecated Use MANUAL instead\n */\n PLAIN = 'MANUAL',\n MANUAL = 'MANUAL',\n\n CONTINUOUS_SESSION_CACHE = 'CONTINUOUS_SESSION_CACHE',\n SESSION_CACHE = 'SESSION_CACHE',\n}\n"]}
@@ -1,5 +1,5 @@
1
- import { SessionType } from "./session-type.enum";
2
- import { UserType } from "./user-type.enum";
1
+ import { SessionType } from './session-type.enum';
2
+ import { UserType } from './user-type.enum';
3
3
  export interface IResourceAttributes {
4
4
  browserInfo?: string;
5
5
  cookiesEnabled?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../src/type/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,MAAM,WAAW,mBAAmB;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,QAAQ,CAAA;IACd,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IACf,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,YAAY,EAAE,WAAW,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,IAAI,EAAE,GAAG,EAAE,CAAC;IAEZ,kBAAkB,CAAC,EAAE,mBAAmB,CAAC;IACzC,iBAAiB,CAAC,EAAE,kBAAkB,CAAC;IAEvC,cAAc,CAAC,EAAE,eAAe,CAAA;IAEhC,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,EAAE;QACP,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,EAAE,MAAM,CAAC;QACZ,QAAQ,EAAE,oBAAoB,CAAC;QAC/B,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,EAAE,CAAC;IACJ,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAID,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAGD,oBAAY,oBAAoB;IAC9B,WAAW,gBAAgB;IAC3B,SAAS,cAAc;IACvB,YAAY,iBAAiB;CAC9B"}
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../src/type/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAE3C,MAAM,WAAW,mBAAmB;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,QAAQ,CAAA;IACd,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IACf,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,YAAY,EAAE,WAAW,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,IAAI,EAAE,GAAG,EAAE,CAAC;IAEZ,kBAAkB,CAAC,EAAE,mBAAmB,CAAC;IACzC,iBAAiB,CAAC,EAAE,kBAAkB,CAAC;IAEvC,cAAc,CAAC,EAAE,eAAe,CAAA;IAEhC,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,EAAE;QACP,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,EAAE,MAAM,CAAC;QACZ,QAAQ,EAAE,oBAAoB,CAAC;QAC/B,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,EAAE,CAAC;IACJ,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAID,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAGD,oBAAY,oBAAoB;IAC9B,WAAW,gBAAgB;IAC3B,SAAS,cAAc;IACvB,YAAY,iBAAiB;CAC9B"}
@@ -1 +1 @@
1
- {"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/type/session.ts"],"names":[],"mappings":"AA+EA,MAAM,CAAN,IAAY,oBAIX;AAJD,WAAY,oBAAoB;IAC9B,mDAA2B,CAAA;IAC3B,+CAAuB,CAAA;IACvB,qDAA6B,CAAA;AAC/B,CAAC,EAJW,oBAAoB,KAApB,oBAAoB,QAI/B","sourcesContent":["import { SessionType } from \"./session-type.enum\";\nimport { UserType } from \"./user-type.enum\";\n\nexport interface IResourceAttributes {\n browserInfo?: string;\n cookiesEnabled?: string;\n deviceInfo?: string;\n hardwareConcurrency?: number;\n osInfo?: string;\n pixelRatio?: number;\n screenSize?: string;\n packageVersion?: string;\n [key: string]: any;\n}\n\nexport interface ISessionAttributes {\n [key: string]: any;\n}\n\nexport interface IUserAttributes {\n type: UserType\n id?: string\n name?: string\n groupId?: string\n groupName?: string\n userEmail?: string\n userId?: string\n userName?: string\n accountId?: string\n accountName?: string\n orgId?: string\n orgName?: string\n tags?: string[]\n environment?: string\n}\n\nexport interface ISession {\n _id: string;\n shortId: string;\n workspace: string;\n project: string;\n continuousDebugSession?: string;\n creationType: SessionType;\n name: string;\n startedAt: string | Date;\n stoppedAt: string | Date;\n durationInSeconds?: number;\n createdAt: string | Date;\n updatedAt: string | Date;\n tags: any[];\n\n resourceAttributes?: IResourceAttributes;\n sessionAttributes?: ISessionAttributes;\n\n userAttributes?: IUserAttributes\n\n views: ISessionView[];\n starred: boolean;\n starredItems: string[];\n s3Files: {\n _id?: string;\n bucket: string;\n key: string;\n dataType: DebugSessionDataType;\n url?: string;\n }[];\n finishedS3Transfer?: boolean;\n tempApiKey?: string;\n}\n\n\n\nexport interface ISessionView {\n _id: string;\n name: string;\n components?: string[];\n}\n\n\nexport enum DebugSessionDataType {\n OTLP_TRACES = 'OTLP_TRACES',\n OTLP_LOGS = 'OTLP_LOGS',\n RRWEB_EVENTS = 'RRWEB_EVENTS',\n}\n"]}
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/type/session.ts"],"names":[],"mappings":"AA+EA,MAAM,CAAN,IAAY,oBAIX;AAJD,WAAY,oBAAoB;IAC9B,mDAA2B,CAAA;IAC3B,+CAAuB,CAAA;IACvB,qDAA6B,CAAA;AAC/B,CAAC,EAJW,oBAAoB,KAApB,oBAAoB,QAI/B","sourcesContent":["import { SessionType } from './session-type.enum'\nimport { UserType } from './user-type.enum'\n\nexport interface IResourceAttributes {\n browserInfo?: string;\n cookiesEnabled?: string;\n deviceInfo?: string;\n hardwareConcurrency?: number;\n osInfo?: string;\n pixelRatio?: number;\n screenSize?: string;\n packageVersion?: string;\n [key: string]: any;\n}\n\nexport interface ISessionAttributes {\n [key: string]: any;\n}\n\nexport interface IUserAttributes {\n type: UserType\n id?: string\n name?: string\n groupId?: string\n groupName?: string\n userEmail?: string\n userId?: string\n userName?: string\n accountId?: string\n accountName?: string\n orgId?: string\n orgName?: string\n tags?: string[]\n environment?: string\n}\n\nexport interface ISession {\n _id: string;\n shortId: string;\n workspace: string;\n project: string;\n continuousDebugSession?: string;\n creationType: SessionType;\n name: string;\n startedAt: string | Date;\n stoppedAt: string | Date;\n durationInSeconds?: number;\n createdAt: string | Date;\n updatedAt: string | Date;\n tags: any[];\n\n resourceAttributes?: IResourceAttributes;\n sessionAttributes?: ISessionAttributes;\n\n userAttributes?: IUserAttributes\n\n views: ISessionView[];\n starred: boolean;\n starredItems: string[];\n s3Files: {\n _id?: string;\n bucket: string;\n key: string;\n dataType: DebugSessionDataType;\n url?: string;\n }[];\n finishedS3Transfer?: boolean;\n tempApiKey?: string;\n}\n\n\n\nexport interface ISessionView {\n _id: string;\n name: string;\n components?: string[];\n}\n\n\nexport enum DebugSessionDataType {\n OTLP_TRACES = 'OTLP_TRACES',\n OTLP_LOGS = 'OTLP_LOGS',\n RRWEB_EVENTS = 'RRWEB_EVENTS',\n}\n"]}
@@ -3,11 +3,12 @@ import { SessionType } from './type';
3
3
  export declare class SessionRecorderIdGenerator implements IdGenerator {
4
4
  sessionShortId: string;
5
5
  sessionType: SessionType;
6
+ clientId: string;
6
7
  private generateLongId;
7
8
  private generateShortId;
8
9
  constructor();
9
10
  generateTraceId(): string;
10
11
  generateSpanId(): string;
11
- setSessionId(sessionShortId: string, sessionType?: SessionType): void;
12
+ setSessionId(sessionShortId: string, sessionType?: SessionType, clientId?: string): void;
12
13
  }
13
14
  //# sourceMappingURL=SessionRecorderIdGenerator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SessionRecorderIdGenerator.d.ts","sourceRoot":"","sources":["../../src/SessionRecorderIdGenerator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAA;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AAOpC,qBAAa,0BAA2B,YAAW,WAAW;IAC5D,cAAc,EAAE,MAAM,CAAA;IACtB,WAAW,EAAE,WAAW,CAAA;IACxB,OAAO,CAAC,cAAc,CAAc;IACpC,OAAO,CAAC,eAAe,CAAc;;IASrC,eAAe,IAAI,MAAM;IAuBzB,cAAc,IAAI,MAAM;IAIxB,YAAY,CACV,cAAc,EAAE,MAAM,EACtB,WAAW,GAAE,WAAgC;CAKhD"}
1
+ {"version":3,"file":"SessionRecorderIdGenerator.d.ts","sourceRoot":"","sources":["../../src/SessionRecorderIdGenerator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAA;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AAMpC,qBAAa,0BAA2B,YAAW,WAAW;IAC5D,cAAc,EAAE,MAAM,CAAA;IACtB,WAAW,EAAE,WAAW,CAAA;IACxB,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,cAAc,CAAc;IACpC,OAAO,CAAC,eAAe,CAAc;;IAUrC,eAAe,IAAI,MAAM;IAczB,cAAc,IAAI,MAAM;IAIxB,YAAY,CACV,cAAc,EAAE,MAAM,EACtB,WAAW,GAAE,WAAgC,EAC7C,QAAQ,GAAE,MAAW;CAmBxB"}
@@ -1,36 +1,41 @@
1
1
  import { SessionType } from './type';
2
- import { MULTIPLAYER_TRACE_DEBUG_PREFIX, MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX, } from './constants/constants.base';
3
2
  import { getIdGenerator } from './sdk';
3
+ import { MULTIPLAYER_TRACE_PREFIX_MAP, } from './constants/constants.base';
4
4
  export class SessionRecorderIdGenerator {
5
5
  constructor() {
6
6
  this.generateLongId = getIdGenerator(16);
7
7
  this.generateShortId = getIdGenerator(8);
8
8
  this.sessionShortId = '';
9
+ this.clientId = '';
9
10
  this.sessionType = SessionType.MANUAL;
10
11
  }
11
12
  generateTraceId() {
12
13
  const traceId = this.generateLongId();
13
- if (this.sessionShortId) {
14
- let sessionTypePrefix = '';
15
- switch (this.sessionType) {
16
- case SessionType.CONTINUOUS:
17
- sessionTypePrefix = MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX;
18
- break;
19
- default:
20
- sessionTypePrefix = MULTIPLAYER_TRACE_DEBUG_PREFIX;
21
- }
22
- const prefix = `${sessionTypePrefix}${this.sessionShortId}`;
23
- const sessionTraceId = `${prefix}${traceId.substring(prefix.length, traceId.length)}`;
24
- return sessionTraceId;
14
+ if (!this.sessionShortId && !this.sessionType) {
15
+ return traceId;
25
16
  }
26
- return traceId;
17
+ const sessionTypePrefix = MULTIPLAYER_TRACE_PREFIX_MAP[this.sessionType];
18
+ const prefix = `${sessionTypePrefix}${[SessionType.CONTINUOUS_SESSION_CACHE, SessionType.SESSION_CACHE].includes(this.sessionType) ? this.clientId : ''}${this.sessionShortId}`;
19
+ const sessionTraceId = `${prefix}${traceId.substring(prefix.length, traceId.length)}`;
20
+ return sessionTraceId;
27
21
  }
28
22
  generateSpanId() {
29
23
  return this.generateShortId();
30
24
  }
31
- setSessionId(sessionShortId, sessionType = SessionType.MANUAL) {
25
+ setSessionId(sessionShortId, sessionType = SessionType.MANUAL, clientId = '') {
26
+ if (!clientId &&
27
+ [
28
+ SessionType.SESSION_CACHE,
29
+ SessionType.CONTINUOUS_SESSION_CACHE,
30
+ ].includes(sessionType)) {
31
+ throw new Error(`Client ID is required for ${[
32
+ SessionType.SESSION_CACHE,
33
+ SessionType.CONTINUOUS_SESSION_CACHE,
34
+ ].join(', ')} session types`);
35
+ }
32
36
  this.sessionShortId = sessionShortId;
33
37
  this.sessionType = sessionType;
38
+ this.clientId = clientId;
34
39
  }
35
40
  }
36
41
  //# sourceMappingURL=SessionRecorderIdGenerator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SessionRecorderIdGenerator.js","sourceRoot":"","sources":["../../src/SessionRecorderIdGenerator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AACpC,OAAO,EACL,8BAA8B,EAC9B,yCAAyC,GAC1C,MAAM,4BAA4B,CAAA;AACnC,OAAO,EAAE,cAAc,EAAE,MAAM,OAAO,CAAA;AAEtC,MAAM,OAAO,0BAA0B;IAMrC;QACE,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC,EAAE,CAAC,CAAA;QACxC,IAAI,CAAC,eAAe,GAAG,cAAc,CAAC,CAAC,CAAC,CAAA;QACxC,IAAI,CAAC,cAAc,GAAG,EAAE,CAAA;QACxB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC,MAAM,CAAA;IACvC,CAAC;IAED,eAAe;QACb,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE,CAAA;QAErC,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,IAAI,iBAAiB,GAAW,EAAE,CAAA;YAClC,QAAQ,IAAI,CAAC,WAAW,EAAE,CAAC;gBACzB,KAAK,WAAW,CAAC,UAAU;oBACzB,iBAAiB,GAAG,yCAAyC,CAAA;oBAC7D,MAAK;gBACP;oBACE,iBAAiB,GAAG,8BAA8B,CAAA;YACtD,CAAC;YAED,MAAM,MAAM,GAAG,GAAG,iBAAiB,GAAG,IAAI,CAAC,cAAc,EAAE,CAAA;YAE3D,MAAM,cAAc,GAAG,GAAG,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,CAAA;YAErF,OAAO,cAAc,CAAA;QACvB,CAAC;QAED,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,eAAe,EAAE,CAAA;IAC/B,CAAC;IAED,YAAY,CACV,cAAsB,EACtB,cAA2B,WAAW,CAAC,MAAM;QAE7C,IAAI,CAAC,cAAc,GAAG,cAAc,CAAA;QACpC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAA;IAChC,CAAC;CACF","sourcesContent":["import { IdGenerator } from '@opentelemetry/sdk-trace-base'\nimport { SessionType } from './type'\nimport {\n MULTIPLAYER_TRACE_DEBUG_PREFIX,\n MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX,\n} from './constants/constants.base'\nimport { getIdGenerator } from './sdk'\n\nexport class SessionRecorderIdGenerator implements IdGenerator {\n sessionShortId: string\n sessionType: SessionType\n private generateLongId: () => string\n private generateShortId: () => string\n\n constructor() {\n this.generateLongId = getIdGenerator(16)\n this.generateShortId = getIdGenerator(8)\n this.sessionShortId = ''\n this.sessionType = SessionType.MANUAL\n }\n\n generateTraceId(): string {\n const traceId = this.generateLongId()\n\n if (this.sessionShortId) {\n let sessionTypePrefix: string = ''\n switch (this.sessionType) {\n case SessionType.CONTINUOUS:\n sessionTypePrefix = MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX\n break\n default:\n sessionTypePrefix = MULTIPLAYER_TRACE_DEBUG_PREFIX\n }\n\n const prefix = `${sessionTypePrefix}${this.sessionShortId}`\n\n const sessionTraceId = `${prefix}${traceId.substring(prefix.length, traceId.length)}`\n\n return sessionTraceId\n }\n\n return traceId\n }\n\n generateSpanId(): string {\n return this.generateShortId()\n }\n\n setSessionId(\n sessionShortId: string,\n sessionType: SessionType = SessionType.MANUAL,\n ) {\n this.sessionShortId = sessionShortId\n this.sessionType = sessionType\n }\n}\n"]}
1
+ {"version":3,"file":"SessionRecorderIdGenerator.js","sourceRoot":"","sources":["../../src/SessionRecorderIdGenerator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,OAAO,CAAA;AACtC,OAAO,EACL,4BAA4B,GAC7B,MAAM,4BAA4B,CAAA;AAEnC,MAAM,OAAO,0BAA0B;IAOrC;QACE,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC,EAAE,CAAC,CAAA;QACxC,IAAI,CAAC,eAAe,GAAG,cAAc,CAAC,CAAC,CAAC,CAAA;QACxC,IAAI,CAAC,cAAc,GAAG,EAAE,CAAA;QACxB,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAA;QAClB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC,MAAM,CAAA;IACvC,CAAC;IAED,eAAe;QACb,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE,CAAA;QAErC,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YAC9C,OAAO,OAAO,CAAA;QAChB,CAAC;QAED,MAAM,iBAAiB,GAAG,4BAA4B,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;QACxE,MAAM,MAAM,GAAG,GAAG,iBAAiB,GAAG,CAAC,WAAW,CAAC,wBAAwB,EAAE,WAAW,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE,CAAA;QAC/K,MAAM,cAAc,GAAG,GAAG,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,CAAA;QAErF,OAAO,cAAc,CAAA;IACvB,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,eAAe,EAAE,CAAA;IAC/B,CAAC;IAED,YAAY,CACV,cAAsB,EACtB,cAA2B,WAAW,CAAC,MAAM,EAC7C,WAAmB,EAAE;QAErB,IACE,CAAC,QAAQ;YACT;gBACE,WAAW,CAAC,aAAa;gBACzB,WAAW,CAAC,wBAAwB;aACrC,CAAC,QAAQ,CAAC,WAAW,CAAC,EACvB,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,6BAA6B;gBAC3C,WAAW,CAAC,aAAa;gBACzB,WAAW,CAAC,wBAAwB;aACrC,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;QAC/B,CAAC;QAED,IAAI,CAAC,cAAc,GAAG,cAAc,CAAA;QACpC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAA;QAC9B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;IAC1B,CAAC;CACF","sourcesContent":["import { IdGenerator } from '@opentelemetry/sdk-trace-base'\nimport { SessionType } from './type'\nimport { getIdGenerator } from './sdk'\nimport {\n MULTIPLAYER_TRACE_PREFIX_MAP,\n} from './constants/constants.base'\n\nexport class SessionRecorderIdGenerator implements IdGenerator {\n sessionShortId: string\n sessionType: SessionType\n clientId: string\n private generateLongId: () => string\n private generateShortId: () => string\n\n constructor() {\n this.generateLongId = getIdGenerator(16)\n this.generateShortId = getIdGenerator(8)\n this.sessionShortId = ''\n this.clientId = ''\n this.sessionType = SessionType.MANUAL\n }\n\n generateTraceId(): string {\n const traceId = this.generateLongId()\n\n if (!this.sessionShortId && !this.sessionType) {\n return traceId\n }\n\n const sessionTypePrefix = MULTIPLAYER_TRACE_PREFIX_MAP[this.sessionType]\n const prefix = `${sessionTypePrefix}${[SessionType.CONTINUOUS_SESSION_CACHE, SessionType.SESSION_CACHE].includes(this.sessionType) ? this.clientId : ''}${this.sessionShortId}`\n const sessionTraceId = `${prefix}${traceId.substring(prefix.length, traceId.length)}`\n\n return sessionTraceId\n }\n\n generateSpanId(): string {\n return this.generateShortId()\n }\n\n setSessionId(\n sessionShortId: string,\n sessionType: SessionType = SessionType.MANUAL,\n clientId: string = '',\n ) {\n if (\n !clientId &&\n [\n SessionType.SESSION_CACHE,\n SessionType.CONTINUOUS_SESSION_CACHE,\n ].includes(sessionType)\n ) {\n throw new Error(`Client ID is required for ${[\n SessionType.SESSION_CACHE,\n SessionType.CONTINUOUS_SESSION_CACHE,\n ].join(', ')} session types`)\n }\n\n this.sessionShortId = sessionShortId\n this.sessionType = sessionType\n this.clientId = clientId\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"SessionRecorderTraceIdRatioBasedSampler.d.ts","sourceRoot":"","sources":["../../src/SessionRecorderTraceIdRatioBasedSampler.ts"],"names":[],"mappings":"AACA,OAAO,EACL,OAAO,EAEP,cAAc,EACf,MAAM,+BAA+B,CAAA;AAMtC,qBAAa,uCAAwC,YAAW,OAAO;IAGzD,OAAO,CAAC,QAAQ,CAAC,MAAM;IAFnC,OAAO,CAAC,WAAW,CAAQ;gBAEE,MAAM,GAAE,MAAU;IAK/C,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,cAAc;IAsB/D,QAAQ,IAAI,MAAM;IAIlB,OAAO,CAAC,UAAU;IAKlB,OAAO,CAAC,WAAW;CASpB"}
1
+ {"version":3,"file":"SessionRecorderTraceIdRatioBasedSampler.d.ts","sourceRoot":"","sources":["../../src/SessionRecorderTraceIdRatioBasedSampler.ts"],"names":[],"mappings":"AACA,OAAO,EACL,OAAO,EAEP,cAAc,EACf,MAAM,+BAA+B,CAAA;AAQtC,qBAAa,uCAAwC,YAAW,OAAO;IAGzD,OAAO,CAAC,QAAQ,CAAC,MAAM;IAFnC,OAAO,CAAC,WAAW,CAAQ;gBAEE,MAAM,GAAE,MAAU;IAK/C,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,cAAc;IAwB/D,QAAQ,IAAI,MAAM;IAIlB,OAAO,CAAC,UAAU;IAKlB,OAAO,CAAC,WAAW;CASpB"}
@@ -1,6 +1,9 @@
1
1
  import { isValidTraceId } from '@opentelemetry/api';
2
2
  import { SamplingDecision, } from '@opentelemetry/sdk-trace-base';
3
- import { MULTIPLAYER_TRACE_DEBUG_PREFIX, MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX, } from './constants/constants.base';
3
+ import { MULTIPLAYER_TRACE_DEBUG_PREFIX, MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX,
4
+ // MULTIPLAYER_TRACE_SESSION_CACHE_PREFIX,
5
+ // MULTIPLAYER_TRACE_CONTINUOUS_SESSION_CACHE_PREFIX,
6
+ } from './constants/constants.base';
4
7
  export class SessionRecorderTraceIdRatioBasedSampler {
5
8
  constructor(_ratio = 0) {
6
9
  this._ratio = _ratio;
@@ -9,7 +12,10 @@ export class SessionRecorderTraceIdRatioBasedSampler {
9
12
  }
10
13
  shouldSample(context, traceId) {
11
14
  if (traceId.startsWith(MULTIPLAYER_TRACE_DEBUG_PREFIX)
12
- || traceId.startsWith(MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX)) {
15
+ || traceId.startsWith(MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX)
16
+ // || traceId.startsWith(MULTIPLAYER_TRACE_SESSION_CACHE_PREFIX)
17
+ // || traceId.startsWith(MULTIPLAYER_TRACE_CONTINUOUS_SESSION_CACHE_PREFIX)
18
+ ) {
13
19
  return {
14
20
  decision: SamplingDecision.RECORD_AND_SAMPLED,
15
21
  };
@@ -1 +1 @@
1
- {"version":3,"file":"SessionRecorderTraceIdRatioBasedSampler.js","sourceRoot":"","sources":["../../src/SessionRecorderTraceIdRatioBasedSampler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACnD,OAAO,EAEL,gBAAgB,GAEjB,MAAM,+BAA+B,CAAA;AACtC,OAAO,EACL,8BAA8B,EAC9B,yCAAyC,GAC1C,MAAM,4BAA4B,CAAA;AAEnC,MAAM,OAAO,uCAAuC;IAGlD,YAA6B,SAAiB,CAAC;QAAlB,WAAM,GAAN,MAAM,CAAY;QAC7C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;QACrC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,CAAA;IACzD,CAAC;IAED,YAAY,CAAC,OAAgB,EAAE,OAAe;QAC5C,IACE,OAAO,CAAC,UAAU,CAAC,8BAA8B,CAAC;eAC/C,OAAO,CAAC,UAAU,CAAC,yCAAyC,CAAC,EAChE,CAAC;YACD,OAAO;gBACL,QAAQ,EAAE,gBAAgB,CAAC,kBAAkB;aAC9C,CAAA;QACH,CAAC;QAED,IAAI,QAAQ,GAAqB,gBAAgB,CAAC,UAAU,CAAA;QAE5D,IACE,cAAc,CAAC,OAAO,CAAC;eACpB,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,WAAW,EAC/C,CAAC;YACD,QAAQ,GAAG,gBAAgB,CAAC,kBAAkB,CAAA;QAChD,CAAC;QAED,OAAO,EAAE,QAAQ,EAAE,CAAA;IACrB,CAAC;IAED,QAAQ;QACN,OAAO,2CAA2C,IAAI,CAAC,MAAM,GAAG,CAAA;IAClE,CAAC;IAEO,UAAU,CAAC,KAAa;QAC9B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,KAAK,CAAC;YAAE,OAAO,CAAC,CAAA;QACvD,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;IAChD,CAAC;IAEO,WAAW,CAAC,OAAe;QACjC,IAAI,YAAY,GAAG,CAAC,CAAA;QACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,CAAA;YACjB,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;YACtD,YAAY,GAAG,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,CAAA;QAC5C,CAAC;QACD,OAAO,YAAY,CAAA;IACrB,CAAC;CACF","sourcesContent":["import { isValidTraceId } from '@opentelemetry/api'\nimport {\n Sampler,\n SamplingDecision,\n SamplingResult,\n} from '@opentelemetry/sdk-trace-base'\nimport {\n MULTIPLAYER_TRACE_DEBUG_PREFIX,\n MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX,\n} from './constants/constants.base'\n\nexport class SessionRecorderTraceIdRatioBasedSampler implements Sampler {\n private _upperBound: number\n\n constructor(private readonly _ratio: number = 0) {\n this._ratio = this._normalize(_ratio)\n this._upperBound = Math.floor(this._ratio * 0xffffffff)\n }\n\n shouldSample(context: unknown, traceId: string): SamplingResult {\n if (\n traceId.startsWith(MULTIPLAYER_TRACE_DEBUG_PREFIX)\n || traceId.startsWith(MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX)\n ) {\n return {\n decision: SamplingDecision.RECORD_AND_SAMPLED,\n }\n }\n\n let decision: SamplingDecision = SamplingDecision.NOT_RECORD\n\n if (\n isValidTraceId(traceId)\n && this._accumulate(traceId) < this._upperBound\n ) {\n decision = SamplingDecision.RECORD_AND_SAMPLED\n }\n\n return { decision }\n }\n\n toString(): string {\n return `SessionRecorderTraceIdRatioBasedSampler{${this._ratio}}`\n }\n\n private _normalize(ratio: number): number {\n if (typeof ratio !== 'number' || isNaN(ratio)) return 0\n return ratio >= 1 ? 1 : ratio <= 0 ? 0 : ratio\n }\n\n private _accumulate(traceId: string): number {\n let accumulation = 0\n for (let i = 0; i < traceId.length / 8; i++) {\n const pos = i * 8\n const part = parseInt(traceId.slice(pos, pos + 8), 16)\n accumulation = (accumulation ^ part) >>> 0\n }\n return accumulation\n }\n}\n"]}
1
+ {"version":3,"file":"SessionRecorderTraceIdRatioBasedSampler.js","sourceRoot":"","sources":["../../src/SessionRecorderTraceIdRatioBasedSampler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACnD,OAAO,EAEL,gBAAgB,GAEjB,MAAM,+BAA+B,CAAA;AACtC,OAAO,EACL,8BAA8B,EAC9B,yCAAyC;AACzC,0CAA0C;AAC1C,qDAAqD;EACtD,MAAM,4BAA4B,CAAA;AAEnC,MAAM,OAAO,uCAAuC;IAGlD,YAA6B,SAAiB,CAAC;QAAlB,WAAM,GAAN,MAAM,CAAY;QAC7C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;QACrC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,CAAA;IACzD,CAAC;IAED,YAAY,CAAC,OAAgB,EAAE,OAAe;QAC5C,IACE,OAAO,CAAC,UAAU,CAAC,8BAA8B,CAAC;eAC/C,OAAO,CAAC,UAAU,CAAC,yCAAyC,CAAC;QAChE,gEAAgE;QAChE,2EAA2E;UAC3E,CAAC;YACD,OAAO;gBACL,QAAQ,EAAE,gBAAgB,CAAC,kBAAkB;aAC9C,CAAA;QACH,CAAC;QAED,IAAI,QAAQ,GAAqB,gBAAgB,CAAC,UAAU,CAAA;QAE5D,IACE,cAAc,CAAC,OAAO,CAAC;eACpB,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,WAAW,EAC/C,CAAC;YACD,QAAQ,GAAG,gBAAgB,CAAC,kBAAkB,CAAA;QAChD,CAAC;QAED,OAAO,EAAE,QAAQ,EAAE,CAAA;IACrB,CAAC;IAED,QAAQ;QACN,OAAO,2CAA2C,IAAI,CAAC,MAAM,GAAG,CAAA;IAClE,CAAC;IAEO,UAAU,CAAC,KAAa;QAC9B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,KAAK,CAAC;YAAE,OAAO,CAAC,CAAA;QACvD,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;IAChD,CAAC;IAEO,WAAW,CAAC,OAAe;QACjC,IAAI,YAAY,GAAG,CAAC,CAAA;QACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,CAAA;YACjB,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;YACtD,YAAY,GAAG,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,CAAA;QAC5C,CAAC;QACD,OAAO,YAAY,CAAA;IACrB,CAAC;CACF","sourcesContent":["import { isValidTraceId } from '@opentelemetry/api'\nimport {\n Sampler,\n SamplingDecision,\n SamplingResult,\n} from '@opentelemetry/sdk-trace-base'\nimport {\n MULTIPLAYER_TRACE_DEBUG_PREFIX,\n MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX,\n // MULTIPLAYER_TRACE_SESSION_CACHE_PREFIX,\n // MULTIPLAYER_TRACE_CONTINUOUS_SESSION_CACHE_PREFIX,\n} from './constants/constants.base'\n\nexport class SessionRecorderTraceIdRatioBasedSampler implements Sampler {\n private _upperBound: number\n\n constructor(private readonly _ratio: number = 0) {\n this._ratio = this._normalize(_ratio)\n this._upperBound = Math.floor(this._ratio * 0xffffffff)\n }\n\n shouldSample(context: unknown, traceId: string): SamplingResult {\n if (\n traceId.startsWith(MULTIPLAYER_TRACE_DEBUG_PREFIX)\n || traceId.startsWith(MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX)\n // || traceId.startsWith(MULTIPLAYER_TRACE_SESSION_CACHE_PREFIX)\n // || traceId.startsWith(MULTIPLAYER_TRACE_CONTINUOUS_SESSION_CACHE_PREFIX)\n ) {\n return {\n decision: SamplingDecision.RECORD_AND_SAMPLED,\n }\n }\n\n let decision: SamplingDecision = SamplingDecision.NOT_RECORD\n\n if (\n isValidTraceId(traceId)\n && this._accumulate(traceId) < this._upperBound\n ) {\n decision = SamplingDecision.RECORD_AND_SAMPLED\n }\n\n return { decision }\n }\n\n toString(): string {\n return `SessionRecorderTraceIdRatioBasedSampler{${this._ratio}}`\n }\n\n private _normalize(ratio: number): number {\n if (typeof ratio !== 'number' || isNaN(ratio)) return 0\n return ratio >= 1 ? 1 : ratio <= 0 ? 0 : ratio\n }\n\n private _accumulate(traceId: string): number {\n let accumulation = 0\n for (let i = 0; i < traceId.length / 8; i++) {\n const pos = i * 8\n const part = parseInt(traceId.slice(pos, pos + 8), 16)\n accumulation = (accumulation ^ part) >>> 0\n }\n return accumulation\n }\n}\n"]}
@@ -1,10 +1,15 @@
1
+ import { SessionType } from '../type';
1
2
  /**
2
3
  * @deprecated
3
4
  */
4
5
  export declare const MULTIPLAYER_TRACE_DOC_PREFIX = "d0cd0c";
5
6
  export declare const MULTIPLAYER_TRACE_DEBUG_PREFIX = "debdeb";
6
7
  export declare const MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX = "cdbcdb";
7
- export declare const MULTIPLAYER_TRACE_DEBUG_SESSION_SHORT_ID_LENGTH = 16;
8
+ export declare const MULTIPLAYER_TRACE_SESSION_CACHE_PREFIX = "cdbcac";
9
+ export declare const MULTIPLAYER_TRACE_CONTINUOUS_SESSION_CACHE_PREFIX = "debcdb";
10
+ export declare const MULTIPLAYER_TRACE_PREFIX_MAP: Record<SessionType, string>;
11
+ export declare const MULTIPLAYER_TRACE_DEBUG_SESSION_SHORT_ID_LENGTH = 8;
12
+ export declare const MULTIPLAYER_TRACE_CLIENT_ID_LENGTH = 8;
8
13
  /**
9
14
  * @deprecated Use MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_HTTP_URL instead
10
15
  */
@@ -28,6 +33,7 @@ export declare const ATTR_MULTIPLAYER_PLATFORM_NAME = "multiplayer.platform.name
28
33
  export declare const ATTR_MULTIPLAYER_CLIENT_ID = "multiplayer.client.id";
29
34
  export declare const ATTR_MULTIPLAYER_INTEGRATION_ID = "multiplayer.integration.id";
30
35
  export declare const ATTR_MULTIPLAYER_SESSION_ID = "multiplayer.session.id";
36
+ export declare const ATTR_MULTIPLAYER_SESSION_CLIENT_ID = "multiplayer.session.client.id";
31
37
  export declare const ATTR_MULTIPLAYER_HTTP_PROXY = "multiplayer.http.proxy";
32
38
  export declare const ATTR_MULTIPLAYER_HTTP_PROXY_TYPE = "multiplayer.http.proxy.type";
33
39
  export declare const ATTR_MULTIPLAYER_HTTP_REQUEST_BODY = "multiplayer.http.request.body";
@@ -1 +1 @@
1
- {"version":3,"file":"constants.base.d.ts","sourceRoot":"","sources":["../../../src/constants/constants.base.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,4BAA4B,WAAW,CAAA;AAEpD,eAAO,MAAM,8BAA8B,WAAW,CAAA;AAEtD,eAAO,MAAM,yCAAyC,WAAW,CAAA;AAEjE,eAAO,MAAM,+CAA+C,KAAK,CAAA;AAEjE;;GAEG;AACH,eAAO,MAAM,4CAA4C,0CAA0C,CAAA;AAEnG;;GAEG;AACH,eAAO,MAAM,0CAA0C,wCAAwC,CAAA;AAE/F,eAAO,MAAM,iDAAiD,2CAA2C,CAAA;AAEzG,eAAO,MAAM,+CAA+C,yCAAyC,CAAA;AAErG,eAAO,MAAM,iDAAiD,gDAAgD,CAAA;AAE9G,eAAO,MAAM,+CAA+C,8CAA8C,CAAA;AAE1G,eAAO,MAAM,wBAAwB,gCAAgC,CAAA;AAErE,eAAO,MAAM,4BAA4B,iBAAiB,CAAA;AAE1D,eAAO,MAAM,6BAA6B,6BAA6B,CAAA;AAEvE,eAAO,MAAM,2BAA2B,2BAA2B,CAAA;AAEnE,eAAO,MAAM,4BAA4B,4BAA4B,CAAA;AAErE,eAAO,MAAM,6CAA6C,kCAAkC,CAAA;AAE5F,eAAO,MAAM,oDAAoD,yCAAyC,CAAA;AAE1G,eAAO,MAAM,8BAA8B,8BAA8B,CAAA;AAEzE,eAAO,MAAM,0BAA0B,0BAA0B,CAAA;AAEjE,eAAO,MAAM,+BAA+B,+BAA+B,CAAA;AAE3E,eAAO,MAAM,2BAA2B,2BAA2B,CAAA;AAEnE,eAAO,MAAM,2BAA2B,2BAA2B,CAAA;AAEnE,eAAO,MAAM,gCAAgC,gCAAgC,CAAA;AAE7E,eAAO,MAAM,kCAAkC,kCAAkC,CAAA;AAEjF,eAAO,MAAM,mCAAmC,mCAAmC,CAAA;AAEnF,eAAO,MAAM,qCAAqC,qCAAqC,CAAA;AAEvF,eAAO,MAAM,sCAAsC,sCAAsC,CAAA;AAEzF,eAAO,MAAM,4CAA4C,4CAA4C,CAAA;AAErG,eAAO,MAAM,oCAAoC,oCAAoC,CAAA;AAErF,eAAO,MAAM,6CAA6C,6CAA6C,CAAA;AAEvG,eAAO,MAAM,qCAAqC,qCAAqC,CAAA;AAEvF,eAAO,MAAM,qCAAqC,yCAAyC,CAAA;AAE3F,eAAO,MAAM,8CAA8C,6CAA6C,CAAA;AAExG,eAAO,MAAM,sCAAsC,0CAA0C,CAAA;AAE7F,eAAO,MAAM,uCAAuC,uCAAuC,CAAA;AAE3F,eAAO,MAAM,gDAAgD,gDAAgD,CAAA;AAE7G,eAAO,MAAM,yCAAyC,yCAAyC,CAAA;AAE/F,eAAO,MAAM,kCAAkC,kCAAkC,CAAA;AAEjF,eAAO,MAAM,2BAA2B,2BAA2B,CAAA;AAEnE,eAAO,MAAM,qCAAqC,qCAAqC,CAAA;AAEvF,eAAO,MAAM,0BAA0B,0BAA0B,CAAA;AAEjE,eAAO,MAAM,gBAAgB,iBAAiB,CAAA"}
1
+ {"version":3,"file":"constants.base.d.ts","sourceRoot":"","sources":["../../../src/constants/constants.base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAErC;;GAEG;AACH,eAAO,MAAM,4BAA4B,WAAW,CAAA;AAEpD,eAAO,MAAM,8BAA8B,WAAW,CAAA;AAEtD,eAAO,MAAM,yCAAyC,WAAW,CAAA;AAEjE,eAAO,MAAM,sCAAsC,WAAW,CAAA;AAE9D,eAAO,MAAM,iDAAiD,WAAW,CAAA;AAEzE,eAAO,MAAM,4BAA4B,EAKpC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;AAEhC,eAAO,MAAM,+CAA+C,IAAI,CAAA;AAEhE,eAAO,MAAM,kCAAkC,IAAI,CAAA;AAEnD;;GAEG;AACH,eAAO,MAAM,4CAA4C,0CAA0C,CAAA;AAEnG;;GAEG;AACH,eAAO,MAAM,0CAA0C,wCAAwC,CAAA;AAE/F,eAAO,MAAM,iDAAiD,2CAA2C,CAAA;AAEzG,eAAO,MAAM,+CAA+C,yCAAyC,CAAA;AAErG,eAAO,MAAM,iDAAiD,gDAAgD,CAAA;AAE9G,eAAO,MAAM,+CAA+C,8CAA8C,CAAA;AAE1G,eAAO,MAAM,wBAAwB,gCAAgC,CAAA;AAErE,eAAO,MAAM,4BAA4B,iBAAiB,CAAA;AAE1D,eAAO,MAAM,6BAA6B,6BAA6B,CAAA;AAEvE,eAAO,MAAM,2BAA2B,2BAA2B,CAAA;AAEnE,eAAO,MAAM,4BAA4B,4BAA4B,CAAA;AAErE,eAAO,MAAM,6CAA6C,kCAAkC,CAAA;AAE5F,eAAO,MAAM,oDAAoD,yCAAyC,CAAA;AAE1G,eAAO,MAAM,8BAA8B,8BAA8B,CAAA;AAEzE,eAAO,MAAM,0BAA0B,0BAA0B,CAAA;AAEjE,eAAO,MAAM,+BAA+B,+BAA+B,CAAA;AAE3E,eAAO,MAAM,2BAA2B,2BAA2B,CAAA;AAEnE,eAAO,MAAM,kCAAkC,kCAAkC,CAAA;AAEjF,eAAO,MAAM,2BAA2B,2BAA2B,CAAA;AAEnE,eAAO,MAAM,gCAAgC,gCAAgC,CAAA;AAE7E,eAAO,MAAM,kCAAkC,kCAAkC,CAAA;AAEjF,eAAO,MAAM,mCAAmC,mCAAmC,CAAA;AAEnF,eAAO,MAAM,qCAAqC,qCAAqC,CAAA;AAEvF,eAAO,MAAM,sCAAsC,sCAAsC,CAAA;AAEzF,eAAO,MAAM,4CAA4C,4CAA4C,CAAA;AAErG,eAAO,MAAM,oCAAoC,oCAAoC,CAAA;AAErF,eAAO,MAAM,6CAA6C,6CAA6C,CAAA;AAEvG,eAAO,MAAM,qCAAqC,qCAAqC,CAAA;AAEvF,eAAO,MAAM,qCAAqC,yCAAyC,CAAA;AAE3F,eAAO,MAAM,8CAA8C,6CAA6C,CAAA;AAExG,eAAO,MAAM,sCAAsC,0CAA0C,CAAA;AAE7F,eAAO,MAAM,uCAAuC,uCAAuC,CAAA;AAE3F,eAAO,MAAM,gDAAgD,gDAAgD,CAAA;AAE7G,eAAO,MAAM,yCAAyC,yCAAyC,CAAA;AAE/F,eAAO,MAAM,kCAAkC,kCAAkC,CAAA;AAEjF,eAAO,MAAM,2BAA2B,2BAA2B,CAAA;AAEnE,eAAO,MAAM,qCAAqC,qCAAqC,CAAA;AAEvF,eAAO,MAAM,0BAA0B,0BAA0B,CAAA;AAEjE,eAAO,MAAM,gBAAgB,iBAAiB,CAAA"}
@@ -1,10 +1,20 @@
1
+ import { SessionType } from '../type';
1
2
  /**
2
3
  * @deprecated
3
4
  */
4
5
  export const MULTIPLAYER_TRACE_DOC_PREFIX = 'd0cd0c';
5
6
  export const MULTIPLAYER_TRACE_DEBUG_PREFIX = 'debdeb';
6
7
  export const MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX = 'cdbcdb';
7
- export const MULTIPLAYER_TRACE_DEBUG_SESSION_SHORT_ID_LENGTH = 16;
8
+ export const MULTIPLAYER_TRACE_SESSION_CACHE_PREFIX = 'cdbcac';
9
+ export const MULTIPLAYER_TRACE_CONTINUOUS_SESSION_CACHE_PREFIX = 'debcdb';
10
+ export const MULTIPLAYER_TRACE_PREFIX_MAP = {
11
+ [SessionType.CONTINUOUS]: MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX,
12
+ [SessionType.SESSION_CACHE]: MULTIPLAYER_TRACE_SESSION_CACHE_PREFIX,
13
+ [SessionType.CONTINUOUS_SESSION_CACHE]: MULTIPLAYER_TRACE_CONTINUOUS_SESSION_CACHE_PREFIX,
14
+ [SessionType.MANUAL]: MULTIPLAYER_TRACE_DEBUG_PREFIX,
15
+ };
16
+ export const MULTIPLAYER_TRACE_DEBUG_SESSION_SHORT_ID_LENGTH = 8;
17
+ export const MULTIPLAYER_TRACE_CLIENT_ID_LENGTH = 8;
8
18
  /**
9
19
  * @deprecated Use MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_HTTP_URL instead
10
20
  */
@@ -28,6 +38,7 @@ export const ATTR_MULTIPLAYER_PLATFORM_NAME = 'multiplayer.platform.name';
28
38
  export const ATTR_MULTIPLAYER_CLIENT_ID = 'multiplayer.client.id';
29
39
  export const ATTR_MULTIPLAYER_INTEGRATION_ID = 'multiplayer.integration.id';
30
40
  export const ATTR_MULTIPLAYER_SESSION_ID = 'multiplayer.session.id';
41
+ export const ATTR_MULTIPLAYER_SESSION_CLIENT_ID = 'multiplayer.session.client.id';
31
42
  export const ATTR_MULTIPLAYER_HTTP_PROXY = 'multiplayer.http.proxy';
32
43
  export const ATTR_MULTIPLAYER_HTTP_PROXY_TYPE = 'multiplayer.http.proxy.type';
33
44
  export const ATTR_MULTIPLAYER_HTTP_REQUEST_BODY = 'multiplayer.http.request.body';
@@ -1 +1 @@
1
- {"version":3,"file":"constants.base.js","sourceRoot":"","sources":["../../../src/constants/constants.base.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,QAAQ,CAAA;AAEpD,MAAM,CAAC,MAAM,8BAA8B,GAAG,QAAQ,CAAA;AAEtD,MAAM,CAAC,MAAM,yCAAyC,GAAG,QAAQ,CAAA;AAEjE,MAAM,CAAC,MAAM,+CAA+C,GAAG,EAAE,CAAA;AAEjE;;GAEG;AACH,MAAM,CAAC,MAAM,4CAA4C,GAAG,uCAAuC,CAAA;AAEnG;;GAEG;AACH,MAAM,CAAC,MAAM,0CAA0C,GAAG,qCAAqC,CAAA;AAE/F,MAAM,CAAC,MAAM,iDAAiD,GAAG,wCAAwC,CAAA;AAEzG,MAAM,CAAC,MAAM,+CAA+C,GAAG,sCAAsC,CAAA;AAErG,MAAM,CAAC,MAAM,iDAAiD,GAAG,6CAA6C,CAAA;AAE9G,MAAM,CAAC,MAAM,+CAA+C,GAAG,2CAA2C,CAAA;AAE1G,MAAM,CAAC,MAAM,wBAAwB,GAAG,6BAA6B,CAAA;AAErE,MAAM,CAAC,MAAM,4BAA4B,GAAG,cAAc,CAAA;AAE1D,MAAM,CAAC,MAAM,6BAA6B,GAAG,0BAA0B,CAAA;AAEvE,MAAM,CAAC,MAAM,2BAA2B,GAAG,wBAAwB,CAAA;AAEnE,MAAM,CAAC,MAAM,4BAA4B,GAAG,yBAAyB,CAAA;AAErE,MAAM,CAAC,MAAM,6CAA6C,GAAG,+BAA+B,CAAA;AAE5F,MAAM,CAAC,MAAM,oDAAoD,GAAG,sCAAsC,CAAA;AAE1G,MAAM,CAAC,MAAM,8BAA8B,GAAG,2BAA2B,CAAA;AAEzE,MAAM,CAAC,MAAM,0BAA0B,GAAG,uBAAuB,CAAA;AAEjE,MAAM,CAAC,MAAM,+BAA+B,GAAG,4BAA4B,CAAA;AAE3E,MAAM,CAAC,MAAM,2BAA2B,GAAG,wBAAwB,CAAA;AAEnE,MAAM,CAAC,MAAM,2BAA2B,GAAG,wBAAwB,CAAA;AAEnE,MAAM,CAAC,MAAM,gCAAgC,GAAG,6BAA6B,CAAA;AAE7E,MAAM,CAAC,MAAM,kCAAkC,GAAG,+BAA+B,CAAA;AAEjF,MAAM,CAAC,MAAM,mCAAmC,GAAG,gCAAgC,CAAA;AAEnF,MAAM,CAAC,MAAM,qCAAqC,GAAG,kCAAkC,CAAA;AAEvF,MAAM,CAAC,MAAM,sCAAsC,GAAG,mCAAmC,CAAA;AAEzF,MAAM,CAAC,MAAM,4CAA4C,GAAG,yCAAyC,CAAA;AAErG,MAAM,CAAC,MAAM,oCAAoC,GAAG,iCAAiC,CAAA;AAErF,MAAM,CAAC,MAAM,6CAA6C,GAAG,0CAA0C,CAAA;AAEvG,MAAM,CAAC,MAAM,qCAAqC,GAAG,kCAAkC,CAAA;AAEvF,MAAM,CAAC,MAAM,qCAAqC,GAAG,sCAAsC,CAAA;AAE3F,MAAM,CAAC,MAAM,8CAA8C,GAAG,0CAA0C,CAAA;AAExG,MAAM,CAAC,MAAM,sCAAsC,GAAG,uCAAuC,CAAA;AAE7F,MAAM,CAAC,MAAM,uCAAuC,GAAG,oCAAoC,CAAA;AAE3F,MAAM,CAAC,MAAM,gDAAgD,GAAG,6CAA6C,CAAA;AAE7G,MAAM,CAAC,MAAM,yCAAyC,GAAG,sCAAsC,CAAA;AAE/F,MAAM,CAAC,MAAM,kCAAkC,GAAG,+BAA+B,CAAA;AAEjF,MAAM,CAAC,MAAM,2BAA2B,GAAG,wBAAwB,CAAA;AAEnE,MAAM,CAAC,MAAM,qCAAqC,GAAG,kCAAkC,CAAA;AAEvF,MAAM,CAAC,MAAM,0BAA0B,GAAG,uBAAuB,CAAA;AAEjE,MAAM,CAAC,MAAM,gBAAgB,GAAG,cAAc,CAAA","sourcesContent":["/**\n * @deprecated\n */\nexport const MULTIPLAYER_TRACE_DOC_PREFIX = 'd0cd0c'\n\nexport const MULTIPLAYER_TRACE_DEBUG_PREFIX = 'debdeb'\n\nexport const MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX = 'cdbcdb'\n\nexport const MULTIPLAYER_TRACE_DEBUG_SESSION_SHORT_ID_LENGTH = 16\n\n/**\n * @deprecated Use MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_HTTP_URL instead\n */\nexport const MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_URL = 'https://api.multiplayer.app/v1/traces'\n\n/**\n * @deprecated Use MULTIPLAYER_OTEL_DEFAULT_LOGS_EXPORTER_HTTP_URL instead\n */\nexport const MULTIPLAYER_OTEL_DEFAULT_LOGS_EXPORTER_URL = 'https://api.multiplayer.app/v1/logs'\n\nexport const MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_HTTP_URL = 'https://otlp.multiplayer.app/v1/traces'\n\nexport const MULTIPLAYER_OTEL_DEFAULT_LOGS_EXPORTER_HTTP_URL = 'https://otlp.multiplayer.app/v1/logs'\n\nexport const MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_GRPC_URL = 'https://otlp.multiplayer.app:4317/v1/traces'\n\nexport const MULTIPLAYER_OTEL_DEFAULT_LOGS_EXPORTER_GRPC_URL = 'https://otlp.multiplayer.app:4317/v1/logs'\n\nexport const MULTIPLAYER_BASE_API_URL = 'https://api.multiplayer.app'\n\nexport const MULTIPLAYER_ATTRIBUTE_PREFIX = 'multiplayer.'\n\nexport const ATTR_MULTIPLAYER_WORKSPACE_ID = 'multiplayer.workspace.id'\n\nexport const ATTR_MULTIPLAYER_PROJECT_ID = 'multiplayer.project.id'\n\nexport const ATTR_MULTIPLAYER_PLATFORM_ID = 'multiplayer.platform.id'\n\nexport const ATTR_MULTIPLAYER_CONTINUOUS_SESSION_AUTO_SAVE = 'multiplayer.session.auto-save'\n\nexport const ATTR_MULTIPLAYER_CONTINUOUS_SESSION_AUTO_SAVE_REASON = 'multiplayer.session.auto-save.reason'\n\nexport const ATTR_MULTIPLAYER_PLATFORM_NAME = 'multiplayer.platform.name'\n\nexport const ATTR_MULTIPLAYER_CLIENT_ID = 'multiplayer.client.id'\n\nexport const ATTR_MULTIPLAYER_INTEGRATION_ID = 'multiplayer.integration.id'\n\nexport const ATTR_MULTIPLAYER_SESSION_ID = 'multiplayer.session.id'\n\nexport const ATTR_MULTIPLAYER_HTTP_PROXY = 'multiplayer.http.proxy'\n\nexport const ATTR_MULTIPLAYER_HTTP_PROXY_TYPE = 'multiplayer.http.proxy.type'\n\nexport const ATTR_MULTIPLAYER_HTTP_REQUEST_BODY = 'multiplayer.http.request.body'\n\nexport const ATTR_MULTIPLAYER_HTTP_RESPONSE_BODY = 'multiplayer.http.response.body'\n\nexport const ATTR_MULTIPLAYER_HTTP_REQUEST_HEADERS = 'multiplayer.http.request.headers'\n\nexport const ATTR_MULTIPLAYER_HTTP_RESPONSE_HEADERS = 'multiplayer.http.response.headers'\n\nexport const ATTR_MULTIPLAYER_HTTP_RESPONSE_BODY_ENCODING = 'multiplayer.http.response.body.encoding'\n\nexport const ATTR_MULTIPLAYER_RPC_REQUEST_MESSAGE = 'multiplayer.rpc.request.message'\n\nexport const ATTR_MULTIPLAYER_RPC_REQUEST_MESSAGE_ENCODING = 'multiplayer.rpc.request.message.encoding'\n\nexport const ATTR_MULTIPLAYER_RPC_RESPONSE_MESSAGE = 'multiplayer.rpc.response.message'\n\nexport const ATTR_MULTIPLAYER_GRPC_REQUEST_MESSAGE = 'multiplayer.rpc.grpc.request.message'\n\nexport const ATTR_MULTIPLAYER_GRPC_REQUEST_MESSAGE_ENCODING = 'multiplayer.rpc.request.message.encoding'\n\nexport const ATTR_MULTIPLAYER_GRPC_RESPONSE_MESSAGE = 'multiplayer.rpc.grpc.response.message'\n\nexport const ATTR_MULTIPLAYER_MESSAGING_MESSAGE_BODY = 'multiplayer.messaging.message.body'\n\nexport const ATTR_MULTIPLAYER_MESSAGING_MESSAGE_BODY_ENCODING = 'multiplayer.messaging.message.body.encoding'\n\nexport const ATTR_MULTIPLAYER_SESSION_RECORDER_VERSION = 'multiplayer.session-recorder.version'\n\nexport const ATTR_MULTIPLAYER_ISSUE_CUSTOM_HASH = 'multiplayer.issue.custom-hash'\n\nexport const ATTR_MULTIPLAYER_ISSUE_HASH = 'multiplayer.issue.hash'\n\nexport const ATTR_MULTIPLAYER_ISSUE_COMPONENT_HASH = 'multiplayer.issue.component-hash'\n\nexport const ATTR_MULTIPLAYER_USER_HASH = 'multiplayer.user.hash'\n\nexport const MASK_PLACEHOLDER = '***MASKED***'\n"]}
1
+ {"version":3,"file":"constants.base.js","sourceRoot":"","sources":["../../../src/constants/constants.base.ts"],"names":[],"mappings":"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","sourcesContent":["import { SessionType } from '../type'\n\n/**\n * @deprecated\n */\nexport const MULTIPLAYER_TRACE_DOC_PREFIX = 'd0cd0c'\n\nexport const MULTIPLAYER_TRACE_DEBUG_PREFIX = 'debdeb'\n\nexport const MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX = 'cdbcdb'\n\nexport const MULTIPLAYER_TRACE_SESSION_CACHE_PREFIX = 'cdbcac'\n\nexport const MULTIPLAYER_TRACE_CONTINUOUS_SESSION_CACHE_PREFIX = 'debcdb'\n\nexport const MULTIPLAYER_TRACE_PREFIX_MAP = {\n [SessionType.CONTINUOUS]: MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX,\n [SessionType.SESSION_CACHE]: MULTIPLAYER_TRACE_SESSION_CACHE_PREFIX,\n [SessionType.CONTINUOUS_SESSION_CACHE]: MULTIPLAYER_TRACE_CONTINUOUS_SESSION_CACHE_PREFIX,\n [SessionType.MANUAL]: MULTIPLAYER_TRACE_DEBUG_PREFIX,\n} as Record<SessionType, string>\n\nexport const MULTIPLAYER_TRACE_DEBUG_SESSION_SHORT_ID_LENGTH = 8\n\nexport const MULTIPLAYER_TRACE_CLIENT_ID_LENGTH = 8\n\n/**\n * @deprecated Use MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_HTTP_URL instead\n */\nexport const MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_URL = 'https://api.multiplayer.app/v1/traces'\n\n/**\n * @deprecated Use MULTIPLAYER_OTEL_DEFAULT_LOGS_EXPORTER_HTTP_URL instead\n */\nexport const MULTIPLAYER_OTEL_DEFAULT_LOGS_EXPORTER_URL = 'https://api.multiplayer.app/v1/logs'\n\nexport const MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_HTTP_URL = 'https://otlp.multiplayer.app/v1/traces'\n\nexport const MULTIPLAYER_OTEL_DEFAULT_LOGS_EXPORTER_HTTP_URL = 'https://otlp.multiplayer.app/v1/logs'\n\nexport const MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_GRPC_URL = 'https://otlp.multiplayer.app:4317/v1/traces'\n\nexport const MULTIPLAYER_OTEL_DEFAULT_LOGS_EXPORTER_GRPC_URL = 'https://otlp.multiplayer.app:4317/v1/logs'\n\nexport const MULTIPLAYER_BASE_API_URL = 'https://api.multiplayer.app'\n\nexport const MULTIPLAYER_ATTRIBUTE_PREFIX = 'multiplayer.'\n\nexport const ATTR_MULTIPLAYER_WORKSPACE_ID = 'multiplayer.workspace.id'\n\nexport const ATTR_MULTIPLAYER_PROJECT_ID = 'multiplayer.project.id'\n\nexport const ATTR_MULTIPLAYER_PLATFORM_ID = 'multiplayer.platform.id'\n\nexport const ATTR_MULTIPLAYER_CONTINUOUS_SESSION_AUTO_SAVE = 'multiplayer.session.auto-save'\n\nexport const ATTR_MULTIPLAYER_CONTINUOUS_SESSION_AUTO_SAVE_REASON = 'multiplayer.session.auto-save.reason'\n\nexport const ATTR_MULTIPLAYER_PLATFORM_NAME = 'multiplayer.platform.name'\n\nexport const ATTR_MULTIPLAYER_CLIENT_ID = 'multiplayer.client.id'\n\nexport const ATTR_MULTIPLAYER_INTEGRATION_ID = 'multiplayer.integration.id'\n\nexport const ATTR_MULTIPLAYER_SESSION_ID = 'multiplayer.session.id'\n\nexport const ATTR_MULTIPLAYER_SESSION_CLIENT_ID = 'multiplayer.session.client.id'\n\nexport const ATTR_MULTIPLAYER_HTTP_PROXY = 'multiplayer.http.proxy'\n\nexport const ATTR_MULTIPLAYER_HTTP_PROXY_TYPE = 'multiplayer.http.proxy.type'\n\nexport const ATTR_MULTIPLAYER_HTTP_REQUEST_BODY = 'multiplayer.http.request.body'\n\nexport const ATTR_MULTIPLAYER_HTTP_RESPONSE_BODY = 'multiplayer.http.response.body'\n\nexport const ATTR_MULTIPLAYER_HTTP_REQUEST_HEADERS = 'multiplayer.http.request.headers'\n\nexport const ATTR_MULTIPLAYER_HTTP_RESPONSE_HEADERS = 'multiplayer.http.response.headers'\n\nexport const ATTR_MULTIPLAYER_HTTP_RESPONSE_BODY_ENCODING = 'multiplayer.http.response.body.encoding'\n\nexport const ATTR_MULTIPLAYER_RPC_REQUEST_MESSAGE = 'multiplayer.rpc.request.message'\n\nexport const ATTR_MULTIPLAYER_RPC_REQUEST_MESSAGE_ENCODING = 'multiplayer.rpc.request.message.encoding'\n\nexport const ATTR_MULTIPLAYER_RPC_RESPONSE_MESSAGE = 'multiplayer.rpc.response.message'\n\nexport const ATTR_MULTIPLAYER_GRPC_REQUEST_MESSAGE = 'multiplayer.rpc.grpc.request.message'\n\nexport const ATTR_MULTIPLAYER_GRPC_REQUEST_MESSAGE_ENCODING = 'multiplayer.rpc.request.message.encoding'\n\nexport const ATTR_MULTIPLAYER_GRPC_RESPONSE_MESSAGE = 'multiplayer.rpc.grpc.response.message'\n\nexport const ATTR_MULTIPLAYER_MESSAGING_MESSAGE_BODY = 'multiplayer.messaging.message.body'\n\nexport const ATTR_MULTIPLAYER_MESSAGING_MESSAGE_BODY_ENCODING = 'multiplayer.messaging.message.body.encoding'\n\nexport const ATTR_MULTIPLAYER_SESSION_RECORDER_VERSION = 'multiplayer.session-recorder.version'\n\nexport const ATTR_MULTIPLAYER_ISSUE_CUSTOM_HASH = 'multiplayer.issue.custom-hash'\n\nexport const ATTR_MULTIPLAYER_ISSUE_HASH = 'multiplayer.issue.hash'\n\nexport const ATTR_MULTIPLAYER_ISSUE_COMPONENT_HASH = 'multiplayer.issue.component-hash'\n\nexport const ATTR_MULTIPLAYER_USER_HASH = 'multiplayer.user.hash'\n\nexport const MASK_PLACEHOLDER = '***MASKED***'\n"]}
@@ -1,4 +1,5 @@
1
1
  import { ReadableSpan, SpanExporter } from '@opentelemetry/sdk-trace-base';
2
+ import { ExportResult } from '@opentelemetry/core';
2
3
  export interface SessionRecorderBrowserTraceExporterConfig {
3
4
  /** URL for the OTLP endpoint. Defaults to Multiplayer's default traces endpoint. */
4
5
  url?: string;
@@ -35,8 +36,9 @@ export declare class SessionRecorderBrowserTraceExporter implements SpanExporter
35
36
  code: number;
36
37
  }) => void): void;
37
38
  shutdown(): Promise<void>;
39
+ exportBuffer(spans: ReadableSpan[]): Promise<ExportResult | undefined>;
38
40
  private exportViaPostMessage;
39
- private _serializeSpan;
41
+ serializeSpan(span: ReadableSpan): any;
40
42
  private _createExporter;
41
43
  setApiKey(apiKey: string): void;
42
44
  }
@@ -1 +1 @@
1
- {"version":3,"file":"SessionRecorderBrowserTraceExporter.d.ts","sourceRoot":"","sources":["../../../src/exporters/SessionRecorderBrowserTraceExporter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;AAQ1E,MAAM,WAAW,yCAAyC;IACxD,oFAAoF;IACpF,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,4CAA4C;IAC5C,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,gDAAgD;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC,sCAAsC;IACtC,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,4CAA4C;IAC5C,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,4CAA4C;IAC5C,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,oEAAoE;IACpE,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAChC,kCAAkC;IAClC,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,gCAAgC;IAChC,uBAAuB,CAAC,EAAE,MAAM,CAAA;CACjC;AAED;;;;GAIG;AACH,qBAAa,mCAAoC,YAAW,YAAY;IACtE,OAAO,CAAC,QAAQ,CAAmB;IACnC,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAQ;IACxC,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAQ;IAChD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA2C;gBAEtD,MAAM,GAAE,yCAA8C;IA2BlE,MAAM,CACJ,KAAK,EAAE,YAAY,EAAE,EACrB,cAAc,EAAE,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,GACjD,IAAI;IA+BP,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAIzB,OAAO,CAAC,oBAAoB;IAqB5B,OAAO,CAAC,cAAc;IAyBtB,OAAO,CAAC,eAAe;IAcvB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;CAKhC"}
1
+ {"version":3,"file":"SessionRecorderBrowserTraceExporter.d.ts","sourceRoot":"","sources":["../../../src/exporters/SessionRecorderBrowserTraceExporter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AASlD,MAAM,WAAW,yCAAyC;IACxD,oFAAoF;IACpF,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,4CAA4C;IAC5C,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,gDAAgD;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC,sCAAsC;IACtC,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,4CAA4C;IAC5C,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,4CAA4C;IAC5C,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,oEAAoE;IACpE,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAChC,kCAAkC;IAClC,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,gCAAgC;IAChC,uBAAuB,CAAC,EAAE,MAAM,CAAA;CACjC;AAED;;;;GAIG;AACH,qBAAa,mCAAoC,YAAW,YAAY;IACtE,OAAO,CAAC,QAAQ,CAAmB;IACnC,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAQ;IACxC,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAQ;IAChD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA2C;gBAEtD,MAAM,GAAE,yCAA8C;IA2BlE,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,cAAc,EAAE,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,GAAG,IAAI;IAiCvF,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAIzB,YAAY,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC;IAQtE,OAAO,CAAC,oBAAoB;IAqB5B,aAAa,CAAC,IAAI,EAAE,YAAY,GAAG,GAAG;IAuBtC,OAAO,CAAC,eAAe;IAcvB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;CAIhC"}
@@ -1,5 +1,5 @@
1
1
  import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
2
- import { MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_HTTP_URL, MULTIPLAYER_TRACE_DEBUG_PREFIX, MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX, } from '../constants/constants.base';
2
+ import { MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_HTTP_URL, MULTIPLAYER_TRACE_DEBUG_PREFIX, MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX } from '../constants/constants.base';
3
3
  /**
4
4
  * Browser-specific trace exporter for Session Recorder
5
5
  * Exports traces via HTTP to Multiplayer's OTLP endpoint with browser-specific optimizations
@@ -8,12 +8,12 @@ import { MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_HTTP_URL, MULTIPLAYER_TRACE_DE
8
8
  export class SessionRecorderBrowserTraceExporter {
9
9
  constructor(config = {}) {
10
10
  this.usePostMessage = false;
11
- const { url = MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_HTTP_URL, apiKey, headers = {}, timeoutMillis = 30000, keepAlive = true, concurrencyLimit = 20, postMessageType = 'MULTIPLAYER_SESSION_DEBUGGER_LIB', postMessageTargetOrigin = '*', } = config;
11
+ const { url = MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_HTTP_URL, apiKey, headers = {}, timeoutMillis = 30000, keepAlive = true, concurrencyLimit = 20, postMessageType = 'MULTIPLAYER_SESSION_DEBUGGER_LIB', postMessageTargetOrigin = '*' } = config;
12
12
  this.config = Object.assign(Object.assign({}, config), { url,
13
13
  apiKey,
14
14
  headers,
15
- timeoutMillis,
16
15
  keepAlive,
16
+ timeoutMillis,
17
17
  concurrencyLimit });
18
18
  this.postMessageType = postMessageType;
19
19
  this.postMessageTargetOrigin = postMessageTargetOrigin;
@@ -21,10 +21,10 @@ export class SessionRecorderBrowserTraceExporter {
21
21
  }
22
22
  export(spans, resultCallback) {
23
23
  // Filter spans to only include those with Multiplayer trace prefixes
24
- const filteredSpans = spans.filter(span => {
24
+ const filteredSpans = spans.filter((span) => {
25
25
  const traceId = span.spanContext().traceId;
26
- return traceId.startsWith(MULTIPLAYER_TRACE_DEBUG_PREFIX) ||
27
- traceId.startsWith(MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX);
26
+ return (traceId.startsWith(MULTIPLAYER_TRACE_DEBUG_PREFIX) ||
27
+ traceId.startsWith(MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX));
28
28
  });
29
29
  // Only proceed if there are filtered spans
30
30
  if (filteredSpans.length === 0) {
@@ -51,6 +51,13 @@ export class SessionRecorderBrowserTraceExporter {
51
51
  shutdown() {
52
52
  return this.exporter.shutdown();
53
53
  }
54
+ exportBuffer(spans) {
55
+ return new Promise((resolve) => {
56
+ this.exporter.export(spans, (result) => {
57
+ resolve(result);
58
+ });
59
+ });
60
+ }
54
61
  exportViaPostMessage(spans, resultCallback) {
55
62
  if (typeof window === 'undefined') {
56
63
  resultCallback({ code: 1 });
@@ -60,7 +67,7 @@ export class SessionRecorderBrowserTraceExporter {
60
67
  window.postMessage({
61
68
  action: 'traces',
62
69
  type: this.postMessageType,
63
- payload: spans.map(span => this._serializeSpan(span)),
70
+ payload: spans.map((span) => this.serializeSpan(span))
64
71
  }, this.postMessageTargetOrigin);
65
72
  resultCallback({ code: 0 });
66
73
  }
@@ -68,8 +75,7 @@ export class SessionRecorderBrowserTraceExporter {
68
75
  resultCallback({ code: 1 });
69
76
  }
70
77
  }
71
- _serializeSpan(span) {
72
- var _a;
78
+ serializeSpan(span) {
73
79
  const spanContext = span.spanContext();
74
80
  return {
75
81
  _spanContext: spanContext,
@@ -80,26 +86,24 @@ export class SessionRecorderBrowserTraceExporter {
80
86
  events: span.events,
81
87
  status: span.status,
82
88
  endTime: span.endTime,
83
- startTime: span.startTime,
89
+ resource: span.resource,
84
90
  duration: span.duration,
91
+ startTime: span.startTime,
85
92
  attributes: span.attributes,
86
- parentSpanId: (_a = span.parentSpanContext) === null || _a === void 0 ? void 0 : _a.spanId,
87
- droppedAttributesCount: span.droppedAttributesCount,
88
- droppedEventsCount: span.droppedEventsCount,
89
93
  droppedLinksCount: span.droppedLinksCount,
90
- resource: {
91
- attributes: span.resource.attributes,
92
- asyncAttributesPending: span.resource.asyncAttributesPending,
93
- },
94
+ parentSpanContext: span.parentSpanContext,
95
+ droppedEventsCount: span.droppedEventsCount,
96
+ instrumentationScope: span.instrumentationScope,
97
+ droppedAttributesCount: span.droppedAttributesCount
94
98
  };
95
99
  }
96
100
  _createExporter() {
97
101
  return new OTLPTraceExporter({
98
102
  url: this.config.url,
99
- headers: Object.assign(Object.assign({ 'Content-Type': 'application/json' }, (this.config.apiKey ? { 'Authorization': this.config.apiKey } : {})), (this.config.headers || {})),
103
+ headers: Object.assign(Object.assign({ 'Content-Type': 'application/json' }, (this.config.apiKey ? { Authorization: this.config.apiKey } : {})), (this.config.headers || {})),
100
104
  timeoutMillis: this.config.timeoutMillis,
101
105
  keepAlive: this.config.keepAlive,
102
- concurrencyLimit: this.config.concurrencyLimit,
106
+ concurrencyLimit: this.config.concurrencyLimit
103
107
  });
104
108
  }
105
109
  setApiKey(apiKey) {
@@ -1 +1 @@
1
- {"version":3,"file":"SessionRecorderBrowserTraceExporter.js","sourceRoot":"","sources":["../../../src/exporters/SessionRecorderBrowserTraceExporter.ts"],"names":[],"mappings":"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","sourcesContent":["import { ReadableSpan, SpanExporter } from '@opentelemetry/sdk-trace-base'\nimport { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http'\nimport {\n MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_HTTP_URL,\n MULTIPLAYER_TRACE_DEBUG_PREFIX,\n MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX,\n} from '../constants/constants.base'\n\nexport interface SessionRecorderBrowserTraceExporterConfig {\n /** URL for the OTLP endpoint. Defaults to Multiplayer's default traces endpoint. */\n url?: string\n /** API key for authentication. Required. */\n apiKey?: string\n /** Additional headers to include in requests */\n headers?: Record<string, string>\n /** Request timeout in milliseconds */\n timeoutMillis?: number\n /** Whether to use keep-alive connections */\n keepAlive?: boolean\n /** Maximum number of concurrent requests */\n concurrencyLimit?: number\n /** Whether to use postMessage fallback for cross-origin requests */\n usePostMessageFallback?: boolean\n /** PostMessage type identifier */\n postMessageType?: string\n /** PostMessage target origin */\n postMessageTargetOrigin?: string\n}\n\n/**\n * Browser-specific trace exporter for Session Recorder\n * Exports traces via HTTP to Multiplayer's OTLP endpoint with browser-specific optimizations\n * Only exports spans with trace IDs starting with Multiplayer prefixes\n */\nexport class SessionRecorderBrowserTraceExporter implements SpanExporter {\n private exporter: OTLPTraceExporter\n private usePostMessage: boolean = false\n private readonly postMessageType: string\n private readonly postMessageTargetOrigin: string\n private readonly config: SessionRecorderBrowserTraceExporterConfig\n\n constructor(config: SessionRecorderBrowserTraceExporterConfig = {}) {\n const {\n url = MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_HTTP_URL,\n apiKey,\n headers = {},\n timeoutMillis = 30000,\n keepAlive = true,\n concurrencyLimit = 20,\n postMessageType = 'MULTIPLAYER_SESSION_DEBUGGER_LIB',\n postMessageTargetOrigin = '*',\n } = config\n\n this.config = {\n ...config,\n url,\n apiKey,\n headers,\n timeoutMillis,\n keepAlive,\n concurrencyLimit,\n }\n this.postMessageType = postMessageType\n this.postMessageTargetOrigin = postMessageTargetOrigin\n\n this.exporter = this._createExporter()\n }\n\n export(\n spans: ReadableSpan[],\n resultCallback: (result: { code: number }) => void,\n ): void {\n // Filter spans to only include those with Multiplayer trace prefixes\n const filteredSpans = spans.filter(span => {\n const traceId = span.spanContext().traceId\n return traceId.startsWith(MULTIPLAYER_TRACE_DEBUG_PREFIX) ||\n traceId.startsWith(MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX)\n })\n\n // Only proceed if there are filtered spans\n if (filteredSpans.length === 0) {\n resultCallback({ code: 0 })\n return\n }\n\n if (this.usePostMessage) {\n this.exportViaPostMessage(filteredSpans, resultCallback)\n return\n }\n\n this.exporter.export(filteredSpans, (result) => {\n if (result.code === 0) {\n resultCallback(result)\n } else if (this.config.usePostMessageFallback) {\n this.usePostMessage = true\n this.exportViaPostMessage(filteredSpans, resultCallback)\n } else {\n resultCallback(result)\n }\n })\n }\n\n shutdown(): Promise<void> {\n return this.exporter.shutdown()\n }\n\n private exportViaPostMessage(spans: ReadableSpan[], resultCallback: (result: { code: number }) => void): void {\n if (typeof window === 'undefined') {\n resultCallback({ code: 1 })\n return\n }\n\n try {\n window.postMessage(\n {\n action: 'traces',\n type: this.postMessageType,\n payload: spans.map(span => this._serializeSpan(span)),\n },\n this.postMessageTargetOrigin,\n )\n resultCallback({ code: 0 })\n } catch (e) {\n resultCallback({ code: 1 })\n }\n }\n\n private _serializeSpan(span: ReadableSpan): any {\n const spanContext = span.spanContext()\n return {\n _spanContext: spanContext,\n name: span.name,\n kind: span.kind,\n links: span.links,\n ended: span.ended,\n events: span.events,\n status: span.status,\n endTime: span.endTime,\n startTime: span.startTime,\n duration: span.duration,\n attributes: span.attributes,\n parentSpanId: span.parentSpanContext?.spanId,\n droppedAttributesCount: span.droppedAttributesCount,\n droppedEventsCount: span.droppedEventsCount,\n droppedLinksCount: span.droppedLinksCount,\n resource: {\n attributes: span.resource.attributes,\n asyncAttributesPending: span.resource.asyncAttributesPending,\n },\n }\n }\n\n private _createExporter(): OTLPTraceExporter {\n return new OTLPTraceExporter({\n url: this.config.url,\n headers: {\n 'Content-Type': 'application/json',\n ...(this.config.apiKey ? { 'Authorization': this.config.apiKey } : {}),\n ...(this.config.headers || {}),\n },\n timeoutMillis: this.config.timeoutMillis,\n keepAlive: this.config.keepAlive,\n concurrencyLimit: this.config.concurrencyLimit,\n })\n }\n\n setApiKey(apiKey: string): void {\n this.config.apiKey = apiKey\n\n this.exporter = this._createExporter()\n }\n}\n"]}
1
+ {"version":3,"file":"SessionRecorderBrowserTraceExporter.js","sourceRoot":"","sources":["../../../src/exporters/SessionRecorderBrowserTraceExporter.ts"],"names":[],"mappings":"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","sourcesContent":["import { ReadableSpan, SpanExporter } from '@opentelemetry/sdk-trace-base'\nimport { ExportResult } from '@opentelemetry/core'\n\nimport { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http'\nimport {\n MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_HTTP_URL,\n MULTIPLAYER_TRACE_DEBUG_PREFIX,\n MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX\n} from '../constants/constants.base'\n\nexport interface SessionRecorderBrowserTraceExporterConfig {\n /** URL for the OTLP endpoint. Defaults to Multiplayer's default traces endpoint. */\n url?: string\n /** API key for authentication. Required. */\n apiKey?: string\n /** Additional headers to include in requests */\n headers?: Record<string, string>\n /** Request timeout in milliseconds */\n timeoutMillis?: number\n /** Whether to use keep-alive connections */\n keepAlive?: boolean\n /** Maximum number of concurrent requests */\n concurrencyLimit?: number\n /** Whether to use postMessage fallback for cross-origin requests */\n usePostMessageFallback?: boolean\n /** PostMessage type identifier */\n postMessageType?: string\n /** PostMessage target origin */\n postMessageTargetOrigin?: string\n}\n\n/**\n * Browser-specific trace exporter for Session Recorder\n * Exports traces via HTTP to Multiplayer's OTLP endpoint with browser-specific optimizations\n * Only exports spans with trace IDs starting with Multiplayer prefixes\n */\nexport class SessionRecorderBrowserTraceExporter implements SpanExporter {\n private exporter: OTLPTraceExporter\n private usePostMessage: boolean = false\n private readonly postMessageType: string\n private readonly postMessageTargetOrigin: string\n private readonly config: SessionRecorderBrowserTraceExporterConfig\n\n constructor(config: SessionRecorderBrowserTraceExporterConfig = {}) {\n const {\n url = MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_HTTP_URL,\n apiKey,\n headers = {},\n timeoutMillis = 30000,\n keepAlive = true,\n concurrencyLimit = 20,\n postMessageType = 'MULTIPLAYER_SESSION_DEBUGGER_LIB',\n postMessageTargetOrigin = '*'\n } = config\n\n this.config = {\n ...config,\n url,\n apiKey,\n headers,\n keepAlive,\n timeoutMillis,\n concurrencyLimit\n }\n this.postMessageType = postMessageType\n this.postMessageTargetOrigin = postMessageTargetOrigin\n\n this.exporter = this._createExporter()\n }\n\n export(spans: ReadableSpan[], resultCallback: (result: { code: number }) => void): void {\n // Filter spans to only include those with Multiplayer trace prefixes\n const filteredSpans = spans.filter((span) => {\n const traceId = span.spanContext().traceId\n return (\n traceId.startsWith(MULTIPLAYER_TRACE_DEBUG_PREFIX) ||\n traceId.startsWith(MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX)\n )\n })\n\n // Only proceed if there are filtered spans\n if (filteredSpans.length === 0) {\n resultCallback({ code: 0 })\n return\n }\n\n if (this.usePostMessage) {\n this.exportViaPostMessage(filteredSpans, resultCallback)\n return\n }\n\n this.exporter.export(filteredSpans, (result) => {\n if (result.code === 0) {\n resultCallback(result)\n } else if (this.config.usePostMessageFallback) {\n this.usePostMessage = true\n this.exportViaPostMessage(filteredSpans, resultCallback)\n } else {\n resultCallback(result)\n }\n })\n }\n\n shutdown(): Promise<void> {\n return this.exporter.shutdown()\n }\n\n exportBuffer(spans: ReadableSpan[]): Promise<ExportResult | undefined> {\n return new Promise((resolve) => {\n this.exporter.export(spans, (result) => {\n resolve(result)\n })\n })\n }\n\n private exportViaPostMessage(spans: ReadableSpan[], resultCallback: (result: { code: number }) => void): void {\n if (typeof window === 'undefined') {\n resultCallback({ code: 1 })\n return\n }\n\n try {\n window.postMessage(\n {\n action: 'traces',\n type: this.postMessageType,\n payload: spans.map((span) => this.serializeSpan(span))\n },\n this.postMessageTargetOrigin\n )\n resultCallback({ code: 0 })\n } catch (e) {\n resultCallback({ code: 1 })\n }\n }\n\n serializeSpan(span: ReadableSpan): any {\n const spanContext = span.spanContext()\n return {\n _spanContext: spanContext,\n name: span.name,\n kind: span.kind,\n links: span.links,\n ended: span.ended,\n events: span.events,\n status: span.status,\n endTime: span.endTime,\n resource: span.resource,\n duration: span.duration,\n startTime: span.startTime,\n attributes: span.attributes,\n droppedLinksCount: span.droppedLinksCount,\n parentSpanContext: span.parentSpanContext,\n droppedEventsCount: span.droppedEventsCount,\n instrumentationScope: span.instrumentationScope,\n droppedAttributesCount: span.droppedAttributesCount\n }\n }\n\n private _createExporter(): OTLPTraceExporter {\n return new OTLPTraceExporter({\n url: this.config.url,\n headers: {\n 'Content-Type': 'application/json',\n ...(this.config.apiKey ? { Authorization: this.config.apiKey } : {}),\n ...(this.config.headers || {})\n },\n timeoutMillis: this.config.timeoutMillis,\n keepAlive: this.config.keepAlive,\n concurrencyLimit: this.config.concurrencyLimit\n })\n }\n\n setApiKey(apiKey: string): void {\n this.config.apiKey = apiKey\n this.exporter = this._createExporter()\n }\n}\n"]}