UNPKG

@embrace-io/web-sdk

Version:
3 lines (2 loc) 4.96 kB
import{diag as e,DiagConsoleLogger as r,DiagLogLevel as o}from"@opentelemetry/api";import{logs as s}from"@opentelemetry/api-logs";import{registerInstrumentations as n}from"@opentelemetry/instrumentation";import{Resource as a}from"@opentelemetry/resources";import{LoggerProvider as t,BatchLogRecordProcessor as p}from"@opentelemetry/sdk-logs";import{BatchSpanProcessor as c,WebTracerProvider as i}from"@opentelemetry/sdk-trace-web";import{session as m}from"../api-sessions/sessionAPI.js";import{user as g}from"../api-users/userAPI.js";import{EmbraceLogExporter as l}from"../exporters/EmbraceLogExporter/EmbraceLogExporter.js";import{EmbraceTraceExporter as u}from"../exporters/EmbraceTraceExporter/EmbraceTraceExporter.js";import"@opentelemetry/otlp-exporter-base";import"uuid";import"@opentelemetry/core";import{EmbraceLogManager as f}from"../managers/EmbraceLogManager/EmbraceLogManager.js";import{EmbraceSpanSessionManager as d}from"../managers/EmbraceSpanSessionManager/EmbraceSpanSessionManager.js";import{EmbraceTraceManager as E}from"../managers/EmbraceTraceManager/EmbraceTraceManager.js";import{EmbraceUserManager as b}from"../managers/EmbraceUserManager/EmbraceUserManager.js";import{EmbraceSessionBatchedSpanProcessor as w}from"../processors/EmbraceSessionBatchedSpanProcessor/EmbraceSessionBatchedSpanProcessor.js";import{IdentifiableSessionLogRecordProcessor as P}from"../processors/IdentifiableSessionLogRecordProcessor/IdentifiableSessionLogRecordProcessor.js";import{EmbraceNetworkSpanProcessor as S}from"../processors/EmbraceNetworkSpanProcessor/EmbraceNetworkSpanProcessor.js";import{EmbraceLogRecordProcessor as h}from"../processors/EmbraceLogRecordProcessor/EmbraceLogRecordProcessor.js";import{UserLogRecordProcessor as I}from"../processors/UserLogRecordProcessor/UserLogRecordProcessor.js";import{UserSpanProcessor as M}from"../processors/UserSpanProcessor/UserSpanProcessor.js";import{getWebSDKResource as D}from"../resources/webSdkResource.js";import{isValidAppID as x}from"./utils.js";import{setupDefaultInstrumentations as j}from"./setupDefaultInstrumentations.js";import{createSessionSpanProcessor as L}from"@opentelemetry/web-common";import{log as y}from"../api-logs/logAPI.js";import{trace as R}from"../api-traces/traceAPI.js";import{registry as T}from"./registry.js";const U=({appID:s,appVersion:t,templateBundleID:p,resource:c=a.empty(),spanExporters:i=[],logExporters:m=[],spanProcessors:g=[],propagator:l=null,defaultInstrumentationConfig:u,instrumentations:f=[],contextManager:d=null,logProcessors:E=[],logLevel:b=o.ERROR,diagLogger:w=e.createComponentLogger({namespace:"embrace-sdk"})}={appID:""})=>{try{const o=T.registered();if(null!==o)return w.warn("SDK has already been successfully initialized, skipping this invocation of initSDK"),o;if(e.setLogger(new r,{logLevel:b}),p&&32!==p.length)throw new Error("templateBundleID should be 32 characters long");const a=c.merge(D({diagLogger:w,appVersion:t,templateBundleID:p,pageSessionStorage:window.sessionStorage})),P=!!s&&x(s);if(!P&&!m.length&&!i.length)throw new Error("when the embrace appID is omitted then at least one logExporter or spanExporter must be set");const S=k(),h=S.getEmbraceUserId();if(P&&!h)throw new Error("userID is required when using Embrace exporter");const I=B(),M=G({sendingToEmbrace:P,appID:s,enduserPseudoID:h,resource:a,spanSessionManager:I,userManager:S,spanExporters:i,spanProcessors:g,propagator:l,contextManager:d}),L=v({sendingToEmbrace:P,appID:s,enduserPseudoID:h,resource:a,userManager:S,logExporters:m,logProcessors:E,spanSessionManager:I});n({instrumentations:[...f,j(u)]}),w.info("successfully initialized the SDK");const y={flush:async()=>{await M.forceFlush(),await L.forceFlush()}};return T.register(y),y}catch(e){const r=e instanceof Error?e.message:"Unknown error.";return w.error(`failed to initialize the SDK: ${r}`),!1}},k=()=>{const e=new b;return g.setGlobalUserManager(e),e},B=()=>{const e=new d;return m.setGlobalSessionManager(e),e},G=({sendingToEmbrace:e,appID:r,enduserPseudoID:o,resource:s,spanSessionManager:n,userManager:a,spanExporters:t,spanProcessors:p=[],propagator:m=null,contextManager:g=null})=>{const l=new E;R.setGlobalTraceManager(l);const f=[...p,L(n),new S,new M({userManager:a})];null==t||t.forEach((e=>{f.push(new c(e))})),e&&r&&o&&f.push(new w({exporter:new u({appID:r,userID:o})}));const d=new i({resource:s,spanProcessors:f});return d.register({contextManager:g,propagator:m}),d},v=({sendingToEmbrace:e,appID:r,enduserPseudoID:o,resource:n,userManager:a,logExporters:c,logProcessors:i,spanSessionManager:m})=>{const g=new f({spanSessionManager:m});y.setGlobalLogManager(g);const u=new t({resource:n}),d=[...i,new P({spanSessionManager:m}),new h,new I({userManager:a})];null==c||c.forEach((e=>{d.push(new p(e))})),e&&r&&o&&d.push(new p(new l({appID:r,userID:o})));for(const e of d)u.addLogRecordProcessor(e);return s.setGlobalLoggerProvider(u),u};export{U as initSDK}; //# sourceMappingURL=initSDK.js.map