@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.
Files changed (30) hide show
  1. package/dist/sdk-core/lib/redaction/email-redactor.js.map +1 -1
  2. package/dist/sdk-core/lib/redaction/ppsn-redactor.js.map +1 -1
  3. package/dist/sdk-core/lib/utils/geo-context.d.ts +1 -0
  4. package/dist/sdk-core/lib/utils/geo-context.d.ts.map +1 -1
  5. package/dist/sdk-core/lib/utils/geo-context.js +2 -1
  6. package/dist/sdk-core/lib/utils/geo-context.js.map +1 -1
  7. package/dist/sdk-react/index.d.ts +1 -1
  8. package/dist/sdk-react/index.d.ts.map +1 -1
  9. package/dist/sdk-react/index.js +1 -1
  10. package/dist/sdk-react/index.js.map +1 -1
  11. package/dist/sdk-react/lib/index.d.ts +52 -1
  12. package/dist/sdk-react/lib/index.d.ts.map +1 -1
  13. package/dist/sdk-react/lib/index.js +0 -1
  14. package/dist/sdk-react/lib/index.js.map +1 -1
  15. package/dist/sdk-react/lib/instrumentation.faro.d.ts.map +1 -1
  16. package/dist/sdk-react/lib/instrumentation.faro.js +20 -11
  17. package/dist/sdk-react/lib/instrumentation.faro.js.map +1 -1
  18. package/dist/sdk-react/lib/internals/config.d.ts +4 -0
  19. package/dist/sdk-react/lib/internals/config.d.ts.map +1 -0
  20. package/dist/sdk-react/lib/internals/config.js +12 -0
  21. package/dist/sdk-react/lib/internals/config.js.map +1 -0
  22. package/dist/sdk-react/lib/internals/url.d.ts +6 -0
  23. package/dist/sdk-react/lib/internals/url.d.ts.map +1 -0
  24. package/dist/sdk-react/lib/internals/url.js +8 -0
  25. package/dist/sdk-react/lib/internals/url.js.map +1 -0
  26. package/dist/sdk-react/replay.d.ts +7 -0
  27. package/dist/sdk-react/replay.d.ts.map +1 -0
  28. package/dist/sdk-react/replay.js +55 -0
  29. package/dist/sdk-react/replay.js.map +1 -0
  30. 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,MAAM,EAAE,EAAE;gBAC3D,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
+ {"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,MAAM,EAAE,EAAE;YAChB,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
+ {"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"}
@@ -7,6 +7,7 @@ export type GeoInput = {
7
7
  lon?: number;
8
8
  country?: string;
9
9
  city?: string;
10
+ precision?: number;
10
11
  };
11
12
  /**
12
13
  * Returns geo attributes from the given OTel context's baggage.
@@ -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;CACf,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,CAgBtE"}
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 hash = encodeGeohash(input.lat, input.lon, 4);
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;AAY/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,IAAI,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACpD,IAAI,IAAI;YAAE,KAAK,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;IACrC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,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"}
@@ -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,GAEjB,MAAM,qBAAqB,CAAC"}
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;AAC/E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,8CAA8C,CAAC;AAE5E,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;CACH;AAED,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,OAAO,CAAC;AAElD,MAAM,MAAM,WAAW,GACnB,MAAM,GACN,OAAO,GACP,MAAM,GACN,MAAM,GACN,OAAO,GACP,SAAS,GACT,KAAK,CAAC;AAEV,cAAc,kBAAkB,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,3 +1,2 @@
1
- import { BasicRedactor } from "../../sdk-core/lib/redaction/basic-redactor.js";
2
1
  export * from "./hooks/index.js";
3
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../lib/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,gDAAgD,CAAC;AAqF/E,cAAc,kBAAkB,CAAC"}
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;AAQhD,MAAM,CAAC,OAAO,UAAU,wBAAwB,CAC9C,MAAM,CAAC,EAAE,aAAa,GACrB,IAAI,GAAG,SAAS,CA+ElB"}
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 { redactors, } from "./internals/redaction/redactors/index.js";
10
- import { BasicRedactor } from "../../sdk-core/lib/index.js";
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 defaultRedactors = Object.entries(redactors)
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":"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"}
1
+ {"version":3,"file":"instrumentation.faro.js","sourceRoot":"","sources":["../../../lib/instrumentation.faro.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { BasicRedactor } from "../../../sdk-core/lib/index.js";
2
+ import type { FaroSDKConfig } from "../index.js";
3
+ export declare function buildRedactorsChain(config: Pick<FaroSDKConfig, "detection">): BasicRedactor[];
4
+ //# sourceMappingURL=config.d.ts.map
@@ -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.11.3",
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
- ".": "./dist/sdk-react/index.js",
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.6.3",
27
- "@grafana/faro-web-sdk": "2.6.3",
28
- "@grafana/faro-web-tracing": "2.6.3",
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.7.1",
31
- "@opentelemetry/instrumentation-document-load": "0.62.0",
32
- "@opentelemetry/instrumentation-fetch": "0.217.0",
33
- "@opentelemetry/instrumentation-user-interaction": "0.61.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.6.3",
37
- "@opentelemetry/sdk-trace-base": "2.7.1",
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": "25.7.0",
40
- "@types/react": "19.2.14",
41
- "@vitest/coverage-v8": "4.1.6",
42
- "happy-dom": "20.9.0",
43
- "react": "19.2.6",
44
- "react-dom": "19.2.6",
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.6"
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"