@ogcio/o11y-sdk-react 0.11.3 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/sdk-core/lib/redaction/email-redactor.js.map +1 -1
- package/dist/sdk-core/lib/redaction/ppsn-redactor.js.map +1 -1
- package/dist/sdk-core/lib/utils/geo-context.d.ts +1 -0
- package/dist/sdk-core/lib/utils/geo-context.d.ts.map +1 -1
- package/dist/sdk-core/lib/utils/geo-context.js +2 -1
- package/dist/sdk-core/lib/utils/geo-context.js.map +1 -1
- package/dist/sdk-react/index.d.ts +1 -1
- package/dist/sdk-react/index.d.ts.map +1 -1
- package/dist/sdk-react/index.js +1 -1
- package/dist/sdk-react/index.js.map +1 -1
- package/dist/sdk-react/lib/index.d.ts +52 -1
- package/dist/sdk-react/lib/index.d.ts.map +1 -1
- package/dist/sdk-react/lib/index.js +0 -1
- package/dist/sdk-react/lib/index.js.map +1 -1
- package/dist/sdk-react/lib/instrumentation.faro.d.ts.map +1 -1
- package/dist/sdk-react/lib/instrumentation.faro.js +20 -11
- package/dist/sdk-react/lib/instrumentation.faro.js.map +1 -1
- package/dist/sdk-react/lib/internals/config.d.ts +4 -0
- package/dist/sdk-react/lib/internals/config.d.ts.map +1 -0
- package/dist/sdk-react/lib/internals/config.js +12 -0
- package/dist/sdk-react/lib/internals/config.js.map +1 -0
- package/dist/sdk-react/lib/internals/url.d.ts +6 -0
- package/dist/sdk-react/lib/internals/url.d.ts.map +1 -0
- package/dist/sdk-react/lib/internals/url.js +8 -0
- package/dist/sdk-react/lib/internals/url.js.map +1 -0
- package/dist/sdk-react/replay.d.ts +7 -0
- package/dist/sdk-react/replay.d.ts.map +1 -0
- package/dist/sdk-react/replay.js +55 -0
- package/dist/sdk-react/replay.js.map +1 -0
- package/package.json +32 -18
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"email-redactor.js","sourceRoot":"","sources":["../../../../../sdk-core/lib/redaction/email-redactor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGpD,MAAM,OAAO,aAAc,SAAQ,aAAa;IAC9C,mFAAmF;IACnF,gGAAgG;IACxF,MAAM,CAAU,WAAW,GACjC,wEAAwE,CAAC,CAAC,UAAU;IAE9E,MAAM,CAAU,WAAW,GAAG,OAAO,CAAC;IAEpC,MAAM,CACd,KAAa;QAEb,MAAM,OAAO,GAA2B,EAAE,CAAC;QAE3C,2DAA2D;QAC3D,uDAAuD;QACvD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;QACrD,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YAClC,sEAAsE;YACtE,IAAI,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;gBAAE,OAAO,IAAI,CAAC;YACtD,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,
|
|
1
|
+
{"version":3,"file":"email-redactor.js","sourceRoot":"","sources":["../../../../../sdk-core/lib/redaction/email-redactor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGpD,MAAM,OAAO,aAAc,SAAQ,aAAa;IAC9C,mFAAmF;IACnF,gGAAgG;IACxF,MAAM,CAAU,WAAW,GACjC,wEAAwE,CAAC,CAAC,UAAU;IAE9E,MAAM,CAAU,WAAW,GAAG,OAAO,CAAC;IAEpC,MAAM,CACd,KAAa;QAEb,MAAM,OAAO,GAA2B,EAAE,CAAC;QAE3C,2DAA2D;QAC3D,uDAAuD;QACvD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;QACrD,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YAClC,sEAAsE;YACtE,IAAI,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;gBAAE,OAAO,IAAI,CAAC;YACtD,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,MAAc,EAAE,EAAE;gBACnE,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC7C,OAAO,kBAAkB,CAAC;YAC5B,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,OAAO;YACL,aAAa,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAChC,OAAO,EAAE;gBACP,OAAO;aACR;SACF,CAAC;IACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ppsn-redactor.js","sourceRoot":"","sources":["../../../../../sdk-core/lib/redaction/ppsn-redactor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGpD,MAAM,OAAO,YAAa,SAAQ,aAAa;IAC7C,iDAAiD;IACzC,MAAM,CAAU,UAAU,GAAG,mBAAmB,CAAC;IAE/C,MAAM,CACd,KAAa;QAEb,IAAI,eAAe,GAAG,CAAC,CAAC;QAExB,oDAAoD;QACpD,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CACjC,YAAY,CAAC,UAAU,EACvB,CAAC,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"ppsn-redactor.js","sourceRoot":"","sources":["../../../../../sdk-core/lib/redaction/ppsn-redactor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGpD,MAAM,OAAO,YAAa,SAAQ,aAAa;IAC7C,iDAAiD;IACzC,MAAM,CAAU,UAAU,GAAG,mBAAmB,CAAC;IAE/C,MAAM,CACd,KAAa;QAEb,IAAI,eAAe,GAAG,CAAC,CAAC;QAExB,oDAAoD;QACpD,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CACjC,YAAY,CAAC,UAAU,EACvB,CAAC,KAAK,EAAE,MAAc,EAAE,EAAE;YACxB,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACnD,MAAM,KAAK,GACT,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM;gBAClC,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;gBAC9B,CAAC,CAAC,EAAE,CAAC;YAET,qDAAqD;YACrD,MAAM,aAAa,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACpD,MAAM,YAAY,GAAG,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAEjD,IAAI,aAAa,IAAI,YAAY,EAAE,CAAC;gBAClC,eAAe,EAAE,CAAC;gBAClB,OAAO,iBAAiB,CAAC;YAC3B,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC,CACF,CAAC;QAEF,OAAO;YACL,aAAa,EAAE,aAAa;YAC5B,OAAO,EAAE;gBACP,eAAe;aAChB;SACF,CAAC;IACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"geo-context.d.ts","sourceRoot":"","sources":["../../../../../sdk-core/lib/utils/geo-context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAGlD,eAAO,MAAM,cAAc,kDAAmD,CAAC;AAE/E,KAAK,MAAM,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAC9C,MAAM,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAE5D,MAAM,MAAM,QAAQ,GAAG;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"geo-context.d.ts","sourceRoot":"","sources":["../../../../../sdk-core/lib/utils/geo-context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAGlD,eAAO,MAAM,cAAc,kDAAmD,CAAC;AAE/E,KAAK,MAAM,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAC9C,MAAM,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAE5D,MAAM,MAAM,QAAQ,GAAG;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAcF;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,OAAO,GAAG,aAAa,CAEvE;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,IAAI,aAAa,CAEhD;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,QAAQ,GAAG,aAAa,CAiBtE"}
|
|
@@ -44,7 +44,8 @@ export function createGeoAttributesFrom(input) {
|
|
|
44
44
|
input.lat <= 90 &&
|
|
45
45
|
input.lon >= -180 &&
|
|
46
46
|
input.lon <= 180) {
|
|
47
|
-
const
|
|
47
|
+
const precision = input.precision ?? 4;
|
|
48
|
+
const hash = encodeGeohash(input.lat, input.lon, precision);
|
|
48
49
|
if (hash)
|
|
49
50
|
attrs["geo.hash"] = hash;
|
|
50
51
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"geo-context.js","sourceRoot":"","sources":["../../../../../sdk-core/lib/utils/geo-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAE1D,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,aAAa,EAAE,UAAU,EAAE,UAAU,CAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"geo-context.js","sourceRoot":"","sources":["../../../../../sdk-core/lib/utils/geo-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAE1D,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,aAAa,EAAE,UAAU,EAAE,UAAU,CAAU,CAAC;AAa/E,SAAS,WAAW,CAClB,OAAkD;IAElD,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IACxB,MAAM,KAAK,GAAkB,EAAE,CAAC;IAChC,KAAK,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC;QAC3C,IAAI,KAAK;YAAE,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IAChC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,2BAA2B,CAAC,GAAY;IACtD,OAAO,WAAW,CAAC,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;AAClD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB;IAC9B,OAAO,WAAW,CAAC,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AAC/D,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CAAC,KAAe;IACrD,MAAM,KAAK,GAAkB,EAAE,CAAC;IAChC,IAAI,KAAK,CAAC,OAAO;QAAE,KAAK,CAAC,aAAa,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC;IACxD,IAAI,KAAK,CAAC,IAAI;QAAE,KAAK,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC;IAC/C,IACE,KAAK,CAAC,GAAG,KAAK,SAAS;QACvB,KAAK,CAAC,GAAG,KAAK,SAAS;QACvB,KAAK,CAAC,GAAG,IAAI,CAAC,EAAE;QAChB,KAAK,CAAC,GAAG,IAAI,EAAE;QACf,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG;QACjB,KAAK,CAAC,GAAG,IAAI,GAAG,EAChB,CAAC;QACD,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,IAAI,CAAC,CAAC;QACvC,MAAM,IAAI,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAC5D,IAAI,IAAI;YAAE,KAAK,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;IACrC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -7,5 +7,5 @@ export { buildFaroInstrumentation as instrumentFaro };
|
|
|
7
7
|
export type { Span, SpanStatus } from "@opentelemetry/api";
|
|
8
8
|
export type { Exception } from "@opentelemetry/api";
|
|
9
9
|
export { SpanKind, SpanStatusCode, TraceFlags } from "@opentelemetry/api";
|
|
10
|
-
export { withFaroErrorBoundary, withFaroProfiler, type Faro, } from "@grafana/faro-react";
|
|
10
|
+
export { withFaroErrorBoundary, withFaroProfiler, ReactIntegration, FaroRoutes, createReactRouterV6Options, createReactRouterV6DataOptions, createReactRouterV7Options, createReactRouterV7DataOptions, type Faro, } from "@grafana/faro-react";
|
|
11
11
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../index.ts"],"names":[],"mappings":"AAAA,OAAO,wBAAwB,MAAM,+BAA+B,CAAC;AAErE,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AAErC,OAAO,EAAE,wBAAwB,IAAI,cAAc,EAAE,CAAC;AAEtD,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAE3D,YAAY,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAE1E,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAChB,KAAK,IAAI,GACV,MAAM,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../index.ts"],"names":[],"mappings":"AAAA,OAAO,wBAAwB,MAAM,+BAA+B,CAAC;AAErE,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AAErC,OAAO,EAAE,wBAAwB,IAAI,cAAc,EAAE,CAAC;AAEtD,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAE3D,YAAY,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAE1E,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAChB,gBAAgB,EAChB,UAAU,EACV,0BAA0B,EAC1B,8BAA8B,EAC9B,0BAA0B,EAC1B,8BAA8B,EAC9B,KAAK,IAAI,GACV,MAAM,qBAAqB,CAAC"}
|
package/dist/sdk-react/index.js
CHANGED
|
@@ -5,5 +5,5 @@ export * from "./lib/traces.js";
|
|
|
5
5
|
export * from "../sdk-core/index.js";
|
|
6
6
|
export { buildFaroInstrumentation as instrumentFaro };
|
|
7
7
|
export { SpanKind, SpanStatusCode, TraceFlags } from "@opentelemetry/api";
|
|
8
|
-
export { withFaroErrorBoundary, withFaroProfiler, } from "@grafana/faro-react";
|
|
8
|
+
export { withFaroErrorBoundary, withFaroProfiler, ReactIntegration, FaroRoutes, createReactRouterV6Options, createReactRouterV6DataOptions, createReactRouterV7Options, createReactRouterV7DataOptions, } from "@grafana/faro-react";
|
|
9
9
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../index.ts"],"names":[],"mappings":"AAAA,OAAO,wBAAwB,MAAM,+BAA+B,CAAC;AAErE,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AAErC,OAAO,EAAE,wBAAwB,IAAI,cAAc,EAAE,CAAC;AAKtD,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAE1E,OAAO,EACL,qBAAqB,EACrB,gBAAgB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../index.ts"],"names":[],"mappings":"AAAA,OAAO,wBAAwB,MAAM,+BAA+B,CAAC;AAErE,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AAErC,OAAO,EAAE,wBAAwB,IAAI,cAAc,EAAE,CAAC;AAKtD,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAE1E,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAChB,gBAAgB,EAChB,UAAU,EACV,0BAA0B,EAC1B,8BAA8B,EAC9B,0BAA0B,EAC1B,8BAA8B,GAE/B,MAAM,qBAAqB,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { BasicRedactor } from "../../sdk-core/lib/redaction/basic-redactor.js";
|
|
1
|
+
import type { BasicRedactor } from "../../sdk-core/lib/redaction/basic-redactor.js";
|
|
2
2
|
import type { MetaApp } from "@grafana/faro-core/dist/types/metas/index.js";
|
|
3
|
+
import type { Instrumentation, ReactIntegration } from "@grafana/faro-react";
|
|
3
4
|
interface SDKConfig {
|
|
4
5
|
/**
|
|
5
6
|
* The opentelemetry collector entrypoint GRPC url.
|
|
@@ -68,6 +69,56 @@ export interface FaroSDKConfig extends SDKConfig {
|
|
|
68
69
|
*/
|
|
69
70
|
custom?: BasicRedactor[];
|
|
70
71
|
};
|
|
72
|
+
/**
|
|
73
|
+
* Optional ReactIntegration instrumentation instance.
|
|
74
|
+
*/
|
|
75
|
+
reactIntegration?: InstanceType<typeof ReactIntegration>;
|
|
76
|
+
/**
|
|
77
|
+
* Additional custom Faro instrumentations to register alongside the
|
|
78
|
+
* built-in ones (mirrors `additionalInstrumentations` in the Node SDK).
|
|
79
|
+
* @default []
|
|
80
|
+
*/
|
|
81
|
+
additionalInstrumentations?: Instrumentation[];
|
|
82
|
+
/**
|
|
83
|
+
* Optional function to process the page URL before it is sent as metadata.
|
|
84
|
+
* Receives the raw URL with stripped fragment and returns the final URL string.
|
|
85
|
+
* When omitted, the configured PII redactors are applied to the URL as a failsafe.
|
|
86
|
+
*/
|
|
87
|
+
pageUrlProcessor?: (url: string) => string;
|
|
88
|
+
}
|
|
89
|
+
export interface ReplayConfig {
|
|
90
|
+
/**
|
|
91
|
+
* Enable Session Replay recording.
|
|
92
|
+
* @default false
|
|
93
|
+
*/
|
|
94
|
+
enabled?: boolean;
|
|
95
|
+
/**
|
|
96
|
+
* Fraction (0..1) of globally sampled sessions that are also recorded.
|
|
97
|
+
* Applied on top of Faro's own session sampling.
|
|
98
|
+
* @default 1
|
|
99
|
+
*/
|
|
100
|
+
samplingRate?: number;
|
|
101
|
+
/**
|
|
102
|
+
* CSS selector for extra regions to block from recording. Matched elements
|
|
103
|
+
* are replaced with a placeholder in the replay, so their contents —
|
|
104
|
+
* including images, SVG, background media, and canvas — are never captured.
|
|
105
|
+
* Use this to hide sensitive areas (uploaded documents, ID photos, signatures).
|
|
106
|
+
*
|
|
107
|
+
* Added on top of the always-on defaults `.rr-block` and `.o11y-replay-block`:
|
|
108
|
+
* any element carrying either class is blocked even without this option.
|
|
109
|
+
* Additive only — it can hide more, never weaken the always-on masking.
|
|
110
|
+
* @default undefined
|
|
111
|
+
*/
|
|
112
|
+
blockSelector?: string;
|
|
113
|
+
/**
|
|
114
|
+
* CSS selector for elements whose mutations and interactions are ignored.
|
|
115
|
+
* Unlike `blockSelector`, this does NOT hide content — the element's initial
|
|
116
|
+
* DOM is still recorded in the snapshot; only its later changes and input
|
|
117
|
+
* events are dropped. Use it to cut recording noise from busy widgets, not
|
|
118
|
+
* to mask sensitive data.
|
|
119
|
+
* @default undefined
|
|
120
|
+
*/
|
|
121
|
+
ignoreSelector?: string;
|
|
71
122
|
}
|
|
72
123
|
export type SDKCollectorMode = "single" | "batch";
|
|
73
124
|
export type SDKLogLevel = "NONE" | "ERROR" | "WARN" | "INFO" | "DEBUG" | "VERBOSE" | "ALL";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../lib/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,gDAAgD,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../lib/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gDAAgD,CAAC;AACpF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,8CAA8C,CAAC;AAC5E,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE7E,UAAU,SAAS;IACjB;;;;OAIG;IACH,YAAY,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,WAAW,CAAC;IAC3B;;;;;;;OAOG;IACH,aAAa,CAAC,EAAE,gBAAgB,CAAC;IACjC;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,aAAc,SAAQ,SAAS;IAC9C;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;OAEG;IACH,SAAS,CAAC,EAAE;QACV;;;WAGG;QACH,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB;;;WAGG;QACH,EAAE,CAAC,EAAE,OAAO,CAAC;QACb;;;WAGG;QACH,IAAI,CAAC,EAAE,OAAO,CAAC;QACf;;;WAGG;QACH,MAAM,CAAC,EAAE,aAAa,EAAE,CAAC;KAC1B,CAAC;IACF;;OAEG;IACH,gBAAgB,CAAC,EAAE,YAAY,CAAC,OAAO,gBAAgB,CAAC,CAAC;IACzD;;;;OAIG;IACH,0BAA0B,CAAC,EAAE,eAAe,EAAE,CAAC;IAC/C;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;CAC5C;AAED,MAAM,WAAW,YAAY;IAC3B;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;;;;;;OAUG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;;;OAOG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,OAAO,CAAC;AAElD,MAAM,MAAM,WAAW,GACrB,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,KAAK,CAAC;AAEnE,cAAc,kBAAkB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../lib/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../lib/index.ts"],"names":[],"mappings":"AAmIA,cAAc,kBAAkB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instrumentation.faro.d.ts","sourceRoot":"","sources":["../../../lib/instrumentation.faro.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,IAAI,EACV,MAAM,qBAAqB,CAAC;AAO7B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"instrumentation.faro.d.ts","sourceRoot":"","sources":["../../../lib/instrumentation.faro.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,IAAI,EACV,MAAM,qBAAqB,CAAC;AAO7B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAKhD,MAAM,CAAC,OAAO,UAAU,wBAAwB,CAC9C,MAAM,CAAC,EAAE,aAAa,GACrB,IAAI,GAAG,SAAS,CAoFlB"}
|
|
@@ -6,8 +6,8 @@ import { DocumentLoadInstrumentation } from "@opentelemetry/instrumentation-docu
|
|
|
6
6
|
import { FetchInstrumentation } from "@opentelemetry/instrumentation-fetch";
|
|
7
7
|
import { UserInteractionInstrumentation } from "@opentelemetry/instrumentation-user-interaction";
|
|
8
8
|
import { _beforeSend } from "./internals/hooks.js";
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
9
|
+
import { buildRedactorsChain } from "./internals/config.js";
|
|
10
|
+
import { processPageUrl } from "./internals/url.js";
|
|
11
11
|
export default function buildFaroInstrumentation(config) {
|
|
12
12
|
if (!config) {
|
|
13
13
|
console.warn("observability config not set. Skipping Faro OpenTelemetry instrumentation.");
|
|
@@ -21,15 +21,7 @@ export default function buildFaroInstrumentation(config) {
|
|
|
21
21
|
console.error("collectorUrl does not use a valid format. Skipping Faro OpenTelemetry instrumentation.");
|
|
22
22
|
return;
|
|
23
23
|
}
|
|
24
|
-
const
|
|
25
|
-
.filter(([key]) => {
|
|
26
|
-
return config.detection?.[key] !== false;
|
|
27
|
-
})
|
|
28
|
-
.map(([_, value]) => value);
|
|
29
|
-
const customRedactors = config.detection?.custom?.length
|
|
30
|
-
? config.detection?.custom.filter((redactor) => redactor instanceof BasicRedactor)
|
|
31
|
-
: [];
|
|
32
|
-
const redactorsChain = [...defaultRedactors, ...customRedactors];
|
|
24
|
+
const redactorsChain = buildRedactorsChain(config);
|
|
33
25
|
try {
|
|
34
26
|
diag.setLogger(new DiagConsoleLogger(), config.diagLogLevel
|
|
35
27
|
? DiagLogLevel[config.diagLogLevel]
|
|
@@ -43,6 +35,21 @@ export default function buildFaroInstrumentation(config) {
|
|
|
43
35
|
batching: {
|
|
44
36
|
enabled: config.collectorMode !== "single",
|
|
45
37
|
},
|
|
38
|
+
metas: [
|
|
39
|
+
() => {
|
|
40
|
+
return {
|
|
41
|
+
page: {
|
|
42
|
+
// Failsafe: when no custom pageUrlProcessor is supplied, still run
|
|
43
|
+
// the configured PII redactors over the URL so identifiers are not
|
|
44
|
+
// leaked through page metadata (or Session Replay URL captures).
|
|
45
|
+
url: processPageUrl(location.href, {
|
|
46
|
+
pageUrlProcessor: config.pageUrlProcessor,
|
|
47
|
+
redactorsChain,
|
|
48
|
+
}),
|
|
49
|
+
},
|
|
50
|
+
};
|
|
51
|
+
},
|
|
52
|
+
],
|
|
46
53
|
beforeSend: _beforeSend(redactorsChain),
|
|
47
54
|
instrumentations: [
|
|
48
55
|
...getWebInstrumentations({
|
|
@@ -63,6 +70,8 @@ export default function buildFaroInstrumentation(config) {
|
|
|
63
70
|
new UserInteractionInstrumentation(),
|
|
64
71
|
],
|
|
65
72
|
}),
|
|
73
|
+
...(config.reactIntegration ? [config.reactIntegration] : []),
|
|
74
|
+
...(config.additionalInstrumentations ?? []),
|
|
66
75
|
],
|
|
67
76
|
});
|
|
68
77
|
console.log("Faro OpenTelemetry instrumentation started successfully.");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instrumentation.faro.js","sourceRoot":"","sources":["../../../lib/instrumentation.faro.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,cAAc,EACd,wBAAwB,GAEzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC3E,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,2BAA2B,EAAE,MAAM,8CAA8C,CAAC;AAC3F,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAC5E,OAAO,EAAE,8BAA8B,EAAE,MAAM,iDAAiD,CAAC;AAEjG,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,
|
|
1
|
+
{"version":3,"file":"instrumentation.faro.js","sourceRoot":"","sources":["../../../lib/instrumentation.faro.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../lib/internals/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjD,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,GACvC,aAAa,EAAE,CAYjB"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { BasicRedactor } from "../../../sdk-core/lib/index.js";
|
|
2
|
+
import { redactors } from "./redaction/redactors/index.js";
|
|
3
|
+
export function buildRedactorsChain(config) {
|
|
4
|
+
const defaultRedactors = Object.entries(redactors)
|
|
5
|
+
.filter(([key]) => config.detection?.[key] !== false)
|
|
6
|
+
.map(([, value]) => value);
|
|
7
|
+
const customRedactors = config.detection?.custom?.length
|
|
8
|
+
? config.detection.custom.filter((redactor) => redactor instanceof BasicRedactor)
|
|
9
|
+
: [];
|
|
10
|
+
return [...defaultRedactors, ...customRedactors];
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../lib/internals/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAE/D,OAAO,EAAqB,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAE9E,MAAM,UAAU,mBAAmB,CACjC,MAAwC;IAExC,MAAM,gBAAgB,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC;SAC/C,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,GAAmB,CAAC,KAAK,KAAK,CAAC;SACpE,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;IAE7B,MAAM,eAAe,GAAG,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM;QACtD,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAC5B,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,YAAY,aAAa,CAChD;QACH,CAAC,CAAC,EAAE,CAAC;IAEP,OAAO,CAAC,GAAG,gBAAgB,EAAE,GAAG,eAAe,CAAC,CAAC;AACnD,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { type BasicRedactor } from "../../../sdk-core/lib/index.js";
|
|
2
|
+
export declare function processPageUrl(rawUrl: string, { pageUrlProcessor, redactorsChain, }: {
|
|
3
|
+
pageUrlProcessor?: (url: string) => string;
|
|
4
|
+
redactorsChain: BasicRedactor[];
|
|
5
|
+
}): string;
|
|
6
|
+
//# sourceMappingURL=url.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"url.d.ts","sourceRoot":"","sources":["../../../../lib/internals/url.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,aAAa,EACnB,MAAM,gCAAgC,CAAC;AAExC,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,EACE,gBAAgB,EAChB,cAAc,GACf,EAAE;IACD,gBAAgB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;IAC3C,cAAc,EAAE,aAAa,EAAE,CAAC;CACjC,GACA,MAAM,CAKR"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { _cleanStringPII, } from "../../../sdk-core/lib/index.js";
|
|
2
|
+
export function processPageUrl(rawUrl, { pageUrlProcessor, redactorsChain, }) {
|
|
3
|
+
const url = rawUrl.split("#")[0];
|
|
4
|
+
return pageUrlProcessor
|
|
5
|
+
? pageUrlProcessor(url)
|
|
6
|
+
: _cleanStringPII(url, "page_url", redactorsChain);
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=url.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"url.js","sourceRoot":"","sources":["../../../../lib/internals/url.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,GAEhB,MAAM,gCAAgC,CAAC;AAExC,MAAM,UAAU,cAAc,CAC5B,MAAc,EACd,EACE,gBAAgB,EAChB,cAAc,GAIf;IAED,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACjC,OAAO,gBAAgB;QACrB,CAAC,CAAC,gBAAgB,CAAC,GAAG,CAAC;QACvB,CAAC,CAAC,eAAe,CAAC,GAAG,EAAE,UAAU,EAAE,cAAc,CAAC,CAAC;AACvD,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { FaroSDKConfig, ReplayConfig } from "./lib/index.js";
|
|
2
|
+
export interface ReplayFaroSDKConfig extends FaroSDKConfig {
|
|
3
|
+
replay?: ReplayConfig;
|
|
4
|
+
}
|
|
5
|
+
export declare function withReplay(config: ReplayFaroSDKConfig): FaroSDKConfig;
|
|
6
|
+
export type { ReplayConfig };
|
|
7
|
+
//# sourceMappingURL=replay.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"replay.d.ts","sourceRoot":"","sources":["../../replay.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAIlE,MAAM,WAAW,mBAAoB,SAAQ,aAAa;IACxD,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,mBAAmB,GAAG,aAAa,CAkBrE;AAED,YAAY,EAAE,YAAY,EAAE,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { ReplayInstrumentation, } from "@grafana/faro-instrumentation-replay";
|
|
2
|
+
import { buildRedactorsChain } from "./lib/internals/config.js";
|
|
3
|
+
import { processPageUrl } from "./lib/internals/url.js";
|
|
4
|
+
export function withReplay(config) {
|
|
5
|
+
const { replay, ...faroConfig } = config;
|
|
6
|
+
if (!replay?.enabled)
|
|
7
|
+
return faroConfig;
|
|
8
|
+
const redactorsChain = buildRedactorsChain(faroConfig);
|
|
9
|
+
const processUrl = (url) => processPageUrl(url, {
|
|
10
|
+
pageUrlProcessor: faroConfig.pageUrlProcessor,
|
|
11
|
+
redactorsChain,
|
|
12
|
+
});
|
|
13
|
+
return {
|
|
14
|
+
...faroConfig,
|
|
15
|
+
additionalInstrumentations: [
|
|
16
|
+
new ReplayInstrumentation(buildReplayOptions(replay, processUrl)),
|
|
17
|
+
...(faroConfig.additionalInstrumentations ?? []),
|
|
18
|
+
],
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
// Always-on block convention: elements carrying either class are never
|
|
22
|
+
// recorded, even when the consumer sets no `blockSelector`. `.rr-block` is
|
|
23
|
+
// rrweb's native default; `.o11y-replay-block` is the SDK's self-documenting
|
|
24
|
+
// alias. A consumer `blockSelector` is added on top — it can only block more.
|
|
25
|
+
const DEFAULT_BLOCK_SELECTOR = ".rr-block, .o11y-replay-block";
|
|
26
|
+
function clampSamplingRate(rate = 1) {
|
|
27
|
+
return Number.isFinite(rate) ? Math.min(1, Math.max(0, rate)) : 1;
|
|
28
|
+
}
|
|
29
|
+
function buildReplayOptions(replay, processUrl) {
|
|
30
|
+
return {
|
|
31
|
+
samplingRate: clampSamplingRate(replay.samplingRate),
|
|
32
|
+
maskAllInputs: true,
|
|
33
|
+
maskTextSelector: "*",
|
|
34
|
+
blockSelector: [DEFAULT_BLOCK_SELECTOR, replay.blockSelector]
|
|
35
|
+
.filter(Boolean)
|
|
36
|
+
.join(", "),
|
|
37
|
+
ignoreSelector: replay.ignoreSelector,
|
|
38
|
+
beforeSend: (event) => processReplayMetaUrl(event, processUrl),
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
function processReplayMetaUrl(event, processUrl) {
|
|
42
|
+
const data = event.data;
|
|
43
|
+
// rrweb EventType.Meta (4) is the only event carrying a page URL, in `href`.
|
|
44
|
+
const type = event.type;
|
|
45
|
+
if (type !== 4 || typeof data?.href !== "string")
|
|
46
|
+
return event;
|
|
47
|
+
return {
|
|
48
|
+
...event,
|
|
49
|
+
data: {
|
|
50
|
+
...data,
|
|
51
|
+
href: processUrl(data.href),
|
|
52
|
+
},
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=replay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"replay.js","sourceRoot":"","sources":["../../replay.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,GAEtB,MAAM,sCAAsC,CAAC;AAE9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAMxD,MAAM,UAAU,UAAU,CAAC,MAA2B;IACpD,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,EAAE,GAAG,MAAM,CAAC;IACzC,IAAI,CAAC,MAAM,EAAE,OAAO;QAAE,OAAO,UAAU,CAAC;IAExC,MAAM,cAAc,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC;IACvD,MAAM,UAAU,GAAG,CAAC,GAAW,EAAE,EAAE,CACjC,cAAc,CAAC,GAAG,EAAE;QAClB,gBAAgB,EAAE,UAAU,CAAC,gBAAgB;QAC7C,cAAc;KACf,CAAC,CAAC;IAEL,OAAO;QACL,GAAG,UAAU;QACb,0BAA0B,EAAE;YAC1B,IAAI,qBAAqB,CAAC,kBAAkB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YACjE,GAAG,CAAC,UAAU,CAAC,0BAA0B,IAAI,EAAE,CAAC;SACjD;KACF,CAAC;AACJ,CAAC;AAQD,uEAAuE;AACvE,2EAA2E;AAC3E,6EAA6E;AAC7E,8EAA8E;AAC9E,MAAM,sBAAsB,GAAG,+BAA+B,CAAC;AAE/D,SAAS,iBAAiB,CAAC,IAAI,GAAG,CAAC;IACjC,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpE,CAAC;AAED,SAAS,kBAAkB,CACzB,MAAoB,EACpB,UAAmC;IAEnC,OAAO;QACL,YAAY,EAAE,iBAAiB,CAAC,MAAM,CAAC,YAAY,CAAC;QACpD,aAAa,EAAE,IAAI;QACnB,gBAAgB,EAAE,GAAG;QACrB,aAAa,EAAE,CAAC,sBAAsB,EAAE,MAAM,CAAC,aAAa,CAAC;aAC1D,MAAM,CAAC,OAAO,CAAC;aACf,IAAI,CAAC,IAAI,CAAC;QACb,cAAc,EAAE,MAAM,CAAC,cAAc;QACrC,UAAU,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,oBAAoB,CAAC,KAAK,EAAE,UAAU,CAAC;KAC/D,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAC3B,KAAkB,EAClB,UAAmC;IAEnC,MAAM,IAAI,GAAI,KAAuC,CAAC,IAAI,CAAC;IAC3D,6EAA6E;IAC7E,MAAM,IAAI,GAAW,KAAK,CAAC,IAAI,CAAC;IAChC,IAAI,IAAI,KAAK,CAAC,IAAI,OAAO,IAAI,EAAE,IAAI,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAE/D,OAAO;QACL,GAAG,KAAK;QACR,IAAI,EAAE;YACJ,GAAG,IAAI;YACP,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;SAC5B;KACa,CAAC;AACnB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,12 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ogcio/o11y-sdk-react",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.12.0",
|
|
4
4
|
"description": "Opentelemetry standard instrumentation SDK for React based project",
|
|
5
5
|
"main": "dist/sdk-react/index.js",
|
|
6
6
|
"types": "dist/sdk-react/index.d.ts",
|
|
7
7
|
"type": "module",
|
|
8
8
|
"exports": {
|
|
9
|
-
".":
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/sdk-react/index.d.ts",
|
|
11
|
+
"default": "./dist/sdk-react/index.js"
|
|
12
|
+
},
|
|
13
|
+
"./replay": {
|
|
14
|
+
"types": "./dist/sdk-react/replay.d.ts",
|
|
15
|
+
"default": "./dist/sdk-react/replay.js"
|
|
16
|
+
},
|
|
10
17
|
"./*": "./dist/*.js"
|
|
11
18
|
},
|
|
12
19
|
"files": [
|
|
@@ -23,32 +30,39 @@
|
|
|
23
30
|
"author": "team:ogcio/observability",
|
|
24
31
|
"license": "ISC",
|
|
25
32
|
"dependencies": {
|
|
26
|
-
"@grafana/faro-react": "2.
|
|
27
|
-
"@grafana/faro-web-sdk": "2.
|
|
28
|
-
"@grafana/faro-web-tracing": "2.
|
|
33
|
+
"@grafana/faro-react": "2.8.2",
|
|
34
|
+
"@grafana/faro-web-sdk": "2.8.2",
|
|
35
|
+
"@grafana/faro-web-tracing": "2.8.2",
|
|
29
36
|
"@opentelemetry/api": "1.9.1",
|
|
30
|
-
"@opentelemetry/core": "2.
|
|
31
|
-
"@opentelemetry/instrumentation-document-load": "0.
|
|
32
|
-
"@opentelemetry/instrumentation-fetch": "0.
|
|
33
|
-
"@opentelemetry/instrumentation-user-interaction": "0.
|
|
37
|
+
"@opentelemetry/core": "2.9.0",
|
|
38
|
+
"@opentelemetry/instrumentation-document-load": "0.65.0",
|
|
39
|
+
"@opentelemetry/instrumentation-fetch": "0.220.0",
|
|
40
|
+
"@opentelemetry/instrumentation-user-interaction": "0.64.0"
|
|
34
41
|
},
|
|
35
42
|
"devDependencies": {
|
|
36
|
-
"@grafana/faro-core": "2.
|
|
37
|
-
"@
|
|
43
|
+
"@grafana/faro-core": "2.8.2",
|
|
44
|
+
"@grafana/faro-instrumentation-replay": "2.8.2",
|
|
45
|
+
"@opentelemetry/sdk-trace-base": "2.9.0",
|
|
38
46
|
"@testing-library/react": "16.3.2",
|
|
39
|
-
"@types/node": "
|
|
40
|
-
"@types/react": "19.2.
|
|
41
|
-
"@vitest/coverage-v8": "4.1.
|
|
42
|
-
"happy-dom": "20.
|
|
43
|
-
"react": "19.2.
|
|
44
|
-
"react-dom": "19.2.
|
|
47
|
+
"@types/node": "26.1.1",
|
|
48
|
+
"@types/react": "19.2.17",
|
|
49
|
+
"@vitest/coverage-v8": "4.1.10",
|
|
50
|
+
"happy-dom": "20.10.6",
|
|
51
|
+
"react": "^19.2.7",
|
|
52
|
+
"react-dom": "^19.2.7",
|
|
45
53
|
"typescript": "6.0.3",
|
|
46
|
-
"vitest": "4.1.
|
|
54
|
+
"vitest": "4.1.10"
|
|
47
55
|
},
|
|
48
56
|
"peerDependencies": {
|
|
57
|
+
"@grafana/faro-instrumentation-replay": "2.8.2",
|
|
49
58
|
"react": "^18.0.0 || ^19.0.0",
|
|
50
59
|
"react-dom": "^18.0.0 || ^19.0.0"
|
|
51
60
|
},
|
|
61
|
+
"peerDependenciesMeta": {
|
|
62
|
+
"@grafana/faro-instrumentation-replay": {
|
|
63
|
+
"optional": true
|
|
64
|
+
}
|
|
65
|
+
},
|
|
52
66
|
"scripts": {
|
|
53
67
|
"build": "rm -rf dist && tsc -p tsconfig.json",
|
|
54
68
|
"test": "vitest"
|