@grafana/faro-transport-otlp-http 2.0.0-beta-2 → 2.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # @grafana/transport-otlp-http
1
+ # @grafana/faro-transport-otlp-http
2
2
 
3
3
  Faro transport which converts the Faro model to the Open Telemetry model.
4
4
 
@@ -1 +1 @@
1
- var GrafanaFaroTransportOtlpHttp=function(e){"use strict";function t(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]])}return r}var r;function n(e,t){return typeof e===t}"function"==typeof SuppressedError&&SuppressedError,function(e){e.EXCEPTION="exception",e.LOG="log",e.MEASUREMENT="measurement",e.TRACE="trace",e.EVENT="event"}(r||(r={})),r.EXCEPTION,r.LOG,r.MEASUREMENT,r.TRACE,r.EVENT;const o=e=>n(e,"number")&&!isNaN(e)||n(e,"bigint"),s=e=>!(e=>n(e,"null"))(e)&&n(e,"object"),i=e=>function(e,t){return Object.prototype.toString.call(e)===`[object ${t}]`}(e,"Array");var a,l;function u(){}!function(e){e.TRACE="trace",e.DEBUG="debug",e.INFO="info",e.LOG="log",e.WARN="warn",e.ERROR="error"}(a||(a={})),a.LOG,a.TRACE,a.DEBUG,a.INFO,a.LOG,a.WARN,a.ERROR,function(e){e[e.OFF=0]="OFF",e[e.ERROR=1]="ERROR",e[e.WARN=2]="WARN",e[e.INFO=3]="INFO",e[e.VERBOSE=4]="VERBOSE"}(l||(l={}));const c={debug:u,error:u,info:u,prefix:"Faro",warn:u};l.ERROR;const d=Object.assign({},console);class g{constructor(){this.unpatchedConsole=d,this.internalLogger=c,this.config={},this.metas={}}logDebug(...e){this.internalLogger.debug(`${this.name}\n`,...e)}logInfo(...e){this.internalLogger.info(`${this.name}\n`,...e)}logWarn(...e){this.internalLogger.warn(`${this.name}\n`,...e)}logError(...e){this.internalLogger.error(`${this.name}\n`,...e)}}class v extends g{isBatched(){return!1}getIgnoreUrls(){return[]}}const p="2.0.0-beta-2",f="exception.message",m="exception.type";function h(e){return(e=>n(e,"string"))(e)?{stringValue:e}:(e=>o(e)&&Number.isInteger(e))(e)?{intValue:e}:o(e)?{doubleValue:e}:(e=>n(e,"boolean"))(e)?{boolValue:e}:i(e)?{arrayValue:{values:e.map(h)}}:e instanceof Uint8Array?{bytesValue:e}:s(e)?{kvlistValue:{values:Object.entries(e).map(([e,t])=>b(e,t)).filter(y)}}:{}}function b(e,t){if(null!=t&&""!==t)return{key:e,value:h(t)}}function y(e){return Boolean(e)&&"string"==typeof(null==e?void 0:e.key)&&void 0!==(null==e?void 0:e.value)}function O(e,t){function n(e){return{scope:{name:"@grafana/faro-web-sdk",version:p},logRecords:[o(e)]}}function o(n){const{type:o}=n;switch(o){case r.LOG:return function(e){var t,r;const{meta:n,payload:o}=e,l=i(o.timestamp),u=h(o.message);function c(e){switch(e){case a.TRACE:return{severityNumber:1,severityText:"TRACE"};case a.DEBUG:return{severityNumber:5,severityText:"DEBUG"};case a.INFO:return{severityNumber:9,severityText:"INFO"};case a.LOG:return{severityNumber:10,severityText:"INFO2"};case a.WARN:return{severityNumber:13,severityText:"WARN"};case a.ERROR:return{severityNumber:17,severityText:"ERROR"}}}return Object.assign(Object.assign({timeUnixNano:l},c(o.level)),{body:u,attributes:[...s(n),b("faro.log.context",o.context)].filter(y),traceId:null===(t=o.trace)||void 0===t?void 0:t.trace_id,spanId:null===(r=o.trace)||void 0===r?void 0:r.span_id})}(n);case r.EXCEPTION:return function(e){var r,n;const{meta:o,payload:a}=e,l=i(a.timestamp),u=R(e,null==t?void 0:t.createErrorLogBody);return Object.assign(Object.assign({timeUnixNano:l},u?{body:u}:{}),{attributes:[...s(o),b(m,a.type),b(f,a.value),b("faro.error.stacktrace",a.stacktrace),b("faro.error.context",a.context)].filter(y),traceId:null===(r=a.trace)||void 0===r?void 0:r.trace_id,spanId:null===(n=a.trace)||void 0===n?void 0:n.span_id})}(n);case r.EVENT:return function(e){var t,r;const{meta:n,payload:o}=e,a=i(o.timestamp),l=h(o.name);return{timeUnixNano:a,body:l,attributes:[...s(n),b("event.name",o.name),b("event.domain",o.domain),b("event.attributes",o.attributes)].filter(y),traceId:null===(t=o.trace)||void 0===t?void 0:t.trace_id,spanId:null===(r=o.trace)||void 0===r?void 0:r.span_id}}(n);case r.MEASUREMENT:return function(e){var r,n;const{meta:o,payload:a}=e,l=i(a.timestamp),[u,c]=Object.entries(a.values).flat(),d=R(e,null==t?void 0:t.createMeasurementLogBody);return Object.assign(Object.assign({timeUnixNano:l},d?{body:d}:{}),{attributes:[...s(o),b("measurement.type",a.type),b("measurement.name",u),b("measurement.value",c),b("faro.measurement.context",a.context)].filter(y),traceId:null===(r=a.trace)||void 0===r?void 0:r.trace_id,spanId:null===(n=a.trace)||void 0===n?void 0:n.span_id})}(n);default:return null==e||e.error(`Unknown TransportItemType: ${o}`),{}}}function s(e){const{view:t,page:r,session:n,user:o}=e;return[b("view.name",null==t?void 0:t.name),b("url.full",null==r?void 0:r.url),b("page.id",null==r?void 0:r.id),b("page.attributes",null==r?void 0:r.attributes),b("session.id",null==n?void 0:n.id),b("session.attributes",null==n?void 0:n.attributes),b("user.id",null==o?void 0:o.id),b("user.name",null==o?void 0:o.username),b("user.email",null==o?void 0:o.email),b("user.full_name",null==o?void 0:o.fullName),b("user.roles",null==o?void 0:o.roles),b("user.hash",null==o?void 0:o.hash),b("user.attributes",null==o?void 0:o.attributes)].filter(y)}function i(e){return 1e6*Date.parse(e)}return{toResourceLog:function(e){return{resource:E(e),scopeLogs:[n(e)]}},toScopeLog:n,toLogRecord:o}}function E(e){const{browser:t,sdk:r,app:n}=e.meta;return{attributes:[b("browser.mobile",null==t?void 0:t.mobile),b("user_agent.original",null==t?void 0:t.userAgent),b("browser.language",null==t?void 0:t.language),b("browser.brands",null==t?void 0:t.brands),b("browser.platform",null==t?void 0:t.os),b("browser.name",null==t?void 0:t.name),b("browser.version",null==t?void 0:t.version),b("browser.screen_width",null==t?void 0:t.viewportWidth),b("browser.screen_height",null==t?void 0:t.viewportHeight),b("telemetry.sdk.name",null==r?void 0:r.name),b("telemetry.sdk.version",null==r?void 0:r.version),Boolean(r)?b("telemetry.sdk.language","webjs"):void 0,b("service.name",null==n?void 0:n.name),b("service.version",null==n?void 0:n.version),b("service.namespace",null==n?void 0:n.namespace),b("deployment.environment.name",null==n?void 0:n.environment)].filter(y)}}function R(e,t){return"function"==typeof t?h(t(e)):void 0}class L{constructor({internalLogger:e,customOtlpTransform:t,transportItem:r}){this.resourceSpans=[],this.internalLogger=e,this.resourceLogs=[],this.getLogTransforms=O(this.internalLogger,t),this.getTraceTransforms=(this.internalLogger,{toResourceSpan:function(e){var t,r;const n=E(e),o=null===(r=null===(t=e.payload.resourceSpans)||void 0===t?void 0:t[0])||void 0===r?void 0:r.scopeSpans;return{resource:n,scopeSpans:null!=o?o:[]}}}),r&&this.addResourceItem(r)}getPayload(){return{resourceLogs:this.resourceLogs,resourceSpans:this.resourceSpans}}addResourceItem(e){var t,n,o,s;const{type:i}=e;try{switch(i){case r.LOG:case r.EXCEPTION:case r.EVENT:case r.MEASUREMENT:const{toLogRecord:s,toResourceLog:a}=this.getLogTransforms;0===this.resourceLogs.length?this.resourceLogs=[a(e)]:null===(n=null===(t=this.resourceLogs[0])||void 0===t?void 0:t.scopeLogs[0])||void 0===n||n.logRecords.push(s(e));break;case r.TRACE:const{toResourceSpan:l}=this.getTraceTransforms;this.resourceSpans.push(l(e));break;default:null===(o=this.internalLogger)||void 0===o||o.error(`Unknown TransportItemType: ${i}`)}}catch(e){null===(s=this.internalLogger)||void 0===s||s.error(e)}}}return e.OtlpHttpTransport=class extends v{constructor(e){var t,r,n;super(),this.options=e,this.name="@grafana/faro-web-sdk:transport-otlp-http",this.version=p,this.sendingTracesDisabledUntil=new Date,this.sendingLogsDisabledUntil=new Date,this.rateLimitBackoffMs=null!==(t=e.defaultRateLimitBackoffMs)&&void 0!==t?t:5e3,this.promiseBuffer=function(e){const{size:t,concurrency:r}=e,n=[];let o=0;const s=()=>{if(o<r&&n.length){const{producer:e,resolve:t,reject:r}=n.shift();o++,e().then(e=>{o--,s(),t(e)},e=>{o--,s(),r(e)})}};return{add:e=>{if(n.length+o>=t)throw new Error("Task buffer full");return new Promise((t,r)=>{n.push({producer:e,resolve:t,reject:r}),s()})}}}({size:null!==(r=null==e?void 0:e.bufferSize)&&void 0!==r?r:30,concurrency:null!==(n=null==e?void 0:e.concurrency)&&void 0!==n?n:5})}getIgnoreUrls(){var e;const{tracesURL:t="",logsURL:r=""}=this.options;return[t,r].filter(Boolean).concat(null!==(e=this.config.ignoreUrls)&&void 0!==e?e:[])}isBatched(){return!0}send(e){const t=new L({internalLogger:this.internalLogger,customOtlpTransform:this.options.otlpTransform});e.forEach(e=>t.addResourceItem(e)),this.sendPayload(t.getPayload())}sendPayload(e){try{const{tracesURL:r="",logsURL:n=""}=this.options;for(const[o,s]of Object.entries(e)){if(!(i(s)&&s.length>0))continue;let e,a=e=>{},l="";switch(o){case"resourceSpans":l=r,e=this.sendingTracesDisabledUntil,a=e=>{this.sendingTracesDisabledUntil=e};break;case"resourceLogs":l=n,e=this.sendingLogsDisabledUntil,a=e=>{this.sendingLogsDisabledUntil=e}}if(e&&e>new Date(Date.now()))return void this.logWarn(`Dropping transport item due to too many requests. Backoff until ${e}`);const c=JSON.stringify({[o]:s}),{requestOptions:d,apiKey:g}=this.options,v=null!=d?d:{},{headers:p}=v,f=t(v,["headers"]);l&&this.promiseBuffer.add(()=>fetch(l,Object.assign({method:"POST",headers:Object.assign(Object.assign({"Content-Type":"application/json"},null!=p?p:{}),g?{"x-api-key":g}:{}),body:c,keepalive:c.length<=6e4},null!=f?f:{})).then(t=>(429===t.status&&(a(this.getRetryAfterDate(t)),this.logWarn(`Too many requests, backing off until ${e}`)),t.text().catch(u),t)).catch(e=>{this.logError("Failed sending payload to the receiver\n",JSON.parse(c),e)}))}}catch(e){this.logError(e)}}getRetryAfterDate(e){const t=Date.now(),r=e.headers.get("Retry-After");if(r){const e=Number(r);if(!isNaN(e))return new Date(1e3*e+t);const n=Date.parse(r);if(!isNaN(n))return new Date(n)}return new Date(t+this.rateLimitBackoffMs)}},e}({});
1
+ var GrafanaFaroTransportOtlpHttp=function(e){"use strict";function t(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]])}return r}var r;function n(e,t){return typeof e===t}"function"==typeof SuppressedError&&SuppressedError,function(e){e.EXCEPTION="exception",e.LOG="log",e.MEASUREMENT="measurement",e.TRACE="trace",e.EVENT="event"}(r||(r={})),r.EXCEPTION,r.LOG,r.MEASUREMENT,r.TRACE,r.EVENT;const o=e=>n(e,"number")&&!isNaN(e)||n(e,"bigint"),s=e=>!(e=>n(e,"null"))(e)&&n(e,"object"),i=e=>function(e,t){return Object.prototype.toString.call(e)===`[object ${t}]`}(e,"Array");var a,l;function u(){}!function(e){e.TRACE="trace",e.DEBUG="debug",e.INFO="info",e.LOG="log",e.WARN="warn",e.ERROR="error"}(a||(a={})),a.LOG,a.TRACE,a.DEBUG,a.INFO,a.LOG,a.WARN,a.ERROR,function(e){e[e.OFF=0]="OFF",e[e.ERROR=1]="ERROR",e[e.WARN=2]="WARN",e[e.INFO=3]="INFO",e[e.VERBOSE=4]="VERBOSE"}(l||(l={}));const c={debug:u,error:u,info:u,prefix:"Faro",warn:u};l.ERROR;const d=Object.assign({},console);class g{constructor(){this.unpatchedConsole=d,this.internalLogger=c,this.config={},this.metas={}}logDebug(...e){this.internalLogger.debug(`${this.name}\n`,...e)}logInfo(...e){this.internalLogger.info(`${this.name}\n`,...e)}logWarn(...e){this.internalLogger.warn(`${this.name}\n`,...e)}logError(...e){this.internalLogger.error(`${this.name}\n`,...e)}}class v extends g{isBatched(){return!1}getIgnoreUrls(){return[]}}const p="2.0.2",f="exception.message",m="exception.type";function h(e){return(e=>n(e,"string"))(e)?{stringValue:e}:(e=>o(e)&&Number.isInteger(e))(e)?{intValue:e}:o(e)?{doubleValue:e}:(e=>n(e,"boolean"))(e)?{boolValue:e}:i(e)?{arrayValue:{values:e.map(h)}}:e instanceof Uint8Array?{bytesValue:e}:s(e)?{kvlistValue:{values:Object.entries(e).map(([e,t])=>b(e,t)).filter(y)}}:{}}function b(e,t){if(null!=t&&""!==t)return{key:e,value:h(t)}}function y(e){return Boolean(e)&&"string"==typeof(null==e?void 0:e.key)&&void 0!==(null==e?void 0:e.value)}function O(e,t){function n(e){return{scope:{name:"@grafana/faro-web-sdk",version:p},logRecords:[o(e)]}}function o(n){const{type:o}=n;switch(o){case r.LOG:return function(e){var t,r;const{meta:n,payload:o}=e,l=i(o.timestamp),u=h(o.message);function c(e){switch(e){case a.TRACE:return{severityNumber:1,severityText:"TRACE"};case a.DEBUG:return{severityNumber:5,severityText:"DEBUG"};case a.INFO:return{severityNumber:9,severityText:"INFO"};case a.LOG:return{severityNumber:10,severityText:"INFO2"};case a.WARN:return{severityNumber:13,severityText:"WARN"};case a.ERROR:return{severityNumber:17,severityText:"ERROR"}}}return Object.assign(Object.assign({timeUnixNano:l},c(o.level)),{body:u,attributes:[...s(n),b("faro.log.context",o.context)].filter(y),traceId:null===(t=o.trace)||void 0===t?void 0:t.trace_id,spanId:null===(r=o.trace)||void 0===r?void 0:r.span_id})}(n);case r.EXCEPTION:return function(e){var r,n;const{meta:o,payload:a}=e,l=i(a.timestamp),u=R(e,null==t?void 0:t.createErrorLogBody);return Object.assign(Object.assign({timeUnixNano:l},u?{body:u}:{}),{attributes:[...s(o),b(m,a.type),b(f,a.value),b("faro.error.stacktrace",a.stacktrace),b("faro.error.context",a.context)].filter(y),traceId:null===(r=a.trace)||void 0===r?void 0:r.trace_id,spanId:null===(n=a.trace)||void 0===n?void 0:n.span_id})}(n);case r.EVENT:return function(e){var t,r;const{meta:n,payload:o}=e,a=i(o.timestamp),l=h(o.name);return{timeUnixNano:a,body:l,attributes:[...s(n),b("event.name",o.name),b("event.domain",o.domain),b("event.attributes",o.attributes)].filter(y),traceId:null===(t=o.trace)||void 0===t?void 0:t.trace_id,spanId:null===(r=o.trace)||void 0===r?void 0:r.span_id}}(n);case r.MEASUREMENT:return function(e){var r,n;const{meta:o,payload:a}=e,l=i(a.timestamp),[u,c]=Object.entries(a.values).flat(),d=R(e,null==t?void 0:t.createMeasurementLogBody);return Object.assign(Object.assign({timeUnixNano:l},d?{body:d}:{}),{attributes:[...s(o),b("measurement.type",a.type),b("measurement.name",u),b("measurement.value",c),b("faro.measurement.context",a.context)].filter(y),traceId:null===(r=a.trace)||void 0===r?void 0:r.trace_id,spanId:null===(n=a.trace)||void 0===n?void 0:n.span_id})}(n);default:return null==e||e.error(`Unknown TransportItemType: ${o}`),{}}}function s(e){const{view:t,page:r,session:n,user:o}=e;return[b("view.name",null==t?void 0:t.name),b("url.full",null==r?void 0:r.url),b("page.id",null==r?void 0:r.id),b("page.attributes",null==r?void 0:r.attributes),b("session.id",null==n?void 0:n.id),b("session.attributes",null==n?void 0:n.attributes),b("user.id",null==o?void 0:o.id),b("user.name",null==o?void 0:o.username),b("user.email",null==o?void 0:o.email),b("user.full_name",null==o?void 0:o.fullName),b("user.roles",null==o?void 0:o.roles),b("user.hash",null==o?void 0:o.hash),b("user.attributes",null==o?void 0:o.attributes)].filter(y)}function i(e){return 1e6*Date.parse(e)}return{toResourceLog:function(e){return{resource:E(e),scopeLogs:[n(e)]}},toScopeLog:n,toLogRecord:o}}function E(e){const{browser:t,sdk:r,app:n}=e.meta;return{attributes:[b("browser.mobile",null==t?void 0:t.mobile),b("user_agent.original",null==t?void 0:t.userAgent),b("browser.language",null==t?void 0:t.language),b("browser.brands",null==t?void 0:t.brands),b("browser.platform",null==t?void 0:t.os),b("browser.name",null==t?void 0:t.name),b("browser.version",null==t?void 0:t.version),b("browser.screen_width",null==t?void 0:t.viewportWidth),b("browser.screen_height",null==t?void 0:t.viewportHeight),b("telemetry.sdk.name",null==r?void 0:r.name),b("telemetry.sdk.version",null==r?void 0:r.version),r?b("telemetry.sdk.language","webjs"):void 0,b("service.name",null==n?void 0:n.name),b("service.version",null==n?void 0:n.version),b("service.namespace",null==n?void 0:n.namespace),b("deployment.environment.name",null==n?void 0:n.environment)].filter(y)}}function R(e,t){return"function"==typeof t?h(t(e)):void 0}class L{constructor({internalLogger:e,customOtlpTransform:t,transportItem:r}){this.resourceSpans=[],this.internalLogger=e,this.resourceLogs=[],this.getLogTransforms=O(this.internalLogger,t),this.getTraceTransforms=(this.internalLogger,{toResourceSpan:function(e){var t,r;const n=E(e),o=null===(r=null===(t=e.payload.resourceSpans)||void 0===t?void 0:t[0])||void 0===r?void 0:r.scopeSpans;return{resource:n,scopeSpans:null!=o?o:[]}}}),r&&this.addResourceItem(r)}getPayload(){return{resourceLogs:this.resourceLogs,resourceSpans:this.resourceSpans}}addResourceItem(e){var t,n,o,s;const{type:i}=e;try{switch(i){case r.LOG:case r.EXCEPTION:case r.EVENT:case r.MEASUREMENT:{const{toLogRecord:r,toResourceLog:o}=this.getLogTransforms;0===this.resourceLogs.length?this.resourceLogs=[o(e)]:null===(n=null===(t=this.resourceLogs[0])||void 0===t?void 0:t.scopeLogs[0])||void 0===n||n.logRecords.push(r(e));break}case r.TRACE:{const{toResourceSpan:t}=this.getTraceTransforms;this.resourceSpans.push(t(e));break}default:null===(o=this.internalLogger)||void 0===o||o.error(`Unknown TransportItemType: ${i}`)}}catch(e){null===(s=this.internalLogger)||void 0===s||s.error(e)}}}return e.OtlpHttpTransport=class extends v{constructor(e){var t,r,n;super(),this.options=e,this.name="@grafana/faro-web-sdk:transport-otlp-http",this.version=p,this.sendingTracesDisabledUntil=new Date,this.sendingLogsDisabledUntil=new Date,this.rateLimitBackoffMs=null!==(t=e.defaultRateLimitBackoffMs)&&void 0!==t?t:5e3,this.promiseBuffer=function(e){const{size:t,concurrency:r}=e,n=[];let o=0;const s=()=>{if(o<r&&n.length){const{producer:e,resolve:t,reject:r}=n.shift();o++,e().then(e=>{o--,s(),t(e)},e=>{o--,s(),r(e)})}};return{add:e=>{if(n.length+o>=t)throw new Error("Task buffer full");return new Promise((t,r)=>{n.push({producer:e,resolve:t,reject:r}),s()})}}}({size:null!==(r=null==e?void 0:e.bufferSize)&&void 0!==r?r:30,concurrency:null!==(n=null==e?void 0:e.concurrency)&&void 0!==n?n:5})}getIgnoreUrls(){var e;const{tracesURL:t="",logsURL:r=""}=this.options;return[t,r].filter(Boolean).concat(null!==(e=this.config.ignoreUrls)&&void 0!==e?e:[])}isBatched(){return!0}send(e){const t=new L({internalLogger:this.internalLogger,customOtlpTransform:this.options.otlpTransform});e.forEach(e=>t.addResourceItem(e)),this.sendPayload(t.getPayload())}sendPayload(e){try{const{tracesURL:r="",logsURL:n=""}=this.options;for(const[o,s]of Object.entries(e)){if(!(i(s)&&s.length>0))continue;let e,a=e=>{},l="";switch(o){case"resourceSpans":l=r,e=this.sendingTracesDisabledUntil,a=e=>{this.sendingTracesDisabledUntil=e};break;case"resourceLogs":l=n,e=this.sendingLogsDisabledUntil,a=e=>{this.sendingLogsDisabledUntil=e}}if(e&&e>new Date(Date.now()))return void this.logWarn(`Dropping transport item due to too many requests. Backoff until ${e}`);const c=JSON.stringify({[o]:s}),{requestOptions:d,apiKey:g}=this.options,v=null!=d?d:{},{headers:p}=v,f=t(v,["headers"]);l&&this.promiseBuffer.add(()=>fetch(l,Object.assign({method:"POST",headers:Object.assign(Object.assign({"Content-Type":"application/json"},null!=p?p:{}),g?{"x-api-key":g}:{}),body:c,keepalive:c.length<=6e4},null!=f?f:{})).then(t=>(429===t.status&&(a(this.getRetryAfterDate(t)),this.logWarn(`Too many requests, backing off until ${e}`)),t.text().catch(u),t)).catch(e=>{this.logError("Failed sending payload to the receiver\n",JSON.parse(c),e)}))}}catch(e){this.logError(e)}}getRetryAfterDate(e){const t=Date.now(),r=e.headers.get("Retry-After");if(r){const e=Number(r);if(!isNaN(e))return new Date(1e3*e+t);const n=Date.parse(r);if(!isNaN(n))return new Date(n)}return new Date(t+this.rateLimitBackoffMs)}},e}({});
@@ -4,7 +4,7 @@ import type { OtlpHttpTransportOptions } from './types';
4
4
  export declare class OtlpHttpTransport extends BaseTransport {
5
5
  private options;
6
6
  readonly name = "@grafana/faro-web-sdk:transport-otlp-http";
7
- readonly version = "2.0.0-beta-2";
7
+ readonly version = "2.0.2";
8
8
  private readonly promiseBuffer;
9
9
  private readonly rateLimitBackoffMs;
10
10
  private sendingTracesDisabledUntil;
@@ -29,7 +29,7 @@ var OtelPayload = /** @class */ (function () {
29
29
  case faro_core_1.TransportItemType.LOG:
30
30
  case faro_core_1.TransportItemType.EXCEPTION:
31
31
  case faro_core_1.TransportItemType.EVENT:
32
- case faro_core_1.TransportItemType.MEASUREMENT:
32
+ case faro_core_1.TransportItemType.MEASUREMENT: {
33
33
  var _e = this.getLogTransforms, toLogRecord = _e.toLogRecord, toResourceLog = _e.toResourceLog;
34
34
  // Currently the scope is fixed to '@grafana/faro-web-sdk'.
35
35
  // Once we are able to drive the scope by instrumentation this will change and we need to align this function
@@ -42,7 +42,8 @@ var OtelPayload = /** @class */ (function () {
42
42
  (_b = (_a = this.resourceLogs[0]) === null || _a === void 0 ? void 0 : _a.scopeLogs[0]) === null || _b === void 0 ? void 0 : _b.logRecords.push(toLogRecord(transportItem));
43
43
  }
44
44
  break;
45
- case faro_core_1.TransportItemType.TRACE:
45
+ }
46
+ case faro_core_1.TransportItemType.TRACE: {
46
47
  var toResourceSpan = this.getTraceTransforms.toResourceSpan;
47
48
  // We use the Otel Model as it is to avoid unnecessary resource consumption.
48
49
  // This is because we don't need the same logic to add items as it is for logs.
@@ -50,6 +51,7 @@ var OtelPayload = /** @class */ (function () {
50
51
  // We only transform the resource object to ensure that we are compliant with the respective Faro Metas which add a few more items to the resource object.
51
52
  this.resourceSpans.push(toResourceSpan(transportItem));
52
53
  break;
54
+ }
53
55
  default:
54
56
  (_c = this.internalLogger) === null || _c === void 0 ? void 0 : _c.error("Unknown TransportItemType: ".concat(type));
55
57
  break;
@@ -1 +1 @@
1
- {"version":3,"file":"OtelPayload.js","sourceRoot":"","sources":["../../../src/payload/OtelPayload.ts"],"names":[],"mappings":";;;AAAA,gDAAuD;AAKvD,yCAAmE;AAWnE;IASE,qBAAY,EAAyE;YAAvE,cAAc,oBAAA,EAAE,mBAAmB,yBAAA,EAAE,aAAa,mBAAA;QAPxD,kBAAa,GAAG,EAAmB,CAAC;QAQ1C,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QACrC,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;QAEvB,IAAI,CAAC,gBAAgB,GAAG,IAAA,4BAAgB,EAAC,IAAI,CAAC,cAAc,EAAE,mBAAmB,CAAC,CAAC;QACnF,IAAI,CAAC,kBAAkB,GAAG,IAAA,8BAAkB,EAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAElE,IAAI,aAAa,EAAE,CAAC;YAClB,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAED,gCAAU,GAAV;QACE,OAAO;YACL,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,aAAa,EAAE,IAAI,CAAC,aAAa;SACzB,CAAC;IACb,CAAC;IAED,qCAAe,GAAf,UAAgB,aAA4B;;QAClC,IAAA,IAAI,GAAK,aAAa,KAAlB,CAAmB;QAE/B,IAAI,CAAC;YACH,QAAQ,IAAI,EAAE,CAAC;gBACb,KAAK,6BAAiB,CAAC,GAAG,CAAC;gBAC3B,KAAK,6BAAiB,CAAC,SAAS,CAAC;gBACjC,KAAK,6BAAiB,CAAC,KAAK,CAAC;gBAC7B,KAAK,6BAAiB,CAAC,WAAW;oBAC1B,IAAA,KAAiC,IAAI,CAAC,gBAAgB,EAApD,WAAW,iBAAA,EAAE,aAAa,mBAA0B,CAAC;oBAE7D,2DAA2D;oBAC3D,6GAA6G;oBAC7G,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBACnC,IAAI,CAAC,YAAY,GAAG,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC;oBACrD,CAAC;yBAAM,CAAC;wBACN,iGAAiG;wBACjG,kDAAkD;wBAClD,MAAA,MAAA,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,0CAAE,SAAS,CAAC,CAAC,CAAC,0CAAE,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC;oBAClF,CAAC;oBACD,MAAM;gBACR,KAAK,6BAAiB,CAAC,KAAK;oBAClB,IAAA,cAAc,GAAK,IAAI,CAAC,kBAAkB,eAA5B,CAA6B;oBAEnD,4EAA4E;oBAC5E,+EAA+E;oBAC/E,0HAA0H;oBAC1H,0JAA0J;oBAC1J,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,aAA0C,CAAC,CAAC,CAAC;oBAEpF,MAAM;gBACR;oBACE,MAAA,IAAI,CAAC,cAAc,0CAAE,KAAK,CAAC,qCAA8B,IAAI,CAAE,CAAC,CAAC;oBACjE,MAAM;YACV,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAA,IAAI,CAAC,cAAc,0CAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IACH,kBAAC;AAAD,CAAC,AAnED,IAmEC;AAnEY,kCAAW","sourcesContent":["import { TransportItemType } from '@grafana/faro-core';\nimport type { InternalLogger, TraceEvent, TransportItem } from '@grafana/faro-core';\n\nimport type { OtlpHttpTransportOptions } from '../types';\n\nimport { getLogTransforms, getTraceTransforms } from './transform';\nimport type { LogsTransform, TraceTransform } from './transform';\nimport type { ResourceLogs, ResourceSpans } from './transform/types';\nimport type { OtelTransportPayload } from './types';\n\ntype OtelPayloadParams = {\n internalLogger: InternalLogger;\n transportItem?: TransportItem;\n customOtlpTransform?: OtlpHttpTransportOptions['otlpTransform'];\n};\n\nexport class OtelPayload {\n private resourceLogs: ResourceLogs;\n private resourceSpans = [] as ResourceSpans;\n\n private getLogTransforms: LogsTransform;\n private getTraceTransforms: TraceTransform;\n\n private internalLogger: InternalLogger;\n\n constructor({ internalLogger, customOtlpTransform, transportItem }: OtelPayloadParams) {\n this.internalLogger = internalLogger;\n this.resourceLogs = [];\n\n this.getLogTransforms = getLogTransforms(this.internalLogger, customOtlpTransform);\n this.getTraceTransforms = getTraceTransforms(this.internalLogger);\n\n if (transportItem) {\n this.addResourceItem(transportItem);\n }\n }\n\n getPayload(): OtelTransportPayload {\n return {\n resourceLogs: this.resourceLogs,\n resourceSpans: this.resourceSpans,\n } as const;\n }\n\n addResourceItem(transportItem: TransportItem): void {\n const { type } = transportItem;\n\n try {\n switch (type) {\n case TransportItemType.LOG:\n case TransportItemType.EXCEPTION:\n case TransportItemType.EVENT:\n case TransportItemType.MEASUREMENT:\n const { toLogRecord, toResourceLog } = this.getLogTransforms;\n\n // Currently the scope is fixed to '@grafana/faro-web-sdk'.\n // Once we are able to drive the scope by instrumentation this will change and we need to align this function\n if (this.resourceLogs.length === 0) {\n this.resourceLogs = [toResourceLog(transportItem)];\n } else {\n // Faro takes care of the grouping with different metadata (or OTel attributes), so we can safely\n // use the just the first element of the resource.\n this.resourceLogs[0]?.scopeLogs[0]?.logRecords.push(toLogRecord(transportItem));\n }\n break;\n case TransportItemType.TRACE:\n const { toResourceSpan } = this.getTraceTransforms;\n\n // We use the Otel Model as it is to avoid unnecessary resource consumption.\n // This is because we don't need the same logic to add items as it is for logs.\n // Also the Otel library already applies the respective protocol transforms so there is no need for additional transforms.\n // We only transform the resource object to ensure that we are compliant with the respective Faro Metas which add a few more items to the resource object.\n this.resourceSpans.push(toResourceSpan(transportItem as TransportItem<TraceEvent>));\n\n break;\n default:\n this.internalLogger?.error(`Unknown TransportItemType: ${type}`);\n break;\n }\n } catch (error) {\n this.internalLogger?.error(error);\n }\n }\n}\n"]}
1
+ {"version":3,"file":"OtelPayload.js","sourceRoot":"","sources":["../../../src/payload/OtelPayload.ts"],"names":[],"mappings":";;;AAAA,gDAAuD;AAKvD,yCAAmE;AAWnE;IASE,qBAAY,EAAyE;YAAvE,cAAc,oBAAA,EAAE,mBAAmB,yBAAA,EAAE,aAAa,mBAAA;QAPxD,kBAAa,GAAG,EAAmB,CAAC;QAQ1C,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QACrC,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;QAEvB,IAAI,CAAC,gBAAgB,GAAG,IAAA,4BAAgB,EAAC,IAAI,CAAC,cAAc,EAAE,mBAAmB,CAAC,CAAC;QACnF,IAAI,CAAC,kBAAkB,GAAG,IAAA,8BAAkB,EAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAElE,IAAI,aAAa,EAAE,CAAC;YAClB,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAED,gCAAU,GAAV;QACE,OAAO;YACL,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,aAAa,EAAE,IAAI,CAAC,aAAa;SACzB,CAAC;IACb,CAAC;IAED,qCAAe,GAAf,UAAgB,aAA4B;;QAClC,IAAA,IAAI,GAAK,aAAa,KAAlB,CAAmB;QAE/B,IAAI,CAAC;YACH,QAAQ,IAAI,EAAE,CAAC;gBACb,KAAK,6BAAiB,CAAC,GAAG,CAAC;gBAC3B,KAAK,6BAAiB,CAAC,SAAS,CAAC;gBACjC,KAAK,6BAAiB,CAAC,KAAK,CAAC;gBAC7B,KAAK,6BAAiB,CAAC,WAAW,CAAC,CAAC,CAAC;oBAC7B,IAAA,KAAiC,IAAI,CAAC,gBAAgB,EAApD,WAAW,iBAAA,EAAE,aAAa,mBAA0B,CAAC;oBAE7D,2DAA2D;oBAC3D,6GAA6G;oBAC7G,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBACnC,IAAI,CAAC,YAAY,GAAG,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC;oBACrD,CAAC;yBAAM,CAAC;wBACN,iGAAiG;wBACjG,kDAAkD;wBAClD,MAAA,MAAA,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,0CAAE,SAAS,CAAC,CAAC,CAAC,0CAAE,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC;oBAClF,CAAC;oBACD,MAAM;gBACR,CAAC;gBACD,KAAK,6BAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;oBACrB,IAAA,cAAc,GAAK,IAAI,CAAC,kBAAkB,eAA5B,CAA6B;oBAEnD,4EAA4E;oBAC5E,+EAA+E;oBAC/E,0HAA0H;oBAC1H,0JAA0J;oBAC1J,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,aAA0C,CAAC,CAAC,CAAC;oBAEpF,MAAM;gBACR,CAAC;gBACD;oBACE,MAAA,IAAI,CAAC,cAAc,0CAAE,KAAK,CAAC,qCAA8B,IAAI,CAAE,CAAC,CAAC;oBACjE,MAAM;YACV,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAA,IAAI,CAAC,cAAc,0CAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IACH,kBAAC;AAAD,CAAC,AArED,IAqEC;AArEY,kCAAW","sourcesContent":["import { TransportItemType } from '@grafana/faro-core';\nimport type { InternalLogger, TraceEvent, TransportItem } from '@grafana/faro-core';\n\nimport type { OtlpHttpTransportOptions } from '../types';\n\nimport { getLogTransforms, getTraceTransforms } from './transform';\nimport type { LogsTransform, TraceTransform } from './transform';\nimport type { ResourceLogs, ResourceSpans } from './transform/types';\nimport type { OtelTransportPayload } from './types';\n\ntype OtelPayloadParams = {\n internalLogger: InternalLogger;\n transportItem?: TransportItem;\n customOtlpTransform?: OtlpHttpTransportOptions['otlpTransform'];\n};\n\nexport class OtelPayload {\n private resourceLogs: ResourceLogs;\n private resourceSpans = [] as ResourceSpans;\n\n private getLogTransforms: LogsTransform;\n private getTraceTransforms: TraceTransform;\n\n private internalLogger: InternalLogger;\n\n constructor({ internalLogger, customOtlpTransform, transportItem }: OtelPayloadParams) {\n this.internalLogger = internalLogger;\n this.resourceLogs = [];\n\n this.getLogTransforms = getLogTransforms(this.internalLogger, customOtlpTransform);\n this.getTraceTransforms = getTraceTransforms(this.internalLogger);\n\n if (transportItem) {\n this.addResourceItem(transportItem);\n }\n }\n\n getPayload(): OtelTransportPayload {\n return {\n resourceLogs: this.resourceLogs,\n resourceSpans: this.resourceSpans,\n } as const;\n }\n\n addResourceItem(transportItem: TransportItem): void {\n const { type } = transportItem;\n\n try {\n switch (type) {\n case TransportItemType.LOG:\n case TransportItemType.EXCEPTION:\n case TransportItemType.EVENT:\n case TransportItemType.MEASUREMENT: {\n const { toLogRecord, toResourceLog } = this.getLogTransforms;\n\n // Currently the scope is fixed to '@grafana/faro-web-sdk'.\n // Once we are able to drive the scope by instrumentation this will change and we need to align this function\n if (this.resourceLogs.length === 0) {\n this.resourceLogs = [toResourceLog(transportItem)];\n } else {\n // Faro takes care of the grouping with different metadata (or OTel attributes), so we can safely\n // use the just the first element of the resource.\n this.resourceLogs[0]?.scopeLogs[0]?.logRecords.push(toLogRecord(transportItem));\n }\n break;\n }\n case TransportItemType.TRACE: {\n const { toResourceSpan } = this.getTraceTransforms;\n\n // We use the Otel Model as it is to avoid unnecessary resource consumption.\n // This is because we don't need the same logic to add items as it is for logs.\n // Also the Otel library already applies the respective protocol transforms so there is no need for additional transforms.\n // We only transform the resource object to ensure that we are compliant with the respective Faro Metas which add a few more items to the resource object.\n this.resourceSpans.push(toResourceSpan(transportItem as TransportItem<TraceEvent>));\n\n break;\n }\n default:\n this.internalLogger?.error(`Unknown TransportItemType: ${type}`);\n break;\n }\n } catch (error) {\n this.internalLogger?.error(error);\n }\n }\n}\n"]}
@@ -181,7 +181,7 @@ function toResource(transportItem) {
181
181
  (0, attribute_1.toAttribute)('browser.screen_height', browser === null || browser === void 0 ? void 0 : browser.viewportHeight),
182
182
  (0, attribute_1.toAttribute)(semantic_conventions_1.ATTR_TELEMETRY_SDK_NAME, sdk === null || sdk === void 0 ? void 0 : sdk.name),
183
183
  (0, attribute_1.toAttribute)(semantic_conventions_1.ATTR_TELEMETRY_SDK_VERSION, sdk === null || sdk === void 0 ? void 0 : sdk.version),
184
- Boolean(sdk) ? (0, attribute_1.toAttribute)(semantic_conventions_1.ATTR_TELEMETRY_SDK_LANGUAGE, semantic_conventions_1.TELEMETRY_SDK_LANGUAGE_VALUE_WEBJS) : undefined,
184
+ sdk ? (0, attribute_1.toAttribute)(semantic_conventions_1.ATTR_TELEMETRY_SDK_LANGUAGE, semantic_conventions_1.TELEMETRY_SDK_LANGUAGE_VALUE_WEBJS) : undefined,
185
185
  (0, attribute_1.toAttribute)(semantic_conventions_1.ATTR_SERVICE_NAME, app === null || app === void 0 ? void 0 : app.name),
186
186
  (0, attribute_1.toAttribute)(semantic_conventions_1.ATTR_SERVICE_VERSION, app === null || app === void 0 ? void 0 : app.version),
187
187
  (0, attribute_1.toAttribute)(semconv_1.ATTR_SERVICE_NAMESPACE, app === null || app === void 0 ? void 0 : app.namespace),
@@ -1 +1 @@
1
- {"version":3,"file":"transform.js","sourceRoot":"","sources":["../../../../src/payload/transform/transform.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AA0DA,4CAsKC;AAED,gDAcC;AA/OD,4EAW6C;AAE7C,gDAA0E;AAY1E,yCAeuB;AAEvB,0CAA0E;AAe1E,SAAgB,gBAAgB,CAC9B,cAA8B,EAC9B,mBAA+D;IAE/D,SAAS,aAAa,CAAC,aAA+B;QACpD,IAAM,QAAQ,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC;QAE3C,OAAO;YACL,QAAQ,UAAA;YACR,SAAS,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;SACvC,CAAC;IACJ,CAAC;IAED,SAAS,UAAU,CAAC,aAA+B;QACjD,OAAO;YACL,KAAK,EAAE;gBACL,IAAI,EAAE,uBAAuB;gBAC7B,OAAO,EAAE,mBAAO;aACjB;YACD,UAAU,EAAE,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;SACzC,CAAC;IACJ,CAAC;IAED,SAAS,WAAW,CAAC,aAA+B;QAC1C,IAAA,IAAI,GAAK,aAAa,KAAlB,CAAmB;QAE/B,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,6BAAiB,CAAC,GAAG;gBACxB,OAAO,cAAc,CAAC,aAAwC,CAAC,CAAC;YAClE,KAAK,6BAAiB,CAAC,SAAS;gBAC9B,OAAO,gBAAgB,CAAC,aAA8C,CAAC,CAAC;YAC1E,KAAK,6BAAiB,CAAC,KAAK;gBAC1B,OAAO,gBAAgB,CAAC,aAA0C,CAAC,CAAC;YACtE,KAAK,6BAAiB,CAAC,WAAW;gBAChC,OAAO,sBAAsB,CAAC,aAAgD,CAAC,CAAC;YAClF;gBACE,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,KAAK,CAAC,qCAA8B,IAAI,CAAE,CAAC,CAAC;gBAC5D,OAAO,EAAE,CAAC;QACd,CAAC;IACH,CAAC;IAED,SAAS,cAAc,CAAC,aAAsC;;QACpD,IAAA,IAAI,GAAc,aAAa,KAA3B,EAAE,OAAO,GAAK,aAAa,QAAlB,CAAmB;QACxC,IAAM,YAAY,GAAG,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACvD,IAAM,IAAI,GAAG,IAAA,4BAAgB,EAAC,OAAO,CAAC,OAAO,CAA2B,CAAC;QAEzE,SAAS,qBAAqB,CAAC,QAAkB;YAC/C,QAAQ,QAAQ,EAAE,CAAC;gBACjB,KAAK,oBAAQ,CAAC,KAAK;oBACjB,OAAO,EAAE,cAAc,EAAE,CAAC,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;gBACtD,KAAK,oBAAQ,CAAC,KAAK;oBACjB,OAAO,EAAE,cAAc,EAAE,CAAC,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;gBACtD,KAAK,oBAAQ,CAAC,IAAI;oBAChB,OAAO,EAAE,cAAc,EAAE,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC;gBACrD,KAAK,oBAAQ,CAAC,GAAG;oBACf,OAAO,EAAE,cAAc,EAAE,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;gBACvD,KAAK,oBAAQ,CAAC,IAAI;oBAChB,OAAO,EAAE,cAAc,EAAE,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC;gBACtD,KAAK,oBAAQ,CAAC,KAAK;oBACjB,OAAO,EAAE,cAAc,EAAE,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;YACzD,CAAC;QACH,CAAC;QAED,OAAO,oBACL,YAAY,cAAA,IACT,qBAAqB,CAAC,OAAO,CAAC,KAAK,CAAC,KACvC,IAAI,MAAA,EACJ,UAAU,EAAE,gCAAI,sBAAsB,CAAC,IAAI,CAAC,UAAE,IAAA,uBAAW,EAAC,kBAAkB,EAAE,OAAO,CAAC,OAAO,CAAC,UAAE,MAAM,CACpG,uBAAW,CACZ,EACD,OAAO,EAAE,MAAA,OAAO,CAAC,KAAK,0CAAE,QAAQ,EAChC,MAAM,EAAE,MAAA,OAAO,CAAC,KAAK,0CAAE,OAAO,GACtB,CAAC;IACb,CAAC;IAED,SAAS,gBAAgB,CAAC,aAAwC;;QACxD,IAAA,IAAI,GAAc,aAAa,KAA3B,EAAE,OAAO,GAAK,aAAa,QAAlB,CAAmB;QACxC,IAAM,YAAY,GAAG,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACvD,IAAM,IAAI,GAAG,IAAA,4BAAgB,EAAC,OAAO,CAAC,IAAI,CAA2B,CAAC;QAEtE,OAAO;YACL,YAAY,cAAA;YACZ,IAAI,MAAA;YACJ,UAAU,EAAE,gCACP,sBAAsB,CAAC,IAAI,CAAC;gBAC/B,IAAA,uBAAW,EAAC,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,gHAAgH;gBACzJ,IAAA,uBAAW,EAAC,cAAc,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,kHAAkH;gBAC/J,IAAA,uBAAW,EAAC,kBAAkB,EAAE,OAAO,CAAC,UAAU,CAAC;sBACnD,MAAM,CAAC,uBAAW,CAAC;YACrB,OAAO,EAAE,MAAA,OAAO,CAAC,KAAK,0CAAE,QAAQ;YAChC,MAAM,EAAE,MAAA,OAAO,CAAC,KAAK,0CAAE,OAAO;SACtB,CAAC;IACb,CAAC;IAED,SAAS,gBAAgB,CAAC,aAA4C;;QAC5D,IAAA,IAAI,GAAc,aAAa,KAA3B,EAAE,OAAO,GAAK,aAAa,QAAlB,CAAmB;QACxC,IAAM,YAAY,GAAG,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACvD,IAAM,IAAI,GAAG,gBAAgB,CAAC,aAAa,EAAE,mBAAmB,aAAnB,mBAAmB,uBAAnB,mBAAmB,CAAE,kBAAkB,CAAC,CAAC;QAEtF,OAAO,oBACL,YAAY,cAAA,IACT,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,MAAA,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KACzB,UAAU,EAAE,gCACP,sBAAsB,CAAC,IAAI,CAAC;gBAC/B,IAAA,uBAAW,EAAC,0CAAmB,EAAE,OAAO,CAAC,IAAI,CAAC;gBAC9C,IAAA,uBAAW,EAAC,6CAAsB,EAAE,OAAO,CAAC,KAAK,CAAC;gBAClD,mEAAmE;gBACnE,IAAA,uBAAW,EAAC,uBAAuB,EAAE,OAAO,CAAC,UAAU,CAAC;gBACxD,IAAA,uBAAW,EAAC,oBAAoB,EAAE,OAAO,CAAC,OAAO,CAAC;sBAClD,MAAM,CAAC,uBAAW,CAAC,EACrB,OAAO,EAAE,MAAA,OAAO,CAAC,KAAK,0CAAE,QAAQ,EAChC,MAAM,EAAE,MAAA,OAAO,CAAC,KAAK,0CAAE,OAAO,GACtB,CAAC;IACb,CAAC;IAED,SAAS,sBAAsB,CAAC,aAA8C;;QACpE,IAAA,IAAI,GAAc,aAAa,KAA3B,EAAE,OAAO,GAAK,aAAa,QAAlB,CAAmB;QACxC,IAAM,YAAY,GAAG,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACjD,IAAA,KAAsC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAA1E,eAAe,QAAA,EAAE,gBAAgB,QAAyC,CAAC;QAElF,IAAM,IAAI,GAAG,gBAAgB,CAAC,aAAa,EAAE,mBAAmB,aAAnB,mBAAmB,uBAAnB,mBAAmB,CAAE,wBAAwB,CAAC,CAAC;QAE5F,OAAO,oBACL,YAAY,cAAA,IACT,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,MAAA,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KACzB,UAAU,EAAE,gCACP,sBAAsB,CAAC,IAAI,CAAC;gBAC/B,IAAA,uBAAW,EAAC,kBAAkB,EAAE,OAAO,CAAC,IAAI,CAAC;gBAC7C,IAAA,uBAAW,EAAC,kBAAkB,EAAE,eAAe,CAAC;gBAChD,IAAA,uBAAW,EAAC,mBAAmB,EAAE,gBAAgB,CAAC;gBAClD,IAAA,uBAAW,EAAC,0BAA0B,EAAE,OAAO,CAAC,OAAO,CAAC;sBACxD,MAAM,CAAC,uBAAW,CAAC,EACrB,OAAO,EAAE,MAAA,OAAO,CAAC,KAAK,0CAAE,QAAQ,EAChC,MAAM,EAAE,MAAA,OAAO,CAAC,KAAK,0CAAE,OAAO,GACtB,CAAC;IACb,CAAC;IAED,SAAS,sBAAsB,CAAC,IAAU;QAChC,IAAA,IAAI,GAA0B,IAAI,KAA9B,EAAE,IAAI,GAAoB,IAAI,KAAxB,EAAE,OAAO,GAAW,IAAI,QAAf,EAAE,IAAI,GAAK,IAAI,KAAT,CAAU;QAE3C,OAAO;YACL,IAAA,uBAAW,EAAC,WAAW,EAAE,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,IAAI,CAAC;YACpC,IAAA,uBAAW,EAAC,oCAAa,EAAE,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,GAAG,CAAC;YACrC,IAAA,uBAAW,EAAC,SAAS,EAAE,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,EAAE,CAAC;YAChC,IAAA,uBAAW,EAAC,iBAAiB,EAAE,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,UAAU,CAAC;YAChD,IAAA,uBAAW,EAAC,yBAAe,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,EAAE,CAAC;YACzC,IAAA,uBAAW,EAAC,oBAAoB,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,UAAU,CAAC;YACtD,IAAA,uBAAW,EAAC,sBAAY,EAAE,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,EAAE,CAAC;YACnC,IAAA,uBAAW,EAAC,wBAAc,EAAE,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,QAAQ,CAAC;YAC3C,IAAA,uBAAW,EAAC,yBAAe,EAAE,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,KAAK,CAAC;YACzC,IAAA,uBAAW,EAAC,6BAAmB,EAAE,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,QAAQ,CAAC;YAChD,IAAA,uBAAW,EAAC,yBAAe,EAAE,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,KAAK,CAAC;YACzC,IAAA,uBAAW,EAAC,wBAAc,EAAE,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,IAAI,CAAC;YACvC,IAAA,uBAAW,EAAC,8BAAoB,EAAE,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,UAAU,CAAC;SACpD,CAAC,MAAM,CAAC,uBAAW,CAAC,CAAC;IACxB,CAAC;IAED,SAAS,cAAc,CAAC,SAAiB;QACvC,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC;IACrC,CAAC;IAED,OAAO;QACL,aAAa,eAAA;QACb,UAAU,YAAA;QACV,WAAW,aAAA;KACZ,CAAC;AACJ,CAAC;AAED,SAAgB,kBAAkB,CAAC,eAAgC;IACjE,SAAS,cAAc,CAAC,aAAwC;;QAC9D,IAAM,QAAQ,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC;QAC3C,IAAM,UAAU,GAAG,MAAA,MAAA,aAAa,CAAC,OAAO,CAAC,aAAa,0CAAG,CAAC,CAAC,0CAAE,UAAU,CAAC;QAExE,OAAO;YACL,QAAQ,UAAA;YACR,UAAU,EAAE,UAAU,aAAV,UAAU,cAAV,UAAU,GAAI,EAAE;SAC7B,CAAC;IACJ,CAAC;IAED,OAAO;QACL,cAAc,gBAAA;KACf,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,aAA4B;IACxC,IAAA,KAAsC,aAAa,CAAC,IAAI,EAAtD,OAAO,aAAA,EAAE,GAAG,SAAA,EAAE,GAAG,SAAqC,CAAC;IAE/D,OAAO;QACL,UAAU,EAAE;YACV,IAAA,uBAAW,EAAC,6BAAmB,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,CAAC;YACjD,IAAA,uBAAW,EAAC,+CAAwB,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,SAAS,CAAC;YACzD,IAAA,uBAAW,EAAC,+BAAqB,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,QAAQ,CAAC;YACrD,IAAA,uBAAW,EAAC,6BAAmB,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,CAAC;YACjD,IAAA,uBAAW,EAAC,+BAAqB,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,EAAE,CAAC;YAC/C,IAAA,uBAAW,EAAC,cAAc,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,CAAC;YAC1C,IAAA,uBAAW,EAAC,iBAAiB,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,OAAO,CAAC;YAChD,IAAA,uBAAW,EAAC,sBAAsB,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,aAAa,CAAC;YAC3D,IAAA,uBAAW,EAAC,uBAAuB,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,cAAc,CAAC;YAE7D,IAAA,uBAAW,EAAC,8CAAuB,EAAE,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,IAAI,CAAC;YAC/C,IAAA,uBAAW,EAAC,iDAA0B,EAAE,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,OAAO,CAAC;YACrD,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAA,uBAAW,EAAC,kDAA2B,EAAE,yDAAkC,CAAC,CAAC,CAAC,CAAC,SAAS;YAEvG,IAAA,uBAAW,EAAC,wCAAiB,EAAE,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,IAAI,CAAC;YACzC,IAAA,uBAAW,EAAC,2CAAoB,EAAE,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,OAAO,CAAC;YAC/C,IAAA,uBAAW,EAAC,gCAAsB,EAAE,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,SAAS,CAAC;YACnD,IAAA,uBAAW,EAAC,0CAAgC,EAAE,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,WAAW,CAAC;SAChE,CAAC,MAAM,CAAC,uBAAW,CAAC;KACtB,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CACvB,aAAgB,EAChB,mBAAyC;IAEzC,OAAO,OAAO,mBAAmB,KAAK,UAAU;QAC9C,CAAC,CAAE,IAAA,4BAAgB,EAAC,mBAAmB,CAAC,aAAa,CAAC,CAA4B;QAClF,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC","sourcesContent":["import type { IKeyValue } from '@opentelemetry/otlp-transformer/build/src/common/internal-types';\nimport {\n ATTR_EXCEPTION_MESSAGE,\n ATTR_EXCEPTION_TYPE,\n ATTR_SERVICE_NAME,\n ATTR_SERVICE_VERSION,\n ATTR_TELEMETRY_SDK_LANGUAGE,\n ATTR_TELEMETRY_SDK_NAME,\n ATTR_TELEMETRY_SDK_VERSION,\n ATTR_URL_FULL,\n ATTR_USER_AGENT_ORIGINAL,\n TELEMETRY_SDK_LANGUAGE_VALUE_WEBJS,\n} from '@opentelemetry/semantic-conventions';\n\nimport { LogLevel, TransportItemType, VERSION } from '@grafana/faro-core';\nimport type {\n EventEvent,\n ExceptionEvent,\n InternalLogger,\n LogEvent,\n MeasurementEvent,\n Meta,\n TraceEvent,\n TransportItem,\n} from '@grafana/faro-core';\n\nimport {\n ATTR_BROWSER_BRANDS,\n ATTR_BROWSER_LANGUAGE,\n ATTR_BROWSER_MOBILE,\n ATTR_BROWSER_PLATFORM,\n ATTR_DEPLOYMENT_ENVIRONMENT_NAME,\n ATTR_SERVICE_NAMESPACE,\n ATTR_SESSION_ID,\n ATTR_USER_ATTRIBUTES,\n ATTR_USER_EMAIL,\n ATTR_USER_FULL_NAME,\n ATTR_USER_HASH,\n ATTR_USER_ID,\n ATTR_USER_NAME,\n ATTR_USER_ROLES,\n} from '../../semconv';\nimport type { OtlpHttpTransportOptions } from '../../types';\nimport { isAttribute, toAttribute, toAttributeValue } from '../attribute';\n\nimport type {\n LogRecord,\n LogsTransform,\n LogTransportItem,\n Resource,\n ResourceLog,\n ResourceMeta,\n ResourceSpan,\n ScopeLog,\n StringValueNonNullable,\n TraceTransform,\n} from './types';\n\nexport function getLogTransforms(\n internalLogger: InternalLogger,\n customOtlpTransform?: OtlpHttpTransportOptions['otlpTransform']\n): LogsTransform {\n function toResourceLog(transportItem: LogTransportItem): ResourceLog {\n const resource = toResource(transportItem);\n\n return {\n resource,\n scopeLogs: [toScopeLog(transportItem)],\n };\n }\n\n function toScopeLog(transportItem: LogTransportItem): ScopeLog {\n return {\n scope: {\n name: '@grafana/faro-web-sdk',\n version: VERSION,\n },\n logRecords: [toLogRecord(transportItem)],\n };\n }\n\n function toLogRecord(transportItem: LogTransportItem): LogRecord {\n const { type } = transportItem;\n\n switch (type) {\n case TransportItemType.LOG:\n return toLogLogRecord(transportItem as TransportItem<LogEvent>);\n case TransportItemType.EXCEPTION:\n return toErrorLogRecord(transportItem as TransportItem<ExceptionEvent>);\n case TransportItemType.EVENT:\n return toEventLogRecord(transportItem as TransportItem<EventEvent>);\n case TransportItemType.MEASUREMENT:\n return toMeasurementLogRecord(transportItem as TransportItem<MeasurementEvent>);\n default:\n internalLogger?.error(`Unknown TransportItemType: ${type}`);\n return {};\n }\n }\n\n function toLogLogRecord(transportItem: TransportItem<LogEvent>): LogRecord {\n const { meta, payload } = transportItem;\n const timeUnixNano = toTimeUnixNano(payload.timestamp);\n const body = toAttributeValue(payload.message) as StringValueNonNullable;\n\n function getSeverityProperties(logLevel: LogLevel) {\n switch (logLevel) {\n case LogLevel.TRACE:\n return { severityNumber: 1, severityText: 'TRACE' };\n case LogLevel.DEBUG:\n return { severityNumber: 5, severityText: 'DEBUG' };\n case LogLevel.INFO:\n return { severityNumber: 9, severityText: 'INFO' };\n case LogLevel.LOG:\n return { severityNumber: 10, severityText: 'INFO2' };\n case LogLevel.WARN:\n return { severityNumber: 13, severityText: 'WARN' };\n case LogLevel.ERROR:\n return { severityNumber: 17, severityText: 'ERROR' };\n }\n }\n\n return {\n timeUnixNano,\n ...getSeverityProperties(payload.level),\n body,\n attributes: [...getCommonLogAttributes(meta), toAttribute('faro.log.context', payload.context)].filter(\n isAttribute\n ),\n traceId: payload.trace?.trace_id,\n spanId: payload.trace?.span_id,\n } as const;\n }\n\n function toEventLogRecord(transportItem: TransportItem<EventEvent>): LogRecord {\n const { meta, payload } = transportItem;\n const timeUnixNano = toTimeUnixNano(payload.timestamp);\n const body = toAttributeValue(payload.name) as StringValueNonNullable;\n\n return {\n timeUnixNano,\n body,\n attributes: [\n ...getCommonLogAttributes(meta),\n toAttribute('event.name', payload.name), // This is a semantic attribute. But event.name constant is currently missing in sematic-conventions npm package\n toAttribute('event.domain', payload.domain), // This is a semantic attribute. But event.domain constant is currently missing in sematic-conventions npm package\n toAttribute('event.attributes', payload.attributes),\n ].filter(isAttribute),\n traceId: payload.trace?.trace_id,\n spanId: payload.trace?.span_id,\n } as const;\n }\n\n function toErrorLogRecord(transportItem: TransportItem<ExceptionEvent>): LogRecord {\n const { meta, payload } = transportItem;\n const timeUnixNano = toTimeUnixNano(payload.timestamp);\n const body = getCustomLogBody(transportItem, customOtlpTransform?.createErrorLogBody);\n\n return {\n timeUnixNano,\n ...(body ? { body } : {}),\n attributes: [\n ...getCommonLogAttributes(meta),\n toAttribute(ATTR_EXCEPTION_TYPE, payload.type),\n toAttribute(ATTR_EXCEPTION_MESSAGE, payload.value),\n // toAttribute(SemanticAttributes.EXCEPTION_STACKTRACE, undefined),\n toAttribute('faro.error.stacktrace', payload.stacktrace),\n toAttribute('faro.error.context', payload.context),\n ].filter(isAttribute),\n traceId: payload.trace?.trace_id,\n spanId: payload.trace?.span_id,\n } as const;\n }\n\n function toMeasurementLogRecord(transportItem: TransportItem<MeasurementEvent>): LogRecord {\n const { meta, payload } = transportItem;\n const timeUnixNano = toTimeUnixNano(payload.timestamp);\n const [measurementName, measurementValue] = Object.entries(payload.values).flat();\n\n const body = getCustomLogBody(transportItem, customOtlpTransform?.createMeasurementLogBody);\n\n return {\n timeUnixNano,\n ...(body ? { body } : {}),\n attributes: [\n ...getCommonLogAttributes(meta),\n toAttribute('measurement.type', payload.type),\n toAttribute('measurement.name', measurementName),\n toAttribute('measurement.value', measurementValue),\n toAttribute('faro.measurement.context', payload.context),\n ].filter(isAttribute),\n traceId: payload.trace?.trace_id,\n spanId: payload.trace?.span_id,\n } as const;\n }\n\n function getCommonLogAttributes(meta: Meta): IKeyValue[] {\n const { view, page, session, user } = meta;\n\n return [\n toAttribute('view.name', view?.name),\n toAttribute(ATTR_URL_FULL, page?.url),\n toAttribute('page.id', page?.id),\n toAttribute('page.attributes', page?.attributes),\n toAttribute(ATTR_SESSION_ID, session?.id),\n toAttribute('session.attributes', session?.attributes),\n toAttribute(ATTR_USER_ID, user?.id),\n toAttribute(ATTR_USER_NAME, user?.username),\n toAttribute(ATTR_USER_EMAIL, user?.email),\n toAttribute(ATTR_USER_FULL_NAME, user?.fullName),\n toAttribute(ATTR_USER_ROLES, user?.roles),\n toAttribute(ATTR_USER_HASH, user?.hash),\n toAttribute(ATTR_USER_ATTRIBUTES, user?.attributes),\n ].filter(isAttribute);\n }\n\n function toTimeUnixNano(timestamp: string): number {\n return Date.parse(timestamp) * 1e6;\n }\n\n return {\n toResourceLog,\n toScopeLog,\n toLogRecord,\n };\n}\n\nexport function getTraceTransforms(_internalLogger?: InternalLogger): TraceTransform {\n function toResourceSpan(transportItem: TransportItem<TraceEvent>): ResourceSpan {\n const resource = toResource(transportItem);\n const scopeSpans = transportItem.payload.resourceSpans?.[0]?.scopeSpans;\n\n return {\n resource,\n scopeSpans: scopeSpans ?? [],\n };\n }\n\n return {\n toResourceSpan,\n };\n}\n\nfunction toResource(transportItem: TransportItem): Readonly<Resource> {\n const { browser, sdk, app }: ResourceMeta = transportItem.meta;\n\n return {\n attributes: [\n toAttribute(ATTR_BROWSER_MOBILE, browser?.mobile),\n toAttribute(ATTR_USER_AGENT_ORIGINAL, browser?.userAgent),\n toAttribute(ATTR_BROWSER_LANGUAGE, browser?.language),\n toAttribute(ATTR_BROWSER_BRANDS, browser?.brands),\n toAttribute(ATTR_BROWSER_PLATFORM, browser?.os),\n toAttribute('browser.name', browser?.name),\n toAttribute('browser.version', browser?.version),\n toAttribute('browser.screen_width', browser?.viewportWidth),\n toAttribute('browser.screen_height', browser?.viewportHeight),\n\n toAttribute(ATTR_TELEMETRY_SDK_NAME, sdk?.name),\n toAttribute(ATTR_TELEMETRY_SDK_VERSION, sdk?.version),\n Boolean(sdk) ? toAttribute(ATTR_TELEMETRY_SDK_LANGUAGE, TELEMETRY_SDK_LANGUAGE_VALUE_WEBJS) : undefined,\n\n toAttribute(ATTR_SERVICE_NAME, app?.name),\n toAttribute(ATTR_SERVICE_VERSION, app?.version),\n toAttribute(ATTR_SERVICE_NAMESPACE, app?.namespace),\n toAttribute(ATTR_DEPLOYMENT_ENVIRONMENT_NAME, app?.environment),\n ].filter(isAttribute),\n };\n}\n\nfunction getCustomLogBody<T>(\n transportItem: T,\n createCustomLogBody?: (item: T) => string\n): StringValueNonNullable | undefined {\n return typeof createCustomLogBody === 'function'\n ? (toAttributeValue(createCustomLogBody(transportItem)) as StringValueNonNullable)\n : undefined;\n}\n"]}
1
+ {"version":3,"file":"transform.js","sourceRoot":"","sources":["../../../../src/payload/transform/transform.ts"],"names":[],"mappings":"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","sourcesContent":["import type { IKeyValue } from '@opentelemetry/otlp-transformer/build/src/common/internal-types';\nimport {\n ATTR_EXCEPTION_MESSAGE,\n ATTR_EXCEPTION_TYPE,\n ATTR_SERVICE_NAME,\n ATTR_SERVICE_VERSION,\n ATTR_TELEMETRY_SDK_LANGUAGE,\n ATTR_TELEMETRY_SDK_NAME,\n ATTR_TELEMETRY_SDK_VERSION,\n ATTR_URL_FULL,\n ATTR_USER_AGENT_ORIGINAL,\n TELEMETRY_SDK_LANGUAGE_VALUE_WEBJS,\n} from '@opentelemetry/semantic-conventions';\n\nimport { LogLevel, TransportItemType, VERSION } from '@grafana/faro-core';\nimport type {\n EventEvent,\n ExceptionEvent,\n InternalLogger,\n LogEvent,\n MeasurementEvent,\n Meta,\n TraceEvent,\n TransportItem,\n} from '@grafana/faro-core';\n\nimport {\n ATTR_BROWSER_BRANDS,\n ATTR_BROWSER_LANGUAGE,\n ATTR_BROWSER_MOBILE,\n ATTR_BROWSER_PLATFORM,\n ATTR_DEPLOYMENT_ENVIRONMENT_NAME,\n ATTR_SERVICE_NAMESPACE,\n ATTR_SESSION_ID,\n ATTR_USER_ATTRIBUTES,\n ATTR_USER_EMAIL,\n ATTR_USER_FULL_NAME,\n ATTR_USER_HASH,\n ATTR_USER_ID,\n ATTR_USER_NAME,\n ATTR_USER_ROLES,\n} from '../../semconv';\nimport type { OtlpHttpTransportOptions } from '../../types';\nimport { isAttribute, toAttribute, toAttributeValue } from '../attribute';\n\nimport type {\n LogRecord,\n LogsTransform,\n LogTransportItem,\n Resource,\n ResourceLog,\n ResourceMeta,\n ResourceSpan,\n ScopeLog,\n StringValueNonNullable,\n TraceTransform,\n} from './types';\n\nexport function getLogTransforms(\n internalLogger: InternalLogger,\n customOtlpTransform?: OtlpHttpTransportOptions['otlpTransform']\n): LogsTransform {\n function toResourceLog(transportItem: LogTransportItem): ResourceLog {\n const resource = toResource(transportItem);\n\n return {\n resource,\n scopeLogs: [toScopeLog(transportItem)],\n };\n }\n\n function toScopeLog(transportItem: LogTransportItem): ScopeLog {\n return {\n scope: {\n name: '@grafana/faro-web-sdk',\n version: VERSION,\n },\n logRecords: [toLogRecord(transportItem)],\n };\n }\n\n function toLogRecord(transportItem: LogTransportItem): LogRecord {\n const { type } = transportItem;\n\n switch (type) {\n case TransportItemType.LOG:\n return toLogLogRecord(transportItem as TransportItem<LogEvent>);\n case TransportItemType.EXCEPTION:\n return toErrorLogRecord(transportItem as TransportItem<ExceptionEvent>);\n case TransportItemType.EVENT:\n return toEventLogRecord(transportItem as TransportItem<EventEvent>);\n case TransportItemType.MEASUREMENT:\n return toMeasurementLogRecord(transportItem as TransportItem<MeasurementEvent>);\n default:\n internalLogger?.error(`Unknown TransportItemType: ${type}`);\n return {};\n }\n }\n\n function toLogLogRecord(transportItem: TransportItem<LogEvent>): LogRecord {\n const { meta, payload } = transportItem;\n const timeUnixNano = toTimeUnixNano(payload.timestamp);\n const body = toAttributeValue(payload.message) as StringValueNonNullable;\n\n function getSeverityProperties(logLevel: LogLevel) {\n switch (logLevel) {\n case LogLevel.TRACE:\n return { severityNumber: 1, severityText: 'TRACE' };\n case LogLevel.DEBUG:\n return { severityNumber: 5, severityText: 'DEBUG' };\n case LogLevel.INFO:\n return { severityNumber: 9, severityText: 'INFO' };\n case LogLevel.LOG:\n return { severityNumber: 10, severityText: 'INFO2' };\n case LogLevel.WARN:\n return { severityNumber: 13, severityText: 'WARN' };\n case LogLevel.ERROR:\n return { severityNumber: 17, severityText: 'ERROR' };\n }\n }\n\n return {\n timeUnixNano,\n ...getSeverityProperties(payload.level),\n body,\n attributes: [...getCommonLogAttributes(meta), toAttribute('faro.log.context', payload.context)].filter(\n isAttribute\n ),\n traceId: payload.trace?.trace_id,\n spanId: payload.trace?.span_id,\n } as const;\n }\n\n function toEventLogRecord(transportItem: TransportItem<EventEvent>): LogRecord {\n const { meta, payload } = transportItem;\n const timeUnixNano = toTimeUnixNano(payload.timestamp);\n const body = toAttributeValue(payload.name) as StringValueNonNullable;\n\n return {\n timeUnixNano,\n body,\n attributes: [\n ...getCommonLogAttributes(meta),\n toAttribute('event.name', payload.name), // This is a semantic attribute. But event.name constant is currently missing in sematic-conventions npm package\n toAttribute('event.domain', payload.domain), // This is a semantic attribute. But event.domain constant is currently missing in sematic-conventions npm package\n toAttribute('event.attributes', payload.attributes),\n ].filter(isAttribute),\n traceId: payload.trace?.trace_id,\n spanId: payload.trace?.span_id,\n } as const;\n }\n\n function toErrorLogRecord(transportItem: TransportItem<ExceptionEvent>): LogRecord {\n const { meta, payload } = transportItem;\n const timeUnixNano = toTimeUnixNano(payload.timestamp);\n const body = getCustomLogBody(transportItem, customOtlpTransform?.createErrorLogBody);\n\n return {\n timeUnixNano,\n ...(body ? { body } : {}),\n attributes: [\n ...getCommonLogAttributes(meta),\n toAttribute(ATTR_EXCEPTION_TYPE, payload.type),\n toAttribute(ATTR_EXCEPTION_MESSAGE, payload.value),\n // toAttribute(SemanticAttributes.EXCEPTION_STACKTRACE, undefined),\n toAttribute('faro.error.stacktrace', payload.stacktrace),\n toAttribute('faro.error.context', payload.context),\n ].filter(isAttribute),\n traceId: payload.trace?.trace_id,\n spanId: payload.trace?.span_id,\n } as const;\n }\n\n function toMeasurementLogRecord(transportItem: TransportItem<MeasurementEvent>): LogRecord {\n const { meta, payload } = transportItem;\n const timeUnixNano = toTimeUnixNano(payload.timestamp);\n const [measurementName, measurementValue] = Object.entries(payload.values).flat();\n\n const body = getCustomLogBody(transportItem, customOtlpTransform?.createMeasurementLogBody);\n\n return {\n timeUnixNano,\n ...(body ? { body } : {}),\n attributes: [\n ...getCommonLogAttributes(meta),\n toAttribute('measurement.type', payload.type),\n toAttribute('measurement.name', measurementName),\n toAttribute('measurement.value', measurementValue),\n toAttribute('faro.measurement.context', payload.context),\n ].filter(isAttribute),\n traceId: payload.trace?.trace_id,\n spanId: payload.trace?.span_id,\n } as const;\n }\n\n function getCommonLogAttributes(meta: Meta): IKeyValue[] {\n const { view, page, session, user } = meta;\n\n return [\n toAttribute('view.name', view?.name),\n toAttribute(ATTR_URL_FULL, page?.url),\n toAttribute('page.id', page?.id),\n toAttribute('page.attributes', page?.attributes),\n toAttribute(ATTR_SESSION_ID, session?.id),\n toAttribute('session.attributes', session?.attributes),\n toAttribute(ATTR_USER_ID, user?.id),\n toAttribute(ATTR_USER_NAME, user?.username),\n toAttribute(ATTR_USER_EMAIL, user?.email),\n toAttribute(ATTR_USER_FULL_NAME, user?.fullName),\n toAttribute(ATTR_USER_ROLES, user?.roles),\n toAttribute(ATTR_USER_HASH, user?.hash),\n toAttribute(ATTR_USER_ATTRIBUTES, user?.attributes),\n ].filter(isAttribute);\n }\n\n function toTimeUnixNano(timestamp: string): number {\n return Date.parse(timestamp) * 1e6;\n }\n\n return {\n toResourceLog,\n toScopeLog,\n toLogRecord,\n };\n}\n\nexport function getTraceTransforms(_internalLogger?: InternalLogger): TraceTransform {\n function toResourceSpan(transportItem: TransportItem<TraceEvent>): ResourceSpan {\n const resource = toResource(transportItem);\n const scopeSpans = transportItem.payload.resourceSpans?.[0]?.scopeSpans;\n\n return {\n resource,\n scopeSpans: scopeSpans ?? [],\n };\n }\n\n return {\n toResourceSpan,\n };\n}\n\nfunction toResource(transportItem: TransportItem): Readonly<Resource> {\n const { browser, sdk, app }: ResourceMeta = transportItem.meta;\n\n return {\n attributes: [\n toAttribute(ATTR_BROWSER_MOBILE, browser?.mobile),\n toAttribute(ATTR_USER_AGENT_ORIGINAL, browser?.userAgent),\n toAttribute(ATTR_BROWSER_LANGUAGE, browser?.language),\n toAttribute(ATTR_BROWSER_BRANDS, browser?.brands),\n toAttribute(ATTR_BROWSER_PLATFORM, browser?.os),\n toAttribute('browser.name', browser?.name),\n toAttribute('browser.version', browser?.version),\n toAttribute('browser.screen_width', browser?.viewportWidth),\n toAttribute('browser.screen_height', browser?.viewportHeight),\n\n toAttribute(ATTR_TELEMETRY_SDK_NAME, sdk?.name),\n toAttribute(ATTR_TELEMETRY_SDK_VERSION, sdk?.version),\n sdk ? toAttribute(ATTR_TELEMETRY_SDK_LANGUAGE, TELEMETRY_SDK_LANGUAGE_VALUE_WEBJS) : undefined,\n\n toAttribute(ATTR_SERVICE_NAME, app?.name),\n toAttribute(ATTR_SERVICE_VERSION, app?.version),\n toAttribute(ATTR_SERVICE_NAMESPACE, app?.namespace),\n toAttribute(ATTR_DEPLOYMENT_ENVIRONMENT_NAME, app?.environment),\n ].filter(isAttribute),\n };\n}\n\nfunction getCustomLogBody<T>(\n transportItem: T,\n createCustomLogBody?: (item: T) => string\n): StringValueNonNullable | undefined {\n return typeof createCustomLogBody === 'function'\n ? (toAttributeValue(createCustomLogBody(transportItem)) as StringValueNonNullable)\n : undefined;\n}\n"]}
@@ -25,7 +25,7 @@ export class OtelPayload {
25
25
  case TransportItemType.LOG:
26
26
  case TransportItemType.EXCEPTION:
27
27
  case TransportItemType.EVENT:
28
- case TransportItemType.MEASUREMENT:
28
+ case TransportItemType.MEASUREMENT: {
29
29
  const { toLogRecord, toResourceLog } = this.getLogTransforms;
30
30
  // Currently the scope is fixed to '@grafana/faro-web-sdk'.
31
31
  // Once we are able to drive the scope by instrumentation this will change and we need to align this function
@@ -38,7 +38,8 @@ export class OtelPayload {
38
38
  (_b = (_a = this.resourceLogs[0]) === null || _a === void 0 ? void 0 : _a.scopeLogs[0]) === null || _b === void 0 ? void 0 : _b.logRecords.push(toLogRecord(transportItem));
39
39
  }
40
40
  break;
41
- case TransportItemType.TRACE:
41
+ }
42
+ case TransportItemType.TRACE: {
42
43
  const { toResourceSpan } = this.getTraceTransforms;
43
44
  // We use the Otel Model as it is to avoid unnecessary resource consumption.
44
45
  // This is because we don't need the same logic to add items as it is for logs.
@@ -46,6 +47,7 @@ export class OtelPayload {
46
47
  // We only transform the resource object to ensure that we are compliant with the respective Faro Metas which add a few more items to the resource object.
47
48
  this.resourceSpans.push(toResourceSpan(transportItem));
48
49
  break;
50
+ }
49
51
  default:
50
52
  (_c = this.internalLogger) === null || _c === void 0 ? void 0 : _c.error(`Unknown TransportItemType: ${type}`);
51
53
  break;
@@ -1 +1 @@
1
- {"version":3,"file":"OtelPayload.js","sourceRoot":"","sources":["../../../src/payload/OtelPayload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAKvD,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAWnE,MAAM,OAAO,WAAW;IAStB,YAAY,EAAE,cAAc,EAAE,mBAAmB,EAAE,aAAa,EAAqB;QAP7E,kBAAa,GAAG,EAAmB,CAAC;QAQ1C,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QACrC,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;QAEvB,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC,IAAI,CAAC,cAAc,EAAE,mBAAmB,CAAC,CAAC;QACnF,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAElE,IAAI,aAAa,EAAE,CAAC;YAClB,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAED,UAAU;QACR,OAAO;YACL,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,aAAa,EAAE,IAAI,CAAC,aAAa;SACzB,CAAC;IACb,CAAC;IAED,eAAe,CAAC,aAA4B;;QAC1C,MAAM,EAAE,IAAI,EAAE,GAAG,aAAa,CAAC;QAE/B,IAAI,CAAC;YACH,QAAQ,IAAI,EAAE,CAAC;gBACb,KAAK,iBAAiB,CAAC,GAAG,CAAC;gBAC3B,KAAK,iBAAiB,CAAC,SAAS,CAAC;gBACjC,KAAK,iBAAiB,CAAC,KAAK,CAAC;gBAC7B,KAAK,iBAAiB,CAAC,WAAW;oBAChC,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC;oBAE7D,2DAA2D;oBAC3D,6GAA6G;oBAC7G,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBACnC,IAAI,CAAC,YAAY,GAAG,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC;oBACrD,CAAC;yBAAM,CAAC;wBACN,iGAAiG;wBACjG,kDAAkD;wBAClD,MAAA,MAAA,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,0CAAE,SAAS,CAAC,CAAC,CAAC,0CAAE,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC;oBAClF,CAAC;oBACD,MAAM;gBACR,KAAK,iBAAiB,CAAC,KAAK;oBAC1B,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC,kBAAkB,CAAC;oBAEnD,4EAA4E;oBAC5E,+EAA+E;oBAC/E,0HAA0H;oBAC1H,0JAA0J;oBAC1J,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,aAA0C,CAAC,CAAC,CAAC;oBAEpF,MAAM;gBACR;oBACE,MAAA,IAAI,CAAC,cAAc,0CAAE,KAAK,CAAC,8BAA8B,IAAI,EAAE,CAAC,CAAC;oBACjE,MAAM;YACV,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAA,IAAI,CAAC,cAAc,0CAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;CACF","sourcesContent":["import { TransportItemType } from '@grafana/faro-core';\nimport type { InternalLogger, TraceEvent, TransportItem } from '@grafana/faro-core';\n\nimport type { OtlpHttpTransportOptions } from '../types';\n\nimport { getLogTransforms, getTraceTransforms } from './transform';\nimport type { LogsTransform, TraceTransform } from './transform';\nimport type { ResourceLogs, ResourceSpans } from './transform/types';\nimport type { OtelTransportPayload } from './types';\n\ntype OtelPayloadParams = {\n internalLogger: InternalLogger;\n transportItem?: TransportItem;\n customOtlpTransform?: OtlpHttpTransportOptions['otlpTransform'];\n};\n\nexport class OtelPayload {\n private resourceLogs: ResourceLogs;\n private resourceSpans = [] as ResourceSpans;\n\n private getLogTransforms: LogsTransform;\n private getTraceTransforms: TraceTransform;\n\n private internalLogger: InternalLogger;\n\n constructor({ internalLogger, customOtlpTransform, transportItem }: OtelPayloadParams) {\n this.internalLogger = internalLogger;\n this.resourceLogs = [];\n\n this.getLogTransforms = getLogTransforms(this.internalLogger, customOtlpTransform);\n this.getTraceTransforms = getTraceTransforms(this.internalLogger);\n\n if (transportItem) {\n this.addResourceItem(transportItem);\n }\n }\n\n getPayload(): OtelTransportPayload {\n return {\n resourceLogs: this.resourceLogs,\n resourceSpans: this.resourceSpans,\n } as const;\n }\n\n addResourceItem(transportItem: TransportItem): void {\n const { type } = transportItem;\n\n try {\n switch (type) {\n case TransportItemType.LOG:\n case TransportItemType.EXCEPTION:\n case TransportItemType.EVENT:\n case TransportItemType.MEASUREMENT:\n const { toLogRecord, toResourceLog } = this.getLogTransforms;\n\n // Currently the scope is fixed to '@grafana/faro-web-sdk'.\n // Once we are able to drive the scope by instrumentation this will change and we need to align this function\n if (this.resourceLogs.length === 0) {\n this.resourceLogs = [toResourceLog(transportItem)];\n } else {\n // Faro takes care of the grouping with different metadata (or OTel attributes), so we can safely\n // use the just the first element of the resource.\n this.resourceLogs[0]?.scopeLogs[0]?.logRecords.push(toLogRecord(transportItem));\n }\n break;\n case TransportItemType.TRACE:\n const { toResourceSpan } = this.getTraceTransforms;\n\n // We use the Otel Model as it is to avoid unnecessary resource consumption.\n // This is because we don't need the same logic to add items as it is for logs.\n // Also the Otel library already applies the respective protocol transforms so there is no need for additional transforms.\n // We only transform the resource object to ensure that we are compliant with the respective Faro Metas which add a few more items to the resource object.\n this.resourceSpans.push(toResourceSpan(transportItem as TransportItem<TraceEvent>));\n\n break;\n default:\n this.internalLogger?.error(`Unknown TransportItemType: ${type}`);\n break;\n }\n } catch (error) {\n this.internalLogger?.error(error);\n }\n }\n}\n"]}
1
+ {"version":3,"file":"OtelPayload.js","sourceRoot":"","sources":["../../../src/payload/OtelPayload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAKvD,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAWnE,MAAM,OAAO,WAAW;IAStB,YAAY,EAAE,cAAc,EAAE,mBAAmB,EAAE,aAAa,EAAqB;QAP7E,kBAAa,GAAG,EAAmB,CAAC;QAQ1C,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QACrC,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;QAEvB,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC,IAAI,CAAC,cAAc,EAAE,mBAAmB,CAAC,CAAC;QACnF,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAElE,IAAI,aAAa,EAAE,CAAC;YAClB,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAED,UAAU;QACR,OAAO;YACL,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,aAAa,EAAE,IAAI,CAAC,aAAa;SACzB,CAAC;IACb,CAAC;IAED,eAAe,CAAC,aAA4B;;QAC1C,MAAM,EAAE,IAAI,EAAE,GAAG,aAAa,CAAC;QAE/B,IAAI,CAAC;YACH,QAAQ,IAAI,EAAE,CAAC;gBACb,KAAK,iBAAiB,CAAC,GAAG,CAAC;gBAC3B,KAAK,iBAAiB,CAAC,SAAS,CAAC;gBACjC,KAAK,iBAAiB,CAAC,KAAK,CAAC;gBAC7B,KAAK,iBAAiB,CAAC,WAAW,CAAC,CAAC,CAAC;oBACnC,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC;oBAE7D,2DAA2D;oBAC3D,6GAA6G;oBAC7G,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBACnC,IAAI,CAAC,YAAY,GAAG,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC;oBACrD,CAAC;yBAAM,CAAC;wBACN,iGAAiG;wBACjG,kDAAkD;wBAClD,MAAA,MAAA,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,0CAAE,SAAS,CAAC,CAAC,CAAC,0CAAE,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC;oBAClF,CAAC;oBACD,MAAM;gBACR,CAAC;gBACD,KAAK,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;oBAC7B,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC,kBAAkB,CAAC;oBAEnD,4EAA4E;oBAC5E,+EAA+E;oBAC/E,0HAA0H;oBAC1H,0JAA0J;oBAC1J,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,aAA0C,CAAC,CAAC,CAAC;oBAEpF,MAAM;gBACR,CAAC;gBACD;oBACE,MAAA,IAAI,CAAC,cAAc,0CAAE,KAAK,CAAC,8BAA8B,IAAI,EAAE,CAAC,CAAC;oBACjE,MAAM;YACV,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAA,IAAI,CAAC,cAAc,0CAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;CACF","sourcesContent":["import { TransportItemType } from '@grafana/faro-core';\nimport type { InternalLogger, TraceEvent, TransportItem } from '@grafana/faro-core';\n\nimport type { OtlpHttpTransportOptions } from '../types';\n\nimport { getLogTransforms, getTraceTransforms } from './transform';\nimport type { LogsTransform, TraceTransform } from './transform';\nimport type { ResourceLogs, ResourceSpans } from './transform/types';\nimport type { OtelTransportPayload } from './types';\n\ntype OtelPayloadParams = {\n internalLogger: InternalLogger;\n transportItem?: TransportItem;\n customOtlpTransform?: OtlpHttpTransportOptions['otlpTransform'];\n};\n\nexport class OtelPayload {\n private resourceLogs: ResourceLogs;\n private resourceSpans = [] as ResourceSpans;\n\n private getLogTransforms: LogsTransform;\n private getTraceTransforms: TraceTransform;\n\n private internalLogger: InternalLogger;\n\n constructor({ internalLogger, customOtlpTransform, transportItem }: OtelPayloadParams) {\n this.internalLogger = internalLogger;\n this.resourceLogs = [];\n\n this.getLogTransforms = getLogTransforms(this.internalLogger, customOtlpTransform);\n this.getTraceTransforms = getTraceTransforms(this.internalLogger);\n\n if (transportItem) {\n this.addResourceItem(transportItem);\n }\n }\n\n getPayload(): OtelTransportPayload {\n return {\n resourceLogs: this.resourceLogs,\n resourceSpans: this.resourceSpans,\n } as const;\n }\n\n addResourceItem(transportItem: TransportItem): void {\n const { type } = transportItem;\n\n try {\n switch (type) {\n case TransportItemType.LOG:\n case TransportItemType.EXCEPTION:\n case TransportItemType.EVENT:\n case TransportItemType.MEASUREMENT: {\n const { toLogRecord, toResourceLog } = this.getLogTransforms;\n\n // Currently the scope is fixed to '@grafana/faro-web-sdk'.\n // Once we are able to drive the scope by instrumentation this will change and we need to align this function\n if (this.resourceLogs.length === 0) {\n this.resourceLogs = [toResourceLog(transportItem)];\n } else {\n // Faro takes care of the grouping with different metadata (or OTel attributes), so we can safely\n // use the just the first element of the resource.\n this.resourceLogs[0]?.scopeLogs[0]?.logRecords.push(toLogRecord(transportItem));\n }\n break;\n }\n case TransportItemType.TRACE: {\n const { toResourceSpan } = this.getTraceTransforms;\n\n // We use the Otel Model as it is to avoid unnecessary resource consumption.\n // This is because we don't need the same logic to add items as it is for logs.\n // Also the Otel library already applies the respective protocol transforms so there is no need for additional transforms.\n // We only transform the resource object to ensure that we are compliant with the respective Faro Metas which add a few more items to the resource object.\n this.resourceSpans.push(toResourceSpan(transportItem as TransportItem<TraceEvent>));\n\n break;\n }\n default:\n this.internalLogger?.error(`Unknown TransportItemType: ${type}`);\n break;\n }\n } catch (error) {\n this.internalLogger?.error(error);\n }\n }\n}\n"]}
@@ -160,7 +160,7 @@ function toResource(transportItem) {
160
160
  toAttribute('browser.screen_height', browser === null || browser === void 0 ? void 0 : browser.viewportHeight),
161
161
  toAttribute(ATTR_TELEMETRY_SDK_NAME, sdk === null || sdk === void 0 ? void 0 : sdk.name),
162
162
  toAttribute(ATTR_TELEMETRY_SDK_VERSION, sdk === null || sdk === void 0 ? void 0 : sdk.version),
163
- Boolean(sdk) ? toAttribute(ATTR_TELEMETRY_SDK_LANGUAGE, TELEMETRY_SDK_LANGUAGE_VALUE_WEBJS) : undefined,
163
+ sdk ? toAttribute(ATTR_TELEMETRY_SDK_LANGUAGE, TELEMETRY_SDK_LANGUAGE_VALUE_WEBJS) : undefined,
164
164
  toAttribute(ATTR_SERVICE_NAME, app === null || app === void 0 ? void 0 : app.name),
165
165
  toAttribute(ATTR_SERVICE_VERSION, app === null || app === void 0 ? void 0 : app.version),
166
166
  toAttribute(ATTR_SERVICE_NAMESPACE, app === null || app === void 0 ? void 0 : app.namespace),
@@ -1 +1 @@
1
- {"version":3,"file":"transform.js","sourceRoot":"","sources":["../../../../src/payload/transform/transform.ts"],"names":[],"mappings":"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","sourcesContent":["import type { IKeyValue } from '@opentelemetry/otlp-transformer/build/src/common/internal-types';\nimport {\n ATTR_EXCEPTION_MESSAGE,\n ATTR_EXCEPTION_TYPE,\n ATTR_SERVICE_NAME,\n ATTR_SERVICE_VERSION,\n ATTR_TELEMETRY_SDK_LANGUAGE,\n ATTR_TELEMETRY_SDK_NAME,\n ATTR_TELEMETRY_SDK_VERSION,\n ATTR_URL_FULL,\n ATTR_USER_AGENT_ORIGINAL,\n TELEMETRY_SDK_LANGUAGE_VALUE_WEBJS,\n} from '@opentelemetry/semantic-conventions';\n\nimport { LogLevel, TransportItemType, VERSION } from '@grafana/faro-core';\nimport type {\n EventEvent,\n ExceptionEvent,\n InternalLogger,\n LogEvent,\n MeasurementEvent,\n Meta,\n TraceEvent,\n TransportItem,\n} from '@grafana/faro-core';\n\nimport {\n ATTR_BROWSER_BRANDS,\n ATTR_BROWSER_LANGUAGE,\n ATTR_BROWSER_MOBILE,\n ATTR_BROWSER_PLATFORM,\n ATTR_DEPLOYMENT_ENVIRONMENT_NAME,\n ATTR_SERVICE_NAMESPACE,\n ATTR_SESSION_ID,\n ATTR_USER_ATTRIBUTES,\n ATTR_USER_EMAIL,\n ATTR_USER_FULL_NAME,\n ATTR_USER_HASH,\n ATTR_USER_ID,\n ATTR_USER_NAME,\n ATTR_USER_ROLES,\n} from '../../semconv';\nimport type { OtlpHttpTransportOptions } from '../../types';\nimport { isAttribute, toAttribute, toAttributeValue } from '../attribute';\n\nimport type {\n LogRecord,\n LogsTransform,\n LogTransportItem,\n Resource,\n ResourceLog,\n ResourceMeta,\n ResourceSpan,\n ScopeLog,\n StringValueNonNullable,\n TraceTransform,\n} from './types';\n\nexport function getLogTransforms(\n internalLogger: InternalLogger,\n customOtlpTransform?: OtlpHttpTransportOptions['otlpTransform']\n): LogsTransform {\n function toResourceLog(transportItem: LogTransportItem): ResourceLog {\n const resource = toResource(transportItem);\n\n return {\n resource,\n scopeLogs: [toScopeLog(transportItem)],\n };\n }\n\n function toScopeLog(transportItem: LogTransportItem): ScopeLog {\n return {\n scope: {\n name: '@grafana/faro-web-sdk',\n version: VERSION,\n },\n logRecords: [toLogRecord(transportItem)],\n };\n }\n\n function toLogRecord(transportItem: LogTransportItem): LogRecord {\n const { type } = transportItem;\n\n switch (type) {\n case TransportItemType.LOG:\n return toLogLogRecord(transportItem as TransportItem<LogEvent>);\n case TransportItemType.EXCEPTION:\n return toErrorLogRecord(transportItem as TransportItem<ExceptionEvent>);\n case TransportItemType.EVENT:\n return toEventLogRecord(transportItem as TransportItem<EventEvent>);\n case TransportItemType.MEASUREMENT:\n return toMeasurementLogRecord(transportItem as TransportItem<MeasurementEvent>);\n default:\n internalLogger?.error(`Unknown TransportItemType: ${type}`);\n return {};\n }\n }\n\n function toLogLogRecord(transportItem: TransportItem<LogEvent>): LogRecord {\n const { meta, payload } = transportItem;\n const timeUnixNano = toTimeUnixNano(payload.timestamp);\n const body = toAttributeValue(payload.message) as StringValueNonNullable;\n\n function getSeverityProperties(logLevel: LogLevel) {\n switch (logLevel) {\n case LogLevel.TRACE:\n return { severityNumber: 1, severityText: 'TRACE' };\n case LogLevel.DEBUG:\n return { severityNumber: 5, severityText: 'DEBUG' };\n case LogLevel.INFO:\n return { severityNumber: 9, severityText: 'INFO' };\n case LogLevel.LOG:\n return { severityNumber: 10, severityText: 'INFO2' };\n case LogLevel.WARN:\n return { severityNumber: 13, severityText: 'WARN' };\n case LogLevel.ERROR:\n return { severityNumber: 17, severityText: 'ERROR' };\n }\n }\n\n return {\n timeUnixNano,\n ...getSeverityProperties(payload.level),\n body,\n attributes: [...getCommonLogAttributes(meta), toAttribute('faro.log.context', payload.context)].filter(\n isAttribute\n ),\n traceId: payload.trace?.trace_id,\n spanId: payload.trace?.span_id,\n } as const;\n }\n\n function toEventLogRecord(transportItem: TransportItem<EventEvent>): LogRecord {\n const { meta, payload } = transportItem;\n const timeUnixNano = toTimeUnixNano(payload.timestamp);\n const body = toAttributeValue(payload.name) as StringValueNonNullable;\n\n return {\n timeUnixNano,\n body,\n attributes: [\n ...getCommonLogAttributes(meta),\n toAttribute('event.name', payload.name), // This is a semantic attribute. But event.name constant is currently missing in sematic-conventions npm package\n toAttribute('event.domain', payload.domain), // This is a semantic attribute. But event.domain constant is currently missing in sematic-conventions npm package\n toAttribute('event.attributes', payload.attributes),\n ].filter(isAttribute),\n traceId: payload.trace?.trace_id,\n spanId: payload.trace?.span_id,\n } as const;\n }\n\n function toErrorLogRecord(transportItem: TransportItem<ExceptionEvent>): LogRecord {\n const { meta, payload } = transportItem;\n const timeUnixNano = toTimeUnixNano(payload.timestamp);\n const body = getCustomLogBody(transportItem, customOtlpTransform?.createErrorLogBody);\n\n return {\n timeUnixNano,\n ...(body ? { body } : {}),\n attributes: [\n ...getCommonLogAttributes(meta),\n toAttribute(ATTR_EXCEPTION_TYPE, payload.type),\n toAttribute(ATTR_EXCEPTION_MESSAGE, payload.value),\n // toAttribute(SemanticAttributes.EXCEPTION_STACKTRACE, undefined),\n toAttribute('faro.error.stacktrace', payload.stacktrace),\n toAttribute('faro.error.context', payload.context),\n ].filter(isAttribute),\n traceId: payload.trace?.trace_id,\n spanId: payload.trace?.span_id,\n } as const;\n }\n\n function toMeasurementLogRecord(transportItem: TransportItem<MeasurementEvent>): LogRecord {\n const { meta, payload } = transportItem;\n const timeUnixNano = toTimeUnixNano(payload.timestamp);\n const [measurementName, measurementValue] = Object.entries(payload.values).flat();\n\n const body = getCustomLogBody(transportItem, customOtlpTransform?.createMeasurementLogBody);\n\n return {\n timeUnixNano,\n ...(body ? { body } : {}),\n attributes: [\n ...getCommonLogAttributes(meta),\n toAttribute('measurement.type', payload.type),\n toAttribute('measurement.name', measurementName),\n toAttribute('measurement.value', measurementValue),\n toAttribute('faro.measurement.context', payload.context),\n ].filter(isAttribute),\n traceId: payload.trace?.trace_id,\n spanId: payload.trace?.span_id,\n } as const;\n }\n\n function getCommonLogAttributes(meta: Meta): IKeyValue[] {\n const { view, page, session, user } = meta;\n\n return [\n toAttribute('view.name', view?.name),\n toAttribute(ATTR_URL_FULL, page?.url),\n toAttribute('page.id', page?.id),\n toAttribute('page.attributes', page?.attributes),\n toAttribute(ATTR_SESSION_ID, session?.id),\n toAttribute('session.attributes', session?.attributes),\n toAttribute(ATTR_USER_ID, user?.id),\n toAttribute(ATTR_USER_NAME, user?.username),\n toAttribute(ATTR_USER_EMAIL, user?.email),\n toAttribute(ATTR_USER_FULL_NAME, user?.fullName),\n toAttribute(ATTR_USER_ROLES, user?.roles),\n toAttribute(ATTR_USER_HASH, user?.hash),\n toAttribute(ATTR_USER_ATTRIBUTES, user?.attributes),\n ].filter(isAttribute);\n }\n\n function toTimeUnixNano(timestamp: string): number {\n return Date.parse(timestamp) * 1e6;\n }\n\n return {\n toResourceLog,\n toScopeLog,\n toLogRecord,\n };\n}\n\nexport function getTraceTransforms(_internalLogger?: InternalLogger): TraceTransform {\n function toResourceSpan(transportItem: TransportItem<TraceEvent>): ResourceSpan {\n const resource = toResource(transportItem);\n const scopeSpans = transportItem.payload.resourceSpans?.[0]?.scopeSpans;\n\n return {\n resource,\n scopeSpans: scopeSpans ?? [],\n };\n }\n\n return {\n toResourceSpan,\n };\n}\n\nfunction toResource(transportItem: TransportItem): Readonly<Resource> {\n const { browser, sdk, app }: ResourceMeta = transportItem.meta;\n\n return {\n attributes: [\n toAttribute(ATTR_BROWSER_MOBILE, browser?.mobile),\n toAttribute(ATTR_USER_AGENT_ORIGINAL, browser?.userAgent),\n toAttribute(ATTR_BROWSER_LANGUAGE, browser?.language),\n toAttribute(ATTR_BROWSER_BRANDS, browser?.brands),\n toAttribute(ATTR_BROWSER_PLATFORM, browser?.os),\n toAttribute('browser.name', browser?.name),\n toAttribute('browser.version', browser?.version),\n toAttribute('browser.screen_width', browser?.viewportWidth),\n toAttribute('browser.screen_height', browser?.viewportHeight),\n\n toAttribute(ATTR_TELEMETRY_SDK_NAME, sdk?.name),\n toAttribute(ATTR_TELEMETRY_SDK_VERSION, sdk?.version),\n Boolean(sdk) ? toAttribute(ATTR_TELEMETRY_SDK_LANGUAGE, TELEMETRY_SDK_LANGUAGE_VALUE_WEBJS) : undefined,\n\n toAttribute(ATTR_SERVICE_NAME, app?.name),\n toAttribute(ATTR_SERVICE_VERSION, app?.version),\n toAttribute(ATTR_SERVICE_NAMESPACE, app?.namespace),\n toAttribute(ATTR_DEPLOYMENT_ENVIRONMENT_NAME, app?.environment),\n ].filter(isAttribute),\n };\n}\n\nfunction getCustomLogBody<T>(\n transportItem: T,\n createCustomLogBody?: (item: T) => string\n): StringValueNonNullable | undefined {\n return typeof createCustomLogBody === 'function'\n ? (toAttributeValue(createCustomLogBody(transportItem)) as StringValueNonNullable)\n : undefined;\n}\n"]}
1
+ {"version":3,"file":"transform.js","sourceRoot":"","sources":["../../../../src/payload/transform/transform.ts"],"names":[],"mappings":"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","sourcesContent":["import type { IKeyValue } from '@opentelemetry/otlp-transformer/build/src/common/internal-types';\nimport {\n ATTR_EXCEPTION_MESSAGE,\n ATTR_EXCEPTION_TYPE,\n ATTR_SERVICE_NAME,\n ATTR_SERVICE_VERSION,\n ATTR_TELEMETRY_SDK_LANGUAGE,\n ATTR_TELEMETRY_SDK_NAME,\n ATTR_TELEMETRY_SDK_VERSION,\n ATTR_URL_FULL,\n ATTR_USER_AGENT_ORIGINAL,\n TELEMETRY_SDK_LANGUAGE_VALUE_WEBJS,\n} from '@opentelemetry/semantic-conventions';\n\nimport { LogLevel, TransportItemType, VERSION } from '@grafana/faro-core';\nimport type {\n EventEvent,\n ExceptionEvent,\n InternalLogger,\n LogEvent,\n MeasurementEvent,\n Meta,\n TraceEvent,\n TransportItem,\n} from '@grafana/faro-core';\n\nimport {\n ATTR_BROWSER_BRANDS,\n ATTR_BROWSER_LANGUAGE,\n ATTR_BROWSER_MOBILE,\n ATTR_BROWSER_PLATFORM,\n ATTR_DEPLOYMENT_ENVIRONMENT_NAME,\n ATTR_SERVICE_NAMESPACE,\n ATTR_SESSION_ID,\n ATTR_USER_ATTRIBUTES,\n ATTR_USER_EMAIL,\n ATTR_USER_FULL_NAME,\n ATTR_USER_HASH,\n ATTR_USER_ID,\n ATTR_USER_NAME,\n ATTR_USER_ROLES,\n} from '../../semconv';\nimport type { OtlpHttpTransportOptions } from '../../types';\nimport { isAttribute, toAttribute, toAttributeValue } from '../attribute';\n\nimport type {\n LogRecord,\n LogsTransform,\n LogTransportItem,\n Resource,\n ResourceLog,\n ResourceMeta,\n ResourceSpan,\n ScopeLog,\n StringValueNonNullable,\n TraceTransform,\n} from './types';\n\nexport function getLogTransforms(\n internalLogger: InternalLogger,\n customOtlpTransform?: OtlpHttpTransportOptions['otlpTransform']\n): LogsTransform {\n function toResourceLog(transportItem: LogTransportItem): ResourceLog {\n const resource = toResource(transportItem);\n\n return {\n resource,\n scopeLogs: [toScopeLog(transportItem)],\n };\n }\n\n function toScopeLog(transportItem: LogTransportItem): ScopeLog {\n return {\n scope: {\n name: '@grafana/faro-web-sdk',\n version: VERSION,\n },\n logRecords: [toLogRecord(transportItem)],\n };\n }\n\n function toLogRecord(transportItem: LogTransportItem): LogRecord {\n const { type } = transportItem;\n\n switch (type) {\n case TransportItemType.LOG:\n return toLogLogRecord(transportItem as TransportItem<LogEvent>);\n case TransportItemType.EXCEPTION:\n return toErrorLogRecord(transportItem as TransportItem<ExceptionEvent>);\n case TransportItemType.EVENT:\n return toEventLogRecord(transportItem as TransportItem<EventEvent>);\n case TransportItemType.MEASUREMENT:\n return toMeasurementLogRecord(transportItem as TransportItem<MeasurementEvent>);\n default:\n internalLogger?.error(`Unknown TransportItemType: ${type}`);\n return {};\n }\n }\n\n function toLogLogRecord(transportItem: TransportItem<LogEvent>): LogRecord {\n const { meta, payload } = transportItem;\n const timeUnixNano = toTimeUnixNano(payload.timestamp);\n const body = toAttributeValue(payload.message) as StringValueNonNullable;\n\n function getSeverityProperties(logLevel: LogLevel) {\n switch (logLevel) {\n case LogLevel.TRACE:\n return { severityNumber: 1, severityText: 'TRACE' };\n case LogLevel.DEBUG:\n return { severityNumber: 5, severityText: 'DEBUG' };\n case LogLevel.INFO:\n return { severityNumber: 9, severityText: 'INFO' };\n case LogLevel.LOG:\n return { severityNumber: 10, severityText: 'INFO2' };\n case LogLevel.WARN:\n return { severityNumber: 13, severityText: 'WARN' };\n case LogLevel.ERROR:\n return { severityNumber: 17, severityText: 'ERROR' };\n }\n }\n\n return {\n timeUnixNano,\n ...getSeverityProperties(payload.level),\n body,\n attributes: [...getCommonLogAttributes(meta), toAttribute('faro.log.context', payload.context)].filter(\n isAttribute\n ),\n traceId: payload.trace?.trace_id,\n spanId: payload.trace?.span_id,\n } as const;\n }\n\n function toEventLogRecord(transportItem: TransportItem<EventEvent>): LogRecord {\n const { meta, payload } = transportItem;\n const timeUnixNano = toTimeUnixNano(payload.timestamp);\n const body = toAttributeValue(payload.name) as StringValueNonNullable;\n\n return {\n timeUnixNano,\n body,\n attributes: [\n ...getCommonLogAttributes(meta),\n toAttribute('event.name', payload.name), // This is a semantic attribute. But event.name constant is currently missing in sematic-conventions npm package\n toAttribute('event.domain', payload.domain), // This is a semantic attribute. But event.domain constant is currently missing in sematic-conventions npm package\n toAttribute('event.attributes', payload.attributes),\n ].filter(isAttribute),\n traceId: payload.trace?.trace_id,\n spanId: payload.trace?.span_id,\n } as const;\n }\n\n function toErrorLogRecord(transportItem: TransportItem<ExceptionEvent>): LogRecord {\n const { meta, payload } = transportItem;\n const timeUnixNano = toTimeUnixNano(payload.timestamp);\n const body = getCustomLogBody(transportItem, customOtlpTransform?.createErrorLogBody);\n\n return {\n timeUnixNano,\n ...(body ? { body } : {}),\n attributes: [\n ...getCommonLogAttributes(meta),\n toAttribute(ATTR_EXCEPTION_TYPE, payload.type),\n toAttribute(ATTR_EXCEPTION_MESSAGE, payload.value),\n // toAttribute(SemanticAttributes.EXCEPTION_STACKTRACE, undefined),\n toAttribute('faro.error.stacktrace', payload.stacktrace),\n toAttribute('faro.error.context', payload.context),\n ].filter(isAttribute),\n traceId: payload.trace?.trace_id,\n spanId: payload.trace?.span_id,\n } as const;\n }\n\n function toMeasurementLogRecord(transportItem: TransportItem<MeasurementEvent>): LogRecord {\n const { meta, payload } = transportItem;\n const timeUnixNano = toTimeUnixNano(payload.timestamp);\n const [measurementName, measurementValue] = Object.entries(payload.values).flat();\n\n const body = getCustomLogBody(transportItem, customOtlpTransform?.createMeasurementLogBody);\n\n return {\n timeUnixNano,\n ...(body ? { body } : {}),\n attributes: [\n ...getCommonLogAttributes(meta),\n toAttribute('measurement.type', payload.type),\n toAttribute('measurement.name', measurementName),\n toAttribute('measurement.value', measurementValue),\n toAttribute('faro.measurement.context', payload.context),\n ].filter(isAttribute),\n traceId: payload.trace?.trace_id,\n spanId: payload.trace?.span_id,\n } as const;\n }\n\n function getCommonLogAttributes(meta: Meta): IKeyValue[] {\n const { view, page, session, user } = meta;\n\n return [\n toAttribute('view.name', view?.name),\n toAttribute(ATTR_URL_FULL, page?.url),\n toAttribute('page.id', page?.id),\n toAttribute('page.attributes', page?.attributes),\n toAttribute(ATTR_SESSION_ID, session?.id),\n toAttribute('session.attributes', session?.attributes),\n toAttribute(ATTR_USER_ID, user?.id),\n toAttribute(ATTR_USER_NAME, user?.username),\n toAttribute(ATTR_USER_EMAIL, user?.email),\n toAttribute(ATTR_USER_FULL_NAME, user?.fullName),\n toAttribute(ATTR_USER_ROLES, user?.roles),\n toAttribute(ATTR_USER_HASH, user?.hash),\n toAttribute(ATTR_USER_ATTRIBUTES, user?.attributes),\n ].filter(isAttribute);\n }\n\n function toTimeUnixNano(timestamp: string): number {\n return Date.parse(timestamp) * 1e6;\n }\n\n return {\n toResourceLog,\n toScopeLog,\n toLogRecord,\n };\n}\n\nexport function getTraceTransforms(_internalLogger?: InternalLogger): TraceTransform {\n function toResourceSpan(transportItem: TransportItem<TraceEvent>): ResourceSpan {\n const resource = toResource(transportItem);\n const scopeSpans = transportItem.payload.resourceSpans?.[0]?.scopeSpans;\n\n return {\n resource,\n scopeSpans: scopeSpans ?? [],\n };\n }\n\n return {\n toResourceSpan,\n };\n}\n\nfunction toResource(transportItem: TransportItem): Readonly<Resource> {\n const { browser, sdk, app }: ResourceMeta = transportItem.meta;\n\n return {\n attributes: [\n toAttribute(ATTR_BROWSER_MOBILE, browser?.mobile),\n toAttribute(ATTR_USER_AGENT_ORIGINAL, browser?.userAgent),\n toAttribute(ATTR_BROWSER_LANGUAGE, browser?.language),\n toAttribute(ATTR_BROWSER_BRANDS, browser?.brands),\n toAttribute(ATTR_BROWSER_PLATFORM, browser?.os),\n toAttribute('browser.name', browser?.name),\n toAttribute('browser.version', browser?.version),\n toAttribute('browser.screen_width', browser?.viewportWidth),\n toAttribute('browser.screen_height', browser?.viewportHeight),\n\n toAttribute(ATTR_TELEMETRY_SDK_NAME, sdk?.name),\n toAttribute(ATTR_TELEMETRY_SDK_VERSION, sdk?.version),\n sdk ? toAttribute(ATTR_TELEMETRY_SDK_LANGUAGE, TELEMETRY_SDK_LANGUAGE_VALUE_WEBJS) : undefined,\n\n toAttribute(ATTR_SERVICE_NAME, app?.name),\n toAttribute(ATTR_SERVICE_VERSION, app?.version),\n toAttribute(ATTR_SERVICE_NAMESPACE, app?.namespace),\n toAttribute(ATTR_DEPLOYMENT_ENVIRONMENT_NAME, app?.environment),\n ].filter(isAttribute),\n };\n}\n\nfunction getCustomLogBody<T>(\n transportItem: T,\n createCustomLogBody?: (item: T) => string\n): StringValueNonNullable | undefined {\n return typeof createCustomLogBody === 'function'\n ? (toAttributeValue(createCustomLogBody(transportItem)) as StringValueNonNullable)\n : undefined;\n}\n"]}
@@ -4,7 +4,7 @@ import type { OtlpHttpTransportOptions } from './types';
4
4
  export declare class OtlpHttpTransport extends BaseTransport {
5
5
  private options;
6
6
  readonly name = "@grafana/faro-web-sdk:transport-otlp-http";
7
- readonly version = "2.0.0-beta-2";
7
+ readonly version = "2.0.2";
8
8
  private readonly promiseBuffer;
9
9
  private readonly rateLimitBackoffMs;
10
10
  private sendingTracesDisabledUntil;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@grafana/faro-transport-otlp-http",
3
- "version": "2.0.0-beta-2",
3
+ "version": "2.0.2",
4
4
  "description": "Faro transport which converts the Faro data model to the Otlp data model.",
5
5
  "keywords": [
6
6
  "observability",
@@ -44,20 +44,20 @@
44
44
  "quality:test": "jest",
45
45
  "quality:format": "prettier --cache --cache-location=../../.cache/prettier/transportOtlpHttp --ignore-path ../../.prettierignore -w \"./**/*.{js,jsx,ts,tsx,css,scss,md,yaml,yml,json}\"",
46
46
  "quality:lint": "run-s 'quality:lint:*'",
47
- "quality:lint:eslint": "eslint --cache --cache-location ../../.cache/eslint/transportOtlpHttp --ignore-path ../../.eslintignore \"./**/*.{js,jsx,ts,tsx}\"",
47
+ "quality:lint:eslint": "eslint --cache --cache-location ../../.cache/eslint/transportOtlpHttp \"./**/*.{js,jsx,ts,tsx}\"",
48
48
  "quality:lint:prettier": "prettier --cache --cache-location=../../.cache/prettier/transportOtlpHttp --ignore-path ../../.prettierignore -c \"./**/*.{js,jsx,ts,tsx,css,scss,md,yaml,yml,json}\"",
49
49
  "quality:lint:md": "markdownlint README.md",
50
50
  "quality:circular-deps": "madge --circular ."
51
51
  },
52
52
  "devDependencies": {
53
- "@grafana/faro-core": "^2.0.0-beta-2"
53
+ "@grafana/faro-core": "^2.0.2"
54
54
  },
55
55
  "publishConfig": {
56
56
  "access": "public"
57
57
  },
58
58
  "dependencies": {
59
- "@opentelemetry/otlp-transformer": "^0.203.0",
59
+ "@opentelemetry/otlp-transformer": "^0.208.0",
60
60
  "@opentelemetry/semantic-conventions": "^1.28.0"
61
61
  },
62
- "gitHead": "f633489cdfedf7b5b5f6545781cd07b4c0aa5c27"
62
+ "gitHead": "c47ff6089dfa52b34630131ea2776910eae984ab"
63
63
  }