@ogcio/o11y-sdk-react 0.9.1 → 0.10.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/sdk-core/lib/redaction/basic-redactor.d.ts +0 -1
- package/dist/sdk-core/lib/redaction/basic-redactor.d.ts.map +1 -1
- package/dist/sdk-core/lib/redaction/basic-redactor.js +0 -1
- package/dist/sdk-core/lib/redaction/basic-redactor.js.map +1 -1
- package/dist/sdk-core/lib/redaction/email-redactor.d.ts +1 -0
- package/dist/sdk-core/lib/redaction/email-redactor.d.ts.map +1 -1
- package/dist/sdk-core/lib/redaction/email-redactor.js +16 -5
- package/dist/sdk-core/lib/redaction/email-redactor.js.map +1 -1
- package/dist/sdk-core/lib/redaction/ip-redactor.d.ts.map +1 -1
- package/dist/sdk-core/lib/redaction/ip-redactor.js +31 -8
- package/dist/sdk-core/lib/redaction/ip-redactor.js.map +1 -1
- package/dist/sdk-core/lib/redaction/ppsn-redactor.d.ts.map +1 -1
- package/dist/sdk-core/lib/redaction/ppsn-redactor.js +3 -3
- package/dist/sdk-core/lib/redaction/ppsn-redactor.js.map +1 -1
- package/dist/sdk-core/lib/utils/index.d.ts +1 -0
- package/dist/sdk-core/lib/utils/index.d.ts.map +1 -1
- package/dist/sdk-core/lib/utils/index.js +1 -0
- package/dist/sdk-core/lib/utils/index.js.map +1 -1
- package/dist/sdk-core/lib/utils/traces.d.ts +12 -0
- package/dist/sdk-core/lib/utils/traces.d.ts.map +1 -0
- package/dist/sdk-core/lib/utils/traces.js +36 -0
- package/dist/sdk-core/lib/utils/traces.js.map +1 -0
- package/dist/sdk-react/index.d.ts +4 -3
- package/dist/sdk-react/index.d.ts.map +1 -1
- package/dist/sdk-react/index.js +3 -2
- package/dist/sdk-react/index.js.map +1 -1
- package/dist/sdk-react/lib/instrumentation.faro.js +4 -4
- package/dist/sdk-react/lib/instrumentation.faro.js.map +1 -1
- package/dist/sdk-react/lib/traces.d.ts +23 -0
- package/dist/sdk-react/lib/traces.d.ts.map +1 -0
- package/dist/sdk-react/lib/traces.js +24 -0
- package/dist/sdk-react/lib/traces.js.map +1 -0
- package/package.json +20 -19
- package/dist/sdk-react/vitest.config.d.ts +0 -3
- package/dist/sdk-react/vitest.config.d.ts.map +0 -1
- package/dist/sdk-react/vitest.config.js +0 -23
- package/dist/sdk-react/vitest.config.js.map +0 -1
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import type { StringKind, RedactionResult } from "./index.js";
|
|
2
2
|
export declare abstract class BasicRedactor {
|
|
3
|
-
constructor();
|
|
4
3
|
process(value: string, source: string, kind: StringKind): string;
|
|
5
4
|
protected redact(_value: string, _source: string, _kind: StringKind): RedactionResult<Record<string, unknown>>;
|
|
6
5
|
protected exportMetrics(_context: RedactionResult<Record<string, unknown>>["context"], _source: string, _kind: StringKind): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"basic-redactor.d.ts","sourceRoot":"","sources":["../../../../../sdk-core/lib/redaction/basic-redactor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE9D,8BAAsB,aAAa
|
|
1
|
+
{"version":3,"file":"basic-redactor.d.ts","sourceRoot":"","sources":["../../../../../sdk-core/lib/redaction/basic-redactor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE9D,8BAAsB,aAAa;IAC1B,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,MAAM;IAMvE,SAAS,CAAC,MAAM,CACd,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,UAAU,GAChB,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAQ3C,SAAS,CAAC,aAAa,CACrB,QAAQ,EAAE,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,EAC7D,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,UAAU,GAChB,IAAI;CAGR"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"basic-redactor.js","sourceRoot":"","sources":["../../../../../sdk-core/lib/redaction/basic-redactor.ts"],"names":[],"mappings":"AAEA,MAAM,OAAgB,aAAa;
|
|
1
|
+
{"version":3,"file":"basic-redactor.js","sourceRoot":"","sources":["../../../../../sdk-core/lib/redaction/basic-redactor.ts"],"names":[],"mappings":"AAEA,MAAM,OAAgB,aAAa;IAC1B,OAAO,CAAC,KAAa,EAAE,MAAc,EAAE,IAAgB;QAC5D,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QACpE,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QAC1C,OAAO,aAAa,CAAC;IACvB,CAAC;IAES,MAAM,CACd,MAAc,EACd,OAAe,EACf,KAAiB;QAEjB,mBAAmB;QACnB,OAAO;YACL,aAAa,EAAE,MAAM;YACrB,OAAO,EAAE,EAAE;SACZ,CAAC;IACJ,CAAC;IAES,aAAa,CACrB,QAA6D,EAC7D,OAAe,EACf,KAAiB;QAEjB,mBAAmB;IACrB,CAAC;CACF"}
|
|
@@ -2,6 +2,7 @@ import { BasicRedactor } from "./basic-redactor.js";
|
|
|
2
2
|
import type { RedactionResult } from "./index.js";
|
|
3
3
|
export declare class EmailRedactor extends BasicRedactor {
|
|
4
4
|
private static readonly EMAIL_REGEX;
|
|
5
|
+
private static readonly CHUNK_SPLIT;
|
|
5
6
|
protected redact(value: string): RedactionResult<{
|
|
6
7
|
domains: Record<string, number>;
|
|
7
8
|
}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"email-redactor.d.ts","sourceRoot":"","sources":["../../../../../sdk-core/lib/redaction/email-redactor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,qBAAa,aAAc,SAAQ,aAAa;
|
|
1
|
+
{"version":3,"file":"email-redactor.d.ts","sourceRoot":"","sources":["../../../../../sdk-core/lib/redaction/email-redactor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,qBAAa,aAAc,SAAQ,aAAa;IAG9C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CACwC;IAE3E,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAW;IAE9C,SAAS,CAAC,MAAM,CACd,KAAK,EAAE,MAAM,GACZ,eAAe,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAC;CAsBxD"}
|
|
@@ -1,14 +1,25 @@
|
|
|
1
1
|
import { BasicRedactor } from "./basic-redactor.js";
|
|
2
2
|
export class EmailRedactor extends BasicRedactor {
|
|
3
|
-
|
|
3
|
+
// Security Hotspot accepted: regex is carefully designed and tested to avoid ReDoS
|
|
4
|
+
// vulnerabilities while effectively matching email addresses, including internationalized ones.
|
|
5
|
+
static EMAIL_REGEX = /[\p{L}\p{N}._%+-]+@([\p{L}\p{N}-]+(?:\.[\p{L}\p{N}-]+)*\.\p{L}{2,})/giu; // NOSONAR
|
|
6
|
+
static CHUNK_SPLIT = /(\s+)/;
|
|
4
7
|
redact(value) {
|
|
5
8
|
const domains = {};
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
+
// Split on whitespace to process each token independently,
|
|
10
|
+
// bounding regex execution per chunk to prevent ReDoS.
|
|
11
|
+
const parts = value.split(EmailRedactor.CHUNK_SPLIT);
|
|
12
|
+
const redacted = parts.map((part) => {
|
|
13
|
+
// Whitespace separators are returned by the split — pass them through
|
|
14
|
+
if (EmailRedactor.CHUNK_SPLIT.test(part))
|
|
15
|
+
return part;
|
|
16
|
+
return part.replace(EmailRedactor.EMAIL_REGEX, (_, domain) => {
|
|
17
|
+
domains[domain] = (domains[domain] || 0) + 1;
|
|
18
|
+
return "[REDACTED EMAIL]";
|
|
19
|
+
});
|
|
9
20
|
});
|
|
10
21
|
return {
|
|
11
|
-
redactedValue:
|
|
22
|
+
redactedValue: redacted.join(""),
|
|
12
23
|
context: {
|
|
13
24
|
domains,
|
|
14
25
|
},
|
|
@@ -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;
|
|
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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ip-redactor.d.ts","sourceRoot":"","sources":["../../../../../sdk-core/lib/redaction/ip-redactor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"ip-redactor.d.ts","sourceRoot":"","sources":["../../../../../sdk-core/lib/redaction/ip-redactor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AA+BlD,qBAAa,UAAW,SAAQ,aAAa;IAC3C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAkC;IACpE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAkC;IAEpE,SAAS,CAAC,MAAM,CACd,KAAK,EAAE,MAAM,GACZ,eAAe,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAC;CAuDzD"}
|
|
@@ -1,14 +1,37 @@
|
|
|
1
1
|
import { BasicRedactor } from "./basic-redactor.js";
|
|
2
|
+
// iOS < 16.6 compatible: no lookbehind/lookahead
|
|
3
|
+
// Building blocks — composed programmatically to avoid regex complexity & duplication
|
|
4
|
+
const H = String.raw `[\da-f]{1,4}`; // single hex group
|
|
5
|
+
const PCT = String.raw `(?:%[\da-f]{2})`; // percent-encoded byte
|
|
6
|
+
const OCTET = String.raw `(?:25[0-5]|2[0-4]\d|[01]?\d\d?)`; // IPv4 octet 0-255
|
|
7
|
+
const IPV4_PATTERN = String.raw `${PCT}?${OCTET}(?:\.${OCTET}){3}${PCT}?`;
|
|
8
|
+
const IPV6_ALTERNATIVES = [
|
|
9
|
+
`(?:${H}:){7}${H}`, // full 8-group
|
|
10
|
+
`(?:${H}:){1,6}:${H}`, // :: after 1-6 groups + 1 trailing
|
|
11
|
+
`(?:${H}:){1,5}(?::${H}){1,2}`, // :: after 1-5 + 1-2 trailing
|
|
12
|
+
`(?:${H}:){1,4}(?::${H}){1,3}`, // :: after 1-4 + 1-3 trailing
|
|
13
|
+
`(?:${H}:){1,3}(?::${H}){1,4}`, // :: after 1-3 + 1-4 trailing
|
|
14
|
+
`(?:${H}:){1,2}(?::${H}){1,5}`, // :: after 1-2 + 1-5 trailing
|
|
15
|
+
`${H}:(?::${H}){1,6}`, // :: after 1 + 1-6 trailing
|
|
16
|
+
`::(?:${H}:){0,5}${H}`, // leading ::
|
|
17
|
+
`${H}::(?:${H}:){0,5}${H}`, // 1 group + ::
|
|
18
|
+
`(?:${H}:){2}::(?:${H}:){0,4}${H}`, // 2 groups + ::
|
|
19
|
+
`(?:${H}:){3}::(?:${H}:){0,3}${H}`, // 3 groups + ::
|
|
20
|
+
`(?:${H}:){4}::(?:${H}:){0,2}${H}`, // 4 groups + ::
|
|
21
|
+
`(?:${H}:){5}::(?:${H}:)?${H}`, // 5 groups + ::
|
|
22
|
+
`(?:${H}:){6}::${H}`, // 6 groups + ::
|
|
23
|
+
`(?:${H}:){1,7}:`, // trailing ::
|
|
24
|
+
String.raw `(?:${H}:){1,4}:${OCTET}(?:\.${OCTET}){3}`, // mixed IPv4 form
|
|
25
|
+
];
|
|
26
|
+
const IPV6_PATTERN = `${PCT}?(${IPV6_ALTERNATIVES.join("|")})${PCT}?`;
|
|
2
27
|
export class IpRedactor extends BasicRedactor {
|
|
3
|
-
|
|
4
|
-
static
|
|
5
|
-
// Comprehensive IPv6 regex without lookbehind - matches all standard formats including :: compression
|
|
6
|
-
static IPV6_REGEX = /(?:%[0-9A-Fa-f]{2})?((?:[0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4}|(?:[0-9A-Fa-f]{1,4}:){1,6}:[0-9A-Fa-f]{1,4}|(?:[0-9A-Fa-f]{1,4}:){1,5}(?::[0-9A-Fa-f]{1,4}){1,2}|(?:[0-9A-Fa-f]{1,4}:){1,4}(?::[0-9A-Fa-f]{1,4}){1,3}|(?:[0-9A-Fa-f]{1,4}:){1,3}(?::[0-9A-Fa-f]{1,4}){1,4}|(?:[0-9A-Fa-f]{1,4}:){1,2}(?::[0-9A-Fa-f]{1,4}){1,5}|[0-9A-Fa-f]{1,4}:(?:(?::[0-9A-Fa-f]{1,4}){1,6})|::(?:[0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4}|[0-9A-Fa-f]{1,4}::(?:[0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4}|(?:[0-9A-Fa-f]{1,4}:){2}::(?:[0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4}|(?:[0-9A-Fa-f]{1,4}:){3}::(?:[0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4}|(?:[0-9A-Fa-f]{1,4}:){4}::(?:[0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4}|(?:[0-9A-Fa-f]{1,4}:){5}::(?:[0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4}|(?:[0-9A-Fa-f]{1,4}:){6}::[0-9A-Fa-f]{1,4}|(?:[0-9A-Fa-f]{1,4}:){1,7}:|(?:[0-9A-Fa-f]{1,4}:){1,4}:(?:25[0-5]|2[0-4]\d|1\d\d|\d{1,2})(?:\\.(?:25[0-5]|2[0-4]\d|1\d\d|\d{1,2})){3})(?:%[0-9A-Fa-f]{2})?/gi;
|
|
28
|
+
static IPV4_REGEX = new RegExp(IPV4_PATTERN, "gi");
|
|
29
|
+
static IPV6_REGEX = new RegExp(IPV6_PATTERN, "gi");
|
|
7
30
|
redact(value) {
|
|
8
31
|
const counters = {};
|
|
9
32
|
// First pass: redact IPv4 with boundary checking
|
|
10
33
|
const tempValue = value.replace(IpRedactor.IPV4_REGEX, (match, ...args) => {
|
|
11
|
-
const offset = args
|
|
34
|
+
const offset = args.at(-2);
|
|
12
35
|
const before = offset > 0 ? value[offset - 1] : "";
|
|
13
36
|
const after = offset + match.length < value.length
|
|
14
37
|
? value[offset + match.length]
|
|
@@ -24,7 +47,7 @@ export class IpRedactor extends BasicRedactor {
|
|
|
24
47
|
});
|
|
25
48
|
// Second pass: redact IPv6 with boundary checking
|
|
26
49
|
const redactedValue = tempValue.replace(IpRedactor.IPV6_REGEX, (match, ...args) => {
|
|
27
|
-
const offset = args
|
|
50
|
+
const offset = args.at(-2);
|
|
28
51
|
const before = offset > 0 ? tempValue[offset - 1] : "";
|
|
29
52
|
const after = offset + match.length < tempValue.length
|
|
30
53
|
? tempValue[offset + match.length]
|
|
@@ -32,8 +55,8 @@ export class IpRedactor extends BasicRedactor {
|
|
|
32
55
|
// For IPv6:
|
|
33
56
|
// Reject if there's a colon before (indicating :::)
|
|
34
57
|
// Reject if there's a hex digit or colon after
|
|
35
|
-
const isValidBefore = !before || !/[
|
|
36
|
-
const isValidAfter = !after || !/[
|
|
58
|
+
const isValidBefore = !before || !/[\da-f:]/i.test(before);
|
|
59
|
+
const isValidAfter = !after || !/[\da-f:]/i.test(after);
|
|
37
60
|
if (isValidBefore && isValidAfter) {
|
|
38
61
|
counters["IPv6"] = (counters["IPv6"] || 0) + 1;
|
|
39
62
|
return "[REDACTED IPV6]";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ip-redactor.js","sourceRoot":"","sources":["../../../../../sdk-core/lib/redaction/ip-redactor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGpD,MAAM,OAAO,
|
|
1
|
+
{"version":3,"file":"ip-redactor.js","sourceRoot":"","sources":["../../../../../sdk-core/lib/redaction/ip-redactor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGpD,iDAAiD;AACjD,sFAAsF;AACtF,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAA,cAAc,CAAC,CAAC,mBAAmB;AACvD,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAA,iBAAiB,CAAC,CAAC,uBAAuB;AAChE,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAA,iCAAiC,CAAC,CAAC,mBAAmB;AAE9E,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAA,GAAG,GAAG,IAAI,KAAK,QAAQ,KAAK,OAAO,GAAG,GAAG,CAAC;AAEzE,MAAM,iBAAiB,GAAG;IACxB,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,eAAe;IACnC,MAAM,CAAC,WAAW,CAAC,EAAE,EAAE,mCAAmC;IAC1D,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,8BAA8B;IAC9D,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,8BAA8B;IAC9D,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,8BAA8B;IAC9D,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,8BAA8B;IAC9D,GAAG,CAAC,QAAQ,CAAC,QAAQ,EAAE,4BAA4B;IACnD,QAAQ,CAAC,UAAU,CAAC,EAAE,EAAE,aAAa;IACrC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,EAAE,eAAe;IAC3C,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,EAAE,gBAAgB;IACpD,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,EAAE,gBAAgB;IACpD,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,EAAE,gBAAgB;IACpD,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,EAAE,gBAAgB;IAChD,MAAM,CAAC,UAAU,CAAC,EAAE,EAAE,gBAAgB;IACtC,MAAM,CAAC,UAAU,EAAE,cAAc;IACjC,MAAM,CAAC,GAAG,CAAA,MAAM,CAAC,WAAW,KAAK,QAAQ,KAAK,MAAM,EAAE,kBAAkB;CACzE,CAAC;AAEF,MAAM,YAAY,GAAG,GAAG,GAAG,KAAK,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC;AAEtE,MAAM,OAAO,UAAW,SAAQ,aAAa;IACnC,MAAM,CAAU,UAAU,GAAG,IAAI,MAAM,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;IAC5D,MAAM,CAAU,UAAU,GAAG,IAAI,MAAM,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;IAE1D,MAAM,CACd,KAAa;QAEb,MAAM,QAAQ,GAA2B,EAAE,CAAC;QAE5C,iDAAiD;QACjD,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,GAAG,IAAI,EAAE,EAAE;YACxE,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAW,CAAC;YACrC,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,8CAA8C;YAC9C,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,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC/C,OAAO,iBAAiB,CAAC;YAC3B,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC,CAAC,CAAC;QAEH,kDAAkD;QAClD,MAAM,aAAa,GAAG,SAAS,CAAC,OAAO,CACrC,UAAU,CAAC,UAAU,EACrB,CAAC,KAAK,EAAE,GAAG,IAAI,EAAE,EAAE;YACjB,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAW,CAAC;YACrC,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACvD,MAAM,KAAK,GACT,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM;gBACtC,CAAC,CAAC,SAAS,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;gBAClC,CAAC,CAAC,EAAE,CAAC;YAET,YAAY;YACZ,oDAAoD;YACpD,+CAA+C;YAC/C,MAAM,aAAa,GAAG,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC3D,MAAM,YAAY,GAAG,CAAC,KAAK,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAExD,IAAI,aAAa,IAAI,YAAY,EAAE,CAAC;gBAClC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC/C,OAAO,iBAAiB,CAAC;YAC3B,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC,CACF,CAAC;QAEF,OAAO;YACL,aAAa,EAAE,aAAa;YAC5B,OAAO,EAAE;gBACP,QAAQ;aACT;SACF,CAAC;IACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ppsn-redactor.d.ts","sourceRoot":"","sources":["../../../../../sdk-core/lib/redaction/ppsn-redactor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,qBAAa,YAAa,SAAQ,aAAa;IAE7C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,
|
|
1
|
+
{"version":3,"file":"ppsn-redactor.d.ts","sourceRoot":"","sources":["../../../../../sdk-core/lib/redaction/ppsn-redactor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,qBAAa,YAAa,SAAQ,aAAa;IAE7C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAuB;IAEzD,SAAS,CAAC,MAAM,CACd,KAAK,EAAE,MAAM,GACZ,eAAe,CAAC;QAAE,eAAe,EAAE,MAAM,CAAA;KAAE,CAAC;CAgChD"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { BasicRedactor } from "./basic-redactor.js";
|
|
2
2
|
export class PpsnRedactor extends BasicRedactor {
|
|
3
3
|
// iOS < 16.6 compatible: no lookbehind/lookahead
|
|
4
|
-
static PPSN_REGEX =
|
|
4
|
+
static PPSN_REGEX = /\d{7}[a-z]{1,2}/gi;
|
|
5
5
|
redact(value) {
|
|
6
6
|
let redactedCounter = 0;
|
|
7
7
|
// Boundary checking to replace lookbehind/lookahead
|
|
@@ -11,8 +11,8 @@ export class PpsnRedactor extends BasicRedactor {
|
|
|
11
11
|
? value[offset + match.length]
|
|
12
12
|
: "";
|
|
13
13
|
// Check if surrounded by non-alphanumeric characters
|
|
14
|
-
const isValidBefore = !before ||
|
|
15
|
-
const isValidAfter = !after ||
|
|
14
|
+
const isValidBefore = !before || !/\w/.test(before);
|
|
15
|
+
const isValidAfter = !after || !/\w/.test(after);
|
|
16
16
|
if (isValidBefore && isValidAfter) {
|
|
17
17
|
redactedCounter++;
|
|
18
18
|
return "[REDACTED PPSN]";
|
|
@@ -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,
|
|
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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../sdk-core/lib/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC9E,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../sdk-core/lib/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC9E,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,iCAAiC,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../sdk-core/lib/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC9E,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../sdk-core/lib/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC9E,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,iCAAiC,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type Span } from "@opentelemetry/api";
|
|
2
|
+
/**
|
|
3
|
+
* Generates a function wrapping a given Callable `fn` into an error handling block.
|
|
4
|
+
* Setting Span status and recording any caught exception before bubbling it up.
|
|
5
|
+
*
|
|
6
|
+
* Marks the span as ended once the provided callable has ended or an error has been caught.
|
|
7
|
+
*
|
|
8
|
+
* @returns {Promise<T>} where T is the type returned by the Callable.
|
|
9
|
+
* @throws any error thrown by the original Callable `fn` provided.
|
|
10
|
+
*/
|
|
11
|
+
export declare function selfContainedSpanHandlerGenerator<T>(fn: (span: Span) => T | Promise<T>): (span: Span) => Promise<T>;
|
|
12
|
+
//# sourceMappingURL=traces.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"traces.d.ts","sourceRoot":"","sources":["../../../../../sdk-core/lib/utils/traces.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,EAAkB,MAAM,oBAAoB,CAAC;AAE/D;;;;;;;;GAQG;AACH,wBAAgB,iCAAiC,CAAC,CAAC,EACjD,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GACjC,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,CAuB5B"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { SpanStatusCode } from "@opentelemetry/api";
|
|
2
|
+
/**
|
|
3
|
+
* Generates a function wrapping a given Callable `fn` into an error handling block.
|
|
4
|
+
* Setting Span status and recording any caught exception before bubbling it up.
|
|
5
|
+
*
|
|
6
|
+
* Marks the span as ended once the provided callable has ended or an error has been caught.
|
|
7
|
+
*
|
|
8
|
+
* @returns {Promise<T>} where T is the type returned by the Callable.
|
|
9
|
+
* @throws any error thrown by the original Callable `fn` provided.
|
|
10
|
+
*/
|
|
11
|
+
export function selfContainedSpanHandlerGenerator(fn) {
|
|
12
|
+
return async (span) => {
|
|
13
|
+
try {
|
|
14
|
+
const fnResult = await fn(span);
|
|
15
|
+
span.setStatus({ code: SpanStatusCode.OK });
|
|
16
|
+
return fnResult;
|
|
17
|
+
}
|
|
18
|
+
catch (err) {
|
|
19
|
+
if (err instanceof Error) {
|
|
20
|
+
span.recordException(err);
|
|
21
|
+
span.setStatus({ code: SpanStatusCode.ERROR, message: err.message });
|
|
22
|
+
throw err;
|
|
23
|
+
}
|
|
24
|
+
span.recordException({ message: JSON.stringify(err) });
|
|
25
|
+
span.setStatus({
|
|
26
|
+
code: SpanStatusCode.ERROR,
|
|
27
|
+
message: JSON.stringify(err),
|
|
28
|
+
});
|
|
29
|
+
throw err;
|
|
30
|
+
}
|
|
31
|
+
finally {
|
|
32
|
+
span.end();
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=traces.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"traces.js","sourceRoot":"","sources":["../../../../../sdk-core/lib/utils/traces.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAE/D;;;;;;;;GAQG;AACH,MAAM,UAAU,iCAAiC,CAC/C,EAAkC;IAElC,OAAO,KAAK,EAAE,IAAU,EAAE,EAAE;QAC1B,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC;YAChC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,EAAE,CAAC,CAAC;YAC5C,OAAO,QAAQ,CAAC;QAClB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;gBACzB,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;gBAC1B,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;gBACrE,MAAM,GAAG,CAAC;YACZ,CAAC;YAED,IAAI,CAAC,eAAe,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACvD,IAAI,CAAC,SAAS,CAAC;gBACb,IAAI,EAAE,cAAc,CAAC,KAAK;gBAC1B,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;aAC7B,CAAC,CAAC;YACH,MAAM,GAAG,CAAC;QACZ,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,GAAG,EAAE,CAAC;QACb,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { type Faro, withFaroErrorBoundary, withFaroProfiler } from "@grafana/faro-react";
|
|
2
1
|
import buildFaroInstrumentation from "./lib/instrumentation.faro.js";
|
|
3
2
|
export * from "./lib/index.js";
|
|
4
3
|
export * from "./lib/utils.js";
|
|
5
|
-
export
|
|
6
|
-
export type { Faro };
|
|
4
|
+
export * from "./lib/traces.js";
|
|
7
5
|
export { buildFaroInstrumentation as instrumentFaro };
|
|
6
|
+
export type { Span, SpanStatus } from "@opentelemetry/api";
|
|
7
|
+
export { SpanKind, SpanStatusCode, TraceFlags } from "@opentelemetry/api";
|
|
8
|
+
export { withFaroErrorBoundary, withFaroProfiler, type Faro, } from "@grafana/faro-react";
|
|
8
9
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
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;AAEhC,OAAO,EAAE,wBAAwB,IAAI,cAAc,EAAE,CAAC;AAEtD,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAE3D,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAE1E,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAChB,KAAK,IAAI,GACV,MAAM,qBAAqB,CAAC"}
|
package/dist/sdk-react/index.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { withFaroErrorBoundary, withFaroProfiler, } from "@grafana/faro-react";
|
|
2
1
|
import buildFaroInstrumentation from "./lib/instrumentation.faro.js";
|
|
3
2
|
export * from "./lib/index.js";
|
|
4
3
|
export * from "./lib/utils.js";
|
|
5
|
-
export
|
|
4
|
+
export * from "./lib/traces.js";
|
|
6
5
|
export { buildFaroInstrumentation as instrumentFaro };
|
|
6
|
+
export { SpanKind, SpanStatusCode, TraceFlags } from "@opentelemetry/api";
|
|
7
|
+
export { withFaroErrorBoundary, withFaroProfiler, } from "@grafana/faro-react";
|
|
7
8
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
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;AAEhC,OAAO,EAAE,wBAAwB,IAAI,cAAc,EAAE,CAAC;AAItD,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAE1E,OAAO,EACL,qBAAqB,EACrB,gBAAgB,GAEjB,MAAM,qBAAqB,CAAC"}
|
|
@@ -27,7 +27,7 @@ export default function buildFaroInstrumentation(config) {
|
|
|
27
27
|
})
|
|
28
28
|
.map(([_, value]) => value);
|
|
29
29
|
const customRedactors = config.detection?.custom?.length
|
|
30
|
-
?
|
|
30
|
+
? config.detection?.custom.filter((redactor) => redactor instanceof BasicRedactor)
|
|
31
31
|
: [];
|
|
32
32
|
const redactorsChain = [...defaultRedactors, ...customRedactors];
|
|
33
33
|
try {
|
|
@@ -38,10 +38,10 @@ export default function buildFaroInstrumentation(config) {
|
|
|
38
38
|
url: config.collectorUrl,
|
|
39
39
|
app: {
|
|
40
40
|
name: config.serviceName,
|
|
41
|
-
...
|
|
41
|
+
...config.appMeta,
|
|
42
42
|
},
|
|
43
43
|
batching: {
|
|
44
|
-
enabled:
|
|
44
|
+
enabled: config.collectorMode !== "single",
|
|
45
45
|
},
|
|
46
46
|
beforeSend: _beforeSend(redactorsChain),
|
|
47
47
|
instrumentations: [
|
|
@@ -77,7 +77,7 @@ function isUrl(url) {
|
|
|
77
77
|
new URL(url);
|
|
78
78
|
return true;
|
|
79
79
|
}
|
|
80
|
-
catch (_) {
|
|
80
|
+
catch (_) /* NOSONAR */ {
|
|
81
81
|
return false;
|
|
82
82
|
}
|
|
83
83
|
}
|
|
@@ -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,EAEL,SAAS,GACV,MAAM,0CAA0C,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAE5D,MAAM,CAAC,OAAO,UAAU,wBAAwB,CAC9C,MAAsB;IAEtB,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,IAAI,CACV,4EAA4E,CAC7E,CAAC;QACF,OAAO;IACT,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;QACzB,OAAO,CAAC,IAAI,CACV,oEAAoE,CACrE,CAAC;QACF,OAAO;IACT,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;QAChC,OAAO,CAAC,KAAK,CACX,wFAAwF,CACzF,CAAC;QACF,OAAO;IACT,CAAC;IAED,MAAM,gBAAgB,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC;SAC/C,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE;QAChB,OAAO,MAAM,CAAC,SAAS,EAAE,CAAC,GAAmB,CAAC,KAAK,KAAK,CAAC;IAC3D,CAAC,CAAC;SACD,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;IAE9B,MAAM,eAAe,GAAG,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM;QACtD,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"instrumentation.faro.js","sourceRoot":"","sources":["../../../lib/instrumentation.faro.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { type Span, type SpanOptions } from "@opentelemetry/api";
|
|
2
|
+
export type WithSpanParams<T> = {
|
|
3
|
+
/**
|
|
4
|
+
* The name of the tracer the span should belong to.
|
|
5
|
+
* If not provided the span will default to the "o11y-sdk-react" tracer or the serviceName provided in the SDK config if available.
|
|
6
|
+
* NOTE: If you want the new span to belong to an already existing trace, you should provide the same tracer name
|
|
7
|
+
*/
|
|
8
|
+
traceName?: string;
|
|
9
|
+
spanName: string;
|
|
10
|
+
spanOptions?: SpanOptions;
|
|
11
|
+
/** A function defining the task you want to be wrapped by this span */
|
|
12
|
+
fn: (span: Span) => T | Promise<T>;
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Wraps a callable `fn` in an OpenTelemetry span with the given name and options.
|
|
16
|
+
* Automatically handles setting the span status and recording exceptions.
|
|
17
|
+
* The span is ended once the callable completes or throws.
|
|
18
|
+
* *
|
|
19
|
+
* @returns {Promise<T>} where T is the type returned by the callable.
|
|
20
|
+
* @throws any error thrown by the original callable `fn`.
|
|
21
|
+
*/
|
|
22
|
+
export declare function withSpan<T>({ traceName, spanName, spanOptions, fn, }: WithSpanParams<T>): T | Promise<T>;
|
|
23
|
+
//# sourceMappingURL=traces.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"traces.d.ts","sourceRoot":"","sources":["../../../lib/traces.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,IAAI,EAAE,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGjE,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI;IAC9B;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,uEAAuE;IACvE,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CACpC,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,EAC1B,SAAS,EACT,QAAQ,EACR,WAAgB,EAChB,EAAE,GACH,EAAE,cAAc,CAAC,CAAC,CAAC,kBAuBnB"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { faro } from "@grafana/faro-react";
|
|
2
|
+
import { selfContainedSpanHandlerGenerator } from "../../sdk-core/lib/utils/traces.js";
|
|
3
|
+
/**
|
|
4
|
+
* Wraps a callable `fn` in an OpenTelemetry span with the given name and options.
|
|
5
|
+
* Automatically handles setting the span status and recording exceptions.
|
|
6
|
+
* The span is ended once the callable completes or throws.
|
|
7
|
+
* *
|
|
8
|
+
* @returns {Promise<T>} where T is the type returned by the callable.
|
|
9
|
+
* @throws any error thrown by the original callable `fn`.
|
|
10
|
+
*/
|
|
11
|
+
export function withSpan({ traceName, spanName, spanOptions = {}, fn, }) {
|
|
12
|
+
if (!faro?.api) {
|
|
13
|
+
console.warn("Faro instance not available. Ensure that your component is wrapped in a FaroProvider. Skipping span creation.");
|
|
14
|
+
return fn({});
|
|
15
|
+
}
|
|
16
|
+
const otel = faro.api.getOTEL();
|
|
17
|
+
if (!otel) {
|
|
18
|
+
console.warn("OpenTelemetry API not available in Faro instance. Skipping span creation.");
|
|
19
|
+
return fn({});
|
|
20
|
+
}
|
|
21
|
+
const tracer = otel.trace.getTracer(traceName ?? faro.metas.value.app?.name ?? "o11y-sdk-react");
|
|
22
|
+
return tracer.startActiveSpan(spanName, spanOptions, selfContainedSpanHandlerGenerator(fn));
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=traces.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"traces.js","sourceRoot":"","sources":["../../../lib/traces.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAE3C,OAAO,EAAE,iCAAiC,EAAE,MAAM,oCAAoC,CAAC;AAevF;;;;;;;GAOG;AACH,MAAM,UAAU,QAAQ,CAAI,EAC1B,SAAS,EACT,QAAQ,EACR,WAAW,GAAG,EAAE,EAChB,EAAE,GACgB;IAClB,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CACV,+GAA+G,CAChH,CAAC;QACF,OAAO,EAAE,CAAC,EAAU,CAAC,CAAC;IACxB,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;IAChC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,CAAC,IAAI,CACV,2EAA2E,CAC5E,CAAC;QACF,OAAO,EAAE,CAAC,EAAU,CAAC,CAAC;IACxB,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CACjC,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,IAAI,gBAAgB,CAC5D,CAAC;IACF,OAAO,MAAM,CAAC,eAAe,CAC3B,QAAQ,EACR,WAAW,EACX,iCAAiC,CAAI,EAAE,CAAC,CACzC,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ogcio/o11y-sdk-react",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.10.2",
|
|
4
4
|
"description": "Opentelemetry standard instrumentation SDK for React based project",
|
|
5
|
-
"main": "dist/index.js",
|
|
5
|
+
"main": "dist/sdk-react/index.js",
|
|
6
|
+
"types": "dist/sdk-react/index.d.ts",
|
|
6
7
|
"type": "module",
|
|
7
8
|
"exports": {
|
|
8
9
|
".": "./dist/sdk-react/index.js",
|
|
@@ -22,27 +23,27 @@
|
|
|
22
23
|
"author": "team:ogcio/observability",
|
|
23
24
|
"license": "ISC",
|
|
24
25
|
"dependencies": {
|
|
25
|
-
"@grafana/faro-react": "2.
|
|
26
|
-
"@grafana/faro-web-sdk": "2.
|
|
27
|
-
"@grafana/faro-web-tracing": "2.
|
|
28
|
-
"@opentelemetry/api": "1.9.
|
|
29
|
-
"@opentelemetry/core": "2.6.
|
|
30
|
-
"@opentelemetry/instrumentation-document-load": "0.
|
|
31
|
-
"@opentelemetry/instrumentation-fetch": "0.
|
|
32
|
-
"@opentelemetry/instrumentation-user-interaction": "0.
|
|
26
|
+
"@grafana/faro-react": "2.3.1",
|
|
27
|
+
"@grafana/faro-web-sdk": "2.3.1",
|
|
28
|
+
"@grafana/faro-web-tracing": "2.3.1",
|
|
29
|
+
"@opentelemetry/api": "1.9.1",
|
|
30
|
+
"@opentelemetry/core": "2.6.1",
|
|
31
|
+
"@opentelemetry/instrumentation-document-load": "0.59.0",
|
|
32
|
+
"@opentelemetry/instrumentation-fetch": "0.214.0",
|
|
33
|
+
"@opentelemetry/instrumentation-user-interaction": "0.58.0"
|
|
33
34
|
},
|
|
34
35
|
"devDependencies": {
|
|
35
|
-
"@grafana/faro-core": "2.
|
|
36
|
+
"@grafana/faro-core": "2.3.1",
|
|
37
|
+
"@opentelemetry/sdk-trace-base": "2.6.1",
|
|
36
38
|
"@testing-library/react": "16.3.2",
|
|
37
|
-
"@types/node": "25.
|
|
39
|
+
"@types/node": "25.6.0",
|
|
38
40
|
"@types/react": "19.2.14",
|
|
39
|
-
"@vitest/coverage-v8": "4.
|
|
40
|
-
"
|
|
41
|
-
"react": "19.2.
|
|
42
|
-
"react-dom": "19.2.
|
|
43
|
-
"
|
|
44
|
-
"
|
|
45
|
-
"vitest": "4.0.18"
|
|
41
|
+
"@vitest/coverage-v8": "4.1.4",
|
|
42
|
+
"happy-dom": "20.9.0",
|
|
43
|
+
"react": "19.2.5",
|
|
44
|
+
"react-dom": "19.2.5",
|
|
45
|
+
"typescript": "6.0.2",
|
|
46
|
+
"vitest": "4.1.4"
|
|
46
47
|
},
|
|
47
48
|
"peerDependencies": {
|
|
48
49
|
"react": "^18.0.0 || ^19.0.0",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"vitest.config.d.ts","sourceRoot":"","sources":["../../vitest.config.ts"],"names":[],"mappings":";AAEA,wBAoBG"}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { defineConfig } from "vitest/config";
|
|
2
|
-
export default defineConfig({
|
|
3
|
-
test: {
|
|
4
|
-
globals: true,
|
|
5
|
-
watch: false,
|
|
6
|
-
include: ["../sdk-core/test/**/*.test.ts", "**/*.test.ts"],
|
|
7
|
-
exclude: ["**/fixtures/**", "**/dist/**", "**/node_modules/**"],
|
|
8
|
-
pool: "threads",
|
|
9
|
-
maxWorkers: 8,
|
|
10
|
-
clearMocks: true,
|
|
11
|
-
testTimeout: 30_000,
|
|
12
|
-
coverage: {
|
|
13
|
-
enabled: true,
|
|
14
|
-
provider: "v8",
|
|
15
|
-
reportsDirectory: "coverage",
|
|
16
|
-
reporter: ["lcov", "cobertura"],
|
|
17
|
-
clean: true,
|
|
18
|
-
},
|
|
19
|
-
reporters: ["default", ["junit", { outputFile: "test-report.xml" }]],
|
|
20
|
-
environment: "jsdom",
|
|
21
|
-
},
|
|
22
|
-
});
|
|
23
|
-
//# sourceMappingURL=vitest.config.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"vitest.config.js","sourceRoot":"","sources":["../../vitest.config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,eAAe,YAAY,CAAC;IAC1B,IAAI,EAAE;QACJ,OAAO,EAAE,IAAI;QACb,KAAK,EAAE,KAAK;QACZ,OAAO,EAAE,CAAC,+BAA+B,EAAE,cAAc,CAAC;QAC1D,OAAO,EAAE,CAAC,gBAAgB,EAAE,YAAY,EAAE,oBAAoB,CAAC;QAC/D,IAAI,EAAE,SAAS;QACf,UAAU,EAAE,CAAC;QACb,UAAU,EAAE,IAAI;QAChB,WAAW,EAAE,MAAM;QACnB,QAAQ,EAAE;YACR,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,IAAI;YACd,gBAAgB,EAAE,UAAU;YAC5B,QAAQ,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC;YAC/B,KAAK,EAAE,IAAI;SACZ;QACD,SAAS,EAAE,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,iBAAiB,EAAE,CAAC,CAAC;QACpE,WAAW,EAAE,OAAO;KACrB;CACF,CAAC,CAAC"}
|