@multiplayer-app/otlp-core
Version:
Multiplayer otlp core
86 lines • 3.64 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.MultiplayerHttpTraceExporterBrowser = void 0;
const otlp_exporter_base_1 = require("@opentelemetry/otlp-exporter-base");
const browser_http_1 = require("@opentelemetry/otlp-exporter-base/browser-http");
const MultiplayerJsonTraceSerializer_1 = require("./MultiplayerJsonTraceSerializer");
const constants_base_1 = require("./constants.base");
/**
* Trace Exporters for Web with postMessage fallback
*/
class MultiplayerHttpTraceExporterBrowser extends otlp_exporter_base_1.OTLPExporterBase {
constructor(config = {}) {
const _config = Object.assign(Object.assign({}, config), { url: config.url || constants_base_1.MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_URL, headers: Object.assign(Object.assign({}, (config.headers || {})), config.apiKey
? { Authorization: config.apiKey }
: {}) });
super((0, browser_http_1.createLegacyOtlpBrowserExportDelegate)(_config, MultiplayerJsonTraceSerializer_1.MultiplayerJsonTraceSerializer, 'v1/traces', { 'Content-Type': 'application/json' }));
this.usePostMessage = false;
this.config = config;
this.postMessageType = config.postMessageType || 'MULTIPLAYER_SESSION_DEBUGGER_LIB';
this.postMessageTargetOrigin = config.postMessageTargetOrigin || '*';
}
export(spans, resultCallback) {
if (this.usePostMessage) {
this.exportViaPostMessage(spans, resultCallback);
return;
}
super.export(spans, (result) => {
if (result.code === 0) {
resultCallback(result);
}
else if (this.config.usePostMessageFallback) {
this.usePostMessage = true;
this.exportViaPostMessage(spans, resultCallback);
}
else {
resultCallback(result);
}
});
}
exportViaPostMessage(spans, resultCallback) {
if (typeof window === 'undefined') {
resultCallback({ code: 1 });
return;
}
try {
window.postMessage({
action: 'traces',
type: this.postMessageType,
payload: spans.map(span => this._serializeSpan(span)),
}, this.postMessageTargetOrigin);
resultCallback({ code: 0 });
}
catch (e) {
resultCallback({ code: 1 });
}
}
_serializeSpan(span) {
return {
_spanContext: span.spanContext(),
name: span.name,
kind: span.kind,
links: span.links,
ended: span.ended,
events: span.events,
status: span.status,
endTime: span.endTime,
startTime: span.startTime,
duration: span.duration,
attributes: span.attributes,
parentSpanId: span.parentSpanId,
instrumentationLibrary: span.instrumentationLibrary,
droppedAttributesCount: span.droppedAttributesCount,
droppedEventsCount: span.droppedEventsCount,
droppedLinksCount: span.droppedLinksCount,
resource: {
attributes: span.resource.attributes,
asyncAttributesPending: span.resource.asyncAttributesPending,
},
};
}
getDefaultUrl(config) {
return config.url || constants_base_1.MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_URL;
}
}
exports.MultiplayerHttpTraceExporterBrowser = MultiplayerHttpTraceExporterBrowser;
//# sourceMappingURL=MultiplayerHttpTraceExporterBrowser.js.map