@multiplayer-app/session-recorder-common 1.0.1-alpha.0 → 1.0.1-alpha.2

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 (68) hide show
  1. package/dist/esm/SessionRecorderIdGenerator.d.ts +1 -6
  2. package/dist/esm/SessionRecorderIdGenerator.d.ts.map +1 -1
  3. package/dist/esm/SessionRecorderIdGenerator.js +3 -12
  4. package/dist/esm/SessionRecorderIdGenerator.js.map +1 -1
  5. package/dist/esm/exporters/SessionRecorderBrowserTraceExporter.d.ts +15 -3
  6. package/dist/esm/exporters/SessionRecorderBrowserTraceExporter.d.ts.map +1 -1
  7. package/dist/esm/exporters/SessionRecorderBrowserTraceExporter.js +26 -126
  8. package/dist/esm/exporters/SessionRecorderBrowserTraceExporter.js.map +1 -1
  9. package/dist/esm/index-browser.d.ts +0 -1
  10. package/dist/esm/index-browser.d.ts.map +1 -1
  11. package/dist/esm/index-browser.js +0 -1
  12. package/dist/esm/index-browser.js.map +1 -1
  13. package/dist/esm/index-node.d.ts +0 -1
  14. package/dist/esm/index-node.d.ts.map +1 -1
  15. package/dist/esm/index-node.js +0 -1
  16. package/dist/esm/index-node.js.map +1 -1
  17. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  18. package/dist/esnext/SessionRecorderIdGenerator.d.ts +1 -6
  19. package/dist/esnext/SessionRecorderIdGenerator.d.ts.map +1 -1
  20. package/dist/esnext/SessionRecorderIdGenerator.js +3 -11
  21. package/dist/esnext/SessionRecorderIdGenerator.js.map +1 -1
  22. package/dist/esnext/exporters/SessionRecorderBrowserTraceExporter.d.ts +15 -3
  23. package/dist/esnext/exporters/SessionRecorderBrowserTraceExporter.d.ts.map +1 -1
  24. package/dist/esnext/exporters/SessionRecorderBrowserTraceExporter.js +27 -76
  25. package/dist/esnext/exporters/SessionRecorderBrowserTraceExporter.js.map +1 -1
  26. package/dist/esnext/index-browser.d.ts +0 -1
  27. package/dist/esnext/index-browser.d.ts.map +1 -1
  28. package/dist/esnext/index-browser.js +0 -1
  29. package/dist/esnext/index-browser.js.map +1 -1
  30. package/dist/esnext/index-node.d.ts +0 -1
  31. package/dist/esnext/index-node.d.ts.map +1 -1
  32. package/dist/esnext/index-node.js +0 -1
  33. package/dist/esnext/index-node.js.map +1 -1
  34. package/dist/esnext/tsconfig.esnext.tsbuildinfo +1 -1
  35. package/dist/src/SessionRecorderIdGenerator.d.ts +1 -6
  36. package/dist/src/SessionRecorderIdGenerator.d.ts.map +1 -1
  37. package/dist/src/SessionRecorderIdGenerator.js +1 -9
  38. package/dist/src/SessionRecorderIdGenerator.js.map +1 -1
  39. package/dist/src/exporters/SessionRecorderBrowserTraceExporter.d.ts +15 -3
  40. package/dist/src/exporters/SessionRecorderBrowserTraceExporter.d.ts.map +1 -1
  41. package/dist/src/exporters/SessionRecorderBrowserTraceExporter.js +27 -76
  42. package/dist/src/exporters/SessionRecorderBrowserTraceExporter.js.map +1 -1
  43. package/dist/src/index-browser.d.ts +0 -1
  44. package/dist/src/index-browser.d.ts.map +1 -1
  45. package/dist/src/index-browser.js +1 -3
  46. package/dist/src/index-browser.js.map +1 -1
  47. package/dist/src/index-node.d.ts +0 -1
  48. package/dist/src/index-node.d.ts.map +1 -1
  49. package/dist/src/index-node.js +1 -3
  50. package/dist/src/index-node.js.map +1 -1
  51. package/package.json +3 -3
  52. package/src/SessionRecorderIdGenerator.ts +2 -21
  53. package/src/exporters/SessionRecorderBrowserTraceExporter.ts +55 -94
  54. package/src/index-browser.ts +0 -1
  55. package/src/index-node.ts +0 -1
  56. package/dist/esm/SessionRecorderJsonTraceSerializer.d.ts +0 -4
  57. package/dist/esm/SessionRecorderJsonTraceSerializer.d.ts.map +0 -1
  58. package/dist/esm/SessionRecorderJsonTraceSerializer.js +0 -94
  59. package/dist/esm/SessionRecorderJsonTraceSerializer.js.map +0 -1
  60. package/dist/esnext/SessionRecorderJsonTraceSerializer.d.ts +0 -4
  61. package/dist/esnext/SessionRecorderJsonTraceSerializer.d.ts.map +0 -1
  62. package/dist/esnext/SessionRecorderJsonTraceSerializer.js +0 -66
  63. package/dist/esnext/SessionRecorderJsonTraceSerializer.js.map +0 -1
  64. package/dist/src/SessionRecorderJsonTraceSerializer.d.ts +0 -4
  65. package/dist/src/SessionRecorderJsonTraceSerializer.d.ts.map +0 -1
  66. package/dist/src/SessionRecorderJsonTraceSerializer.js +0 -69
  67. package/dist/src/SessionRecorderJsonTraceSerializer.js.map +0 -1
  68. package/src/SessionRecorderJsonTraceSerializer.ts +0 -83
@@ -1,15 +1,10 @@
1
1
  import { RandomIdGenerator } from '@opentelemetry/sdk-trace-base';
2
2
  import { SessionType } from './type';
3
- import { SessionRecorderTraceIdRatioBasedSampler } from './SessionRecorderTraceIdRatioBasedSampler';
4
3
  export declare class SessionRecorderIdGenerator extends RandomIdGenerator {
5
4
  sessionShortId: string;
6
5
  sessionType: SessionType;
7
- docSpanSampler: SessionRecorderTraceIdRatioBasedSampler;
8
6
  generateLongId: () => string;
9
- constructor({ autoDocTracesRatio }?: {
10
- autoDocTracesRatio?: number | undefined;
11
- });
7
+ constructor();
12
8
  setSessionId(sessionShortId: string, sessionType?: SessionType): void;
13
- _isDocTrace(traceId: string): boolean;
14
9
  }
15
10
  //# sourceMappingURL=SessionRecorderIdGenerator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SessionRecorderIdGenerator.d.ts","sourceRoot":"","sources":["../../src/SessionRecorderIdGenerator.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EAElB,MAAM,+BAA+B,CAAA;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AACpC,OAAO,EACL,uCAAuC,EACxC,MAAM,2CAA2C,CAAA;AAQlD,qBAAa,0BAA2B,SAAQ,iBAAiB;IAC/D,cAAc,EAAE,MAAM,CAAA;IACtB,WAAW,EAAE,WAAW,CAAA;IACxB,cAAc,EAAE,uCAAuC,CAAA;IAEvD,cAAc,EAAE,MAAM,MAAM,CAAA;gBAEhB,EAAE,kBAAsB,EAAE;;KAAK;IAmC3C,YAAY,CACV,cAAc,EAAE,MAAM,EACtB,WAAW,GAAE,WAA+B;IAM9C,WAAW,CAAC,OAAO,EAAE,MAAM;CAM5B"}
1
+ {"version":3,"file":"SessionRecorderIdGenerator.d.ts","sourceRoot":"","sources":["../../src/SessionRecorderIdGenerator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAA;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AAOpC,qBAAa,0BAA2B,SAAQ,iBAAiB;IAC/D,cAAc,EAAE,MAAM,CAAA;IACtB,WAAW,EAAE,WAAW,CAAA;IAExB,cAAc,EAAE,MAAM,MAAM,CAAA;;IAiC5B,YAAY,CACV,cAAc,EAAE,MAAM,EACtB,WAAW,GAAE,WAA+B;CAK/C"}
@@ -3,13 +3,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.SessionRecorderIdGenerator = void 0;
4
4
  const sdk_trace_base_1 = require("@opentelemetry/sdk-trace-base");
5
5
  const type_1 = require("./type");
6
- const SessionRecorderTraceIdRatioBasedSampler_1 = require("./SessionRecorderTraceIdRatioBasedSampler");
7
6
  const constants_base_1 = require("./constants/constants.base");
8
7
  const sdk_1 = require("./sdk");
9
8
  class SessionRecorderIdGenerator extends sdk_trace_base_1.RandomIdGenerator {
10
- constructor({ autoDocTracesRatio = 0 } = {}) {
9
+ constructor() {
11
10
  super();
12
- this.docSpanSampler = new SessionRecorderTraceIdRatioBasedSampler_1.SessionRecorderTraceIdRatioBasedSampler(autoDocTracesRatio);
13
11
  this.generateLongId = (0, sdk_1.getIdGenerator)(16);
14
12
  this.sessionShortId = '';
15
13
  this.sessionType = type_1.SessionType.PLAIN;
@@ -28,9 +26,6 @@ class SessionRecorderIdGenerator extends sdk_trace_base_1.RandomIdGenerator {
28
26
  const sessionTraceId = `${prefix}${traceId.substring(prefix.length, traceId.length)}`;
29
27
  return sessionTraceId;
30
28
  }
31
- else if (this._isDocTrace(traceId)) {
32
- return `${constants_base_1.MULTIPLAYER_TRACE_DOC_PREFIX}${traceId.slice(constants_base_1.MULTIPLAYER_TRACE_DOC_PREFIX.length, traceId.length)}`;
33
- }
34
29
  return traceId;
35
30
  };
36
31
  }
@@ -38,9 +33,6 @@ class SessionRecorderIdGenerator extends sdk_trace_base_1.RandomIdGenerator {
38
33
  this.sessionShortId = sessionShortId;
39
34
  this.sessionType = sessionType;
40
35
  }
41
- _isDocTrace(traceId) {
42
- return this.docSpanSampler.shouldSample(undefined, traceId).decision === sdk_trace_base_1.SamplingDecision.RECORD_AND_SAMPLED;
43
- }
44
36
  }
45
37
  exports.SessionRecorderIdGenerator = SessionRecorderIdGenerator;
46
38
  //# sourceMappingURL=SessionRecorderIdGenerator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SessionRecorderIdGenerator.js","sourceRoot":"","sources":["../../src/SessionRecorderIdGenerator.ts"],"names":[],"mappings":";;;AAAA,kEAGsC;AACtC,iCAAoC;AACpC,uGAEkD;AAClD,+DAImC;AACnC,+BAAsC;AAEtC,MAAa,0BAA2B,SAAQ,kCAAiB;IAO/D,YAAY,EAAE,kBAAkB,GAAG,CAAC,EAAE,GAAG,EAAE;QACzC,KAAK,EAAE,CAAA;QAEP,IAAI,CAAC,cAAc,GAAG,IAAI,iFAAuC,CAAC,kBAAkB,CAAC,CAAA;QAErF,IAAI,CAAC,cAAc,GAAG,IAAA,oBAAc,EAAC,EAAE,CAAC,CAAA;QACxC,IAAI,CAAC,cAAc,GAAG,EAAE,CAAA;QACxB,IAAI,CAAC,WAAW,GAAG,kBAAW,CAAC,KAAK,CAAA;QAEpC,IAAI,CAAC,eAAe,GAAG,GAAG,EAAE;YAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE,CAAA;YAErC,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;gBACxB,IAAI,iBAAiB,GAAW,EAAE,CAAA;gBAClC,QAAQ,IAAI,CAAC,WAAW,EAAE,CAAC;oBACzB,KAAK,kBAAW,CAAC,UAAU;wBACzB,iBAAiB,GAAG,0DAAyC,CAAA;wBAC7D,MAAK;oBACP;wBACE,iBAAiB,GAAG,+CAA8B,CAAA;gBACtD,CAAC;gBAED,MAAM,MAAM,GAAG,GAAG,iBAAiB,GAAG,IAAI,CAAC,cAAc,EAAE,CAAA;gBAE3D,MAAM,cAAc,GAAG,GAAG,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,CAAA;gBAErF,OAAO,cAAc,CAAA;YACvB,CAAC;iBAAM,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;gBACrC,OAAO,GAAG,6CAA4B,GAAG,OAAO,CAAC,KAAK,CAAC,6CAA4B,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,CAAA;YAC/G,CAAC;YAED,OAAO,OAAO,CAAA;QAChB,CAAC,CAAA;IACH,CAAC;IAED,YAAY,CACV,cAAsB,EACtB,cAA2B,kBAAW,CAAC,KAAK;QAE5C,IAAI,CAAC,cAAc,GAAG,cAAc,CAAA;QACpC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAA;IAChC,CAAC;IAED,WAAW,CAAC,OAAe;QACzB,OAAO,IAAI,CAAC,cAAc,CAAC,YAAY,CACrC,SAAS,EACT,OAAO,CACR,CAAC,QAAQ,KAAK,iCAAgB,CAAC,kBAAkB,CAAA;IACpD,CAAC;CACF;AAxDD,gEAwDC","sourcesContent":["import {\n RandomIdGenerator,\n SamplingDecision,\n} from '@opentelemetry/sdk-trace-base'\nimport { SessionType } from './type'\nimport {\n SessionRecorderTraceIdRatioBasedSampler,\n} from './SessionRecorderTraceIdRatioBasedSampler'\nimport {\n MULTIPLAYER_TRACE_DEBUG_PREFIX,\n MULTIPLAYER_TRACE_DOC_PREFIX,\n MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX,\n} from './constants/constants.base'\nimport { getIdGenerator } from './sdk'\n\nexport class SessionRecorderIdGenerator extends RandomIdGenerator {\n sessionShortId: string\n sessionType: SessionType\n docSpanSampler: SessionRecorderTraceIdRatioBasedSampler\n\n generateLongId: () => string\n\n constructor({ autoDocTracesRatio = 0 } = {}) {\n super()\n\n this.docSpanSampler = new SessionRecorderTraceIdRatioBasedSampler(autoDocTracesRatio)\n\n this.generateLongId = getIdGenerator(16)\n this.sessionShortId = ''\n this.sessionType = SessionType.PLAIN\n\n this.generateTraceId = () => {\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 } else if (this._isDocTrace(traceId)) {\n return `${MULTIPLAYER_TRACE_DOC_PREFIX}${traceId.slice(MULTIPLAYER_TRACE_DOC_PREFIX.length, traceId.length)}`\n }\n\n return traceId\n }\n }\n\n setSessionId(\n sessionShortId: string,\n sessionType: SessionType = SessionType.PLAIN,\n ) {\n this.sessionShortId = sessionShortId\n this.sessionType = sessionType\n }\n\n _isDocTrace(traceId: string) {\n return this.docSpanSampler.shouldSample(\n undefined,\n traceId,\n ).decision === SamplingDecision.RECORD_AND_SAMPLED\n }\n}\n"]}
1
+ {"version":3,"file":"SessionRecorderIdGenerator.js","sourceRoot":"","sources":["../../src/SessionRecorderIdGenerator.ts"],"names":[],"mappings":";;;AAAA,kEAAiE;AACjE,iCAAoC;AACpC,+DAGmC;AACnC,+BAAsC;AAEtC,MAAa,0BAA2B,SAAQ,kCAAiB;IAM/D;QACE,KAAK,EAAE,CAAA;QAEP,IAAI,CAAC,cAAc,GAAG,IAAA,oBAAc,EAAC,EAAE,CAAC,CAAA;QACxC,IAAI,CAAC,cAAc,GAAG,EAAE,CAAA;QACxB,IAAI,CAAC,WAAW,GAAG,kBAAW,CAAC,KAAK,CAAA;QAEpC,IAAI,CAAC,eAAe,GAAG,GAAG,EAAE;YAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE,CAAA;YAErC,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;gBACxB,IAAI,iBAAiB,GAAW,EAAE,CAAA;gBAClC,QAAQ,IAAI,CAAC,WAAW,EAAE,CAAC;oBACzB,KAAK,kBAAW,CAAC,UAAU;wBACzB,iBAAiB,GAAG,0DAAyC,CAAA;wBAC7D,MAAK;oBACP;wBACE,iBAAiB,GAAG,+CAA8B,CAAA;gBACtD,CAAC;gBAED,MAAM,MAAM,GAAG,GAAG,iBAAiB,GAAG,IAAI,CAAC,cAAc,EAAE,CAAA;gBAE3D,MAAM,cAAc,GAAG,GAAG,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,CAAA;gBAErF,OAAO,cAAc,CAAA;YACvB,CAAC;YAED,OAAO,OAAO,CAAA;QAChB,CAAC,CAAA;IACH,CAAC;IAED,YAAY,CACV,cAAsB,EACtB,cAA2B,kBAAW,CAAC,KAAK;QAE5C,IAAI,CAAC,cAAc,GAAG,cAAc,CAAA;QACpC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAA;IAChC,CAAC;CACF;AA5CD,gEA4CC","sourcesContent":["import { RandomIdGenerator } 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 extends RandomIdGenerator {\n sessionShortId: string\n sessionType: SessionType\n\n generateLongId: () => string\n\n constructor() {\n super()\n\n this.generateLongId = getIdGenerator(16)\n this.sessionShortId = ''\n this.sessionType = SessionType.PLAIN\n\n this.generateTraceId = () => {\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\n setSessionId(\n sessionShortId: string,\n sessionType: SessionType = SessionType.PLAIN,\n ) {\n this.sessionShortId = sessionShortId\n this.sessionType = sessionType\n }\n}\n"]}
@@ -1,8 +1,17 @@
1
1
  import { ReadableSpan, SpanExporter } from '@opentelemetry/sdk-trace-base';
2
- import { OTLPExporterConfigBase, OTLPExporterBase } from '@opentelemetry/otlp-exporter-base';
3
- export interface SessionRecorderBrowserTraceExporterConfig extends OTLPExporterConfigBase {
2
+ export interface SessionRecorderBrowserTraceExporterConfig {
3
+ /** URL for the OTLP endpoint. Defaults to Multiplayer's default traces endpoint. */
4
+ url?: string;
4
5
  /** API key for authentication. Required. */
5
6
  apiKey: string;
7
+ /** Additional headers to include in requests */
8
+ headers?: Record<string, string>;
9
+ /** Request timeout in milliseconds */
10
+ timeoutMillis?: number;
11
+ /** Whether to use keep-alive connections */
12
+ keepAlive?: boolean;
13
+ /** Maximum number of concurrent requests */
14
+ concurrencyLimit?: number;
6
15
  /** Whether to use postMessage fallback for cross-origin requests */
7
16
  usePostMessageFallback?: boolean;
8
17
  /** PostMessage type identifier */
@@ -15,7 +24,8 @@ export interface SessionRecorderBrowserTraceExporterConfig extends OTLPExporterC
15
24
  * Exports traces via HTTP to Multiplayer's OTLP endpoint with browser-specific optimizations
16
25
  * Only exports spans with trace IDs starting with Multiplayer prefixes
17
26
  */
18
- export declare class SessionRecorderBrowserTraceExporter extends OTLPExporterBase<ReadableSpan[]> implements SpanExporter {
27
+ export declare class SessionRecorderBrowserTraceExporter implements SpanExporter {
28
+ private exporter;
19
29
  private usePostMessage;
20
30
  private readonly postMessageType;
21
31
  private readonly postMessageTargetOrigin;
@@ -27,5 +37,7 @@ export declare class SessionRecorderBrowserTraceExporter extends OTLPExporterBas
27
37
  shutdown(): Promise<void>;
28
38
  private exportViaPostMessage;
29
39
  private _serializeSpan;
40
+ private _createExporter;
41
+ setApiKey(apiKey: string): void;
30
42
  }
31
43
  //# sourceMappingURL=SessionRecorderBrowserTraceExporter.d.ts.map
@@ -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;AAC1E,OAAO,EACL,sBAAsB,EACtB,gBAAgB,EACjB,MAAM,mCAAmC,CAAA;AAU1C,MAAM,WAAW,yCACf,SAAQ,sBAAsB;IAC9B,4CAA4C;IAC5C,MAAM,EAAE,MAAM,CAAA;IACd,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,mCACX,SAAQ,gBAAgB,CAAC,YAAY,EAAE,CACvC,YAAW,YAAY;IAEvB,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,EAAE,yCAAyC;IA2FpD,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,cAAc,EAAE,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,GAAG,IAAI;IA+BvF,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAIlC,OAAO,CAAC,oBAAoB;IAqB5B,OAAO,CAAC,cAAc;CAwBvB"}
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,EAAE,MAAM,CAAA;IACd,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,EAAE,yCAAyC;IA2B7D,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;IAevB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;CAKhC"}
@@ -1,89 +1,26 @@
1
1
  "use strict";
2
- var __rest = (this && this.__rest) || function (s, e) {
3
- var t = {};
4
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
5
- t[p] = s[p];
6
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
7
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
8
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
9
- t[p[i]] = s[p[i]];
10
- }
11
- return t;
12
- };
13
2
  Object.defineProperty(exports, "__esModule", { value: true });
14
3
  exports.SessionRecorderBrowserTraceExporter = void 0;
15
- const otlp_exporter_base_1 = require("@opentelemetry/otlp-exporter-base");
16
- const browser_http_1 = require("@opentelemetry/otlp-exporter-base/browser-http");
4
+ const exporter_trace_otlp_http_1 = require("@opentelemetry/exporter-trace-otlp-http");
17
5
  const constants_base_1 = require("../constants/constants.base");
18
6
  /**
19
7
  * Browser-specific trace exporter for Session Recorder
20
8
  * Exports traces via HTTP to Multiplayer's OTLP endpoint with browser-specific optimizations
21
9
  * Only exports spans with trace IDs starting with Multiplayer prefixes
22
10
  */
23
- class SessionRecorderBrowserTraceExporter extends otlp_exporter_base_1.OTLPExporterBase {
11
+ class SessionRecorderBrowserTraceExporter {
24
12
  constructor(config) {
25
- const { url = constants_base_1.MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_HTTP_URL, apiKey, headers = {}, postMessageType = 'MULTIPLAYER_SESSION_DEBUGGER_LIB', postMessageTargetOrigin = '*' } = config, restConfig = __rest(config, ["url", "apiKey", "headers", "postMessageType", "postMessageTargetOrigin"]);
26
- const _config = Object.assign(Object.assign({}, restConfig), { url, headers: Object.assign({ 'Content-Type': 'application/x-protobuf', 'User-Agent': '@multiplayer-app/session-recorder-common/1.0.0', 'Authorization': apiKey }, headers) });
27
- super((0, browser_http_1.createLegacyOtlpBrowserExportDelegate)(_config, {
28
- serializeRequest: (spans) => {
29
- // Create a simple trace service request structure
30
- const request = {
31
- resourceSpans: spans.map(span => ({
32
- resource: {
33
- attributes: Object.entries(span.resource.attributes).map(([key, value]) => ({
34
- key,
35
- value: { stringValue: String(value) },
36
- })),
37
- },
38
- scopeSpans: [{
39
- spans: [{
40
- traceId: span.spanContext().traceId,
41
- spanId: span.spanContext().spanId,
42
- parentSpanId: span.spanContext().spanId, // Using spanId as fallback
43
- name: span.name,
44
- kind: span.kind,
45
- startTimeUnixNano: span.startTime[0] * 1e9 + span.startTime[1],
46
- endTimeUnixNano: span.endTime ? span.endTime[0] * 1e9 + span.endTime[1] : undefined,
47
- attributes: Object.entries(span.attributes).map(([key, value]) => ({
48
- key,
49
- value: { stringValue: String(value) },
50
- })),
51
- events: span.events.map(event => ({
52
- timeUnixNano: event.time[0] * 1e9 + event.time[1],
53
- name: event.name,
54
- attributes: Object.entries(event.attributes || {}).map(([key, value]) => ({
55
- key,
56
- value: { stringValue: String(value) },
57
- })),
58
- })),
59
- links: span.links.map(link => ({
60
- traceId: link.context.traceId,
61
- spanId: link.context.spanId,
62
- attributes: Object.entries(link.attributes || {}).map(([key, value]) => ({
63
- key,
64
- value: { stringValue: String(value) },
65
- })),
66
- })),
67
- status: {
68
- code: span.status.code,
69
- message: span.status.message || '',
70
- },
71
- }],
72
- }],
73
- })),
74
- };
75
- const encoder = new TextEncoder();
76
- return encoder.encode(JSON.stringify(request));
77
- },
78
- deserializeResponse: (arg) => {
79
- const decoder = new TextDecoder();
80
- return JSON.parse(decoder.decode(arg));
81
- },
82
- }, 'v1/traces', { 'Content-Type': 'application/json' }));
83
13
  this.usePostMessage = false;
84
- this.config = config;
14
+ const { url = constants_base_1.MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_HTTP_URL, apiKey, headers = {}, timeoutMillis = 30000, keepAlive = true, concurrencyLimit = 20, postMessageType = 'MULTIPLAYER_SESSION_DEBUGGER_LIB', postMessageTargetOrigin = '*', } = config;
15
+ this.config = Object.assign(Object.assign({}, config), { url,
16
+ apiKey,
17
+ headers,
18
+ timeoutMillis,
19
+ keepAlive,
20
+ concurrencyLimit });
85
21
  this.postMessageType = postMessageType;
86
22
  this.postMessageTargetOrigin = postMessageTargetOrigin;
23
+ this.exporter = this._createExporter();
87
24
  }
88
25
  export(spans, resultCallback) {
89
26
  // Filter spans to only include those with Multiplayer trace prefixes
@@ -101,7 +38,7 @@ class SessionRecorderBrowserTraceExporter extends otlp_exporter_base_1.OTLPExpor
101
38
  this.exportViaPostMessage(filteredSpans, resultCallback);
102
39
  return;
103
40
  }
104
- super.export(filteredSpans, (result) => {
41
+ this.exporter.export(filteredSpans, (result) => {
105
42
  if (result.code === 0) {
106
43
  resultCallback(result);
107
44
  }
@@ -115,7 +52,7 @@ class SessionRecorderBrowserTraceExporter extends otlp_exporter_base_1.OTLPExpor
115
52
  });
116
53
  }
117
54
  shutdown() {
118
- return Promise.resolve();
55
+ return this.exporter.shutdown();
119
56
  }
120
57
  exportViaPostMessage(spans, resultCallback) {
121
58
  if (typeof window === 'undefined') {
@@ -135,6 +72,7 @@ class SessionRecorderBrowserTraceExporter extends otlp_exporter_base_1.OTLPExpor
135
72
  }
136
73
  }
137
74
  _serializeSpan(span) {
75
+ var _a;
138
76
  const spanContext = span.spanContext();
139
77
  return {
140
78
  _spanContext: spanContext,
@@ -148,7 +86,7 @@ class SessionRecorderBrowserTraceExporter extends otlp_exporter_base_1.OTLPExpor
148
86
  startTime: span.startTime,
149
87
  duration: span.duration,
150
88
  attributes: span.attributes,
151
- parentSpanId: spanContext.spanId, // Using spanId as parentSpanId is not available in newer versions
89
+ parentSpanId: (_a = span.parentSpanContext) === null || _a === void 0 ? void 0 : _a.spanId,
152
90
  droppedAttributesCount: span.droppedAttributesCount,
153
91
  droppedEventsCount: span.droppedEventsCount,
154
92
  droppedLinksCount: span.droppedLinksCount,
@@ -158,6 +96,19 @@ class SessionRecorderBrowserTraceExporter extends otlp_exporter_base_1.OTLPExpor
158
96
  },
159
97
  };
160
98
  }
99
+ _createExporter() {
100
+ return new exporter_trace_otlp_http_1.OTLPTraceExporter({
101
+ url: this.config.url,
102
+ headers: Object.assign({ 'Content-Type': 'application/x-protobuf', 'User-Agent': '@multiplayer-app/session-recorder-common/1.0.0', 'authorization': this.config.apiKey }, (this.config.headers || {})),
103
+ timeoutMillis: this.config.timeoutMillis,
104
+ keepAlive: this.config.keepAlive,
105
+ concurrencyLimit: this.config.concurrencyLimit,
106
+ });
107
+ }
108
+ setApiKey(apiKey) {
109
+ this.config.apiKey = apiKey;
110
+ this.exporter = this._createExporter();
111
+ }
161
112
  }
162
113
  exports.SessionRecorderBrowserTraceExporter = SessionRecorderBrowserTraceExporter;
163
114
  //# sourceMappingURL=SessionRecorderBrowserTraceExporter.js.map
@@ -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 {\n OTLPExporterConfigBase,\n OTLPExporterBase,\n} from '@opentelemetry/otlp-exporter-base'\nimport {\n createLegacyOtlpBrowserExportDelegate,\n} from '@opentelemetry/otlp-exporter-base/browser-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 extends OTLPExporterConfigBase {\n /** API key for authentication. Required. */\n apiKey: string\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\n extends OTLPExporterBase<ReadableSpan[]>\n implements SpanExporter {\n\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 postMessageType = 'MULTIPLAYER_SESSION_DEBUGGER_LIB',\n postMessageTargetOrigin = '*',\n ...restConfig\n } = config\n\n const _config = {\n ...restConfig,\n url,\n headers: {\n 'Content-Type': 'application/x-protobuf',\n 'User-Agent': '@multiplayer-app/session-recorder-common/1.0.0',\n 'Authorization': apiKey,\n ...headers,\n },\n }\n\n super(\n createLegacyOtlpBrowserExportDelegate(\n _config,\n {\n serializeRequest: (spans: ReadableSpan[]) => {\n // Create a simple trace service request structure\n const request = {\n resourceSpans: spans.map(span => ({\n resource: {\n attributes: Object.entries(span.resource.attributes).map(([key, value]) => ({\n key,\n value: { stringValue: String(value) },\n })),\n },\n scopeSpans: [{\n spans: [{\n traceId: span.spanContext().traceId,\n spanId: span.spanContext().spanId,\n parentSpanId: span.spanContext().spanId, // Using spanId as fallback\n name: span.name,\n kind: span.kind,\n startTimeUnixNano: span.startTime[0] * 1e9 + span.startTime[1],\n endTimeUnixNano: span.endTime ? span.endTime[0] * 1e9 + span.endTime[1] : undefined,\n attributes: Object.entries(span.attributes).map(([key, value]) => ({\n key,\n value: { stringValue: String(value) },\n })),\n events: span.events.map(event => ({\n timeUnixNano: event.time[0] * 1e9 + event.time[1],\n name: event.name,\n attributes: Object.entries(event.attributes || {}).map(([key, value]) => ({\n key,\n value: { stringValue: String(value) },\n })),\n })),\n links: span.links.map(link => ({\n traceId: link.context.traceId,\n spanId: link.context.spanId,\n attributes: Object.entries(link.attributes || {}).map(([key, value]) => ({\n key,\n value: { stringValue: String(value) },\n })),\n })),\n status: {\n code: span.status.code,\n message: span.status.message || '',\n },\n }],\n }],\n })),\n }\n\n const encoder = new TextEncoder()\n return encoder.encode(JSON.stringify(request))\n },\n deserializeResponse: (arg: Uint8Array) => {\n const decoder = new TextDecoder()\n return JSON.parse(decoder.decode(arg))\n },\n },\n 'v1/traces',\n { 'Content-Type': 'application/json' },\n ),\n )\n\n this.config = config\n this.postMessageType = postMessageType\n this.postMessageTargetOrigin = postMessageTargetOrigin\n }\n\n override 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 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 super.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 override shutdown(): Promise<void> {\n return Promise.resolve()\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: spanContext.spanId, // Using spanId as parentSpanId is not available in newer versions\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"]}
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/x-protobuf',\n 'User-Agent': '@multiplayer-app/session-recorder-common/1.0.0',\n '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,6 +1,5 @@
1
1
  export * from './constants/constants.browser';
2
2
  export { SessionRecorderIdGenerator } from './SessionRecorderIdGenerator';
3
- export { SessionRecorderJsonTraceSerializer } from './SessionRecorderJsonTraceSerializer';
4
3
  export { SessionRecorderTraceIdRatioBasedSampler } from './SessionRecorderTraceIdRatioBasedSampler';
5
4
  export * as SessionRecorderSdk from './sdk';
6
5
  export * from './type';
@@ -1 +1 @@
1
- {"version":3,"file":"index-browser.d.ts","sourceRoot":"","sources":["../../src/index-browser.ts"],"names":[],"mappings":"AAAA,cAAc,+BAA+B,CAAA;AAC7C,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAA;AACzE,OAAO,EAAE,kCAAkC,EAAE,MAAM,sCAAsC,CAAA;AACzF,OAAO,EAAE,uCAAuC,EAAE,MAAM,2CAA2C,CAAA;AACnG,OAAO,KAAK,kBAAkB,MAAM,OAAO,CAAA;AAC3C,cAAc,QAAQ,CAAA;AACtB,cAAc,2BAA2B,CAAA"}
1
+ {"version":3,"file":"index-browser.d.ts","sourceRoot":"","sources":["../../src/index-browser.ts"],"names":[],"mappings":"AAAA,cAAc,+BAA+B,CAAA;AAC7C,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAA;AACzE,OAAO,EAAE,uCAAuC,EAAE,MAAM,2CAA2C,CAAA;AACnG,OAAO,KAAK,kBAAkB,MAAM,OAAO,CAAA;AAC3C,cAAc,QAAQ,CAAA;AACtB,cAAc,2BAA2B,CAAA"}
@@ -14,12 +14,10 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.SessionRecorderSdk = exports.SessionRecorderTraceIdRatioBasedSampler = exports.SessionRecorderJsonTraceSerializer = exports.SessionRecorderIdGenerator = void 0;
17
+ exports.SessionRecorderSdk = exports.SessionRecorderTraceIdRatioBasedSampler = exports.SessionRecorderIdGenerator = void 0;
18
18
  __exportStar(require("./constants/constants.browser"), exports);
19
19
  var SessionRecorderIdGenerator_1 = require("./SessionRecorderIdGenerator");
20
20
  Object.defineProperty(exports, "SessionRecorderIdGenerator", { enumerable: true, get: function () { return SessionRecorderIdGenerator_1.SessionRecorderIdGenerator; } });
21
- var SessionRecorderJsonTraceSerializer_1 = require("./SessionRecorderJsonTraceSerializer");
22
- Object.defineProperty(exports, "SessionRecorderJsonTraceSerializer", { enumerable: true, get: function () { return SessionRecorderJsonTraceSerializer_1.SessionRecorderJsonTraceSerializer; } });
23
21
  var SessionRecorderTraceIdRatioBasedSampler_1 = require("./SessionRecorderTraceIdRatioBasedSampler");
24
22
  Object.defineProperty(exports, "SessionRecorderTraceIdRatioBasedSampler", { enumerable: true, get: function () { return SessionRecorderTraceIdRatioBasedSampler_1.SessionRecorderTraceIdRatioBasedSampler; } });
25
23
  exports.SessionRecorderSdk = require("./sdk");
@@ -1 +1 @@
1
- {"version":3,"file":"index-browser.js","sourceRoot":"","sources":["../../src/index-browser.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,gEAA6C;AAC7C,2EAAyE;AAAhE,wIAAA,0BAA0B,OAAA;AACnC,2FAAyF;AAAhF,wJAAA,kCAAkC,OAAA;AAC3C,qGAAmG;AAA1F,kKAAA,uCAAuC,OAAA;AAChD,8CAA2C;AAC3C,yCAAsB;AACtB,4DAAyC","sourcesContent":["export * from './constants/constants.browser'\nexport { SessionRecorderIdGenerator } from './SessionRecorderIdGenerator'\nexport { SessionRecorderJsonTraceSerializer } from './SessionRecorderJsonTraceSerializer'\nexport { SessionRecorderTraceIdRatioBasedSampler } from './SessionRecorderTraceIdRatioBasedSampler'\nexport * as SessionRecorderSdk from './sdk'\nexport * from './type'\nexport * from './exporters/index-browser'\n"]}
1
+ {"version":3,"file":"index-browser.js","sourceRoot":"","sources":["../../src/index-browser.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,gEAA6C;AAC7C,2EAAyE;AAAhE,wIAAA,0BAA0B,OAAA;AACnC,qGAAmG;AAA1F,kKAAA,uCAAuC,OAAA;AAChD,8CAA2C;AAC3C,yCAAsB;AACtB,4DAAyC","sourcesContent":["export * from './constants/constants.browser'\nexport { SessionRecorderIdGenerator } from './SessionRecorderIdGenerator'\nexport { SessionRecorderTraceIdRatioBasedSampler } from './SessionRecorderTraceIdRatioBasedSampler'\nexport * as SessionRecorderSdk from './sdk'\nexport * from './type'\nexport * from './exporters/index-browser'\n"]}
@@ -1,7 +1,6 @@
1
1
  export * from './constants/constants.node';
2
2
  export { SessionRecorderHttpInstrumentationHooksNode } from './instrumentations/SessionRecorderHttpInstrumentationHooksNode';
3
3
  export { SessionRecorderIdGenerator } from './SessionRecorderIdGenerator';
4
- export { SessionRecorderJsonTraceSerializer } from './SessionRecorderJsonTraceSerializer';
5
4
  export { SessionRecorderTraceIdRatioBasedSampler } from './SessionRecorderTraceIdRatioBasedSampler';
6
5
  export * as SessionRecorderSdk from './sdk';
7
6
  export * from './type';
@@ -1 +1 @@
1
- {"version":3,"file":"index-node.d.ts","sourceRoot":"","sources":["../../src/index-node.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAA;AAC1C,OAAO,EAAE,2CAA2C,EAAE,MAAM,gEAAgE,CAAA;AAC5H,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAA;AACzE,OAAO,EAAE,kCAAkC,EAAE,MAAM,sCAAsC,CAAA;AACzF,OAAO,EAAE,uCAAuC,EAAE,MAAM,2CAA2C,CAAA;AACnG,OAAO,KAAK,kBAAkB,MAAM,OAAO,CAAA;AAC3C,cAAc,QAAQ,CAAA;AACtB,cAAc,wBAAwB,CAAA"}
1
+ {"version":3,"file":"index-node.d.ts","sourceRoot":"","sources":["../../src/index-node.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAA;AAC1C,OAAO,EAAE,2CAA2C,EAAE,MAAM,gEAAgE,CAAA;AAC5H,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAA;AACzE,OAAO,EAAE,uCAAuC,EAAE,MAAM,2CAA2C,CAAA;AACnG,OAAO,KAAK,kBAAkB,MAAM,OAAO,CAAA;AAC3C,cAAc,QAAQ,CAAA;AACtB,cAAc,wBAAwB,CAAA"}
@@ -14,14 +14,12 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.SessionRecorderSdk = exports.SessionRecorderTraceIdRatioBasedSampler = exports.SessionRecorderJsonTraceSerializer = exports.SessionRecorderIdGenerator = exports.SessionRecorderHttpInstrumentationHooksNode = void 0;
17
+ exports.SessionRecorderSdk = exports.SessionRecorderTraceIdRatioBasedSampler = exports.SessionRecorderIdGenerator = exports.SessionRecorderHttpInstrumentationHooksNode = void 0;
18
18
  __exportStar(require("./constants/constants.node"), exports);
19
19
  var SessionRecorderHttpInstrumentationHooksNode_1 = require("./instrumentations/SessionRecorderHttpInstrumentationHooksNode");
20
20
  Object.defineProperty(exports, "SessionRecorderHttpInstrumentationHooksNode", { enumerable: true, get: function () { return SessionRecorderHttpInstrumentationHooksNode_1.SessionRecorderHttpInstrumentationHooksNode; } });
21
21
  var SessionRecorderIdGenerator_1 = require("./SessionRecorderIdGenerator");
22
22
  Object.defineProperty(exports, "SessionRecorderIdGenerator", { enumerable: true, get: function () { return SessionRecorderIdGenerator_1.SessionRecorderIdGenerator; } });
23
- var SessionRecorderJsonTraceSerializer_1 = require("./SessionRecorderJsonTraceSerializer");
24
- Object.defineProperty(exports, "SessionRecorderJsonTraceSerializer", { enumerable: true, get: function () { return SessionRecorderJsonTraceSerializer_1.SessionRecorderJsonTraceSerializer; } });
25
23
  var SessionRecorderTraceIdRatioBasedSampler_1 = require("./SessionRecorderTraceIdRatioBasedSampler");
26
24
  Object.defineProperty(exports, "SessionRecorderTraceIdRatioBasedSampler", { enumerable: true, get: function () { return SessionRecorderTraceIdRatioBasedSampler_1.SessionRecorderTraceIdRatioBasedSampler; } });
27
25
  exports.SessionRecorderSdk = require("./sdk");
@@ -1 +1 @@
1
- {"version":3,"file":"index-node.js","sourceRoot":"","sources":["../../src/index-node.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,6DAA0C;AAC1C,8HAA4H;AAAnH,0KAAA,2CAA2C,OAAA;AACpD,2EAAyE;AAAhE,wIAAA,0BAA0B,OAAA;AACnC,2FAAyF;AAAhF,wJAAA,kCAAkC,OAAA;AAC3C,qGAAmG;AAA1F,kKAAA,uCAAuC,OAAA;AAChD,8CAA2C;AAC3C,yCAAsB;AACtB,yDAAsC","sourcesContent":["export * from './constants/constants.node'\nexport { SessionRecorderHttpInstrumentationHooksNode } from './instrumentations/SessionRecorderHttpInstrumentationHooksNode'\nexport { SessionRecorderIdGenerator } from './SessionRecorderIdGenerator'\nexport { SessionRecorderJsonTraceSerializer } from './SessionRecorderJsonTraceSerializer'\nexport { SessionRecorderTraceIdRatioBasedSampler } from './SessionRecorderTraceIdRatioBasedSampler'\nexport * as SessionRecorderSdk from './sdk'\nexport * from './type'\nexport * from './exporters/index-node'\n"]}
1
+ {"version":3,"file":"index-node.js","sourceRoot":"","sources":["../../src/index-node.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,6DAA0C;AAC1C,8HAA4H;AAAnH,0KAAA,2CAA2C,OAAA;AACpD,2EAAyE;AAAhE,wIAAA,0BAA0B,OAAA;AACnC,qGAAmG;AAA1F,kKAAA,uCAAuC,OAAA;AAChD,8CAA2C;AAC3C,yCAAsB;AACtB,yDAAsC","sourcesContent":["export * from './constants/constants.node'\nexport { SessionRecorderHttpInstrumentationHooksNode } from './instrumentations/SessionRecorderHttpInstrumentationHooksNode'\nexport { SessionRecorderIdGenerator } from './SessionRecorderIdGenerator'\nexport { SessionRecorderTraceIdRatioBasedSampler } from './SessionRecorderTraceIdRatioBasedSampler'\nexport * as SessionRecorderSdk from './sdk'\nexport * from './type'\nexport * from './exporters/index-node'\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@multiplayer-app/session-recorder-common",
3
- "version": "1.0.1-alpha.0",
3
+ "version": "1.0.1-alpha.2",
4
4
  "description": "Multiplayer Fullstack Session Recorder - opentelemetry",
5
5
  "author": {
6
6
  "name": "Multiplayer Software, Inc.",
@@ -37,13 +37,13 @@
37
37
  "@opentelemetry/api": "^1.9.0"
38
38
  },
39
39
  "dependencies": {
40
- "@opentelemetry/core": "^1.29.0",
40
+ "@opentelemetry/core": "^2.0.1",
41
+ "@opentelemetry/otlp-transformer": "^0.203.0",
41
42
  "@opentelemetry/exporter-logs-otlp-http": "^0.203.0",
42
43
  "@opentelemetry/exporter-logs-otlp-proto": "^0.203.0",
43
44
  "@opentelemetry/exporter-trace-otlp-http": "^0.203.0",
44
45
  "@opentelemetry/exporter-trace-otlp-proto": "^0.203.0",
45
46
  "@opentelemetry/otlp-exporter-base": "^0.203.0",
46
- "@opentelemetry/otlp-transformer": "^0.203.0",
47
47
  "@opentelemetry/resources": "^2.0.1",
48
48
  "@opentelemetry/sdk-trace-base": "^2.0.1",
49
49
  "@opentelemetry/semantic-conventions": "^1.36.0",
@@ -1,14 +1,7 @@
1
- import {
2
- RandomIdGenerator,
3
- SamplingDecision,
4
- } from '@opentelemetry/sdk-trace-base'
1
+ import { RandomIdGenerator } from '@opentelemetry/sdk-trace-base'
5
2
  import { SessionType } from './type'
6
- import {
7
- SessionRecorderTraceIdRatioBasedSampler,
8
- } from './SessionRecorderTraceIdRatioBasedSampler'
9
3
  import {
10
4
  MULTIPLAYER_TRACE_DEBUG_PREFIX,
11
- MULTIPLAYER_TRACE_DOC_PREFIX,
12
5
  MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX,
13
6
  } from './constants/constants.base'
14
7
  import { getIdGenerator } from './sdk'
@@ -16,15 +9,12 @@ import { getIdGenerator } from './sdk'
16
9
  export class SessionRecorderIdGenerator extends RandomIdGenerator {
17
10
  sessionShortId: string
18
11
  sessionType: SessionType
19
- docSpanSampler: SessionRecorderTraceIdRatioBasedSampler
20
12
 
21
13
  generateLongId: () => string
22
14
 
23
- constructor({ autoDocTracesRatio = 0 } = {}) {
15
+ constructor() {
24
16
  super()
25
17
 
26
- this.docSpanSampler = new SessionRecorderTraceIdRatioBasedSampler(autoDocTracesRatio)
27
-
28
18
  this.generateLongId = getIdGenerator(16)
29
19
  this.sessionShortId = ''
30
20
  this.sessionType = SessionType.PLAIN
@@ -47,8 +37,6 @@ export class SessionRecorderIdGenerator extends RandomIdGenerator {
47
37
  const sessionTraceId = `${prefix}${traceId.substring(prefix.length, traceId.length)}`
48
38
 
49
39
  return sessionTraceId
50
- } else if (this._isDocTrace(traceId)) {
51
- return `${MULTIPLAYER_TRACE_DOC_PREFIX}${traceId.slice(MULTIPLAYER_TRACE_DOC_PREFIX.length, traceId.length)}`
52
40
  }
53
41
 
54
42
  return traceId
@@ -62,11 +50,4 @@ export class SessionRecorderIdGenerator extends RandomIdGenerator {
62
50
  this.sessionShortId = sessionShortId
63
51
  this.sessionType = sessionType
64
52
  }
65
-
66
- _isDocTrace(traceId: string) {
67
- return this.docSpanSampler.shouldSample(
68
- undefined,
69
- traceId,
70
- ).decision === SamplingDecision.RECORD_AND_SAMPLED
71
- }
72
53
  }