@interfere/react 12.0.4 → 12.1.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/README.md +103 -0
- package/dist/actionable-DOmVf_ib.mjs +1 -0
- package/dist/activity-D18VXGTn.mjs +1 -0
- package/dist/{activity-BfYxFVcK.d.mts → activity-Duhfgvxt.d.mts} +1 -1
- package/dist/{api-DEVCOKkJ.d.mts → api-CMPV9rgU.d.mts} +1 -1
- package/dist/api-DXmjUMZE.mjs +1 -0
- package/dist/api.mjs +1 -1
- package/dist/bot-YLSbnCeg.mjs +1 -0
- package/dist/buffer-BRn_kSm-.mjs +1 -0
- package/dist/capture-BV2RlsYg.mjs +1 -0
- package/dist/capture-boundary-Cz0jO-y5.mjs +1 -0
- package/dist/chunking-Dvs3f50A.d.mts +39 -0
- package/dist/chunking-qZffPbyY.mjs +2 -0
- package/dist/compressor-host-BAz6860r.d.mts +9 -0
- package/dist/compressor-host-CrKngamF.mjs +1 -0
- package/dist/config-Bm8myQlS.mjs +1 -0
- package/dist/config-CBqqY1AV.d.mts +29 -0
- package/dist/config-DapTbKhs.mjs +1 -0
- package/dist/{config-Rm-ct4K1.d.mts → config-Dyc09HCZ.d.mts} +2 -1
- package/dist/consent-COUmLJLD.mjs +1 -0
- package/dist/console-patch-WNKoLE7U.mjs +1 -0
- package/dist/delivery-DehIJWRh.mjs +1 -0
- package/dist/device-6T3DYkLD.mjs +1 -0
- package/dist/device-DRK7hhLi.mjs +1 -0
- package/dist/device-metadata-Ffi__vup.mjs +1 -0
- package/dist/{dist-ByNfzdQp.mjs → dist-Bcb677YG.mjs} +2 -2
- package/dist/environment-CoEXhF1a.mjs +1 -0
- package/dist/environment-_LKcAXKG.d.mts +9 -0
- package/dist/error-boundary.d.mts +1 -1
- package/dist/error-boundary.mjs +1 -1
- package/dist/errors-BDmCWb5z.mjs +1 -0
- package/dist/event-capabilities-Dd0Hoaq2.mjs +1 -0
- package/dist/exporter-DjvOtWYJ.mjs +1 -0
- package/dist/exporter-logs-DS2AXWnV.mjs +1 -0
- package/dist/exporter-metrics-DZYqUo6_.mjs +1 -0
- package/dist/geo-D2wa9bGs.mjs +2 -0
- package/dist/global-DYq1Z4_H.mjs +1 -0
- package/dist/http-span-route-t2gig-KI.mjs +1 -0
- package/dist/hydration-BIp2cKhz.mjs +1 -0
- package/dist/index-DBsXraeJ.d.mts +4 -0
- package/dist/initial-navigation-YeK6UUHX.mjs +1 -0
- package/dist/{instrumentations-Bgm2EazU.d.mts → instrumentations-BuccMAMj.d.mts} +8 -1
- package/dist/instrumentations-CY8NcP_M.mjs +1 -0
- package/dist/internal/{activity.d.mts → activity/activity.d.mts} +1 -1
- package/dist/internal/activity/activity.mjs +1 -0
- package/dist/internal/browser-context.mjs +1 -1
- package/dist/internal/capture-boundary.d.mts +1 -1
- package/dist/internal/capture-boundary.mjs +1 -1
- package/dist/internal/capture.d.mts +1 -1
- package/dist/internal/capture.mjs +1 -1
- package/dist/internal/config.d.mts +2 -28
- package/dist/internal/config.mjs +1 -1
- package/dist/internal/consent.mjs +1 -1
- package/dist/internal/console-patch.mjs +1 -1
- package/dist/internal/device-metadata.d.mts +41 -0
- package/dist/internal/device-metadata.mjs +1 -0
- package/dist/internal/dom/actionable.d.mts +4 -13
- package/dist/internal/dom/actionable.mjs +1 -1
- package/dist/internal/dom/privacy.d.mts +2 -0
- package/dist/internal/dom/privacy.mjs +1 -0
- package/dist/internal/environment.d.mts +2 -0
- package/dist/internal/environment.mjs +1 -0
- package/dist/internal/event-capabilities.d.mts +3 -0
- package/dist/internal/event-capabilities.mjs +1 -0
- package/dist/internal/hydration.mjs +1 -1
- package/dist/internal/kernel-registry.d.mts +1 -1
- package/dist/internal/kernel-registry.mjs +1 -1
- package/dist/internal/kernel.d.mts +5 -3
- package/dist/internal/kernel.mjs +1 -1
- package/dist/internal/otel/exporter-logs.mjs +1 -1
- package/dist/internal/otel/exporter-metrics.mjs +1 -1
- package/dist/internal/otel/exporter.mjs +1 -1
- package/dist/internal/otel/http-span-route.mjs +1 -1
- package/dist/internal/otel/index.d.mts +3 -3
- package/dist/internal/otel/index.mjs +1 -1
- package/dist/internal/otel/initial-navigation.d.mts +1 -0
- package/dist/internal/otel/initial-navigation.mjs +1 -1
- package/dist/internal/otel/instrumentations.d.mts +1 -1
- package/dist/internal/otel/instrumentations.mjs +1 -1
- package/dist/internal/otel/navigation.mjs +1 -1
- package/dist/internal/otel/normalize-path.mjs +1 -1
- package/dist/internal/otel/page-scope-context-manager.mjs +1 -1
- package/dist/internal/otel/propagation.mjs +1 -1
- package/dist/internal/otel/provider.d.mts +1 -1
- package/dist/internal/otel/provider.mjs +1 -1
- package/dist/internal/otel/url-attrs.mjs +1 -1
- package/dist/internal/otel/web-vitals.mjs +1 -1
- package/dist/internal/{page-lifecycle.d.mts → page-lifecycle/page-lifecycle.d.mts} +1 -1
- package/dist/internal/page-lifecycle/page-lifecycle.mjs +1 -0
- package/dist/internal/plugins/plugin-runtime.d.mts +2 -0
- package/dist/internal/plugins/plugin-runtime.mjs +1 -0
- package/dist/internal/react-context.d.mts +1 -1
- package/dist/internal/react-context.mjs +1 -1
- package/dist/internal/server-digest.mjs +1 -1
- package/dist/internal/third-party-hosts.mjs +1 -1
- package/dist/internal/version.mjs +1 -1
- package/dist/internal/wrapper-singleton.d.mts +1 -1
- package/dist/internal/wrapper-singleton.mjs +1 -1
- package/dist/kernel-BD57JxiH.mjs +1 -0
- package/dist/kernel-registry-6f-3VCIy.mjs +1 -0
- package/dist/loader-BGwWwN2n.mjs +1 -0
- package/dist/log-D6Ht--tv.mjs +1 -0
- package/dist/navigation-DwkvuhFR.mjs +1 -0
- package/dist/normalize-path-BChqP8pA.mjs +1 -0
- package/dist/page-events-config-CiJvdAaJ.d.mts +12 -0
- package/dist/{internal/page-lifecycle.mjs → page-lifecycle-BhSFqjlK.mjs} +1 -1
- package/dist/page-scope-context-manager-DhArvVJ_.mjs +1 -0
- package/dist/plugin-runtime-CnFVGbJw.mjs +1 -0
- package/dist/plugins/device.d.mts +1 -1
- package/dist/plugins/device.mjs +1 -1
- package/dist/plugins/errors.d.mts +1 -1
- package/dist/plugins/errors.mjs +1 -1
- package/dist/plugins/lib/loader.d.mts +1 -1
- package/dist/plugins/lib/loader.mjs +1 -1
- package/dist/plugins/lib/types.d.mts +1 -1
- package/dist/plugins/logs.d.mts +1 -1
- package/dist/plugins/logs.mjs +1 -1
- package/dist/plugins/page-events-config.d.mts +2 -0
- package/dist/plugins/page-events-config.mjs +1 -0
- package/dist/plugins/page-events.d.mts +1 -1
- package/dist/plugins/rage-clicks.d.mts +1 -1
- package/dist/plugins/rage-clicks.mjs +1 -1
- package/dist/plugins/replay/buffer.d.mts +1 -1
- package/dist/plugins/replay/buffer.mjs +1 -1
- package/dist/plugins/replay/chunking.d.mts +2 -38
- package/dist/plugins/replay/chunking.mjs +1 -2
- package/dist/plugins/replay/compressor-host.d.mts +2 -8
- package/dist/plugins/replay/compressor-host.mjs +1 -1
- package/dist/plugins/replay/config.d.mts +1 -1
- package/dist/plugins/replay/config.mjs +1 -1
- package/dist/plugins/replay/delivery.d.mts +4 -4
- package/dist/plugins/replay/delivery.mjs +1 -1
- package/dist/plugins/replay/index.d.mts +1 -1
- package/dist/plugins/replay/index.mjs +1 -1
- package/dist/plugins/replay/recorder.d.mts +1 -1
- package/dist/plugins/replay/recorder.mjs +1 -1
- package/dist/plugins/replay/redact-urls.d.mts +6 -0
- package/dist/plugins/replay/redact-urls.mjs +1 -0
- package/dist/plugins/replay/sequence.mjs +1 -1
- package/dist/plugins/replay/upload.d.mts +1 -1
- package/dist/plugins/replay/upload.mjs +1 -1
- package/dist/privacy-CPKosXDP.d.mts +31 -0
- package/dist/privacy-CRuL0X8r.mjs +1 -0
- package/dist/propagation-DVcqCu_E.mjs +1 -0
- package/dist/{provider-DWgb6tn9.d.mts → provider-C68KiG80.d.mts} +55 -39
- package/dist/provider-NuAexTzU.mjs +1 -0
- package/dist/{provider-2LrbA-ld.d.mts → provider-VZtcX6ZS.d.mts} +4 -1
- package/dist/provider.d.mts +4 -3
- package/dist/provider.mjs +1 -1
- package/dist/react-context-c1uTUJfB.mjs +1 -0
- package/dist/react-error-handler.d.mts +1 -1
- package/dist/react-error-handler.mjs +1 -1
- package/dist/recorder-CM6Ae_0S.mjs +1 -0
- package/dist/redact-urls-CwFod9d4.mjs +1 -0
- package/dist/sequence-B4dYChb0.mjs +1 -0
- package/dist/server-digest-CzGdvjW1.mjs +1 -0
- package/dist/session-C30CtCVv.mjs +1 -0
- package/dist/session-retry-DJHvfDaO.mjs +1 -0
- package/dist/stringify-DvuHsAT4.mjs +1 -0
- package/dist/third-party-hosts-BoJNL3xG.mjs +1 -0
- package/dist/tracking/api.d.mts +1 -1
- package/dist/tracking/api.mjs +1 -1
- package/dist/tracking/device.mjs +1 -1
- package/dist/tracking/geo.mjs +1 -2
- package/dist/tracking/registration.fixture.d.mts +119 -109
- package/dist/tracking/registration.fixture.mjs +148 -26
- package/dist/tracking/session-retry.mjs +1 -1
- package/dist/tracking/session.mjs +1 -1
- package/dist/upload-BPaD3YcA.mjs +1 -0
- package/dist/url-attrs-BdcyE2n6.mjs +1 -0
- package/dist/util/bot.d.mts +1 -0
- package/dist/util/bot.mjs +1 -1
- package/dist/util/global.mjs +1 -1
- package/dist/util/log.mjs +1 -1
- package/dist/util/stringify.mjs +1 -1
- package/dist/{version-XqQjw_Xw.mjs → version-BuN6IItu.mjs} +1 -1
- package/dist/web-vitals-CxXDUgpl.mjs +1 -0
- package/package.json +6 -6
- package/dist/index-DvFfO2V9.d.mts +0 -4
- package/dist/internal/activity.mjs +0 -1
- package/dist/internal/plugin-runtime.d.mts +0 -2
- package/dist/internal/plugin-runtime.mjs +0 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as IDLE_AFTER_MS, c as SessionResumeReason, i as EXPIRE_AFTER_MS, n as ActivitySession, o as KEEPALIVE_THROTTLE_MS, r as CHECK_INTERVAL_MS, s as MAX_AGE_MS, t as ActivityMonitor } from "
|
|
1
|
+
import { a as IDLE_AFTER_MS, c as SessionResumeReason, i as EXPIRE_AFTER_MS, n as ActivitySession, o as KEEPALIVE_THROTTLE_MS, r as CHECK_INTERVAL_MS, s as MAX_AGE_MS, t as ActivityMonitor } from "../../activity-Duhfgvxt.mjs";
|
|
2
2
|
export { ActivityMonitor, ActivitySession, CHECK_INTERVAL_MS, EXPIRE_AFTER_MS, IDLE_AFTER_MS, KEEPALIVE_THROTTLE_MS, MAX_AGE_MS, SessionResumeReason };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as KEEPALIVE_THROTTLE_MS,i as IDLE_AFTER_MS,n as CHECK_INTERVAL_MS,o as MAX_AGE_MS,r as EXPIRE_AFTER_MS,t as ActivityMonitor}from"../../activity-D18VXGTn.mjs";export{ActivityMonitor,CHECK_INTERVAL_MS,EXPIRE_AFTER_MS,IDLE_AFTER_MS,KEEPALIVE_THROTTLE_MS,MAX_AGE_MS};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{t as deviceMetadata}from"../device-metadata-Ffi__vup.mjs";import{UAParser}from"@ua-parser-js/pro-enterprise";import{InApps}from"@ua-parser-js/pro-enterprise/extensions";const HIGH_ENTROPY_HINTS=[`bitness`,`platformVersion`,`fullVersionList`];async function getDeviceMetadata(){if(typeof navigator>`u`)return null;let uaData=navigator.userAgentData,[parsed,hints]=await Promise.all([Promise.resolve(UAParser(navigator.userAgent,InApps).withClientHints()).catch(()=>UAParser(navigator.userAgent,InApps)),uaData?.getHighEntropyValues?uaData.getHighEntropyValues(HIGH_ENTROPY_HINTS).catch(()=>({})):Promise.resolve({})]);return deviceMetadata(parsed,hints,navigator.userAgent)}function getBrowserMetadata(){if([typeof navigator,typeof screen,typeof globalThis].some(x=>x===`undefined`))return null;let{language}=navigator;return{display:{screen:{height:screen.availHeight,orientation:screen.orientation?.type,width:screen.availWidth}},language,timezone:Intl.DateTimeFormat().resolvedOptions().timeZone}}async function collectContext(){return{browser:getBrowserMetadata(),device:await getDeviceMetadata(),runtime:`browser`}}export{collectContext};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as InterfereContextValue, i as InterfereContext } from "../provider-
|
|
1
|
+
import { a as InterfereContextValue, i as InterfereContext } from "../provider-C68KiG80.mjs";
|
|
2
2
|
import { Component, ContextType, ReactNode } from "react";
|
|
3
3
|
//#region src/internal/capture-boundary.d.ts
|
|
4
4
|
interface CaptureBoundaryProps {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{
|
|
1
|
+
"use client";import{t as CaptureBoundary}from"../capture-boundary-Cz0jO-y5.mjs";export{CaptureBoundary};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{t as captureReactError}from"../capture-BV2RlsYg.mjs";export{captureReactError};
|
|
@@ -1,28 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
* Force enable is the explicit opt-in for telemetry outside production. It
|
|
4
|
-
* also overrides the bot gate, so a browser under test can start a kernel.
|
|
5
|
-
*/
|
|
6
|
-
export declare function isForceEnableActive(): boolean;
|
|
7
|
-
export declare function setIngestHost(host: string): void;
|
|
8
|
-
export declare function resolveTargets(apiHost?: string, ingestHost?: string): {
|
|
9
|
-
config: {
|
|
10
|
-
headers: Record<string, string>;
|
|
11
|
-
publicKeyHeader: {
|
|
12
|
-
apiKey: string;
|
|
13
|
-
} | undefined;
|
|
14
|
-
timeoutInSeconds: number;
|
|
15
|
-
maxRetries: number;
|
|
16
|
-
baseUrl: string;
|
|
17
|
-
};
|
|
18
|
-
ingest: {
|
|
19
|
-
headers: Record<string, string>;
|
|
20
|
-
publicKeyHeader: {
|
|
21
|
-
apiKey: string;
|
|
22
|
-
} | undefined;
|
|
23
|
-
timeoutInSeconds: number;
|
|
24
|
-
maxRetries: number;
|
|
25
|
-
baseUrl: string;
|
|
26
|
-
};
|
|
27
|
-
};
|
|
28
|
-
//#endregion
|
|
1
|
+
import { n as resolveTargets, r as setIngestHost, t as isForceEnableActive } from "../config-CBqqY1AV.mjs";
|
|
2
|
+
export { isForceEnableActive, resolveTargets, setIngestHost };
|
package/dist/internal/config.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{n as resolveTargets,r as setIngestHost,t as isForceEnableActive}from"../config-Bm8myQlS.mjs";export{isForceEnableActive,resolveTargets,setIngestHost};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{a as resolveGrantedConsent,i as isConsentAllowed,n as getPluginConsentCategory,o as shouldCaptureEvent,r as hasConsentChanged,t as DEFAULT_CONSENT}from"../consent-COUmLJLD.mjs";export{DEFAULT_CONSENT,getPluginConsentCategory,hasConsentChanged,isConsentAllowed,resolveGrantedConsent,shouldCaptureEvent};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
import{n as onConsoleCall,r as resetConsolePatchForTests,t as CONSOLE_LEVELS}from"../console-patch-WNKoLE7U.mjs";export{CONSOLE_LEVELS,onConsoleCall,resetConsolePatchForTests};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { IResult } from "@ua-parser-js/pro-enterprise";
|
|
2
|
+
//#region src/internal/device-metadata.d.ts
|
|
3
|
+
interface NavigatorUABrand {
|
|
4
|
+
brand: string;
|
|
5
|
+
version: string;
|
|
6
|
+
}
|
|
7
|
+
export interface HighEntropyValues {
|
|
8
|
+
bitness?: string;
|
|
9
|
+
fullVersionList?: NavigatorUABrand[];
|
|
10
|
+
platformVersion?: string;
|
|
11
|
+
}
|
|
12
|
+
export declare function deviceMetadata(parsed: IResult | null | undefined, hints: HighEntropyValues, userAgent: string): {
|
|
13
|
+
browser: {
|
|
14
|
+
fullVersion?: string | undefined;
|
|
15
|
+
major?: string | undefined;
|
|
16
|
+
name?: string | undefined;
|
|
17
|
+
type?: string | undefined;
|
|
18
|
+
version?: string | undefined;
|
|
19
|
+
};
|
|
20
|
+
cpu: {
|
|
21
|
+
architecture?: string | undefined;
|
|
22
|
+
bitness?: string | undefined;
|
|
23
|
+
};
|
|
24
|
+
device: {
|
|
25
|
+
model?: string | undefined;
|
|
26
|
+
type?: string | undefined;
|
|
27
|
+
vendor?: string | undefined;
|
|
28
|
+
};
|
|
29
|
+
engine: {
|
|
30
|
+
name?: string | undefined;
|
|
31
|
+
version?: string | undefined;
|
|
32
|
+
};
|
|
33
|
+
frozenUa?: boolean | undefined;
|
|
34
|
+
os: {
|
|
35
|
+
name?: string | undefined;
|
|
36
|
+
version?: string | undefined;
|
|
37
|
+
versionFull?: string | undefined;
|
|
38
|
+
};
|
|
39
|
+
ua: string;
|
|
40
|
+
} | null;
|
|
41
|
+
//#endregion
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as deviceMetadata}from"../device-metadata-Ffi__vup.mjs";export{deviceMetadata};
|
|
@@ -1,25 +1,16 @@
|
|
|
1
|
+
import { i as PrivacyPolicy, n as PrivacyLevel } from "../../privacy-CPKosXDP.mjs";
|
|
1
2
|
//#region src/internal/dom/actionable.d.ts
|
|
2
|
-
/**
|
|
3
|
-
* Single source of truth for "what counts as a clickable element" across
|
|
4
|
-
* the SDK. Used by both the `pages` plugin (which captures `ui_event`
|
|
5
|
-
* envelopes) and the OTel `UserInteractionInstrumentation` enrichment
|
|
6
|
-
* hook (which gates span creation + stamps target attrs). Before this
|
|
7
|
-
* was extracted, the two sites diverged and produced inconsistent
|
|
8
|
-
* notions of "actionable."
|
|
9
|
-
*
|
|
10
|
-
* `data-track-click` is the customer escape hatch — any element opted
|
|
11
|
-
* in via that attribute is treated as actionable regardless of tag/role.
|
|
12
|
-
*/
|
|
13
3
|
export declare function isActionable(el: Element): boolean;
|
|
14
4
|
export declare function closestActionable(target: EventTarget | null): Element | null;
|
|
15
5
|
export interface ActionableDescriptor {
|
|
16
6
|
ariaLabel?: string | undefined;
|
|
17
|
-
href?: string | undefined;
|
|
18
7
|
id?: string | undefined;
|
|
8
|
+
label?: string | undefined;
|
|
19
9
|
name?: string | undefined;
|
|
10
|
+
privacy?: Exclude<PrivacyLevel, "public"> | undefined;
|
|
20
11
|
role?: string | undefined;
|
|
21
12
|
tag: string;
|
|
22
13
|
text?: string | undefined;
|
|
23
14
|
}
|
|
24
|
-
export declare function describeActionable(el: Element): ActionableDescriptor;
|
|
15
|
+
export declare function describeActionable(el: Element, policy: PrivacyPolicy): ActionableDescriptor;
|
|
25
16
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
import{n as describeActionable,r as isActionable,t as closestActionable}from"../../actionable-DOmVf_ib.mjs";export{closestActionable,describeActionable,isActionable};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { a as fieldLabel, c as resolvePrivacyPolicy, i as PrivacyPolicy, n as PrivacyLevel, o as privacyLevel, r as PrivacyOptions, s as publicText, t as DEFAULT_PRIVACY_POLICY } from "../../privacy-CPKosXDP.mjs";
|
|
2
|
+
export { DEFAULT_PRIVACY_POLICY, PrivacyLevel, PrivacyOptions, PrivacyPolicy, fieldLabel, privacyLevel, publicText, resolvePrivacyPolicy };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as resolvePrivacyPolicy,i as publicText,n as fieldLabel,r as privacyLevel,t as DEFAULT_PRIVACY_POLICY}from"../../privacy-CRuL0X8r.mjs";export{DEFAULT_PRIVACY_POLICY,fieldLabel,privacyLevel,publicText,resolvePrivacyPolicy};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{n as isEnvironmentEnabled,t as isEnabledByEnvironment}from"../environment-CoEXhF1a.mjs";export{isEnabledByEnvironment,isEnvironmentEnabled};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as hasEventListenerPair}from"../event-capabilities-Dd0Hoaq2.mjs";export{hasEventListenerPair};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
import{t as isHydrationError}from"../hydration-BIp2cKhz.mjs";export{isHydrationError};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { s as Kernel } from "../provider-
|
|
1
|
+
import { s as Kernel } from "../provider-C68KiG80.mjs";
|
|
2
2
|
//#region src/internal/kernel-registry.d.ts
|
|
3
3
|
export declare function registerKernel(kernel: Kernel): void;
|
|
4
4
|
export declare function unregisterKernel(kernel: Kernel): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{n as registerKernel,r as unregisterKernel,t as activeKernel}from"../kernel-registry-6f-3VCIy.mjs";export{activeKernel,registerKernel,unregisterKernel};
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
1
|
+
import { r as PrivacyOptions } from "../privacy-CPKosXDP.mjs";
|
|
2
|
+
import { _ as createKernel, c as KernelConsent, d as KernelInternalOptions, f as KernelOptions, g as buildSdkStack, h as TracingOptions, l as KernelDevice, m as RecordExceptionOpts, p as KernelSession, s as Kernel, u as KernelIdentity, v as readReleaseSlugFromGlobals } from "../provider-C68KiG80.mjs";
|
|
3
|
+
import { i as HttpStatusCodeRange, n as CaptureFailedRequestsOption, r as CaptureFailedRequestsOptions } from "../instrumentations-BuccMAMj.mjs";
|
|
4
|
+
import { t as isEnabledByEnvironment } from "../environment-_LKcAXKG.mjs";
|
|
5
|
+
export { type CaptureFailedRequestsOption, type CaptureFailedRequestsOptions, type HttpStatusCodeRange, Kernel, KernelConsent, KernelDevice, KernelIdentity, KernelInternalOptions, KernelOptions, KernelSession, type PrivacyOptions, RecordExceptionOpts, TracingOptions, buildSdkStack, createKernel, isEnabledByEnvironment, readReleaseSlugFromGlobals };
|
package/dist/internal/kernel.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{createLogger}from"../util/log.mjs";import{onPageHidden}from"./page-lifecycle.mjs";import{getGlobal}from"../util/global.mjs";import{resolveTargets,setIngestHost}from"./config.mjs";import{SessionTracker}from"../tracking/api.mjs";import{safeStringify}from"../util/stringify.mjs";import{t as PRODUCER_VERSION}from"../version-XqQjw_Xw.mjs";import{INGEST_IGNORE_RE}from"./otel/exporter.mjs";import{recordInitialNavigation}from"./otel/initial-navigation.mjs";import{PluginRuntime}from"./plugin-runtime.mjs";import{isNonErrorException,shouldDropBrowserExtensionNoise,shouldDropUnresolvableStack,toExceptions}from"@interfere/types/sdk/errors";import{trace}from"@opentelemetry/api";import{omitUndefined}from"@interfere/helpers/omit-undefined";import{FORCE_ENABLE_GLOBAL,RELEASE_SLUG_GLOBAL,SDK_STACK_GLOBAL}from"@interfere/types/sdk/injected-globals";import{InterfereClient}from"@interfere/javascript";import{releaseSlugSchema}from"@interfere/types/releases/slug";import{readBakedPlugins,remoteConfigInputSchema}from"@interfere/types/sdk/remote-config";const log=createLogger(`kernel`),REPLAY_UPLOAD_RE=/\/v3\/replay\/upload\//u;function buildSdkStack(wrapperVersions){return[...wrapperVersions??[],PRODUCER_VERSION]}function buildExceptionEventAttrs(value,opts){let attrs={"interfere.exception.handled":opts.mechanism.handled,"interfere.exception.mechanism":opts.mechanism.type};if(opts.errorDigest&&(attrs[`interfere.error.digest`]=opts.errorDigest),opts.subtype&&(attrs[`interfere.exception.subtype`]=opts.subtype),isNonErrorException(value))return attrs[`exception.type`]=value.type,attrs[`exception.message`]=value.value,attrs[`interfere.exception.kind`]=`non-error`,attrs[`interfere.exception.serialized`]=safeStringify(value.serialized),attrs;attrs[`exception.type`]=value.name,attrs[`exception.message`]=value.message,attrs[`interfere.exception.kind`]=`error`,value.stack&&(attrs[`exception.stacktrace`]=value.stack),attrs[`interfere.exception.chain`]=safeStringify(toExceptions(value,opts.mechanism));let debugIds=getGlobal(`_debugIds`);return typeof debugIds==`object`&&debugIds&&Object.keys(debugIds).length>0&&(attrs[`interfere.exception.debug_ids`]=safeStringify(debugIds)),opts.appendFrames&&opts.appendFrames.length>0&&(attrs[`interfere.exception.appended_frames`]=safeStringify(opts.appendFrames)),opts.fallbackFrames&&opts.fallbackFrames.length>0&&(attrs[`interfere.exception.fallback_frames`]=safeStringify(opts.fallbackFrames)),attrs}var Kernel=class{consent;identity;device;session;seen=new WeakSet;initialNavigationSeen=new Set;runtime=null;otel=null;otelDispose=null;otelControls=null;deviceInfoCaptureEnabled=!1;unsubscribePageHidden=null;tracker;constructor(tracker){this.tracker=tracker,this.consent={get:()=>this.requireRuntime().getConsent(),set:value=>{let runtime=this.requireRuntime();value===void 0?runtime.resetConsent():runtime.setConsent(value)}},this.identity={clear:()=>{this.tracker.reset()},get:()=>this.tracker.getIdentity(),set:async params=>this.tracker.identify(params)},this.device={getDeviceId:()=>this.tracker.getDeviceId(),getFpHash:()=>this.tracker.getFpHash()},this.session={getId:()=>this.tracker.sessionId(),getWindowId:()=>this.tracker.windowId()},this.unsubscribePageHidden=onPageHidden(()=>{this.flush().catch(()=>{})})}attachRuntime(runtime){this.runtime=runtime}requireRuntime(){if(!this.runtime)throw Error(`Kernel runtime not attached. createKernel must call attachRuntime before any consent/dispose path runs.`);return this.runtime}getSessionId(){return this.tracker.sessionId()??``}getWindowId(){return this.tracker.windowId()??``}onSessionPause(handler){return this.tracker.onSessionPause(handler)}onSessionResume(handler){return this.tracker.onSessionResume(handler)}getPluginConfigState(key){return this.requireRuntime().getPluginConfigState(key)}getReplayConfig(){return this.requireRuntime().getReplayConfig()}subscribePluginConfigState(key,listener){return this.requireRuntime().subscribePluginConfigState(key,listener)}getTracer(name){return this.otel?.tracerProvider.getTracer(name)??trace.getTracer(name)}startPageEventsCapture(){let{otelControls:controls,otel}=this;return!controls||!otel?null:(controls.setPageEventsEnabled(!0),this.recordInitialNavigation(otel.loggerProvider),(()=>{controls.setPageEventsEnabled(!1)}))}startDeviceInfoCapture(){return this.tracker.startDeviceIdentity(),this.deviceInfoCaptureEnabled=!0,(reason=>{this.deviceInfoCaptureEnabled=!1,reason===`consent-revoked`&&this.tracker.discardDeviceIdentity()})}isDeviceInfoCaptureEnabled(){return this.deviceInfoCaptureEnabled}recordException(value,opts){if(!isNonErrorException(value)){if(this.seen.has(value))return;this.seen.add(value)}if(!isNonErrorException(value)){let stacks=[],current=value;for(let depth=0;current&&depth<5;depth+=1)current.stack&&stacks.push(current.stack),current=current.cause instanceof Error?current.cause:void 0;if(shouldDropBrowserExtensionNoise(stacks)||shouldDropUnresolvableStack(stacks))return}let attrs=buildExceptionEventAttrs(value,opts),active=trace.getActiveSpan();if(active?.isRecording()){active.addEvent(`exception`,attrs);return}let span=this.otel?.tracerProvider.getTracer(`@interfere/react/exception`).startSpan(`interfere.exception.capture`);span&&(span.addEvent(`exception`,attrs),span.end())}recordLog(input){this.otel&&this.otel.loggerProvider.getLogger(`@interfere/react`).emit(omitUndefined({body:input.body,severityNumber:input.severityNumber,severityText:input.severityText,attributes:input.attributes}))}recordInitialNavigation(loggerProvider){recordInitialNavigation({getSessionId:()=>this.session.getId(),getWindowId:()=>this.session.getWindowId(),loggerProvider,seen:this.initialNavigationSeen})}async flush(){this.otel&&await this.otel.flush()}attachOtel(handle,dispose,controls){this.otel=handle,this.otelDispose=dispose,this.otelControls=controls??null}syncProviderConfig(config){this.requireRuntime().applyProviderConfig(config.plugins,config.consent)}async dispose(){this.unsubscribePageHidden?.(),this.unsubscribePageHidden=null,this.runtime&&await this.runtime.dispose(),this.tracker.dispose(),this.otelDispose?.(),this.otelDispose=null,this.otel&&=(await this.otel.shutdown(),null)}};async function createKernel(input={}){let{opts={}}=input,fetcher=opts.fetch??globalThis.fetch.bind(globalThis),remotePlugins=await resolveRemotePlugins(opts,fetcher),targets=resolveTargets(opts.apiHost);log.info(`ingest: %s`,targets.ingest.baseUrl),getGlobal(FORCE_ENABLE_GLOBAL)&&log.warn(`FORCE_ENABLE is active. Events will be dropped by production ingest. This should only be set during local development.`);let tracker=new SessionTracker({fetcher,target:targets.ingest});opts._wrapperVersions?.length&&Object.assign(globalThis,{[SDK_STACK_GLOBAL]:opts._wrapperVersions});let kernel=new Kernel(tracker),runtime=new PluginRuntime(kernel,opts.consent,remotePlugins??{});if(kernel.attachRuntime(runtime),tracker.start(),runtime.start(),opts.tracing!==!1){let resolvedTracing={...typeof opts.tracing==`object`?opts.tracing:void 0};opts.serviceName&&(resolvedTracing.serviceName=opts.serviceName),opts.serviceNamespace!==void 0&&(resolvedTracing.serviceNamespace=opts.serviceNamespace),opts._internalAdditionalSpanProcessors&&(resolvedTracing.additionalSpanProcessors=opts._internalAdditionalSpanProcessors),opts._internalAdditionalLogRecordProcessors&&(resolvedTracing.additionalLogRecordProcessors=opts._internalAdditionalLogRecordProcessors),opts._internalAdditionalMetricReaders&&(resolvedTracing.additionalMetricReaders=opts._internalAdditionalMetricReaders),await wireOtel(kernel,targets,opts._wrapperVersions,resolvedTracing)}return remotePlugins?runtime.applyRemoteConfig(remotePlugins):runtime.applyRemoteConfigDefaults(),kernel}async function resolveRemotePlugins(opts,fetcher){let baked=readBakedPlugins();if(baked)return baked;let remoteConfig=await fetchRemoteConfig(resolveTargets(opts.apiHost).config,fetcher);return remoteConfig?.ingestUrl&&setIngestHost(remoteConfig.ingestUrl),remoteConfig?.plugins??null}async function wireOtel(kernel,targets,wrapperVersions,tracing){let{buildOtelProvider,captureWebVitals,createPageScopeRotator,installNavigationScope,PAGE_SCOPE_MAX_AGE_MS,readPropagationFromDocument,registerBundledInstrumentations,seedPageScope}=await import(`./otel/index.mjs`),releaseSlug=readReleaseSlugFromGlobals(),handle=buildOtelProvider(omitUndefined({clientOptions:targets.ingest,getDeviceId:()=>kernel.device.getDeviceId(),getSessionId:()=>kernel.session.getId(),getPropagationSessionId:()=>kernel.consent.get()?.analytics===!1?null:kernel.session.getId(),isDeviceInfoEnabled:()=>kernel.isDeviceInfoCaptureEnabled(),releaseSlug,sdkStack:buildSdkStack(wrapperVersions),serviceName:tracing.serviceName||void 0,serviceNamespace:tracing.serviceNamespace,additionalSpanProcessors:tracing.additionalSpanProcessors,additionalLogRecordProcessors:tracing.additionalLogRecordProcessors,additionalMetricReaders:tracing.additionalMetricReaders})),scopeSpanInput=omitUndefined({tracer:handle.tracerProvider.getTracer(`@interfere/react/navigation`),resolveRoute:tracing.resolveRoute}),extracted=readPropagationFromDocument();handle.contextManager.setPageScope(extracted??seedPageScope(scopeSpanInput)),handle.contextManager.setRotation(createPageScopeRotator(scopeSpanInput),PAGE_SCOPE_MAX_AGE_MS);let disposeNavigationScope=installNavigationScope({...scopeSpanInput,setPageScope:ctx=>{handle.contextManager.setPageScope(ctx)}}),instrumentations=registerBundledInstrumentations(omitUndefined({tracerProvider:handle.tracerProvider,loggerProvider:handle.loggerProvider,ignoreUrls:[INGEST_IGNORE_RE,`${targets.config.baseUrl}/v3/config`,`${targets.ingest.baseUrl}/v3/session`,REPLAY_UPLOAD_RE],apiHosts:tracing.apiHosts,propagateContextUrls:tracing.propagateContextUrls,resolveRoute:tracing.resolveRoute,captureFailedRequests:tracing.captureFailedRequests}));tracing.webVitals!==!1&&captureWebVitals(omitUndefined({flush:async()=>handle.flush(),meter:handle.meterProvider.getMeter(`@interfere/react/web-vitals`),resolveRoute:tracing.resolveRoute})),kernel.attachOtel(handle,()=>{disposeNavigationScope(),instrumentations.dispose()},{setPageEventsEnabled:instrumentations.setPageEventsEnabled})}async function fetchRemoteConfig(configTarget,fetcher){try{let client=new InterfereClient({...configTarget,fetch:Object.assign(async(url,init)=>fetcher(url,{...init,credentials:`omit`}),fetcher)});return remoteConfigInputSchema.parse(await client.config.getSdkConfig())}catch{return log.warn(`remote config fetch failed, using local defaults`),null}}function isEnabledByEnvironment(){if(typeof process>`u`||process.env===void 0||process.env===null)return!0;let nodeEnv=process.env.NODE_ENV;return nodeEnv===`production`||nodeEnv===void 0||!!getGlobal(FORCE_ENABLE_GLOBAL)||!!process.env.INTERFERE_FORCE_ENABLE}function readReleaseSlugFromGlobals(){let value=getGlobal(RELEASE_SLUG_GLOBAL);return typeof value==`string`?releaseSlugSchema.parse(value):null}export{Kernel,buildSdkStack,createKernel,isEnabledByEnvironment,readReleaseSlugFromGlobals};
|
|
1
|
+
import{t as isEnabledByEnvironment}from"../environment-CoEXhF1a.mjs";import{i as readReleaseSlugFromGlobals,n as buildSdkStack,r as createKernel,t as Kernel}from"../kernel-BD57JxiH.mjs";export{Kernel,buildSdkStack,createKernel,isEnabledByEnvironment,readReleaseSlugFromGlobals};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{t as IngestLogExporter}from"../../exporter-logs-DS2AXWnV.mjs";export{IngestLogExporter};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{t as IngestMetricExporter}from"../../exporter-metrics-DZYqUo6_.mjs";export{IngestMetricExporter};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{a as isIngestHalted,i as createTraceExporter,n as createLogExporter,o as resetIngestHalt,r as createMetricExporter,t as INGEST_IGNORE_RE}from"../../exporter-DjvOtWYJ.mjs";export{INGEST_IGNORE_RE,createLogExporter,createMetricExporter,createTraceExporter,isIngestHalted,resetIngestHalt};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{t as stampHttpSpanRoute}from"../../http-span-route-t2gig-KI.mjs";export{stampHttpSpanRoute};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { a as InstrumentationsInput, i as HttpStatusCodeRange, n as CaptureFailedRequestsOption, o as registerBundledInstrumentations, r as CaptureFailedRequestsOptions, t as BundledInstrumentations } from "../../instrumentations-
|
|
1
|
+
import { a as InstrumentationsInput, i as HttpStatusCodeRange, n as CaptureFailedRequestsOption, o as registerBundledInstrumentations, r as CaptureFailedRequestsOptions, t as BundledInstrumentations } from "../../instrumentations-BuccMAMj.mjs";
|
|
2
2
|
import { a as seedPageScope, i as installNavigationScope, n as PAGE_SCOPE_MAX_AGE_MS, r as createPageScopeRotator, t as NavigationScopeInput } from "../../navigation-CkiV6lJY.mjs";
|
|
3
3
|
import { t as readPropagationFromDocument } from "../../propagation-CssinKCy.mjs";
|
|
4
|
-
import { n as OtelProviderInput, r as buildOtelProvider, t as OtelProviderHandle } from "../../provider-
|
|
4
|
+
import { n as OtelProviderInput, r as buildOtelProvider, t as OtelProviderHandle } from "../../provider-VZtcX6ZS.mjs";
|
|
5
5
|
import { n as captureWebVitals } from "../../web-vitals-x8y70B5x.mjs";
|
|
6
|
-
import "../../index-
|
|
6
|
+
import "../../index-DBsXraeJ.mjs";
|
|
7
7
|
export { type BundledInstrumentations, type CaptureFailedRequestsOption, type CaptureFailedRequestsOptions, type HttpStatusCodeRange, type InstrumentationsInput, type NavigationScopeInput, type OtelProviderHandle, type OtelProviderInput, PAGE_SCOPE_MAX_AGE_MS, buildOtelProvider, captureWebVitals, createPageScopeRotator, installNavigationScope, readPropagationFromDocument, registerBundledInstrumentations, seedPageScope };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{registerBundledInstrumentations}from"
|
|
1
|
+
import{t as registerBundledInstrumentations}from"../../instrumentations-CY8NcP_M.mjs";import{i as seedPageScope,n as createPageScopeRotator,r as installNavigationScope,t as PAGE_SCOPE_MAX_AGE_MS}from"../../navigation-DwkvuhFR.mjs";import{t as readPropagationFromDocument}from"../../propagation-DVcqCu_E.mjs";import{t as buildOtelProvider}from"../../provider-NuAexTzU.mjs";import{t as captureWebVitals}from"../../web-vitals-CxXDUgpl.mjs";export{PAGE_SCOPE_MAX_AGE_MS,buildOtelProvider,captureWebVitals,createPageScopeRotator,installNavigationScope,readPropagationFromDocument,registerBundledInstrumentations,seedPageScope};
|
|
@@ -5,6 +5,7 @@ export interface InitialNavigationInput {
|
|
|
5
5
|
getSessionId: () => string | null;
|
|
6
6
|
getWindowId: () => string | null;
|
|
7
7
|
loggerProvider: LoggerProvider;
|
|
8
|
+
redactUrl?: (url: string) => string;
|
|
8
9
|
seen: Set<string>;
|
|
9
10
|
}
|
|
10
11
|
export declare function recordInitialNavigation(input: InitialNavigationInput): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
import{t as recordInitialNavigation}from"../../initial-navigation-YeK6UUHX.mjs";export{recordInitialNavigation};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as InstrumentationsInput, c as testOnlyApplyXhrSpanAttrs, d as testOnlyResolveFailureRanges, i as HttpStatusCodeRange, l as testOnlyClassifyNetworkError, n as CaptureFailedRequestsOption, o as registerBundledInstrumentations, r as CaptureFailedRequestsOptions, s as testOnlyApplyFetchSpanAttrs, t as BundledInstrumentations, u as testOnlyCreateFailureGate } from "../../instrumentations-
|
|
1
|
+
import { a as InstrumentationsInput, c as testOnlyApplyXhrSpanAttrs, d as testOnlyResolveFailureRanges, i as HttpStatusCodeRange, l as testOnlyClassifyNetworkError, n as CaptureFailedRequestsOption, o as registerBundledInstrumentations, r as CaptureFailedRequestsOptions, s as testOnlyApplyFetchSpanAttrs, t as BundledInstrumentations, u as testOnlyCreateFailureGate } from "../../instrumentations-BuccMAMj.mjs";
|
|
2
2
|
export { BundledInstrumentations, CaptureFailedRequestsOption, CaptureFailedRequestsOptions, HttpStatusCodeRange, InstrumentationsInput, registerBundledInstrumentations, testOnlyApplyFetchSpanAttrs, testOnlyApplyXhrSpanAttrs, testOnlyClassifyNetworkError, testOnlyCreateFailureGate, testOnlyResolveFailureRanges };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{THIRD_PARTY_IGNORE}from"../third-party-hosts.mjs";import{describeActionable,isActionable}from"../dom/actionable.mjs";import{ATTR_URL_FULL,ATTR_URL_PATH,stampUrlAttrs}from"./url-attrs.mjs";import{stampHttpSpanRoute}from"./http-span-route.mjs";import{MECHANISM_TYPE}from"@interfere/types/sdk/errors";import{omitUndefined}from"@interfere/helpers/omit-undefined";import{registerInstrumentations}from"@opentelemetry/instrumentation";import{BrowserNavigationInstrumentation,defaultSanitizeUrl}from"@opentelemetry/instrumentation-browser-navigation";import{DocumentLoadInstrumentation}from"@opentelemetry/instrumentation-document-load";import{FetchInstrumentation}from"@opentelemetry/instrumentation-fetch";import{LongTaskInstrumentation}from"@opentelemetry/instrumentation-long-task";import{UserInteractionInstrumentation}from"@opentelemetry/instrumentation-user-interaction";import{XMLHttpRequestInstrumentation}from"@opentelemetry/instrumentation-xml-http-request";const DEFAULT_FAILURE_RANGES=[[400,599]];function resolveFailureRanges(opt){if(opt===!1)return null;if(opt===void 0||opt===!0)return DEFAULT_FAILURE_RANGES;let codes=opt.statusCodes;return codes&&codes.length>0?codes:DEFAULT_FAILURE_RANGES}function createFailureGate(){let seen=new Set,windowStart=0,windowCount=0;return(key=>{if(seen.has(key))return!1;let now=Date.now();return now-windowStart>6e4&&(windowStart=now,windowCount=0),windowCount>=20?!1:(seen.size>=100&&seen.clear(),seen.add(key),windowCount+=1,!0)})}function failureKey(method,discriminator,url){let path;try{path=new URL(url).pathname}catch{path=url}return`${method} ${discriminator} ${path}`}function statusMatches(status,ranges){for(let range of ranges)if(typeof range==`number`){if(status===range)return!0}else if(status>=range[0]&&status<=range[1])return!0;return!1}function recordHttpFailure(span,status,method,url,mechanism){span.addEvent(`exception`,{"exception.message":`HTTP ${status} ${method} ${url}`,"exception.type":`HttpResponseError`,"interfere.exception.handled":!1,"interfere.exception.kind":`error`,"interfere.exception.mechanism":mechanism})}function maybeCaptureFetchFailure(span,result,failureRanges,method,url,gate){if(!failureRanges)return;let status=result?.status;typeof status!=`number`||status<=0||!statusMatches(status,failureRanges)||(!gate||gate(failureKey(method,status,url)))&&recordHttpFailure(span,status,method,url,MECHANISM_TYPE.browser.fetchFailedResponse)}const NETWORK_TIMEOUT_RE=/timeout|timed out/iu,NETWORK_ABORT_RE=/abort/iu;function classifyNetworkError(message){return NETWORK_TIMEOUT_RE.test(message)?`timeout`:NETWORK_ABORT_RE.test(message)?`abort`:`network`}function recordNetworkFailure(span,kind,method,url,mechanism){span.addEvent(`exception`,{"exception.message":`Network ${kind} ${method} ${url}`,"exception.type":`NetworkError`,"interfere.exception.handled":!1,"interfere.exception.kind":`error`,"interfere.exception.mechanism":mechanism,"interfere.exception.subtype":kind})}function maybeCaptureNetworkFailure(span,result,failureRanges,method,url,gate){if(!failureRanges)return;let{message}=result;if(typeof message!=`string`||message.length===0)return;let kind=classifyNetworkError(message);(!gate||gate(failureKey(method,kind,url)))&&recordNetworkFailure(span,kind,method,url,MECHANISM_TYPE.browser.fetchNetworkError)}function applyFetchSpanAttrs(span,request,result,failureRanges,isTrackedUrl,resolveRoute,gate){let url=resolveFetchUrl(span,request,result);if(!url)return;let parsed;try{parsed=new URL(url)}catch{return}span.setAttribute(ATTR_URL_PATH,parsed.pathname);let tracked=isTrackedUrl(url),method=resolveFetchMethod(request);tracked&&(stampHttpSpanRoute(span,method,parsed.pathname,resolveRoute),result instanceof Response?maybeCaptureFetchFailure(span,result,failureRanges,method,url,gate):maybeCaptureNetworkFailure(span,result,failureRanges,method,url,gate))}function applyXhrSpanAttrs(span,xhr,failureRanges,isTrackedUrl,gate,resolveRoute){let url=xhr.responseURL||spanUrlFull(span);if(!(url&&isTrackedUrl(url)))return;let parsed;try{parsed=new URL(url)}catch{return}let method=isReadableSpan(span)?String(span.attributes[`http.request.method`]??span.attributes[`http.method`]??`XHR`):`XHR`;if(span.setAttribute(ATTR_URL_PATH,parsed.pathname),stampHttpSpanRoute(span,method,parsed.pathname,resolveRoute),!failureRanges)return;let{status}=xhr;if(typeof status==`number`){if(status===0){(!gate||gate(failureKey(`XHR`,`network`,url)))&&recordNetworkFailure(span,`network`,`XHR`,url,MECHANISM_TYPE.browser.xhrNetworkError);return}statusMatches(status,failureRanges)&&(!gate||gate(failureKey(`XHR`,status,url)))&&recordHttpFailure(span,status,`XHR`,url,MECHANISM_TYPE.browser.xhrFailedResponse)}}function resolveFetchUrl(span,request,result){return responseUrl(result)??requestUrl(request)??spanUrlFull(span)}function isReadableSpan(span){return`attributes`in span}function spanUrlFull(span){if(!isReadableSpan(span))return null;let url=span.attributes[`url.full`]??span.attributes[`http.url`];return typeof url==`string`?url:null}function responseUrl(result){return result instanceof Response&&result.url?result.url:null}function requestUrl(request){return typeof request==`string`?request:readStringProp(request,`url`)??readStringProp(request,`href`)}function resolveFetchMethod(request){return readStringProp(request,`method`)??`GET`}function readStringProp(value,key){if(!(typeof value==`object`&&value&&key in value))return null;let prop=Reflect.get(value,key);return typeof prop==`string`?prop:null}const testOnlyApplyFetchSpanAttrs=applyFetchSpanAttrs,testOnlyApplyXhrSpanAttrs=applyXhrSpanAttrs,testOnlyResolveFailureRanges=resolveFailureRanges,testOnlyCreateFailureGate=createFailureGate,testOnlyClassifyNetworkError=classifyNetworkError,NEVER_MATCH=/^$/u,ESCAPE_RE=/[.*+?^${}()|[\]\\]/gu;function sameOriginPattern(){if(typeof window>`u`)return NEVER_MATCH;let{protocol,host}=globalThis.location;return RegExp(`^${protocol}//${host.replace(ESCAPE_RE,String.raw`\$&`)}`,`u`)}function stampInteractionAttrs(eventType,element,span){let desc=describeActionable(element);span.setAttribute(`ui.event_type`,eventType),span.setAttribute(`ui.target.tag`,desc.tag),desc.id&&span.setAttribute(`ui.target.id`,desc.id),desc.name&&span.setAttribute(`ui.target.name`,desc.name),desc.role&&span.setAttribute(`ui.target.role`,desc.role),desc.ariaLabel&&span.setAttribute(`ui.target.aria_label`,desc.ariaLabel),desc.text&&span.setAttribute(`ui.target.text`,desc.text)}const PREFETCH_HEADER_NAMES=[`next-router-prefetch`,`next-router-segment-prefetch`];function isPrefetchRequest(request){let headers;try{headers=typeof Request<`u`&&request instanceof Request?request.headers:new Headers(request.headers)}catch{return!1}return PREFETCH_HEADER_NAMES.some(name=>headers.has(name))||headers.get(`purpose`)===`prefetch`||headers.get(`sec-purpose`)?.includes(`prefetch`)===!0}function escapeRegExp(value){return value.replaceAll(/[.*+?^${}()|[\]\\]/gu,String.raw`\$&`)}function apiHostToMatcher(host){return RegExp(`^https?://${escapeRegExp(host)}(:\\d+)?([/?#]|$)`,`u`)}function registerBundledInstrumentations(input){let{tracerProvider,loggerProvider,ignoreUrls,apiHosts=[],propagateContextUrls=[]}=input,{resolveRoute}=input,origin=sameOriginPattern(),propagateMatchers=[...apiHosts.map(host=>apiHostToMatcher(host)),...propagateContextUrls],fetchIgnore=[...ignoreUrls,...THIRD_PARTY_IGNORE],failureRanges=resolveFailureRanges(input.captureFailedRequests),failureGate=createFailureGate();function isTrackedUrl(url){return origin.test(url)||propagateMatchers.some(re=>re instanceof RegExp?re.test(url):url.includes(re))}let pageEventsEnabled=!1,coreInstrumentations=[new FetchInstrumentation({applyCustomAttributesOnSpan:(span,request,result)=>{applyFetchSpanAttrs(span,request,result,failureRanges,isTrackedUrl,resolveRoute,failureGate)},ignoreUrls:fetchIgnore,measureRequestSize:!0,propagateTraceHeaderCorsUrls:[origin,...propagateMatchers],requestHook:(span,request)=>{isPrefetchRequest(request)&&span.setAttribute(`http.request.prefetch`,!0)}}),new XMLHttpRequestInstrumentation({applyCustomAttributesOnSpan:(span,xhr)=>{applyXhrSpanAttrs(span,xhr,failureRanges,isTrackedUrl,failureGate,resolveRoute)},ignoreUrls:fetchIgnore,propagateTraceHeaderCorsUrls:[origin,...propagateMatchers]}),new LongTaskInstrumentation({observerCallback:(span,info)=>{stampUrlAttrs(span,resolveRoute);let containerType=info.longtaskEntry.attribution[0]?.containerType;containerType&&span.setAttribute(`longtask.container_type`,containerType)}}),new UserInteractionInstrumentation({eventNames:[`click`,`submit`],shouldPreventSpanCreation:(eventType,element,span)=>!pageEventsEnabled||eventType===`click`&&!isActionable(element)||(stampInteractionAttrs(eventType,element,span),stampUrlAttrs(span,resolveRoute),!1)})],pageEventsInstrumentations=[new DocumentLoadInstrumentation({applyCustomAttributesOnSpan:{resourceFetch:(span,entry)=>{let name=entry?.name;if(typeof name!=`string`)return;let url;try{url=new URL(name)}catch{return}let isCrossOrigin=typeof window<`u`&&url.origin!==globalThis.location.origin;span.updateName(isCrossOrigin?`resource: ${url.host}${url.pathname}`:`resource: ${url.pathname}`),span.setAttribute(ATTR_URL_FULL,name),span.setAttribute(ATTR_URL_PATH,url.pathname),span.setAttribute(`server.address`,url.host)}},enabled:!1}),new BrowserNavigationInstrumentation({enabled:!1,sanitizeUrl:defaultSanitizeUrl})],unregisterCore=registerInstrumentations(omitUndefined({tracerProvider,loggerProvider,instrumentations:coreInstrumentations})),unregisterPageEvents=null,setPageEventsEnabled=enabled=>{if(pageEventsEnabled=enabled,enabled){unregisterPageEvents??=registerInstrumentations(omitUndefined({tracerProvider,loggerProvider,instrumentations:pageEventsInstrumentations}));return}unregisterPageEvents?.(),unregisterPageEvents=null};return{dispose:()=>{setPageEventsEnabled(!1),unregisterCore()},setPageEventsEnabled}}export{registerBundledInstrumentations,testOnlyApplyFetchSpanAttrs,testOnlyApplyXhrSpanAttrs,testOnlyClassifyNetworkError,testOnlyCreateFailureGate,testOnlyResolveFailureRanges};
|
|
1
|
+
import{a as testOnlyCreateFailureGate,i as testOnlyClassifyNetworkError,n as testOnlyApplyFetchSpanAttrs,o as testOnlyResolveFailureRanges,r as testOnlyApplyXhrSpanAttrs,t as registerBundledInstrumentations}from"../../instrumentations-CY8NcP_M.mjs";export{registerBundledInstrumentations,testOnlyApplyFetchSpanAttrs,testOnlyApplyXhrSpanAttrs,testOnlyClassifyNetworkError,testOnlyCreateFailureGate,testOnlyResolveFailureRanges};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{i as seedPageScope,n as createPageScopeRotator,r as installNavigationScope,t as PAGE_SCOPE_MAX_AGE_MS}from"../../navigation-DwkvuhFR.mjs";export{PAGE_SCOPE_MAX_AGE_MS,createPageScopeRotator,installNavigationScope,seedPageScope};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
import{t as normalizePath}from"../../normalize-path-BChqP8pA.mjs";export{normalizePath};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{t as PageScopeContextManager}from"../../page-scope-context-manager-DhArvVJ_.mjs";export{PageScopeContextManager};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{t as readPropagationFromDocument}from"../../propagation-DVcqCu_E.mjs";export{readPropagationFromDocument};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as OtelProviderInput, r as buildOtelProvider, t as OtelProviderHandle } from "../../provider-
|
|
1
|
+
import { n as OtelProviderInput, r as buildOtelProvider, t as OtelProviderHandle } from "../../provider-VZtcX6ZS.mjs";
|
|
2
2
|
export { OtelProviderHandle, OtelProviderInput, buildOtelProvider };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{t as buildOtelProvider}from"../../provider-NuAexTzU.mjs";export{buildOtelProvider};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
import{i as stampUrlAttrs,n as ATTR_URL_FULL,r as ATTR_URL_PATH,t as ATTR_HTTP_ROUTE}from"../../url-attrs-BdcyE2n6.mjs";export{ATTR_HTTP_ROUTE,ATTR_URL_FULL,ATTR_URL_PATH,stampUrlAttrs};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{t as captureWebVitals}from"../../web-vitals-CxXDUgpl.mjs";export{captureWebVitals};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{n as onPageShown,r as resetPageLifecycleForTests,t as onPageHidden}from"../../page-lifecycle-BhSFqjlK.mjs";export{onPageHidden,onPageShown,resetPageLifecycleForTests};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as PluginRuntime}from"../../plugin-runtime-CnFVGbJw.mjs";export{PluginRuntime};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as InterfereContextValue, i as InterfereContext, o as NULL_CONTEXT_VALUE } from "../provider-
|
|
1
|
+
import { a as InterfereContextValue, i as InterfereContext, o as NULL_CONTEXT_VALUE } from "../provider-C68KiG80.mjs";
|
|
2
2
|
export { InterfereContext, InterfereContextValue, NULL_CONTEXT_VALUE };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{
|
|
1
|
+
"use client";import{n as NULL_CONTEXT_VALUE,t as InterfereContext}from"../react-context-c1uTUJfB.mjs";export{InterfereContext,NULL_CONTEXT_VALUE};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
import{t as hasServerDigest}from"../server-digest-CzGdvjW1.mjs";export{hasServerDigest};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
import{t as THIRD_PARTY_IGNORE}from"../third-party-hosts-BoJNL3xG.mjs";export{THIRD_PARTY_IGNORE};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{n as SDK_NAME,r as SDK_VERSION,t as PRODUCER_VERSION}from"../version-
|
|
1
|
+
import{n as SDK_NAME,r as SDK_VERSION,t as PRODUCER_VERSION}from"../version-BuN6IItu.mjs";export{PRODUCER_VERSION,SDK_NAME,SDK_VERSION};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { f as KernelOptions, s as Kernel } from "../provider-
|
|
1
|
+
import { f as KernelOptions, s as Kernel } from "../provider-C68KiG80.mjs";
|
|
2
2
|
import { ConsentInput, ConsentState } from "@interfere/types/sdk/plugins/manifest";
|
|
3
3
|
import { IdentifyParams } from "@interfere/types/sdk/identify";
|
|
4
4
|
//#region src/internal/wrapper-singleton.d.ts
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{registerKernel,unregisterKernel}from"
|
|
1
|
+
import{n as registerKernel,r as unregisterKernel}from"../kernel-registry-6f-3VCIy.mjs";import{t as isForceEnableActive}from"../config-Bm8myQlS.mjs";import{t as isEnabledByEnvironment}from"../environment-CoEXhF1a.mjs";import{r as createKernel}from"../kernel-BD57JxiH.mjs";import{n as isBotUserAgent}from"../bot-YLSbnCeg.mjs";function createWrapperSingleton(input){let kernel=null,pending=null,listeners=new Set;function emit(){for(let listener of listeners)listener()}async function initKernel(internalOpts){try{let k=await createKernel({opts:internalOpts});return kernel=k,registerKernel(k),emit(),k}finally{pending=null}}return{async close(){if(!kernel)return;let previous=kernel;await previous.dispose(),kernel=null,unregisterKernel(previous),emit()},consent:{get:()=>kernel?.consent.get()??null,set:value=>kernel?.consent.set(value)},getKernel(){if(!kernel)throw Error(`Interfere SDK not initialized. Call init() from your ${input.initEntryName} entrypoint.`);return kernel},getKernelOrNull(){return kernel},identity:{clear:()=>kernel?.identity.clear(),get:()=>kernel?.identity.get()??null,set:async params=>kernel?.identity.set(params)??Promise.resolve()},async init(opts={}){return kernel||pending||(!(opts.enabled??isEnabledByEnvironment())||!isForceEnableActive()&&isBotUserAgent()?null:(pending=initKernel({...opts,_wrapperVersions:[input.producerVersion]}),pending))},subscribeToKernel(listener){return listeners.add(listener),(()=>{listeners.delete(listener)})}}}export{createWrapperSingleton};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as createLogger}from"./log-D6Ht--tv.mjs";import{t as getGlobal}from"./global-DYq1Z4_H.mjs";import{n as resolveTargets,r as setIngestHost}from"./config-Bm8myQlS.mjs";import{t as onPageHidden}from"./page-lifecycle-BhSFqjlK.mjs";import{t as SessionTracker}from"./api-DXmjUMZE.mjs";import{t as safeStringify}from"./stringify-DvuHsAT4.mjs";import{a as resolvePrivacyPolicy}from"./privacy-CRuL0X8r.mjs";import{t as PRODUCER_VERSION}from"./version-BuN6IItu.mjs";import{t as INGEST_IGNORE_RE}from"./exporter-DjvOtWYJ.mjs";import{t as recordInitialNavigation}from"./initial-navigation-YeK6UUHX.mjs";import{t as PluginRuntime}from"./plugin-runtime-CnFVGbJw.mjs";import{isNonErrorException,shouldDropBrowserExtensionNoise,shouldDropUnresolvableStack,toExceptions}from"@interfere/types/sdk/errors";import{trace}from"@opentelemetry/api";import{omitUndefined}from"@interfere/helpers/omit-undefined";import{FORCE_ENABLE_GLOBAL,RELEASE_SLUG_GLOBAL,SDK_STACK_GLOBAL}from"@interfere/types/sdk/injected-globals";import{InterfereClient}from"@interfere/javascript";import{releaseSlugSchema}from"@interfere/types/releases/slug";import{readBakedPlugins,remoteConfigInputSchema}from"@interfere/types/sdk/remote-config";import{redactUrl,resolveUrlRedaction}from"@interfere/types/sdk/url-redaction";const log=createLogger(`kernel`),REPLAY_UPLOAD_RE=/\/v3\/replay\/upload\//u;function buildSdkStack(wrapperVersions){return[...wrapperVersions??[],PRODUCER_VERSION]}function buildExceptionEventAttrs(value,opts){let attrs={"interfere.exception.handled":opts.mechanism.handled,"interfere.exception.mechanism":opts.mechanism.type};if(opts.errorDigest&&(attrs[`interfere.error.digest`]=opts.errorDigest),opts.subtype&&(attrs[`interfere.exception.subtype`]=opts.subtype),isNonErrorException(value))return attrs[`exception.type`]=value.type,attrs[`exception.message`]=value.value,attrs[`interfere.exception.kind`]=`non-error`,attrs[`interfere.exception.serialized`]=safeStringify(value.serialized),attrs;attrs[`exception.type`]=value.name,attrs[`exception.message`]=value.message,attrs[`interfere.exception.kind`]=`error`,value.stack&&(attrs[`exception.stacktrace`]=value.stack),attrs[`interfere.exception.chain`]=safeStringify(toExceptions(value,opts.mechanism));let debugIds=getGlobal(`_debugIds`);return typeof debugIds==`object`&&debugIds&&Object.keys(debugIds).length>0&&(attrs[`interfere.exception.debug_ids`]=safeStringify(debugIds)),opts.appendFrames&&opts.appendFrames.length>0&&(attrs[`interfere.exception.appended_frames`]=safeStringify(opts.appendFrames)),opts.fallbackFrames&&opts.fallbackFrames.length>0&&(attrs[`interfere.exception.fallback_frames`]=safeStringify(opts.fallbackFrames)),attrs}var Kernel=class{consent;identity;device;session;privacyPolicy;urlRedaction;redactUrl=url=>redactUrl(url,this.urlRedaction);seen=new WeakSet;initialNavigationSeen=new Set;runtime=null;otel=null;otelDispose=null;otelControls=null;deviceInfoCaptureEnabled=!1;unsubscribePageHidden=null;tracker;constructor(tracker,privacy={}){this.tracker=tracker,this.privacyPolicy=resolvePrivacyPolicy(privacy),this.urlRedaction=resolveUrlRedaction(privacy.urls),this.consent={get:()=>this.requireRuntime().getConsent(),set:value=>{let runtime=this.requireRuntime();value===void 0?runtime.resetConsent():runtime.setConsent(value)}},this.identity={clear:()=>{this.tracker.reset()},get:()=>this.tracker.getIdentity(),set:async params=>this.tracker.identify(params)},this.device={getDeviceId:()=>this.tracker.getDeviceId(),getFpHash:()=>this.tracker.getFpHash()},this.session={getId:()=>this.tracker.sessionId(),getWindowId:()=>this.tracker.windowId()},this.unsubscribePageHidden=onPageHidden(()=>{this.flush().catch(()=>{})})}attachRuntime(runtime){this.runtime=runtime}requireRuntime(){if(!this.runtime)throw Error(`Kernel runtime not attached. createKernel must call attachRuntime before any consent/dispose path runs.`);return this.runtime}getSessionId(){return this.tracker.sessionId()??``}getWindowId(){return this.tracker.windowId()??``}onSessionPause(handler){return this.tracker.onSessionPause(handler)}onSessionResume(handler){return this.tracker.onSessionResume(handler)}getPluginConfigState(key){return this.requireRuntime().getPluginConfigState(key)}getReplayConfig(){return this.requireRuntime().getReplayConfig()}isInteractionCaptureEnabled(){return this.requireRuntime().isInteractionCaptureEnabled()}subscribePluginConfigState(key,listener){return this.requireRuntime().subscribePluginConfigState(key,listener)}getTracer(name){return this.otel?.tracerProvider.getTracer(name)??trace.getTracer(name)}startPageEventsCapture(){let{otelControls:controls,otel}=this;return!controls||!otel?null:(controls.setPageEventsEnabled(!0),this.recordInitialNavigation(otel.loggerProvider),(()=>{controls.setPageEventsEnabled(!1)}))}startDeviceInfoCapture(){return this.tracker.startDeviceIdentity(),this.deviceInfoCaptureEnabled=!0,(reason=>{this.deviceInfoCaptureEnabled=!1,reason===`consent-revoked`&&this.tracker.discardDeviceIdentity()})}isDeviceInfoCaptureEnabled(){return this.deviceInfoCaptureEnabled}recordException(value,opts){if(!isNonErrorException(value)){if(this.seen.has(value))return;this.seen.add(value)}if(!isNonErrorException(value)){let stacks=[],current=value;for(let depth=0;current&&depth<5;depth+=1)current.stack&&stacks.push(current.stack),current=current.cause instanceof Error?current.cause:void 0;if(shouldDropBrowserExtensionNoise(stacks)||shouldDropUnresolvableStack(stacks))return}let attrs=buildExceptionEventAttrs(value,opts),active=trace.getActiveSpan();if(active?.isRecording()){active.addEvent(`exception`,attrs);return}let span=this.otel?.tracerProvider.getTracer(`@interfere/react/exception`).startSpan(`interfere.exception.capture`);span&&(span.addEvent(`exception`,attrs),span.end())}recordLog(input){this.otel&&this.otel.loggerProvider.getLogger(`@interfere/react`).emit(omitUndefined({body:input.body,severityNumber:input.severityNumber,severityText:input.severityText,attributes:input.attributes}))}recordInitialNavigation(loggerProvider){recordInitialNavigation({getSessionId:()=>this.session.getId(),getWindowId:()=>this.session.getWindowId(),loggerProvider,redactUrl:this.redactUrl,seen:this.initialNavigationSeen})}async flush(){this.otel&&await this.otel.flush()}attachOtel(handle,dispose,controls){this.otel=handle,this.otelDispose=dispose,this.otelControls=controls??null}syncProviderConfig(config){this.requireRuntime().applyProviderConfig(config.plugins,config.consent)}async dispose(){this.unsubscribePageHidden?.(),this.unsubscribePageHidden=null,this.runtime&&await this.runtime.dispose(),this.tracker.dispose(),this.otelDispose?.(),this.otelDispose=null,this.otel&&=(await this.otel.shutdown(),null)}};async function createKernel(input={}){let{opts={}}=input,fetcher=opts.fetch??globalThis.fetch.bind(globalThis),remotePlugins=await resolveRemotePlugins(opts,fetcher),targets=resolveTargets(opts.apiHost);log.info(`ingest: %s`,targets.ingest.baseUrl),getGlobal(FORCE_ENABLE_GLOBAL)&&log.warn(`FORCE_ENABLE is active. Events will be dropped by production ingest. This should only be set during local development.`);let tracker=new SessionTracker({fetcher,target:targets.ingest});opts._wrapperVersions?.length&&Object.assign(globalThis,{[SDK_STACK_GLOBAL]:opts._wrapperVersions});let kernel=new Kernel(tracker,opts.privacy),runtime=new PluginRuntime(kernel,opts.consent,remotePlugins??{});if(kernel.attachRuntime(runtime),tracker.start(),runtime.start(),opts.tracing!==!1){let resolvedTracing={...typeof opts.tracing==`object`?opts.tracing:void 0};opts.serviceName&&(resolvedTracing.serviceName=opts.serviceName),opts.serviceNamespace!==void 0&&(resolvedTracing.serviceNamespace=opts.serviceNamespace),opts._internalAdditionalSpanProcessors&&(resolvedTracing.additionalSpanProcessors=opts._internalAdditionalSpanProcessors),opts._internalAdditionalLogRecordProcessors&&(resolvedTracing.additionalLogRecordProcessors=opts._internalAdditionalLogRecordProcessors),opts._internalAdditionalMetricReaders&&(resolvedTracing.additionalMetricReaders=opts._internalAdditionalMetricReaders),await wireOtel(kernel,targets,opts._wrapperVersions,resolvedTracing)}return remotePlugins?runtime.applyRemoteConfig(remotePlugins):runtime.applyRemoteConfigDefaults(),kernel}async function resolveRemotePlugins(opts,fetcher){let baked=readBakedPlugins();if(baked)return baked;let remoteConfig=await fetchRemoteConfig(resolveTargets(opts.apiHost).config,fetcher);return remoteConfig?.ingestUrl&&setIngestHost(remoteConfig.ingestUrl),remoteConfig?.plugins??null}async function wireOtel(kernel,targets,wrapperVersions,tracing){let{buildOtelProvider,captureWebVitals,createPageScopeRotator,installNavigationScope,PAGE_SCOPE_MAX_AGE_MS,readPropagationFromDocument,registerBundledInstrumentations,seedPageScope}=await import(`./internal/otel/index.mjs`),releaseSlug=readReleaseSlugFromGlobals(),handle=buildOtelProvider(omitUndefined({clientOptions:targets.ingest,getDeviceId:()=>kernel.device.getDeviceId(),getSessionId:()=>kernel.session.getId(),getPropagationSessionId:()=>kernel.consent.get()?.analytics===!1?null:kernel.session.getId(),isDeviceInfoEnabled:()=>kernel.isDeviceInfoCaptureEnabled(),releaseSlug,sdkStack:buildSdkStack(wrapperVersions),serviceName:tracing.serviceName||void 0,serviceNamespace:tracing.serviceNamespace,additionalSpanProcessors:[...tracing.spanProcessors??[],...tracing.additionalSpanProcessors??[]],additionalLogRecordProcessors:tracing.additionalLogRecordProcessors,additionalMetricReaders:tracing.additionalMetricReaders,urlRedaction:kernel.urlRedaction})),scopeSpanInput=omitUndefined({tracer:handle.tracerProvider.getTracer(`@interfere/react/navigation`),resolveRoute:tracing.resolveRoute}),extracted=readPropagationFromDocument();handle.contextManager.setPageScope(extracted??seedPageScope(scopeSpanInput)),handle.contextManager.setRotation(createPageScopeRotator(scopeSpanInput),PAGE_SCOPE_MAX_AGE_MS);let disposeNavigationScope=installNavigationScope({...scopeSpanInput,setPageScope:ctx=>{handle.contextManager.setPageScope(ctx)}}),instrumentations=registerBundledInstrumentations(omitUndefined({tracerProvider:handle.tracerProvider,loggerProvider:handle.loggerProvider,ignoreUrls:[INGEST_IGNORE_RE,`${targets.config.baseUrl}/v3/config`,`${targets.ingest.baseUrl}/v3/session`,REPLAY_UPLOAD_RE],apiHosts:tracing.apiHosts,propagateContextUrls:tracing.propagateContextUrls,resolveRoute:tracing.resolveRoute,captureFailedRequests:tracing.captureFailedRequests,redactUrl:kernel.redactUrl,privacyPolicy:kernel.privacyPolicy,isInteractionCaptureEnabled:()=>kernel.isInteractionCaptureEnabled()}));tracing.webVitals!==!1&&captureWebVitals(omitUndefined({flush:async()=>handle.flush(),meter:handle.meterProvider.getMeter(`@interfere/react/web-vitals`),resolveRoute:tracing.resolveRoute})),kernel.attachOtel(handle,()=>{disposeNavigationScope(),instrumentations.dispose()},{setPageEventsEnabled:instrumentations.setPageEventsEnabled})}async function fetchRemoteConfig(configTarget,fetcher){try{let client=new InterfereClient({...configTarget,fetch:Object.assign(async(url,init)=>fetcher(url,{...init,credentials:`omit`}),fetcher)});return remoteConfigInputSchema.parse(await client.config.getSdkConfig())}catch{return log.warn(`remote config fetch failed, using local defaults`),null}}function readReleaseSlugFromGlobals(){let value=getGlobal(RELEASE_SLUG_GLOBAL);return typeof value==`string`?releaseSlugSchema.parse(value):null}export{readReleaseSlugFromGlobals as i,buildSdkStack as n,createKernel as r,Kernel as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as createLogger}from"./log-D6Ht--tv.mjs";const log=createLogger(`kernel-registry`);let active=null;function registerKernel(kernel){active&&active!==kernel&&log.warn(`init() called twice with different kernels; later one wins. The public capture()/span() helpers route only to the latest kernel — multi-surface apps should call kernel.recordException() directly.`),active=kernel}function unregisterKernel(kernel){active===kernel&&(active=null)}function activeKernel(){return active}export{registerKernel as n,unregisterKernel as r,activeKernel as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as createLogger}from"./log-D6Ht--tv.mjs";import{t as errorsPlugin}from"./errors-BDmCWb5z.mjs";import{PLUGIN_MANIFEST}from"@interfere/types/sdk/plugins/manifest";const log=createLogger(`plugins`),LOADERS={device:async()=>import(`./plugins/device.mjs`),errors:()=>errorsPlugin,logs:async()=>import(`./plugins/logs.mjs`),pageEvents:async()=>import(`./plugins/page-events.mjs`),rageClick:async()=>import(`./plugins/rage-clicks.mjs`),replay:async()=>import(`./plugins/replay/index.mjs`)},DEFAULTS=Object.fromEntries(PLUGIN_MANIFEST.map(p=>[p.name,p.defaultEnabled]));function resolveFeatures(overrides){if(!overrides)return{...DEFAULTS};let{pageEvents,replay,...rest}=overrides;return{...DEFAULTS,...rest,pageEvents:pageEvents===void 0?DEFAULTS.pageEvents:pageEvents!==!1,replay:replay===void 0?DEFAULTS.replay:replay!==!1}}function resolvePlugin(mod){return`default`in mod?mod.default:mod}async function loadPlugin(key,context){let loader=LOADERS[key];if(loader===void 0)return null;try{let cleanup=resolvePlugin(await loader()).setup(context);return log.debug(`loaded %s`,key),cleanup??null}catch{return log.error(`failed to load plugin %s`,key),null}}export{loadPlugin as n,resolveFeatures as r,LOADERS as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const PRIORITY={debug:0,error:3,info:1,none:4,warn:2},CONSOLE_FN={debug:`debug`,error:`error`,info:`info`,warn:`warn`};let currentLevel=`warn`;function setLogLevel(level){currentLevel=level}function getLogLevel(){return currentLevel}function emit(level,prefix,args){if(PRIORITY[level]<PRIORITY[currentLevel])return;let fn=CONSOLE_FN[level];globalThis.console[fn](prefix,...args)}function createLogger(scope){let prefix=`[Interfere:${scope}]`;return{debug:(...args)=>{emit(`debug`,prefix,args)},error:(...args)=>{emit(`error`,prefix,args)},info:(...args)=>{emit(`info`,prefix,args)},warn:(...args)=>{emit(`warn`,prefix,args)}}}export{getLogLevel as n,setLogLevel as r,createLogger as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{i as stampUrlAttrs}from"./url-attrs-BdcyE2n6.mjs";import{ROOT_CONTEXT,trace}from"@opentelemetry/api";const PAGE_SCOPE_MAX_AGE_MS=18e5;function startScopeContext(input,trigger,options={}){let span=input.tracer.startSpan(`navigation`,{...options,attributes:{"navigation.trigger":trigger}},ROOT_CONTEXT);return stampUrlAttrs(span,input.resolveRoute),span.end(),trace.setSpan(ROOT_CONTEXT,span)}function seedPageScope(input){return startScopeContext(input,`pageload`,{startTime:0})}function createPageScopeRotator(input){return(previous=>{let previousSpan=trace.getSpan(previous);return startScopeContext(input,`max_age`,{links:previousSpan?[{context:previousSpan.spanContext()}]:[]})})}function comparableHref(href){let url=new URL(href),pathname=url.pathname!==`/`&&url.pathname.endsWith(`/`)?url.pathname.slice(0,-1):url.pathname;return`${url.origin}${pathname}${url.search}`}function installNavigationScope(input){if(typeof window>`u`)return(()=>{});let lastHref=comparableHref(globalThis.location.href),onNavigate=trigger=>{let current=comparableHref(globalThis.location.href);current!==lastHref&&(lastHref=current,input.setPageScope(startScopeContext(input,trigger)))},originalPushState=globalThis.history.pushState,originalReplaceState=globalThis.history.replaceState;globalThis.history.pushState=function(...args){originalPushState.apply(this,args),onNavigate(`push`)},globalThis.history.replaceState=function(...args){originalReplaceState.apply(this,args),onNavigate(`replace`)};let onPopstate=()=>{onNavigate(`popstate`)};return globalThis.addEventListener(`popstate`,onPopstate),(()=>{globalThis.history.pushState=originalPushState,globalThis.history.replaceState=originalReplaceState,globalThis.removeEventListener(`popstate`,onPopstate)})}export{seedPageScope as i,createPageScopeRotator as n,installNavigationScope as r,PAGE_SCOPE_MAX_AGE_MS as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const UUID_SEGMENT_RE=/[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}/gu,LONG_HEX_RE=/[0-9a-fA-F]{16,}/gu,DIGIT_RUN_RE=/[0-9]{2,}/gu;function normalizePath(pathname){return pathname.replaceAll(UUID_SEGMENT_RE,`{id}`).replaceAll(LONG_HEX_RE,`{hash}`).replaceAll(DIGIT_RUN_RE,`{n}`)}export{normalizePath as t};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
//#region src/plugins/page-events-config.d.ts
|
|
2
|
+
interface PageEventsConfig {
|
|
3
|
+
/**
|
|
4
|
+
* `false` stops click and submit capture while navigation, document-load
|
|
5
|
+
* and resource timing continue. Defaults to `true`.
|
|
6
|
+
*/
|
|
7
|
+
interactions?: boolean;
|
|
8
|
+
}
|
|
9
|
+
/** `true` enables page events, `false` disables them, and an object enables them with that config. */
|
|
10
|
+
type PageEventsOption = boolean | PageEventsConfig;
|
|
11
|
+
//#endregion
|
|
12
|
+
export { PageEventsOption as n, PageEventsConfig as t };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const hiddenHandlers=new Set,shownHandlers=new Set;let installed=!1;function fire(set){for(let handler of set)handler()}function fireHidden(){fire(hiddenHandlers)}function fireShown(){fire(shownHandlers)}function onVisibilityChange(){if(!(typeof document>`u`)){if(document.visibilityState===`hidden`){fireHidden();return}fireShown()}}function install(){installed||typeof globalThis.addEventListener!=`function`||(installed=!0,globalThis.addEventListener(`visibilitychange`,onVisibilityChange),globalThis.addEventListener(`beforeunload`,fireHidden))}function onPageHidden(handler){return install(),hiddenHandlers.add(handler),(()=>{hiddenHandlers.delete(handler)})}function onPageShown(handler){return install(),shownHandlers.add(handler),(()=>{shownHandlers.delete(handler)})}function resetPageLifecycleForTests(){hiddenHandlers.clear(),shownHandlers.clear(),installed&&typeof globalThis.removeEventListener==`function`&&(globalThis.removeEventListener(`visibilitychange`,onVisibilityChange),globalThis.removeEventListener(`beforeunload`,fireHidden)),installed=!1}export{
|
|
1
|
+
const hiddenHandlers=new Set,shownHandlers=new Set;let installed=!1;function fire(set){for(let handler of set)handler()}function fireHidden(){fire(hiddenHandlers)}function fireShown(){fire(shownHandlers)}function onVisibilityChange(){if(!(typeof document>`u`)){if(document.visibilityState===`hidden`){fireHidden();return}fireShown()}}function install(){installed||typeof globalThis.addEventListener!=`function`||(installed=!0,globalThis.addEventListener(`visibilitychange`,onVisibilityChange),globalThis.addEventListener(`beforeunload`,fireHidden))}function onPageHidden(handler){return install(),hiddenHandlers.add(handler),(()=>{hiddenHandlers.delete(handler)})}function onPageShown(handler){return install(),shownHandlers.add(handler),(()=>{shownHandlers.delete(handler)})}function resetPageLifecycleForTests(){hiddenHandlers.clear(),shownHandlers.clear(),installed&&typeof globalThis.removeEventListener==`function`&&(globalThis.removeEventListener(`visibilitychange`,onVisibilityChange),globalThis.removeEventListener(`beforeunload`,fireHidden)),installed=!1}export{onPageShown as n,resetPageLifecycleForTests as r,onPageHidden as t};
|