@multiplayer-app/session-recorder-common 1.3.27 → 1.3.28

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/SessionRecorderTraceIdRatioBasedSampler.d.ts +2 -1
  2. package/dist/esm/SessionRecorderTraceIdRatioBasedSampler.d.ts.map +1 -1
  3. package/dist/esm/SessionRecorderTraceIdRatioBasedSampler.js +10 -5
  4. package/dist/esm/SessionRecorderTraceIdRatioBasedSampler.js.map +1 -1
  5. package/dist/esm/exporters/SessionRecorderBrowserTraceExporter.d.ts +6 -2
  6. package/dist/esm/exporters/SessionRecorderBrowserTraceExporter.d.ts.map +1 -1
  7. package/dist/esm/exporters/SessionRecorderBrowserTraceExporter.js +57 -21
  8. package/dist/esm/exporters/SessionRecorderBrowserTraceExporter.js.map +1 -1
  9. package/dist/esm/sdk/capture-exception.d.ts +1 -1
  10. package/dist/esm/sdk/capture-exception.d.ts.map +1 -1
  11. package/dist/esm/sdk/capture-exception.js +59 -5
  12. package/dist/esm/sdk/capture-exception.js.map +1 -1
  13. package/dist/esm/sdk/index.d.ts +1 -0
  14. package/dist/esm/sdk/index.d.ts.map +1 -1
  15. package/dist/esm/sdk/index.js +1 -0
  16. package/dist/esm/sdk/index.js.map +1 -1
  17. package/dist/esm/sdk/set-resource-attributes.d.ts +3 -0
  18. package/dist/esm/sdk/set-resource-attributes.d.ts.map +1 -0
  19. package/dist/esm/sdk/set-resource-attributes.js +8 -0
  20. package/dist/esm/sdk/set-resource-attributes.js.map +1 -0
  21. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  22. package/dist/esnext/SessionRecorderTraceIdRatioBasedSampler.d.ts +2 -1
  23. package/dist/esnext/SessionRecorderTraceIdRatioBasedSampler.d.ts.map +1 -1
  24. package/dist/esnext/SessionRecorderTraceIdRatioBasedSampler.js +10 -5
  25. package/dist/esnext/SessionRecorderTraceIdRatioBasedSampler.js.map +1 -1
  26. package/dist/esnext/exporters/SessionRecorderBrowserTraceExporter.d.ts +6 -2
  27. package/dist/esnext/exporters/SessionRecorderBrowserTraceExporter.d.ts.map +1 -1
  28. package/dist/esnext/exporters/SessionRecorderBrowserTraceExporter.js +57 -20
  29. package/dist/esnext/exporters/SessionRecorderBrowserTraceExporter.js.map +1 -1
  30. package/dist/esnext/sdk/capture-exception.d.ts +1 -1
  31. package/dist/esnext/sdk/capture-exception.d.ts.map +1 -1
  32. package/dist/esnext/sdk/capture-exception.js +30 -5
  33. package/dist/esnext/sdk/capture-exception.js.map +1 -1
  34. package/dist/esnext/sdk/index.d.ts +1 -0
  35. package/dist/esnext/sdk/index.d.ts.map +1 -1
  36. package/dist/esnext/sdk/index.js +1 -0
  37. package/dist/esnext/sdk/index.js.map +1 -1
  38. package/dist/esnext/sdk/set-resource-attributes.d.ts +3 -0
  39. package/dist/esnext/sdk/set-resource-attributes.d.ts.map +1 -0
  40. package/dist/esnext/sdk/set-resource-attributes.js +8 -0
  41. package/dist/esnext/sdk/set-resource-attributes.js.map +1 -0
  42. package/dist/esnext/tsconfig.esnext.tsbuildinfo +1 -1
  43. package/dist/src/SessionRecorderTraceIdRatioBasedSampler.d.ts +2 -1
  44. package/dist/src/SessionRecorderTraceIdRatioBasedSampler.d.ts.map +1 -1
  45. package/dist/src/SessionRecorderTraceIdRatioBasedSampler.js +8 -2
  46. package/dist/src/SessionRecorderTraceIdRatioBasedSampler.js.map +1 -1
  47. package/dist/src/exporters/SessionRecorderBrowserTraceExporter.d.ts +6 -2
  48. package/dist/src/exporters/SessionRecorderBrowserTraceExporter.d.ts.map +1 -1
  49. package/dist/src/exporters/SessionRecorderBrowserTraceExporter.js +56 -19
  50. package/dist/src/exporters/SessionRecorderBrowserTraceExporter.js.map +1 -1
  51. package/dist/src/sdk/capture-exception.d.ts +1 -1
  52. package/dist/src/sdk/capture-exception.d.ts.map +1 -1
  53. package/dist/src/sdk/capture-exception.js +30 -5
  54. package/dist/src/sdk/capture-exception.js.map +1 -1
  55. package/dist/src/sdk/index.d.ts +1 -0
  56. package/dist/src/sdk/index.d.ts.map +1 -1
  57. package/dist/src/sdk/index.js +1 -0
  58. package/dist/src/sdk/index.js.map +1 -1
  59. package/dist/src/sdk/set-resource-attributes.d.ts +3 -0
  60. package/dist/src/sdk/set-resource-attributes.d.ts.map +1 -0
  61. package/dist/src/sdk/set-resource-attributes.js +13 -0
  62. package/dist/src/sdk/set-resource-attributes.js.map +1 -0
  63. package/package.json +1 -1
  64. package/src/SessionRecorderTraceIdRatioBasedSampler.ts +29 -4
  65. package/src/exporters/SessionRecorderBrowserTraceExporter.ts +57 -24
  66. package/src/sdk/capture-exception.ts +49 -4
  67. package/src/sdk/index.ts +1 -0
  68. package/src/sdk/set-resource-attributes.ts +9 -0
@@ -1,9 +1,10 @@
1
+ import { Context, SpanKind, Attributes, Link } from '@opentelemetry/api';
1
2
  import { Sampler, SamplingResult } from '@opentelemetry/sdk-trace-base';
2
3
  export declare class SessionRecorderTraceIdRatioBasedSampler implements Sampler {
3
4
  private readonly _ratio;
4
5
  private _upperBound;
5
6
  constructor(_ratio?: number);
6
- shouldSample(context: unknown, traceId: string): SamplingResult;
7
+ shouldSample(context: Context, traceId: string, spanName: string, spanKind: SpanKind, attributes: Attributes, links: Link[]): SamplingResult;
7
8
  toString(): string;
8
9
  private _normalize;
9
10
  private _accumulate;
@@ -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;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
+ {"version":3,"file":"SessionRecorderTraceIdRatioBasedSampler.d.ts","sourceRoot":"","sources":["../../src/SessionRecorderTraceIdRatioBasedSampler.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,OAAO,EACP,QAAQ,EACR,UAAU,EACV,IAAI,EACL,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EACL,OAAO,EAEP,cAAc,EACf,MAAM,+BAA+B,CAAA;AAatC,qBAAa,uCAAwC,YAAW,OAAO;IAGzD,OAAO,CAAC,QAAQ,CAAC,MAAM;IAFnC,OAAO,CAAC,WAAW,CAAQ;gBAEE,MAAM,GAAE,MAAU;IAK/C,YAAY,CACV,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,IAAI,EAAE,GACZ,cAAc;IA8BjB,QAAQ,IAAI,MAAM;IAIlB,OAAO,CAAC,UAAU;IAKlB,OAAO,CAAC,WAAW;CASpB"}
@@ -1,7 +1,7 @@
1
- import { isValidTraceId } from '@opentelemetry/api';
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,
4
- // MULTIPLAYER_TRACE_SESSION_CACHE_PREFIX,
3
+ import { ATTR_EXCEPTION_MESSAGE, ATTR_EXCEPTION_STACKTRACE, ATTR_EXCEPTION_TYPE, } from '@opentelemetry/semantic-conventions';
4
+ import { MULTIPLAYER_TRACE_DEBUG_PREFIX, MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX, MULTIPLAYER_TRACE_SESSION_CACHE_PREFIX,
5
5
  // MULTIPLAYER_TRACE_CONTINUOUS_SESSION_CACHE_PREFIX,
6
6
  } from './constants/constants.base';
7
7
  var SessionRecorderTraceIdRatioBasedSampler = /** @class */ (function () {
@@ -11,10 +11,15 @@ var SessionRecorderTraceIdRatioBasedSampler = /** @class */ (function () {
11
11
  this._ratio = this._normalize(_ratio);
12
12
  this._upperBound = Math.floor(this._ratio * 0xffffffff);
13
13
  }
14
- SessionRecorderTraceIdRatioBasedSampler.prototype.shouldSample = function (context, traceId) {
14
+ SessionRecorderTraceIdRatioBasedSampler.prototype.shouldSample = function (context, traceId, spanName, spanKind, attributes, links) {
15
+ if (attributes[ATTR_EXCEPTION_MESSAGE] || attributes[ATTR_EXCEPTION_STACKTRACE] || attributes[ATTR_EXCEPTION_TYPE]) {
16
+ return {
17
+ decision: SamplingDecision.RECORD_AND_SAMPLED,
18
+ };
19
+ }
15
20
  if (traceId.startsWith(MULTIPLAYER_TRACE_DEBUG_PREFIX)
16
21
  || traceId.startsWith(MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX)
17
- // || traceId.startsWith(MULTIPLAYER_TRACE_SESSION_CACHE_PREFIX)
22
+ || traceId.startsWith(MULTIPLAYER_TRACE_SESSION_CACHE_PREFIX)
18
23
  // || traceId.startsWith(MULTIPLAYER_TRACE_CONTINUOUS_SESSION_CACHE_PREFIX)
19
24
  ) {
20
25
  return {
@@ -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;AACzC,0CAA0C;AAC1C,qDAAqD;EACtD,MAAM,4BAA4B,CAAA;AAEnC;IAGE,iDAA6B,MAAkB;QAAlB,uBAAA,EAAA,UAAkB;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,8DAAY,GAAZ,UAAa,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,UAAA,EAAE,CAAA;IACrB,CAAC;IAED,0DAAQ,GAAR;QACE,OAAO,kDAA2C,IAAI,CAAC,MAAM,MAAG,CAAA;IAClE,CAAC;IAEO,4DAAU,GAAlB,UAAmB,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,6DAAW,GAAnB,UAAoB,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,IAAM,GAAG,GAAG,CAAC,GAAG,CAAC,CAAA;YACjB,IAAM,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;IACH,8CAAC;AAAD,CAAC,AAlDD,IAkDC","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
+ {"version":3,"file":"SessionRecorderTraceIdRatioBasedSampler.js","sourceRoot":"","sources":["../../src/SessionRecorderTraceIdRatioBasedSampler.ts"],"names":[],"mappings":"AACA,OAAO,EACL,cAAc,GAKf,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAEL,gBAAgB,GAEjB,MAAM,+BAA+B,CAAA;AACtC,OAAO,EACL,sBAAsB,EACtB,yBAAyB,EACzB,mBAAmB,GACpB,MAAM,qCAAqC,CAAA;AAC5C,OAAO,EACL,8BAA8B,EAC9B,yCAAyC,EACzC,sCAAsC;AACtC,qDAAqD;EACtD,MAAM,4BAA4B,CAAA;AAEnC;IAGE,iDAA6B,MAAkB;QAAlB,uBAAA,EAAA,UAAkB;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,8DAAY,GAAZ,UACE,OAAgB,EAChB,OAAe,EACf,QAAgB,EAChB,QAAkB,EAClB,UAAsB,EACtB,KAAa;QAEb,IAAI,UAAU,CAAC,sBAAsB,CAAC,IAAI,UAAU,CAAC,yBAAyB,CAAC,IAAI,UAAU,CAAC,mBAAmB,CAAC,EAAE,CAAC;YACnH,OAAO;gBACL,QAAQ,EAAE,gBAAgB,CAAC,kBAAkB;aAC9C,CAAA;QACH,CAAC;QAED,IACE,OAAO,CAAC,UAAU,CAAC,8BAA8B,CAAC;eAC/C,OAAO,CAAC,UAAU,CAAC,yCAAyC,CAAC;eAC7D,OAAO,CAAC,UAAU,CAAC,sCAAsC,CAAC;QAC7D,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,UAAA,EAAE,CAAA;IACrB,CAAC;IAED,0DAAQ,GAAR;QACE,OAAO,kDAA2C,IAAI,CAAC,MAAM,MAAG,CAAA;IAClE,CAAC;IAEO,4DAAU,GAAlB,UAAmB,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,6DAAW,GAAnB,UAAoB,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,IAAM,GAAG,GAAG,CAAC,GAAG,CAAC,CAAA;YACjB,IAAM,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;IACH,8CAAC;AAAD,CAAC,AA/DD,IA+DC","sourcesContent":["\nimport {\n isValidTraceId,\n Context,\n SpanKind,\n Attributes,\n Link,\n} from '@opentelemetry/api'\nimport {\n Sampler,\n SamplingDecision,\n SamplingResult,\n} from '@opentelemetry/sdk-trace-base'\nimport {\n ATTR_EXCEPTION_MESSAGE,\n ATTR_EXCEPTION_STACKTRACE,\n ATTR_EXCEPTION_TYPE,\n} from '@opentelemetry/semantic-conventions'\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(\n context: Context,\n traceId: string,\n spanName: string,\n spanKind: SpanKind,\n attributes: Attributes,\n links: Link[],\n ): SamplingResult {\n if (attributes[ATTR_EXCEPTION_MESSAGE] || attributes[ATTR_EXCEPTION_STACKTRACE] || attributes[ATTR_EXCEPTION_TYPE]) {\n return {\n decision: SamplingDecision.RECORD_AND_SAMPLED,\n }\n }\n\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,5 +1,4 @@
1
1
  import { ReadableSpan, SpanExporter } from '@opentelemetry/sdk-trace-base';
2
- import { ExportResult } from '@opentelemetry/core';
3
2
  export interface SessionRecorderBrowserTraceExporterConfig {
4
3
  /** URL for the OTLP endpoint. Defaults to Multiplayer's default traces endpoint. */
5
4
  url?: string;
@@ -32,11 +31,16 @@ export declare class SessionRecorderBrowserTraceExporter implements SpanExporter
32
31
  private readonly postMessageTargetOrigin;
33
32
  private readonly config;
34
33
  constructor(config?: SessionRecorderBrowserTraceExporterConfig);
34
+ _export(spans: ReadableSpan[], resultCallback: (result: {
35
+ code: number;
36
+ }) => void): void;
35
37
  export(spans: ReadableSpan[], resultCallback: (result: {
36
38
  code: number;
37
39
  }) => void): void;
40
+ exportBuffer(spans: ReadableSpan[], resultCallback: (result: {
41
+ code: number;
42
+ }) => void): void;
38
43
  shutdown(): Promise<void>;
39
- exportBuffer(spans: ReadableSpan[]): Promise<ExportResult | undefined>;
40
44
  private exportViaPostMessage;
41
45
  serializeSpan(span: ReadableSpan): any;
42
46
  private _createExporter;
@@ -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,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;IAQtC,OAAO,CAAC,eAAe;IAcvB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;CAIhC"}
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;AAU1E,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;IA0BlE,OAAO,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,cAAc,EAAE,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,GAAG,IAAI;IAwBxF,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,cAAc,EAAE,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,GAAG,IAAI;IAYvF,YAAY,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,cAAc,EAAE,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,GAAG,IAAI;IAQ7F,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAIzB,OAAO,CAAC,oBAAoB;IAqB5B,aAAa,CAAC,IAAI,EAAE,YAAY,GAAG,GAAG;IAuCtC,OAAO,CAAC,eAAe;IAcvB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;CAIhC"}
@@ -10,7 +10,7 @@ var __assign = (this && this.__assign) || function () {
10
10
  return __assign.apply(this, arguments);
11
11
  };
12
12
  import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
13
- import { MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_HTTP_URL, MULTIPLAYER_TRACE_DEBUG_PREFIX, MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX, } from '../constants/constants.base';
13
+ import { MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_HTTP_URL, MULTIPLAYER_TRACE_DEBUG_PREFIX, MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX, MULTIPLAYER_TRACE_SESSION_CACHE_PREFIX, } from '../constants/constants.base';
14
14
  /**
15
15
  * Browser-specific trace exporter for Session Recorder
16
16
  * Exports traces via HTTP to Multiplayer's OTLP endpoint with browser-specific optimizations
@@ -26,46 +26,48 @@ var SessionRecorderBrowserTraceExporter = /** @class */ (function () {
26
26
  this.postMessageTargetOrigin = postMessageTargetOrigin;
27
27
  this.exporter = this._createExporter();
28
28
  }
29
- SessionRecorderBrowserTraceExporter.prototype.export = function (spans, resultCallback) {
29
+ SessionRecorderBrowserTraceExporter.prototype._export = function (spans, resultCallback) {
30
30
  var _this = this;
31
- // Filter spans to only include those with Multiplayer trace prefixes
32
- var filteredSpans = spans.filter(function (span) {
33
- var traceId = span.spanContext().traceId;
34
- return (traceId.startsWith(MULTIPLAYER_TRACE_DEBUG_PREFIX) ||
35
- traceId.startsWith(MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX));
36
- });
37
31
  // Only proceed if there are filtered spans
38
- if (filteredSpans.length === 0) {
32
+ if (spans.length === 0) {
39
33
  resultCallback({ code: 0 });
40
34
  return;
41
35
  }
42
36
  if (this.usePostMessage) {
43
- this.exportViaPostMessage(filteredSpans, resultCallback);
37
+ this.exportViaPostMessage(spans, resultCallback);
44
38
  return;
45
39
  }
46
- this.exporter.export(filteredSpans, function (result) {
40
+ this.exporter.export(spans, function (result) {
47
41
  if (result.code === 0) {
48
42
  resultCallback(result);
49
43
  }
50
44
  else if (_this.config.usePostMessageFallback) {
51
45
  _this.usePostMessage = true;
52
- _this.exportViaPostMessage(filteredSpans, resultCallback);
46
+ _this.exportViaPostMessage(spans, resultCallback);
53
47
  }
54
48
  else {
55
49
  resultCallback(result);
56
50
  }
57
51
  });
58
52
  };
59
- SessionRecorderBrowserTraceExporter.prototype.shutdown = function () {
60
- return this.exporter.shutdown();
53
+ SessionRecorderBrowserTraceExporter.prototype.export = function (spans, resultCallback) {
54
+ // Filter spans to only include those with Multiplayer trace prefixes
55
+ var filteredSpans = spans.filter(function (span) {
56
+ var traceId = span.spanContext().traceId;
57
+ return (traceId.startsWith(MULTIPLAYER_TRACE_DEBUG_PREFIX) ||
58
+ traceId.startsWith(MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX));
59
+ });
60
+ this._export(filteredSpans, resultCallback);
61
61
  };
62
- SessionRecorderBrowserTraceExporter.prototype.exportBuffer = function (spans) {
63
- var _this = this;
64
- return new Promise(function (resolve) {
65
- _this.exporter.export(spans, function (result) {
66
- resolve(result);
67
- });
62
+ SessionRecorderBrowserTraceExporter.prototype.exportBuffer = function (spans, resultCallback) {
63
+ var filteredSpans = spans.filter(function (span) {
64
+ var traceId = span.spanContext().traceId;
65
+ return traceId.startsWith(MULTIPLAYER_TRACE_SESSION_CACHE_PREFIX);
68
66
  });
67
+ this._export(filteredSpans, resultCallback);
68
+ };
69
+ SessionRecorderBrowserTraceExporter.prototype.shutdown = function () {
70
+ return this.exporter.shutdown();
69
71
  };
70
72
  SessionRecorderBrowserTraceExporter.prototype.exportViaPostMessage = function (spans, resultCallback) {
71
73
  var _this = this;
@@ -86,8 +88,42 @@ var SessionRecorderBrowserTraceExporter = /** @class */ (function () {
86
88
  }
87
89
  };
88
90
  SessionRecorderBrowserTraceExporter.prototype.serializeSpan = function (span) {
91
+ var _a;
89
92
  var spanContext = span.spanContext();
90
- return __assign(__assign({}, span), { _spanContext: spanContext });
93
+ var instrumentationScope =
94
+ // OTel SDK (modern)
95
+ span.instrumentationScope ||
96
+ // Older SDKs
97
+ span.instrumentationLibrary || { name: 'unknown', version: undefined, schemaUrl: undefined };
98
+ var normalizedScope = {
99
+ name: (instrumentationScope === null || instrumentationScope === void 0 ? void 0 : instrumentationScope.name) || 'unknown',
100
+ version: instrumentationScope === null || instrumentationScope === void 0 ? void 0 : instrumentationScope.version,
101
+ schemaUrl: instrumentationScope === null || instrumentationScope === void 0 ? void 0 : instrumentationScope.schemaUrl,
102
+ };
103
+ return {
104
+ _spanContext: spanContext,
105
+ traceId: spanContext.traceId,
106
+ spanId: spanContext.spanId,
107
+ name: span.name,
108
+ kind: span.kind,
109
+ links: span.links,
110
+ ended: span.ended,
111
+ events: span.events,
112
+ status: span.status,
113
+ endTime: span.endTime,
114
+ startTime: span.startTime,
115
+ duration: span.duration,
116
+ attributes: span.attributes,
117
+ parentSpanId: (_a = span.parentSpanContext) === null || _a === void 0 ? void 0 : _a.spanId,
118
+ droppedAttributesCount: span.droppedAttributesCount,
119
+ droppedEventsCount: span.droppedEventsCount,
120
+ droppedLinksCount: span.droppedLinksCount,
121
+ instrumentationScope: normalizedScope,
122
+ resource: {
123
+ attributes: span.resource.attributes,
124
+ asyncAttributesPending: span.resource.asyncAttributesPending,
125
+ },
126
+ };
91
127
  };
92
128
  SessionRecorderBrowserTraceExporter.prototype._createExporter = function () {
93
129
  return new OTLPTraceExporter({
@@ -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 { 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 ...span,\n _spanContext: spanContext,\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"]}
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'\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 MULTIPLAYER_TRACE_SESSION_CACHE_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 _export(spans: ReadableSpan[], resultCallback: (result: { code: number }) => void): void {\n // Only proceed if there are filtered spans\n if (spans.length === 0) {\n resultCallback({ code: 0 })\n return\n }\n\n if (this.usePostMessage) {\n this.exportViaPostMessage(spans, resultCallback)\n return\n }\n\n this.exporter.export(spans, (result) => {\n if (result.code === 0) {\n resultCallback(result)\n } else if (this.config.usePostMessageFallback) {\n this.usePostMessage = true\n this.exportViaPostMessage(spans, resultCallback)\n } else {\n resultCallback(result)\n }\n })\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 this._export(filteredSpans, resultCallback)\n }\n\n exportBuffer(spans: ReadableSpan[], resultCallback: (result: { code: number }) => void): void {\n const filteredSpans = spans.filter((span) => {\n const traceId = span.spanContext().traceId\n return traceId.startsWith(MULTIPLAYER_TRACE_SESSION_CACHE_PREFIX)\n })\n this._export(filteredSpans, resultCallback)\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 serializeSpan(span: ReadableSpan): any {\n const spanContext = span.spanContext()\n const instrumentationScope: any =\n // OTel SDK (modern)\n (span as any).instrumentationScope ||\n // Older SDKs\n (span as any).instrumentationLibrary || { name: 'unknown', version: undefined, schemaUrl: undefined }\n\n const normalizedScope = {\n name: instrumentationScope?.name || 'unknown',\n version: instrumentationScope?.version,\n schemaUrl: instrumentationScope?.schemaUrl,\n }\n return {\n _spanContext: spanContext,\n traceId: spanContext.traceId,\n spanId: spanContext.spanId,\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 instrumentationScope: normalizedScope,\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 this.exporter = this._createExporter()\n }\n}\n"]}
@@ -3,5 +3,5 @@
3
3
  * @param {Error} error
4
4
  * @returns {void}
5
5
  */
6
- export declare const captureException: (error: Error) => void;
6
+ export declare const captureException: (error: Error, errorInfo?: Record<string, any>) => void;
7
7
  //# sourceMappingURL=capture-exception.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"capture-exception.d.ts","sourceRoot":"","sources":["../../../src/sdk/capture-exception.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,GAAI,OAAO,KAAK,SAW5C,CAAA"}
1
+ {"version":3,"file":"capture-exception.d.ts","sourceRoot":"","sources":["../../../src/sdk/capture-exception.ts"],"names":[],"mappings":"AAQA;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,GAC3B,OAAO,KAAK,EACZ,YAAY,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,SAgDhC,CAAA"}
@@ -1,19 +1,73 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ var __read = (this && this.__read) || function (o, n) {
13
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
14
+ if (!m) return o;
15
+ var i = m.call(o), r, ar = [], e;
16
+ try {
17
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
18
+ }
19
+ catch (error) { e = { error: error }; }
20
+ finally {
21
+ try {
22
+ if (r && !r.done && (m = i["return"])) m.call(i);
23
+ }
24
+ finally { if (e) throw e.error; }
25
+ }
26
+ return ar;
27
+ };
1
28
  import { context, trace, SpanStatusCode } from '@opentelemetry/api';
29
+ import { ATTR_EXCEPTION_MESSAGE, ATTR_EXCEPTION_STACKTRACE, ATTR_EXCEPTION_TYPE, } from '@opentelemetry/semantic-conventions';
30
+ import { getResourceAttributes } from './set-resource-attributes';
2
31
  /**
3
32
  * @description Add error to current span
4
33
  * @param {Error} error
5
34
  * @returns {void}
6
35
  */
7
- export var captureException = function (error) {
8
- if (!error)
9
- return;
10
- var span = trace.getSpan(context.active());
11
- if (!span)
36
+ export var captureException = function (error, errorInfo) {
37
+ var _a, _b;
38
+ if (!error) {
12
39
  return;
40
+ }
41
+ var activeContext = context.active();
42
+ var span = trace.getSpan(activeContext);
43
+ var isNewSpan = false;
44
+ if (!span || !span.isRecording()) {
45
+ span = trace.getTracer('exception').startSpan(error.name || 'Error', {
46
+ attributes: __assign((_a = {}, _a[ATTR_EXCEPTION_MESSAGE] = error.message, _a[ATTR_EXCEPTION_STACKTRACE] = error.stack, _a[ATTR_EXCEPTION_TYPE] = error.name, _a), getResourceAttributes()),
47
+ });
48
+ trace.setSpan(activeContext, span);
49
+ isNewSpan = true;
50
+ }
51
+ else {
52
+ span.setAttributes((_b = {},
53
+ _b[ATTR_EXCEPTION_MESSAGE] = error.message,
54
+ _b[ATTR_EXCEPTION_STACKTRACE] = error.stack,
55
+ _b[ATTR_EXCEPTION_TYPE] = error.name,
56
+ _b));
57
+ }
58
+ if (errorInfo) {
59
+ Object.entries(errorInfo).forEach(function (_a) {
60
+ var _b = __read(_a, 2), key = _b[0], value = _b[1];
61
+ span.setAttribute("error_info.".concat(key), value);
62
+ });
63
+ }
13
64
  span.recordException(error);
14
65
  span.setStatus({
15
66
  code: SpanStatusCode.ERROR,
16
67
  message: error.message,
17
68
  });
69
+ if (isNewSpan) {
70
+ span.end();
71
+ }
18
72
  };
19
73
  //# sourceMappingURL=capture-exception.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"capture-exception.js","sourceRoot":"","sources":["../../../src/sdk/capture-exception.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAEnE;;;;GAIG;AACH,MAAM,CAAC,IAAM,gBAAgB,GAAG,UAAC,KAAY;IAC3C,IAAI,CAAC,KAAK;QAAE,OAAM;IAElB,IAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IAC5C,IAAI,CAAC,IAAI;QAAE,OAAM;IAEjB,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAA;IAC3B,IAAI,CAAC,SAAS,CAAC;QACb,IAAI,EAAE,cAAc,CAAC,KAAK;QAC1B,OAAO,EAAE,KAAK,CAAC,OAAO;KACvB,CAAC,CAAA;AACJ,CAAC,CAAA","sourcesContent":["import { context, trace, SpanStatusCode } from '@opentelemetry/api'\n\n/**\n * @description Add error to current span\n * @param {Error} error\n * @returns {void}\n */\nexport const captureException = (error: Error) => {\n if (!error) return\n\n const span = trace.getSpan(context.active())\n if (!span) return\n\n span.recordException(error)\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error.message,\n })\n}\n"]}
1
+ {"version":3,"file":"capture-exception.js","sourceRoot":"","sources":["../../../src/sdk/capture-exception.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACnE,OAAO,EACL,sBAAsB,EACtB,yBAAyB,EACzB,mBAAmB,GACpB,MAAM,qCAAqC,CAAA;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAA;AAEjE;;;;GAIG;AACH,MAAM,CAAC,IAAM,gBAAgB,GAAG,UAC9B,KAAY,EACZ,SAA+B;;IAE/B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAM;IACR,CAAC;IAED,IAAM,aAAa,GAAG,OAAO,CAAC,MAAM,EAAE,CAAA;IAEtC,IAAI,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,CAAA;IACvC,IAAI,SAAS,GAAG,KAAK,CAAA;IAErB,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;QACjC,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,SAAS,CAC3C,KAAK,CAAC,IAAI,IAAI,OAAO,EACrB;YACE,UAAU,wBACP,sBAAsB,IAAG,KAAK,CAAC,OAAO,KACtC,yBAAyB,IAAG,KAAK,CAAC,KAAK,KACvC,mBAAmB,IAAG,KAAK,CAAC,IAAI,OAC9B,qBAAqB,EAAE,CAC3B;SACF,CACF,CAAA;QACD,KAAK,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC,CAAA;QAClC,SAAS,GAAG,IAAI,CAAA;IAClB,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,aAAa;YAChB,GAAC,sBAAsB,IAAG,KAAK,CAAC,OAAO;YACvC,GAAC,yBAAyB,IAAG,KAAK,CAAC,KAAK;YACxC,GAAC,mBAAmB,IAAG,KAAK,CAAC,IAAI;gBACjC,CAAA;IACJ,CAAC;IAED,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,UAAC,EAAY;gBAAZ,KAAA,aAAY,EAAX,GAAG,QAAA,EAAE,KAAK,QAAA;YAC5C,IAAI,CAAC,YAAY,CAAC,qBAAc,GAAG,CAAE,EAAE,KAAK,CAAC,CAAA;QAC/C,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAA;IAC3B,IAAI,CAAC,SAAS,CAAC;QACb,IAAI,EAAE,cAAc,CAAC,KAAK;QAC1B,OAAO,EAAE,KAAK,CAAC,OAAO;KACvB,CAAC,CAAA;IAEF,IAAI,SAAS,EAAE,CAAC;QACd,IAAI,CAAC,GAAG,EAAE,CAAA;IACZ,CAAC;AACH,CAAC,CAAA","sourcesContent":["import { context, trace, SpanStatusCode } from '@opentelemetry/api'\nimport {\n ATTR_EXCEPTION_MESSAGE,\n ATTR_EXCEPTION_STACKTRACE,\n ATTR_EXCEPTION_TYPE,\n} from '@opentelemetry/semantic-conventions'\nimport { getResourceAttributes } from './set-resource-attributes'\n\n/**\n * @description Add error to current span\n * @param {Error} error\n * @returns {void}\n */\nexport const captureException = (\n error: Error,\n errorInfo?: Record<string, any>,\n) => {\n if (!error) {\n return\n }\n\n const activeContext = context.active()\n\n let span = trace.getSpan(activeContext)\n let isNewSpan = false\n\n if (!span || !span.isRecording()) {\n span = trace.getTracer('exception').startSpan(\n error.name || 'Error',\n {\n attributes: {\n [ATTR_EXCEPTION_MESSAGE]: error.message,\n [ATTR_EXCEPTION_STACKTRACE]: error.stack,\n [ATTR_EXCEPTION_TYPE]: error.name,\n ...getResourceAttributes(),\n },\n },\n )\n trace.setSpan(activeContext, span)\n isNewSpan = true\n } else {\n span.setAttributes({\n [ATTR_EXCEPTION_MESSAGE]: error.message,\n [ATTR_EXCEPTION_STACKTRACE]: error.stack,\n [ATTR_EXCEPTION_TYPE]: error.name,\n })\n }\n\n if (errorInfo) {\n Object.entries(errorInfo).forEach(([key, value]) => {\n span.setAttribute(`error_info.${key}`, value)\n })\n }\n\n span.recordException(error)\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error.message,\n })\n\n if (isNewSpan) {\n span.end()\n }\n}\n"]}
@@ -5,4 +5,5 @@ export * from './id-generator';
5
5
  export * from './capture-exception';
6
6
  export * from './set-attribute';
7
7
  export * from './save-continuous-deb-session';
8
+ export * from './set-resource-attributes';
8
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/sdk/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAA;AAC3E,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,YAAY,CAAA;AAChD,cAAc,WAAW,CAAA;AACzB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,qBAAqB,CAAA;AACnC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,+BAA+B,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/sdk/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAA;AAC3E,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,YAAY,CAAA;AAChD,cAAc,WAAW,CAAA;AACzB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,qBAAqB,CAAA;AACnC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,+BAA+B,CAAA;AAC7C,cAAc,2BAA2B,CAAA"}
@@ -5,4 +5,5 @@ export * from './id-generator';
5
5
  export * from './capture-exception';
6
6
  export * from './set-attribute';
7
7
  export * from './save-continuous-deb-session';
8
+ export * from './set-resource-attributes';
8
9
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/sdk/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAA;AAC3E,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,YAAY,CAAA;AAChD,cAAc,WAAW,CAAA;AACzB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,qBAAqB,CAAA;AACnC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,+BAA+B,CAAA","sourcesContent":["export { default as mask, sensitiveFields, sensitiveHeaders } from './mask'\nexport { default as schemify } from './schemify'\nexport * from './is-gzip'\nexport * from './id-generator'\nexport * from './capture-exception'\nexport * from './set-attribute'\nexport * from './save-continuous-deb-session'\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/sdk/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAA;AAC3E,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,YAAY,CAAA;AAChD,cAAc,WAAW,CAAA;AACzB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,qBAAqB,CAAA;AACnC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,+BAA+B,CAAA;AAC7C,cAAc,2BAA2B,CAAA","sourcesContent":["export { default as mask, sensitiveFields, sensitiveHeaders } from './mask'\nexport { default as schemify } from './schemify'\nexport * from './is-gzip'\nexport * from './id-generator'\nexport * from './capture-exception'\nexport * from './set-attribute'\nexport * from './save-continuous-deb-session'\nexport * from './set-resource-attributes'\n"]}
@@ -0,0 +1,3 @@
1
+ export declare const setResourceAttributes: (attributes: Record<string, any>) => void;
2
+ export declare const getResourceAttributes: () => Record<string, any>;
3
+ //# sourceMappingURL=set-resource-attributes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"set-resource-attributes.d.ts","sourceRoot":"","sources":["../../../src/sdk/set-resource-attributes.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,qBAAqB,GAAI,YAAY,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,SAEpE,CAAA;AAED,eAAO,MAAM,qBAAqB,2BAEjC,CAAA"}
@@ -0,0 +1,8 @@
1
+ var resourceAttributes = {};
2
+ export var setResourceAttributes = function (attributes) {
3
+ resourceAttributes = attributes;
4
+ };
5
+ export var getResourceAttributes = function () {
6
+ return resourceAttributes;
7
+ };
8
+ //# sourceMappingURL=set-resource-attributes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"set-resource-attributes.js","sourceRoot":"","sources":["../../../src/sdk/set-resource-attributes.ts"],"names":[],"mappings":"AAAA,IAAI,kBAAkB,GAAwB,EAAE,CAAA;AAEhD,MAAM,CAAC,IAAM,qBAAqB,GAAG,UAAC,UAA+B;IACnE,kBAAkB,GAAG,UAAU,CAAA;AACjC,CAAC,CAAA;AAED,MAAM,CAAC,IAAM,qBAAqB,GAAG;IACnC,OAAO,kBAAkB,CAAA;AAC3B,CAAC,CAAA","sourcesContent":["let resourceAttributes: Record<string, any> = {}\n\nexport const setResourceAttributes = (attributes: Record<string, any>) => {\n resourceAttributes = attributes\n}\n\nexport const getResourceAttributes = () => {\n return resourceAttributes\n}\n"]}