@interfere/react 12.1.4 → 12.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{activity-D18VXGTn.mjs → activity-BYnL3bX-.mjs} +1 -1
- package/dist/{api-DXmjUMZE.mjs → api-BUYnj5MA.mjs} +1 -1
- package/dist/{chunking-Dvs3f50A.d.mts → chunking-OfmdRxfq.d.mts} +1 -1
- package/dist/{compressor-host-BAz6860r.d.mts → compressor-host-D3At2PKg.d.mts} +1 -1
- package/dist/{config-q16LFWj0.d.mts → config-BTWtCcDP.d.mts} +1 -1
- package/dist/{config-DEOvGbf0.mjs → config-VOyDjqS7.mjs} +1 -1
- package/dist/delivery-_q1bkaIt.mjs +1 -0
- package/dist/{environment-_LKcAXKG.d.mts → environment-CtCFKD2N.d.mts} +1 -1
- package/dist/error-boundary.d.mts +1 -1
- package/dist/{errors-BDmCWb5z.mjs → errors-BfUmjgWO.mjs} +1 -1
- package/dist/exception-span-B74fhBQb.mjs +1 -0
- package/dist/exception-span-zN1tvBdh.d.mts +46 -0
- package/dist/exporter-D6Ld-TFZ.mjs +1 -0
- package/dist/index-BZ_yQUGY.d.mts +4 -0
- package/dist/{instrumentations-CpTaahVx.d.mts → instrumentations-D656I08h.d.mts} +1 -1
- package/dist/internal/activity/activity.mjs +1 -1
- package/dist/internal/{browser-context.d.mts → browser-context/browser-context.d.mts} +1 -1
- package/dist/internal/browser-context/browser-context.mjs +1 -0
- package/dist/internal/{capture-boundary.d.mts → capture/capture-boundary.d.mts} +2 -2
- package/dist/internal/capture/capture-boundary.mjs +1 -0
- package/dist/internal/{capture.d.mts → capture/capture.d.mts} +2 -2
- package/dist/internal/capture/capture.mjs +1 -0
- package/dist/internal/capture/exception-span.d.mts +2 -0
- package/dist/internal/capture/exception-span.mjs +1 -0
- package/dist/internal/{config.d.mts → config/config.d.mts} +1 -1
- package/dist/internal/config/config.mjs +1 -0
- package/dist/internal/{consent.d.mts → consent/consent.d.mts} +1 -1
- package/dist/internal/consent/consent.mjs +1 -0
- package/dist/internal/{console-patch.d.mts → console-patch/console-patch.d.mts} +1 -1
- package/dist/internal/console-patch/console-patch.mjs +1 -0
- package/dist/internal/{device-metadata.d.mts → device-metadata/device-metadata.d.mts} +1 -1
- package/dist/internal/device-metadata/device-metadata.mjs +1 -0
- package/dist/internal/environment/environment.d.mts +2 -0
- package/dist/internal/environment/environment.mjs +1 -0
- package/dist/internal/{event-capabilities.d.mts → event-capabilities/event-capabilities.d.mts} +1 -1
- package/dist/internal/event-capabilities/event-capabilities.mjs +1 -0
- package/dist/internal/{hydration.d.mts → hydration/hydration.d.mts} +1 -1
- package/dist/internal/hydration/hydration.mjs +1 -0
- package/dist/internal/kernel-registry.d.mts +1 -1
- package/dist/internal/kernel.d.mts +5 -4
- package/dist/internal/kernel.mjs +1 -1
- package/dist/internal/otel/exporter.mjs +1 -1
- package/dist/internal/otel/index.d.mts +2 -2
- package/dist/internal/otel/index.mjs +1 -1
- package/dist/internal/otel/{instrumentations.d.mts → instrumentations/instrumentations.d.mts} +1 -1
- package/dist/internal/otel/instrumentations/instrumentations.mjs +1 -0
- package/dist/internal/otel/provider.mjs +1 -1
- package/dist/internal/page-lifecycle/keepalive-budget.d.mts +6 -0
- package/dist/internal/page-lifecycle/keepalive-budget.mjs +1 -0
- package/dist/internal/page-lifecycle/page-lifecycle.d.mts +2 -0
- package/dist/internal/page-lifecycle/page-lifecycle.mjs +1 -1
- package/dist/internal/plugins/plugin-runtime.d.mts +1 -1
- package/dist/internal/plugins/plugin-runtime.mjs +1 -1
- package/dist/internal/react-context.d.mts +1 -1
- package/dist/internal/{server-digest.d.mts → server-digest/server-digest.d.mts} +1 -1
- package/dist/internal/server-digest/server-digest.mjs +1 -0
- package/dist/internal/sw-queue.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/keepalive-budget-DeafGnVZ.mjs +1 -0
- package/dist/kernel-D52QMtA9.mjs +1 -0
- package/dist/{loader-BGwWwN2n.mjs → loader-DIaWtHND.mjs} +1 -1
- package/dist/page-lifecycle-DTWqGlz2.mjs +1 -0
- package/dist/{plugin-runtime-CnFVGbJw.mjs → plugin-runtime-B1oFO16q.mjs} +1 -1
- package/dist/plugins/device.d.mts +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.d.mts +1 -1
- package/dist/plugins/rage-clicks.d.mts +1 -1
- package/dist/plugins/replay/{buffer.d.mts → chunking/buffer.d.mts} +2 -2
- package/dist/plugins/replay/chunking/buffer.mjs +1 -0
- package/dist/plugins/replay/{chunking.d.mts → chunking/chunking.d.mts} +1 -1
- package/dist/plugins/replay/chunking/chunking.mjs +1 -0
- package/dist/plugins/replay/compression/compressor-host.d.mts +2 -0
- package/dist/plugins/replay/compression/compressor-host.mjs +1 -0
- package/dist/plugins/replay/compression/unload-gzip.d.mts +4 -0
- package/dist/plugins/replay/compression/unload-gzip.mjs +1 -0
- package/dist/plugins/replay/index.d.mts +1 -1
- package/dist/plugins/replay/index.mjs +1 -1
- package/dist/plugins/replay/{recorder.d.mts → recorder/recorder.d.mts} +2 -2
- package/dist/plugins/replay/recorder/recorder.mjs +1 -0
- package/dist/plugins/replay/{redact-urls.d.mts → recorder/redact-urls.d.mts} +1 -1
- package/dist/plugins/replay/recorder/redact-urls.mjs +1 -0
- package/dist/plugins/replay/{sequence.d.mts → sequence/sequence.d.mts} +1 -1
- package/dist/plugins/replay/sequence/sequence.mjs +1 -0
- package/dist/plugins/replay/upload/delivery.d.mts +22 -0
- package/dist/plugins/replay/upload/delivery.mjs +1 -0
- package/dist/plugins/replay/upload/upload.d.mts +7 -0
- package/dist/plugins/replay/upload/upload.mjs +1 -0
- package/dist/{provider-Bf-3zWmH.mjs → provider-BMoWBbsK.mjs} +1 -1
- package/dist/{provider-D42pbUQM.d.mts → provider-DIp7vkKd.d.mts} +21 -47
- package/dist/provider.d.mts +1 -1
- package/dist/react-error-handler.d.mts +1 -1
- package/dist/session-retry-C2Uh7eZ6.mjs +1 -0
- package/dist/tracking/api.mjs +1 -1
- package/dist/tracking/registration.fixture.mjs +2 -2
- package/dist/tracking/session-retry.mjs +1 -1
- package/dist/unload-gzip-WX9FyWPs.mjs +1 -0
- package/dist/upload-BIh8Q5UQ.mjs +1 -0
- package/dist/{version-C0rHKBtn.mjs → version-CSFECZRw.mjs} +1 -1
- package/package.json +5 -5
- package/dist/delivery-DehIJWRh.mjs +0 -1
- package/dist/exporter-Dk_xXSBC.mjs +0 -1
- package/dist/index-BQDRTFUY.d.mts +0 -4
- package/dist/internal/browser-context.mjs +0 -1
- package/dist/internal/capture-boundary.mjs +0 -1
- package/dist/internal/capture.mjs +0 -1
- package/dist/internal/config.mjs +0 -1
- package/dist/internal/consent.mjs +0 -1
- package/dist/internal/console-patch.mjs +0 -1
- package/dist/internal/device-metadata.mjs +0 -1
- package/dist/internal/environment.d.mts +0 -2
- package/dist/internal/environment.mjs +0 -1
- package/dist/internal/event-capabilities.mjs +0 -1
- package/dist/internal/hydration.mjs +0 -1
- package/dist/internal/otel/instrumentations.mjs +0 -1
- package/dist/internal/server-digest.mjs +0 -1
- package/dist/kernel-B5l5-P1k.mjs +0 -1
- package/dist/page-lifecycle-BhSFqjlK.mjs +0 -1
- package/dist/plugins/replay/buffer.mjs +0 -1
- package/dist/plugins/replay/chunking.mjs +0 -1
- package/dist/plugins/replay/compressor-host.d.mts +0 -2
- package/dist/plugins/replay/compressor-host.mjs +0 -1
- package/dist/plugins/replay/delivery.d.mts +0 -20
- package/dist/plugins/replay/delivery.mjs +0 -1
- package/dist/plugins/replay/recorder.mjs +0 -1
- package/dist/plugins/replay/redact-urls.mjs +0 -1
- package/dist/plugins/replay/sequence.mjs +0 -1
- package/dist/plugins/replay/upload.d.mts +0 -4
- package/dist/plugins/replay/upload.mjs +0 -1
- package/dist/session-retry-DJHvfDaO.mjs +0 -1
- package/dist/upload-BPaD3YcA.mjs +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@interfere/react",
|
|
3
|
-
"version": "12.
|
|
3
|
+
"version": "12.2.0",
|
|
4
4
|
"description": "Client-side React SDK for Interfere. Error tracking, session replay, and analytics.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"error-tracking",
|
|
@@ -93,10 +93,10 @@
|
|
|
93
93
|
},
|
|
94
94
|
"dependencies": {
|
|
95
95
|
"@fingerprintjs/fingerprintjs": "5.2.0",
|
|
96
|
-
"@interfere/constants": "^9.
|
|
97
|
-
"@interfere/helpers": "^9.
|
|
96
|
+
"@interfere/constants": "^9.3.0",
|
|
97
|
+
"@interfere/helpers": "^9.3.0",
|
|
98
98
|
"@interfere/javascript": "^0.3.0",
|
|
99
|
-
"@interfere/types": "^10.
|
|
99
|
+
"@interfere/types": "^10.4.0",
|
|
100
100
|
"@opentelemetry/api": "1.9.1",
|
|
101
101
|
"@opentelemetry/api-logs": "0.222.0",
|
|
102
102
|
"@opentelemetry/context-zone": "2.11.0",
|
|
@@ -118,6 +118,7 @@
|
|
|
118
118
|
"@opentelemetry/web-common": "0.222.0",
|
|
119
119
|
"@rrweb/types": "2.1.1",
|
|
120
120
|
"@ua-parser-js/pro-enterprise": "2.0.10",
|
|
121
|
+
"fflate": "0.8.3",
|
|
121
122
|
"rrweb": "2.1.1",
|
|
122
123
|
"uuid": "14.0.2",
|
|
123
124
|
"web-vitals": "6.2.1",
|
|
@@ -138,7 +139,6 @@
|
|
|
138
139
|
"@vitest/browser-playwright": "5.0.5",
|
|
139
140
|
"@vitest/coverage-v8": "5.0.5",
|
|
140
141
|
"babel-plugin-react-compiler": "1.0.0",
|
|
141
|
-
"fflate": "0.8.3",
|
|
142
142
|
"msw": "2.15.0",
|
|
143
143
|
"playwright": "1.63.0",
|
|
144
144
|
"react": "19.3.0",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as createLogger}from"./log-D6Ht--tv.mjs";import{t as uploadReplayChunk}from"./upload-BPaD3YcA.mjs";import{trace}from"@opentelemetry/api";import{omitUndefined}from"@interfere/helpers/omit-undefined";const log=createLogger(`replay`),textEncoder=new TextEncoder;async function prepareBody(compressor,rawBytes){if(!compressor.gzip)return{body:rawBytes,encoding:null};try{return{body:await compressor.gzip(rawBytes),encoding:`gzip`}}catch(error){return log.warn(`gzip failed for chunk; sending uncompressed: %o`,error),{body:rawBytes,encoding:null}}}function encodeReplayMeta(chunk,payload){return btoa(JSON.stringify({activityCount:payload.activityCount,eventCount:payload.eventCount,firstTs:payload.firstTs,hasFullSnapshot:payload.hasFullSnapshot,lastTs:payload.lastTs,segmentId:chunk.segmentId,windowId:chunk.windowId}))}async function deliverChunk({ctx,chunk,target,compressor,payload,skipCompression}){let sessionId=ctx.getSessionId();if(!sessionId)return`ok`;let rawBytes=textEncoder.encode(payload.bodyJson),uncompressedBytes=rawBytes.byteLength,prepared=skipCompression?{body:rawBytes,encoding:null}:await prepareBody(compressor,rawBytes),headers={"x-replay-meta":encodeReplayMeta(chunk,payload)};prepared.encoding===`gzip`&&(headers[`content-encoding`]=`gzip`);let response;try{let upload=await uploadReplayChunk(target,sessionId,prepared.body,headers);if(!upload.ok)return await upload.body?.cancel(),upload.status>=400&&upload.status<500?`fatal`:`retryable`;response=await upload.json()}catch(error){return log.warn(`replay chunk upload failed: %o`,error),`retryable`}let objectKey=typeof response==`object`&&response&&`objectKey`in response&&typeof response.objectKey==`string`?response.objectKey:null,attributes=omitUndefined({"replay.chunk.size_bytes":uncompressedBytes,"replay.chunk.event_count":payload.eventCount,"replay.chunk.uri":objectKey||void 0,"replay.chunk.compressed_bytes":prepared.encoding===`gzip`?prepared.body.byteLength:void 0,"replay.chunk.first_event_ts":payload.firstTs??void 0,"replay.chunk.last_event_ts":payload.lastTs??void 0});return trace.getTracer(`@interfere/react/replay`).startSpan(`replay.chunk`,{attributes}).end(),`ok`}export{deliverChunk as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as PRODUCER_VERSION}from"./version-C0rHKBtn.mjs";import{t as IngestLogExporter}from"./exporter-logs-DS2AXWnV.mjs";import{t as IngestMetricExporter}from"./exporter-metrics-DZYqUo6_.mjs";import{toError}from"@interfere/types/sdk/errors";import{InterfereClient,InterfereError}from"@interfere/javascript";import{TELEMETRY_EXPORT_TIMEOUT_MS,retryTelemetry}from"@interfere/helpers/retry-telemetry";import{ExportResultCode}from"@opentelemetry/core";import{JsonTraceSerializer}from"@opentelemetry/otlp-transformer";import{z}from"zod";const INGEST_IGNORE_RE=/\/drain\/v1\/(?:traces|logs|metrics)(?:\?|$)/u;let ingestHalted=!1,consecutiveAuthRejections=0;function resetIngestHalt(){ingestHalted=!1,consecutiveAuthRejections=0}function isIngestHalted(){return ingestHalted}const textEncoder=new TextEncoder;let keepaliveBodyBytes=0;function detectUnacceptableExport(error){if(ingestHalted||error.statusCode!==422&&error.statusCode!==401)return;let body=error.body;if(typeof body==`object`&&body&&`code`in body){if(error.statusCode===422&&body.code===`RELEASE_NOT_FOUND`){ingestHalted=!0,console.warn(`[interfere] the ingest endpoint does not recognize this build's release. Telemetry export is disabled for this page load. Check that source-map upload and finalization succeeded and that build and runtime use the same surface key.`);return}if(error.statusCode===401&&body.code===`AUTH_PK_INVALID`){if(consecutiveAuthRejections+=1,consecutiveAuthRejections<3)return;ingestHalted=!0,console.warn(`[interfere] the ingest endpoint rejected this page's public key ${consecutiveAuthRejections} times in a row — telemetry export is disabled for this page load. Check that INTERFERE_PUBLIC_KEY matches an active surface.`)}}}function makeSender(input,signal){let client=new InterfereClient({...input.clientOptions,maxRetries:0,timeoutInSeconds:TELEMETRY_EXPORT_TIMEOUT_MS/1e3,fetch:Object.assign(async(url,init)=>{let body=init?.body,bytes=typeof body==`string`?textEncoder.encode(body).byteLength:0,keepalive=keepaliveBodyBytes+bytes<=6e4;keepalive&&(keepaliveBodyBytes+=bytes);try{return await retryTelemetry(async abortSignal=>globalThis.fetch(url,{...init,credentials:`omit`,keepalive,signal:abortSignal}),init?.signal)}finally{keepalive&&(keepaliveBodyBytes-=bytes)}},globalThis.fetch)});return((payload,resultCallback)=>{if(!payload||payload.byteLength===0){resultCallback({code:ExportResultCode.SUCCESS});return}if(ingestHalted){resultCallback({code:ExportResultCode.FAILED,error:Error(`ingest halted: the ingest endpoint rejected this build's release`)});return}(async()=>{try{let body=z.record(z.string(),z.unknown()).parse(JSON.parse(new TextDecoder().decode(payload)));await client.drain.otlpExport({signal,body},{headers:{"x-interfere-producer-version":PRODUCER_VERSION}}),consecutiveAuthRejections=0,resultCallback({code:ExportResultCode.SUCCESS})}catch(error){error instanceof InterfereError&&detectUnacceptableExport(error),resultCallback({code:ExportResultCode.FAILED,error:toError(error)})}})()})}var IngestTraceExporter=class{send;constructor(send){this.send=send}export(spans,resultCallback){if(spans.length===0){resultCallback({code:ExportResultCode.SUCCESS});return}this.send(JsonTraceSerializer.serializeRequest(spans),resultCallback)}async shutdown(){return Promise.resolve()}async forceFlush(){return Promise.resolve()}};function createTraceExporter(input){return new IngestTraceExporter(makeSender(input,`traces`))}function createMetricExporter(input,gatedResourceAttributes){return new IngestMetricExporter(makeSender(input,`metrics`),gatedResourceAttributes)}function createLogExporter(input){return new IngestLogExporter(makeSender(input,`logs`))}export{isIngestHalted as a,createTraceExporter as i,createLogExporter as n,resetIngestHalt as o,createMetricExporter as r,INGEST_IGNORE_RE as t};
|
|
@@ -1 +0,0 @@
|
|
|
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 +0,0 @@
|
|
|
1
|
-
"use client";import{t as CaptureBoundary}from"../capture-boundary-Cz0jO-y5.mjs";export{CaptureBoundary};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as captureReactError}from"../capture-BV2RlsYg.mjs";export{captureReactError};
|
package/dist/internal/config.mjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{i as setIngestHost,n as isForceEnableActive,r as resolveTargets,t as hasPublicKey}from"../config-DEOvGbf0.mjs";export{hasPublicKey,isForceEnableActive,resolveTargets,setIngestHost};
|
|
@@ -1 +0,0 @@
|
|
|
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 +0,0 @@
|
|
|
1
|
-
import{n as onConsoleCall,r as resetConsolePatchForTests,t as CONSOLE_LEVELS}from"../console-patch-WNKoLE7U.mjs";export{CONSOLE_LEVELS,onConsoleCall,resetConsolePatchForTests};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as deviceMetadata}from"../device-metadata-Ffi__vup.mjs";export{deviceMetadata};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{n as isEnvironmentEnabled,t as isEnabledByEnvironment}from"../environment-CoEXhF1a.mjs";export{isEnabledByEnvironment,isEnvironmentEnabled};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as hasEventListenerPair}from"../event-capabilities-Dd0Hoaq2.mjs";export{hasEventListenerPair};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as isHydrationError}from"../hydration-BIp2cKhz.mjs";export{isHydrationError};
|
|
@@ -1 +0,0 @@
|
|
|
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 +0,0 @@
|
|
|
1
|
-
import{t as hasServerDigest}from"../server-digest-CzGdvjW1.mjs";export{hasServerDigest};
|
package/dist/kernel-B5l5-P1k.mjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as createLogger}from"./log-D6Ht--tv.mjs";import{t as getGlobal}from"./global-DYq1Z4_H.mjs";import{i as setIngestHost,r as resolveTargets}from"./config-DEOvGbf0.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-C0rHKBtn.mjs";import{t as INGEST_IGNORE_RE}from"./exporter-Dk_xXSBC.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};
|
|
@@ -1 +0,0 @@
|
|
|
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};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as createReplayBuffer}from"../../buffer-BRn_kSm-.mjs";export{createReplayBuffer};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{i as utf8ByteLength,n as splitReplayEvents,r as toReplayChunkPayload,t as classifyReplayEvent}from"../../chunking-qZffPbyY.mjs";export{classifyReplayEvent,splitReplayEvents,toReplayChunkPayload,utf8ByteLength};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as createCompressor}from"../../compressor-host-CrKngamF.mjs";export{createCompressor};
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { D as PluginContext } from "../../provider-D42pbUQM.mjs";
|
|
2
|
-
import { r as resolveTargets } from "../../config-q16LFWj0.mjs";
|
|
3
|
-
import { n as ReplayChunkPayload } from "../../chunking-Dvs3f50A.mjs";
|
|
4
|
-
import { t as Compressor } from "../../compressor-host-BAz6860r.mjs";
|
|
5
|
-
//#region src/plugins/replay/delivery.d.ts
|
|
6
|
-
export type DeliverResult = "ok" | "retryable" | "fatal";
|
|
7
|
-
export interface ReplayChunkRef {
|
|
8
|
-
segmentId: number;
|
|
9
|
-
windowId: string;
|
|
10
|
-
}
|
|
11
|
-
export interface DeliverInput {
|
|
12
|
-
target: ReturnType<typeof resolveTargets>["ingest"];
|
|
13
|
-
chunk: ReplayChunkRef;
|
|
14
|
-
compressor: Compressor;
|
|
15
|
-
ctx: PluginContext;
|
|
16
|
-
payload: ReplayChunkPayload;
|
|
17
|
-
skipCompression: boolean;
|
|
18
|
-
}
|
|
19
|
-
export declare function deliverChunk({ ctx, chunk, target, compressor, payload, skipCompression }: DeliverInput): Promise<"fatal" | "ok" | "retryable">;
|
|
20
|
-
//#endregion
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as deliverChunk}from"../../delivery-DehIJWRh.mjs";export{deliverChunk};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as startReplayRecorder}from"../../recorder-CM6Ae_0S.mjs";export{startReplayRecorder};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as redactReplayEvent}from"../../redact-urls-CwFod9d4.mjs";export{redactReplayEvent};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as createSegmentSequence}from"../../sequence-B4dYChb0.mjs";export{createSegmentSequence};
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import { r as resolveTargets } from "../../config-q16LFWj0.mjs";
|
|
2
|
-
//#region src/plugins/replay/upload.d.ts
|
|
3
|
-
export declare function uploadReplayChunk(target: ReturnType<typeof resolveTargets>["ingest"], sessionId: string, body: Uint8Array<ArrayBuffer>, headers: Record<string, string>): Promise<Response>;
|
|
4
|
-
//#endregion
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as uploadReplayChunk}from"../../upload-BPaD3YcA.mjs";export{uploadReplayChunk};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
const RETRY_DELAYS_MS=[5e3,15e3];var SessionRetry=class{timer=null;attempts=0;cancel(){this.timer!==null&&(clearTimeout(this.timer),this.timer=null)}reset(){this.cancel(),this.attempts=0}schedule(error,retry){let status=error.statusCode,transient=status===void 0||status===408||status===429||status>=500&&status<600,delay=RETRY_DELAYS_MS[this.attempts];transient&&delay!==void 0&&this.timer===null&&(this.attempts+=1,this.timer=setTimeout(()=>{this.timer=null,retry()},delay))}};export{SessionRetry as t};
|
package/dist/upload-BPaD3YcA.mjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
async function uploadReplayChunk(target,sessionId,body,headers){let requestHeaders=new Headers(target.headers);target.publicKeyHeader&&requestHeaders.set(`x-interfere-public-key`,target.publicKeyHeader.apiKey);for(let[name,value]of Object.entries(headers))requestHeaders.set(name,value);return requestHeaders.set(`content-type`,`application/octet-stream`),fetch(new URL(`/v3/replay/upload/${encodeURIComponent(sessionId)}`,target.baseUrl),{method:`POST`,credentials:`omit`,headers:requestHeaders,body:new Blob([body]),signal:AbortSignal.timeout(target.timeoutInSeconds*1e3)})}export{uploadReplayChunk as t};
|