@multiplayer-app/session-recorder-common 0.0.12 → 1.0.1-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/SessionRecorderIdGenerator.js +2 -2
- package/dist/esm/SessionRecorderIdGenerator.js.map +1 -1
- package/dist/esm/SessionRecorderJsonTraceSerializer.d.ts.map +1 -1
- package/dist/esm/SessionRecorderJsonTraceSerializer.js +75 -7
- package/dist/esm/SessionRecorderJsonTraceSerializer.js.map +1 -1
- package/dist/esm/SessionRecorderTraceIdRatioBasedSampler.d.ts.map +1 -1
- package/dist/esm/SessionRecorderTraceIdRatioBasedSampler.js +4 -4
- package/dist/esm/SessionRecorderTraceIdRatioBasedSampler.js.map +1 -1
- package/dist/esm/{constants.base.d.ts → constants/constants.base.d.ts} +16 -0
- package/dist/esm/constants/constants.base.d.ts.map +1 -0
- package/dist/esm/{constants.base.js → constants/constants.base.js} +16 -0
- package/dist/esm/constants/constants.base.js.map +1 -0
- package/dist/esm/constants/constants.browser.d.ts.map +1 -0
- package/dist/esm/constants/constants.browser.js.map +1 -0
- package/dist/esm/constants/constants.node.d.ts.map +1 -0
- package/dist/esm/constants/constants.node.js.map +1 -0
- package/dist/esm/exporters/SessionRecorderBrowserTraceExporter.d.ts +31 -0
- package/dist/esm/exporters/SessionRecorderBrowserTraceExporter.d.ts.map +1 -0
- package/dist/esm/exporters/SessionRecorderBrowserTraceExporter.js +220 -0
- package/dist/esm/exporters/SessionRecorderBrowserTraceExporter.js.map +1 -0
- package/dist/esm/exporters/SessionRecorderGrpcLogsExporter.d.ts +22 -0
- package/dist/esm/exporters/SessionRecorderGrpcLogsExporter.d.ts.map +1 -0
- package/dist/esm/exporters/SessionRecorderGrpcLogsExporter.js +51 -0
- package/dist/esm/exporters/SessionRecorderGrpcLogsExporter.js.map +1 -0
- package/dist/esm/exporters/SessionRecorderGrpcTraceExporter.d.ts +22 -0
- package/dist/esm/exporters/SessionRecorderGrpcTraceExporter.d.ts.map +1 -0
- package/dist/esm/exporters/SessionRecorderGrpcTraceExporter.js +48 -0
- package/dist/esm/exporters/SessionRecorderGrpcTraceExporter.js.map +1 -0
- package/dist/esm/exporters/SessionRecorderHttpLogsExporter.d.ts +20 -0
- package/dist/esm/exporters/SessionRecorderHttpLogsExporter.d.ts.map +1 -0
- package/dist/esm/exporters/SessionRecorderHttpLogsExporter.js +50 -0
- package/dist/esm/exporters/SessionRecorderHttpLogsExporter.js.map +1 -0
- package/dist/esm/exporters/SessionRecorderHttpTraceExporter.d.ts +25 -0
- package/dist/esm/exporters/SessionRecorderHttpTraceExporter.d.ts.map +1 -0
- package/dist/esm/exporters/SessionRecorderHttpTraceExporter.js +56 -0
- package/dist/esm/exporters/SessionRecorderHttpTraceExporter.js.map +1 -0
- package/dist/esm/exporters/SessionRecorderLogsExporterWrapper.d.ts +13 -0
- package/dist/esm/exporters/SessionRecorderLogsExporterWrapper.d.ts.map +1 -0
- package/dist/esm/exporters/SessionRecorderLogsExporterWrapper.js +25 -0
- package/dist/esm/exporters/SessionRecorderLogsExporterWrapper.js.map +1 -0
- package/dist/esm/exporters/SessionRecorderTraceExporterWrapper.d.ts +13 -0
- package/dist/esm/exporters/SessionRecorderTraceExporterWrapper.d.ts.map +1 -0
- package/dist/esm/exporters/SessionRecorderTraceExporterWrapper.js +24 -0
- package/dist/esm/exporters/SessionRecorderTraceExporterWrapper.js.map +1 -0
- package/dist/esm/exporters/index-browser.d.ts +2 -0
- package/dist/esm/exporters/index-browser.d.ts.map +1 -0
- package/dist/esm/exporters/index-browser.js +2 -0
- package/dist/esm/exporters/index-browser.js.map +1 -0
- package/dist/esm/exporters/index-node.d.ts +7 -0
- package/dist/esm/exporters/index-node.d.ts.map +1 -0
- package/dist/esm/exporters/index-node.js +7 -0
- package/dist/esm/exporters/index-node.js.map +1 -0
- package/dist/esm/exporters/index.d.ts +8 -0
- package/dist/esm/exporters/index.d.ts.map +1 -0
- package/dist/esm/exporters/index.js +8 -0
- package/dist/esm/exporters/index.js.map +1 -0
- package/dist/esm/index-browser.d.ts +2 -2
- package/dist/esm/index-browser.d.ts.map +1 -1
- package/dist/esm/index-browser.js +2 -2
- package/dist/esm/index-browser.js.map +1 -1
- package/dist/esm/index-node.d.ts +3 -2
- package/dist/esm/index-node.d.ts.map +1 -1
- package/dist/esm/index-node.js +3 -2
- package/dist/esm/index-node.js.map +1 -1
- package/dist/esm/index.d.ts +3 -4
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +3 -4
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/instrumentations/SessionRecorderHttpInstrumentationHooksNode.d.ts.map +1 -0
- package/dist/esm/{SessionRecorderHttpInstrumentationHooksNode.js → instrumentations/SessionRecorderHttpInstrumentationHooksNode.js} +3 -6
- package/dist/esm/instrumentations/SessionRecorderHttpInstrumentationHooksNode.js.map +1 -0
- package/dist/esm/instrumentations/index-node.d.ts +2 -0
- package/dist/esm/instrumentations/index-node.d.ts.map +1 -0
- package/dist/esm/instrumentations/index-node.js +2 -0
- package/dist/esm/instrumentations/index-node.js.map +1 -0
- package/dist/esm/sdk/capture-exception.js.map +1 -1
- package/dist/esm/sdk/id-generator.js.map +1 -1
- package/dist/esm/sdk/mask.js +1 -1
- package/dist/esm/sdk/mask.js.map +1 -1
- package/dist/esm/sdk/save-continuous-deb-session.d.ts.map +1 -1
- package/dist/esm/sdk/save-continuous-deb-session.js +2 -2
- package/dist/esm/sdk/save-continuous-deb-session.js.map +1 -1
- package/dist/esm/sdk/schemify.d.ts.map +1 -1
- package/dist/esm/sdk/schemify.js +0 -1
- package/dist/esm/sdk/schemify.js.map +1 -1
- package/dist/esm/sdk/set-attribute.js +2 -2
- package/dist/esm/sdk/set-attribute.js.map +1 -1
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/esnext/SessionRecorderIdGenerator.js +2 -2
- package/dist/esnext/SessionRecorderIdGenerator.js.map +1 -1
- package/dist/esnext/SessionRecorderJsonTraceSerializer.d.ts.map +1 -1
- package/dist/esnext/SessionRecorderJsonTraceSerializer.js +47 -7
- package/dist/esnext/SessionRecorderJsonTraceSerializer.js.map +1 -1
- package/dist/esnext/SessionRecorderTraceIdRatioBasedSampler.d.ts.map +1 -1
- package/dist/esnext/SessionRecorderTraceIdRatioBasedSampler.js +4 -4
- package/dist/esnext/SessionRecorderTraceIdRatioBasedSampler.js.map +1 -1
- package/dist/{src → esnext/constants}/constants.base.d.ts +16 -0
- package/dist/esnext/constants/constants.base.d.ts.map +1 -0
- package/dist/esnext/{constants.base.js → constants/constants.base.js} +16 -0
- package/dist/esnext/constants/constants.base.js.map +1 -0
- package/dist/esnext/constants/constants.browser.d.ts.map +1 -0
- package/dist/esnext/constants/constants.browser.js.map +1 -0
- package/dist/esnext/constants/constants.node.d.ts.map +1 -0
- package/dist/esnext/constants/constants.node.js.map +1 -0
- package/dist/esnext/exporters/SessionRecorderBrowserTraceExporter.d.ts +31 -0
- package/dist/esnext/exporters/SessionRecorderBrowserTraceExporter.d.ts.map +1 -0
- package/dist/esnext/exporters/SessionRecorderBrowserTraceExporter.js +159 -0
- package/dist/esnext/exporters/SessionRecorderBrowserTraceExporter.js.map +1 -0
- package/dist/esnext/exporters/SessionRecorderGrpcLogsExporter.d.ts +22 -0
- package/dist/esnext/exporters/SessionRecorderGrpcLogsExporter.d.ts.map +1 -0
- package/dist/esnext/exporters/SessionRecorderGrpcLogsExporter.js +33 -0
- package/dist/esnext/exporters/SessionRecorderGrpcLogsExporter.js.map +1 -0
- package/dist/esnext/exporters/SessionRecorderGrpcTraceExporter.d.ts +22 -0
- package/dist/esnext/exporters/SessionRecorderGrpcTraceExporter.d.ts.map +1 -0
- package/dist/esnext/exporters/SessionRecorderGrpcTraceExporter.js +30 -0
- package/dist/esnext/exporters/SessionRecorderGrpcTraceExporter.js.map +1 -0
- package/dist/esnext/exporters/SessionRecorderHttpLogsExporter.d.ts +20 -0
- package/dist/esnext/exporters/SessionRecorderHttpLogsExporter.d.ts.map +1 -0
- package/dist/esnext/exporters/SessionRecorderHttpLogsExporter.js +32 -0
- package/dist/esnext/exporters/SessionRecorderHttpLogsExporter.js.map +1 -0
- package/dist/esnext/exporters/SessionRecorderHttpTraceExporter.d.ts +25 -0
- package/dist/esnext/exporters/SessionRecorderHttpTraceExporter.d.ts.map +1 -0
- package/dist/esnext/exporters/SessionRecorderHttpTraceExporter.js +38 -0
- package/dist/esnext/exporters/SessionRecorderHttpTraceExporter.js.map +1 -0
- package/dist/esnext/exporters/SessionRecorderLogsExporterWrapper.d.ts +13 -0
- package/dist/esnext/exporters/SessionRecorderLogsExporterWrapper.d.ts.map +1 -0
- package/dist/esnext/exporters/SessionRecorderLogsExporterWrapper.js +23 -0
- package/dist/esnext/exporters/SessionRecorderLogsExporterWrapper.js.map +1 -0
- package/dist/esnext/exporters/SessionRecorderTraceExporterWrapper.d.ts +13 -0
- package/dist/esnext/exporters/SessionRecorderTraceExporterWrapper.d.ts.map +1 -0
- package/dist/esnext/exporters/SessionRecorderTraceExporterWrapper.js +22 -0
- package/dist/esnext/exporters/SessionRecorderTraceExporterWrapper.js.map +1 -0
- package/dist/esnext/exporters/index-browser.d.ts +2 -0
- package/dist/esnext/exporters/index-browser.d.ts.map +1 -0
- package/dist/esnext/exporters/index-browser.js +2 -0
- package/dist/esnext/exporters/index-browser.js.map +1 -0
- package/dist/esnext/exporters/index-node.d.ts +7 -0
- package/dist/esnext/exporters/index-node.d.ts.map +1 -0
- package/dist/esnext/exporters/index-node.js +7 -0
- package/dist/esnext/exporters/index-node.js.map +1 -0
- package/dist/esnext/exporters/index.d.ts +8 -0
- package/dist/esnext/exporters/index.d.ts.map +1 -0
- package/dist/esnext/exporters/index.js +8 -0
- package/dist/esnext/exporters/index.js.map +1 -0
- package/dist/esnext/index-browser.d.ts +2 -2
- package/dist/esnext/index-browser.d.ts.map +1 -1
- package/dist/esnext/index-browser.js +2 -2
- package/dist/esnext/index-browser.js.map +1 -1
- package/dist/esnext/index-node.d.ts +3 -2
- package/dist/esnext/index-node.d.ts.map +1 -1
- package/dist/esnext/index-node.js +3 -2
- package/dist/esnext/index-node.js.map +1 -1
- package/dist/esnext/index.d.ts +3 -4
- package/dist/esnext/index.d.ts.map +1 -1
- package/dist/esnext/index.js +3 -4
- package/dist/esnext/index.js.map +1 -1
- package/dist/esnext/instrumentations/SessionRecorderHttpInstrumentationHooksNode.d.ts.map +1 -0
- package/dist/esnext/{SessionRecorderHttpInstrumentationHooksNode.js → instrumentations/SessionRecorderHttpInstrumentationHooksNode.js} +3 -6
- package/dist/esnext/instrumentations/SessionRecorderHttpInstrumentationHooksNode.js.map +1 -0
- package/dist/esnext/instrumentations/index-node.d.ts +2 -0
- package/dist/esnext/instrumentations/index-node.d.ts.map +1 -0
- package/dist/esnext/instrumentations/index-node.js +2 -0
- package/dist/esnext/instrumentations/index-node.js.map +1 -0
- package/dist/esnext/sdk/capture-exception.js.map +1 -1
- package/dist/esnext/sdk/id-generator.js.map +1 -1
- package/dist/esnext/sdk/mask.js +1 -1
- package/dist/esnext/sdk/mask.js.map +1 -1
- package/dist/esnext/sdk/save-continuous-deb-session.d.ts.map +1 -1
- package/dist/esnext/sdk/save-continuous-deb-session.js +2 -2
- package/dist/esnext/sdk/save-continuous-deb-session.js.map +1 -1
- package/dist/esnext/sdk/schemify.d.ts.map +1 -1
- package/dist/esnext/sdk/schemify.js +0 -1
- package/dist/esnext/sdk/schemify.js.map +1 -1
- package/dist/esnext/sdk/set-attribute.js +2 -2
- package/dist/esnext/sdk/set-attribute.js.map +1 -1
- package/dist/esnext/tsconfig.esnext.tsbuildinfo +1 -1
- package/dist/src/SessionRecorderIdGenerator.js +1 -1
- package/dist/src/SessionRecorderIdGenerator.js.map +1 -1
- package/dist/src/SessionRecorderJsonTraceSerializer.d.ts.map +1 -1
- package/dist/src/SessionRecorderJsonTraceSerializer.js +47 -7
- package/dist/src/SessionRecorderJsonTraceSerializer.js.map +1 -1
- package/dist/src/SessionRecorderTraceIdRatioBasedSampler.d.ts.map +1 -1
- package/dist/src/SessionRecorderTraceIdRatioBasedSampler.js +4 -4
- package/dist/src/SessionRecorderTraceIdRatioBasedSampler.js.map +1 -1
- package/dist/{esnext → src/constants}/constants.base.d.ts +16 -0
- package/dist/src/constants/constants.base.d.ts.map +1 -0
- package/dist/src/{constants.base.js → constants/constants.base.js} +17 -1
- package/dist/src/constants/constants.base.js.map +1 -0
- package/dist/src/constants/constants.browser.d.ts.map +1 -0
- package/dist/src/constants/constants.browser.js.map +1 -0
- package/dist/src/constants/constants.node.d.ts.map +1 -0
- package/dist/src/constants/constants.node.js.map +1 -0
- package/dist/src/exporters/SessionRecorderBrowserTraceExporter.d.ts +31 -0
- package/dist/src/exporters/SessionRecorderBrowserTraceExporter.d.ts.map +1 -0
- package/dist/src/exporters/SessionRecorderBrowserTraceExporter.js +163 -0
- package/dist/src/exporters/SessionRecorderBrowserTraceExporter.js.map +1 -0
- package/dist/src/exporters/SessionRecorderGrpcLogsExporter.d.ts +22 -0
- package/dist/src/exporters/SessionRecorderGrpcLogsExporter.d.ts.map +1 -0
- package/dist/src/exporters/SessionRecorderGrpcLogsExporter.js +37 -0
- package/dist/src/exporters/SessionRecorderGrpcLogsExporter.js.map +1 -0
- package/dist/src/exporters/SessionRecorderGrpcTraceExporter.d.ts +22 -0
- package/dist/src/exporters/SessionRecorderGrpcTraceExporter.d.ts.map +1 -0
- package/dist/src/exporters/SessionRecorderGrpcTraceExporter.js +34 -0
- package/dist/src/exporters/SessionRecorderGrpcTraceExporter.js.map +1 -0
- package/dist/src/exporters/SessionRecorderHttpLogsExporter.d.ts +20 -0
- package/dist/src/exporters/SessionRecorderHttpLogsExporter.d.ts.map +1 -0
- package/dist/src/exporters/SessionRecorderHttpLogsExporter.js +36 -0
- package/dist/src/exporters/SessionRecorderHttpLogsExporter.js.map +1 -0
- package/dist/src/exporters/SessionRecorderHttpTraceExporter.d.ts +25 -0
- package/dist/src/exporters/SessionRecorderHttpTraceExporter.d.ts.map +1 -0
- package/dist/src/exporters/SessionRecorderHttpTraceExporter.js +42 -0
- package/dist/src/exporters/SessionRecorderHttpTraceExporter.js.map +1 -0
- package/dist/src/exporters/SessionRecorderLogsExporterWrapper.d.ts +13 -0
- package/dist/src/exporters/SessionRecorderLogsExporterWrapper.d.ts.map +1 -0
- package/dist/src/exporters/SessionRecorderLogsExporterWrapper.js +27 -0
- package/dist/src/exporters/SessionRecorderLogsExporterWrapper.js.map +1 -0
- package/dist/src/exporters/SessionRecorderTraceExporterWrapper.d.ts +13 -0
- package/dist/src/exporters/SessionRecorderTraceExporterWrapper.d.ts.map +1 -0
- package/dist/src/exporters/SessionRecorderTraceExporterWrapper.js +26 -0
- package/dist/src/exporters/SessionRecorderTraceExporterWrapper.js.map +1 -0
- package/dist/src/exporters/index-browser.d.ts +2 -0
- package/dist/src/exporters/index-browser.d.ts.map +1 -0
- package/dist/src/exporters/index-browser.js +18 -0
- package/dist/src/exporters/index-browser.js.map +1 -0
- package/dist/src/exporters/index-node.d.ts +7 -0
- package/dist/src/exporters/index-node.d.ts.map +1 -0
- package/dist/src/exporters/index-node.js +23 -0
- package/dist/src/exporters/index-node.js.map +1 -0
- package/dist/src/exporters/index.d.ts +8 -0
- package/dist/src/exporters/index.d.ts.map +1 -0
- package/dist/src/exporters/index.js +24 -0
- package/dist/src/exporters/index.js.map +1 -0
- package/dist/src/index-browser.d.ts +2 -2
- package/dist/src/index-browser.d.ts.map +1 -1
- package/dist/src/index-browser.js +3 -4
- package/dist/src/index-browser.js.map +1 -1
- package/dist/src/index-node.d.ts +3 -2
- package/dist/src/index-node.d.ts.map +1 -1
- package/dist/src/index-node.js +3 -2
- package/dist/src/index-node.js.map +1 -1
- package/dist/src/index.d.ts +3 -4
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +4 -8
- package/dist/src/index.js.map +1 -1
- package/dist/src/instrumentations/SessionRecorderHttpInstrumentationHooksNode.d.ts.map +1 -0
- package/dist/src/{SessionRecorderHttpInstrumentationHooksNode.js → instrumentations/SessionRecorderHttpInstrumentationHooksNode.js} +3 -6
- package/dist/src/instrumentations/SessionRecorderHttpInstrumentationHooksNode.js.map +1 -0
- package/dist/src/instrumentations/index-node.d.ts +2 -0
- package/dist/src/instrumentations/index-node.d.ts.map +1 -0
- package/dist/src/instrumentations/index-node.js +18 -0
- package/dist/src/instrumentations/index-node.js.map +1 -0
- package/dist/src/sdk/capture-exception.js.map +1 -1
- package/dist/src/sdk/id-generator.js.map +1 -1
- package/dist/src/sdk/mask.js +1 -1
- package/dist/src/sdk/mask.js.map +1 -1
- package/dist/src/sdk/save-continuous-deb-session.d.ts.map +1 -1
- package/dist/src/sdk/save-continuous-deb-session.js +2 -2
- package/dist/src/sdk/save-continuous-deb-session.js.map +1 -1
- package/dist/src/sdk/schemify.d.ts.map +1 -1
- package/dist/src/sdk/schemify.js +0 -1
- package/dist/src/sdk/schemify.js.map +1 -1
- package/dist/src/sdk/set-attribute.js +1 -1
- package/dist/src/sdk/set-attribute.js.map +1 -1
- package/package.json +12 -6
- package/src/SessionRecorderIdGenerator.ts +2 -2
- package/src/SessionRecorderJsonTraceSerializer.ts +48 -8
- package/src/SessionRecorderTraceIdRatioBasedSampler.ts +7 -4
- package/src/{constants.base.ts → constants/constants.base.ts} +23 -0
- package/src/exporters/SessionRecorderBrowserTraceExporter.ts +212 -0
- package/src/exporters/SessionRecorderGrpcLogsExporter.ts +52 -0
- package/src/exporters/SessionRecorderGrpcTraceExporter.ts +50 -0
- package/src/exporters/SessionRecorderHttpLogsExporter.ts +58 -0
- package/src/exporters/SessionRecorderHttpTraceExporter.ts +65 -0
- package/src/exporters/SessionRecorderLogsExporterWrapper.ts +36 -0
- package/src/exporters/SessionRecorderTraceExporterWrapper.ts +36 -0
- package/src/exporters/index-browser.ts +1 -0
- package/src/exporters/index-node.ts +6 -0
- package/src/exporters/index.ts +7 -0
- package/src/index-browser.ts +2 -2
- package/src/index-node.ts +3 -2
- package/src/index.ts +3 -4
- package/src/{SessionRecorderHttpInstrumentationHooksNode.ts → instrumentations/SessionRecorderHttpInstrumentationHooksNode.ts} +10 -10
- package/src/instrumentations/index-node.ts +1 -0
- package/src/sdk/capture-exception.ts +3 -3
- package/src/sdk/id-generator.ts +12 -12
- package/src/sdk/mask.ts +1 -1
- package/src/sdk/save-continuous-deb-session.ts +17 -17
- package/src/sdk/schemify.ts +0 -1
- package/src/sdk/set-attribute.ts +12 -12
- package/dist/esm/SessionRecorderHttpInstrumentationHooksNode.d.ts.map +0 -1
- package/dist/esm/SessionRecorderHttpInstrumentationHooksNode.js.map +0 -1
- package/dist/esm/SessionRecorderHttpTraceExporterBrowser.d.ts +0 -26
- package/dist/esm/SessionRecorderHttpTraceExporterBrowser.d.ts.map +0 -1
- package/dist/esm/SessionRecorderHttpTraceExporterBrowser.js +0 -116
- package/dist/esm/SessionRecorderHttpTraceExporterBrowser.js.map +0 -1
- package/dist/esm/constants.base.d.ts.map +0 -1
- package/dist/esm/constants.base.js.map +0 -1
- package/dist/esm/constants.browser.d.ts.map +0 -1
- package/dist/esm/constants.browser.js.map +0 -1
- package/dist/esm/constants.node.d.ts.map +0 -1
- package/dist/esm/constants.node.js.map +0 -1
- package/dist/esnext/SessionRecorderHttpInstrumentationHooksNode.d.ts.map +0 -1
- package/dist/esnext/SessionRecorderHttpInstrumentationHooksNode.js.map +0 -1
- package/dist/esnext/SessionRecorderHttpTraceExporterBrowser.d.ts +0 -26
- package/dist/esnext/SessionRecorderHttpTraceExporterBrowser.d.ts.map +0 -1
- package/dist/esnext/SessionRecorderHttpTraceExporterBrowser.js +0 -82
- package/dist/esnext/SessionRecorderHttpTraceExporterBrowser.js.map +0 -1
- package/dist/esnext/constants.base.d.ts.map +0 -1
- package/dist/esnext/constants.base.js.map +0 -1
- package/dist/esnext/constants.browser.d.ts.map +0 -1
- package/dist/esnext/constants.browser.js.map +0 -1
- package/dist/esnext/constants.node.d.ts.map +0 -1
- package/dist/esnext/constants.node.js.map +0 -1
- package/dist/src/SessionRecorderHttpInstrumentationHooksNode.d.ts.map +0 -1
- package/dist/src/SessionRecorderHttpInstrumentationHooksNode.js.map +0 -1
- package/dist/src/SessionRecorderHttpTraceExporterBrowser.d.ts +0 -26
- package/dist/src/SessionRecorderHttpTraceExporterBrowser.d.ts.map +0 -1
- package/dist/src/SessionRecorderHttpTraceExporterBrowser.js +0 -86
- package/dist/src/SessionRecorderHttpTraceExporterBrowser.js.map +0 -1
- package/dist/src/constants.base.d.ts.map +0 -1
- package/dist/src/constants.base.js.map +0 -1
- package/dist/src/constants.browser.d.ts.map +0 -1
- package/dist/src/constants.browser.js.map +0 -1
- package/dist/src/constants.node.d.ts.map +0 -1
- package/dist/src/constants.node.js.map +0 -1
- package/src/SessionRecorderHttpTraceExporterBrowser.ts +0 -123
- /package/dist/esm/{constants.browser.d.ts → constants/constants.browser.d.ts} +0 -0
- /package/dist/esm/{constants.browser.js → constants/constants.browser.js} +0 -0
- /package/dist/esm/{constants.node.d.ts → constants/constants.node.d.ts} +0 -0
- /package/dist/esm/{constants.node.js → constants/constants.node.js} +0 -0
- /package/dist/esm/{SessionRecorderHttpInstrumentationHooksNode.d.ts → instrumentations/SessionRecorderHttpInstrumentationHooksNode.d.ts} +0 -0
- /package/dist/esnext/{constants.browser.d.ts → constants/constants.browser.d.ts} +0 -0
- /package/dist/esnext/{constants.browser.js → constants/constants.browser.js} +0 -0
- /package/dist/esnext/{constants.node.d.ts → constants/constants.node.d.ts} +0 -0
- /package/dist/esnext/{constants.node.js → constants/constants.node.js} +0 -0
- /package/dist/esnext/{SessionRecorderHttpInstrumentationHooksNode.d.ts → instrumentations/SessionRecorderHttpInstrumentationHooksNode.d.ts} +0 -0
- /package/dist/src/{constants.browser.d.ts → constants/constants.browser.d.ts} +0 -0
- /package/dist/src/{constants.browser.js → constants/constants.browser.js} +0 -0
- /package/dist/src/{constants.node.d.ts → constants/constants.node.d.ts} +0 -0
- /package/dist/src/{constants.node.js → constants/constants.node.js} +0 -0
- /package/dist/src/{SessionRecorderHttpInstrumentationHooksNode.d.ts → instrumentations/SessionRecorderHttpInstrumentationHooksNode.d.ts} +0 -0
- /package/src/{constants.browser.ts → constants/constants.browser.ts} +0 -0
- /package/src/{constants.node.ts → constants/constants.node.ts} +0 -0
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
import { ReadableSpan, SpanExporter } from '@opentelemetry/sdk-trace-base'
|
|
2
|
+
import {
|
|
3
|
+
OTLPExporterConfigBase,
|
|
4
|
+
OTLPExporterBase,
|
|
5
|
+
} from '@opentelemetry/otlp-exporter-base'
|
|
6
|
+
import {
|
|
7
|
+
createLegacyOtlpBrowserExportDelegate,
|
|
8
|
+
} from '@opentelemetry/otlp-exporter-base/browser-http'
|
|
9
|
+
import {
|
|
10
|
+
MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_HTTP_URL,
|
|
11
|
+
MULTIPLAYER_TRACE_DEBUG_PREFIX,
|
|
12
|
+
MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX,
|
|
13
|
+
} from '../constants/constants.base'
|
|
14
|
+
|
|
15
|
+
export interface SessionRecorderBrowserTraceExporterConfig
|
|
16
|
+
extends OTLPExporterConfigBase {
|
|
17
|
+
/** API key for authentication. Required. */
|
|
18
|
+
apiKey: string
|
|
19
|
+
/** Whether to use postMessage fallback for cross-origin requests */
|
|
20
|
+
usePostMessageFallback?: boolean
|
|
21
|
+
/** PostMessage type identifier */
|
|
22
|
+
postMessageType?: string
|
|
23
|
+
/** PostMessage target origin */
|
|
24
|
+
postMessageTargetOrigin?: string
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Browser-specific trace exporter for Session Recorder
|
|
29
|
+
* Exports traces via HTTP to Multiplayer's OTLP endpoint with browser-specific optimizations
|
|
30
|
+
* Only exports spans with trace IDs starting with Multiplayer prefixes
|
|
31
|
+
*/
|
|
32
|
+
export class SessionRecorderBrowserTraceExporter
|
|
33
|
+
extends OTLPExporterBase<ReadableSpan[]>
|
|
34
|
+
implements SpanExporter {
|
|
35
|
+
|
|
36
|
+
private usePostMessage: boolean = false
|
|
37
|
+
private readonly postMessageType: string
|
|
38
|
+
private readonly postMessageTargetOrigin: string
|
|
39
|
+
private readonly config: SessionRecorderBrowserTraceExporterConfig
|
|
40
|
+
|
|
41
|
+
constructor(config: SessionRecorderBrowserTraceExporterConfig) {
|
|
42
|
+
const {
|
|
43
|
+
url = MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_HTTP_URL,
|
|
44
|
+
apiKey,
|
|
45
|
+
headers = {},
|
|
46
|
+
postMessageType = 'MULTIPLAYER_SESSION_DEBUGGER_LIB',
|
|
47
|
+
postMessageTargetOrigin = '*',
|
|
48
|
+
...restConfig
|
|
49
|
+
} = config
|
|
50
|
+
|
|
51
|
+
const _config = {
|
|
52
|
+
...restConfig,
|
|
53
|
+
url,
|
|
54
|
+
headers: {
|
|
55
|
+
'Content-Type': 'application/x-protobuf',
|
|
56
|
+
'User-Agent': '@multiplayer-app/session-recorder-common/1.0.0',
|
|
57
|
+
'Authorization': apiKey,
|
|
58
|
+
...headers,
|
|
59
|
+
},
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
super(
|
|
63
|
+
createLegacyOtlpBrowserExportDelegate(
|
|
64
|
+
_config,
|
|
65
|
+
{
|
|
66
|
+
serializeRequest: (spans: ReadableSpan[]) => {
|
|
67
|
+
// Create a simple trace service request structure
|
|
68
|
+
const request = {
|
|
69
|
+
resourceSpans: spans.map(span => ({
|
|
70
|
+
resource: {
|
|
71
|
+
attributes: Object.entries(span.resource.attributes).map(([key, value]) => ({
|
|
72
|
+
key,
|
|
73
|
+
value: { stringValue: String(value) },
|
|
74
|
+
})),
|
|
75
|
+
},
|
|
76
|
+
scopeSpans: [{
|
|
77
|
+
spans: [{
|
|
78
|
+
traceId: span.spanContext().traceId,
|
|
79
|
+
spanId: span.spanContext().spanId,
|
|
80
|
+
parentSpanId: span.spanContext().spanId, // Using spanId as fallback
|
|
81
|
+
name: span.name,
|
|
82
|
+
kind: span.kind,
|
|
83
|
+
startTimeUnixNano: span.startTime[0] * 1e9 + span.startTime[1],
|
|
84
|
+
endTimeUnixNano: span.endTime ? span.endTime[0] * 1e9 + span.endTime[1] : undefined,
|
|
85
|
+
attributes: Object.entries(span.attributes).map(([key, value]) => ({
|
|
86
|
+
key,
|
|
87
|
+
value: { stringValue: String(value) },
|
|
88
|
+
})),
|
|
89
|
+
events: span.events.map(event => ({
|
|
90
|
+
timeUnixNano: event.time[0] * 1e9 + event.time[1],
|
|
91
|
+
name: event.name,
|
|
92
|
+
attributes: Object.entries(event.attributes || {}).map(([key, value]) => ({
|
|
93
|
+
key,
|
|
94
|
+
value: { stringValue: String(value) },
|
|
95
|
+
})),
|
|
96
|
+
})),
|
|
97
|
+
links: span.links.map(link => ({
|
|
98
|
+
traceId: link.context.traceId,
|
|
99
|
+
spanId: link.context.spanId,
|
|
100
|
+
attributes: Object.entries(link.attributes || {}).map(([key, value]) => ({
|
|
101
|
+
key,
|
|
102
|
+
value: { stringValue: String(value) },
|
|
103
|
+
})),
|
|
104
|
+
})),
|
|
105
|
+
status: {
|
|
106
|
+
code: span.status.code,
|
|
107
|
+
message: span.status.message || '',
|
|
108
|
+
},
|
|
109
|
+
}],
|
|
110
|
+
}],
|
|
111
|
+
})),
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
const encoder = new TextEncoder()
|
|
115
|
+
return encoder.encode(JSON.stringify(request))
|
|
116
|
+
},
|
|
117
|
+
deserializeResponse: (arg: Uint8Array) => {
|
|
118
|
+
const decoder = new TextDecoder()
|
|
119
|
+
return JSON.parse(decoder.decode(arg))
|
|
120
|
+
},
|
|
121
|
+
},
|
|
122
|
+
'v1/traces',
|
|
123
|
+
{ 'Content-Type': 'application/json' },
|
|
124
|
+
),
|
|
125
|
+
)
|
|
126
|
+
|
|
127
|
+
this.config = config
|
|
128
|
+
this.postMessageType = postMessageType
|
|
129
|
+
this.postMessageTargetOrigin = postMessageTargetOrigin
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
override export(spans: ReadableSpan[], resultCallback: (result: { code: number }) => void): void {
|
|
133
|
+
// Filter spans to only include those with Multiplayer trace prefixes
|
|
134
|
+
const filteredSpans = spans.filter(span => {
|
|
135
|
+
const traceId = span.spanContext().traceId
|
|
136
|
+
return traceId.startsWith(MULTIPLAYER_TRACE_DEBUG_PREFIX) ||
|
|
137
|
+
traceId.startsWith(MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX)
|
|
138
|
+
})
|
|
139
|
+
|
|
140
|
+
// Only proceed if there are filtered spans
|
|
141
|
+
if (filteredSpans.length === 0) {
|
|
142
|
+
resultCallback({ code: 0 })
|
|
143
|
+
return
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
if (this.usePostMessage) {
|
|
147
|
+
this.exportViaPostMessage(filteredSpans, resultCallback)
|
|
148
|
+
return
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
super.export(filteredSpans, (result) => {
|
|
152
|
+
if (result.code === 0) {
|
|
153
|
+
resultCallback(result)
|
|
154
|
+
} else if (this.config.usePostMessageFallback) {
|
|
155
|
+
this.usePostMessage = true
|
|
156
|
+
this.exportViaPostMessage(filteredSpans, resultCallback)
|
|
157
|
+
} else {
|
|
158
|
+
resultCallback(result)
|
|
159
|
+
}
|
|
160
|
+
})
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
override shutdown(): Promise<void> {
|
|
164
|
+
return Promise.resolve()
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
private exportViaPostMessage(spans: ReadableSpan[], resultCallback: (result: { code: number }) => void): void {
|
|
168
|
+
if (typeof window === 'undefined') {
|
|
169
|
+
resultCallback({ code: 1 })
|
|
170
|
+
return
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
try {
|
|
174
|
+
window.postMessage(
|
|
175
|
+
{
|
|
176
|
+
action: 'traces',
|
|
177
|
+
type: this.postMessageType,
|
|
178
|
+
payload: spans.map(span => this._serializeSpan(span)),
|
|
179
|
+
},
|
|
180
|
+
this.postMessageTargetOrigin,
|
|
181
|
+
)
|
|
182
|
+
resultCallback({ code: 0 })
|
|
183
|
+
} catch (e) {
|
|
184
|
+
resultCallback({ code: 1 })
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
private _serializeSpan(span: ReadableSpan): any {
|
|
189
|
+
const spanContext = span.spanContext()
|
|
190
|
+
return {
|
|
191
|
+
_spanContext: spanContext,
|
|
192
|
+
name: span.name,
|
|
193
|
+
kind: span.kind,
|
|
194
|
+
links: span.links,
|
|
195
|
+
ended: span.ended,
|
|
196
|
+
events: span.events,
|
|
197
|
+
status: span.status,
|
|
198
|
+
endTime: span.endTime,
|
|
199
|
+
startTime: span.startTime,
|
|
200
|
+
duration: span.duration,
|
|
201
|
+
attributes: span.attributes,
|
|
202
|
+
parentSpanId: spanContext.spanId, // Using spanId as parentSpanId is not available in newer versions
|
|
203
|
+
droppedAttributesCount: span.droppedAttributesCount,
|
|
204
|
+
droppedEventsCount: span.droppedEventsCount,
|
|
205
|
+
droppedLinksCount: span.droppedLinksCount,
|
|
206
|
+
resource: {
|
|
207
|
+
attributes: span.resource.attributes,
|
|
208
|
+
asyncAttributesPending: span.resource.asyncAttributesPending,
|
|
209
|
+
},
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { OTLPLogExporter } from '@opentelemetry/exporter-logs-otlp-proto'
|
|
2
|
+
import {
|
|
3
|
+
MULTIPLAYER_OTEL_DEFAULT_LOGS_EXPORTER_GRPC_URL,
|
|
4
|
+
MULTIPLAYER_TRACE_DEBUG_PREFIX,
|
|
5
|
+
MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX,
|
|
6
|
+
} from '../constants/constants.base'
|
|
7
|
+
|
|
8
|
+
export interface SessionRecorderGrpcLogsExporterConfig {
|
|
9
|
+
/** The URL to send logs to. Defaults to MULTIPLAYER_OTEL_DEFAULT_LOGS_EXPORTER_GRPC_URL */
|
|
10
|
+
url?: string
|
|
11
|
+
/** API key for authentication. Required. */
|
|
12
|
+
apiKey: string
|
|
13
|
+
/** Timeout for gRPC requests in milliseconds. Defaults to 30000 */
|
|
14
|
+
timeoutMillis?: number
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* gRPC logs exporter for Session Recorder
|
|
19
|
+
* Exports logs via gRPC to Multiplayer's OTLP endpoint
|
|
20
|
+
* Only exports logs with trace IDs starting with Multiplayer prefixes
|
|
21
|
+
* Note: API key authentication may need to be handled at the gRPC client level
|
|
22
|
+
*/
|
|
23
|
+
export class SessionRecorderGrpcLogsExporter extends OTLPLogExporter {
|
|
24
|
+
constructor(config: SessionRecorderGrpcLogsExporterConfig) {
|
|
25
|
+
const {
|
|
26
|
+
url = MULTIPLAYER_OTEL_DEFAULT_LOGS_EXPORTER_GRPC_URL,
|
|
27
|
+
timeoutMillis = 30000,
|
|
28
|
+
} = config
|
|
29
|
+
|
|
30
|
+
super({
|
|
31
|
+
url,
|
|
32
|
+
timeoutMillis,
|
|
33
|
+
})
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
override export(logs: any[], resultCallback: (result: { code: number }) => void): void {
|
|
37
|
+
// Filter logs to only include those with Multiplayer trace prefixes
|
|
38
|
+
const filteredLogs = logs.filter(log => {
|
|
39
|
+
const traceId = log.spanContext?.traceId || log.traceId
|
|
40
|
+
return traceId && (traceId.startsWith(MULTIPLAYER_TRACE_DEBUG_PREFIX) ||
|
|
41
|
+
traceId.startsWith(MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX))
|
|
42
|
+
})
|
|
43
|
+
|
|
44
|
+
// Only proceed if there are filtered logs
|
|
45
|
+
if (filteredLogs.length === 0) {
|
|
46
|
+
resultCallback({ code: 0 })
|
|
47
|
+
return
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
super.export(filteredLogs, resultCallback)
|
|
51
|
+
}
|
|
52
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-proto'
|
|
2
|
+
import {
|
|
3
|
+
MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_GRPC_URL,
|
|
4
|
+
MULTIPLAYER_TRACE_DEBUG_PREFIX,
|
|
5
|
+
MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX,
|
|
6
|
+
} from '../constants/constants.base'
|
|
7
|
+
|
|
8
|
+
export interface SessionRecorderGrpcTraceExporterConfig {
|
|
9
|
+
/** The URL to send traces to. Defaults to MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_GRPC_URL */
|
|
10
|
+
url?: string
|
|
11
|
+
/** API key for authentication. Required. */
|
|
12
|
+
apiKey: string
|
|
13
|
+
/** Timeout for gRPC requests in milliseconds. Defaults to 30000 */
|
|
14
|
+
timeoutMillis?: number
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* gRPC trace exporter for Session Recorder
|
|
19
|
+
* Exports traces via gRPC to Multiplayer's OTLP endpoint
|
|
20
|
+
* Only exports spans with trace IDs starting with Multiplayer prefixes
|
|
21
|
+
* Note: API key authentication may need to be handled at the gRPC client level
|
|
22
|
+
*/
|
|
23
|
+
export class SessionRecorderGrpcTraceExporter extends OTLPTraceExporter {
|
|
24
|
+
constructor(config: SessionRecorderGrpcTraceExporterConfig) {
|
|
25
|
+
const {
|
|
26
|
+
url = MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_GRPC_URL,
|
|
27
|
+
timeoutMillis = 30000,
|
|
28
|
+
} = config
|
|
29
|
+
|
|
30
|
+
super({
|
|
31
|
+
url,
|
|
32
|
+
timeoutMillis,
|
|
33
|
+
})
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
override export(spans: any[], resultCallback: (result: { code: number }) => void): void {
|
|
37
|
+
const filteredSpans = spans.filter(span => {
|
|
38
|
+
const traceId = span.spanContext().traceId
|
|
39
|
+
return traceId.startsWith(MULTIPLAYER_TRACE_DEBUG_PREFIX) ||
|
|
40
|
+
traceId.startsWith(MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX)
|
|
41
|
+
})
|
|
42
|
+
|
|
43
|
+
if (filteredSpans.length === 0) {
|
|
44
|
+
resultCallback({ code: 0 })
|
|
45
|
+
return
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
super.export(filteredSpans, resultCallback)
|
|
49
|
+
}
|
|
50
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { OTLPLogExporter } from '@opentelemetry/exporter-logs-otlp-http'
|
|
2
|
+
import {
|
|
3
|
+
MULTIPLAYER_OTEL_DEFAULT_LOGS_EXPORTER_HTTP_URL,
|
|
4
|
+
MULTIPLAYER_TRACE_DEBUG_PREFIX,
|
|
5
|
+
MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX,
|
|
6
|
+
} from '../constants/constants.base'
|
|
7
|
+
|
|
8
|
+
export interface SessionRecorderHttpLogsExporterConfig {
|
|
9
|
+
/** The URL to send logs to. Defaults to MULTIPLAYER_OTEL_DEFAULT_LOGS_EXPORTER_HTTP_URL */
|
|
10
|
+
url?: string
|
|
11
|
+
/** API key for authentication. Required. */
|
|
12
|
+
apiKey: string
|
|
13
|
+
/** Timeout for HTTP requests in milliseconds. Defaults to 30000 */
|
|
14
|
+
timeoutMillis?: number
|
|
15
|
+
/** Whether to keep the connection alive. Defaults to true */
|
|
16
|
+
keepAlive?: boolean
|
|
17
|
+
/** Maximum number of concurrent requests. Defaults to 20 */
|
|
18
|
+
concurrencyLimit?: number
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export class SessionRecorderHttpLogsExporter extends OTLPLogExporter {
|
|
22
|
+
constructor(config: SessionRecorderHttpLogsExporterConfig) {
|
|
23
|
+
const {
|
|
24
|
+
url = MULTIPLAYER_OTEL_DEFAULT_LOGS_EXPORTER_HTTP_URL,
|
|
25
|
+
apiKey,
|
|
26
|
+
timeoutMillis = 30000,
|
|
27
|
+
keepAlive = true,
|
|
28
|
+
concurrencyLimit = 20,
|
|
29
|
+
} = config
|
|
30
|
+
|
|
31
|
+
super({
|
|
32
|
+
url,
|
|
33
|
+
headers: {
|
|
34
|
+
'Content-Type': 'application/x-protobuf',
|
|
35
|
+
'User-Agent': '@multiplayer-app/session-recorder-common/1.0.0',
|
|
36
|
+
'authorization': apiKey,
|
|
37
|
+
},
|
|
38
|
+
timeoutMillis,
|
|
39
|
+
keepAlive,
|
|
40
|
+
concurrencyLimit,
|
|
41
|
+
})
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
override export(logs: any[], resultCallback: (result: { code: number }) => void): void {
|
|
45
|
+
const filteredLogs = logs.filter(log => {
|
|
46
|
+
const traceId = log.spanContext?.traceId || log.traceId
|
|
47
|
+
return traceId && (traceId.startsWith(MULTIPLAYER_TRACE_DEBUG_PREFIX) ||
|
|
48
|
+
traceId.startsWith(MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX))
|
|
49
|
+
})
|
|
50
|
+
|
|
51
|
+
if (filteredLogs.length === 0) {
|
|
52
|
+
resultCallback({ code: 0 })
|
|
53
|
+
return
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
super.export(filteredLogs, resultCallback)
|
|
57
|
+
}
|
|
58
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http'
|
|
2
|
+
import {
|
|
3
|
+
MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_HTTP_URL,
|
|
4
|
+
MULTIPLAYER_TRACE_DEBUG_PREFIX,
|
|
5
|
+
MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX,
|
|
6
|
+
} from '../constants/constants.base'
|
|
7
|
+
|
|
8
|
+
export interface SessionRecorderHttpTraceExporterConfig {
|
|
9
|
+
/** The URL to send traces to. Defaults to MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_HTTP_URL */
|
|
10
|
+
url?: string
|
|
11
|
+
/** API key for authentication. Required. */
|
|
12
|
+
apiKey: string
|
|
13
|
+
/** Timeout for HTTP requests in milliseconds. Defaults to 30000 */
|
|
14
|
+
timeoutMillis?: number
|
|
15
|
+
/** Whether to keep the connection alive. Defaults to true */
|
|
16
|
+
keepAlive?: boolean
|
|
17
|
+
/** Maximum number of concurrent requests. Defaults to 20 */
|
|
18
|
+
concurrencyLimit?: number
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* HTTP trace exporter for Session Recorder
|
|
23
|
+
* Exports traces via HTTP to Multiplayer's OTLP endpoint
|
|
24
|
+
* Only exports spans with trace IDs starting with Multiplayer prefixes
|
|
25
|
+
*/
|
|
26
|
+
export class SessionRecorderHttpTraceExporter extends OTLPTraceExporter {
|
|
27
|
+
constructor(config: SessionRecorderHttpTraceExporterConfig) {
|
|
28
|
+
const {
|
|
29
|
+
url = MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_HTTP_URL,
|
|
30
|
+
apiKey,
|
|
31
|
+
timeoutMillis = 30000,
|
|
32
|
+
keepAlive = true,
|
|
33
|
+
concurrencyLimit = 20,
|
|
34
|
+
} = config
|
|
35
|
+
|
|
36
|
+
super({
|
|
37
|
+
url,
|
|
38
|
+
headers: {
|
|
39
|
+
'Content-Type': 'application/x-protobuf',
|
|
40
|
+
'User-Agent': '@multiplayer-app/session-recorder-common/1.0.0',
|
|
41
|
+
'authorization': apiKey,
|
|
42
|
+
},
|
|
43
|
+
timeoutMillis,
|
|
44
|
+
keepAlive,
|
|
45
|
+
concurrencyLimit,
|
|
46
|
+
})
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
override export(spans: any[], resultCallback: (result: { code: number }) => void): void {
|
|
50
|
+
// Filter spans to only include those with Multiplayer trace prefixes
|
|
51
|
+
const filteredSpans = spans.filter(span => {
|
|
52
|
+
const traceId = span.spanContext().traceId
|
|
53
|
+
return traceId.startsWith(MULTIPLAYER_TRACE_DEBUG_PREFIX) ||
|
|
54
|
+
traceId.startsWith(MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX)
|
|
55
|
+
})
|
|
56
|
+
|
|
57
|
+
// Only proceed if there are filtered spans
|
|
58
|
+
if (filteredSpans.length === 0) {
|
|
59
|
+
resultCallback({ code: 0 })
|
|
60
|
+
return
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
super.export(filteredSpans, resultCallback)
|
|
64
|
+
}
|
|
65
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { SdkLogRecord, LogRecordExporter } from '@opentelemetry/sdk-logs'
|
|
2
|
+
import {
|
|
3
|
+
MULTIPLAYER_TRACE_DEBUG_PREFIX,
|
|
4
|
+
MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX,
|
|
5
|
+
} from '../constants/constants.base'
|
|
6
|
+
|
|
7
|
+
export interface SessionRecorderLogsExporterWrapperConfig {
|
|
8
|
+
exporter: LogRecordExporter
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export class SessionRecorderLogsExporterWrapper implements LogRecordExporter {
|
|
12
|
+
private readonly exporter: LogRecordExporter
|
|
13
|
+
|
|
14
|
+
constructor(config: SessionRecorderLogsExporterWrapperConfig) {
|
|
15
|
+
this.exporter = config.exporter
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export(logs: SdkLogRecord[], resultCallback: (result: { code: number }) => void): void {
|
|
19
|
+
const filteredLogs = logs.filter(log => {
|
|
20
|
+
const traceId = log.spanContext?.traceId
|
|
21
|
+
return !traceId || (!traceId.startsWith(MULTIPLAYER_TRACE_DEBUG_PREFIX) &&
|
|
22
|
+
!traceId.startsWith(MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX))
|
|
23
|
+
})
|
|
24
|
+
|
|
25
|
+
if (filteredLogs.length === 0) {
|
|
26
|
+
resultCallback({ code: 0 })
|
|
27
|
+
return
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
this.exporter.export(filteredLogs, resultCallback)
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
shutdown(): Promise<void> {
|
|
34
|
+
return this.exporter.shutdown()
|
|
35
|
+
}
|
|
36
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { ReadableSpan, SpanExporter } from '@opentelemetry/sdk-trace-base'
|
|
2
|
+
import {
|
|
3
|
+
MULTIPLAYER_TRACE_DEBUG_PREFIX,
|
|
4
|
+
MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX,
|
|
5
|
+
} from '../constants/constants.base'
|
|
6
|
+
|
|
7
|
+
export interface SessionRecorderTraceExporterWrapperConfig {
|
|
8
|
+
exporter: SpanExporter
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export class SessionRecorderTraceExporterWrapper implements SpanExporter {
|
|
12
|
+
private readonly exporter: SpanExporter
|
|
13
|
+
|
|
14
|
+
constructor(config: SessionRecorderTraceExporterWrapperConfig) {
|
|
15
|
+
this.exporter = config.exporter
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export(spans: ReadableSpan[], resultCallback: (result: { code: number }) => void): void {
|
|
19
|
+
const filteredSpans = spans.filter(span => {
|
|
20
|
+
const traceId = span.spanContext().traceId
|
|
21
|
+
return !traceId.startsWith(MULTIPLAYER_TRACE_DEBUG_PREFIX) &&
|
|
22
|
+
!traceId.startsWith(MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX)
|
|
23
|
+
})
|
|
24
|
+
|
|
25
|
+
if (filteredSpans.length === 0) {
|
|
26
|
+
resultCallback({ code: 0 })
|
|
27
|
+
return
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
this.exporter.export(filteredSpans, resultCallback)
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
shutdown(): Promise<void> {
|
|
34
|
+
return this.exporter.shutdown()
|
|
35
|
+
}
|
|
36
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './SessionRecorderBrowserTraceExporter'
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export * from './SessionRecorderHttpTraceExporter'
|
|
2
|
+
export * from './SessionRecorderHttpLogsExporter'
|
|
3
|
+
export * from './SessionRecorderGrpcTraceExporter'
|
|
4
|
+
export * from './SessionRecorderGrpcLogsExporter'
|
|
5
|
+
export * from './SessionRecorderTraceExporterWrapper'
|
|
6
|
+
export * from './SessionRecorderLogsExporterWrapper'
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export * from './SessionRecorderHttpTraceExporter'
|
|
2
|
+
export * from './SessionRecorderHttpLogsExporter'
|
|
3
|
+
export * from './SessionRecorderGrpcTraceExporter'
|
|
4
|
+
export * from './SessionRecorderGrpcLogsExporter'
|
|
5
|
+
export * from './SessionRecorderBrowserTraceExporter'
|
|
6
|
+
export * from './SessionRecorderTraceExporterWrapper'
|
|
7
|
+
export * from './SessionRecorderLogsExporterWrapper'
|
package/src/index-browser.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export * from './constants.browser'
|
|
2
|
-
export { SessionRecorderHttpTraceExporterBrowser } from './SessionRecorderHttpTraceExporterBrowser'
|
|
1
|
+
export * from './constants/constants.browser'
|
|
3
2
|
export { SessionRecorderIdGenerator } from './SessionRecorderIdGenerator'
|
|
4
3
|
export { SessionRecorderJsonTraceSerializer } from './SessionRecorderJsonTraceSerializer'
|
|
5
4
|
export { SessionRecorderTraceIdRatioBasedSampler } from './SessionRecorderTraceIdRatioBasedSampler'
|
|
6
5
|
export * as SessionRecorderSdk from './sdk'
|
|
7
6
|
export * from './type'
|
|
7
|
+
export * from './exporters/index-browser'
|
package/src/index-node.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
export * from './constants.node'
|
|
2
|
-
export { SessionRecorderHttpInstrumentationHooksNode } from './SessionRecorderHttpInstrumentationHooksNode'
|
|
1
|
+
export * from './constants/constants.node'
|
|
2
|
+
export { SessionRecorderHttpInstrumentationHooksNode } from './instrumentations/SessionRecorderHttpInstrumentationHooksNode'
|
|
3
3
|
export { SessionRecorderIdGenerator } from './SessionRecorderIdGenerator'
|
|
4
4
|
export { SessionRecorderJsonTraceSerializer } from './SessionRecorderJsonTraceSerializer'
|
|
5
5
|
export { SessionRecorderTraceIdRatioBasedSampler } from './SessionRecorderTraceIdRatioBasedSampler'
|
|
6
6
|
export * as SessionRecorderSdk from './sdk'
|
|
7
7
|
export * from './type'
|
|
8
|
+
export * from './exporters/index-node'
|
package/src/index.ts
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
export * from './constants.node'
|
|
2
|
-
export { SessionRecorderHttpTraceExporterBrowser } from './SessionRecorderHttpTraceExporterBrowser'
|
|
3
|
-
export { SessionRecorderHttpInstrumentationHooksNode } from './SessionRecorderHttpInstrumentationHooksNode'
|
|
1
|
+
export * from './constants/constants.node'
|
|
4
2
|
export { SessionRecorderIdGenerator } from './SessionRecorderIdGenerator'
|
|
5
|
-
export { SessionRecorderJsonTraceSerializer } from './SessionRecorderJsonTraceSerializer'
|
|
6
3
|
export { SessionRecorderTraceIdRatioBasedSampler } from './SessionRecorderTraceIdRatioBasedSampler'
|
|
7
4
|
export * as SessionRecorderSdk from './sdk'
|
|
8
5
|
export * from './type'
|
|
6
|
+
export * from './exporters'
|
|
7
|
+
export * from './instrumentations/index-node'
|
|
@@ -13,17 +13,17 @@ import {
|
|
|
13
13
|
MULTIPLAYER_MAX_HTTP_REQUEST_RESPONSE_SIZE,
|
|
14
14
|
ATTR_MULTIPLAYER_HTTP_RESPONSE_BODY_ENCODING,
|
|
15
15
|
MULTIPLAYER_TRACE_DEBUG_PREFIX,
|
|
16
|
-
MULTIPLAYER_TRACE_DOC_PREFIX
|
|
17
|
-
} from '
|
|
16
|
+
MULTIPLAYER_TRACE_DOC_PREFIX,
|
|
17
|
+
} from '../constants/constants.node'
|
|
18
18
|
import {
|
|
19
19
|
mask,
|
|
20
20
|
schemify,
|
|
21
21
|
isGzip,
|
|
22
|
-
} from '
|
|
22
|
+
} from '../sdk'
|
|
23
23
|
import {
|
|
24
24
|
sensitiveFields,
|
|
25
|
-
sensitiveHeaders
|
|
26
|
-
} from '
|
|
25
|
+
sensitiveHeaders,
|
|
26
|
+
} from '../sdk/mask'
|
|
27
27
|
|
|
28
28
|
interface HttpResponseHookOptions {
|
|
29
29
|
maxPayloadSizeBytes?: number
|
|
@@ -67,7 +67,7 @@ interface HttpRequestHookOptions {
|
|
|
67
67
|
}
|
|
68
68
|
|
|
69
69
|
const setDefaultOptions = (
|
|
70
|
-
options: HttpResponseHookOptions | HttpResponseHookOptions
|
|
70
|
+
options: HttpResponseHookOptions | HttpResponseHookOptions,
|
|
71
71
|
): Omit<HttpResponseHookOptions & HttpResponseHookOptions, 'maskBody' | 'maskHeaders'>
|
|
72
72
|
& {
|
|
73
73
|
maskBody: (arg: any, span: Span) => any
|
|
@@ -157,18 +157,18 @@ export const SessionRecorderHttpInstrumentationHooksNode = {
|
|
|
157
157
|
|
|
158
158
|
const [oldWrite, oldEnd] = [_response.write, _response.end]
|
|
159
159
|
|
|
160
|
-
const chunks: Buffer[] = []
|
|
160
|
+
const chunks: Buffer[] = []
|
|
161
161
|
|
|
162
162
|
if (_options.captureBody) {
|
|
163
163
|
(_response.write as unknown) = function (...restArgs: any[]) {
|
|
164
164
|
chunks.push(Buffer.from(restArgs[0]))
|
|
165
|
-
|
|
165
|
+
|
|
166
166
|
// @ts-ignore
|
|
167
167
|
oldWrite.apply(_response, restArgs)
|
|
168
168
|
}
|
|
169
169
|
}
|
|
170
170
|
|
|
171
|
-
|
|
171
|
+
|
|
172
172
|
// @ts-ignore
|
|
173
173
|
_response.end = async function (...restArgs) {
|
|
174
174
|
if (_options.captureBody && restArgs[0]) {
|
|
@@ -267,7 +267,7 @@ export const SessionRecorderHttpInstrumentationHooksNode = {
|
|
|
267
267
|
}
|
|
268
268
|
}
|
|
269
269
|
|
|
270
|
-
|
|
270
|
+
|
|
271
271
|
// @ts-ignore
|
|
272
272
|
return oldEnd.apply(_response, restArgs)
|
|
273
273
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './SessionRecorderHttpInstrumentationHooksNode'
|
|
@@ -2,14 +2,14 @@ import { context, trace, SpanStatusCode } from '@opentelemetry/api'
|
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* @description Add error to current span
|
|
5
|
-
* @param {Error} error
|
|
5
|
+
* @param {Error} error
|
|
6
6
|
* @returns {void}
|
|
7
7
|
*/
|
|
8
8
|
export const captureException = (error: Error) => {
|
|
9
|
-
if (!error) return
|
|
9
|
+
if (!error) return
|
|
10
10
|
|
|
11
11
|
const span = trace.getSpan(context.active())
|
|
12
|
-
if (!span) return
|
|
12
|
+
if (!span) return
|
|
13
13
|
|
|
14
14
|
span.recordException(error)
|
|
15
15
|
span.setStatus({
|