@grafana/faro-web-sdk 1.0.0-beta3 → 1.0.0-beta4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) hide show
  1. package/README.md +14 -6
  2. package/dist/bundle/faro-web-sdk.iife.js +1 -0
  3. package/dist/{cjs → types}/config/getWebInstrumentations.d.ts +0 -0
  4. package/dist/{cjs → types}/config/index.d.ts +0 -0
  5. package/dist/{cjs → types}/config/makeCoreConfig.d.ts +0 -0
  6. package/dist/{cjs → types}/config/types.d.ts +0 -0
  7. package/dist/{cjs → types}/consts.d.ts +0 -0
  8. package/dist/{cjs → types}/index.d.ts +0 -0
  9. package/dist/{cjs → types}/initialize.d.ts +0 -0
  10. package/dist/{cjs → types}/instrumentations/console/index.d.ts +0 -0
  11. package/dist/{cjs → types}/instrumentations/console/instrumentation.d.ts +1 -1
  12. package/dist/{cjs → types}/instrumentations/console/types.d.ts +0 -0
  13. package/dist/{cjs → types}/instrumentations/errors/const.d.ts +0 -0
  14. package/dist/{cjs → types}/instrumentations/errors/getErrorDetails.d.ts +0 -0
  15. package/dist/{cjs → types}/instrumentations/errors/getValueAndTypeFromMessage.d.ts +0 -0
  16. package/dist/{cjs → types}/instrumentations/errors/index.d.ts +0 -0
  17. package/dist/{esm → types}/instrumentations/errors/instrumentation.d.ts +1 -1
  18. package/dist/{cjs → types}/instrumentations/errors/registerOnerror.d.ts +0 -0
  19. package/dist/{cjs → types}/instrumentations/errors/registerOnunhandledrejection.d.ts +0 -0
  20. package/dist/{cjs → types}/instrumentations/errors/stackFrames/buildStackFrame.d.ts +0 -0
  21. package/dist/{cjs → types}/instrumentations/errors/stackFrames/const.d.ts +0 -0
  22. package/dist/{cjs → types}/instrumentations/errors/stackFrames/getDataFromSafariExtensions.d.ts +0 -0
  23. package/dist/{cjs → types}/instrumentations/errors/stackFrames/getStackFramesFromError.d.ts +0 -0
  24. package/dist/{cjs → types}/instrumentations/errors/stackFrames/index.d.ts +0 -0
  25. package/dist/{cjs → types}/instrumentations/errors/stackFrames/parseStacktrace.d.ts +0 -0
  26. package/dist/{cjs → types}/instrumentations/errors/types.d.ts +0 -0
  27. package/dist/{cjs → types}/instrumentations/index.d.ts +0 -0
  28. package/dist/{cjs → types}/instrumentations/session/index.d.ts +0 -0
  29. package/dist/{cjs → types}/instrumentations/session/instrumentation.d.ts +0 -0
  30. package/dist/{cjs → types}/instrumentations/webVitals/index.d.ts +0 -0
  31. package/dist/{esm → types}/instrumentations/webVitals/instrumentation.d.ts +1 -1
  32. package/dist/{cjs → types}/metas/browser/index.d.ts +0 -0
  33. package/dist/{cjs → types}/metas/browser/meta.d.ts +0 -0
  34. package/dist/{cjs → types}/metas/const.d.ts +0 -0
  35. package/dist/{cjs → types}/metas/index.d.ts +0 -0
  36. package/dist/{cjs → types}/metas/page/index.d.ts +0 -0
  37. package/dist/{cjs → types}/metas/page/meta.d.ts +0 -0
  38. package/dist/{cjs → types}/session.d.ts +0 -0
  39. package/dist/{cjs → types}/transports/console/index.d.ts +0 -0
  40. package/dist/{esm → types}/transports/console/transport.d.ts +1 -1
  41. package/dist/{cjs → types}/transports/console/types.d.ts +0 -0
  42. package/dist/{cjs → types}/transports/fetch/index.d.ts +0 -0
  43. package/dist/{cjs → types}/transports/fetch/transport.d.ts +1 -1
  44. package/dist/{cjs → types}/transports/fetch/types.d.ts +0 -0
  45. package/dist/{cjs → types}/transports/index.d.ts +0 -0
  46. package/package.json +20 -12
  47. package/dist/cjs/instrumentations/errors/instrumentation.d.ts +0 -6
  48. package/dist/cjs/instrumentations/errors/registerOnerror.test.d.ts +0 -1
  49. package/dist/cjs/instrumentations/errors/registerOnerror.test.js +0 -23
  50. package/dist/cjs/instrumentations/errors/registerOnerror.test.js.map +0 -1
  51. package/dist/cjs/instrumentations/session/instrumentation.test.d.ts +0 -1
  52. package/dist/cjs/instrumentations/session/instrumentation.test.js +0 -47
  53. package/dist/cjs/instrumentations/session/instrumentation.test.js.map +0 -1
  54. package/dist/cjs/instrumentations/webVitals/instrumentation.d.ts +0 -14
  55. package/dist/cjs/transports/console/transport.d.ts +0 -10
  56. package/dist/cjs/transports/fetch/transport.test.d.ts +0 -1
  57. package/dist/cjs/transports/fetch/transport.test.js +0 -193
  58. package/dist/cjs/transports/fetch/transport.test.js.map +0 -1
  59. package/dist/esm/config/getWebInstrumentations.d.ts +0 -3
  60. package/dist/esm/config/index.d.ts +0 -3
  61. package/dist/esm/config/makeCoreConfig.d.ts +0 -3
  62. package/dist/esm/config/types.d.ts +0 -9
  63. package/dist/esm/consts.d.ts +0 -1
  64. package/dist/esm/index.d.ts +0 -12
  65. package/dist/esm/initialize.d.ts +0 -3
  66. package/dist/esm/instrumentations/console/index.d.ts +0 -2
  67. package/dist/esm/instrumentations/console/instrumentation.d.ts +0 -10
  68. package/dist/esm/instrumentations/console/types.d.ts +0 -4
  69. package/dist/esm/instrumentations/errors/const.d.ts +0 -7
  70. package/dist/esm/instrumentations/errors/getErrorDetails.d.ts +0 -3
  71. package/dist/esm/instrumentations/errors/getValueAndTypeFromMessage.d.ts +0 -1
  72. package/dist/esm/instrumentations/errors/index.d.ts +0 -3
  73. package/dist/esm/instrumentations/errors/registerOnerror.d.ts +0 -2
  74. package/dist/esm/instrumentations/errors/registerOnerror.test.d.ts +0 -1
  75. package/dist/esm/instrumentations/errors/registerOnerror.test.js +0 -21
  76. package/dist/esm/instrumentations/errors/registerOnerror.test.js.map +0 -1
  77. package/dist/esm/instrumentations/errors/registerOnunhandledrejection.d.ts +0 -2
  78. package/dist/esm/instrumentations/errors/stackFrames/buildStackFrame.d.ts +0 -2
  79. package/dist/esm/instrumentations/errors/stackFrames/const.d.ts +0 -15
  80. package/dist/esm/instrumentations/errors/stackFrames/getDataFromSafariExtensions.d.ts +0 -1
  81. package/dist/esm/instrumentations/errors/stackFrames/getStackFramesFromError.d.ts +0 -2
  82. package/dist/esm/instrumentations/errors/stackFrames/index.d.ts +0 -4
  83. package/dist/esm/instrumentations/errors/stackFrames/parseStacktrace.d.ts +0 -2
  84. package/dist/esm/instrumentations/errors/types.d.ts +0 -8
  85. package/dist/esm/instrumentations/index.d.ts +0 -6
  86. package/dist/esm/instrumentations/session/index.d.ts +0 -1
  87. package/dist/esm/instrumentations/session/instrumentation.d.ts +0 -8
  88. package/dist/esm/instrumentations/session/instrumentation.test.d.ts +0 -1
  89. package/dist/esm/instrumentations/session/instrumentation.test.js +0 -45
  90. package/dist/esm/instrumentations/session/instrumentation.test.js.map +0 -1
  91. package/dist/esm/instrumentations/webVitals/index.d.ts +0 -1
  92. package/dist/esm/metas/browser/index.d.ts +0 -1
  93. package/dist/esm/metas/browser/meta.d.ts +0 -2
  94. package/dist/esm/metas/const.d.ts +0 -2
  95. package/dist/esm/metas/index.d.ts +0 -3
  96. package/dist/esm/metas/page/index.d.ts +0 -1
  97. package/dist/esm/metas/page/meta.d.ts +0 -2
  98. package/dist/esm/session.d.ts +0 -2
  99. package/dist/esm/transports/console/index.d.ts +0 -2
  100. package/dist/esm/transports/console/types.d.ts +0 -4
  101. package/dist/esm/transports/fetch/index.d.ts +0 -2
  102. package/dist/esm/transports/fetch/transport.d.ts +0 -16
  103. package/dist/esm/transports/fetch/transport.test.d.ts +0 -1
  104. package/dist/esm/transports/fetch/transport.test.js +0 -119
  105. package/dist/esm/transports/fetch/transport.test.js.map +0 -1
  106. package/dist/esm/transports/fetch/types.d.ts +0 -13
  107. package/dist/esm/transports/index.d.ts +0 -4
package/README.md CHANGED
@@ -1,15 +1,17 @@
1
1
  # @grafana/faro-web-sdk
2
2
 
3
- Faro is a SDK that can instrument frontend JavaScript applications to collect telemetry and forward it to the [Grafana Agent](https://grafana.com/docs/agent/latest/)
4
- (with app agent receiver integration enabled).
3
+ Faro is a SDK that can instrument frontend JavaScript applications to collect telemetry and forward it to the
4
+ [Grafana Agent][grafana-agent-docs] (with app agent receiver integration enabled).
5
5
 
6
- Grafana Agent can then send this data to either [Loki](https://grafana.com/logs/) or [Tempo](https://grafana.com/traces/).
6
+ Grafana Agent can then send this data to either [Loki][grafana-logs] or [Tempo][grafana-traces].
7
7
 
8
8
  _Warning_: currently pre-release and subject to frequent breaking changes. Use at your own risk.
9
9
 
10
10
  ## Get started
11
11
 
12
- See [quick start for web applications](https://github.com/grafana/faro-web-sdk/blob/main/docs/sources/tutorials/quick-start-browser.md).
12
+ See [quick start for web applications][quick-start].
13
+
14
+ Alternatively, you can use the CDN version of the library. See [use cdn library][use-cdn] for details on how to do so.
13
15
 
14
16
  ## Instrumentations
15
17
 
@@ -54,11 +56,11 @@ throw new Error('oh no');
54
56
  faro.api.pushError(new Error('oh no'));
55
57
  ```
56
58
 
57
- With OTEL tracing and browser console capture:
59
+ With OTel tracing and browser console capture:
58
60
 
59
61
  ```ts
62
+ import { ConsoleInstrumentation, getWebInstrumentations, initializeFaro } from '@grafana/faro-web-sdk';
60
63
  import { TracingInstrumentation } from '@grafana/faro-web-tracing';
61
- import { ConsoleInstrumentation, initializeFaro, getWebInstrumentations } from '@grafana/faro-web-sdk';
62
64
 
63
65
  const faro = initializeFaro({
64
66
  url: 'https://agent.myapp/collect',
@@ -83,3 +85,9 @@ faro.api
83
85
  // will be captured
84
86
  throw new Error('oh no');
85
87
  ```
88
+
89
+ [grafana-agent-docs]: https://grafana.com/docs/agent/latest/
90
+ [grafana-logs]: https://grafana.com/logs/
91
+ [grafana-traces]: https://grafana.com/traces/
92
+ [quick-start]: https://github.com/grafana/faro-web-sdk/blob/main/docs/sources/tutorials/quick-start-browser.md
93
+ [use-cdn]: https://github.com/grafana/faro-web-sdk/blob/main/docs/sources/tutorials/use-cdn-library.md
@@ -0,0 +1 @@
1
+ var GrafanaFaroWebSdk=function(e){"use strict";var n="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t={exports:{}};!function(e,t){!function(n,i){var r="function",o="undefined",a="object",s="string",l="model",u="name",c="type",d="vendor",p="version",f="architecture",b="console",g="mobile",m="tablet",v="smarttv",h="wearable",w="embedded",y="Amazon",E="Apple",x="ASUS",k="BlackBerry",T="Browser",L="Chrome",S="Firefox",O="Google",I="Huawei",N="LG",R="Microsoft",A="Motorola",C="Opera",j="Samsung",D="Sharp",P="Sony",z="Xiaomi",M="Zebra",F="Facebook",$=function(e){for(var n={},t=0;t<e.length;t++)n[e[t].toUpperCase()]=e[t];return n},_=function(e,n){return typeof e===s&&-1!==B(n).indexOf(B(e))},B=function(e){return e.toLowerCase()},U=function(e,n){if(typeof e===s)return e=e.replace(/^\s\s*/,"").replace(/\s\s*$/,""),typeof n===o?e:e.substring(0,350)},q=function(e,n){for(var t,o,s,l,u,c,d=0;d<n.length&&!u;){var p=n[d],f=n[d+1];for(t=o=0;t<p.length&&!u;)if(u=p[t++].exec(e))for(s=0;s<f.length;s++)c=u[++o],typeof(l=f[s])===a&&l.length>0?2===l.length?typeof l[1]==r?this[l[0]]=l[1].call(this,c):this[l[0]]=l[1]:3===l.length?typeof l[1]!==r||l[1].exec&&l[1].test?this[l[0]]=c?c.replace(l[1],l[2]):i:this[l[0]]=c?l[1].call(this,c,l[2]):i:4===l.length&&(this[l[0]]=c?l[3].call(this,c.replace(l[1],l[2])):i):this[l]=c||i;d+=2}},G=function(e,n){for(var t in n)if(typeof n[t]===a&&n[t].length>0){for(var r=0;r<n[t].length;r++)if(_(n[t][r],e))return"?"===t?i:t}else if(_(n[t],e))return"?"===t?i:t;return e},V={ME:"4.90","NT 3.11":"NT3.51","NT 4.0":"NT4.0",2e3:"NT 5.0",XP:["NT 5.1","NT 5.2"],Vista:"NT 6.0",7:"NT 6.1",8:"NT 6.2",8.1:"NT 6.3",10:["NT 6.4","NT 10.0"],RT:"ARM"},W={browser:[[/\b(?:crmo|crios)\/([\w\.]+)/i],[p,[u,"Chrome"]],[/edg(?:e|ios|a)?\/([\w\.]+)/i],[p,[u,"Edge"]],[/(opera mini)\/([-\w\.]+)/i,/(opera [mobiletab]{3,6})\b.+version\/([-\w\.]+)/i,/(opera)(?:.+version\/|[\/ ]+)([\w\.]+)/i],[u,p],[/opios[\/ ]+([\w\.]+)/i],[p,[u,C+" Mini"]],[/\bopr\/([\w\.]+)/i],[p,[u,C]],[/(kindle)\/([\w\.]+)/i,/(lunascape|maxthon|netfront|jasmine|blazer)[\/ ]?([\w\.]*)/i,/(avant |iemobile|slim)(?:browser)?[\/ ]?([\w\.]*)/i,/(ba?idubrowser)[\/ ]?([\w\.]+)/i,/(?:ms|\()(ie) ([\w\.]+)/i,/(flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark|qupzilla|falkon|rekonq|puffin|brave|whale|qqbrowserlite|qq|duckduckgo)\/([-\w\.]+)/i,/(weibo)__([\d\.]+)/i],[u,p],[/(?:\buc? ?browser|(?:juc.+)ucweb)[\/ ]?([\w\.]+)/i],[p,[u,"UC"+T]],[/microm.+\bqbcore\/([\w\.]+)/i,/\bqbcore\/([\w\.]+).+microm/i],[p,[u,"WeChat(Win) Desktop"]],[/micromessenger\/([\w\.]+)/i],[p,[u,"WeChat"]],[/konqueror\/([\w\.]+)/i],[p,[u,"Konqueror"]],[/trident.+rv[: ]([\w\.]{1,9})\b.+like gecko/i],[p,[u,"IE"]],[/yabrowser\/([\w\.]+)/i],[p,[u,"Yandex"]],[/(avast|avg)\/([\w\.]+)/i],[[u,/(.+)/,"$1 Secure "+T],p],[/\bfocus\/([\w\.]+)/i],[p,[u,S+" Focus"]],[/\bopt\/([\w\.]+)/i],[p,[u,C+" Touch"]],[/coc_coc\w+\/([\w\.]+)/i],[p,[u,"Coc Coc"]],[/dolfin\/([\w\.]+)/i],[p,[u,"Dolphin"]],[/coast\/([\w\.]+)/i],[p,[u,C+" Coast"]],[/miuibrowser\/([\w\.]+)/i],[p,[u,"MIUI "+T]],[/fxios\/([-\w\.]+)/i],[p,[u,S]],[/\bqihu|(qi?ho?o?|360)browser/i],[[u,"360 "+T]],[/(oculus|samsung|sailfish|huawei)browser\/([\w\.]+)/i],[[u,/(.+)/,"$1 "+T],p],[/(comodo_dragon)\/([\w\.]+)/i],[[u,/_/g," "],p],[/(electron)\/([\w\.]+) safari/i,/(tesla)(?: qtcarbrowser|\/(20\d\d\.[-\w\.]+))/i,/m?(qqbrowser|baiduboxapp|2345Explorer)[\/ ]?([\w\.]+)/i],[u,p],[/(metasr)[\/ ]?([\w\.]+)/i,/(lbbrowser)/i,/\[(linkedin)app\]/i],[u],[/((?:fban\/fbios|fb_iab\/fb4a)(?!.+fbav)|;fbav\/([\w\.]+);)/i],[[u,F],p],[/safari (line)\/([\w\.]+)/i,/\b(line)\/([\w\.]+)\/iab/i,/(chromium|instagram)[\/ ]([-\w\.]+)/i],[u,p],[/\bgsa\/([\w\.]+) .*safari\//i],[p,[u,"GSA"]],[/headlesschrome(?:\/([\w\.]+)| )/i],[p,[u,L+" Headless"]],[/ wv\).+(chrome)\/([\w\.]+)/i],[[u,L+" WebView"],p],[/droid.+ version\/([\w\.]+)\b.+(?:mobile safari|safari)/i],[p,[u,"Android "+T]],[/(chrome|omniweb|arora|[tizenoka]{5} ?browser)\/v?([\w\.]+)/i],[u,p],[/version\/([\w\.\,]+) .*mobile\/\w+ (safari)/i],[p,[u,"Mobile Safari"]],[/version\/([\w(\.|\,)]+) .*(mobile ?safari|safari)/i],[p,u],[/webkit.+?(mobile ?safari|safari)(\/[\w\.]+)/i],[u,[p,G,{"1.0":"/8",1.2:"/1",1.3:"/3","2.0":"/412","2.0.2":"/416","2.0.3":"/417","2.0.4":"/419","?":"/"}]],[/(webkit|khtml)\/([\w\.]+)/i],[u,p],[/(navigator|netscape\d?)\/([-\w\.]+)/i],[[u,"Netscape"],p],[/mobile vr; rv:([\w\.]+)\).+firefox/i],[p,[u,S+" Reality"]],[/ekiohf.+(flow)\/([\w\.]+)/i,/(swiftfox)/i,/(icedragon|iceweasel|camino|chimera|fennec|maemo browser|minimo|conkeror|klar)[\/ ]?([\w\.\+]+)/i,/(seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\/([-\w\.]+)$/i,/(firefox)\/([\w\.]+)/i,/(mozilla)\/([\w\.]+) .+rv\:.+gecko\/\d+/i,/(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir|obigo|mosaic|(?:go|ice|up)[\. ]?browser)[-\/ ]?v?([\w\.]+)/i,/(links) \(([\w\.]+)/i],[u,p]],cpu:[[/(?:(amd|x(?:(?:86|64)[-_])?|wow|win)64)[;\)]/i],[[f,"amd64"]],[/(ia32(?=;))/i],[[f,B]],[/((?:i[346]|x)86)[;\)]/i],[[f,"ia32"]],[/\b(aarch64|arm(v?8e?l?|_?64))\b/i],[[f,"arm64"]],[/\b(arm(?:v[67])?ht?n?[fl]p?)\b/i],[[f,"armhf"]],[/windows (ce|mobile); ppc;/i],[[f,"arm"]],[/((?:ppc|powerpc)(?:64)?)(?: mac|;|\))/i],[[f,/ower/,"",B]],[/(sun4\w)[;\)]/i],[[f,"sparc"]],[/((?:avr32|ia64(?=;))|68k(?=\))|\barm(?=v(?:[1-7]|[5-7]1)l?|;|eabi)|(?=atmel )avr|(?:irix|mips|sparc)(?:64)?\b|pa-risc)/i],[[f,B]]],device:[[/\b(sch-i[89]0\d|shw-m380s|sm-[ptx]\w{2,4}|gt-[pn]\d{2,4}|sgh-t8[56]9|nexus 10)/i],[l,[d,j],[c,m]],[/\b((?:s[cgp]h|gt|sm)-\w+|galaxy nexus)/i,/samsung[- ]([-\w]+)/i,/sec-(sgh\w+)/i],[l,[d,j],[c,g]],[/\((ip(?:hone|od)[\w ]*);/i],[l,[d,E],[c,g]],[/\((ipad);[-\w\),; ]+apple/i,/applecoremedia\/[\w\.]+ \((ipad)/i,/\b(ipad)\d\d?,\d\d?[;\]].+ios/i],[l,[d,E],[c,m]],[/\b((?:ag[rs][23]?|bah2?|sht?|btv)-a?[lw]\d{2})\b(?!.+d\/s)/i],[l,[d,I],[c,m]],[/(?:huawei|honor)([-\w ]+)[;\)]/i,/\b(nexus 6p|\w{2,4}e?-[atu]?[ln][\dx][012359c][adn]?)\b(?!.+d\/s)/i],[l,[d,I],[c,g]],[/\b(poco[\w ]+)(?: bui|\))/i,/\b; (\w+) build\/hm\1/i,/\b(hm[-_ ]?note?[_ ]?(?:\d\w)?) bui/i,/\b(redmi[\-_ ]?(?:note|k)?[\w_ ]+)(?: bui|\))/i,/\b(mi[-_ ]?(?:a\d|one|one[_ ]plus|note lte|max|cc)?[_ ]?(?:\d?\w?)[_ ]?(?:plus|se|lite)?)(?: bui|\))/i],[[l,/_/g," "],[d,z],[c,g]],[/\b(mi[-_ ]?(?:pad)(?:[\w_ ]+))(?: bui|\))/i],[[l,/_/g," "],[d,z],[c,m]],[/; (\w+) bui.+ oppo/i,/\b(cph[12]\d{3}|p(?:af|c[al]|d\w|e[ar])[mt]\d0|x9007|a101op)\b/i],[l,[d,"OPPO"],[c,g]],[/vivo (\w+)(?: bui|\))/i,/\b(v[12]\d{3}\w?[at])(?: bui|;)/i],[l,[d,"Vivo"],[c,g]],[/\b(rmx[12]\d{3})(?: bui|;|\))/i],[l,[d,"Realme"],[c,g]],[/\b(milestone|droid(?:[2-4x]| (?:bionic|x2|pro|razr))?:?( 4g)?)\b[\w ]+build\//i,/\bmot(?:orola)?[- ](\w*)/i,/((?:moto[\w\(\) ]+|xt\d{3,4}|nexus 6)(?= bui|\)))/i],[l,[d,A],[c,g]],[/\b(mz60\d|xoom[2 ]{0,2}) build\//i],[l,[d,A],[c,m]],[/((?=lg)?[vl]k\-?\d{3}) bui| 3\.[-\w; ]{10}lg?-([06cv9]{3,4})/i],[l,[d,N],[c,m]],[/(lm(?:-?f100[nv]?|-[\w\.]+)(?= bui|\))|nexus [45])/i,/\blg[-e;\/ ]+((?!browser|netcast|android tv)\w+)/i,/\blg-?([\d\w]+) bui/i],[l,[d,N],[c,g]],[/(ideatab[-\w ]+)/i,/lenovo ?(s[56]000[-\w]+|tab(?:[\w ]+)|yt[-\d\w]{6}|tb[-\d\w]{6})/i],[l,[d,"Lenovo"],[c,m]],[/(?:maemo|nokia).*(n900|lumia \d+)/i,/nokia[-_ ]?([-\w\.]*)/i],[[l,/_/g," "],[d,"Nokia"],[c,g]],[/(pixel c)\b/i],[l,[d,O],[c,m]],[/droid.+; (pixel[\daxl ]{0,6})(?: bui|\))/i],[l,[d,O],[c,g]],[/droid.+ (a?\d[0-2]{2}so|[c-g]\d{4}|so[-gl]\w+|xq-a\w[4-7][12])(?= bui|\).+chrome\/(?![1-6]{0,1}\d\.))/i],[l,[d,P],[c,g]],[/sony tablet [ps]/i,/\b(?:sony)?sgp\w+(?: bui|\))/i],[[l,"Xperia Tablet"],[d,P],[c,m]],[/ (kb2005|in20[12]5|be20[12][59])\b/i,/(?:one)?(?:plus)? (a\d0\d\d)(?: b|\))/i],[l,[d,"OnePlus"],[c,g]],[/(alexa)webm/i,/(kf[a-z]{2}wi)( bui|\))/i,/(kf[a-z]+)( bui|\)).+silk\//i],[l,[d,y],[c,m]],[/((?:sd|kf)[0349hijorstuw]+)( bui|\)).+silk\//i],[[l,/(.+)/g,"Fire Phone $1"],[d,y],[c,g]],[/(playbook);[-\w\),; ]+(rim)/i],[l,d,[c,m]],[/\b((?:bb[a-f]|st[hv])100-\d)/i,/\(bb10; (\w+)/i],[l,[d,k],[c,g]],[/(?:\b|asus_)(transfo[prime ]{4,10} \w+|eeepc|slider \w+|nexus 7|padfone|p00[cj])/i],[l,[d,x],[c,m]],[/ (z[bes]6[027][012][km][ls]|zenfone \d\w?)\b/i],[l,[d,x],[c,g]],[/(nexus 9)/i],[l,[d,"HTC"],[c,m]],[/(htc)[-;_ ]{1,2}([\w ]+(?=\)| bui)|\w+)/i,/(zte)[- ]([\w ]+?)(?: bui|\/|\))/i,/(alcatel|geeksphone|nexian|panasonic|sony(?!-bra))[-_ ]?([-\w]*)/i],[d,[l,/_/g," "],[c,g]],[/droid.+; ([ab][1-7]-?[0178a]\d\d?)/i],[l,[d,"Acer"],[c,m]],[/droid.+; (m[1-5] note) bui/i,/\bmz-([-\w]{2,})/i],[l,[d,"Meizu"],[c,g]],[/\b(sh-?[altvz]?\d\d[a-ekm]?)/i],[l,[d,D],[c,g]],[/(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron)[-_ ]?([-\w]*)/i,/(hp) ([\w ]+\w)/i,/(asus)-?(\w+)/i,/(microsoft); (lumia[\w ]+)/i,/(lenovo)[-_ ]?([-\w]+)/i,/(jolla)/i,/(oppo) ?([\w ]+) bui/i],[d,l,[c,g]],[/(archos) (gamepad2?)/i,/(hp).+(touchpad(?!.+tablet)|tablet)/i,/(kindle)\/([\w\.]+)/i,/(nook)[\w ]+build\/(\w+)/i,/(dell) (strea[kpr\d ]*[\dko])/i,/(le[- ]+pan)[- ]+(\w{1,9}) bui/i,/(trinity)[- ]*(t\d{3}) bui/i,/(gigaset)[- ]+(q\w{1,9}) bui/i,/(vodafone) ([\w ]+)(?:\)| bui)/i],[d,l,[c,m]],[/(surface duo)/i],[l,[d,R],[c,m]],[/droid [\d\.]+; (fp\du?)(?: b|\))/i],[l,[d,"Fairphone"],[c,g]],[/(u304aa)/i],[l,[d,"AT&T"],[c,g]],[/\bsie-(\w*)/i],[l,[d,"Siemens"],[c,g]],[/\b(rct\w+) b/i],[l,[d,"RCA"],[c,m]],[/\b(venue[\d ]{2,7}) b/i],[l,[d,"Dell"],[c,m]],[/\b(q(?:mv|ta)\w+) b/i],[l,[d,"Verizon"],[c,m]],[/\b(?:barnes[& ]+noble |bn[rt])([\w\+ ]*) b/i],[l,[d,"Barnes & Noble"],[c,m]],[/\b(tm\d{3}\w+) b/i],[l,[d,"NuVision"],[c,m]],[/\b(k88) b/i],[l,[d,"ZTE"],[c,m]],[/\b(nx\d{3}j) b/i],[l,[d,"ZTE"],[c,g]],[/\b(gen\d{3}) b.+49h/i],[l,[d,"Swiss"],[c,g]],[/\b(zur\d{3}) b/i],[l,[d,"Swiss"],[c,m]],[/\b((zeki)?tb.*\b) b/i],[l,[d,"Zeki"],[c,m]],[/\b([yr]\d{2}) b/i,/\b(dragon[- ]+touch |dt)(\w{5}) b/i],[[d,"Dragon Touch"],l,[c,m]],[/\b(ns-?\w{0,9}) b/i],[l,[d,"Insignia"],[c,m]],[/\b((nxa|next)-?\w{0,9}) b/i],[l,[d,"NextBook"],[c,m]],[/\b(xtreme\_)?(v(1[045]|2[015]|[3469]0|7[05])) b/i],[[d,"Voice"],l,[c,g]],[/\b(lvtel\-)?(v1[12]) b/i],[[d,"LvTel"],l,[c,g]],[/\b(ph-1) /i],[l,[d,"Essential"],[c,g]],[/\b(v(100md|700na|7011|917g).*\b) b/i],[l,[d,"Envizen"],[c,m]],[/\b(trio[-\w\. ]+) b/i],[l,[d,"MachSpeed"],[c,m]],[/\btu_(1491) b/i],[l,[d,"Rotor"],[c,m]],[/(shield[\w ]+) b/i],[l,[d,"Nvidia"],[c,m]],[/(sprint) (\w+)/i],[d,l,[c,g]],[/(kin\.[onetw]{3})/i],[[l,/\./g," "],[d,R],[c,g]],[/droid.+; (cc6666?|et5[16]|mc[239][23]x?|vc8[03]x?)\)/i],[l,[d,M],[c,m]],[/droid.+; (ec30|ps20|tc[2-8]\d[kx])\)/i],[l,[d,M],[c,g]],[/(ouya)/i,/(nintendo) ([wids3utch]+)/i],[d,l,[c,b]],[/droid.+; (shield) bui/i],[l,[d,"Nvidia"],[c,b]],[/(playstation [345portablevi]+)/i],[l,[d,P],[c,b]],[/\b(xbox(?: one)?(?!; xbox))[\); ]/i],[l,[d,R],[c,b]],[/smart-tv.+(samsung)/i],[d,[c,v]],[/hbbtv.+maple;(\d+)/i],[[l,/^/,"SmartTV"],[d,j],[c,v]],[/(nux; netcast.+smarttv|lg (netcast\.tv-201\d|android tv))/i],[[d,N],[c,v]],[/(apple) ?tv/i],[d,[l,E+" TV"],[c,v]],[/crkey/i],[[l,L+"cast"],[d,O],[c,v]],[/droid.+aft(\w)( bui|\))/i],[l,[d,y],[c,v]],[/\(dtv[\);].+(aquos)/i,/(aquos-tv[\w ]+)\)/i],[l,[d,D],[c,v]],[/(bravia[\w ]+)( bui|\))/i],[l,[d,P],[c,v]],[/(mitv-\w{5}) bui/i],[l,[d,z],[c,v]],[/\b(roku)[\dx]*[\)\/]((?:dvp-)?[\d\.]*)/i,/hbbtv\/\d+\.\d+\.\d+ +\([\w ]*; *(\w[^;]*);([^;]*)/i],[[d,U],[l,U],[c,v]],[/\b(android tv|smart[- ]?tv|opera tv|tv; rv:)\b/i],[[c,v]],[/((pebble))app/i],[d,l,[c,h]],[/droid.+; (glass) \d/i],[l,[d,O],[c,h]],[/droid.+; (wt63?0{2,3})\)/i],[l,[d,M],[c,h]],[/(quest( 2)?)/i],[l,[d,F],[c,h]],[/(tesla)(?: qtcarbrowser|\/[-\w\.]+)/i],[d,[c,w]],[/droid .+?; ([^;]+?)(?: bui|\) applew).+? mobile safari/i],[l,[c,g]],[/droid .+?; ([^;]+?)(?: bui|\) applew).+?(?! mobile) safari/i],[l,[c,m]],[/\b((tablet|tab)[;\/]|focus\/\d(?!.+mobile))/i],[[c,m]],[/(phone|mobile(?:[;\/]| [ \w\/\.]*safari)|pda(?=.+windows ce))/i],[[c,g]],[/(android[-\w\. ]{0,9});.+buil/i],[l,[d,"Generic"]]],engine:[[/windows.+ edge\/([\w\.]+)/i],[p,[u,"EdgeHTML"]],[/webkit\/537\.36.+chrome\/(?!27)([\w\.]+)/i],[p,[u,"Blink"]],[/(presto)\/([\w\.]+)/i,/(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna)\/([\w\.]+)/i,/ekioh(flow)\/([\w\.]+)/i,/(khtml|tasman|links)[\/ ]\(?([\w\.]+)/i,/(icab)[\/ ]([23]\.[\d\.]+)/i],[u,p],[/rv\:([\w\.]{1,9})\b.+(gecko)/i],[p,u]],os:[[/microsoft (windows) (vista|xp)/i],[u,p],[/(windows) nt 6\.2; (arm)/i,/(windows (?:phone(?: os)?|mobile))[\/ ]?([\d\.\w ]*)/i,/(windows)[\/ ]?([ntce\d\. ]+\w)(?!.+xbox)/i],[u,[p,G,V]],[/(win(?=3|9|n)|win 9x )([nt\d\.]+)/i],[[u,"Windows"],[p,G,V]],[/ip[honead]{2,4}\b(?:.*os ([\w]+) like mac|; opera)/i,/cfnetwork\/.+darwin/i],[[p,/_/g,"."],[u,"iOS"]],[/(mac os x) ?([\w\. ]*)/i,/(macintosh|mac_powerpc\b)(?!.+haiku)/i],[[u,"Mac OS"],[p,/_/g,"."]],[/droid ([\w\.]+)\b.+(android[- ]x86|harmonyos)/i],[p,u],[/(android|webos|qnx|bada|rim tablet os|maemo|meego|sailfish)[-\/ ]?([\w\.]*)/i,/(blackberry)\w*\/([\w\.]*)/i,/(tizen|kaios)[\/ ]([\w\.]+)/i,/\((series40);/i],[u,p],[/\(bb(10);/i],[p,[u,k]],[/(?:symbian ?os|symbos|s60(?=;)|series60)[-\/ ]?([\w\.]*)/i],[p,[u,"Symbian"]],[/mozilla\/[\d\.]+ \((?:mobile|tablet|tv|mobile; [\w ]+); rv:.+ gecko\/([\w\.]+)/i],[p,[u,S+" OS"]],[/web0s;.+rt(tv)/i,/\b(?:hp)?wos(?:browser)?\/([\w\.]+)/i],[p,[u,"webOS"]],[/crkey\/([\d\.]+)/i],[p,[u,L+"cast"]],[/(cros) [\w]+ ([\w\.]+\w)/i],[[u,"Chromium OS"],p],[/(nintendo|playstation) ([wids345portablevuch]+)/i,/(xbox); +xbox ([^\);]+)/i,/\b(joli|palm)\b ?(?:os)?\/?([\w\.]*)/i,/(mint)[\/\(\) ]?(\w*)/i,/(mageia|vectorlinux)[; ]/i,/([kxln]?ubuntu|debian|suse|opensuse|gentoo|arch(?= linux)|slackware|fedora|mandriva|centos|pclinuxos|red ?hat|zenwalk|linpus|raspbian|plan 9|minix|risc os|contiki|deepin|manjaro|elementary os|sabayon|linspire)(?: gnu\/linux)?(?: enterprise)?(?:[- ]linux)?(?:-gnu)?[-\/ ]?(?!chrom|package)([-\w\.]*)/i,/(hurd|linux) ?([\w\.]*)/i,/(gnu) ?([\w\.]*)/i,/\b([-frentopcghs]{0,5}bsd|dragonfly)[\/ ]?(?!amd|[ix346]{1,2}86)([\w\.]*)/i,/(haiku) (\w+)/i],[u,p],[/(sunos) ?([\w\.\d]*)/i],[[u,"Solaris"],p],[/((?:open)?solaris)[-\/ ]?([\w\.]*)/i,/(aix) ((\d)(?=\.|\)| )[\w\.])*/i,/\b(beos|os\/2|amigaos|morphos|openvms|fuchsia|hp-ux)/i,/(unix) ?([\w\.]*)/i],[u,p]]},K=function(e,t){if(typeof e===a&&(t=e,e=i),!(this instanceof K))return new K(e,t).getResult();var r=e||(typeof n!==o&&n.navigator&&n.navigator.userAgent?n.navigator.userAgent:""),b=t?function(e,n){var t={};for(var i in e)n[i]&&n[i].length%2==0?t[i]=n[i].concat(e[i]):t[i]=e[i];return t}(W,t):W;return this.getBrowser=function(){var e,n={};return n[u]=i,n[p]=i,q.call(n,r,b.browser),n.major=typeof(e=n.version)===s?e.replace(/[^\d\.]/g,"").split(".")[0]:i,n},this.getCPU=function(){var e={};return e[f]=i,q.call(e,r,b.cpu),e},this.getDevice=function(){var e={};return e[d]=i,e[l]=i,e[c]=i,q.call(e,r,b.device),e},this.getEngine=function(){var e={};return e[u]=i,e[p]=i,q.call(e,r,b.engine),e},this.getOS=function(){var e={};return e[u]=i,e[p]=i,q.call(e,r,b.os),e},this.getResult=function(){return{ua:this.getUA(),browser:this.getBrowser(),engine:this.getEngine(),os:this.getOS(),device:this.getDevice(),cpu:this.getCPU()}},this.getUA=function(){return r},this.setUA=function(e){return r=typeof e===s&&e.length>350?U(e,350):e,this},this.setUA(r),this};K.VERSION="1.0.32",K.BROWSER=$([u,p,"major"]),K.CPU=$([f]),K.DEVICE=$([l,d,c,b,g,v,m,h,w]),K.ENGINE=K.OS=$([u,p]),e.exports&&(t=e.exports=K),t.UAParser=K;var H=typeof n!==o&&(n.jQuery||n.Zepto);if(H&&!H.ua){var X=new K;H.ua=X.getResult(),H.ua.get=function(){return X.getUA()},H.ua.set=function(e){X.setUA(e);var n=X.getResult();for(var t in n)H.ua[t]=n[t]}}}("object"==typeof window?window:n)}(t,t.exports);const i="_faroInternal",r="undefined"==typeof window?global:window;function o(e){e.config.isolate?e.internalLogger.debug("Skipping registering internal Faro instance on global object"):(e.internalLogger.debug("Registering internal Faro instance on global object"),Object.defineProperty(r,i,{configurable:!1,enumerable:!1,writable:!1,value:e}))}function a(){return i in r}function s(n,t){return n.debug("Initializing Faro"),e.faro=t,o(e.faro),function(e){if(e.config.preventGlobalExposure)e.internalLogger.debug("Skipping registering public Faro instance in the global scope");else{if(e.internalLogger.debug(`Registering public faro reference in the global scope using "${e.config.globalObjectKey}" key`),e.config.globalObjectKey in r)return void e.internalLogger.warn(`Skipping global registration due to key "${e.config.globalObjectKey}" being used already. Please set "globalObjectKey" to something else or set "preventGlobalExposure" to "true"`);Object.defineProperty(r,e.config.globalObjectKey,{configurable:!1,writable:!1,value:e})}}(e.faro),e.faro}e.faro={};class l{get faro(){return e.faro}logDebug(...e){var n,t;null===(t=null===(n=this.faro)||void 0===n?void 0:n.internalLogger)||void 0===t||t.debug(`${this.name}\n`,...e)}logInfo(...e){var n,t;null===(t=null===(n=this.faro)||void 0===n?void 0:n.internalLogger)||void 0===t||t.info(`${this.name}\n`,...e)}logWarn(...e){var n,t;null===(t=null===(n=this.faro)||void 0===n?void 0:n.internalLogger)||void 0===t||t.warn(`${this.name}\n`,...e)}logError(...e){var n,t;null===(t=null===(n=this.faro)||void 0===n?void 0:n.internalLogger)||void 0===t||t.error(`${this.name}\n`,...e)}}function u(e,n){return typeof e===n}function c(e,n){return Object.prototype.toString.call(e)===`[object ${n}]`}function d(e,n){try{return e instanceof n}catch(e){return!1}}const p=e=>u(e,"undefined"),f=e=>u(e,"null"),b=e=>u(e,"string"),g=e=>u(e,"number")&&!isNaN(e)||u(e,"bigint"),m=e=>!f(e)&&u(e,"object"),v=e=>u(e,"function"),h=e=>c(e,"Array"),w=e=>!m(e)&&!v(e),y=!p(Event),E=e=>y&&d(e,Event),x="undefined"!=typeof Error,k=e=>x&&d(e,Error),T=e=>c(e,"ErrorEvent"),L=e=>c(e,"DOMError"),S=e=>c(e,"DOMException"),O="undefined"!=typeof Element,I="undefined"!=typeof Map;function N(e,n){if(e===n)return!0;if(u(e,"number")&&isNaN(e))return u(n,"number")&&isNaN(n);const t=h(e),i=h(n);if(t!==i)return!1;if(t&&i){const t=e.length;if(t!==n.length)return!1;for(let i=t;0!=i--;)if(!N(e[i],n[i]))return!1;return!0}const r=m(e),o=m(n);if(r!==o)return!1;if(e&&n&&r&&o){const t=Object.keys(e),i=Object.keys(n);if(t.length!==i.length)return!1;for(let e of t)if(!i.includes(e))return!1;for(let i of t)if(!N(e[i],n[i]))return!1;return!0}return!1}function R(){return(new Date).toISOString()}var A;e.LogLevel=void 0,(A=e.LogLevel||(e.LogLevel={})).TRACE="trace",A.DEBUG="debug",A.INFO="info",A.LOG="log",A.WARN="warn",A.ERROR="error";const C=e.LogLevel.LOG,j=[e.LogLevel.TRACE,e.LogLevel.DEBUG,e.LogLevel.INFO,e.LogLevel.LOG,e.LogLevel.WARN,e.LogLevel.ERROR];function D(){}function P(e){const{size:n,concurrency:t}=e,i=[];let r=0;const o=()=>{if(r<t&&i.length){const{producer:e,resolve:n,reject:t}=i.shift();r++,e().then((e=>{r--,o(),n(e)}),(e=>{r--,o(),t(e)}))}};return{add:e=>{if(i.length+r>=n)throw new Error("Task buffer full");return new Promise(((n,t)=>{i.push({producer:e,resolve:n,reject:t}),o()}))}}}const z="abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ0123456789";function M(e=10){return Array.from(Array(e)).map((()=>z[Math.floor(Math.random()*z.length)])).join("")}var F;e.TransportItemType=void 0,(F=e.TransportItemType||(e.TransportItemType={})).EXCEPTION="exception",F.LOG="log",F.MEASUREMENT="measurement",F.TRACE="trace",F.EVENT="event";const $={[e.TransportItemType.EXCEPTION]:"exceptions",[e.TransportItemType.LOG]:"logs",[e.TransportItemType.MEASUREMENT]:"measurements",[e.TransportItemType.TRACE]:"traces",[e.TransportItemType.EVENT]:"events"};function _(n){return t=>{if(t.type===e.TransportItemType.EXCEPTION&&t.payload){const e=t.payload,i=`${e.type}: ${e.value}`;if(function(e,n){return e.some((e=>b(e)?n.includes(e):!!n.match(e)))}(n,i))return null}return t}}class B extends l{getIgnoreUrls(){return[]}}function U(n){return{[$[n.type]]:n.type===e.TransportItemType.TRACE?n.payload:[n.payload],meta:n.meta}}const q="Error";let G;function V(n,t,i,r){n.debug("Initializing API");const o=function(n,t,i,r){let o;return n.debug("Initializing traces API"),{getOTEL:()=>o,getTraceContext:()=>{const e=null==o?void 0:o.trace.getSpanContext(o.context.active());return e?{trace_id:e.traceId,span_id:e.spanId}:void 0},initOTEL:(e,t)=>{n.debug("Initializing OpenTelemetry"),o={trace:e,context:t}},isOTELInitialized:()=>!!o,pushTraces:t=>{try{const o={type:e.TransportItemType.TRACE,payload:t,meta:r.value};n.debug("Pushing trace\n",o),i.execute(o)}catch(e){n.error("Error pushing trace\n",e)}}}}(n,0,i,r);return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},o),function(n,t,i,r,o){var a;n.debug("Initializing exceptions API");let s=null;G=null!==(a=t.parseStacktrace)&&void 0!==a?a:G;const l=e=>{n.debug("Changing stacktrace parser"),G=null!=e?e:G};return l(t.parseStacktrace),{changeStacktraceParser:l,getStacktraceParser:()=>G,pushError:(a,{skipDedupe:l,stackFrames:u,type:c}={})=>{c=c||a.name||q;const d={meta:r.value,payload:{type:c,value:a.message,timestamp:R(),trace:o.getTraceContext()},type:e.TransportItemType.EXCEPTION};(null==(u=null!=u?u:a.stack?null==G?void 0:G(a).frames:void 0)?void 0:u.length)&&(d.payload.stacktrace={frames:u});const p={type:d.payload.type,value:d.payload.value,stackTrace:d.payload.stacktrace};l||!t.dedupe||f(s)||!N(p,s)?(s=p,n.debug("Pushing exception\n",d),i.execute(d)):n.debug("Skipping error push because it is the same as the last one\n",d.payload)}}}(n,t,i,r,o)),function(e,n,t,i){let r,o;e.debug("Initializing meta API");const a=e=>{o&&i.remove(o),o={user:e},i.add(o)},s=e=>{r&&i.remove(r),r={session:e},i.add(r)};return{setUser:a,resetUser:a,setSession:s,resetSession:s,getSession:()=>i.value.session}}(n,0,0,r)),function(n,t,i,r,o){n.debug("Initializing logs API");let a=null;return{pushLog:(s,{context:l,level:u,skipDedupe:c}={})=>{try{const d={type:e.TransportItemType.LOG,payload:{message:s.map((e=>{try{return String(e)}catch(e){return""}})).join(" "),level:null!=u?u:C,context:null!=l?l:{},timestamp:R(),trace:o.getTraceContext()},meta:r.value},p={message:d.payload.message,level:d.payload.level,context:d.payload.context};if(!c&&t.dedupe&&!f(a)&&N(p,a))return void n.debug("Skipping log push because it is the same as the last one\n",d.payload);a=p,n.debug("Pushing log\n",d),i.execute(d)}catch(e){n.error("Error pushing log\n",e)}}}}(n,t,i,r,o)),function(n,t,i,r,o){n.debug("Initializing measurements API");let a=null;return{pushMeasurement:(s,{skipDedupe:l}={})=>{try{const u={type:e.TransportItemType.MEASUREMENT,payload:Object.assign(Object.assign({},s),{trace:o.getTraceContext()}),meta:r.value},c={type:u.payload.type,values:u.payload.values};if(!l&&t.dedupe&&!f(a)&&N(c,a))return void n.debug("Skipping measurement push because it is the same as the last one\n",u.payload);a=c,n.debug("Pushing measurement\n",u),i.execute(u)}catch(e){n.error("Error pushing measurement\n",e)}}}}(n,t,i,r,o)),function(n,t,i,r,o){let a=null;return{pushEvent:(s,l,u,{skipDedupe:c}={})=>{try{const d={meta:r.value,payload:{name:s,domain:null!=u?u:t.eventDomain,attributes:l,timestamp:R(),trace:o.getTraceContext()},type:e.TransportItemType.EVENT},p={name:d.payload.name,attributes:d.payload.attributes,domain:d.payload.domain};if(!c&&t.dedupe&&!f(a)&&N(p,a))return void n.debug("Skipping event push because it is the same as the last one\n",d.payload);a=p,n.debug("Pushing event\n",d),i.execute(d)}catch(e){n.error("Error pushing event",e)}}}}(n,t,i,r,o))}class W extends l{}function K(e,n){e.debug("Initializing instrumentations");const t=[];return{add:(...n)=>{e.debug("Adding instrumentations"),n.forEach((n=>{e.debug(`Adding "${n.name}" instrumentation`);t.some((e=>e.name===n.name))?e.warn(`Transport ${n.name} is already added`):(t.push(n),n.initialize())}))},get instrumentations(){return[...t]},remove:(...n)=>{e.debug("Removing instrumentations"),n.forEach((n=>{var i,r;e.debug(`Removing "${n.name}" instrumentation`);const o=t.reduce(((e,t,i)=>null===e&&t.name===n.name?i:null),null);o?(null===(r=(i=t[o]).destroy)||void 0===r||r.call(i),t.splice(o,1)):e.warn(`Instrumentation "${n.name}" is not added`)}))}}}var H;e.InternalLoggerLevel=void 0,(H=e.InternalLoggerLevel||(e.InternalLoggerLevel={}))[H.OFF=0]="OFF",H[H.ERROR=1]="ERROR",H[H.WARN=2]="WARN",H[H.INFO=3]="INFO",H[H.VERBOSE=4]="VERBOSE";const X={debug:D,error:D,info:D,prefix:"Faro",warn:D},Z=e.InternalLoggerLevel.ERROR,J=Object.assign({},console);let Q=J;function Y(e){var n;return Q=null!==(n=e.unpatchedConsole)&&void 0!==n?n:Q,Q}function ee(n=J,t=Z){const i=X;return t>e.InternalLoggerLevel.OFF&&(i.error=t>=e.InternalLoggerLevel.ERROR?function(...e){n.error(`${i.prefix}\n`,...e)}:D,i.warn=t>=e.InternalLoggerLevel.WARN?function(...e){n.warn(`${i.prefix}\n`,...e)}:D,i.info=t>=e.InternalLoggerLevel.INFO?function(...e){n.info(`${i.prefix}\n`,...e)}:D,i.debug=t>=e.InternalLoggerLevel.VERBOSE?function(...e){n.debug(`${i.prefix}\n`,...e)}:D),i}let ne=X;function te(e,n){return ne=ee(e,n.internalLoggerLevel),ne}const ie="1.0.0-beta4";function re(e){const n=Y(e),t=te(n,e);if(t.debug("Initializing"),a()&&!e.isolate)return void t.error('Faro is already registered. Either add instrumentations, transports etc. to the global faro instance or use the "isolate" property');const i=function(e,n){var t;let i=[],r=[];const o=()=>i.reduce(((e,n)=>Object.assign(e,v(n)?n():n)),{}),a=()=>{if(r.length){const e=o();r.forEach((n=>n(e)))}},s=(...n)=>{e.debug("Adding metas\n",n),i.push(...n),a()},l={sdk:{name:"@grafana/faro-core",version:ie,integrations:n.instrumentations.map((({name:e,version:n})=>({name:e,version:n})))}};return n.app&&(l.app=n.app),n.user&&(l.user=n.user),s(l,...null!==(t=n.metas)&&void 0!==t?t:[]),{add:s,remove:(...n)=>{e.debug("Removing metas\n",n),i=i.filter((e=>!n.includes(e))),a()},addListener:e=>{r.push(e)},removeListener:e=>{r=r.filter((n=>n!==e))},get value(){return o()}}}(t,e),r=function(e,n){e.debug("Initializing transports");const t=[];let i=n.paused,r=[];const o=(...n)=>{e.debug("Adding transports"),n.forEach((n=>{e.debug(`Adding "${n.name}" transport`),t.some((e=>e===n))?e.warn(`Transport ${n.name} is already added`):t.push(n)}))},a=(...n)=>{e.debug("Adding beforeSendHooks\n",r),n.forEach((e=>{e&&r.push(e)}))},s=(...n)=>{e.debug("Adding ignoreErrorsPatterns\n",n),n.forEach((e=>{e&&r.push(_(e))}))};return o(...n.transports),a(n.beforeSend),s(n.ignoreErrors),{add:o,addBeforeSendHooks:a,addIgnoreErrorsPatterns:s,getBeforeSendHooks:()=>[...r],execute:n=>{if(!i){let i=n;for(const e of r){const n=e(i);if(null===n)return;i=n}for(const n of t)e.debug(`Transporting item using ${n.name}\n`,i),n.send(i)}},isPaused:()=>i,pause:()=>{e.debug("Pausing transports"),i=!0},remove:(...n)=>{e.debug("Removing transports"),n.forEach((n=>{e.debug(`Removing "${n.name}" transport`);const i=t.indexOf(n);-1!==i?t.splice(i,1):e.warn(`Transport "${n.name}" is not added`)}))},removeBeforeSendHooks:(...e)=>{r.filter((n=>!e.includes(n)))},get transports(){return[...t]},unpause:()=>{e.debug("Unpausing transports"),i=!1}}}(t,e),o=V(t,e,r,i);e.session&&o.setSession(e.session);const l=s(t,{api:o,config:e,internalLogger:t,metas:i,pause:r.pause,transports:r,unpatchedConsole:n,unpause:r.unpause,instrumentations:K(t)});return l.instrumentations.add(...e.instrumentations),l}const oe="faro",ae={EventNames:{CLICK:"click",NAVIGATION:"navigation",SESSION_START:"session_start"}};class se extends W{constructor(){super(...arguments),this.name="@grafana/faro-web-sdk:instrumentation-session",this.version=t.exports.VERSION}sendSessionStartEvent(e){const n=e.session;n&&n!==this.notifiedSession&&(this.notifiedSession=n,this.faro.api.pushEvent(ae.EventNames.SESSION_START,{},void 0,{skipDedupe:!0}))}initialize(){this.sendSessionStartEvent(this.faro.metas.value),this.faro.metas.addListener(this.sendSessionStartEvent.bind(this))}}class le extends W{constructor(e={}){super(),this.options=e,this.name="@grafana/faro-web-sdk:instrumentation-console",this.version=ie}initialize(){this.logDebug("Initializing\n",this.options),j.filter((e=>{var n;return!(null!==(n=this.options.disabledLevels)&&void 0!==n?n:le.defaultDisabledLevels).includes(e)})).forEach((e=>{console[e]=(...n)=>{try{this.faro.api.pushLog(n,{level:e})}catch(e){this.logError(e)}finally{this.faro.unpatchedConsole[e](...n)}}}))}}le.defaultDisabledLevels=[e.LogLevel.DEBUG,e.LogLevel.TRACE,e.LogLevel.LOG];const ue=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i,ce=/^\s*at (?:(.*\).*?|.*?) ?\((?:address at )?)?((?:file|https?|blob|chrome-extension|address|native|eval|webpack|<anonymous>|[-a-z]+:|.*bundle|\/)?.*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,de=/\((\S*)(?::(\d+))(?::(\d+))\)/,pe="address at ",fe=pe.length,be=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)?((?:file|https?|blob|chrome|webpack|resource|moz-extension|safari-extension|safari-web-extension|capacitor)?:\/.*?|\[native code]|[^@]*(?:bundle|\d+\.js)|\/[\w\-. /=]+)(?::(\d+))?(?::(\d+))?\s*$/i,ge=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,me="safari-extension",ve="safari-web-extension",he=/Minified React error #\d+;/i;function we(e,n,t,i){const r={filename:e||document.location.href,function:n||"?"};return void 0!==t&&(r.lineno=t),void 0!==i&&(r.colno=i),r}function ye(e,n){const t=null==e?void 0:e.includes(me),i=!t&&(null==e?void 0:e.includes(ve));return t||i?[(null==e?void 0:e.includes("@"))?e.split("@")[0]:e,t?`${me}:${n}`:`${ve}:${n}`]:[e,n]}function Ee(e){let n=[];e.stacktrace?n=e.stacktrace.split("\n").filter(((e,n)=>n%2==0)):e.stack&&(n=e.stack.split("\n"));const t=n.reduce(((n,t,i)=>{let r,o,a,s,l;if(r=ce.exec(t)){if(o=r[1],a=r[2],s=r[3],l=r[4],null==a?void 0:a.startsWith("eval")){const e=de.exec(a);e&&(a=e[1],s=e[2],l=e[3])}a=(null==a?void 0:a.startsWith(pe))?a.substring(fe):a,[o,a]=ye(o,a)}else if(r=be.exec(t)){if(o=r[1],a=r[3],s=r[4],l=r[5],a&&a.includes(" > eval")){const e=ge.exec(a);e&&(o=o||"eval",a=e[1],s=e[2])}else 0===i&&!l&&g(e.columnNumber)&&(l=String(e.columnNumber+1));[o,a]=ye(o,a)}return(a||o)&&n.push(we(a,o,s?Number(s):void 0,l?Number(l):void 0)),n}),[]);return he.test(e.message)?t.slice(1):t}function xe(e){return{frames:Ee(e)}}function ke(e){let n,t,i,r,o=[];if(T(e)&&e.error)n=e.error.message,t=e.error.name,o=Ee(e.error);else if((i=L(e))||S(e)){const{name:r,message:o}=e;t=null!=r?r:i?"DOMError":"DOMException",n=o?`${t}: ${o}`:t}else k(e)?(n=e.message,o=Ee(e)):(m(e)||(r=E(e)))&&(t=r?e.constructor.name:void 0,n=`Non-Error exception captured with keys: ${Object.keys(e)}`);return[n,t,o]}function Te(e){const n=window.onerror;window.onerror=(...t)=>{try{const[i,r,o,a,s]=t;let l,u,c=[];const d=b(i),p=we(r,"?",o,a);s||!d?([l,u,c]=ke(null!=s?s:i),0===c.length&&(c=[p])):d&&([l,u]=function(e){var n,t;const i=e.match(ue),r=null!==(n=null==i?void 0:i[1])&&void 0!==n?n:q;return[null!==(t=null==i?void 0:i[2])&&void 0!==t?t:e,r]}(i),c=[p]),l&&e.api.pushError(new Error(l),{type:u,stackFrames:c})}finally{null==n||n.apply(window,t)}}}class Le extends W{constructor(){super(...arguments),this.name="@grafana/faro-web-sdk:instrumentation-errors",this.version=ie}initialize(){var e;this.logDebug("Initializing"),Te(this.faro),e=this.faro,window.addEventListener("unhandledrejection",(n=>{var t,i;let r,o,a=n;a.reason?a=n.reason:(null===(t=n.detail)||void 0===t?void 0:t.reason)&&(a=null===(i=n.detail)||void 0===i?void 0:i.reason),w(a)?(r=`Non-Error promise rejection captured with value: ${String(a)}`,o="UnhandledRejection"):[r,o]=ke(a),r&&e.api.pushError(new Error(r),{type:o})}))}}var Se,Oe,Ie,Ne,Re,Ae=-1,Ce=function(e){addEventListener("pageshow",(function(n){n.persisted&&(Ae=n.timeStamp,e(n))}),!0)},je=function(){return window.performance&&performance.getEntriesByType&&performance.getEntriesByType("navigation")[0]},De=function(){var e=je();return e&&e.activationStart||0},Pe=function(e,n){var t=je(),i="navigate";return Ae>=0?i="back-forward-cache":t&&(i=document.prerendering||De()>0?"prerender":document.wasDiscarded?"restore":t.type.replace(/_/g,"-")),{name:e,value:void 0===n?-1:n,rating:"good",delta:0,entries:[],id:"v3-".concat(Date.now(),"-").concat(Math.floor(8999999999999*Math.random())+1e12),navigationType:i}},ze=function(e,n,t){try{if(PerformanceObserver.supportedEntryTypes.includes(e)){var i=new PerformanceObserver((function(e){Promise.resolve().then((function(){n(e.getEntries())}))}));return i.observe(Object.assign({type:e,buffered:!0},t||{})),i}}catch(e){}},Me=function(e,n){var t=function t(i){"pagehide"!==i.type&&"hidden"!==document.visibilityState||(e(i),n&&(removeEventListener("visibilitychange",t,!0),removeEventListener("pagehide",t,!0)))};addEventListener("visibilitychange",t,!0),addEventListener("pagehide",t,!0)},Fe=function(e,n,t,i){var r,o;return function(a){n.value>=0&&(a||i)&&((o=n.value-(r||0))||void 0===r)&&(r=n.value,n.delta=o,n.rating=function(e,n){return e>n[1]?"poor":e>n[0]?"needs-improvement":"good"}(n.value,t),e(n))}},$e=function(e){requestAnimationFrame((function(){return requestAnimationFrame((function(){return e()}))}))},_e=function(e){document.prerendering?addEventListener("prerenderingchange",(function(){return e()}),!0):e()},Be=-1,Ue=function(){return"hidden"!==document.visibilityState||document.prerendering?1/0:0},qe=function(e){"hidden"===document.visibilityState&&Be>-1&&(Be="visibilitychange"===e.type?e.timeStamp:0,Ve())},Ge=function(){addEventListener("visibilitychange",qe,!0),addEventListener("prerenderingchange",qe,!0)},Ve=function(){removeEventListener("visibilitychange",qe,!0),removeEventListener("prerenderingchange",qe,!0)},We=function(){return Be<0&&(Be=Ue(),Ge(),Ce((function(){setTimeout((function(){Be=Ue(),Ge()}),0)}))),{get firstHiddenTime(){return Be}}},Ke=function(e,n){n=n||{},_e((function(){var t,i=[1800,3e3],r=We(),o=Pe("FCP"),a=ze("paint",(function(e){e.forEach((function(e){"first-contentful-paint"===e.name&&(a.disconnect(),e.startTime<r.firstHiddenTime&&(o.value=Math.max(e.startTime-De(),0),o.entries.push(e),t(!0)))}))}));a&&(t=Fe(e,o,i,n.reportAllChanges),Ce((function(r){o=Pe("FCP"),t=Fe(e,o,i,n.reportAllChanges),$e((function(){o.value=performance.now()-r.timeStamp,t(!0)}))})))}))},He={passive:!0,capture:!0},Xe=new Date,Ze=function(e,n){Se||(Se=n,Oe=e,Ie=new Date,Ye(removeEventListener),Je())},Je=function(){if(Oe>=0&&Oe<Ie-Xe){var e={entryType:"first-input",name:Se.type,target:Se.target,cancelable:Se.cancelable,startTime:Se.timeStamp,processingStart:Se.timeStamp+Oe};Ne.forEach((function(n){n(e)})),Ne=[]}},Qe=function(e){if(e.cancelable){var n=(e.timeStamp>1e12?new Date:performance.now())-e.timeStamp;"pointerdown"==e.type?function(e,n){var t=function(){Ze(e,n),r()},i=function(){r()},r=function(){removeEventListener("pointerup",t,He),removeEventListener("pointercancel",i,He)};addEventListener("pointerup",t,He),addEventListener("pointercancel",i,He)}(n,e):Ze(n,e)}},Ye=function(e){["mousedown","keydown","touchstart","pointerdown"].forEach((function(n){return e(n,Qe,He)}))},en=0,nn=1/0,tn=0,rn=function(e){e.forEach((function(e){e.interactionId&&(nn=Math.min(nn,e.interactionId),tn=Math.max(tn,e.interactionId),en=tn?(tn-nn)/7+1:0)}))},on=function(){return Re?en:performance.interactionCount||0},an=function(){"interactionCount"in performance||Re||(Re=ze("event",rn,{type:"event",buffered:!0,durationThreshold:0}))},sn=0,ln=function(){return on()-sn},un=[],cn={},dn=function(e){var n=un[un.length-1],t=cn[e.interactionId];if(t||un.length<10||e.duration>n.latency){if(t)t.entries.push(e),t.latency=Math.max(t.latency,e.duration);else{var i={id:e.interactionId,latency:e.duration,entries:[e]};cn[i.id]=i,un.push(i)}un.sort((function(e,n){return n.latency-e.latency})),un.splice(10).forEach((function(e){delete cn[e.id]}))}},pn={},fn=function e(n){document.prerendering?_e((function(){return e(n)})):"complete"!==document.readyState?addEventListener("load",(function(){return e(n)}),!0):setTimeout(n,0)};class bn extends W{constructor(){super(...arguments),this.name="@grafana/faro-web-sdk:instrumentation-web-vitals",this.version=ie}initialize(){this.logDebug("Initializing"),Object.entries(bn.mapping).forEach((([e,n])=>{n((n=>{this.faro.api.pushMeasurement({type:"web-vitals",values:{[e]:n.value}})}))}))}}function gn(e={}){const n=[new Le,new bn,new se];return!1!==e.captureConsole&&n.push(new le({disabledLevels:e.captureConsoleDisabledLevels})),n}bn.mapping={cls:function(e,n){n=n||{},_e((function(){var t,i=[.1,.25],r=Pe("CLS"),o=-1,a=0,s=[],l=function(n){o>-1&&e(n)},u=function(e){e.forEach((function(e){if(!e.hadRecentInput){var n=s[0],i=s[s.length-1];a&&e.startTime-i.startTime<1e3&&e.startTime-n.startTime<5e3?(a+=e.value,s.push(e)):(a=e.value,s=[e]),a>r.value&&(r.value=a,r.entries=s,t())}}))},c=ze("layout-shift",u);c&&(t=Fe(l,r,i,n.reportAllChanges),Ke((function(e){o=e.value,r.value<0&&(r.value=0,t())})),Me((function(){u(c.takeRecords()),t(!0)})),Ce((function(){a=0,o=-1,r=Pe("CLS",0),t=Fe(l,r,i,n.reportAllChanges),$e((function(){return t()}))})))}))},fcp:Ke,fid:function(e,n){n=n||{},_e((function(){var t,i=[100,300],r=We(),o=Pe("FID"),a=function(e){e.startTime<r.firstHiddenTime&&(o.value=e.processingStart-e.startTime,o.entries.push(e),t(!0))},s=function(e){e.forEach(a)},l=ze("first-input",s);t=Fe(e,o,i,n.reportAllChanges),l&&Me((function(){s(l.takeRecords()),l.disconnect()}),!0),l&&Ce((function(){var r;o=Pe("FID"),t=Fe(e,o,i,n.reportAllChanges),Ne=[],Oe=-1,Se=null,Ye(addEventListener),r=a,Ne.push(r),Je()}))}))},inp:function(e,n){n=n||{},_e((function(){var t=[200,500];an();var i,r=Pe("INP"),o=function(e){e.forEach((function(e){e.interactionId&&dn(e),"first-input"===e.entryType&&!un.some((function(n){return n.entries.some((function(n){return e.duration===n.duration&&e.startTime===n.startTime}))}))&&dn(e)}));var n,t=(n=Math.min(un.length-1,Math.floor(ln()/50)),un[n]);t&&t.latency!==r.value&&(r.value=t.latency,r.entries=t.entries,i())},a=ze("event",o,{durationThreshold:n.durationThreshold||40});i=Fe(e,r,t,n.reportAllChanges),a&&(a.observe({type:"first-input",buffered:!0}),Me((function(){o(a.takeRecords()),r.value<0&&ln()>0&&(r.value=0,r.entries=[]),i(!0)})),Ce((function(){un=[],sn=on(),r=Pe("INP"),i=Fe(e,r,t,n.reportAllChanges)})))}))},lcp:function(e,n){n=n||{},_e((function(){var t,i=[2500,4e3],r=We(),o=Pe("LCP"),a=function(e){var n=e[e.length-1];if(n){var i=Math.max(n.startTime-De(),0);i<r.firstHiddenTime&&(o.value=i,o.entries=[n],t())}},s=ze("largest-contentful-paint",a);if(s){t=Fe(e,o,i,n.reportAllChanges);var l=function(){pn[o.id]||(a(s.takeRecords()),s.disconnect(),pn[o.id]=!0,t(!0))};["keydown","click"].forEach((function(e){addEventListener(e,l,{once:!0,capture:!0})})),Me(l,!0),Ce((function(r){o=Pe("LCP"),t=Fe(e,o,i,n.reportAllChanges),$e((function(){o.value=performance.now()-r.timeStamp,pn[o.id]=!0,t(!0)}))}))}}))},ttfb:function(e,n){n=n||{};var t=[800,1800],i=Pe("TTFB"),r=Fe(e,i,t,n.reportAllChanges);fn((function(){var o=je();if(o){var a=o.responseStart;if(a<=0||a>performance.now())return;i.value=Math.max(a-De(),0),i.entries=[o],r(!0),Ce((function(){i=Pe("TTFB",0),(r=Fe(e,i,t,n.reportAllChanges))(!0)}))}}))}};const mn="browser",vn=()=>{const e=new t.exports.UAParser,{name:n,version:i}=e.getBrowser(),{name:r,version:o}=e.getOS(),a="unknown";return{browser:{name:null!=n?n:a,version:null!=i?i:a,os:`${null!=r?r:a} ${null!=o?o:a}`,mobile:navigator.userAgent.includes("Mobi")}}},hn=()=>({page:{url:location.href}}),wn=[vn,hn];function yn(e){return{id:M(),attributes:e}}function En(e,n,t,i){return new(t||(t=Promise))((function(r,o){function a(e){try{l(i.next(e))}catch(e){o(e)}}function s(e){try{l(i.throw(e))}catch(e){o(e)}}function l(e){var n;e.done?r(e.value):(n=e.value,n instanceof t?n:new t((function(e){e(n)}))).then(a,s)}l((i=i.apply(e,n||[])).next())}))}class xn extends B{constructor(e){var n,t,i,r;super(),this.options=e,this.name="@grafana/faro-web-sdk:transport-fetch",this.version=ie,this.disabledUntil=new Date,this.rateLimitBackoffMs=null!==(n=e.defaultRateLimitBackoffMs)&&void 0!==n?n:5e3,this.getNow=null!==(t=e.getNow)&&void 0!==t?t:()=>Date.now(),this.promiseBuffer=P({size:null!==(i=e.bufferSize)&&void 0!==i?i:30,concurrency:null!==(r=e.concurrency)&&void 0!==r?r:5})}send(e){return En(this,void 0,void 0,(function*(){try{if(this.disabledUntil>new Date(this.getNow()))return this.logWarn(`Dropping transport item due to too many requests. Backoff until ${this.disabledUntil}`),Promise.resolve();yield this.promiseBuffer.add((()=>{const n=JSON.stringify(U(e)),{url:t,requestOptions:i,apiKey:r}=this.options,o=null!=i?i:{},{headers:a}=o,s=function(e,n){var t={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&n.indexOf(i)<0&&(t[i]=e[i]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var r=0;for(i=Object.getOwnPropertySymbols(e);r<i.length;r++)n.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(t[i[r]]=e[i[r]])}return t}(o,["headers"]);return fetch(t,Object.assign({method:"POST",headers:Object.assign(Object.assign({"Content-Type":"application/json"},null!=a?a:{}),r?{"x-api-key":r}:{}),body:n,keepalive:!0},null!=s?s:{})).then((e=>(429===e.status&&(this.disabledUntil=this.getRetryAfterDate(e),this.logWarn(`Too many requests, backing off until ${this.disabledUntil}`)),e))).catch((e=>{this.logError("Failed sending payload to the receiver\n",JSON.parse(n),e)}))}))}catch(e){this.logError(e)}}))}getIgnoreUrls(){return[this.options.url]}getRetryAfterDate(e){const n=this.getNow(),t=e.headers.get("Retry-After");if(t){const e=Number(t);if(!isNaN(e))return new Date(1e3*e+n);const i=Date.parse(t);if(!isNaN(i))return new Date(i)}return new Date(n+this.rateLimitBackoffMs)}}function kn(e){var n,t,i,r,o,a,s,l,u,c;const d=[],p=ee(e.unpatchedConsole,e.internalLoggerLevel);return e.transports?((e.url||e.apiKey)&&p.error('if "transports" is defined, "url" and "apiKey" should not be defined'),d.push(...e.transports)):e.url?d.push(new xn({url:e.url,apiKey:e.apiKey})):p.error('either "url" or "transports" must be defined'),{app:e.app,dedupe:null===(n=e.dedupe)||void 0===n||n,globalObjectKey:e.globalObjectKey||oe,instrumentations:null!==(t=e.instrumentations)&&void 0!==t?t:gn(),internalLoggerLevel:null!==(i=e.internalLoggerLevel)&&void 0!==i?i:Z,isolate:null!==(r=e.isolate)&&void 0!==r&&r,metas:null!==(o=e.metas)&&void 0!==o?o:wn,parseStacktrace:xe,paused:null!==(a=e.paused)&&void 0!==a&&a,preventGlobalExposure:null!==(s=e.preventGlobalExposure)&&void 0!==s&&s,transports:d,unpatchedConsole:null!==(l=e.unpatchedConsole)&&void 0!==l?l:J,beforeSend:e.beforeSend,ignoreErrors:e.ignoreErrors,session:null!==(u=e.session)&&void 0!==u?u:yn(),user:e.user,eventDomain:null!==(c=e.eventDomain)&&void 0!==c?c:mn}}return e.BaseExtension=l,e.BaseInstrumentation=W,e.BaseTransport=B,e.ConsoleInstrumentation=le,e.ConsoleTransport=class extends B{constructor(e={}){super(),this.options=e,this.name="@grafana/faro-web-sdk:transport-console",this.version=ie}send(n){var t;return this.faro.unpatchedConsole[null!==(t=this.options.level)&&void 0!==t?t:e.LogLevel.DEBUG]("New event",U(n))}},e.Conventions=ae,e.ErrorsInstrumentation=Le,e.FetchTransport=xn,e.VERSION=ie,e.WebVitalsInstrumentation=bn,e.allLogLevels=j,e.browserMeta=vn,e.buildStackFrame=we,e.createInternalLogger=ee,e.createPromiseBuffer=P,e.createSession=yn,e.deepEqual=N,e.defaultEventDomain=mn,e.defaultExceptionType=q,e.defaultGlobalObjectKey=oe,e.defaultInternalLoggerLevel=Z,e.defaultLogLevel=C,e.defaultMetas=wn,e.getCurrentTimestamp=R,e.getDataFromSafariExtensions=ye,e.getInternalFaroFromGlobalObject=function(){return r[i]},e.getStackFramesFromError=Ee,e.getTransportBody=U,e.getWebInstrumentations=gn,e.globalObject=r,e.initializeFaro=function(e){const n=kn(e);if(n)return re(n)},e.internalGlobalObjectKey=i,e.isArray=h,e.isBoolean=e=>u(e,"boolean"),e.isDomError=L,e.isDomException=S,e.isElement=e=>O&&d(e,Element),e.isElementDefined=O,e.isError=k,e.isErrorDefined=x,e.isErrorEvent=T,e.isEvent=E,e.isEventDefined=y,e.isFunction=v,e.isInstanceOf=d,e.isInt=e=>g(e)&&Number.isInteger(e),e.isInternalFaroOnGlobalObject=a,e.isMap=e=>I&&d(e,Map),e.isMapDefined=I,e.isNull=f,e.isNumber=g,e.isObject=m,e.isPrimitive=w,e.isRegExp=e=>c(e,"RegExp"),e.isString=b,e.isSymbol=e=>u(e,"symbol"),e.isSyntheticEvent=e=>m(e)&&"nativeEvent"in e&&"preventDefault"in e&&"stopPropagation"in e,e.isThenable=e=>v(null==e?void 0:e.then),e.isToString=c,e.isTypeof=u,e.isUndefined=p,e.makeCoreConfig=kn,e.noop=D,e.pageMeta=hn,e.parseStacktrace=xe,e.setInternalFaroOnGlobalObject=o,e.transportItemTypeToBodyKey=$,e}({});
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -3,7 +3,7 @@ import type { ConsoleInstrumentationOptions } from './types';
3
3
  export declare class ConsoleInstrumentation extends BaseInstrumentation {
4
4
  private options;
5
5
  readonly name = "@grafana/faro-web-sdk:instrumentation-console";
6
- readonly version = "1.0.0-beta3";
6
+ readonly version = "1.0.0-beta4";
7
7
  static defaultDisabledLevels: LogLevel[];
8
8
  constructor(options?: ConsoleInstrumentationOptions);
9
9
  initialize(): void;
@@ -1,6 +1,6 @@
1
1
  import { BaseInstrumentation } from '@grafana/faro-core';
2
2
  export declare class ErrorsInstrumentation extends BaseInstrumentation {
3
3
  readonly name = "@grafana/faro-web-sdk:instrumentation-errors";
4
- readonly version = "1.0.0-beta3";
4
+ readonly version = "1.0.0-beta4";
5
5
  initialize(): void;
6
6
  }
File without changes
@@ -1,7 +1,7 @@
1
1
  import { BaseInstrumentation } from '@grafana/faro-core';
2
2
  export declare class WebVitalsInstrumentation extends BaseInstrumentation {
3
3
  readonly name = "@grafana/faro-web-sdk:instrumentation-web-vitals";
4
- readonly version = "1.0.0-beta3";
4
+ readonly version = "1.0.0-beta4";
5
5
  static mapping: {
6
6
  cls: (onReport: import("web-vitals").CLSReportCallback, opts?: import("web-vitals").ReportOpts | undefined) => void;
7
7
  fcp: (onReport: import("web-vitals").FCPReportCallback, opts?: import("web-vitals").ReportOpts | undefined) => void;
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -4,7 +4,7 @@ import type { ConsoleTransportOptions } from './types';
4
4
  export declare class ConsoleTransport extends BaseTransport {
5
5
  private options;
6
6
  readonly name = "@grafana/faro-web-sdk:transport-console";
7
- readonly version = "1.0.0-beta3";
7
+ readonly version = "1.0.0-beta4";
8
8
  constructor(options?: ConsoleTransportOptions);
9
9
  send(item: TransportItem): void;
10
10
  }
File without changes
@@ -4,7 +4,7 @@ import type { FetchTransportOptions } from './types';
4
4
  export declare class FetchTransport extends BaseTransport {
5
5
  private options;
6
6
  readonly name = "@grafana/faro-web-sdk:transport-fetch";
7
- readonly version = "1.0.0-beta3";
7
+ readonly version = "1.0.0-beta4";
8
8
  promiseBuffer: PromiseBuffer<Response | void>;
9
9
  private rateLimitBackoffMs;
10
10
  private getNow;
File without changes
File without changes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@grafana/faro-web-sdk",
3
- "version": "1.0.0-beta3",
3
+ "version": "1.0.0-beta4",
4
4
  "description": "Faro instrumentations, metas, transports for web.",
5
5
  "keywords": [
6
6
  "observability",
@@ -18,11 +18,11 @@
18
18
  "repository": {
19
19
  "type": "git",
20
20
  "url": "https://github.com/grafana/faro-web-sdk.git",
21
- "directory": "packages/web"
21
+ "directory": "packages/web-sdk"
22
22
  },
23
- "main": "dist/cjs/index.js",
24
- "module": "dist/esm/index.js",
25
- "types": "dist/cjs/index.d.ts",
23
+ "main": "./dist/cjs/index.js",
24
+ "module": "./dist/esm/index.js",
25
+ "types": "./dist/types/index.d.ts",
26
26
  "files": [
27
27
  "dist",
28
28
  "globals.ts",
@@ -30,20 +30,28 @@
30
30
  "LICENSE"
31
31
  ],
32
32
  "scripts": {
33
- "start": "yarn build -w",
34
- "build": "tsc --build tsconfig.all.json",
33
+ "start": "yarn watch",
34
+ "build": "run-s build:*",
35
+ "build:compile": "run-p build:compile:*",
36
+ "build:compile:cjs": "tsc --build tsconfig.cjs.json",
37
+ "build:compile:esm": "tsc --build tsconfig.esm.json",
38
+ "build:compile:bundle": "run-s build:compile:bundle:*",
39
+ "build:compile:bundle:create": "rollup -c ./rollup.config.js",
40
+ "build:compile:bundle:remove-extras": "rimraf dist/bundle/dist",
41
+ "watch": "run-s watch:compile",
42
+ "watch:compile": "yarn build:compile:cjs -w",
35
43
  "clean": "rimraf dist/ yarn-error.log",
36
44
  "quality": "run-s quality:*",
37
45
  "quality:test": "jest",
38
- "quality:format": "prettier --ignore-path ../../.prettierignore -w \"./**/*.{js,jsx,ts,tsx,css,scss,md,yaml,yml,json}\"",
46
+ "quality:format": "prettier --cache --cache-location=../../.cache/prettier/webSdk --ignore-path ../../.prettierignore -w \"./**/*.{js,jsx,ts,tsx,css,scss,md,yaml,yml,json}\"",
39
47
  "quality:lint": "run-s quality:lint:*",
40
- "quality:lint:eslint": "eslint --ignore-path ../../.eslintignore \"./**/*.{js,jsx,ts,tsx}\"",
41
- "quality:lint:prettier": "prettier --ignore-path ../../.prettierignore -c \"./**/*.{js,jsx,ts,tsx,css,scss,md,yaml,yml,json}\"",
48
+ "quality:lint:eslint": "eslint --cache --cache-location ../../.cache/eslint/webSdk --ignore-path ../../.eslintignore \"./**/*.{js,jsx,ts,tsx}\"",
49
+ "quality:lint:prettier": "prettier --cache --cache-location=../../.cache/prettier/webSdk --ignore-path ../../.prettierignore -c \"./**/*.{js,jsx,ts,tsx,css,scss,md,yaml,yml,json}\"",
42
50
  "quality:lint:md": "markdownlint README.md",
43
51
  "quality:circular-deps": "madge --circular ."
44
52
  },
45
53
  "dependencies": {
46
- "@grafana/faro-core": "^1.0.0-beta3",
54
+ "@grafana/faro-core": "^1.0.0-beta4",
47
55
  "ua-parser-js": "^1.0.32",
48
56
  "web-vitals": "^3.1.0"
49
57
  },
@@ -53,5 +61,5 @@
53
61
  "publishConfig": {
54
62
  "access": "public"
55
63
  },
56
- "gitHead": "99cc29ee4c9bfece5697b016855f3a2ba96a9848"
64
+ "gitHead": "88ab57b93286d22830db932a7dc74bcaf2dd4c3d"
57
65
  }
@@ -1,6 +0,0 @@
1
- import { BaseInstrumentation } from '@grafana/faro-core';
2
- export declare class ErrorsInstrumentation extends BaseInstrumentation {
3
- readonly name = "@grafana/faro-web-sdk:instrumentation-errors";
4
- readonly version = "1.0.0-beta3";
5
- initialize(): void;
6
- }
@@ -1,23 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- var testUtils_1 = require("@grafana/faro-core/src/testUtils");
4
- var initialize_1 = require("../../initialize");
5
- var registerOnerror_1 = require("./registerOnerror");
6
- describe('registerOnerror', function () {
7
- it('will preserve the old callback', function () {
8
- var called = false;
9
- window.onerror = function () {
10
- called = true;
11
- };
12
- var transport = new testUtils_1.MockTransport();
13
- var config = (0, testUtils_1.mockConfig)({
14
- transports: [transport],
15
- });
16
- var faro = (0, initialize_1.initializeFaro)(config);
17
- (0, registerOnerror_1.registerOnerror)(faro);
18
- window.onerror('boo', 'some file', 10, 10, new Error('boo'));
19
- expect(called).toBe(true);
20
- expect(transport.items).toHaveLength(1);
21
- });
22
- });
23
- //# sourceMappingURL=registerOnerror.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"registerOnerror.test.js","sourceRoot":"","sources":["../../../../src/instrumentations/errors/registerOnerror.test.ts"],"names":[],"mappings":";;AAAA,8DAA6E;AAE7E,+CAAkD;AAClD,qDAAoD;AAEpD,QAAQ,CAAC,iBAAiB,EAAE;IAC1B,EAAE,CAAC,gCAAgC,EAAE;QACnC,IAAI,MAAM,GAAG,KAAK,CAAC;QACnB,MAAM,CAAC,OAAO,GAAG;YACf,MAAM,GAAG,IAAI,CAAC;QAChB,CAAC,CAAC;QACF,IAAM,SAAS,GAAG,IAAI,yBAAa,EAAE,CAAC;QACtC,IAAM,MAAM,GAAG,IAAA,sBAAU,EAAC;YACxB,UAAU,EAAE,CAAC,SAAS,CAAC;SACxB,CAAC,CAAC;QACH,IAAM,IAAI,GAAG,IAAA,2BAAc,EAAC,MAAM,CAAC,CAAC;QACpC,IAAA,iCAAe,EAAC,IAAI,CAAC,CAAC;QAEtB,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QAC7D,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { mockConfig, MockTransport } from '@grafana/faro-core/src/testUtils';\n\nimport { initializeFaro } from '../../initialize';\nimport { registerOnerror } from './registerOnerror';\n\ndescribe('registerOnerror', () => {\n it('will preserve the old callback', () => {\n let called = false;\n window.onerror = () => {\n called = true;\n };\n const transport = new MockTransport();\n const config = mockConfig({\n transports: [transport],\n });\n const faro = initializeFaro(config);\n registerOnerror(faro);\n\n window.onerror('boo', 'some file', 10, 10, new Error('boo'));\n expect(called).toBe(true);\n expect(transport.items).toHaveLength(1);\n });\n});\n\nexport {};\n"]}
@@ -1,47 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- var faro_core_1 = require("@grafana/faro-core");
4
- var testUtils_1 = require("@grafana/faro-core/src/testUtils");
5
- var session_1 = require("../../session");
6
- var instrumentation_1 = require("./instrumentation");
7
- describe('SessionInstrumentation', function () {
8
- it('will send session start event on initialize', function () {
9
- var _a, _b;
10
- var transport = new testUtils_1.MockTransport();
11
- var session = (0, session_1.createSession)({ foo: 'bar' });
12
- var config = (0, testUtils_1.mockConfig)({
13
- transports: [transport],
14
- instrumentations: [new instrumentation_1.SessionInstrumentation()],
15
- session: session,
16
- });
17
- (0, faro_core_1.initializeFaro)(config);
18
- expect(transport.items).toHaveLength(1);
19
- var event = transport.items[0];
20
- expect(event.payload.name).toEqual(faro_core_1.Conventions.EventNames.SESSION_START);
21
- expect((_a = event.meta.session) === null || _a === void 0 ? void 0 : _a.attributes).toEqual({ foo: 'bar' });
22
- expect((_b = event.meta.session) === null || _b === void 0 ? void 0 : _b.id).toEqual(session.id);
23
- });
24
- it('will send session new start event if setSession is called.', function () {
25
- var _a, _b;
26
- var transport = new testUtils_1.MockTransport();
27
- var session = (0, session_1.createSession)({ foo: 'bar' });
28
- var config = (0, testUtils_1.mockConfig)({
29
- transports: [transport],
30
- instrumentations: [new instrumentation_1.SessionInstrumentation()],
31
- session: session,
32
- });
33
- var faro = (0, faro_core_1.initializeFaro)(config);
34
- expect(transport.items).toHaveLength(1);
35
- var event = transport.items[0];
36
- expect(event.payload.name).toEqual(faro_core_1.Conventions.EventNames.SESSION_START);
37
- expect((_a = event.meta.session) === null || _a === void 0 ? void 0 : _a.id).toEqual(session.id);
38
- faro.metas.add({ user: { id: 'foo' } });
39
- expect(transport.items).toHaveLength(1);
40
- var newSession = (0, session_1.createSession)();
41
- faro.api.setSession(newSession);
42
- expect(transport.items).toHaveLength(2);
43
- event = transport.items[0];
44
- expect((_b = event.meta.session) === null || _b === void 0 ? void 0 : _b.id).toEqual(session.id);
45
- });
46
- });
47
- //# sourceMappingURL=instrumentation.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"instrumentation.test.js","sourceRoot":"","sources":["../../../../src/instrumentations/session/instrumentation.test.ts"],"names":[],"mappings":";;AAAA,gDAA4F;AAC5F,8DAA6E;AAE7E,yCAA8C;AAC9C,qDAA2D;AAE3D,QAAQ,CAAC,wBAAwB,EAAE;IACjC,EAAE,CAAC,6CAA6C,EAAE;;QAChD,IAAM,SAAS,GAAG,IAAI,yBAAa,EAAE,CAAC;QACtC,IAAM,OAAO,GAAG,IAAA,uBAAa,EAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;QAC9C,IAAM,MAAM,GAAG,IAAA,sBAAU,EAAC;YACxB,UAAU,EAAE,CAAC,SAAS,CAAC;YACvB,gBAAgB,EAAE,CAAC,IAAI,wCAAsB,EAAE,CAAC;YAChD,OAAO,SAAA;SACR,CAAC,CAAC;QAEH,IAAA,0BAAc,EAAC,MAAM,CAAC,CAAC;QAEvB,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAExC,IAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAA+B,CAAC;QAC/D,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,uBAAW,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;QACzE,MAAM,CAAC,MAAA,KAAK,CAAC,IAAI,CAAC,OAAO,0CAAE,UAAU,CAAC,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;QAC/D,MAAM,CAAC,MAAA,KAAK,CAAC,IAAI,CAAC,OAAO,0CAAE,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE;;QAC/D,IAAM,SAAS,GAAG,IAAI,yBAAa,EAAE,CAAC;QACtC,IAAM,OAAO,GAAG,IAAA,uBAAa,EAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;QAC9C,IAAM,MAAM,GAAG,IAAA,sBAAU,EAAC;YACxB,UAAU,EAAE,CAAC,SAAS,CAAC;YACvB,gBAAgB,EAAE,CAAC,IAAI,wCAAsB,EAAE,CAAC;YAChD,OAAO,SAAA;SACR,CAAC,CAAC;QAEH,IAAM,IAAI,GAAG,IAAA,0BAAc,EAAC,MAAM,CAAC,CAAC;QAEpC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAExC,IAAI,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAA+B,CAAC;QAC7D,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,uBAAW,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;QACzE,MAAM,CAAC,MAAA,KAAK,CAAC,IAAI,CAAC,OAAO,0CAAE,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAEnD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QACxC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAExC,IAAM,UAAU,GAAG,IAAA,uBAAa,GAAE,CAAC;QACnC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAChC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAExC,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAA+B,CAAC;QACzD,MAAM,CAAC,MAAA,KAAK,CAAC,IAAI,CAAC,OAAO,0CAAE,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { Conventions, EventEvent, initializeFaro, TransportItem } from '@grafana/faro-core';\nimport { mockConfig, MockTransport } from '@grafana/faro-core/src/testUtils';\n\nimport { createSession } from '../../session';\nimport { SessionInstrumentation } from './instrumentation';\n\ndescribe('SessionInstrumentation', () => {\n it('will send session start event on initialize', () => {\n const transport = new MockTransport();\n const session = createSession({ foo: 'bar' });\n const config = mockConfig({\n transports: [transport],\n instrumentations: [new SessionInstrumentation()],\n session,\n });\n\n initializeFaro(config);\n\n expect(transport.items).toHaveLength(1);\n\n const event = transport.items[0]! as TransportItem<EventEvent>;\n expect(event.payload.name).toEqual(Conventions.EventNames.SESSION_START);\n expect(event.meta.session?.attributes).toEqual({ foo: 'bar' });\n expect(event.meta.session?.id).toEqual(session.id);\n });\n\n it('will send session new start event if setSession is called.', () => {\n const transport = new MockTransport();\n const session = createSession({ foo: 'bar' });\n const config = mockConfig({\n transports: [transport],\n instrumentations: [new SessionInstrumentation()],\n session,\n });\n\n const faro = initializeFaro(config);\n\n expect(transport.items).toHaveLength(1);\n\n let event = transport.items[0]! as TransportItem<EventEvent>;\n expect(event.payload.name).toEqual(Conventions.EventNames.SESSION_START);\n expect(event.meta.session?.id).toEqual(session.id);\n\n faro.metas.add({ user: { id: 'foo' } });\n expect(transport.items).toHaveLength(1);\n\n const newSession = createSession();\n faro.api.setSession(newSession);\n expect(transport.items).toHaveLength(2);\n\n event = transport.items[0]! as TransportItem<EventEvent>;\n expect(event.meta.session?.id).toEqual(session.id);\n });\n});\n\nexport {};\n"]}
@@ -1,14 +0,0 @@
1
- import { BaseInstrumentation } from '@grafana/faro-core';
2
- export declare class WebVitalsInstrumentation extends BaseInstrumentation {
3
- readonly name = "@grafana/faro-web-sdk:instrumentation-web-vitals";
4
- readonly version = "1.0.0-beta3";
5
- static mapping: {
6
- cls: (onReport: import("web-vitals").CLSReportCallback, opts?: import("web-vitals").ReportOpts | undefined) => void;
7
- fcp: (onReport: import("web-vitals").FCPReportCallback, opts?: import("web-vitals").ReportOpts | undefined) => void;
8
- fid: (onReport: import("web-vitals").ReportHandler, opts?: import("web-vitals").ReportOpts | undefined) => void;
9
- inp: (onReport: import("web-vitals").ReportHandler, opts?: import("web-vitals").ReportOpts | undefined) => void;
10
- lcp: (onReport: import("web-vitals").ReportHandler, opts?: import("web-vitals").ReportOpts | undefined) => void;
11
- ttfb: (onReport: import("web-vitals").ReportHandler, opts?: import("web-vitals").ReportOpts | undefined) => void;
12
- };
13
- initialize(): void;
14
- }
@@ -1,10 +0,0 @@
1
- import { BaseTransport } from '@grafana/faro-core';
2
- import type { TransportItem } from '@grafana/faro-core';
3
- import type { ConsoleTransportOptions } from './types';
4
- export declare class ConsoleTransport extends BaseTransport {
5
- private options;
6
- readonly name = "@grafana/faro-web-sdk:transport-console";
7
- readonly version = "1.0.0-beta3";
8
- constructor(options?: ConsoleTransportOptions);
9
- send(item: TransportItem): void;
10
- }
@@ -1 +0,0 @@
1
- export {};