@pydantic/logfire-session-replay 0.4.0 → 0.5.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 +40 -0
- package/dist/{index-DARiwDKI.d.cts → index-CGSeVpsY.d.cts} +30 -1
- package/dist/{index-DARiwDKI.d.ts → index-CGSeVpsY.d.ts} +30 -1
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/dist/integration.d.cts +1 -1
- package/dist/integration.d.ts +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -197,6 +197,46 @@ Security Policy blocks fflate's worker compressor, replay retries the same batch
|
|
|
197
197
|
with synchronous gzip and remembers the fallback for that replay controller.
|
|
198
198
|
This preserves the batch, but compression may briefly use the main thread.
|
|
199
199
|
|
|
200
|
+
## Upload Failures
|
|
201
|
+
|
|
202
|
+
Ordinary uploads wait in an in-memory queue and are sent in sequence order.
|
|
203
|
+
Network errors, timeouts, `408`, `425`, `429`, and `5xx` responses are retried
|
|
204
|
+
with the same sequence number and the same compressed bytes. The backoff starts
|
|
205
|
+
at 500 ms, doubles up to 8 s, and uses jitter. Each chunk has a 30-second retry
|
|
206
|
+
budget that includes the time of its requests. `Retry-After` on `429` and `503`
|
|
207
|
+
can lengthen a wait, never shorten it, and is honored while it fits that budget.
|
|
208
|
+
Other `4xx` responses are not retried. The receiver must accept a repeated
|
|
209
|
+
`(sessionId, seq)` as the same chunk, because a retry can follow a request that
|
|
210
|
+
the server stored but whose response was lost.
|
|
211
|
+
|
|
212
|
+
The queue holds at most 2,000,000 bytes, or twice `maxBufferBytes` when that is
|
|
213
|
+
larger. It counts uncompressed events until they are compressed, and compressed
|
|
214
|
+
bodies afterwards. An empty queue always admits the next batch, even when that
|
|
215
|
+
batch is larger than the limit, because an initial full snapshot can exceed it
|
|
216
|
+
and must not be lost. Otherwise, a batch that does not fit is discarded without
|
|
217
|
+
a sequence number, and the chunks already queued are still delivered.
|
|
218
|
+
|
|
219
|
+
A lost chunk is reported to `onError` as a `ReplayUploadError`:
|
|
220
|
+
|
|
221
|
+
- `reason`: `'unconfirmed'` when retries ran out after a request reached the
|
|
222
|
+
network (the server may still hold the chunk), `'rejected'` for a terminal
|
|
223
|
+
HTTP status, or `'not-sent'` when no request left the browser (full queue,
|
|
224
|
+
compression failure, or a failing `headers` or `token` callback).
|
|
225
|
+
- `seq`: the lost chunk, or `undefined` for a batch the full queue rejected.
|
|
226
|
+
- `droppedSeqs`: later chunks that were discarded without upload because they
|
|
227
|
+
depended on the lost one.
|
|
228
|
+
- `status`, `sessionId`, and `cause`.
|
|
229
|
+
|
|
230
|
+
After a loss, replay discards the events that depend on the missing DOM state
|
|
231
|
+
and takes a fresh full snapshot, so playback resumes correctly after the gap.
|
|
232
|
+
Chunks that already start from a later full snapshot are kept. Replay takes at
|
|
233
|
+
most one of these recovery snapshots per minute.
|
|
234
|
+
|
|
235
|
+
`stop()` gives each unsent chunk one last attempt and resolves within about 10
|
|
236
|
+
seconds, even when uploads hang. The queue lives in memory only: chunks that are
|
|
237
|
+
still queued when the page closes or reloads are lost, and a reloaded page does
|
|
238
|
+
not retry them.
|
|
239
|
+
|
|
200
240
|
## Privacy
|
|
201
241
|
|
|
202
242
|
The recorder masks all rendered text and input values by default
|
|
@@ -157,6 +157,35 @@ interface SessionReplayConfig {
|
|
|
157
157
|
random?: () => number;
|
|
158
158
|
}
|
|
159
159
|
//#endregion
|
|
160
|
+
//#region src/uploadError.d.ts
|
|
161
|
+
/**
|
|
162
|
+
* - `unconfirmed`: retries ended after a request reached the network; the server may hold the chunk.
|
|
163
|
+
* - `rejected`: the server answered with a terminal HTTP status.
|
|
164
|
+
* - `not-sent`: no request reached the network (queue full, compression, headers or token failed).
|
|
165
|
+
*/
|
|
166
|
+
type ReplayUploadFailureReason = "unconfirmed" | "rejected" | "not-sent";
|
|
167
|
+
interface ReplayUploadErrorInit {
|
|
168
|
+
cause: unknown;
|
|
169
|
+
droppedSeqs?: readonly number[];
|
|
170
|
+
reason: ReplayUploadFailureReason;
|
|
171
|
+
seq: number | undefined;
|
|
172
|
+
sessionId: string;
|
|
173
|
+
status?: number | undefined;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Reported through `onError` when a replay chunk is not confirmed by the server.
|
|
177
|
+
* Recording continues from a fresh full snapshot, so `droppedSeqs` lists the
|
|
178
|
+
* later chunks that were discarded because they depended on the lost one.
|
|
179
|
+
*/
|
|
180
|
+
declare class ReplayUploadError extends Error {
|
|
181
|
+
readonly droppedSeqs: readonly number[];
|
|
182
|
+
readonly reason: ReplayUploadFailureReason;
|
|
183
|
+
readonly seq: number | undefined;
|
|
184
|
+
readonly sessionId: string;
|
|
185
|
+
readonly status: number | undefined;
|
|
186
|
+
constructor(init: ReplayUploadErrorInit);
|
|
187
|
+
}
|
|
188
|
+
//#endregion
|
|
160
189
|
//#region src/index.d.ts
|
|
161
190
|
interface SessionReplay {
|
|
162
191
|
readonly recording: boolean;
|
|
@@ -167,4 +196,4 @@ interface SessionReplay {
|
|
|
167
196
|
}
|
|
168
197
|
declare function startSessionReplay(config: SessionReplayConfig): SessionReplay;
|
|
169
198
|
//#endregion
|
|
170
|
-
export {
|
|
199
|
+
export { SessionReplayConfig as S, RrwebEvent as _, ReplayUploadFailureReason as a, SessionAttributes as b, ChunkMeta as c, EventType as d, IncrementalSource as f, ReplayUser as g, NetworkPayload as h, ReplayUploadErrorInit as i, ConsolePayload as l, NavigationPayload as m, startSessionReplay as n, CHUNK_ENVELOPE_VERSION as o, MouseInteractions as p, ReplayUploadError as r, ChunkEnvelope as s, SessionReplay as t, CustomTag as u, SamplingMode as v, SessionAttributesInput as x, SessionAttributeValue as y };
|
|
@@ -157,6 +157,35 @@ interface SessionReplayConfig {
|
|
|
157
157
|
random?: () => number;
|
|
158
158
|
}
|
|
159
159
|
//#endregion
|
|
160
|
+
//#region src/uploadError.d.ts
|
|
161
|
+
/**
|
|
162
|
+
* - `unconfirmed`: retries ended after a request reached the network; the server may hold the chunk.
|
|
163
|
+
* - `rejected`: the server answered with a terminal HTTP status.
|
|
164
|
+
* - `not-sent`: no request reached the network (queue full, compression, headers or token failed).
|
|
165
|
+
*/
|
|
166
|
+
type ReplayUploadFailureReason = "unconfirmed" | "rejected" | "not-sent";
|
|
167
|
+
interface ReplayUploadErrorInit {
|
|
168
|
+
cause: unknown;
|
|
169
|
+
droppedSeqs?: readonly number[];
|
|
170
|
+
reason: ReplayUploadFailureReason;
|
|
171
|
+
seq: number | undefined;
|
|
172
|
+
sessionId: string;
|
|
173
|
+
status?: number | undefined;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Reported through `onError` when a replay chunk is not confirmed by the server.
|
|
177
|
+
* Recording continues from a fresh full snapshot, so `droppedSeqs` lists the
|
|
178
|
+
* later chunks that were discarded because they depended on the lost one.
|
|
179
|
+
*/
|
|
180
|
+
declare class ReplayUploadError extends Error {
|
|
181
|
+
readonly droppedSeqs: readonly number[];
|
|
182
|
+
readonly reason: ReplayUploadFailureReason;
|
|
183
|
+
readonly seq: number | undefined;
|
|
184
|
+
readonly sessionId: string;
|
|
185
|
+
readonly status: number | undefined;
|
|
186
|
+
constructor(init: ReplayUploadErrorInit);
|
|
187
|
+
}
|
|
188
|
+
//#endregion
|
|
160
189
|
//#region src/index.d.ts
|
|
161
190
|
interface SessionReplay {
|
|
162
191
|
readonly recording: boolean;
|
|
@@ -167,4 +196,4 @@ interface SessionReplay {
|
|
|
167
196
|
}
|
|
168
197
|
declare function startSessionReplay(config: SessionReplayConfig): SessionReplay;
|
|
169
198
|
//#endregion
|
|
170
|
-
export {
|
|
199
|
+
export { SessionReplayConfig as S, RrwebEvent as _, ReplayUploadFailureReason as a, SessionAttributes as b, ChunkMeta as c, EventType as d, IncrementalSource as f, ReplayUser as g, NetworkPayload as h, ReplayUploadErrorInit as i, ConsolePayload as l, NavigationPayload as m, startSessionReplay as n, CHUNK_ENVELOPE_VERSION as o, MouseInteractions as p, ReplayUploadError as r, ChunkEnvelope as s, SessionReplay as t, CustomTag as u, SamplingMode as v, SessionAttributesInput as x, SessionAttributeValue as y };
|
package/dist/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require("@rrweb/record"),t=require("fflate");const n={DomContentLoaded:0,Load:1,FullSnapshot:2,IncrementalSnapshot:3,Meta:4,Custom:5,Plugin:6},r={Mutation:0,MouseMove:1,MouseInteraction:2,Scroll:3,ViewportResize:4,Input:5,TouchMove:6,MediaInteraction:7,Drag:12,Selection:14},i={MouseUp:0,MouseDown:1,Click:2,ContextMenu:3,DblClick:4},a={Error:`logfire.error`,Console:`logfire.console`,Network:`logfire.network`,Navigation:`logfire.navigation`},o={sessionSampleRate:1,onErrorSampleRate:1,maskAllText:!0,maskAllInputs:!0,maskTextSelector:``,blockSelector:``,flushIntervalMs:5e3,maxBufferBytes:1e6,minSessionDurationMs:1e4,sessionIdleTimeoutMs:18e5,maxSessionDurationMs:144e5,distinctId:``,captureConsole:!1,captureNetwork:!0,captureNavigation:!0,redactUrlPatterns:[/.+/u]},s=new Set([r.MouseMove,r.MouseInteraction,r.Scroll,r.ViewportResize,r.Input,r.TouchMove,r.MediaInteraction,r.Drag,r.Selection]);function c(e){return e.type!==n.IncrementalSnapshot||typeof e.data!=`object`||e.data===null||!(`source`in e.data)?!1:typeof e.data.source==`number`&&s.has(e.data.source)}function l(e,t){return t<3e4?e:t<3e5?Math.max(e,6e4):Math.max(e,3e5)}function u(e,t){return t.some(t=>new RegExp(t.source,t.flags).test(e))}function d(e,t,n){if(!u(e,t))return e;try{let t=new URL(e,n);return`${t.origin}${t.pathname}`}catch{let[t=e]=e.split(`?`),[n=t]=t.split(`#`);return n}}const f=[`log`,`info`,`warn`,`error`,`debug`],p=1024,m=()=>void 0;function h(e,t={}){let n=[],r=S(t.onError);try{for(let t of f)typeof console[t]==`function`&&n.push(C(console,t,(n,i)=>function(...o){return i()&&x(e,a.Console,{level:t,args:o.slice(0,10).map(ne)},r),n.apply(this,o)}));return w(n)}catch(e){throw T(n),e}}function ee(e,t){let n=y(t),r={...n,onError:S(n.onError)},i=_(e,r);try{return w([i,v(e,r)])}catch(e){throw i(),e}}function g(e,t={redactUrlPatterns:[]}){let n=S(t.onError),r=r=>{let i=d(window.location.href,t.redactUrlPatterns??[],window.location.href);x(e,a.Navigation,{url:i,kind:r},n)},i=[];try{i.push(C(history,`pushState`,(e,t)=>function(...n){let i=e.apply(this,n);return t()&&r(`push`),i})),i.push(C(history,`replaceState`,(e,t)=>function(...n){let i=e.apply(this,n);return t()&&r(`replace`),i}));let e=!0,t=()=>{e&&r(`pop`)};return window.addEventListener(`popstate`,t),i.push(()=>{e=!1,window.removeEventListener(`popstate`,t)}),w(i)}catch(e){throw T(i),e}}function _(e,t){return typeof window.fetch==`function`?C(window,`fetch`,(n,r)=>{let i=async function(i,o){let s=n;if(!r())return s.call(this,i,o);let c=t.now(),l=re(i,o),u=ie(i);if(j(u,t.ignoreUrlPatterns))return s.call(this,i,o);let f=d(u,t.redactUrlPatterns,window.location.href),p=A(o?.body);try{let n=await s.call(this,i,o);return r()&&x(e,a.Network,k({method:l,url:f,status:n.status,durationMs:Math.max(0,t.now()-c),reqBytes:p,resBytes:D(n.headers)}),t.onError),n}catch(n){throw r()&&x(e,a.Network,k({method:l,url:f,status:0,durationMs:Math.max(0,t.now()-c),failed:!0,reqBytes:p}),t.onError),n}},o=Reflect.get(n,`__original`);return Object.defineProperty(i,"__original",{configurable:!0,value:typeof o==`function`?o:n,writable:!0}),i}):m}function v(e,t){let n=window.XMLHttpRequest.prototype,r=new WeakMap,i=[];try{return i.push(C(n,`open`,(e,n)=>function(...i){let[a,o]=i;if(!n())return e.apply(this,i);let s=o.toString();return j(s,t.ignoreUrlPatterns)?(r.delete(this),e.apply(this,i)):(r.set(this,{method:a.toUpperCase(),url:d(s,t.redactUrlPatterns,window.location.href),startedAt:0,reqBytes:0,failed:!1,emitted:!1}),e.apply(this,i))})),i.push(C(n,`send`,(n,i)=>function(...o){let[s]=o,c=i()?r.get(this):void 0;if(c===void 0)return n.apply(this,o);c.startedAt=t.now(),c.reqBytes=A(s);let l=()=>{c.failed=!0},u=()=>{c.emitted||(c.emitted=!0,this.removeEventListener(`error`,l),this.removeEventListener(`abort`,l),this.removeEventListener(`timeout`,l),i()&&x(e,a.Network,k({method:c.method,url:c.url,status:this.status,durationMs:Math.max(0,t.now()-c.startedAt),failed:c.failed||this.status===0,reqBytes:c.reqBytes,resBytes:O(this)}),t.onError))};this.addEventListener(`error`,l),this.addEventListener(`abort`,l),this.addEventListener(`timeout`,l),this.addEventListener(`loadend`,u,{once:!0});try{return n.apply(this,o)}catch(n){throw this.removeEventListener(`error`,l),this.removeEventListener(`abort`,l),this.removeEventListener(`timeout`,l),this.removeEventListener(`loadend`,u),i()&&x(e,a.Network,k({method:c.method,url:c.url,status:0,durationMs:Math.max(0,t.now()-c.startedAt),failed:!0,reqBytes:c.reqBytes}),t.onError),n}})),w(i)}catch(e){throw T(i),e}}function y(e){return{...e,ignoreUrlPatterns:b(e.ignoreUrlPatterns),redactUrlPatterns:b(e.redactUrlPatterns)}}function b(e){return e.map(e=>{let t=e.flags.replace(/[gy]/gu,``);return t===e.flags?e:new RegExp(e.source,t)})}function x(e,t,n,r){try{e(t,n)}catch(e){r?.(e)}}function S(e){let t=!1;return n=>{if(!t){t=!0;try{let t=e?.(n);te(t)&&Promise.resolve(t).catch(()=>void 0)}catch{}finally{t=!1}}}}function te(e){return typeof e==`object`&&!!e&&`then`in e&&typeof e.then==`function`}function C(e,t,n){let r=e,i=r[t];if(typeof i!=`function`)return m;let a=!0,o=n(i,()=>a);return r[t]=o,()=>{a&&(a=!1,r[t]===o&&(r[t]=i))}}function w(e){let t=!1;return()=>{t||(t=!0,T(e))}}function T(e){for(let t=e.length-1;t>=0;--t)try{e[t]?.()}catch{}}function ne(e){if(e==null)return String(e);if(typeof e==`string`)return E(e);if(typeof e==`number`||typeof e==`boolean`||typeof e==`bigint`)return String(e);if(e instanceof Error)return E(e.stack??`${e.name}: ${e.message}`);try{return E(JSON.stringify(e))}catch{return Object.prototype.toString.call(e)}}function E(e){if(e.length<=p)return e;let t=e.charCodeAt(p-1),n=t>=55296&&t<=56319?p-1:p;return`${e.slice(0,n)}...(+${String(e.length-n)} chars)`}function re(e,t){return(t?.method??(typeof e==`object`&&`method`in e?e.method:`GET`)).toUpperCase()}function ie(e){return typeof e==`string`||e instanceof URL?e.toString():e.url}function D(e){let t=e.get(`content-length`);if(t===null)return;let n=Number.parseInt(t,10);return Number.isFinite(n)?n:void 0}function O(e){try{let t=e.getResponseHeader(`content-length`);if(t===null)return;let n=Number.parseInt(t,10);return Number.isFinite(n)?n:void 0}catch{return}}function k(e){return{method:e.method,url:e.url,status:e.status,durationMs:e.durationMs,...e.failed===void 0?{}:{failed:e.failed},...e.reqBytes===void 0?{}:{reqBytes:e.reqBytes},...e.resBytes===void 0?{}:{resBytes:e.resBytes}}}function A(e){if(e==null)return 0;if(typeof e==`string`)return new TextEncoder().encode(e).byteLength;if(e instanceof ArrayBuffer||ArrayBuffer.isView(e))return e.byteLength;if(e instanceof Blob)return e.size}function j(e,t){return u(e,t)}const ae=new Set([`action`,`formaction`,`href`,`src`]);function oe(t){let n=()=>{t.beforeUserActivity?.()},r={emit:e=>{t.emit(se(e,t.redactUrlPatterns))},maskAllInputs:t.maskAllInputs,recordCanvas:!1,collectFonts:!1,inlineImages:!1,recordCrossOriginIframes:!1,slimDOMOptions:`all`,hooks:{input:n,mediaInteaction:n,mouseInteraction:n,mousemove:n,scroll:n,selection:n,viewportResize:n},sampling:{mousemove:100,mouseInteraction:!0,scroll:250,media:800,input:`last`}};t.maskAllText?r.maskTextSelector=`*`:t.maskTextSelector!==void 0&&t.maskTextSelector.length>0&&(r.maskTextSelector=t.maskTextSelector),t.blockSelector!==void 0&&t.blockSelector.length>0&&(r.blockSelector=t.blockSelector),t.checkoutEveryNms!==void 0&&t.checkoutEveryNms>0&&(r.checkoutEveryNms=t.checkoutEveryNms);let i=(0,e.record)(r);if(i===void 0)throw Error(`logfire session replay: rrweb failed to start recording`);return{stop:()=>{i()},addCustomEvent:(t,n)=>{e.record.addCustomEvent(t,n)},takeFullSnapshot:()=>{e.record.takeFullSnapshot(!0)}}}function se(e,t){if(typeof e.data!=`object`||e.data===null)return e;let i=e.data;if(e.type===n.Meta){if(typeof i.href!=`string`)return e;let n=d(i.href,t,window.location.href);return n===i.href?e:{...e,data:{...i,href:n}}}if(e.type!==n.FullSnapshot&&(e.type!==n.IncrementalSnapshot||i.source!==r.Mutation))return e;let a=M(i,t);return a===i?e:{...e,data:a}}function M(e,t){if(Array.isArray(e)){let n=!1,r=[];for(let i of e){let e=M(i,t);e!==i&&(n=!0),r.push(e)}return n?r:e}if(typeof e!=`object`||!e)return e;let n=e,r=!1,i={};for(let[e,a]of Object.entries(n)){let n=e===`attributes`&&!Array.isArray(a)?ce(a,t):M(a,t);n!==a&&(r=!0),i[e]=n}return r?i:e}function ce(e,t){if(typeof e!=`object`||!e||Array.isArray(e))return e;let n=e,r=!1,i={};for(let[e,a]of Object.entries(n)){if(!ae.has(e.toLowerCase())||typeof a!=`string`){i[e]=a;continue}let n=d(a,t,window.location.href);n!==a&&(r=!0),i[e]=n}return r?i:e}function N(e){return Number.isFinite(e)?Math.min(1,Math.max(0,e)):0}function le(e){let t=e.random??Math.random;return t()<N(e.sessionSampleRate)?`full`:t()<N(e.onErrorSampleRate)?`buffer`:`off`}const ue=/^[a-z][a-z0-9_]{0,63}$/u;function de(e,t){let n=0;for(let r of e)if(n+=+(r.length>0),n>t)return!1;return!0}function fe(e,t){if(e===void 0)return Object.freeze({});let n;try{n=e()}catch(e){return t(e),Object.freeze({})}if(typeof n!=`object`||!n||Array.isArray(n))return Object.freeze({});let r;try{r=Object.getPrototypeOf(n)}catch(e){return t(e),Object.freeze({})}if(r!==Object.prototype&&r!==null)return Object.freeze({});let i;try{i=Object.keys(n)}catch(e){return t(e),Object.freeze({})}let a={},o=0;for(let e of i){if(!ue.test(e))continue;let r;try{r=Reflect.get(n,e)}catch(e){t(e);continue}if((typeof r==`boolean`||typeof r==`number`&&Number.isFinite(r)||typeof r==`string`&&de(r,200))&&(Object.defineProperty(a,e,{configurable:!0,enumerable:!0,value:r,writable:!0}),o+=1,o===20))break}return Object.freeze(a)}function pe(e=Date.now){let t=e(),n=new Uint8Array(new ArrayBuffer(16));me(n),n[0]=Math.floor(t/2**40)&255,n[1]=Math.floor(t/2**32)&255,n[2]=Math.floor(t/2**24)&255,n[3]=Math.floor(t/2**16)&255,n[4]=Math.floor(t/2**8)&255,n[5]=t&255,n[6]=(n[6]??0)&15|112,n[8]=(n[8]??0)&63|128;let r=``;for(let e of n)r+=e.toString(16).padStart(2,`0`);return`${r.slice(0,8)}-${r.slice(8,12)}-${r.slice(12,16)}-${r.slice(16,20)}-${r.slice(20)}`}function me(e){let t=globalThis.crypto;if(typeof t?.getRandomValues==`function`){t.getRandomValues(e);return}for(let t=0;t<e.length;t++)e[t]=Math.floor(Math.random()*256)}const P=`lf_session_replay`;var he=class{idleTimeoutMs;maxDurationMs;now;storage;memorySession;pendingSession;persistenceTimer;constructor(e){this.idleTimeoutMs=e.idleTimeoutMs,this.maxDurationMs=e.maxDurationMs,this.now=e.now??Date.now,this.storage=e.storage===void 0?F():e.storage}getSession(){let e=this.now();if(this.memorySession!==void 0&&!this.isExpired(this.memorySession,e))return this.memorySession;let t=this.read();return t!==void 0&&!this.isExpired(t,e)?t:this.createSession(e)}touch(){let e=this.now(),t={...this.getSession(),lastActivityAt:e};return this.memorySession=t,this.scheduleWrite(t),t}reset(){return this.createSession(this.now())}flushPendingStorage(){this.persistenceTimer!==void 0&&(clearTimeout(this.persistenceTimer),this.persistenceTimer=void 0);let e=this.pendingSession;this.pendingSession=void 0,e!==void 0&&this.writeNow(e)}isExpired(e,t){return t-e.lastActivityAt>this.idleTimeoutMs||t-e.startedAt>this.maxDurationMs}createSession(e){let t={id:pe(this.now),startedAt:e,lastActivityAt:e};return this.flushPendingStorage(),this.writeNow(t),t}read(){if(this.storage!==null)try{let e=this.storage.getItem(P);if(e!==null){let t=JSON.parse(e);if(I(t))return this.memorySession=t,t}}catch{return this.memorySession}return this.memorySession}write(e){if(this.memorySession=e,this.storage!==null)try{this.storage.setItem(P,JSON.stringify(e))}catch{}}scheduleWrite(e){this.pendingSession=e,this.persistenceTimer===void 0&&(this.persistenceTimer=setTimeout(()=>{this.persistenceTimer=void 0;let e=this.pendingSession;this.pendingSession=void 0,e!==void 0&&this.writeNow(e)},1e3))}writeNow(e){this.memorySession=e,this.write(e)}};function F(){try{return globalThis.sessionStorage??null}catch{return null}}function I(e){if(typeof e!=`object`||!e)return!1;let t=e;return typeof t.id==`string`&&t.id.length>0&&typeof t.startedAt==`number`&&Number.isFinite(t.startedAt)&&typeof t.lastActivityAt==`number`&&Number.isFinite(t.lastActivityAt)}function L(e){return typeof e==`object`&&e?e:void 0}function R(e){return typeof e==`string`&&e.length>0?e:void 0}function ge(e){let t=L(e),n=R(t?.id);if(t===void 0||n===void 0)return;let r=R(t.name),i=R(t.email);return{id:n,...r===void 0?{}:{name:r},...i===void 0?{}:{email:i}}}function _e(e,t,o,s={},c){let l=1/0,u=0,d=0,f=0,p=0,m=!1,h=new Set;for(let e of t){e.timestamp<l&&(l=e.timestamp),e.timestamp>u&&(u=e.timestamp);let t=L(e.data);if(e.type===n.FullSnapshot)m=!0;else if(e.type===n.Meta){let e=R(t?.href);e!==void 0&&h.add(e)}else if(e.type===n.IncrementalSnapshot&&t!==void 0){let e=t.source;if(e===r.MouseInteraction){let e=t.type;(e===i.Click||e===i.DblClick)&&d++}else e===r.Input&&f++}else if(e.type===n.Custom&&t!==void 0){let e=R(t.tag),n=L(t.payload);if(e===a.Error)p++;else if(e===a.Console)n?.level===`error`&&p++;else if(e===a.Navigation){let e=R(n?.url);e!==void 0&&h.add(e)}}}return{seq:e,firstTimestamp:l===1/0?0:l,lastTimestamp:u,eventCount:t.length,clickCount:d,keypressCount:f,errorCount:p,hasFullSnapshot:m,urls:[...h],...o!==void 0&&o.length>0?{distinctId:o}:{},...c===void 0?{}:{user:{...c}},...Object.keys(s).length===0?{}:{sessionAttributes:{...s}}}}const z=`lf_session_replay_seq`,ve={gzip:t.gzip,gzipSync:t.gzipSync};var ye=class{buffer=[];bufferHasFullSnapshot=!1;pendingBytes=0;seq=0;timer;nextFlushAt;lastUserActivityAt;startedAt;started=!1;held;heldBufferIncomplete=!1;minimumBufferIncomplete=!1;minimumDurationSatisfied=!1;firstObservedTimestamp;lastObservedTimestamp;refreshingMinimumSnapshot=!1;mode;flushing;reservedKeepaliveBytes=0;asyncCompressionAvailable=!0;config;compression;storage;sessionId;sessionAttributes;takeFullSnapshot;constructor(e,t,n,r=F(),i=ve,a={},o={}){this.config=e,this.sessionId=t,this.sessionAttributes=Object.freeze({...a}),this.mode=n,this.storage=r,this.compression=i,this.held=o.holdUntilActivity===!0&&n===`full`,this.takeFullSnapshot=o.takeFullSnapshot,this.minimumDurationSatisfied=e.minSessionDurationMs===0,this.seq=this.loadSeq(t),this.startedAt=this.config.now(),this.lastUserActivityAt=this.startedAt}start(){this.started||this.mode!==`full`||(this.started=!0,this.scheduleFlush())}add(e){this.minimumDurationSatisfied||(this.firstObservedTimestamp??=e.timestamp,this.lastObservedTimestamp=Math.max(this.lastObservedTimestamp??e.timestamp,e.timestamp)),c(e)&&(this.lastUserActivityAt=this.config.now());let t=H(e);if(this.refreshingMinimumSnapshot){this.buffer.push(e),this.pendingBytes+=t;return}let r=!this.minimumDurationSatisfied;if(this.mode===`buffer`||this.held||r){if(e.type===n.Meta){this.buffer=[e],this.bufferHasFullSnapshot=!1,this.minimumBufferIncomplete=!1,this.pendingBytes=t,r&&(this.mode===`full`&&(this.firstObservedTimestamp=e.timestamp),this.finishMinimumBufferingEvent());return}if(e.type===n.FullSnapshot){let i=!this.bufferHasFullSnapshot&&this.buffer.length===1&&this.buffer[0]?.type===n.Meta?this.buffer[0]:void 0;this.buffer=i===void 0?[e]:[i,e],this.bufferHasFullSnapshot=!0,this.pendingBytes=t+(i===void 0?0:H(i)),this.heldBufferIncomplete=!1,this.minimumBufferIncomplete=!1,r&&(this.mode===`full`&&(this.firstObservedTimestamp=i?.timestamp??e.timestamp),this.finishMinimumBufferingEvent());return}if(!this.bufferHasFullSnapshot||t>this.config.maxBufferBytes){this.heldBufferIncomplete||=this.held,this.minimumBufferIncomplete||=r,r&&this.finishMinimumBufferingEvent();return}if(this.pendingBytes+t>this.config.maxBufferBytes){this.heldBufferIncomplete||=this.held,this.minimumBufferIncomplete||=r,r&&this.finishMinimumBufferingEvent();return}}if(this.buffer.push(e),this.pendingBytes+=t,r&&this.minimumDurationReached()){this.flushAndReport();return}this.mode===`full`&&this.pendingBytes>=this.config.maxBufferBytes?this.flushAndReport():this.scheduleFlush()}async triggerFlush(){return this.mode===`buffer`&&(this.bufferHasFullSnapshot||(this.buffer=[],this.pendingBytes=0),this.mode=`full`,this.start()),this.flush()}async flush(e={}){return this.flushInternal(e)}async flushInternal(e={}){if(this.mode===`buffer`||this.held||this.buffer.length===0||!this.minimumDurationReached()||(this.clearScheduledFlush(),this.minimumBufferIncomplete&&!this.refreshMinimumBuffer()))return;this.minimumDurationSatisfied=!0;let t=this.buffer;this.buffer=[],this.bufferHasFullSnapshot=!1,this.minimumBufferIncomplete=!1,this.pendingBytes=0;let n=e.keepalive===!0?Ce(t):[t],r=this.seq;this.seq+=n.length;let i=this.sessionId;this.saveSeq(i,this.seq);let a=this.snapshotIdentity(),o=e.keepalive===!0?Promise.resolve():this.flushing??Promise.resolve(),s=e.keepalive===!0?this.deliverLifecycle(n,r,i,a):o.then(async()=>{for(let e=0;e<n.length;e++){let t=n[e];t!==void 0&&await this.deliverOrdinary(t,r+e,i,a)}}),c=this.flushing;this.flushing=e.keepalive===!0&&c!==void 0?Promise.all([c,s]).then(()=>void 0,()=>void 0):s.catch(()=>void 0),await s}async shutdown(e={}){if(this.started=!1,this.clearScheduledFlush(),this.held){this.discard(),await this.flushing;return}if(!this.minimumDurationReached()){this.discard(),await this.flushing;return}await this.flush(e),await this.flushing}discard(){this.started=!1,this.clearScheduledFlush(),this.buffer=[],this.bufferHasFullSnapshot=!1,this.minimumBufferIncomplete=!1,this.pendingBytes=0}getMode(){return this.mode}isHeld(){return this.held}releaseHeld(e){this.held&&((this.heldBufferIncomplete||!this.bufferHasFullSnapshot)&&(this.buffer=[],this.bufferHasFullSnapshot=!1,this.pendingBytes=0,e()),this.held=!1,this.pendingBytes>=this.config.maxBufferBytes?this.flushAndReport():this.scheduleFlush())}flushAndReport(){this.flushInternal().catch(e=>{B(this.config.onError,e)})}scheduleFlush(){let e=this.config.now(),t=Math.max(0,this.config.minSessionDurationMs-(e-this.startedAt)),n=Math.max(l(this.config.flushIntervalMs,e-this.lastUserActivityAt),t);this.scheduleFlushIn(e,n)}scheduleFlushIn(e,t){if(!this.started||this.mode!==`full`||this.held||this.buffer.length===0)return;let n=e+t;this.timer!==void 0&&this.nextFlushAt!==void 0&&this.nextFlushAt<=n||(this.clearScheduledFlush(),this.nextFlushAt=n,this.timer=setTimeout(()=>{this.timer=void 0,this.nextFlushAt=void 0,this.flushAndReport()},t))}clearScheduledFlush(){this.timer!==void 0&&(clearTimeout(this.timer),this.timer=void 0),this.nextFlushAt=void 0}minimumDurationReached(){return this.minimumDurationSatisfied||this.config.minSessionDurationMs===0?!0:this.firstObservedTimestamp===void 0||this.lastObservedTimestamp===void 0?!1:this.lastObservedTimestamp-this.firstObservedTimestamp>=this.config.minSessionDurationMs}finishMinimumBufferingEvent(){this.minimumDurationReached()?this.flushAndReport():this.scheduleFlush()}refreshMinimumBuffer(){let e=this.buffer.length,t=this.pendingBytes;if(this.takeFullSnapshot!==void 0){this.refreshingMinimumSnapshot=!0;try{this.takeFullSnapshot()}catch(e){B(this.config.onError,e)}finally{this.refreshingMinimumSnapshot=!1}}return this.buffer.slice(e).some(e=>e.type===n.FullSnapshot)?(this.minimumBufferIncomplete=!1,!0):(this.buffer.length=e,this.pendingBytes=t,!1)}snapshotIdentity(){let e=this.snapshotUser(),t=this.config.distinctId;if(this.config.getDistinctId!==void 0)try{t=this.config.getDistinctId()??this.config.distinctId}catch(e){B(this.config.onError,e)}else e!==void 0&&(t=e.id);return{distinctId:t,user:e}}createEnvelope(e,t,n){return{version:1,meta:_e(t,e,n.distinctId,this.sessionAttributes,n.user),events:e}}snapshotUser(){if(this.config.getUser!==void 0)try{return ge(this.config.getUser())}catch(e){B(this.config.onError,e);return}}async deliverOrdinary(e,n,r,i){let a=this.createEnvelope(e,n,i);try{let e=(0,t.strToU8)(JSON.stringify(a)),i=await this.compressOrdinary(e);await this.sendWithRetry({body:i,lifecycle:!1,requestKeepalive:!1,reservedBytes:0,seq:n,sessionId:r})}catch(e){B(this.config.onError,e)}}async deliverLifecycle(e,n,r,i){let a=[];for(let o=0;o<e.length;o++){let s=e[o];if(s===void 0){a.push(void 0);continue}let c=this.createEnvelope(s,n+o,i);try{a.push({body:this.compression.gzipSync((0,t.strToU8)(JSON.stringify(c))),lifecycle:!0,requestKeepalive:!1,reservedBytes:0,seq:n+o,sessionId:r})}catch(e){B(this.config.onError,e),a.push(void 0)}}let o=!0,s=Math.max(0,48e3-this.reservedKeepaliveBytes);for(let e of a){if(e===void 0){o=!1;continue}o&&e.body.byteLength<=s?(e.requestKeepalive=!0,e.reservedBytes=e.body.byteLength,this.reservedKeepaliveBytes+=e.reservedBytes,s-=e.reservedBytes):o=!1}await Promise.all(a.map(async e=>{if(e!==void 0)try{await this.sendWithRetry(e)}catch(e){B(this.config.onError,e)}}))}async compressOrdinary(e){if(!this.asyncCompressionAvailable)return this.compression.gzipSync(e);try{return await we(this.compression,e)}catch{return this.asyncCompressionAvailable=!1,this.compression.gzipSync(e)}}async sendWithRetry(e){let t=e.lifecycle?1:3;for(let n=1;n<=t;n++)try{await this.send(e);return}catch(e){let r=Ee(e,n);if(r===void 0||n>=t)throw e;await Se(r)}}async send(e){let t,n,r,i=new AbortController,a=setTimeout(()=>{i.abort(Error(`replay upload timed out after 10000ms`))},1e4);try{let a=`${this.config.replayUrl.replace(/\/+$/u,``)}/${encodeURIComponent(e.sessionId)}?seq=${String(e.seq)}`,o=await this.getUploadHeaders(),s=this.config.fetchImpl(a,{method:`POST`,headers:o,body:e.body.slice(),keepalive:e.requestKeepalive,signal:i.signal});t=!0;let c=await s;if(n=!0,r=await Te(c),!c.ok){let e=c.status===429?De(c.headers.get(`retry-after`),Date.now()):void 0;throw new V(c.status,e)}}finally{clearTimeout(a),e.reservedBytes>0&&(t!==!0||n!==!0||r===!0)&&(this.reservedKeepaliveBytes=Math.max(0,this.reservedKeepaliveBytes-e.reservedBytes))}}async getUploadHeaders(){let e=this.config.headers===void 0?{}:await this.config.headers(),t=await xe(this.config.token);return{...t===void 0||t.length===0?e:{...Object.fromEntries(Object.entries(e).filter(([e])=>e.toLowerCase()!==`authorization`)),Authorization:`Bearer ${t}`},"Content-Type":`application/json`,"Content-Encoding":`gzip`}}loadSeq(e){if(this.storage===null)return 0;try{let t=this.storage.getItem(z);if(t===null)return 0;let n=JSON.parse(t);if(typeof n!=`object`||!n)return 0;let r=n;return r.id===e&&typeof r.seq==`number`&&Number.isFinite(r.seq)?r.seq:0}catch{return 0}}saveSeq(e,t){if(this.storage!==null)try{this.storage.setItem(z,JSON.stringify({id:e,seq:t}))}catch{}}};function B(e,t){try{let n=e?.(t);be(n)&&Promise.resolve(n).catch(()=>void 0)}catch{}}function be(e){return typeof e==`object`&&!!e&&`then`in e&&typeof e.then==`function`}var V=class extends Error{retryAfter;status;constructor(e,t){super(`replay ingest failed: ${String(e)}`),this.status=e,this.retryAfter=t,this.name=`ReplayIngestError`}};async function xe(e){return typeof e==`function`?e():e}async function Se(e){return new Promise(t=>{setTimeout(t,e)})}function H(e){try{return(0,t.strToU8)(JSON.stringify(e)).byteLength}catch{return 0}}function Ce(e){let t=[],n=[],r=0;for(let i of e){let e=H(i);n.length>0&&r+e>48e3&&(t.push(n),n=[],r=0),n.push(i),r+=e}return n.length>0&&t.push(n),t}async function we(e,t){return new Promise((n,r)=>{let i=[];typeof window<`u`&&i.push(window),typeof document<`u`&&i.push(document);let a=()=>{for(let e of i)e.removeEventListener(`securitypolicyviolation`,s)},o=(e,t)=>{if(a(),e!==null){r(e);return}n(t)},s=e=>{let t=e;(t.effectiveDirective.includes(`worker-src`)||t.violatedDirective.includes(`worker-src`))&&o(Error(`replay compression worker blocked by Content Security Policy`))};for(let e of i)e.addEventListener(`securitypolicyviolation`,s);try{e.gzip(t,{level:6},(e,t)=>{o(e,t)})}catch(e){a(),r(e instanceof Error?e:Error(String(e)))}})}async function Te(e){if(e.body===null)return!0;try{return await e.body.cancel(),!0}catch{return!1}}function Ee(e,t){return e instanceof V?e.status===429?e.retryAfter?.kind===`too-long`?void 0:e.retryAfter?.kind===`delay`?e.retryAfter.milliseconds:500*t:e.status<500?void 0:500*t:500*t}function De(e,t){if(e===null)return{kind:`fallback`};let n=e.trim();if(/^\d+$/u.test(n)){let e=Number(n);return Number.isSafeInteger(e)?U(e*1e3):{kind:`fallback`}}let r=je(n,t);return r===void 0?{kind:`fallback`}:U(Math.max(0,r-t))}function U(e){return e>1e4?{kind:`too-long`}:{kind:`delay`,milliseconds:e}}const Oe=[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`],ke=[`Sun`,`Mon`,`Tue`,`Wed`,`Thu`,`Fri`,`Sat`],Ae=[`Sunday`,`Monday`,`Tuesday`,`Wednesday`,`Thursday`,`Friday`,`Saturday`];function je(e,t){let n=/^(Sun|Mon|Tue|Wed|Thu|Fri|Sat), (\d{2}) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\d{4}) (\d{2}):(\d{2}):(\d{2}) GMT$/u.exec(e);if(n!==null)return W(n[1],n[2],n[3],n[4],n[5],n[6],n[7]);let r=/^(Sunday|Monday|Tuesday|Wednesday|Thursday|Friday|Saturday), (\d{2})-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\d{2}) (\d{2}):(\d{2}):(\d{2}) GMT$/u.exec(e);if(r!==null){let e=new Date(t).getUTCFullYear(),n=Number(r[4]),i=Math.floor(e/100)*100+n;return i>e+50&&(i-=100),W(r[1],r[2],r[3],String(i),r[5],r[6],r[7])}let i=/^(Sun|Mon|Tue|Wed|Thu|Fri|Sat) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\d{2}| \d) (\d{2}):(\d{2}):(\d{2}) (\d{4})$/u.exec(e);if(i!==null)return W(i[1],i[3]?.trim(),i[2],i[7],i[4],i[5],i[6])}function W(e,t,n,r,i,a,o){let s=Number(t),c=Oe.indexOf(n),l=Number(r),u=Number(i),d=Number(a),f=Number(o);if(c<0||s<1||s>31||u>23||d>59||f>59)return;let p=new Date(0);if(p.setUTCFullYear(l,c,s),p.setUTCHours(u,d,f,0),p.getUTCFullYear()!==l||p.getUTCMonth()!==c||p.getUTCDate()!==s||p.getUTCHours()!==u||p.getUTCMinutes()!==d||p.getUTCSeconds()!==f)return;let m=ke.indexOf(e),h=Ae.indexOf(e);return(m>=0?m:h)===p.getUTCDay()?p.getTime():void 0}const Me={mode:`off`,recording:!1,getSessionId:()=>``,flush:async()=>Promise.resolve(),stop:async()=>Promise.resolve()},G=`lf_session_replay_mode`,K=Symbol.for(`@pydantic/logfire-session-replay/controller`);function Ne(e){if(typeof window>`u`||typeof document>`u`)return Me;let t=Be();try{let n=Fe(e),r=new he({idleTimeoutMs:n.sessionIdleTimeoutMs,maxDurationMs:n.maxSessionDurationMs,now:n.now}),i=r.getSession().id,a=e=>{let t;try{t=n.getSessionId?.()}catch(e){return X(n.onError,e),i}if(t!==void 0&&t.length>0)return i=t,t;let a=e?r.touch().id:r.getSession().id;return i=a,a},o=F(),s=a(!1),c,l=!1,u=Promise.resolve(),d,f=(e,t,r=!t)=>{let i=Ie(n,e,o);if(!(i===`off`||l||e!==s))try{c=Pe({config:n,getSessionId:a,mode:i,onSessionChanged:p,samplingModeStorage:o,sessionId:e,holdUntilActivity:r})}catch(e){if(c=void 0,t)throw e;X(n.onError,e)}},p=(e,t=!0)=>{if(l||e===s)return;s=e;let r=c;c=void 0;let i=r?.deactivate()??Promise.resolve();u=u.then(async()=>{await Y(i,n.onError),!l&&s===e&&f(e,!1,t)})},m;try{f(s,!0),m=setInterval(()=>{p(a(!1))},1e3)}catch(e){throw c?.discard(),c=void 0,e}return{get mode(){try{return c?.transport.getMode()??`off`}catch(e){return X(n.onError,e),`off`}},get recording(){try{return c!==void 0}catch(e){return X(n.onError,e),!1}},getSessionId:()=>a(!1),flush:async()=>{try{await u,await c?.transport.flush()}catch(e){X(n.onError,e)}},stop:async()=>(d??=(async()=>{l=!0,clearInterval(m);let e=c;c=void 0,await Y(e?.deactivate()??Promise.resolve(),n.onError),await u,r.flushPendingStorage(),t()})(),d)}}catch(e){throw t(),e}}function Pe(e){let{config:t,getSessionId:n,holdUntilActivity:r,mode:i,onSessionChanged:o,samplingModeStorage:s,sessionId:l}=e,u=fe(t.getSessionAttributes,e=>{X(t.onError,e)}),d,f=new ye(t,l,i,void 0,void 0,u,{holdUntilActivity:r,takeFullSnapshot:()=>{d.takeFullSnapshot()}}),p=[],m=!0,_=()=>m,v;try{d=oe({beforeUserActivity:()=>{if(!(!m||!f.isHeld()))try{let e=n(!0);if(e!==l){o(e,!1);return}f.releaseHeld(()=>{d.takeFullSnapshot()})}catch(e){X(t.onError,e)}},emit:e=>{if(m)try{let t=n(c(e));if(t!==l){o(t,!1);return}f.add(e)}catch(e){X(t.onError,e)}},maskAllText:t.maskAllText,maskAllInputs:t.maskAllInputs,maskTextSelector:t.maskTextSelector,blockSelector:t.blockSelector,checkoutEveryNms:i===`buffer`?12e4:0,redactUrlPatterns:t.redactUrlPatterns}),p.push(()=>{d.stop()});let e=(e,n)=>{if(m)try{d.addCustomEvent(e,n)}catch(e){X(t.onError,e)}},r=n=>{_()&&(f.releaseHeld(()=>{d.takeFullSnapshot()}),e(a.Error,n),_()&&f.getMode()===`buffer`&&(q(s,l,`full`),J(f.triggerFlush(),t.onError)))},u=e=>{e instanceof ErrorEvent&&r($(e.message,e.filename,ze(e.error)))},y=e=>{let t=e.reason;r($(Ve(t?.message??e.reason),void 0,typeof t?.stack==`string`?t.stack:void 0))},b=()=>{document.visibilityState===`hidden`&&J(f.flush({keepalive:!0}),t.onError)},x=()=>{J(f.flush({keepalive:!0}),t.onError)};return window.addEventListener(`error`,u,!0),p.push(()=>{window.removeEventListener(`error`,u,!0)}),window.addEventListener(`unhandledrejection`,y,!0),p.push(()=>{window.removeEventListener(`unhandledrejection`,y,!0)}),document.addEventListener(`visibilitychange`,b),p.push(()=>{document.removeEventListener(`visibilitychange`,b)}),window.addEventListener(`pagehide`,x),p.push(()=>{window.removeEventListener(`pagehide`,x)}),t.captureConsole&&p.push(h(e,{onError:t.onError})),t.captureNetwork&&p.push(ee(e,{ignoreUrlPatterns:t.ignoreUrlPatterns,now:t.now,onError:t.onError,redactUrlPatterns:t.redactUrlPatterns})),t.captureNavigation&&p.push(g(e,{onError:t.onError,redactUrlPatterns:t.redactUrlPatterns})),f.start(),{sessionId:l,transport:f,deactivate:async()=>(v??=(async()=>{let e=f.flush({keepalive:!1});m=!1,Q(p),await e,await f.shutdown({keepalive:!1})})(),v),discard:()=>{m=!1,Q(p),f.discard()}}}catch(e){throw m=!1,Q(p),f.discard(),e}}function Fe(e){if(e.replayUrl.length===0)throw Error("logfire session replay: `replayUrl` is required");let t=new URL(e.replayUrl,`https://logfire.invalid/`);if(t.search!==``||t.hash!==``)throw Error("logfire session replay: `replayUrl` must not contain a query or fragment");let n=e.fetchImpl??(typeof fetch==`function`?fetch.bind(globalThis):void 0);if(n===void 0)throw Error("logfire session replay: no `fetch` available; pass `fetchImpl`");return{replayUrl:e.replayUrl,headers:e.headers,token:e.token,getSessionId:e.getSessionId,getSessionAttributes:e.getSessionAttributes,sessionSampleRate:e.sessionSampleRate??o.sessionSampleRate,onErrorSampleRate:e.onErrorSampleRate??o.onErrorSampleRate,maskAllText:e.maskAllText??o.maskAllText,maskAllInputs:e.maskAllInputs??o.maskAllInputs,maskTextSelector:e.maskTextSelector??o.maskTextSelector,blockSelector:e.blockSelector??o.blockSelector,flushIntervalMs:e.flushIntervalMs??o.flushIntervalMs,maxBufferBytes:e.maxBufferBytes??o.maxBufferBytes,minSessionDurationMs:e.minSessionDurationMs??o.minSessionDurationMs,sessionIdleTimeoutMs:e.sessionIdleTimeoutMs??o.sessionIdleTimeoutMs,maxSessionDurationMs:e.maxSessionDurationMs??o.maxSessionDurationMs,distinctId:e.distinctId??o.distinctId,getDistinctId:e.getDistinctId,getUser:e.getUser,captureConsole:e.captureConsole??o.captureConsole,captureNetwork:e.captureNetwork??o.captureNetwork,captureNavigation:e.captureNavigation??o.captureNavigation,ignoreUrlPatterns:e.ignoreUrlPatterns??[],redactUrlPatterns:e.redactUrlPatterns??[...o.redactUrlPatterns],onError:e.onError,fetchImpl:n,now:e.now??Date.now,random:e.random??Math.random}}function Ie(e,t,n){let r=Le(n,t);if(r!==void 0)return r;let i=le({sessionSampleRate:e.sessionSampleRate,onErrorSampleRate:e.onErrorSampleRate,random:e.random});return q(n,t,i),i}function Le(e,t){if(e!==null)try{let n=e.getItem(G);if(n===null)return;let r=JSON.parse(n);if(typeof r!=`object`||!r)return;let i=r;return i.id!==t||!Re(i.mode)?void 0:i.mode}catch{return}}function q(e,t,n){if(e!==null)try{e.setItem(G,JSON.stringify({id:t,mode:n}))}catch{}}function Re(e){return e===`full`||e===`buffer`||e===`off`}function ze(e){let t=typeof e==`object`&&e&&`stack`in e?e.stack:void 0;return typeof t==`string`?t:void 0}function J(e,t){e.catch(e=>{X(t,e)})}async function Y(e,t){try{await e}catch(e){X(t,e)}}function X(e,t){try{let n=e?.(t);Z(n)&&Promise.resolve(n).catch(()=>void 0)}catch{}}function Z(e){return typeof e==`object`&&!!e&&`then`in e&&typeof e.then==`function`}function Be(){let e=globalThis;if(e[K]!==void 0)throw Error(`logfire session replay: a replay controller is already active in this page`);let t={};Object.defineProperty(e,K,{configurable:!0,enumerable:!1,value:t,writable:!0});let n=!1;return()=>{n||(n=!0,e[K]===t&&Reflect.deleteProperty(e,K))}}function Q(e){for(let t=e.length-1;t>=0;--t)try{e[t]?.()}catch{}e.length=0}function $(e,t,n){return{message:e,...t===void 0||t.length===0?{}:{source:t},...n===void 0?{}:{stack:n}}}function Ve(e){if(e==null)return`unhandledrejection`;if(typeof e==`string`)return e;if(typeof e==`number`||typeof e==`boolean`||typeof e==`bigint`||typeof e==`symbol`)return String(e);try{let t=JSON.stringify(e);return typeof t==`string`?t:Object.prototype.toString.call(e)}catch{return Object.prototype.toString.call(e)}}exports.CHUNK_ENVELOPE_VERSION=1,exports.CustomTag=a,exports.EventType=n,exports.IncrementalSource=r,exports.MouseInteractions=i,exports.startSessionReplay=Ne;
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require("@rrweb/record"),t=require("fflate");const n={DomContentLoaded:0,Load:1,FullSnapshot:2,IncrementalSnapshot:3,Meta:4,Custom:5,Plugin:6},r={Mutation:0,MouseMove:1,MouseInteraction:2,Scroll:3,ViewportResize:4,Input:5,TouchMove:6,MediaInteraction:7,Drag:12,Selection:14},i={MouseUp:0,MouseDown:1,Click:2,ContextMenu:3,DblClick:4},a={Error:`logfire.error`,Console:`logfire.console`,Network:`logfire.network`,Navigation:`logfire.navigation`},o={sessionSampleRate:1,onErrorSampleRate:1,maskAllText:!0,maskAllInputs:!0,maskTextSelector:``,blockSelector:``,flushIntervalMs:5e3,maxBufferBytes:1e6,minSessionDurationMs:1e4,sessionIdleTimeoutMs:18e5,maxSessionDurationMs:144e5,distinctId:``,captureConsole:!1,captureNetwork:!0,captureNavigation:!0,redactUrlPatterns:[/.+/u]},s=new Set([r.MouseMove,r.MouseInteraction,r.Scroll,r.ViewportResize,r.Input,r.TouchMove,r.MediaInteraction,r.Drag,r.Selection]);function c(e){return e.type!==n.IncrementalSnapshot||typeof e.data!=`object`||e.data===null||!(`source`in e.data)?!1:typeof e.data.source==`number`&&s.has(e.data.source)}function l(e,t){return t<3e4?e:t<3e5?Math.max(e,6e4):Math.max(e,3e5)}function u(e,t){return t.some(t=>new RegExp(t.source,t.flags).test(e))}function d(e,t,n){if(!u(e,t))return e;try{let t=new URL(e,n);return`${t.origin}${t.pathname}`}catch{let[t=e]=e.split(`?`),[n=t]=t.split(`#`);return n}}const f=[`log`,`info`,`warn`,`error`,`debug`],p=1024,m=()=>void 0;function h(e,t={}){let n=[],r=x(t.onError);try{for(let t of f)typeof console[t]==`function`&&n.push(S(console,t,(n,i)=>function(...o){return i()&&b(e,a.Console,{level:t,args:o.slice(0,10).map(re)},r),n.apply(this,o)}));return C(n)}catch(e){throw w(n),e}}function ee(e,t){let n=v(t),r={...n,onError:x(n.onError)},i=g(e,r);try{return C([i,_(e,r)])}catch(e){throw i(),e}}function te(e,t={redactUrlPatterns:[]}){let n=x(t.onError),r=r=>{let i=d(window.location.href,t.redactUrlPatterns??[],window.location.href);b(e,a.Navigation,{url:i,kind:r},n)},i=[];try{i.push(S(history,`pushState`,(e,t)=>function(...n){let i=e.apply(this,n);return t()&&r(`push`),i})),i.push(S(history,`replaceState`,(e,t)=>function(...n){let i=e.apply(this,n);return t()&&r(`replace`),i}));let e=!0,t=()=>{e&&r(`pop`)};return window.addEventListener(`popstate`,t),i.push(()=>{e=!1,window.removeEventListener(`popstate`,t)}),C(i)}catch(e){throw w(i),e}}function g(e,t){return typeof window.fetch==`function`?S(window,`fetch`,(n,r)=>{let i=async function(i,o){let s=n;if(!r())return s.call(this,i,o);let c=t.now(),l=ie(i,o),u=ae(i);if(O(u,t.ignoreUrlPatterns))return s.call(this,i,o);let f=d(u,t.redactUrlPatterns,window.location.href),p=D(o?.body);try{let n=await s.call(this,i,o);return r()&&b(e,a.Network,E({method:l,url:f,status:n.status,durationMs:Math.max(0,t.now()-c),reqBytes:p,resBytes:oe(n.headers)}),t.onError),n}catch(n){throw r()&&b(e,a.Network,E({method:l,url:f,status:0,durationMs:Math.max(0,t.now()-c),failed:!0,reqBytes:p}),t.onError),n}},o=Reflect.get(n,`__original`);return Object.defineProperty(i,"__original",{configurable:!0,value:typeof o==`function`?o:n,writable:!0}),i}):m}function _(e,t){let n=window.XMLHttpRequest.prototype,r=new WeakMap,i=[];try{return i.push(S(n,`open`,(e,n)=>function(...i){let[a,o]=i;if(!n())return e.apply(this,i);let s=o.toString();return O(s,t.ignoreUrlPatterns)?(r.delete(this),e.apply(this,i)):(r.set(this,{method:a.toUpperCase(),url:d(s,t.redactUrlPatterns,window.location.href),startedAt:0,reqBytes:0,failed:!1,emitted:!1}),e.apply(this,i))})),i.push(S(n,`send`,(n,i)=>function(...o){let[s]=o,c=i()?r.get(this):void 0;if(c===void 0)return n.apply(this,o);c.startedAt=t.now(),c.reqBytes=D(s);let l=()=>{c.failed=!0},u=()=>{c.emitted||(c.emitted=!0,this.removeEventListener(`error`,l),this.removeEventListener(`abort`,l),this.removeEventListener(`timeout`,l),i()&&b(e,a.Network,E({method:c.method,url:c.url,status:this.status,durationMs:Math.max(0,t.now()-c.startedAt),failed:c.failed||this.status===0,reqBytes:c.reqBytes,resBytes:se(this)}),t.onError))};this.addEventListener(`error`,l),this.addEventListener(`abort`,l),this.addEventListener(`timeout`,l),this.addEventListener(`loadend`,u,{once:!0});try{return n.apply(this,o)}catch(n){throw this.removeEventListener(`error`,l),this.removeEventListener(`abort`,l),this.removeEventListener(`timeout`,l),this.removeEventListener(`loadend`,u),i()&&b(e,a.Network,E({method:c.method,url:c.url,status:0,durationMs:Math.max(0,t.now()-c.startedAt),failed:!0,reqBytes:c.reqBytes}),t.onError),n}})),C(i)}catch(e){throw w(i),e}}function v(e){return{...e,ignoreUrlPatterns:y(e.ignoreUrlPatterns),redactUrlPatterns:y(e.redactUrlPatterns)}}function y(e){return e.map(e=>{let t=e.flags.replace(/[gy]/gu,``);return t===e.flags?e:new RegExp(e.source,t)})}function b(e,t,n,r){try{e(t,n)}catch(e){r?.(e)}}function x(e){let t=!1;return n=>{if(!t){t=!0;try{let t=e?.(n);ne(t)&&Promise.resolve(t).catch(()=>void 0)}catch{}finally{t=!1}}}}function ne(e){return typeof e==`object`&&!!e&&`then`in e&&typeof e.then==`function`}function S(e,t,n){let r=e,i=r[t];if(typeof i!=`function`)return m;let a=!0,o=n(i,()=>a);return r[t]=o,()=>{a&&(a=!1,r[t]===o&&(r[t]=i))}}function C(e){let t=!1;return()=>{t||(t=!0,w(e))}}function w(e){for(let t=e.length-1;t>=0;--t)try{e[t]?.()}catch{}}function re(e){if(e==null)return String(e);if(typeof e==`string`)return T(e);if(typeof e==`number`||typeof e==`boolean`||typeof e==`bigint`)return String(e);if(e instanceof Error)return T(e.stack??`${e.name}: ${e.message}`);try{return T(JSON.stringify(e))}catch{return Object.prototype.toString.call(e)}}function T(e){if(e.length<=p)return e;let t=e.charCodeAt(p-1),n=t>=55296&&t<=56319?p-1:p;return`${e.slice(0,n)}...(+${String(e.length-n)} chars)`}function ie(e,t){return(t?.method??(typeof e==`object`&&`method`in e?e.method:`GET`)).toUpperCase()}function ae(e){return typeof e==`string`||e instanceof URL?e.toString():e.url}function oe(e){let t=e.get(`content-length`);if(t===null)return;let n=Number.parseInt(t,10);return Number.isFinite(n)?n:void 0}function se(e){try{let t=e.getResponseHeader(`content-length`);if(t===null)return;let n=Number.parseInt(t,10);return Number.isFinite(n)?n:void 0}catch{return}}function E(e){return{method:e.method,url:e.url,status:e.status,durationMs:e.durationMs,...e.failed===void 0?{}:{failed:e.failed},...e.reqBytes===void 0?{}:{reqBytes:e.reqBytes},...e.resBytes===void 0?{}:{resBytes:e.resBytes}}}function D(e){if(e==null)return 0;if(typeof e==`string`)return new TextEncoder().encode(e).byteLength;if(e instanceof ArrayBuffer||ArrayBuffer.isView(e))return e.byteLength;if(e instanceof Blob)return e.size}function O(e,t){return u(e,t)}const ce=new Set([`action`,`formaction`,`href`,`src`]);function le(t){let n=()=>{t.beforeUserActivity?.()},r={emit:e=>{t.emit(ue(e,t.redactUrlPatterns))},maskAllInputs:t.maskAllInputs,recordCanvas:!1,collectFonts:!1,inlineImages:!1,recordCrossOriginIframes:!1,slimDOMOptions:`all`,hooks:{input:n,mediaInteaction:n,mouseInteraction:n,mousemove:n,scroll:n,selection:n,viewportResize:n},sampling:{mousemove:100,mouseInteraction:!0,scroll:250,media:800,input:`last`}};t.maskAllText?r.maskTextSelector=`*`:t.maskTextSelector!==void 0&&t.maskTextSelector.length>0&&(r.maskTextSelector=t.maskTextSelector),t.blockSelector!==void 0&&t.blockSelector.length>0&&(r.blockSelector=t.blockSelector),t.checkoutEveryNms!==void 0&&t.checkoutEveryNms>0&&(r.checkoutEveryNms=t.checkoutEveryNms);let i=(0,e.record)(r);if(i===void 0)throw Error(`logfire session replay: rrweb failed to start recording`);return{stop:()=>{i()},addCustomEvent:(t,n)=>{e.record.addCustomEvent(t,n)},takeFullSnapshot:()=>{e.record.takeFullSnapshot(!0)}}}function ue(e,t){if(typeof e.data!=`object`||e.data===null)return e;let i=e.data;if(e.type===n.Meta){if(typeof i.href!=`string`)return e;let n=d(i.href,t,window.location.href);return n===i.href?e:{...e,data:{...i,href:n}}}if(e.type!==n.FullSnapshot&&(e.type!==n.IncrementalSnapshot||i.source!==r.Mutation))return e;let a=k(i,t);return a===i?e:{...e,data:a}}function k(e,t){if(Array.isArray(e)){let n=!1,r=[];for(let i of e){let e=k(i,t);e!==i&&(n=!0),r.push(e)}return n?r:e}if(typeof e!=`object`||!e)return e;let n=e,r=!1,i={};for(let[e,a]of Object.entries(n)){let n=e===`attributes`&&!Array.isArray(a)?de(a,t):k(a,t);n!==a&&(r=!0),i[e]=n}return r?i:e}function de(e,t){if(typeof e!=`object`||!e||Array.isArray(e))return e;let n=e,r=!1,i={};for(let[e,a]of Object.entries(n)){if(!ce.has(e.toLowerCase())||typeof a!=`string`){i[e]=a;continue}let n=d(a,t,window.location.href);n!==a&&(r=!0),i[e]=n}return r?i:e}function A(e){return Number.isFinite(e)?Math.min(1,Math.max(0,e)):0}function fe(e){let t=e.random??Math.random;return t()<A(e.sessionSampleRate)?`full`:t()<A(e.onErrorSampleRate)?`buffer`:`off`}const pe=/^[a-z][a-z0-9_]{0,63}$/u;function me(e,t){let n=0;for(let r of e)if(n+=+(r.length>0),n>t)return!1;return!0}function he(e,t){if(e===void 0)return Object.freeze({});let n;try{n=e()}catch(e){return t(e),Object.freeze({})}if(typeof n!=`object`||!n||Array.isArray(n))return Object.freeze({});let r;try{r=Object.getPrototypeOf(n)}catch(e){return t(e),Object.freeze({})}if(r!==Object.prototype&&r!==null)return Object.freeze({});let i;try{i=Object.keys(n)}catch(e){return t(e),Object.freeze({})}let a={},o=0;for(let e of i){if(!pe.test(e))continue;let r;try{r=Reflect.get(n,e)}catch(e){t(e);continue}if((typeof r==`boolean`||typeof r==`number`&&Number.isFinite(r)||typeof r==`string`&&me(r,200))&&(Object.defineProperty(a,e,{configurable:!0,enumerable:!0,value:r,writable:!0}),o+=1,o===20))break}return Object.freeze(a)}function ge(e=Date.now){let t=e(),n=new Uint8Array(new ArrayBuffer(16));_e(n),n[0]=Math.floor(t/2**40)&255,n[1]=Math.floor(t/2**32)&255,n[2]=Math.floor(t/2**24)&255,n[3]=Math.floor(t/2**16)&255,n[4]=Math.floor(t/2**8)&255,n[5]=t&255,n[6]=(n[6]??0)&15|112,n[8]=(n[8]??0)&63|128;let r=``;for(let e of n)r+=e.toString(16).padStart(2,`0`);return`${r.slice(0,8)}-${r.slice(8,12)}-${r.slice(12,16)}-${r.slice(16,20)}-${r.slice(20)}`}function _e(e){let t=globalThis.crypto;if(typeof t?.getRandomValues==`function`){t.getRandomValues(e);return}for(let t=0;t<e.length;t++)e[t]=Math.floor(Math.random()*256)}const j=`lf_session_replay`;var ve=class{idleTimeoutMs;maxDurationMs;now;storage;memorySession;pendingSession;persistenceTimer;constructor(e){this.idleTimeoutMs=e.idleTimeoutMs,this.maxDurationMs=e.maxDurationMs,this.now=e.now??Date.now,this.storage=e.storage===void 0?M():e.storage}getSession(){let e=this.now();if(this.memorySession!==void 0&&!this.isExpired(this.memorySession,e))return this.memorySession;let t=this.read();return t!==void 0&&!this.isExpired(t,e)?t:this.createSession(e)}touch(){let e=this.now(),t={...this.getSession(),lastActivityAt:e};return this.memorySession=t,this.scheduleWrite(t),t}reset(){return this.createSession(this.now())}flushPendingStorage(){this.persistenceTimer!==void 0&&(clearTimeout(this.persistenceTimer),this.persistenceTimer=void 0);let e=this.pendingSession;this.pendingSession=void 0,e!==void 0&&this.writeNow(e)}isExpired(e,t){return t-e.lastActivityAt>this.idleTimeoutMs||t-e.startedAt>this.maxDurationMs}createSession(e){let t={id:ge(this.now),startedAt:e,lastActivityAt:e};return this.flushPendingStorage(),this.writeNow(t),t}read(){if(this.storage!==null)try{let e=this.storage.getItem(j);if(e!==null){let t=JSON.parse(e);if(ye(t))return this.memorySession=t,t}}catch{return this.memorySession}return this.memorySession}write(e){if(this.memorySession=e,this.storage!==null)try{this.storage.setItem(j,JSON.stringify(e))}catch{}}scheduleWrite(e){this.pendingSession=e,this.persistenceTimer===void 0&&(this.persistenceTimer=setTimeout(()=>{this.persistenceTimer=void 0;let e=this.pendingSession;this.pendingSession=void 0,e!==void 0&&this.writeNow(e)},1e3))}writeNow(e){this.memorySession=e,this.write(e)}};function M(){try{return globalThis.sessionStorage??null}catch{return null}}function ye(e){if(typeof e!=`object`||!e)return!1;let t=e;return typeof t.id==`string`&&t.id.length>0&&typeof t.startedAt==`number`&&Number.isFinite(t.startedAt)&&typeof t.lastActivityAt==`number`&&Number.isFinite(t.lastActivityAt)}function N(e){return typeof e==`object`&&e?e:void 0}function P(e){return typeof e==`string`&&e.length>0?e:void 0}function be(e){let t=N(e),n=P(t?.id);if(t===void 0||n===void 0)return;let r=P(t.name),i=P(t.email);return{id:n,...r===void 0?{}:{name:r},...i===void 0?{}:{email:i}}}function xe(e,t,o,s={},c){let l=1/0,u=0,d=0,f=0,p=0,m=!1,h=new Set;for(let e of t){e.timestamp<l&&(l=e.timestamp),e.timestamp>u&&(u=e.timestamp);let t=N(e.data);if(e.type===n.FullSnapshot)m=!0;else if(e.type===n.Meta){let e=P(t?.href);e!==void 0&&h.add(e)}else if(e.type===n.IncrementalSnapshot&&t!==void 0){let e=t.source;if(e===r.MouseInteraction){let e=t.type;(e===i.Click||e===i.DblClick)&&d++}else e===r.Input&&f++}else if(e.type===n.Custom&&t!==void 0){let e=P(t.tag),n=N(t.payload);if(e===a.Error)p++;else if(e===a.Console)n?.level===`error`&&p++;else if(e===a.Navigation){let e=P(n?.url);e!==void 0&&h.add(e)}}}return{seq:e,firstTimestamp:l===1/0?0:l,lastTimestamp:u,eventCount:t.length,clickCount:d,keypressCount:f,errorCount:p,hasFullSnapshot:m,urls:[...h],...o!==void 0&&o.length>0?{distinctId:o}:{},...c===void 0?{}:{user:{...c}},...Object.keys(s).length===0?{}:{sessionAttributes:{...s}}}}var F=class extends Error{droppedSeqs;reason;seq;sessionId;status;constructor(e){super(Se(e),{cause:e.cause}),this.name=`ReplayUploadError`,this.droppedSeqs=Object.freeze([...e.droppedSeqs??[]]),this.reason=e.reason,this.seq=e.seq,this.sessionId=e.sessionId,this.status=e.status}};function Se(e){let t=e.seq===void 0?`replay chunk`:`replay chunk seq=${String(e.seq)}`,n=e.cause instanceof Error?`: ${e.cause.message}`:``;return`${t} ${e.reason}${n}`}const I=`lf_session_replay_seq`,L=1e4,R=3e4,Ce={gzip:t.gzip,gzipSync:t.gzipSync};var we=class{buffer=[];bufferHasFullSnapshot=!1;pendingBytes=0;seq=0;timer;nextFlushAt;lastUserActivityAt;startedAt;started=!1;held;heldBufferIncomplete=!1;minimumBufferIncomplete=!1;minimumDurationSatisfied=!1;firstObservedTimestamp;lastObservedTimestamp;refreshingMinimumSnapshot=!1;mode;queue=[];retainedBytes=0;activeUpload;drainPromise;draining=!1;lifecycleFlights=new Set;closed=!1;shuttingDown=!1;retryAbort=new AbortController;deadlineAbort=new AbortController;resyncPending=!1;resyncTimer;lastResyncAt;reservedKeepaliveBytes=0;asyncCompressionAvailable=!0;config;compression;storage;sessionId;sessionAttributes;takeFullSnapshot;constructor(e,t,n,r=M(),i=Ce,a={},o={}){this.config=e,this.sessionId=t,this.sessionAttributes=Object.freeze({...a}),this.mode=n,this.storage=r,this.compression=i,this.held=o.holdUntilActivity===!0&&n===`full`,this.takeFullSnapshot=o.takeFullSnapshot,this.minimumDurationSatisfied=e.minSessionDurationMs===0,this.seq=this.loadSeq(t),this.startedAt=this.config.now(),this.lastUserActivityAt=this.startedAt}start(){this.started||this.mode!==`full`||(this.started=!0,this.scheduleFlush())}add(e){this.minimumDurationSatisfied||(this.firstObservedTimestamp??=e.timestamp,this.lastObservedTimestamp=Math.max(this.lastObservedTimestamp??e.timestamp,e.timestamp)),c(e)&&(this.lastUserActivityAt=this.config.now());let t=V(e);if(this.resyncPending){this.addDuringResync(e,t);return}if(this.refreshingMinimumSnapshot){this.buffer.push(e),this.pendingBytes+=t;return}let r=!this.minimumDurationSatisfied;if(this.mode===`buffer`||this.held||r){if(e.type===n.Meta){this.buffer=[e],this.bufferHasFullSnapshot=!1,this.minimumBufferIncomplete=!1,this.pendingBytes=t,r&&(this.mode===`full`&&(this.firstObservedTimestamp=e.timestamp),this.finishMinimumBufferingEvent());return}if(e.type===n.FullSnapshot){let i=!this.bufferHasFullSnapshot&&this.buffer.length===1&&this.buffer[0]?.type===n.Meta?this.buffer[0]:void 0;this.buffer=i===void 0?[e]:[i,e],this.bufferHasFullSnapshot=!0,this.pendingBytes=t+(i===void 0?0:V(i)),this.heldBufferIncomplete=!1,this.minimumBufferIncomplete=!1,r&&(this.mode===`full`&&(this.firstObservedTimestamp=i?.timestamp??e.timestamp),this.finishMinimumBufferingEvent());return}if(!this.bufferHasFullSnapshot||t>this.config.maxBufferBytes){this.heldBufferIncomplete||=this.held,this.minimumBufferIncomplete||=r,r&&this.finishMinimumBufferingEvent();return}if(this.pendingBytes+t>this.config.maxBufferBytes){this.heldBufferIncomplete||=this.held,this.minimumBufferIncomplete||=r,r&&this.finishMinimumBufferingEvent();return}}if(this.buffer.push(e),this.pendingBytes+=t,r&&this.minimumDurationReached()){this.flushAndReport();return}this.mode===`full`&&this.pendingBytes>=this.config.maxBufferBytes?this.flushAndReport():this.scheduleFlush()}addDuringResync(e,t){if(e.type===n.Meta){this.buffer=[e],this.pendingBytes=t;return}if(e.type!==n.FullSnapshot)return;let r=this.buffer.length===1&&this.buffer[0]?.type===n.Meta?this.buffer[0]:void 0;this.buffer=r===void 0?[e]:[r,e],this.pendingBytes=t+(r===void 0?0:V(r)),this.resyncPending=!1,this.clearResyncTimer(),this.pendingBytes>=this.config.maxBufferBytes?this.flushAndReport():this.scheduleFlush()}async triggerFlush(){return this.mode===`buffer`&&(this.bufferHasFullSnapshot||(this.buffer=[],this.pendingBytes=0),this.mode=`full`,this.start()),this.flush()}async flush(e={}){return this.flushInternal(e)}async flushInternal(e={}){if(this.closed||this.mode===`buffer`||this.held||this.buffer.length===0||!this.minimumDurationReached()||(this.clearScheduledFlush(),this.minimumBufferIncomplete&&!this.refreshMinimumBuffer()))return;this.minimumDurationSatisfied=!0;let t=this.buffer,n=this.pendingBytes;this.buffer=[],this.bufferHasFullSnapshot=!1,this.minimumBufferIncomplete=!1,this.pendingBytes=0;let r=this.sessionId,i=this.snapshotIdentity();if(e.keepalive===!0){let e=Oe(t),n=this.allocateSeq(e.length),a=this.deliverLifecycle(e,n,r,i);this.lifecycleFlights.add(a);let o=()=>{this.lifecycleFlights.delete(a)};a.then(o,o),await a;return}await this.enqueue(t,n,r,i)?.done}async shutdown(e={}){if(this.started=!1,this.clearScheduledFlush(),this.held||!this.minimumDurationReached()){this.discard(),await this.settleWithinDeadline([]);return}if(e.keepalive===!0){await this.flush(e),this.closed=!0,this.clearResyncTimer(),await this.settleWithinDeadline([]);return}let t=this.flushInternal();this.closed=!0,this.shuttingDown=!0,this.clearResyncTimer(),this.retryAbort.abort();let n=this.queue.filter(e=>e!==this.activeUpload).map(async e=>this.finalAttempt(e));await this.settleWithinDeadline([t,...n])}discard(){this.started=!1,this.closed=!0,this.clearScheduledFlush(),this.clearResyncTimer(),this.buffer=[],this.bufferHasFullSnapshot=!1,this.minimumBufferIncomplete=!1,this.pendingBytes=0}getMode(){return this.mode}isHeld(){return this.held}releaseHeld(e){this.held&&((this.heldBufferIncomplete||!this.bufferHasFullSnapshot)&&(this.buffer=[],this.bufferHasFullSnapshot=!1,this.pendingBytes=0,e()),this.held=!1,this.pendingBytes>=this.config.maxBufferBytes?this.flushAndReport():this.scheduleFlush())}flushAndReport(){this.flushInternal().catch(e=>{z(this.config.onError,e)})}scheduleFlush(){let e=this.config.now(),t=Math.max(0,this.config.minSessionDurationMs-(e-this.startedAt)),n=Math.max(l(this.config.flushIntervalMs,e-this.lastUserActivityAt),t);this.scheduleFlushIn(e,n)}scheduleFlushIn(e,t){if(!this.started||this.mode!==`full`||this.held||this.buffer.length===0)return;let n=e+t;this.timer!==void 0&&this.nextFlushAt!==void 0&&this.nextFlushAt<=n||(this.clearScheduledFlush(),this.nextFlushAt=n,this.timer=setTimeout(()=>{this.timer=void 0,this.nextFlushAt=void 0,this.flushAndReport()},t))}clearScheduledFlush(){this.timer!==void 0&&(clearTimeout(this.timer),this.timer=void 0),this.nextFlushAt=void 0}minimumDurationReached(){return this.minimumDurationSatisfied||this.config.minSessionDurationMs===0?!0:this.firstObservedTimestamp===void 0||this.lastObservedTimestamp===void 0?!1:this.lastObservedTimestamp-this.firstObservedTimestamp>=this.config.minSessionDurationMs}finishMinimumBufferingEvent(){this.minimumDurationReached()?this.flushAndReport():this.scheduleFlush()}refreshMinimumBuffer(){let e=this.buffer.length,t=this.pendingBytes;if(this.takeFullSnapshot!==void 0){this.refreshingMinimumSnapshot=!0;try{this.takeFullSnapshot()}catch(e){z(this.config.onError,e)}finally{this.refreshingMinimumSnapshot=!1}}return this.buffer.slice(e).some(e=>e.type===n.FullSnapshot)?(this.minimumBufferIncomplete=!1,!0):(this.buffer.length=e,this.pendingBytes=t,!1)}snapshotIdentity(){let e=this.snapshotUser(),t=this.config.distinctId;if(this.config.getDistinctId!==void 0)try{t=this.config.getDistinctId()??this.config.distinctId}catch(e){z(this.config.onError,e)}else e!==void 0&&(t=e.id);return{distinctId:t,user:e}}createEnvelope(e,t,n){return{version:1,meta:xe(t,e,n.distinctId,this.sessionAttributes,n.user),events:e}}snapshotUser(){if(this.config.getUser!==void 0)try{return be(this.config.getUser())}catch(e){z(this.config.onError,e);return}}allocateSeq(e){let t=this.seq;return this.seq+=e,this.saveSeq(this.sessionId,this.seq),t}enqueue(e,t,r,i){let a=Math.max(2e6,2*this.config.maxBufferBytes);if(this.queue.length>0&&this.retainedBytes+t>a){z(this.config.onError,new F({cause:Error(`replay upload queue is full`),reason:`not-sent`,seq:void 0,sessionId:r})),this.beginResync();return}let o=()=>void 0,s={body:void 0,done:new Promise(e=>{o=e}),events:e,hasFullSnapshot:e.some(e=>e.type===n.FullSnapshot),identity:i,reachedFetch:!1,resolve:o,retainedBytes:t,seq:this.allocateSeq(1),sessionId:r,settled:!1};return this.queue.push(s),this.retainedBytes+=t,this.draining||(this.draining=!0,this.drainPromise=this.drain()),s}async drain(){try{for(;!this.shuttingDown;){let e=this.queue[0];if(e===void 0)break;this.activeUpload=e;let t=await this.deliverQueued(e);this.activeUpload=void 0,this.settle(e,t)}}finally{this.activeUpload=void 0,this.draining=!1}}async deliverQueued(e){let t=await this.compressQueued(e);if(t!==void 0||e.settled)return t;let n=Date.now(),r;for(let t=1;;t++){let i=R-(Date.now()-n);if(t>1&&i<=0)return G(r,e.reachedFetch);let a=await this.attemptQueued(e,Math.min(L,i));if(a===void 0)return;r=a;let o=je(a,t,this.config.random);if(o===void 0||this.shuttingDown||Date.now()-n+o>=R)return G(a,e.reachedFetch);await this.backoff(o)}}async compressQueued(e){if(e.body!==void 0||e.events===void 0)return;let n=e.events;try{let r=(0,t.strToU8)(JSON.stringify(this.createEnvelope(n,e.seq,e.identity))),i=this.shuttingDown?this.compression.gzipSync(r):await this.compressOrdinary(r);if(e.events!==n)return await this.compressQueued(e);e.settled||(this.retainedBytes+=i.byteLength-e.retainedBytes,e.retainedBytes=i.byteLength,e.body=i,e.events=void 0);return}catch(e){return{cause:e,reason:`not-sent`}}}async attemptQueued(e,t=L){let n=e.body;if(n!==void 0)try{await this.send({body:n,requestKeepalive:!1,reservedBytes:0,seq:e.seq,sessionId:e.sessionId},()=>{e.reachedFetch=!0},t);return}catch(e){return e}}async finalAttempt(e){let t=await this.compressQueued(e);if(t!==void 0){this.settle(e,t);return}let n=await this.attemptQueued(e);this.settle(e,n===void 0?void 0:G(n,e.reachedFetch))}async settleWithinDeadline(e){let t=Promise.all([...e,this.drainPromise,...this.lifecycleFlights]).then(()=>void 0,()=>void 0),n,r=new Promise(e=>{n=setTimeout(e,L)});if(await Promise.race([t,r]),clearTimeout(n),this.shuttingDown){this.deadlineAbort.abort(Error(`replay upload did not finish before shutdown`));for(let e of[...this.queue])this.settle(e,{cause:Error(`replay upload did not finish before shutdown`),reason:e.reachedFetch?`unconfirmed`:`not-sent`})}}settle(e,t){if(e.settled)return;e.settled=!0,this.retainedBytes-=e.retainedBytes;let n=this.queue.indexOf(e);n>=0&&this.queue.splice(n,1),e.body=void 0,e.events=void 0,e.resolve(),t!==void 0&&this.handleSequencedLoss(e.seq,e.sessionId,t)}handleSequencedLoss(e,t,n){let r=[];if(!this.shuttingDown){let t=!1;for(let n of[...this.queue])if(!(n.seq<e)){if(n.events===void 0){if(n.hasFullSnapshot){t=!0;break}continue}if(n.hasFullSnapshot){let e=H(n.events),r=U(e);this.retainedBytes+=r-n.retainedBytes,n.retainedBytes=r,n.events=e,t=!0;break}r.push(n.seq),this.settle(n,void 0)}!t&&!this.trimBufferToAnchor()&&this.beginResync()}z(this.config.onError,new F({cause:n.cause,droppedSeqs:r,reason:n.reason,seq:e,sessionId:t,status:n.status}))}trimBufferToAnchor(){return this.buffer.some(e=>e.type===n.FullSnapshot)?(this.buffer=H(this.buffer),this.pendingBytes=U(this.buffer),!0):!1}beginResync(){this.closed||(this.resyncPending=!0,this.buffer=[],this.bufferHasFullSnapshot=!1,this.pendingBytes=0,this.clearScheduledFlush(),this.scheduleResyncSnapshot())}scheduleResyncSnapshot(){if(this.resyncTimer!==void 0||this.closed)return;let e=this.lastResyncAt===void 0?0:Math.max(0,this.lastResyncAt+6e4-this.config.now());this.resyncTimer=setTimeout(()=>{this.resyncTimer=void 0,this.takeResyncSnapshot()},e)}takeResyncSnapshot(){if(!(!this.resyncPending||this.closed||this.takeFullSnapshot===void 0)){this.lastResyncAt=this.config.now();try{this.takeFullSnapshot()}catch(e){z(this.config.onError,e),this.scheduleResyncSnapshot();return}this.isResyncPending()&&(z(this.config.onError,Error(`replay resync snapshot produced no full snapshot`)),this.scheduleResyncSnapshot())}}isResyncPending(){return this.resyncPending}clearResyncTimer(){this.resyncTimer!==void 0&&(clearTimeout(this.resyncTimer),this.resyncTimer=void 0)}async backoff(e){let t=this.retryAbort.signal;t.aborted||await new Promise(n=>{let r=()=>{clearTimeout(i),t.removeEventListener(`abort`,r),n()},i=setTimeout(r,e);t.addEventListener(`abort`,r)})}async deliverLifecycle(e,n,r,i){let a=[];for(let o=0;o<e.length;o++){let s=e[o];if(s===void 0){a.push(void 0);continue}let c=this.createEnvelope(s,n+o,i);try{a.push({body:this.compression.gzipSync((0,t.strToU8)(JSON.stringify(c))),requestKeepalive:!1,reservedBytes:0,seq:n+o,sessionId:r})}catch(e){this.handleSequencedLoss(n+o,r,{cause:e,reason:`not-sent`}),a.push(void 0)}}let o=!0,s=Math.max(0,48e3-this.reservedKeepaliveBytes);for(let e of a){if(e===void 0){o=!1;continue}o&&e.body.byteLength<=s?(e.requestKeepalive=!0,e.reservedBytes=e.body.byteLength,this.reservedKeepaliveBytes+=e.reservedBytes,s-=e.reservedBytes):o=!1}await Promise.all(a.map(async e=>{if(e===void 0)return;let t=!1;try{await this.send(e,()=>{t=!0})}catch(n){this.handleSequencedLoss(e.seq,e.sessionId,G(n,t))}}))}async compressOrdinary(e){if(!this.asyncCompressionAvailable)return this.compression.gzipSync(e);try{return await ke(this.compression,e)}catch{return this.asyncCompressionAvailable=!1,this.compression.gzipSync(e)}}async send(e,t,n=L){let r,i,a,o=new AbortController,s=setTimeout(()=>{o.abort(Error(`replay upload timed out after ${String(n)}ms`))},n),c=this.deadlineAbort.signal,l=()=>{o.abort(c.reason)};c.addEventListener(`abort`,l);try{let n=`${this.config.replayUrl.replace(/\/+$/u,``)}/${encodeURIComponent(e.sessionId)}?seq=${String(e.seq)}`,s=await De(this.getUploadHeaders(),o.signal);t();let c=this.config.fetchImpl(n,{method:`POST`,headers:s,body:e.body.slice(),keepalive:e.requestKeepalive,signal:o.signal});r=!0;let l=await c;if(i=!0,a=await Ae(l),!l.ok){let e=l.status===429||l.status===503?Me(l.headers.get(`retry-after`),Date.now()):void 0;throw new B(l.status,e)}}finally{clearTimeout(s),c.removeEventListener(`abort`,l),e.reservedBytes>0&&(r!==!0||i!==!0||a===!0)&&(this.reservedKeepaliveBytes=Math.max(0,this.reservedKeepaliveBytes-e.reservedBytes))}}async getUploadHeaders(){let e=this.config.headers===void 0?{}:await this.config.headers(),t=await Ee(this.config.token);return{...t===void 0||t.length===0?e:{...Object.fromEntries(Object.entries(e).filter(([e])=>e.toLowerCase()!==`authorization`)),Authorization:`Bearer ${t}`},"Content-Type":`application/json`,"Content-Encoding":`gzip`}}loadSeq(e){if(this.storage===null)return 0;try{let t=this.storage.getItem(I);if(t===null)return 0;let n=JSON.parse(t);if(typeof n!=`object`||!n)return 0;let r=n;return r.id===e&&typeof r.seq==`number`&&Number.isFinite(r.seq)?r.seq:0}catch{return 0}}saveSeq(e,t){if(this.storage!==null)try{this.storage.setItem(I,JSON.stringify({id:e,seq:t}))}catch{}}};function z(e,t){try{let n=e?.(t);Te(n)&&Promise.resolve(n).catch(()=>void 0)}catch{}}function Te(e){return typeof e==`object`&&!!e&&`then`in e&&typeof e.then==`function`}var B=class extends Error{retryAfter;status;constructor(e,t){super(`replay ingest failed: ${String(e)}`),this.status=e,this.retryAfter=t,this.name=`ReplayIngestError`}};async function Ee(e){return typeof e==`function`?e():e}async function De(e,t){if(t.aborted)throw t.reason;return new Promise((n,r)=>{let i=()=>{r(t.reason)};t.addEventListener(`abort`,i,{once:!0}),e.then(e=>{t.removeEventListener(`abort`,i),n(e)},e=>{t.removeEventListener(`abort`,i),r(e instanceof Error?e:Error(String(e)))})})}function V(e){try{return(0,t.strToU8)(JSON.stringify(e)).byteLength}catch{return 0}}function H(e){let t=e.findIndex(e=>e.type===n.FullSnapshot);if(t<0)return e;let r=t>0&&e[t-1]?.type===n.Meta?t-1:t;return e.slice(r)}function U(e){return e.reduce((e,t)=>e+V(t),0)}function Oe(e){let t=[],n=[],r=0;for(let i of e){let e=V(i);n.length>0&&r+e>48e3&&(t.push(n),n=[],r=0),n.push(i),r+=e}return n.length>0&&t.push(n),t}async function ke(e,t){return new Promise((n,r)=>{let i=[];typeof window<`u`&&i.push(window),typeof document<`u`&&i.push(document);let a=()=>{for(let e of i)e.removeEventListener(`securitypolicyviolation`,s)},o=(e,t)=>{if(a(),e!==null){r(e);return}n(t)},s=e=>{let t=e;(t.effectiveDirective.includes(`worker-src`)||t.violatedDirective.includes(`worker-src`))&&o(Error(`replay compression worker blocked by Content Security Policy`))};for(let e of i)e.addEventListener(`securitypolicyviolation`,s);try{e.gzip(t,{level:6},(e,t)=>{o(e,t)})}catch(e){a(),r(e instanceof Error?e:Error(String(e)))}})}async function Ae(e){if(e.body===null)return!0;try{return await e.body.cancel(),!0}catch{return!1}}function W(e){return e===408||e===425||e===429||e>=500}function je(e,t,n){if(e instanceof B&&!W(e.status))return;let r=Math.min(8e3,500*2**(t-1)),i=Math.round(r*(1-.5*n())),a=e instanceof B?e.retryAfter:void 0;return a===void 0?i:Math.max(a,i)}function G(e,t){let n=e instanceof B?e.status:void 0;return n!==void 0&&!W(n)?{cause:e,reason:`rejected`,status:n}:{cause:e,reason:t?`unconfirmed`:`not-sent`,status:n}}function Me(e,t){if(e===null)return;let n=e.trim();if(/^\d+$/u.test(n)){let e=Number(n);return Number.isSafeInteger(e)?e*1e3:void 0}let r=Ie(n,t);return r===void 0?void 0:Math.max(0,r-t)}const Ne=[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`],Pe=[`Sun`,`Mon`,`Tue`,`Wed`,`Thu`,`Fri`,`Sat`],Fe=[`Sunday`,`Monday`,`Tuesday`,`Wednesday`,`Thursday`,`Friday`,`Saturday`];function Ie(e,t){let n=/^(Sun|Mon|Tue|Wed|Thu|Fri|Sat), (\d{2}) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\d{4}) (\d{2}):(\d{2}):(\d{2}) GMT$/u.exec(e);if(n!==null)return K(n[1],n[2],n[3],n[4],n[5],n[6],n[7]);let r=/^(Sunday|Monday|Tuesday|Wednesday|Thursday|Friday|Saturday), (\d{2})-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\d{2}) (\d{2}):(\d{2}):(\d{2}) GMT$/u.exec(e);if(r!==null){let e=new Date(t).getUTCFullYear(),n=Number(r[4]),i=Math.floor(e/100)*100+n;return i>e+50&&(i-=100),K(r[1],r[2],r[3],String(i),r[5],r[6],r[7])}let i=/^(Sun|Mon|Tue|Wed|Thu|Fri|Sat) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\d{2}| \d) (\d{2}):(\d{2}):(\d{2}) (\d{4})$/u.exec(e);if(i!==null)return K(i[1],i[3]?.trim(),i[2],i[7],i[4],i[5],i[6])}function K(e,t,n,r,i,a,o){let s=Number(t),c=Ne.indexOf(n),l=Number(r),u=Number(i),d=Number(a),f=Number(o);if(c<0||s<1||s>31||u>23||d>59||f>59)return;let p=new Date(0);if(p.setUTCFullYear(l,c,s),p.setUTCHours(u,d,f,0),p.getUTCFullYear()!==l||p.getUTCMonth()!==c||p.getUTCDate()!==s||p.getUTCHours()!==u||p.getUTCMinutes()!==d||p.getUTCSeconds()!==f)return;let m=Pe.indexOf(e),h=Fe.indexOf(e);return(m>=0?m:h)===p.getUTCDay()?p.getTime():void 0}const Le={mode:`off`,recording:!1,getSessionId:()=>``,flush:async()=>Promise.resolve(),stop:async()=>Promise.resolve()},q=`lf_session_replay_mode`,J=Symbol.for(`@pydantic/logfire-session-replay/controller`);function Re(e){if(typeof window>`u`||typeof document>`u`)return Le;let t=Ke();try{let n=Be(e),r=new ve({idleTimeoutMs:n.sessionIdleTimeoutMs,maxDurationMs:n.maxSessionDurationMs,now:n.now}),i=r.getSession().id,a=e=>{let t;try{t=n.getSessionId?.()}catch(e){return Q(n.onError,e),i}if(t!==void 0&&t.length>0)return i=t,t;let a=e?r.touch().id:r.getSession().id;return i=a,a},o=M(),s=a(!1),c,l=!1,u=Promise.resolve(),d,f=(e,t,r=!t)=>{let i=Ve(n,e,o);if(!(i===`off`||l||e!==s))try{c=ze({config:n,getSessionId:a,mode:i,onSessionChanged:p,samplingModeStorage:o,sessionId:e,holdUntilActivity:r})}catch(e){if(c=void 0,t)throw e;Q(n.onError,e)}},p=(e,t=!0)=>{if(l||e===s)return;s=e;let r=c;c=void 0;let i=r?.deactivate()??Promise.resolve();u=u.then(async()=>{await Z(i,n.onError),!l&&s===e&&f(e,!1,t)})},m;try{f(s,!0),m=setInterval(()=>{p(a(!1))},1e3)}catch(e){throw c?.discard(),c=void 0,e}return{get mode(){try{return c?.transport.getMode()??`off`}catch(e){return Q(n.onError,e),`off`}},get recording(){try{return c!==void 0}catch(e){return Q(n.onError,e),!1}},getSessionId:()=>a(!1),flush:async()=>{try{await u,await c?.transport.flush()}catch(e){Q(n.onError,e)}},stop:async()=>(d??=(async()=>{l=!0,clearInterval(m);let e=c;c=void 0,await Z(e?.deactivate()??Promise.resolve(),n.onError),await u,r.flushPendingStorage(),t()})(),d)}}catch(e){throw t(),e}}function ze(e){let{config:t,getSessionId:n,holdUntilActivity:r,mode:i,onSessionChanged:o,samplingModeStorage:s,sessionId:l}=e,u=he(t.getSessionAttributes,e=>{Q(t.onError,e)}),d,f=new we(t,l,i,void 0,void 0,u,{holdUntilActivity:r,takeFullSnapshot:()=>{d.takeFullSnapshot()}}),p=[],m=!0,g=()=>m,_;try{d=le({beforeUserActivity:()=>{if(!(!m||!f.isHeld()))try{let e=n(!0);if(e!==l){o(e,!1);return}f.releaseHeld(()=>{d.takeFullSnapshot()})}catch(e){Q(t.onError,e)}},emit:e=>{if(m)try{let t=n(c(e));if(t!==l){o(t,!1);return}f.add(e)}catch(e){Q(t.onError,e)}},maskAllText:t.maskAllText,maskAllInputs:t.maskAllInputs,maskTextSelector:t.maskTextSelector,blockSelector:t.blockSelector,checkoutEveryNms:i===`buffer`?12e4:0,redactUrlPatterns:t.redactUrlPatterns}),p.push(()=>{d.stop()});let e=(e,n)=>{if(m)try{d.addCustomEvent(e,n)}catch(e){Q(t.onError,e)}},r=n=>{g()&&(f.releaseHeld(()=>{d.takeFullSnapshot()}),e(a.Error,n),g()&&f.getMode()===`buffer`&&(Y(s,l,`full`),X(f.triggerFlush(),t.onError)))},u=e=>{e instanceof ErrorEvent&&r(qe(e.message,e.filename,We(e.error)))},v=e=>{let t=e.reason;r(qe(Je(t?.message??e.reason),void 0,typeof t?.stack==`string`?t.stack:void 0))},y=()=>{document.visibilityState===`hidden`&&X(f.flush({keepalive:!0}),t.onError)},b=()=>{X(f.flush({keepalive:!0}),t.onError)};return window.addEventListener(`error`,u,!0),p.push(()=>{window.removeEventListener(`error`,u,!0)}),window.addEventListener(`unhandledrejection`,v,!0),p.push(()=>{window.removeEventListener(`unhandledrejection`,v,!0)}),document.addEventListener(`visibilitychange`,y),p.push(()=>{document.removeEventListener(`visibilitychange`,y)}),window.addEventListener(`pagehide`,b),p.push(()=>{window.removeEventListener(`pagehide`,b)}),t.captureConsole&&p.push(h(e,{onError:t.onError})),t.captureNetwork&&p.push(ee(e,{ignoreUrlPatterns:t.ignoreUrlPatterns,now:t.now,onError:t.onError,redactUrlPatterns:t.redactUrlPatterns})),t.captureNavigation&&p.push(te(e,{onError:t.onError,redactUrlPatterns:t.redactUrlPatterns})),f.start(),{sessionId:l,transport:f,deactivate:async()=>(_??=(async()=>{let e=f.shutdown({keepalive:!1});m=!1,$(p),await e})(),_),discard:()=>{m=!1,$(p),f.discard()}}}catch(e){throw m=!1,$(p),f.discard(),e}}function Be(e){if(e.replayUrl.length===0)throw Error("logfire session replay: `replayUrl` is required");let t=new URL(e.replayUrl,`https://logfire.invalid/`);if(t.search!==``||t.hash!==``)throw Error("logfire session replay: `replayUrl` must not contain a query or fragment");let n=e.fetchImpl??(typeof fetch==`function`?fetch.bind(globalThis):void 0);if(n===void 0)throw Error("logfire session replay: no `fetch` available; pass `fetchImpl`");return{replayUrl:e.replayUrl,headers:e.headers,token:e.token,getSessionId:e.getSessionId,getSessionAttributes:e.getSessionAttributes,sessionSampleRate:e.sessionSampleRate??o.sessionSampleRate,onErrorSampleRate:e.onErrorSampleRate??o.onErrorSampleRate,maskAllText:e.maskAllText??o.maskAllText,maskAllInputs:e.maskAllInputs??o.maskAllInputs,maskTextSelector:e.maskTextSelector??o.maskTextSelector,blockSelector:e.blockSelector??o.blockSelector,flushIntervalMs:e.flushIntervalMs??o.flushIntervalMs,maxBufferBytes:e.maxBufferBytes??o.maxBufferBytes,minSessionDurationMs:e.minSessionDurationMs??o.minSessionDurationMs,sessionIdleTimeoutMs:e.sessionIdleTimeoutMs??o.sessionIdleTimeoutMs,maxSessionDurationMs:e.maxSessionDurationMs??o.maxSessionDurationMs,distinctId:e.distinctId??o.distinctId,getDistinctId:e.getDistinctId,getUser:e.getUser,captureConsole:e.captureConsole??o.captureConsole,captureNetwork:e.captureNetwork??o.captureNetwork,captureNavigation:e.captureNavigation??o.captureNavigation,ignoreUrlPatterns:e.ignoreUrlPatterns??[],redactUrlPatterns:e.redactUrlPatterns??[...o.redactUrlPatterns],onError:e.onError,fetchImpl:n,now:e.now??Date.now,random:e.random??Math.random}}function Ve(e,t,n){let r=He(n,t);if(r!==void 0)return r;let i=fe({sessionSampleRate:e.sessionSampleRate,onErrorSampleRate:e.onErrorSampleRate,random:e.random});return Y(n,t,i),i}function He(e,t){if(e!==null)try{let n=e.getItem(q);if(n===null)return;let r=JSON.parse(n);if(typeof r!=`object`||!r)return;let i=r;return i.id!==t||!Ue(i.mode)?void 0:i.mode}catch{return}}function Y(e,t,n){if(e!==null)try{e.setItem(q,JSON.stringify({id:t,mode:n}))}catch{}}function Ue(e){return e===`full`||e===`buffer`||e===`off`}function We(e){let t=typeof e==`object`&&e&&`stack`in e?e.stack:void 0;return typeof t==`string`?t:void 0}function X(e,t){e.catch(e=>{Q(t,e)})}async function Z(e,t){try{await e}catch(e){Q(t,e)}}function Q(e,t){try{let n=e?.(t);Ge(n)&&Promise.resolve(n).catch(()=>void 0)}catch{}}function Ge(e){return typeof e==`object`&&!!e&&`then`in e&&typeof e.then==`function`}function Ke(){let e=globalThis;if(e[J]!==void 0)throw Error(`logfire session replay: a replay controller is already active in this page`);let t={};Object.defineProperty(e,J,{configurable:!0,enumerable:!1,value:t,writable:!0});let n=!1;return()=>{n||(n=!0,e[J]===t&&Reflect.deleteProperty(e,J))}}function $(e){for(let t=e.length-1;t>=0;--t)try{e[t]?.()}catch{}e.length=0}function qe(e,t,n){return{message:e,...t===void 0||t.length===0?{}:{source:t},...n===void 0?{}:{stack:n}}}function Je(e){if(e==null)return`unhandledrejection`;if(typeof e==`string`)return e;if(typeof e==`number`||typeof e==`boolean`||typeof e==`bigint`||typeof e==`symbol`)return String(e);try{let t=JSON.stringify(e);return typeof t==`string`?t:Object.prototype.toString.call(e)}catch{return Object.prototype.toString.call(e)}}exports.CHUNK_ENVELOPE_VERSION=1,exports.CustomTag=a,exports.EventType=n,exports.IncrementalSource=r,exports.MouseInteractions=i,exports.ReplayUploadError=F,exports.startSessionReplay=Re;
|
package/dist/index.d.cts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { _ as
|
|
2
|
-
export { CHUNK_ENVELOPE_VERSION, type ChunkEnvelope, type ChunkMeta, type ConsolePayload, CustomTag, EventType, IncrementalSource, MouseInteractions, type NavigationPayload, type NetworkPayload, type ReplayUser, type RrwebEvent, type SamplingMode, type SessionAttributeValue, type SessionAttributes, type SessionAttributesInput, SessionReplay, type SessionReplayConfig, startSessionReplay };
|
|
1
|
+
import { S as SessionReplayConfig, _ as RrwebEvent, a as ReplayUploadFailureReason, b as SessionAttributes, c as ChunkMeta, d as EventType, f as IncrementalSource, g as ReplayUser, h as NetworkPayload, i as ReplayUploadErrorInit, l as ConsolePayload, m as NavigationPayload, n as startSessionReplay, o as CHUNK_ENVELOPE_VERSION, p as MouseInteractions, r as ReplayUploadError, s as ChunkEnvelope, t as SessionReplay, u as CustomTag, v as SamplingMode, x as SessionAttributesInput, y as SessionAttributeValue } from "./index-CGSeVpsY.js";
|
|
2
|
+
export { CHUNK_ENVELOPE_VERSION, type ChunkEnvelope, type ChunkMeta, type ConsolePayload, CustomTag, EventType, IncrementalSource, MouseInteractions, type NavigationPayload, type NetworkPayload, ReplayUploadError, type ReplayUploadErrorInit, type ReplayUploadFailureReason, type ReplayUser, type RrwebEvent, type SamplingMode, type SessionAttributeValue, type SessionAttributes, type SessionAttributesInput, SessionReplay, type SessionReplayConfig, startSessionReplay };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { _ as
|
|
2
|
-
export { CHUNK_ENVELOPE_VERSION, type ChunkEnvelope, type ChunkMeta, type ConsolePayload, CustomTag, EventType, IncrementalSource, MouseInteractions, type NavigationPayload, type NetworkPayload, type ReplayUser, type RrwebEvent, type SamplingMode, type SessionAttributeValue, type SessionAttributes, type SessionAttributesInput, SessionReplay, type SessionReplayConfig, startSessionReplay };
|
|
1
|
+
import { S as SessionReplayConfig, _ as RrwebEvent, a as ReplayUploadFailureReason, b as SessionAttributes, c as ChunkMeta, d as EventType, f as IncrementalSource, g as ReplayUser, h as NetworkPayload, i as ReplayUploadErrorInit, l as ConsolePayload, m as NavigationPayload, n as startSessionReplay, o as CHUNK_ENVELOPE_VERSION, p as MouseInteractions, r as ReplayUploadError, s as ChunkEnvelope, t as SessionReplay, u as CustomTag, v as SamplingMode, x as SessionAttributesInput, y as SessionAttributeValue } from "./index-CGSeVpsY.js";
|
|
2
|
+
export { CHUNK_ENVELOPE_VERSION, type ChunkEnvelope, type ChunkMeta, type ConsolePayload, CustomTag, EventType, IncrementalSource, MouseInteractions, type NavigationPayload, type NetworkPayload, ReplayUploadError, type ReplayUploadErrorInit, type ReplayUploadFailureReason, type ReplayUser, type RrwebEvent, type SamplingMode, type SessionAttributeValue, type SessionAttributes, type SessionAttributesInput, SessionReplay, type SessionReplayConfig, startSessionReplay };
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{record as e}from"@rrweb/record";import{gzip as t,gzipSync as n,strToU8 as r}from"fflate";const i={DomContentLoaded:0,Load:1,FullSnapshot:2,IncrementalSnapshot:3,Meta:4,Custom:5,Plugin:6},a={Mutation:0,MouseMove:1,MouseInteraction:2,Scroll:3,ViewportResize:4,Input:5,TouchMove:6,MediaInteraction:7,Drag:12,Selection:14},o={MouseUp:0,MouseDown:1,Click:2,ContextMenu:3,DblClick:4},s={Error:`logfire.error`,Console:`logfire.console`,Network:`logfire.network`,Navigation:`logfire.navigation`},c=1,l={sessionSampleRate:1,onErrorSampleRate:1,maskAllText:!0,maskAllInputs:!0,maskTextSelector:``,blockSelector:``,flushIntervalMs:5e3,maxBufferBytes:1e6,minSessionDurationMs:1e4,sessionIdleTimeoutMs:18e5,maxSessionDurationMs:144e5,distinctId:``,captureConsole:!1,captureNetwork:!0,captureNavigation:!0,redactUrlPatterns:[/.+/u]},u=new Set([a.MouseMove,a.MouseInteraction,a.Scroll,a.ViewportResize,a.Input,a.TouchMove,a.MediaInteraction,a.Drag,a.Selection]);function d(e){return e.type!==i.IncrementalSnapshot||typeof e.data!=`object`||e.data===null||!(`source`in e.data)?!1:typeof e.data.source==`number`&&u.has(e.data.source)}function f(e,t){return t<3e4?e:t<3e5?Math.max(e,6e4):Math.max(e,3e5)}function p(e,t){return t.some(t=>new RegExp(t.source,t.flags).test(e))}function m(e,t,n){if(!p(e,t))return e;try{let t=new URL(e,n);return`${t.origin}${t.pathname}`}catch{let[t=e]=e.split(`?`),[n=t]=t.split(`#`);return n}}const h=[`log`,`info`,`warn`,`error`,`debug`],g=1024,_=()=>void 0;function ee(e,t={}){let n=[],r=C(t.onError);try{for(let t of h)typeof console[t]==`function`&&n.push(w(console,t,(n,i)=>function(...a){return i()&&S(e,s.Console,{level:t,args:a.slice(0,10).map(ie)},r),n.apply(this,a)}));return T(n)}catch(e){throw E(n),e}}function v(e,t){let n=ne(t),r={...n,onError:C(n.onError)},i=y(e,r);try{return T([i,b(e,r)])}catch(e){throw i(),e}}function te(e,t={redactUrlPatterns:[]}){let n=C(t.onError),r=r=>{let i=m(window.location.href,t.redactUrlPatterns??[],window.location.href);S(e,s.Navigation,{url:i,kind:r},n)},i=[];try{i.push(w(history,`pushState`,(e,t)=>function(...n){let i=e.apply(this,n);return t()&&r(`push`),i})),i.push(w(history,`replaceState`,(e,t)=>function(...n){let i=e.apply(this,n);return t()&&r(`replace`),i}));let e=!0,t=()=>{e&&r(`pop`)};return window.addEventListener(`popstate`,t),i.push(()=>{e=!1,window.removeEventListener(`popstate`,t)}),T(i)}catch(e){throw E(i),e}}function y(e,t){return typeof window.fetch==`function`?w(window,`fetch`,(n,r)=>{let i=async function(i,a){let o=n;if(!r())return o.call(this,i,a);let c=t.now(),l=ae(i,a),u=oe(i);if(j(u,t.ignoreUrlPatterns))return o.call(this,i,a);let d=m(u,t.redactUrlPatterns,window.location.href),f=A(a?.body);try{let n=await o.call(this,i,a);return r()&&S(e,s.Network,k({method:l,url:d,status:n.status,durationMs:Math.max(0,t.now()-c),reqBytes:f,resBytes:O(n.headers)}),t.onError),n}catch(n){throw r()&&S(e,s.Network,k({method:l,url:d,status:0,durationMs:Math.max(0,t.now()-c),failed:!0,reqBytes:f}),t.onError),n}},a=Reflect.get(n,`__original`);return Object.defineProperty(i,"__original",{configurable:!0,value:typeof a==`function`?a:n,writable:!0}),i}):_}function b(e,t){let n=window.XMLHttpRequest.prototype,r=new WeakMap,i=[];try{return i.push(w(n,`open`,(e,n)=>function(...i){let[a,o]=i;if(!n())return e.apply(this,i);let s=o.toString();return j(s,t.ignoreUrlPatterns)?(r.delete(this),e.apply(this,i)):(r.set(this,{method:a.toUpperCase(),url:m(s,t.redactUrlPatterns,window.location.href),startedAt:0,reqBytes:0,failed:!1,emitted:!1}),e.apply(this,i))})),i.push(w(n,`send`,(n,i)=>function(...a){let[o]=a,c=i()?r.get(this):void 0;if(c===void 0)return n.apply(this,a);c.startedAt=t.now(),c.reqBytes=A(o);let l=()=>{c.failed=!0},u=()=>{c.emitted||(c.emitted=!0,this.removeEventListener(`error`,l),this.removeEventListener(`abort`,l),this.removeEventListener(`timeout`,l),i()&&S(e,s.Network,k({method:c.method,url:c.url,status:this.status,durationMs:Math.max(0,t.now()-c.startedAt),failed:c.failed||this.status===0,reqBytes:c.reqBytes,resBytes:se(this)}),t.onError))};this.addEventListener(`error`,l),this.addEventListener(`abort`,l),this.addEventListener(`timeout`,l),this.addEventListener(`loadend`,u,{once:!0});try{return n.apply(this,a)}catch(n){throw this.removeEventListener(`error`,l),this.removeEventListener(`abort`,l),this.removeEventListener(`timeout`,l),this.removeEventListener(`loadend`,u),i()&&S(e,s.Network,k({method:c.method,url:c.url,status:0,durationMs:Math.max(0,t.now()-c.startedAt),failed:!0,reqBytes:c.reqBytes}),t.onError),n}})),T(i)}catch(e){throw E(i),e}}function ne(e){return{...e,ignoreUrlPatterns:x(e.ignoreUrlPatterns),redactUrlPatterns:x(e.redactUrlPatterns)}}function x(e){return e.map(e=>{let t=e.flags.replace(/[gy]/gu,``);return t===e.flags?e:new RegExp(e.source,t)})}function S(e,t,n,r){try{e(t,n)}catch(e){r?.(e)}}function C(e){let t=!1;return n=>{if(!t){t=!0;try{let t=e?.(n);re(t)&&Promise.resolve(t).catch(()=>void 0)}catch{}finally{t=!1}}}}function re(e){return typeof e==`object`&&!!e&&`then`in e&&typeof e.then==`function`}function w(e,t,n){let r=e,i=r[t];if(typeof i!=`function`)return _;let a=!0,o=n(i,()=>a);return r[t]=o,()=>{a&&(a=!1,r[t]===o&&(r[t]=i))}}function T(e){let t=!1;return()=>{t||(t=!0,E(e))}}function E(e){for(let t=e.length-1;t>=0;--t)try{e[t]?.()}catch{}}function ie(e){if(e==null)return String(e);if(typeof e==`string`)return D(e);if(typeof e==`number`||typeof e==`boolean`||typeof e==`bigint`)return String(e);if(e instanceof Error)return D(e.stack??`${e.name}: ${e.message}`);try{return D(JSON.stringify(e))}catch{return Object.prototype.toString.call(e)}}function D(e){if(e.length<=g)return e;let t=e.charCodeAt(g-1),n=t>=55296&&t<=56319?g-1:g;return`${e.slice(0,n)}...(+${String(e.length-n)} chars)`}function ae(e,t){return(t?.method??(typeof e==`object`&&`method`in e?e.method:`GET`)).toUpperCase()}function oe(e){return typeof e==`string`||e instanceof URL?e.toString():e.url}function O(e){let t=e.get(`content-length`);if(t===null)return;let n=Number.parseInt(t,10);return Number.isFinite(n)?n:void 0}function se(e){try{let t=e.getResponseHeader(`content-length`);if(t===null)return;let n=Number.parseInt(t,10);return Number.isFinite(n)?n:void 0}catch{return}}function k(e){return{method:e.method,url:e.url,status:e.status,durationMs:e.durationMs,...e.failed===void 0?{}:{failed:e.failed},...e.reqBytes===void 0?{}:{reqBytes:e.reqBytes},...e.resBytes===void 0?{}:{resBytes:e.resBytes}}}function A(e){if(e==null)return 0;if(typeof e==`string`)return new TextEncoder().encode(e).byteLength;if(e instanceof ArrayBuffer||ArrayBuffer.isView(e))return e.byteLength;if(e instanceof Blob)return e.size}function j(e,t){return p(e,t)}const ce=new Set([`action`,`formaction`,`href`,`src`]);function le(t){let n=()=>{t.beforeUserActivity?.()},r={emit:e=>{t.emit(M(e,t.redactUrlPatterns))},maskAllInputs:t.maskAllInputs,recordCanvas:!1,collectFonts:!1,inlineImages:!1,recordCrossOriginIframes:!1,slimDOMOptions:`all`,hooks:{input:n,mediaInteaction:n,mouseInteraction:n,mousemove:n,scroll:n,selection:n,viewportResize:n},sampling:{mousemove:100,mouseInteraction:!0,scroll:250,media:800,input:`last`}};t.maskAllText?r.maskTextSelector=`*`:t.maskTextSelector!==void 0&&t.maskTextSelector.length>0&&(r.maskTextSelector=t.maskTextSelector),t.blockSelector!==void 0&&t.blockSelector.length>0&&(r.blockSelector=t.blockSelector),t.checkoutEveryNms!==void 0&&t.checkoutEveryNms>0&&(r.checkoutEveryNms=t.checkoutEveryNms);let i=e(r);if(i===void 0)throw Error(`logfire session replay: rrweb failed to start recording`);return{stop:()=>{i()},addCustomEvent:(t,n)=>{e.addCustomEvent(t,n)},takeFullSnapshot:()=>{e.takeFullSnapshot(!0)}}}function M(e,t){if(typeof e.data!=`object`||e.data===null)return e;let n=e.data;if(e.type===i.Meta){if(typeof n.href!=`string`)return e;let r=m(n.href,t,window.location.href);return r===n.href?e:{...e,data:{...n,href:r}}}if(e.type!==i.FullSnapshot&&(e.type!==i.IncrementalSnapshot||n.source!==a.Mutation))return e;let r=N(n,t);return r===n?e:{...e,data:r}}function N(e,t){if(Array.isArray(e)){let n=!1,r=[];for(let i of e){let e=N(i,t);e!==i&&(n=!0),r.push(e)}return n?r:e}if(typeof e!=`object`||!e)return e;let n=e,r=!1,i={};for(let[e,a]of Object.entries(n)){let n=e===`attributes`&&!Array.isArray(a)?ue(a,t):N(a,t);n!==a&&(r=!0),i[e]=n}return r?i:e}function ue(e,t){if(typeof e!=`object`||!e||Array.isArray(e))return e;let n=e,r=!1,i={};for(let[e,a]of Object.entries(n)){if(!ce.has(e.toLowerCase())||typeof a!=`string`){i[e]=a;continue}let n=m(a,t,window.location.href);n!==a&&(r=!0),i[e]=n}return r?i:e}function P(e){return Number.isFinite(e)?Math.min(1,Math.max(0,e)):0}function de(e){let t=e.random??Math.random;return t()<P(e.sessionSampleRate)?`full`:t()<P(e.onErrorSampleRate)?`buffer`:`off`}const fe=/^[a-z][a-z0-9_]{0,63}$/u;function pe(e,t){let n=0;for(let r of e)if(n+=+(r.length>0),n>t)return!1;return!0}function me(e,t){if(e===void 0)return Object.freeze({});let n;try{n=e()}catch(e){return t(e),Object.freeze({})}if(typeof n!=`object`||!n||Array.isArray(n))return Object.freeze({});let r;try{r=Object.getPrototypeOf(n)}catch(e){return t(e),Object.freeze({})}if(r!==Object.prototype&&r!==null)return Object.freeze({});let i;try{i=Object.keys(n)}catch(e){return t(e),Object.freeze({})}let a={},o=0;for(let e of i){if(!fe.test(e))continue;let r;try{r=Reflect.get(n,e)}catch(e){t(e);continue}if((typeof r==`boolean`||typeof r==`number`&&Number.isFinite(r)||typeof r==`string`&&pe(r,200))&&(Object.defineProperty(a,e,{configurable:!0,enumerable:!0,value:r,writable:!0}),o+=1,o===20))break}return Object.freeze(a)}function he(e=Date.now){let t=e(),n=new Uint8Array(new ArrayBuffer(16));ge(n),n[0]=Math.floor(t/2**40)&255,n[1]=Math.floor(t/2**32)&255,n[2]=Math.floor(t/2**24)&255,n[3]=Math.floor(t/2**16)&255,n[4]=Math.floor(t/2**8)&255,n[5]=t&255,n[6]=(n[6]??0)&15|112,n[8]=(n[8]??0)&63|128;let r=``;for(let e of n)r+=e.toString(16).padStart(2,`0`);return`${r.slice(0,8)}-${r.slice(8,12)}-${r.slice(12,16)}-${r.slice(16,20)}-${r.slice(20)}`}function ge(e){let t=globalThis.crypto;if(typeof t?.getRandomValues==`function`){t.getRandomValues(e);return}for(let t=0;t<e.length;t++)e[t]=Math.floor(Math.random()*256)}const F=`lf_session_replay`;var I=class{idleTimeoutMs;maxDurationMs;now;storage;memorySession;pendingSession;persistenceTimer;constructor(e){this.idleTimeoutMs=e.idleTimeoutMs,this.maxDurationMs=e.maxDurationMs,this.now=e.now??Date.now,this.storage=e.storage===void 0?L():e.storage}getSession(){let e=this.now();if(this.memorySession!==void 0&&!this.isExpired(this.memorySession,e))return this.memorySession;let t=this.read();return t!==void 0&&!this.isExpired(t,e)?t:this.createSession(e)}touch(){let e=this.now(),t={...this.getSession(),lastActivityAt:e};return this.memorySession=t,this.scheduleWrite(t),t}reset(){return this.createSession(this.now())}flushPendingStorage(){this.persistenceTimer!==void 0&&(clearTimeout(this.persistenceTimer),this.persistenceTimer=void 0);let e=this.pendingSession;this.pendingSession=void 0,e!==void 0&&this.writeNow(e)}isExpired(e,t){return t-e.lastActivityAt>this.idleTimeoutMs||t-e.startedAt>this.maxDurationMs}createSession(e){let t={id:he(this.now),startedAt:e,lastActivityAt:e};return this.flushPendingStorage(),this.writeNow(t),t}read(){if(this.storage!==null)try{let e=this.storage.getItem(F);if(e!==null){let t=JSON.parse(e);if(_e(t))return this.memorySession=t,t}}catch{return this.memorySession}return this.memorySession}write(e){if(this.memorySession=e,this.storage!==null)try{this.storage.setItem(F,JSON.stringify(e))}catch{}}scheduleWrite(e){this.pendingSession=e,this.persistenceTimer===void 0&&(this.persistenceTimer=setTimeout(()=>{this.persistenceTimer=void 0;let e=this.pendingSession;this.pendingSession=void 0,e!==void 0&&this.writeNow(e)},1e3))}writeNow(e){this.memorySession=e,this.write(e)}};function L(){try{return globalThis.sessionStorage??null}catch{return null}}function _e(e){if(typeof e!=`object`||!e)return!1;let t=e;return typeof t.id==`string`&&t.id.length>0&&typeof t.startedAt==`number`&&Number.isFinite(t.startedAt)&&typeof t.lastActivityAt==`number`&&Number.isFinite(t.lastActivityAt)}function R(e){return typeof e==`object`&&e?e:void 0}function z(e){return typeof e==`string`&&e.length>0?e:void 0}function ve(e){let t=R(e),n=z(t?.id);if(t===void 0||n===void 0)return;let r=z(t.name),i=z(t.email);return{id:n,...r===void 0?{}:{name:r},...i===void 0?{}:{email:i}}}function ye(e,t,n,r={},c){let l=1/0,u=0,d=0,f=0,p=0,m=!1,h=new Set;for(let e of t){e.timestamp<l&&(l=e.timestamp),e.timestamp>u&&(u=e.timestamp);let t=R(e.data);if(e.type===i.FullSnapshot)m=!0;else if(e.type===i.Meta){let e=z(t?.href);e!==void 0&&h.add(e)}else if(e.type===i.IncrementalSnapshot&&t!==void 0){let e=t.source;if(e===a.MouseInteraction){let e=t.type;(e===o.Click||e===o.DblClick)&&d++}else e===a.Input&&f++}else if(e.type===i.Custom&&t!==void 0){let e=z(t.tag),n=R(t.payload);if(e===s.Error)p++;else if(e===s.Console)n?.level===`error`&&p++;else if(e===s.Navigation){let e=z(n?.url);e!==void 0&&h.add(e)}}}return{seq:e,firstTimestamp:l===1/0?0:l,lastTimestamp:u,eventCount:t.length,clickCount:d,keypressCount:f,errorCount:p,hasFullSnapshot:m,urls:[...h],...n!==void 0&&n.length>0?{distinctId:n}:{},...c===void 0?{}:{user:{...c}},...Object.keys(r).length===0?{}:{sessionAttributes:{...r}}}}const B=`lf_session_replay_seq`,be={gzip:t,gzipSync:n};var xe=class{buffer=[];bufferHasFullSnapshot=!1;pendingBytes=0;seq=0;timer;nextFlushAt;lastUserActivityAt;startedAt;started=!1;held;heldBufferIncomplete=!1;minimumBufferIncomplete=!1;minimumDurationSatisfied=!1;firstObservedTimestamp;lastObservedTimestamp;refreshingMinimumSnapshot=!1;mode;flushing;reservedKeepaliveBytes=0;asyncCompressionAvailable=!0;config;compression;storage;sessionId;sessionAttributes;takeFullSnapshot;constructor(e,t,n,r=L(),i=be,a={},o={}){this.config=e,this.sessionId=t,this.sessionAttributes=Object.freeze({...a}),this.mode=n,this.storage=r,this.compression=i,this.held=o.holdUntilActivity===!0&&n===`full`,this.takeFullSnapshot=o.takeFullSnapshot,this.minimumDurationSatisfied=e.minSessionDurationMs===0,this.seq=this.loadSeq(t),this.startedAt=this.config.now(),this.lastUserActivityAt=this.startedAt}start(){this.started||this.mode!==`full`||(this.started=!0,this.scheduleFlush())}add(e){this.minimumDurationSatisfied||(this.firstObservedTimestamp??=e.timestamp,this.lastObservedTimestamp=Math.max(this.lastObservedTimestamp??e.timestamp,e.timestamp)),d(e)&&(this.lastUserActivityAt=this.config.now());let t=U(e);if(this.refreshingMinimumSnapshot){this.buffer.push(e),this.pendingBytes+=t;return}let n=!this.minimumDurationSatisfied;if(this.mode===`buffer`||this.held||n){if(e.type===i.Meta){this.buffer=[e],this.bufferHasFullSnapshot=!1,this.minimumBufferIncomplete=!1,this.pendingBytes=t,n&&(this.mode===`full`&&(this.firstObservedTimestamp=e.timestamp),this.finishMinimumBufferingEvent());return}if(e.type===i.FullSnapshot){let r=!this.bufferHasFullSnapshot&&this.buffer.length===1&&this.buffer[0]?.type===i.Meta?this.buffer[0]:void 0;this.buffer=r===void 0?[e]:[r,e],this.bufferHasFullSnapshot=!0,this.pendingBytes=t+(r===void 0?0:U(r)),this.heldBufferIncomplete=!1,this.minimumBufferIncomplete=!1,n&&(this.mode===`full`&&(this.firstObservedTimestamp=r?.timestamp??e.timestamp),this.finishMinimumBufferingEvent());return}if(!this.bufferHasFullSnapshot||t>this.config.maxBufferBytes){this.heldBufferIncomplete||=this.held,this.minimumBufferIncomplete||=n,n&&this.finishMinimumBufferingEvent();return}if(this.pendingBytes+t>this.config.maxBufferBytes){this.heldBufferIncomplete||=this.held,this.minimumBufferIncomplete||=n,n&&this.finishMinimumBufferingEvent();return}}if(this.buffer.push(e),this.pendingBytes+=t,n&&this.minimumDurationReached()){this.flushAndReport();return}this.mode===`full`&&this.pendingBytes>=this.config.maxBufferBytes?this.flushAndReport():this.scheduleFlush()}async triggerFlush(){return this.mode===`buffer`&&(this.bufferHasFullSnapshot||(this.buffer=[],this.pendingBytes=0),this.mode=`full`,this.start()),this.flush()}async flush(e={}){return this.flushInternal(e)}async flushInternal(e={}){if(this.mode===`buffer`||this.held||this.buffer.length===0||!this.minimumDurationReached()||(this.clearScheduledFlush(),this.minimumBufferIncomplete&&!this.refreshMinimumBuffer()))return;this.minimumDurationSatisfied=!0;let t=this.buffer;this.buffer=[],this.bufferHasFullSnapshot=!1,this.minimumBufferIncomplete=!1,this.pendingBytes=0;let n=e.keepalive===!0?Te(t):[t],r=this.seq;this.seq+=n.length;let i=this.sessionId;this.saveSeq(i,this.seq);let a=this.snapshotIdentity(),o=e.keepalive===!0?Promise.resolve():this.flushing??Promise.resolve(),s=e.keepalive===!0?this.deliverLifecycle(n,r,i,a):o.then(async()=>{for(let e=0;e<n.length;e++){let t=n[e];t!==void 0&&await this.deliverOrdinary(t,r+e,i,a)}}),c=this.flushing;this.flushing=e.keepalive===!0&&c!==void 0?Promise.all([c,s]).then(()=>void 0,()=>void 0):s.catch(()=>void 0),await s}async shutdown(e={}){if(this.started=!1,this.clearScheduledFlush(),this.held){this.discard(),await this.flushing;return}if(!this.minimumDurationReached()){this.discard(),await this.flushing;return}await this.flush(e),await this.flushing}discard(){this.started=!1,this.clearScheduledFlush(),this.buffer=[],this.bufferHasFullSnapshot=!1,this.minimumBufferIncomplete=!1,this.pendingBytes=0}getMode(){return this.mode}isHeld(){return this.held}releaseHeld(e){this.held&&((this.heldBufferIncomplete||!this.bufferHasFullSnapshot)&&(this.buffer=[],this.bufferHasFullSnapshot=!1,this.pendingBytes=0,e()),this.held=!1,this.pendingBytes>=this.config.maxBufferBytes?this.flushAndReport():this.scheduleFlush())}flushAndReport(){this.flushInternal().catch(e=>{V(this.config.onError,e)})}scheduleFlush(){let e=this.config.now(),t=Math.max(0,this.config.minSessionDurationMs-(e-this.startedAt)),n=Math.max(f(this.config.flushIntervalMs,e-this.lastUserActivityAt),t);this.scheduleFlushIn(e,n)}scheduleFlushIn(e,t){if(!this.started||this.mode!==`full`||this.held||this.buffer.length===0)return;let n=e+t;this.timer!==void 0&&this.nextFlushAt!==void 0&&this.nextFlushAt<=n||(this.clearScheduledFlush(),this.nextFlushAt=n,this.timer=setTimeout(()=>{this.timer=void 0,this.nextFlushAt=void 0,this.flushAndReport()},t))}clearScheduledFlush(){this.timer!==void 0&&(clearTimeout(this.timer),this.timer=void 0),this.nextFlushAt=void 0}minimumDurationReached(){return this.minimumDurationSatisfied||this.config.minSessionDurationMs===0?!0:this.firstObservedTimestamp===void 0||this.lastObservedTimestamp===void 0?!1:this.lastObservedTimestamp-this.firstObservedTimestamp>=this.config.minSessionDurationMs}finishMinimumBufferingEvent(){this.minimumDurationReached()?this.flushAndReport():this.scheduleFlush()}refreshMinimumBuffer(){let e=this.buffer.length,t=this.pendingBytes;if(this.takeFullSnapshot!==void 0){this.refreshingMinimumSnapshot=!0;try{this.takeFullSnapshot()}catch(e){V(this.config.onError,e)}finally{this.refreshingMinimumSnapshot=!1}}return this.buffer.slice(e).some(e=>e.type===i.FullSnapshot)?(this.minimumBufferIncomplete=!1,!0):(this.buffer.length=e,this.pendingBytes=t,!1)}snapshotIdentity(){let e=this.snapshotUser(),t=this.config.distinctId;if(this.config.getDistinctId!==void 0)try{t=this.config.getDistinctId()??this.config.distinctId}catch(e){V(this.config.onError,e)}else e!==void 0&&(t=e.id);return{distinctId:t,user:e}}createEnvelope(e,t,n){return{version:1,meta:ye(t,e,n.distinctId,this.sessionAttributes,n.user),events:e}}snapshotUser(){if(this.config.getUser!==void 0)try{return ve(this.config.getUser())}catch(e){V(this.config.onError,e);return}}async deliverOrdinary(e,t,n,i){let a=this.createEnvelope(e,t,i);try{let e=r(JSON.stringify(a)),i=await this.compressOrdinary(e);await this.sendWithRetry({body:i,lifecycle:!1,requestKeepalive:!1,reservedBytes:0,seq:t,sessionId:n})}catch(e){V(this.config.onError,e)}}async deliverLifecycle(e,t,n,i){let a=[];for(let o=0;o<e.length;o++){let s=e[o];if(s===void 0){a.push(void 0);continue}let c=this.createEnvelope(s,t+o,i);try{a.push({body:this.compression.gzipSync(r(JSON.stringify(c))),lifecycle:!0,requestKeepalive:!1,reservedBytes:0,seq:t+o,sessionId:n})}catch(e){V(this.config.onError,e),a.push(void 0)}}let o=!0,s=Math.max(0,48e3-this.reservedKeepaliveBytes);for(let e of a){if(e===void 0){o=!1;continue}o&&e.body.byteLength<=s?(e.requestKeepalive=!0,e.reservedBytes=e.body.byteLength,this.reservedKeepaliveBytes+=e.reservedBytes,s-=e.reservedBytes):o=!1}await Promise.all(a.map(async e=>{if(e!==void 0)try{await this.sendWithRetry(e)}catch(e){V(this.config.onError,e)}}))}async compressOrdinary(e){if(!this.asyncCompressionAvailable)return this.compression.gzipSync(e);try{return await Ee(this.compression,e)}catch{return this.asyncCompressionAvailable=!1,this.compression.gzipSync(e)}}async sendWithRetry(e){let t=e.lifecycle?1:3;for(let n=1;n<=t;n++)try{await this.send(e);return}catch(e){let r=Oe(e,n);if(r===void 0||n>=t)throw e;await we(r)}}async send(e){let t,n,r,i=new AbortController,a=setTimeout(()=>{i.abort(Error(`replay upload timed out after 10000ms`))},1e4);try{let a=`${this.config.replayUrl.replace(/\/+$/u,``)}/${encodeURIComponent(e.sessionId)}?seq=${String(e.seq)}`,o=await this.getUploadHeaders(),s=this.config.fetchImpl(a,{method:`POST`,headers:o,body:e.body.slice(),keepalive:e.requestKeepalive,signal:i.signal});t=!0;let c=await s;if(n=!0,r=await De(c),!c.ok){let e=c.status===429?ke(c.headers.get(`retry-after`),Date.now()):void 0;throw new H(c.status,e)}}finally{clearTimeout(a),e.reservedBytes>0&&(t!==!0||n!==!0||r===!0)&&(this.reservedKeepaliveBytes=Math.max(0,this.reservedKeepaliveBytes-e.reservedBytes))}}async getUploadHeaders(){let e=this.config.headers===void 0?{}:await this.config.headers(),t=await Ce(this.config.token);return{...t===void 0||t.length===0?e:{...Object.fromEntries(Object.entries(e).filter(([e])=>e.toLowerCase()!==`authorization`)),Authorization:`Bearer ${t}`},"Content-Type":`application/json`,"Content-Encoding":`gzip`}}loadSeq(e){if(this.storage===null)return 0;try{let t=this.storage.getItem(B);if(t===null)return 0;let n=JSON.parse(t);if(typeof n!=`object`||!n)return 0;let r=n;return r.id===e&&typeof r.seq==`number`&&Number.isFinite(r.seq)?r.seq:0}catch{return 0}}saveSeq(e,t){if(this.storage!==null)try{this.storage.setItem(B,JSON.stringify({id:e,seq:t}))}catch{}}};function V(e,t){try{let n=e?.(t);Se(n)&&Promise.resolve(n).catch(()=>void 0)}catch{}}function Se(e){return typeof e==`object`&&!!e&&`then`in e&&typeof e.then==`function`}var H=class extends Error{retryAfter;status;constructor(e,t){super(`replay ingest failed: ${String(e)}`),this.status=e,this.retryAfter=t,this.name=`ReplayIngestError`}};async function Ce(e){return typeof e==`function`?e():e}async function we(e){return new Promise(t=>{setTimeout(t,e)})}function U(e){try{return r(JSON.stringify(e)).byteLength}catch{return 0}}function Te(e){let t=[],n=[],r=0;for(let i of e){let e=U(i);n.length>0&&r+e>48e3&&(t.push(n),n=[],r=0),n.push(i),r+=e}return n.length>0&&t.push(n),t}async function Ee(e,t){return new Promise((n,r)=>{let i=[];typeof window<`u`&&i.push(window),typeof document<`u`&&i.push(document);let a=()=>{for(let e of i)e.removeEventListener(`securitypolicyviolation`,s)},o=(e,t)=>{if(a(),e!==null){r(e);return}n(t)},s=e=>{let t=e;(t.effectiveDirective.includes(`worker-src`)||t.violatedDirective.includes(`worker-src`))&&o(Error(`replay compression worker blocked by Content Security Policy`))};for(let e of i)e.addEventListener(`securitypolicyviolation`,s);try{e.gzip(t,{level:6},(e,t)=>{o(e,t)})}catch(e){a(),r(e instanceof Error?e:Error(String(e)))}})}async function De(e){if(e.body===null)return!0;try{return await e.body.cancel(),!0}catch{return!1}}function Oe(e,t){return e instanceof H?e.status===429?e.retryAfter?.kind===`too-long`?void 0:e.retryAfter?.kind===`delay`?e.retryAfter.milliseconds:500*t:e.status<500?void 0:500*t:500*t}function ke(e,t){if(e===null)return{kind:`fallback`};let n=e.trim();if(/^\d+$/u.test(n)){let e=Number(n);return Number.isSafeInteger(e)?W(e*1e3):{kind:`fallback`}}let r=Ne(n,t);return r===void 0?{kind:`fallback`}:W(Math.max(0,r-t))}function W(e){return e>1e4?{kind:`too-long`}:{kind:`delay`,milliseconds:e}}const Ae=[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`],je=[`Sun`,`Mon`,`Tue`,`Wed`,`Thu`,`Fri`,`Sat`],Me=[`Sunday`,`Monday`,`Tuesday`,`Wednesday`,`Thursday`,`Friday`,`Saturday`];function Ne(e,t){let n=/^(Sun|Mon|Tue|Wed|Thu|Fri|Sat), (\d{2}) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\d{4}) (\d{2}):(\d{2}):(\d{2}) GMT$/u.exec(e);if(n!==null)return G(n[1],n[2],n[3],n[4],n[5],n[6],n[7]);let r=/^(Sunday|Monday|Tuesday|Wednesday|Thursday|Friday|Saturday), (\d{2})-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\d{2}) (\d{2}):(\d{2}):(\d{2}) GMT$/u.exec(e);if(r!==null){let e=new Date(t).getUTCFullYear(),n=Number(r[4]),i=Math.floor(e/100)*100+n;return i>e+50&&(i-=100),G(r[1],r[2],r[3],String(i),r[5],r[6],r[7])}let i=/^(Sun|Mon|Tue|Wed|Thu|Fri|Sat) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\d{2}| \d) (\d{2}):(\d{2}):(\d{2}) (\d{4})$/u.exec(e);if(i!==null)return G(i[1],i[3]?.trim(),i[2],i[7],i[4],i[5],i[6])}function G(e,t,n,r,i,a,o){let s=Number(t),c=Ae.indexOf(n),l=Number(r),u=Number(i),d=Number(a),f=Number(o);if(c<0||s<1||s>31||u>23||d>59||f>59)return;let p=new Date(0);if(p.setUTCFullYear(l,c,s),p.setUTCHours(u,d,f,0),p.getUTCFullYear()!==l||p.getUTCMonth()!==c||p.getUTCDate()!==s||p.getUTCHours()!==u||p.getUTCMinutes()!==d||p.getUTCSeconds()!==f)return;let m=je.indexOf(e),h=Me.indexOf(e);return(m>=0?m:h)===p.getUTCDay()?p.getTime():void 0}const Pe={mode:`off`,recording:!1,getSessionId:()=>``,flush:async()=>Promise.resolve(),stop:async()=>Promise.resolve()},K=`lf_session_replay_mode`,q=Symbol.for(`@pydantic/logfire-session-replay/controller`);function Fe(e){if(typeof window>`u`||typeof document>`u`)return Pe;let t=Ue();try{let n=Le(e),r=new I({idleTimeoutMs:n.sessionIdleTimeoutMs,maxDurationMs:n.maxSessionDurationMs,now:n.now}),i=r.getSession().id,a=e=>{let t;try{t=n.getSessionId?.()}catch(e){return Z(n.onError,e),i}if(t!==void 0&&t.length>0)return i=t,t;let a=e?r.touch().id:r.getSession().id;return i=a,a},o=L(),s=a(!1),c,l=!1,u=Promise.resolve(),d,f=(e,t,r=!t)=>{let i=Re(n,e,o);if(!(i===`off`||l||e!==s))try{c=Ie({config:n,getSessionId:a,mode:i,onSessionChanged:p,samplingModeStorage:o,sessionId:e,holdUntilActivity:r})}catch(e){if(c=void 0,t)throw e;Z(n.onError,e)}},p=(e,t=!0)=>{if(l||e===s)return;s=e;let r=c;c=void 0;let i=r?.deactivate()??Promise.resolve();u=u.then(async()=>{await X(i,n.onError),!l&&s===e&&f(e,!1,t)})},m;try{f(s,!0),m=setInterval(()=>{p(a(!1))},1e3)}catch(e){throw c?.discard(),c=void 0,e}return{get mode(){try{return c?.transport.getMode()??`off`}catch(e){return Z(n.onError,e),`off`}},get recording(){try{return c!==void 0}catch(e){return Z(n.onError,e),!1}},getSessionId:()=>a(!1),flush:async()=>{try{await u,await c?.transport.flush()}catch(e){Z(n.onError,e)}},stop:async()=>(d??=(async()=>{l=!0,clearInterval(m);let e=c;c=void 0,await X(e?.deactivate()??Promise.resolve(),n.onError),await u,r.flushPendingStorage(),t()})(),d)}}catch(e){throw t(),e}}function Ie(e){let{config:t,getSessionId:n,holdUntilActivity:r,mode:i,onSessionChanged:a,samplingModeStorage:o,sessionId:c}=e,l=me(t.getSessionAttributes,e=>{Z(t.onError,e)}),u,f=new xe(t,c,i,void 0,void 0,l,{holdUntilActivity:r,takeFullSnapshot:()=>{u.takeFullSnapshot()}}),p=[],m=!0,h=()=>m,g;try{u=le({beforeUserActivity:()=>{if(!(!m||!f.isHeld()))try{let e=n(!0);if(e!==c){a(e,!1);return}f.releaseHeld(()=>{u.takeFullSnapshot()})}catch(e){Z(t.onError,e)}},emit:e=>{if(m)try{let t=n(d(e));if(t!==c){a(t,!1);return}f.add(e)}catch(e){Z(t.onError,e)}},maskAllText:t.maskAllText,maskAllInputs:t.maskAllInputs,maskTextSelector:t.maskTextSelector,blockSelector:t.blockSelector,checkoutEveryNms:i===`buffer`?12e4:0,redactUrlPatterns:t.redactUrlPatterns}),p.push(()=>{u.stop()});let e=(e,n)=>{if(m)try{u.addCustomEvent(e,n)}catch(e){Z(t.onError,e)}},r=n=>{h()&&(f.releaseHeld(()=>{u.takeFullSnapshot()}),e(s.Error,n),h()&&f.getMode()===`buffer`&&(J(o,c,`full`),Y(f.triggerFlush(),t.onError)))},l=e=>{e instanceof ErrorEvent&&r($(e.message,e.filename,Ve(e.error)))},_=e=>{let t=e.reason;r($(We(t?.message??e.reason),void 0,typeof t?.stack==`string`?t.stack:void 0))},y=()=>{document.visibilityState===`hidden`&&Y(f.flush({keepalive:!0}),t.onError)},b=()=>{Y(f.flush({keepalive:!0}),t.onError)};return window.addEventListener(`error`,l,!0),p.push(()=>{window.removeEventListener(`error`,l,!0)}),window.addEventListener(`unhandledrejection`,_,!0),p.push(()=>{window.removeEventListener(`unhandledrejection`,_,!0)}),document.addEventListener(`visibilitychange`,y),p.push(()=>{document.removeEventListener(`visibilitychange`,y)}),window.addEventListener(`pagehide`,b),p.push(()=>{window.removeEventListener(`pagehide`,b)}),t.captureConsole&&p.push(ee(e,{onError:t.onError})),t.captureNetwork&&p.push(v(e,{ignoreUrlPatterns:t.ignoreUrlPatterns,now:t.now,onError:t.onError,redactUrlPatterns:t.redactUrlPatterns})),t.captureNavigation&&p.push(te(e,{onError:t.onError,redactUrlPatterns:t.redactUrlPatterns})),f.start(),{sessionId:c,transport:f,deactivate:async()=>(g??=(async()=>{let e=f.flush({keepalive:!1});m=!1,Q(p),await e,await f.shutdown({keepalive:!1})})(),g),discard:()=>{m=!1,Q(p),f.discard()}}}catch(e){throw m=!1,Q(p),f.discard(),e}}function Le(e){if(e.replayUrl.length===0)throw Error("logfire session replay: `replayUrl` is required");let t=new URL(e.replayUrl,`https://logfire.invalid/`);if(t.search!==``||t.hash!==``)throw Error("logfire session replay: `replayUrl` must not contain a query or fragment");let n=e.fetchImpl??(typeof fetch==`function`?fetch.bind(globalThis):void 0);if(n===void 0)throw Error("logfire session replay: no `fetch` available; pass `fetchImpl`");return{replayUrl:e.replayUrl,headers:e.headers,token:e.token,getSessionId:e.getSessionId,getSessionAttributes:e.getSessionAttributes,sessionSampleRate:e.sessionSampleRate??l.sessionSampleRate,onErrorSampleRate:e.onErrorSampleRate??l.onErrorSampleRate,maskAllText:e.maskAllText??l.maskAllText,maskAllInputs:e.maskAllInputs??l.maskAllInputs,maskTextSelector:e.maskTextSelector??l.maskTextSelector,blockSelector:e.blockSelector??l.blockSelector,flushIntervalMs:e.flushIntervalMs??l.flushIntervalMs,maxBufferBytes:e.maxBufferBytes??l.maxBufferBytes,minSessionDurationMs:e.minSessionDurationMs??l.minSessionDurationMs,sessionIdleTimeoutMs:e.sessionIdleTimeoutMs??l.sessionIdleTimeoutMs,maxSessionDurationMs:e.maxSessionDurationMs??l.maxSessionDurationMs,distinctId:e.distinctId??l.distinctId,getDistinctId:e.getDistinctId,getUser:e.getUser,captureConsole:e.captureConsole??l.captureConsole,captureNetwork:e.captureNetwork??l.captureNetwork,captureNavigation:e.captureNavigation??l.captureNavigation,ignoreUrlPatterns:e.ignoreUrlPatterns??[],redactUrlPatterns:e.redactUrlPatterns??[...l.redactUrlPatterns],onError:e.onError,fetchImpl:n,now:e.now??Date.now,random:e.random??Math.random}}function Re(e,t,n){let r=ze(n,t);if(r!==void 0)return r;let i=de({sessionSampleRate:e.sessionSampleRate,onErrorSampleRate:e.onErrorSampleRate,random:e.random});return J(n,t,i),i}function ze(e,t){if(e!==null)try{let n=e.getItem(K);if(n===null)return;let r=JSON.parse(n);if(typeof r!=`object`||!r)return;let i=r;return i.id!==t||!Be(i.mode)?void 0:i.mode}catch{return}}function J(e,t,n){if(e!==null)try{e.setItem(K,JSON.stringify({id:t,mode:n}))}catch{}}function Be(e){return e===`full`||e===`buffer`||e===`off`}function Ve(e){let t=typeof e==`object`&&e&&`stack`in e?e.stack:void 0;return typeof t==`string`?t:void 0}function Y(e,t){e.catch(e=>{Z(t,e)})}async function X(e,t){try{await e}catch(e){Z(t,e)}}function Z(e,t){try{let n=e?.(t);He(n)&&Promise.resolve(n).catch(()=>void 0)}catch{}}function He(e){return typeof e==`object`&&!!e&&`then`in e&&typeof e.then==`function`}function Ue(){let e=globalThis;if(e[q]!==void 0)throw Error(`logfire session replay: a replay controller is already active in this page`);let t={};Object.defineProperty(e,q,{configurable:!0,enumerable:!1,value:t,writable:!0});let n=!1;return()=>{n||(n=!0,e[q]===t&&Reflect.deleteProperty(e,q))}}function Q(e){for(let t=e.length-1;t>=0;--t)try{e[t]?.()}catch{}e.length=0}function $(e,t,n){return{message:e,...t===void 0||t.length===0?{}:{source:t},...n===void 0?{}:{stack:n}}}function We(e){if(e==null)return`unhandledrejection`;if(typeof e==`string`)return e;if(typeof e==`number`||typeof e==`boolean`||typeof e==`bigint`||typeof e==`symbol`)return String(e);try{let t=JSON.stringify(e);return typeof t==`string`?t:Object.prototype.toString.call(e)}catch{return Object.prototype.toString.call(e)}}export{c as CHUNK_ENVELOPE_VERSION,s as CustomTag,i as EventType,a as IncrementalSource,o as MouseInteractions,Fe as startSessionReplay};
|
|
1
|
+
import{record as e}from"@rrweb/record";import{gzip as t,gzipSync as n,strToU8 as r}from"fflate";const i={DomContentLoaded:0,Load:1,FullSnapshot:2,IncrementalSnapshot:3,Meta:4,Custom:5,Plugin:6},a={Mutation:0,MouseMove:1,MouseInteraction:2,Scroll:3,ViewportResize:4,Input:5,TouchMove:6,MediaInteraction:7,Drag:12,Selection:14},o={MouseUp:0,MouseDown:1,Click:2,ContextMenu:3,DblClick:4},s={Error:`logfire.error`,Console:`logfire.console`,Network:`logfire.network`,Navigation:`logfire.navigation`},c=1,l={sessionSampleRate:1,onErrorSampleRate:1,maskAllText:!0,maskAllInputs:!0,maskTextSelector:``,blockSelector:``,flushIntervalMs:5e3,maxBufferBytes:1e6,minSessionDurationMs:1e4,sessionIdleTimeoutMs:18e5,maxSessionDurationMs:144e5,distinctId:``,captureConsole:!1,captureNetwork:!0,captureNavigation:!0,redactUrlPatterns:[/.+/u]},u=new Set([a.MouseMove,a.MouseInteraction,a.Scroll,a.ViewportResize,a.Input,a.TouchMove,a.MediaInteraction,a.Drag,a.Selection]);function d(e){return e.type!==i.IncrementalSnapshot||typeof e.data!=`object`||e.data===null||!(`source`in e.data)?!1:typeof e.data.source==`number`&&u.has(e.data.source)}function f(e,t){return t<3e4?e:t<3e5?Math.max(e,6e4):Math.max(e,3e5)}function p(e,t){return t.some(t=>new RegExp(t.source,t.flags).test(e))}function m(e,t,n){if(!p(e,t))return e;try{let t=new URL(e,n);return`${t.origin}${t.pathname}`}catch{let[t=e]=e.split(`?`),[n=t]=t.split(`#`);return n}}const h=[`log`,`info`,`warn`,`error`,`debug`],g=1024,_=()=>void 0;function ee(e,t={}){let n=[],r=S(t.onError);try{for(let t of h)typeof console[t]==`function`&&n.push(C(console,t,(n,i)=>function(...a){return i()&&x(e,s.Console,{level:t,args:a.slice(0,10).map(ae)},r),n.apply(this,a)}));return w(n)}catch(e){throw T(n),e}}function te(e,t){let n=re(t),r={...n,onError:S(n.onError)},i=v(e,r);try{return w([i,y(e,r)])}catch(e){throw i(),e}}function ne(e,t={redactUrlPatterns:[]}){let n=S(t.onError),r=r=>{let i=m(window.location.href,t.redactUrlPatterns??[],window.location.href);x(e,s.Navigation,{url:i,kind:r},n)},i=[];try{i.push(C(history,`pushState`,(e,t)=>function(...n){let i=e.apply(this,n);return t()&&r(`push`),i})),i.push(C(history,`replaceState`,(e,t)=>function(...n){let i=e.apply(this,n);return t()&&r(`replace`),i}));let e=!0,t=()=>{e&&r(`pop`)};return window.addEventListener(`popstate`,t),i.push(()=>{e=!1,window.removeEventListener(`popstate`,t)}),w(i)}catch(e){throw T(i),e}}function v(e,t){return typeof window.fetch==`function`?C(window,`fetch`,(n,r)=>{let i=async function(i,a){let o=n;if(!r())return o.call(this,i,a);let c=t.now(),l=oe(i,a),u=se(i);if(ue(u,t.ignoreUrlPatterns))return o.call(this,i,a);let d=m(u,t.redactUrlPatterns,window.location.href),f=O(a?.body);try{let n=await o.call(this,i,a);return r()&&x(e,s.Network,D({method:l,url:d,status:n.status,durationMs:Math.max(0,t.now()-c),reqBytes:f,resBytes:ce(n.headers)}),t.onError),n}catch(n){throw r()&&x(e,s.Network,D({method:l,url:d,status:0,durationMs:Math.max(0,t.now()-c),failed:!0,reqBytes:f}),t.onError),n}},a=Reflect.get(n,`__original`);return Object.defineProperty(i,"__original",{configurable:!0,value:typeof a==`function`?a:n,writable:!0}),i}):_}function y(e,t){let n=window.XMLHttpRequest.prototype,r=new WeakMap,i=[];try{return i.push(C(n,`open`,(e,n)=>function(...i){let[a,o]=i;if(!n())return e.apply(this,i);let s=o.toString();return ue(s,t.ignoreUrlPatterns)?(r.delete(this),e.apply(this,i)):(r.set(this,{method:a.toUpperCase(),url:m(s,t.redactUrlPatterns,window.location.href),startedAt:0,reqBytes:0,failed:!1,emitted:!1}),e.apply(this,i))})),i.push(C(n,`send`,(n,i)=>function(...a){let[o]=a,c=i()?r.get(this):void 0;if(c===void 0)return n.apply(this,a);c.startedAt=t.now(),c.reqBytes=O(o);let l=()=>{c.failed=!0},u=()=>{c.emitted||(c.emitted=!0,this.removeEventListener(`error`,l),this.removeEventListener(`abort`,l),this.removeEventListener(`timeout`,l),i()&&x(e,s.Network,D({method:c.method,url:c.url,status:this.status,durationMs:Math.max(0,t.now()-c.startedAt),failed:c.failed||this.status===0,reqBytes:c.reqBytes,resBytes:le(this)}),t.onError))};this.addEventListener(`error`,l),this.addEventListener(`abort`,l),this.addEventListener(`timeout`,l),this.addEventListener(`loadend`,u,{once:!0});try{return n.apply(this,a)}catch(n){throw this.removeEventListener(`error`,l),this.removeEventListener(`abort`,l),this.removeEventListener(`timeout`,l),this.removeEventListener(`loadend`,u),i()&&x(e,s.Network,D({method:c.method,url:c.url,status:0,durationMs:Math.max(0,t.now()-c.startedAt),failed:!0,reqBytes:c.reqBytes}),t.onError),n}})),w(i)}catch(e){throw T(i),e}}function re(e){return{...e,ignoreUrlPatterns:b(e.ignoreUrlPatterns),redactUrlPatterns:b(e.redactUrlPatterns)}}function b(e){return e.map(e=>{let t=e.flags.replace(/[gy]/gu,``);return t===e.flags?e:new RegExp(e.source,t)})}function x(e,t,n,r){try{e(t,n)}catch(e){r?.(e)}}function S(e){let t=!1;return n=>{if(!t){t=!0;try{let t=e?.(n);ie(t)&&Promise.resolve(t).catch(()=>void 0)}catch{}finally{t=!1}}}}function ie(e){return typeof e==`object`&&!!e&&`then`in e&&typeof e.then==`function`}function C(e,t,n){let r=e,i=r[t];if(typeof i!=`function`)return _;let a=!0,o=n(i,()=>a);return r[t]=o,()=>{a&&(a=!1,r[t]===o&&(r[t]=i))}}function w(e){let t=!1;return()=>{t||(t=!0,T(e))}}function T(e){for(let t=e.length-1;t>=0;--t)try{e[t]?.()}catch{}}function ae(e){if(e==null)return String(e);if(typeof e==`string`)return E(e);if(typeof e==`number`||typeof e==`boolean`||typeof e==`bigint`)return String(e);if(e instanceof Error)return E(e.stack??`${e.name}: ${e.message}`);try{return E(JSON.stringify(e))}catch{return Object.prototype.toString.call(e)}}function E(e){if(e.length<=g)return e;let t=e.charCodeAt(g-1),n=t>=55296&&t<=56319?g-1:g;return`${e.slice(0,n)}...(+${String(e.length-n)} chars)`}function oe(e,t){return(t?.method??(typeof e==`object`&&`method`in e?e.method:`GET`)).toUpperCase()}function se(e){return typeof e==`string`||e instanceof URL?e.toString():e.url}function ce(e){let t=e.get(`content-length`);if(t===null)return;let n=Number.parseInt(t,10);return Number.isFinite(n)?n:void 0}function le(e){try{let t=e.getResponseHeader(`content-length`);if(t===null)return;let n=Number.parseInt(t,10);return Number.isFinite(n)?n:void 0}catch{return}}function D(e){return{method:e.method,url:e.url,status:e.status,durationMs:e.durationMs,...e.failed===void 0?{}:{failed:e.failed},...e.reqBytes===void 0?{}:{reqBytes:e.reqBytes},...e.resBytes===void 0?{}:{resBytes:e.resBytes}}}function O(e){if(e==null)return 0;if(typeof e==`string`)return new TextEncoder().encode(e).byteLength;if(e instanceof ArrayBuffer||ArrayBuffer.isView(e))return e.byteLength;if(e instanceof Blob)return e.size}function ue(e,t){return p(e,t)}const de=new Set([`action`,`formaction`,`href`,`src`]);function fe(t){let n=()=>{t.beforeUserActivity?.()},r={emit:e=>{t.emit(pe(e,t.redactUrlPatterns))},maskAllInputs:t.maskAllInputs,recordCanvas:!1,collectFonts:!1,inlineImages:!1,recordCrossOriginIframes:!1,slimDOMOptions:`all`,hooks:{input:n,mediaInteaction:n,mouseInteraction:n,mousemove:n,scroll:n,selection:n,viewportResize:n},sampling:{mousemove:100,mouseInteraction:!0,scroll:250,media:800,input:`last`}};t.maskAllText?r.maskTextSelector=`*`:t.maskTextSelector!==void 0&&t.maskTextSelector.length>0&&(r.maskTextSelector=t.maskTextSelector),t.blockSelector!==void 0&&t.blockSelector.length>0&&(r.blockSelector=t.blockSelector),t.checkoutEveryNms!==void 0&&t.checkoutEveryNms>0&&(r.checkoutEveryNms=t.checkoutEveryNms);let i=e(r);if(i===void 0)throw Error(`logfire session replay: rrweb failed to start recording`);return{stop:()=>{i()},addCustomEvent:(t,n)=>{e.addCustomEvent(t,n)},takeFullSnapshot:()=>{e.takeFullSnapshot(!0)}}}function pe(e,t){if(typeof e.data!=`object`||e.data===null)return e;let n=e.data;if(e.type===i.Meta){if(typeof n.href!=`string`)return e;let r=m(n.href,t,window.location.href);return r===n.href?e:{...e,data:{...n,href:r}}}if(e.type!==i.FullSnapshot&&(e.type!==i.IncrementalSnapshot||n.source!==a.Mutation))return e;let r=k(n,t);return r===n?e:{...e,data:r}}function k(e,t){if(Array.isArray(e)){let n=!1,r=[];for(let i of e){let e=k(i,t);e!==i&&(n=!0),r.push(e)}return n?r:e}if(typeof e!=`object`||!e)return e;let n=e,r=!1,i={};for(let[e,a]of Object.entries(n)){let n=e===`attributes`&&!Array.isArray(a)?me(a,t):k(a,t);n!==a&&(r=!0),i[e]=n}return r?i:e}function me(e,t){if(typeof e!=`object`||!e||Array.isArray(e))return e;let n=e,r=!1,i={};for(let[e,a]of Object.entries(n)){if(!de.has(e.toLowerCase())||typeof a!=`string`){i[e]=a;continue}let n=m(a,t,window.location.href);n!==a&&(r=!0),i[e]=n}return r?i:e}function A(e){return Number.isFinite(e)?Math.min(1,Math.max(0,e)):0}function he(e){let t=e.random??Math.random;return t()<A(e.sessionSampleRate)?`full`:t()<A(e.onErrorSampleRate)?`buffer`:`off`}const ge=/^[a-z][a-z0-9_]{0,63}$/u;function _e(e,t){let n=0;for(let r of e)if(n+=+(r.length>0),n>t)return!1;return!0}function ve(e,t){if(e===void 0)return Object.freeze({});let n;try{n=e()}catch(e){return t(e),Object.freeze({})}if(typeof n!=`object`||!n||Array.isArray(n))return Object.freeze({});let r;try{r=Object.getPrototypeOf(n)}catch(e){return t(e),Object.freeze({})}if(r!==Object.prototype&&r!==null)return Object.freeze({});let i;try{i=Object.keys(n)}catch(e){return t(e),Object.freeze({})}let a={},o=0;for(let e of i){if(!ge.test(e))continue;let r;try{r=Reflect.get(n,e)}catch(e){t(e);continue}if((typeof r==`boolean`||typeof r==`number`&&Number.isFinite(r)||typeof r==`string`&&_e(r,200))&&(Object.defineProperty(a,e,{configurable:!0,enumerable:!0,value:r,writable:!0}),o+=1,o===20))break}return Object.freeze(a)}function ye(e=Date.now){let t=e(),n=new Uint8Array(new ArrayBuffer(16));be(n),n[0]=Math.floor(t/2**40)&255,n[1]=Math.floor(t/2**32)&255,n[2]=Math.floor(t/2**24)&255,n[3]=Math.floor(t/2**16)&255,n[4]=Math.floor(t/2**8)&255,n[5]=t&255,n[6]=(n[6]??0)&15|112,n[8]=(n[8]??0)&63|128;let r=``;for(let e of n)r+=e.toString(16).padStart(2,`0`);return`${r.slice(0,8)}-${r.slice(8,12)}-${r.slice(12,16)}-${r.slice(16,20)}-${r.slice(20)}`}function be(e){let t=globalThis.crypto;if(typeof t?.getRandomValues==`function`){t.getRandomValues(e);return}for(let t=0;t<e.length;t++)e[t]=Math.floor(Math.random()*256)}const j=`lf_session_replay`;var xe=class{idleTimeoutMs;maxDurationMs;now;storage;memorySession;pendingSession;persistenceTimer;constructor(e){this.idleTimeoutMs=e.idleTimeoutMs,this.maxDurationMs=e.maxDurationMs,this.now=e.now??Date.now,this.storage=e.storage===void 0?M():e.storage}getSession(){let e=this.now();if(this.memorySession!==void 0&&!this.isExpired(this.memorySession,e))return this.memorySession;let t=this.read();return t!==void 0&&!this.isExpired(t,e)?t:this.createSession(e)}touch(){let e=this.now(),t={...this.getSession(),lastActivityAt:e};return this.memorySession=t,this.scheduleWrite(t),t}reset(){return this.createSession(this.now())}flushPendingStorage(){this.persistenceTimer!==void 0&&(clearTimeout(this.persistenceTimer),this.persistenceTimer=void 0);let e=this.pendingSession;this.pendingSession=void 0,e!==void 0&&this.writeNow(e)}isExpired(e,t){return t-e.lastActivityAt>this.idleTimeoutMs||t-e.startedAt>this.maxDurationMs}createSession(e){let t={id:ye(this.now),startedAt:e,lastActivityAt:e};return this.flushPendingStorage(),this.writeNow(t),t}read(){if(this.storage!==null)try{let e=this.storage.getItem(j);if(e!==null){let t=JSON.parse(e);if(Se(t))return this.memorySession=t,t}}catch{return this.memorySession}return this.memorySession}write(e){if(this.memorySession=e,this.storage!==null)try{this.storage.setItem(j,JSON.stringify(e))}catch{}}scheduleWrite(e){this.pendingSession=e,this.persistenceTimer===void 0&&(this.persistenceTimer=setTimeout(()=>{this.persistenceTimer=void 0;let e=this.pendingSession;this.pendingSession=void 0,e!==void 0&&this.writeNow(e)},1e3))}writeNow(e){this.memorySession=e,this.write(e)}};function M(){try{return globalThis.sessionStorage??null}catch{return null}}function Se(e){if(typeof e!=`object`||!e)return!1;let t=e;return typeof t.id==`string`&&t.id.length>0&&typeof t.startedAt==`number`&&Number.isFinite(t.startedAt)&&typeof t.lastActivityAt==`number`&&Number.isFinite(t.lastActivityAt)}function N(e){return typeof e==`object`&&e?e:void 0}function P(e){return typeof e==`string`&&e.length>0?e:void 0}function Ce(e){let t=N(e),n=P(t?.id);if(t===void 0||n===void 0)return;let r=P(t.name),i=P(t.email);return{id:n,...r===void 0?{}:{name:r},...i===void 0?{}:{email:i}}}function we(e,t,n,r={},c){let l=1/0,u=0,d=0,f=0,p=0,m=!1,h=new Set;for(let e of t){e.timestamp<l&&(l=e.timestamp),e.timestamp>u&&(u=e.timestamp);let t=N(e.data);if(e.type===i.FullSnapshot)m=!0;else if(e.type===i.Meta){let e=P(t?.href);e!==void 0&&h.add(e)}else if(e.type===i.IncrementalSnapshot&&t!==void 0){let e=t.source;if(e===a.MouseInteraction){let e=t.type;(e===o.Click||e===o.DblClick)&&d++}else e===a.Input&&f++}else if(e.type===i.Custom&&t!==void 0){let e=P(t.tag),n=N(t.payload);if(e===s.Error)p++;else if(e===s.Console)n?.level===`error`&&p++;else if(e===s.Navigation){let e=P(n?.url);e!==void 0&&h.add(e)}}}return{seq:e,firstTimestamp:l===1/0?0:l,lastTimestamp:u,eventCount:t.length,clickCount:d,keypressCount:f,errorCount:p,hasFullSnapshot:m,urls:[...h],...n!==void 0&&n.length>0?{distinctId:n}:{},...c===void 0?{}:{user:{...c}},...Object.keys(r).length===0?{}:{sessionAttributes:{...r}}}}var F=class extends Error{droppedSeqs;reason;seq;sessionId;status;constructor(e){super(Te(e),{cause:e.cause}),this.name=`ReplayUploadError`,this.droppedSeqs=Object.freeze([...e.droppedSeqs??[]]),this.reason=e.reason,this.seq=e.seq,this.sessionId=e.sessionId,this.status=e.status}};function Te(e){let t=e.seq===void 0?`replay chunk`:`replay chunk seq=${String(e.seq)}`,n=e.cause instanceof Error?`: ${e.cause.message}`:``;return`${t} ${e.reason}${n}`}const I=`lf_session_replay_seq`,L=1e4,R=3e4,Ee={gzip:t,gzipSync:n};var De=class{buffer=[];bufferHasFullSnapshot=!1;pendingBytes=0;seq=0;timer;nextFlushAt;lastUserActivityAt;startedAt;started=!1;held;heldBufferIncomplete=!1;minimumBufferIncomplete=!1;minimumDurationSatisfied=!1;firstObservedTimestamp;lastObservedTimestamp;refreshingMinimumSnapshot=!1;mode;queue=[];retainedBytes=0;activeUpload;drainPromise;draining=!1;lifecycleFlights=new Set;closed=!1;shuttingDown=!1;retryAbort=new AbortController;deadlineAbort=new AbortController;resyncPending=!1;resyncTimer;lastResyncAt;reservedKeepaliveBytes=0;asyncCompressionAvailable=!0;config;compression;storage;sessionId;sessionAttributes;takeFullSnapshot;constructor(e,t,n,r=M(),i=Ee,a={},o={}){this.config=e,this.sessionId=t,this.sessionAttributes=Object.freeze({...a}),this.mode=n,this.storage=r,this.compression=i,this.held=o.holdUntilActivity===!0&&n===`full`,this.takeFullSnapshot=o.takeFullSnapshot,this.minimumDurationSatisfied=e.minSessionDurationMs===0,this.seq=this.loadSeq(t),this.startedAt=this.config.now(),this.lastUserActivityAt=this.startedAt}start(){this.started||this.mode!==`full`||(this.started=!0,this.scheduleFlush())}add(e){this.minimumDurationSatisfied||(this.firstObservedTimestamp??=e.timestamp,this.lastObservedTimestamp=Math.max(this.lastObservedTimestamp??e.timestamp,e.timestamp)),d(e)&&(this.lastUserActivityAt=this.config.now());let t=V(e);if(this.resyncPending){this.addDuringResync(e,t);return}if(this.refreshingMinimumSnapshot){this.buffer.push(e),this.pendingBytes+=t;return}let n=!this.minimumDurationSatisfied;if(this.mode===`buffer`||this.held||n){if(e.type===i.Meta){this.buffer=[e],this.bufferHasFullSnapshot=!1,this.minimumBufferIncomplete=!1,this.pendingBytes=t,n&&(this.mode===`full`&&(this.firstObservedTimestamp=e.timestamp),this.finishMinimumBufferingEvent());return}if(e.type===i.FullSnapshot){let r=!this.bufferHasFullSnapshot&&this.buffer.length===1&&this.buffer[0]?.type===i.Meta?this.buffer[0]:void 0;this.buffer=r===void 0?[e]:[r,e],this.bufferHasFullSnapshot=!0,this.pendingBytes=t+(r===void 0?0:V(r)),this.heldBufferIncomplete=!1,this.minimumBufferIncomplete=!1,n&&(this.mode===`full`&&(this.firstObservedTimestamp=r?.timestamp??e.timestamp),this.finishMinimumBufferingEvent());return}if(!this.bufferHasFullSnapshot||t>this.config.maxBufferBytes){this.heldBufferIncomplete||=this.held,this.minimumBufferIncomplete||=n,n&&this.finishMinimumBufferingEvent();return}if(this.pendingBytes+t>this.config.maxBufferBytes){this.heldBufferIncomplete||=this.held,this.minimumBufferIncomplete||=n,n&&this.finishMinimumBufferingEvent();return}}if(this.buffer.push(e),this.pendingBytes+=t,n&&this.minimumDurationReached()){this.flushAndReport();return}this.mode===`full`&&this.pendingBytes>=this.config.maxBufferBytes?this.flushAndReport():this.scheduleFlush()}addDuringResync(e,t){if(e.type===i.Meta){this.buffer=[e],this.pendingBytes=t;return}if(e.type!==i.FullSnapshot)return;let n=this.buffer.length===1&&this.buffer[0]?.type===i.Meta?this.buffer[0]:void 0;this.buffer=n===void 0?[e]:[n,e],this.pendingBytes=t+(n===void 0?0:V(n)),this.resyncPending=!1,this.clearResyncTimer(),this.pendingBytes>=this.config.maxBufferBytes?this.flushAndReport():this.scheduleFlush()}async triggerFlush(){return this.mode===`buffer`&&(this.bufferHasFullSnapshot||(this.buffer=[],this.pendingBytes=0),this.mode=`full`,this.start()),this.flush()}async flush(e={}){return this.flushInternal(e)}async flushInternal(e={}){if(this.closed||this.mode===`buffer`||this.held||this.buffer.length===0||!this.minimumDurationReached()||(this.clearScheduledFlush(),this.minimumBufferIncomplete&&!this.refreshMinimumBuffer()))return;this.minimumDurationSatisfied=!0;let t=this.buffer,n=this.pendingBytes;this.buffer=[],this.bufferHasFullSnapshot=!1,this.minimumBufferIncomplete=!1,this.pendingBytes=0;let r=this.sessionId,i=this.snapshotIdentity();if(e.keepalive===!0){let e=je(t),n=this.allocateSeq(e.length),a=this.deliverLifecycle(e,n,r,i);this.lifecycleFlights.add(a);let o=()=>{this.lifecycleFlights.delete(a)};a.then(o,o),await a;return}await this.enqueue(t,n,r,i)?.done}async shutdown(e={}){if(this.started=!1,this.clearScheduledFlush(),this.held||!this.minimumDurationReached()){this.discard(),await this.settleWithinDeadline([]);return}if(e.keepalive===!0){await this.flush(e),this.closed=!0,this.clearResyncTimer(),await this.settleWithinDeadline([]);return}let t=this.flushInternal();this.closed=!0,this.shuttingDown=!0,this.clearResyncTimer(),this.retryAbort.abort();let n=this.queue.filter(e=>e!==this.activeUpload).map(async e=>this.finalAttempt(e));await this.settleWithinDeadline([t,...n])}discard(){this.started=!1,this.closed=!0,this.clearScheduledFlush(),this.clearResyncTimer(),this.buffer=[],this.bufferHasFullSnapshot=!1,this.minimumBufferIncomplete=!1,this.pendingBytes=0}getMode(){return this.mode}isHeld(){return this.held}releaseHeld(e){this.held&&((this.heldBufferIncomplete||!this.bufferHasFullSnapshot)&&(this.buffer=[],this.bufferHasFullSnapshot=!1,this.pendingBytes=0,e()),this.held=!1,this.pendingBytes>=this.config.maxBufferBytes?this.flushAndReport():this.scheduleFlush())}flushAndReport(){this.flushInternal().catch(e=>{z(this.config.onError,e)})}scheduleFlush(){let e=this.config.now(),t=Math.max(0,this.config.minSessionDurationMs-(e-this.startedAt)),n=Math.max(f(this.config.flushIntervalMs,e-this.lastUserActivityAt),t);this.scheduleFlushIn(e,n)}scheduleFlushIn(e,t){if(!this.started||this.mode!==`full`||this.held||this.buffer.length===0)return;let n=e+t;this.timer!==void 0&&this.nextFlushAt!==void 0&&this.nextFlushAt<=n||(this.clearScheduledFlush(),this.nextFlushAt=n,this.timer=setTimeout(()=>{this.timer=void 0,this.nextFlushAt=void 0,this.flushAndReport()},t))}clearScheduledFlush(){this.timer!==void 0&&(clearTimeout(this.timer),this.timer=void 0),this.nextFlushAt=void 0}minimumDurationReached(){return this.minimumDurationSatisfied||this.config.minSessionDurationMs===0?!0:this.firstObservedTimestamp===void 0||this.lastObservedTimestamp===void 0?!1:this.lastObservedTimestamp-this.firstObservedTimestamp>=this.config.minSessionDurationMs}finishMinimumBufferingEvent(){this.minimumDurationReached()?this.flushAndReport():this.scheduleFlush()}refreshMinimumBuffer(){let e=this.buffer.length,t=this.pendingBytes;if(this.takeFullSnapshot!==void 0){this.refreshingMinimumSnapshot=!0;try{this.takeFullSnapshot()}catch(e){z(this.config.onError,e)}finally{this.refreshingMinimumSnapshot=!1}}return this.buffer.slice(e).some(e=>e.type===i.FullSnapshot)?(this.minimumBufferIncomplete=!1,!0):(this.buffer.length=e,this.pendingBytes=t,!1)}snapshotIdentity(){let e=this.snapshotUser(),t=this.config.distinctId;if(this.config.getDistinctId!==void 0)try{t=this.config.getDistinctId()??this.config.distinctId}catch(e){z(this.config.onError,e)}else e!==void 0&&(t=e.id);return{distinctId:t,user:e}}createEnvelope(e,t,n){return{version:1,meta:we(t,e,n.distinctId,this.sessionAttributes,n.user),events:e}}snapshotUser(){if(this.config.getUser!==void 0)try{return Ce(this.config.getUser())}catch(e){z(this.config.onError,e);return}}allocateSeq(e){let t=this.seq;return this.seq+=e,this.saveSeq(this.sessionId,this.seq),t}enqueue(e,t,n,r){let a=Math.max(2e6,2*this.config.maxBufferBytes);if(this.queue.length>0&&this.retainedBytes+t>a){z(this.config.onError,new F({cause:Error(`replay upload queue is full`),reason:`not-sent`,seq:void 0,sessionId:n})),this.beginResync();return}let o=()=>void 0,s={body:void 0,done:new Promise(e=>{o=e}),events:e,hasFullSnapshot:e.some(e=>e.type===i.FullSnapshot),identity:r,reachedFetch:!1,resolve:o,retainedBytes:t,seq:this.allocateSeq(1),sessionId:n,settled:!1};return this.queue.push(s),this.retainedBytes+=t,this.draining||(this.draining=!0,this.drainPromise=this.drain()),s}async drain(){try{for(;!this.shuttingDown;){let e=this.queue[0];if(e===void 0)break;this.activeUpload=e;let t=await this.deliverQueued(e);this.activeUpload=void 0,this.settle(e,t)}}finally{this.activeUpload=void 0,this.draining=!1}}async deliverQueued(e){let t=await this.compressQueued(e);if(t!==void 0||e.settled)return t;let n=Date.now(),r;for(let t=1;;t++){let i=R-(Date.now()-n);if(t>1&&i<=0)return G(r,e.reachedFetch);let a=await this.attemptQueued(e,Math.min(L,i));if(a===void 0)return;r=a;let o=Pe(a,t,this.config.random);if(o===void 0||this.shuttingDown||Date.now()-n+o>=R)return G(a,e.reachedFetch);await this.backoff(o)}}async compressQueued(e){if(e.body!==void 0||e.events===void 0)return;let t=e.events;try{let n=r(JSON.stringify(this.createEnvelope(t,e.seq,e.identity))),i=this.shuttingDown?this.compression.gzipSync(n):await this.compressOrdinary(n);if(e.events!==t)return await this.compressQueued(e);e.settled||(this.retainedBytes+=i.byteLength-e.retainedBytes,e.retainedBytes=i.byteLength,e.body=i,e.events=void 0);return}catch(e){return{cause:e,reason:`not-sent`}}}async attemptQueued(e,t=L){let n=e.body;if(n!==void 0)try{await this.send({body:n,requestKeepalive:!1,reservedBytes:0,seq:e.seq,sessionId:e.sessionId},()=>{e.reachedFetch=!0},t);return}catch(e){return e}}async finalAttempt(e){let t=await this.compressQueued(e);if(t!==void 0){this.settle(e,t);return}let n=await this.attemptQueued(e);this.settle(e,n===void 0?void 0:G(n,e.reachedFetch))}async settleWithinDeadline(e){let t=Promise.all([...e,this.drainPromise,...this.lifecycleFlights]).then(()=>void 0,()=>void 0),n,r=new Promise(e=>{n=setTimeout(e,L)});if(await Promise.race([t,r]),clearTimeout(n),this.shuttingDown){this.deadlineAbort.abort(Error(`replay upload did not finish before shutdown`));for(let e of[...this.queue])this.settle(e,{cause:Error(`replay upload did not finish before shutdown`),reason:e.reachedFetch?`unconfirmed`:`not-sent`})}}settle(e,t){if(e.settled)return;e.settled=!0,this.retainedBytes-=e.retainedBytes;let n=this.queue.indexOf(e);n>=0&&this.queue.splice(n,1),e.body=void 0,e.events=void 0,e.resolve(),t!==void 0&&this.handleSequencedLoss(e.seq,e.sessionId,t)}handleSequencedLoss(e,t,n){let r=[];if(!this.shuttingDown){let t=!1;for(let n of[...this.queue])if(!(n.seq<e)){if(n.events===void 0){if(n.hasFullSnapshot){t=!0;break}continue}if(n.hasFullSnapshot){let e=H(n.events),r=U(e);this.retainedBytes+=r-n.retainedBytes,n.retainedBytes=r,n.events=e,t=!0;break}r.push(n.seq),this.settle(n,void 0)}!t&&!this.trimBufferToAnchor()&&this.beginResync()}z(this.config.onError,new F({cause:n.cause,droppedSeqs:r,reason:n.reason,seq:e,sessionId:t,status:n.status}))}trimBufferToAnchor(){return this.buffer.some(e=>e.type===i.FullSnapshot)?(this.buffer=H(this.buffer),this.pendingBytes=U(this.buffer),!0):!1}beginResync(){this.closed||(this.resyncPending=!0,this.buffer=[],this.bufferHasFullSnapshot=!1,this.pendingBytes=0,this.clearScheduledFlush(),this.scheduleResyncSnapshot())}scheduleResyncSnapshot(){if(this.resyncTimer!==void 0||this.closed)return;let e=this.lastResyncAt===void 0?0:Math.max(0,this.lastResyncAt+6e4-this.config.now());this.resyncTimer=setTimeout(()=>{this.resyncTimer=void 0,this.takeResyncSnapshot()},e)}takeResyncSnapshot(){if(!(!this.resyncPending||this.closed||this.takeFullSnapshot===void 0)){this.lastResyncAt=this.config.now();try{this.takeFullSnapshot()}catch(e){z(this.config.onError,e),this.scheduleResyncSnapshot();return}this.isResyncPending()&&(z(this.config.onError,Error(`replay resync snapshot produced no full snapshot`)),this.scheduleResyncSnapshot())}}isResyncPending(){return this.resyncPending}clearResyncTimer(){this.resyncTimer!==void 0&&(clearTimeout(this.resyncTimer),this.resyncTimer=void 0)}async backoff(e){let t=this.retryAbort.signal;t.aborted||await new Promise(n=>{let r=()=>{clearTimeout(i),t.removeEventListener(`abort`,r),n()},i=setTimeout(r,e);t.addEventListener(`abort`,r)})}async deliverLifecycle(e,t,n,i){let a=[];for(let o=0;o<e.length;o++){let s=e[o];if(s===void 0){a.push(void 0);continue}let c=this.createEnvelope(s,t+o,i);try{a.push({body:this.compression.gzipSync(r(JSON.stringify(c))),requestKeepalive:!1,reservedBytes:0,seq:t+o,sessionId:n})}catch(e){this.handleSequencedLoss(t+o,n,{cause:e,reason:`not-sent`}),a.push(void 0)}}let o=!0,s=Math.max(0,48e3-this.reservedKeepaliveBytes);for(let e of a){if(e===void 0){o=!1;continue}o&&e.body.byteLength<=s?(e.requestKeepalive=!0,e.reservedBytes=e.body.byteLength,this.reservedKeepaliveBytes+=e.reservedBytes,s-=e.reservedBytes):o=!1}await Promise.all(a.map(async e=>{if(e===void 0)return;let t=!1;try{await this.send(e,()=>{t=!0})}catch(n){this.handleSequencedLoss(e.seq,e.sessionId,G(n,t))}}))}async compressOrdinary(e){if(!this.asyncCompressionAvailable)return this.compression.gzipSync(e);try{return await Me(this.compression,e)}catch{return this.asyncCompressionAvailable=!1,this.compression.gzipSync(e)}}async send(e,t,n=L){let r,i,a,o=new AbortController,s=setTimeout(()=>{o.abort(Error(`replay upload timed out after ${String(n)}ms`))},n),c=this.deadlineAbort.signal,l=()=>{o.abort(c.reason)};c.addEventListener(`abort`,l);try{let n=`${this.config.replayUrl.replace(/\/+$/u,``)}/${encodeURIComponent(e.sessionId)}?seq=${String(e.seq)}`,s=await Ae(this.getUploadHeaders(),o.signal);t();let c=this.config.fetchImpl(n,{method:`POST`,headers:s,body:e.body.slice(),keepalive:e.requestKeepalive,signal:o.signal});r=!0;let l=await c;if(i=!0,a=await Ne(l),!l.ok){let e=l.status===429||l.status===503?Fe(l.headers.get(`retry-after`),Date.now()):void 0;throw new B(l.status,e)}}finally{clearTimeout(s),c.removeEventListener(`abort`,l),e.reservedBytes>0&&(r!==!0||i!==!0||a===!0)&&(this.reservedKeepaliveBytes=Math.max(0,this.reservedKeepaliveBytes-e.reservedBytes))}}async getUploadHeaders(){let e=this.config.headers===void 0?{}:await this.config.headers(),t=await ke(this.config.token);return{...t===void 0||t.length===0?e:{...Object.fromEntries(Object.entries(e).filter(([e])=>e.toLowerCase()!==`authorization`)),Authorization:`Bearer ${t}`},"Content-Type":`application/json`,"Content-Encoding":`gzip`}}loadSeq(e){if(this.storage===null)return 0;try{let t=this.storage.getItem(I);if(t===null)return 0;let n=JSON.parse(t);if(typeof n!=`object`||!n)return 0;let r=n;return r.id===e&&typeof r.seq==`number`&&Number.isFinite(r.seq)?r.seq:0}catch{return 0}}saveSeq(e,t){if(this.storage!==null)try{this.storage.setItem(I,JSON.stringify({id:e,seq:t}))}catch{}}};function z(e,t){try{let n=e?.(t);Oe(n)&&Promise.resolve(n).catch(()=>void 0)}catch{}}function Oe(e){return typeof e==`object`&&!!e&&`then`in e&&typeof e.then==`function`}var B=class extends Error{retryAfter;status;constructor(e,t){super(`replay ingest failed: ${String(e)}`),this.status=e,this.retryAfter=t,this.name=`ReplayIngestError`}};async function ke(e){return typeof e==`function`?e():e}async function Ae(e,t){if(t.aborted)throw t.reason;return new Promise((n,r)=>{let i=()=>{r(t.reason)};t.addEventListener(`abort`,i,{once:!0}),e.then(e=>{t.removeEventListener(`abort`,i),n(e)},e=>{t.removeEventListener(`abort`,i),r(e instanceof Error?e:Error(String(e)))})})}function V(e){try{return r(JSON.stringify(e)).byteLength}catch{return 0}}function H(e){let t=e.findIndex(e=>e.type===i.FullSnapshot);if(t<0)return e;let n=t>0&&e[t-1]?.type===i.Meta?t-1:t;return e.slice(n)}function U(e){return e.reduce((e,t)=>e+V(t),0)}function je(e){let t=[],n=[],r=0;for(let i of e){let e=V(i);n.length>0&&r+e>48e3&&(t.push(n),n=[],r=0),n.push(i),r+=e}return n.length>0&&t.push(n),t}async function Me(e,t){return new Promise((n,r)=>{let i=[];typeof window<`u`&&i.push(window),typeof document<`u`&&i.push(document);let a=()=>{for(let e of i)e.removeEventListener(`securitypolicyviolation`,s)},o=(e,t)=>{if(a(),e!==null){r(e);return}n(t)},s=e=>{let t=e;(t.effectiveDirective.includes(`worker-src`)||t.violatedDirective.includes(`worker-src`))&&o(Error(`replay compression worker blocked by Content Security Policy`))};for(let e of i)e.addEventListener(`securitypolicyviolation`,s);try{e.gzip(t,{level:6},(e,t)=>{o(e,t)})}catch(e){a(),r(e instanceof Error?e:Error(String(e)))}})}async function Ne(e){if(e.body===null)return!0;try{return await e.body.cancel(),!0}catch{return!1}}function W(e){return e===408||e===425||e===429||e>=500}function Pe(e,t,n){if(e instanceof B&&!W(e.status))return;let r=Math.min(8e3,500*2**(t-1)),i=Math.round(r*(1-.5*n())),a=e instanceof B?e.retryAfter:void 0;return a===void 0?i:Math.max(a,i)}function G(e,t){let n=e instanceof B?e.status:void 0;return n!==void 0&&!W(n)?{cause:e,reason:`rejected`,status:n}:{cause:e,reason:t?`unconfirmed`:`not-sent`,status:n}}function Fe(e,t){if(e===null)return;let n=e.trim();if(/^\d+$/u.test(n)){let e=Number(n);return Number.isSafeInteger(e)?e*1e3:void 0}let r=ze(n,t);return r===void 0?void 0:Math.max(0,r-t)}const Ie=[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`],Le=[`Sun`,`Mon`,`Tue`,`Wed`,`Thu`,`Fri`,`Sat`],Re=[`Sunday`,`Monday`,`Tuesday`,`Wednesday`,`Thursday`,`Friday`,`Saturday`];function ze(e,t){let n=/^(Sun|Mon|Tue|Wed|Thu|Fri|Sat), (\d{2}) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\d{4}) (\d{2}):(\d{2}):(\d{2}) GMT$/u.exec(e);if(n!==null)return K(n[1],n[2],n[3],n[4],n[5],n[6],n[7]);let r=/^(Sunday|Monday|Tuesday|Wednesday|Thursday|Friday|Saturday), (\d{2})-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\d{2}) (\d{2}):(\d{2}):(\d{2}) GMT$/u.exec(e);if(r!==null){let e=new Date(t).getUTCFullYear(),n=Number(r[4]),i=Math.floor(e/100)*100+n;return i>e+50&&(i-=100),K(r[1],r[2],r[3],String(i),r[5],r[6],r[7])}let i=/^(Sun|Mon|Tue|Wed|Thu|Fri|Sat) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\d{2}| \d) (\d{2}):(\d{2}):(\d{2}) (\d{4})$/u.exec(e);if(i!==null)return K(i[1],i[3]?.trim(),i[2],i[7],i[4],i[5],i[6])}function K(e,t,n,r,i,a,o){let s=Number(t),c=Ie.indexOf(n),l=Number(r),u=Number(i),d=Number(a),f=Number(o);if(c<0||s<1||s>31||u>23||d>59||f>59)return;let p=new Date(0);if(p.setUTCFullYear(l,c,s),p.setUTCHours(u,d,f,0),p.getUTCFullYear()!==l||p.getUTCMonth()!==c||p.getUTCDate()!==s||p.getUTCHours()!==u||p.getUTCMinutes()!==d||p.getUTCSeconds()!==f)return;let m=Le.indexOf(e),h=Re.indexOf(e);return(m>=0?m:h)===p.getUTCDay()?p.getTime():void 0}const Be={mode:`off`,recording:!1,getSessionId:()=>``,flush:async()=>Promise.resolve(),stop:async()=>Promise.resolve()},q=`lf_session_replay_mode`,J=Symbol.for(`@pydantic/logfire-session-replay/controller`);function Ve(e){if(typeof window>`u`||typeof document>`u`)return Be;let t=Xe();try{let n=Ue(e),r=new xe({idleTimeoutMs:n.sessionIdleTimeoutMs,maxDurationMs:n.maxSessionDurationMs,now:n.now}),i=r.getSession().id,a=e=>{let t;try{t=n.getSessionId?.()}catch(e){return Z(n.onError,e),i}if(t!==void 0&&t.length>0)return i=t,t;let a=e?r.touch().id:r.getSession().id;return i=a,a},o=M(),s=a(!1),c,l=!1,u=Promise.resolve(),d,f=(e,t,r=!t)=>{let i=We(n,e,o);if(!(i===`off`||l||e!==s))try{c=He({config:n,getSessionId:a,mode:i,onSessionChanged:p,samplingModeStorage:o,sessionId:e,holdUntilActivity:r})}catch(e){if(c=void 0,t)throw e;Z(n.onError,e)}},p=(e,t=!0)=>{if(l||e===s)return;s=e;let r=c;c=void 0;let i=r?.deactivate()??Promise.resolve();u=u.then(async()=>{await Je(i,n.onError),!l&&s===e&&f(e,!1,t)})},m;try{f(s,!0),m=setInterval(()=>{p(a(!1))},1e3)}catch(e){throw c?.discard(),c=void 0,e}return{get mode(){try{return c?.transport.getMode()??`off`}catch(e){return Z(n.onError,e),`off`}},get recording(){try{return c!==void 0}catch(e){return Z(n.onError,e),!1}},getSessionId:()=>a(!1),flush:async()=>{try{await u,await c?.transport.flush()}catch(e){Z(n.onError,e)}},stop:async()=>(d??=(async()=>{l=!0,clearInterval(m);let e=c;c=void 0,await Je(e?.deactivate()??Promise.resolve(),n.onError),await u,r.flushPendingStorage(),t()})(),d)}}catch(e){throw t(),e}}function He(e){let{config:t,getSessionId:n,holdUntilActivity:r,mode:i,onSessionChanged:a,samplingModeStorage:o,sessionId:c}=e,l=ve(t.getSessionAttributes,e=>{Z(t.onError,e)}),u,f=new De(t,c,i,void 0,void 0,l,{holdUntilActivity:r,takeFullSnapshot:()=>{u.takeFullSnapshot()}}),p=[],m=!0,h=()=>m,g;try{u=fe({beforeUserActivity:()=>{if(!(!m||!f.isHeld()))try{let e=n(!0);if(e!==c){a(e,!1);return}f.releaseHeld(()=>{u.takeFullSnapshot()})}catch(e){Z(t.onError,e)}},emit:e=>{if(m)try{let t=n(d(e));if(t!==c){a(t,!1);return}f.add(e)}catch(e){Z(t.onError,e)}},maskAllText:t.maskAllText,maskAllInputs:t.maskAllInputs,maskTextSelector:t.maskTextSelector,blockSelector:t.blockSelector,checkoutEveryNms:i===`buffer`?12e4:0,redactUrlPatterns:t.redactUrlPatterns}),p.push(()=>{u.stop()});let e=(e,n)=>{if(m)try{u.addCustomEvent(e,n)}catch(e){Z(t.onError,e)}},r=n=>{h()&&(f.releaseHeld(()=>{u.takeFullSnapshot()}),e(s.Error,n),h()&&f.getMode()===`buffer`&&(Y(o,c,`full`),X(f.triggerFlush(),t.onError)))},l=e=>{e instanceof ErrorEvent&&r($(e.message,e.filename,qe(e.error)))},_=e=>{let t=e.reason;r($(Ze(t?.message??e.reason),void 0,typeof t?.stack==`string`?t.stack:void 0))},v=()=>{document.visibilityState===`hidden`&&X(f.flush({keepalive:!0}),t.onError)},y=()=>{X(f.flush({keepalive:!0}),t.onError)};return window.addEventListener(`error`,l,!0),p.push(()=>{window.removeEventListener(`error`,l,!0)}),window.addEventListener(`unhandledrejection`,_,!0),p.push(()=>{window.removeEventListener(`unhandledrejection`,_,!0)}),document.addEventListener(`visibilitychange`,v),p.push(()=>{document.removeEventListener(`visibilitychange`,v)}),window.addEventListener(`pagehide`,y),p.push(()=>{window.removeEventListener(`pagehide`,y)}),t.captureConsole&&p.push(ee(e,{onError:t.onError})),t.captureNetwork&&p.push(te(e,{ignoreUrlPatterns:t.ignoreUrlPatterns,now:t.now,onError:t.onError,redactUrlPatterns:t.redactUrlPatterns})),t.captureNavigation&&p.push(ne(e,{onError:t.onError,redactUrlPatterns:t.redactUrlPatterns})),f.start(),{sessionId:c,transport:f,deactivate:async()=>(g??=(async()=>{let e=f.shutdown({keepalive:!1});m=!1,Q(p),await e})(),g),discard:()=>{m=!1,Q(p),f.discard()}}}catch(e){throw m=!1,Q(p),f.discard(),e}}function Ue(e){if(e.replayUrl.length===0)throw Error("logfire session replay: `replayUrl` is required");let t=new URL(e.replayUrl,`https://logfire.invalid/`);if(t.search!==``||t.hash!==``)throw Error("logfire session replay: `replayUrl` must not contain a query or fragment");let n=e.fetchImpl??(typeof fetch==`function`?fetch.bind(globalThis):void 0);if(n===void 0)throw Error("logfire session replay: no `fetch` available; pass `fetchImpl`");return{replayUrl:e.replayUrl,headers:e.headers,token:e.token,getSessionId:e.getSessionId,getSessionAttributes:e.getSessionAttributes,sessionSampleRate:e.sessionSampleRate??l.sessionSampleRate,onErrorSampleRate:e.onErrorSampleRate??l.onErrorSampleRate,maskAllText:e.maskAllText??l.maskAllText,maskAllInputs:e.maskAllInputs??l.maskAllInputs,maskTextSelector:e.maskTextSelector??l.maskTextSelector,blockSelector:e.blockSelector??l.blockSelector,flushIntervalMs:e.flushIntervalMs??l.flushIntervalMs,maxBufferBytes:e.maxBufferBytes??l.maxBufferBytes,minSessionDurationMs:e.minSessionDurationMs??l.minSessionDurationMs,sessionIdleTimeoutMs:e.sessionIdleTimeoutMs??l.sessionIdleTimeoutMs,maxSessionDurationMs:e.maxSessionDurationMs??l.maxSessionDurationMs,distinctId:e.distinctId??l.distinctId,getDistinctId:e.getDistinctId,getUser:e.getUser,captureConsole:e.captureConsole??l.captureConsole,captureNetwork:e.captureNetwork??l.captureNetwork,captureNavigation:e.captureNavigation??l.captureNavigation,ignoreUrlPatterns:e.ignoreUrlPatterns??[],redactUrlPatterns:e.redactUrlPatterns??[...l.redactUrlPatterns],onError:e.onError,fetchImpl:n,now:e.now??Date.now,random:e.random??Math.random}}function We(e,t,n){let r=Ge(n,t);if(r!==void 0)return r;let i=he({sessionSampleRate:e.sessionSampleRate,onErrorSampleRate:e.onErrorSampleRate,random:e.random});return Y(n,t,i),i}function Ge(e,t){if(e!==null)try{let n=e.getItem(q);if(n===null)return;let r=JSON.parse(n);if(typeof r!=`object`||!r)return;let i=r;return i.id!==t||!Ke(i.mode)?void 0:i.mode}catch{return}}function Y(e,t,n){if(e!==null)try{e.setItem(q,JSON.stringify({id:t,mode:n}))}catch{}}function Ke(e){return e===`full`||e===`buffer`||e===`off`}function qe(e){let t=typeof e==`object`&&e&&`stack`in e?e.stack:void 0;return typeof t==`string`?t:void 0}function X(e,t){e.catch(e=>{Z(t,e)})}async function Je(e,t){try{await e}catch(e){Z(t,e)}}function Z(e,t){try{let n=e?.(t);Ye(n)&&Promise.resolve(n).catch(()=>void 0)}catch{}}function Ye(e){return typeof e==`object`&&!!e&&`then`in e&&typeof e.then==`function`}function Xe(){let e=globalThis;if(e[J]!==void 0)throw Error(`logfire session replay: a replay controller is already active in this page`);let t={};Object.defineProperty(e,J,{configurable:!0,enumerable:!1,value:t,writable:!0});let n=!1;return()=>{n||(n=!0,e[J]===t&&Reflect.deleteProperty(e,J))}}function Q(e){for(let t=e.length-1;t>=0;--t)try{e[t]?.()}catch{}e.length=0}function $(e,t,n){return{message:e,...t===void 0||t.length===0?{}:{source:t},...n===void 0?{}:{stack:n}}}function Ze(e){if(e==null)return`unhandledrejection`;if(typeof e==`string`)return e;if(typeof e==`number`||typeof e==`boolean`||typeof e==`bigint`||typeof e==`symbol`)return String(e);try{let t=JSON.stringify(e);return typeof t==`string`?t:Object.prototype.toString.call(e)}catch{return Object.prototype.toString.call(e)}}export{c as CHUNK_ENVELOPE_VERSION,s as CustomTag,i as EventType,a as IncrementalSource,o as MouseInteractions,F as ReplayUploadError,Ve as startSessionReplay};
|
package/dist/integration.d.cts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { S as SessionReplayConfig, n as startSessionReplay } from "./index-CGSeVpsY.js";
|
|
2
2
|
|
|
3
3
|
//#region src/integration.d.ts
|
|
4
4
|
type SessionReplayIntegrationOptions = Omit<SessionReplayConfig, "getSessionAttributes" | "getSessionId" | "getUser" | "headers" | "maxSessionDurationMs" | "now" | "random" | "replayUrl" | "sessionIdleTimeoutMs" | "token">;
|
package/dist/integration.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { S as SessionReplayConfig, n as startSessionReplay } from "./index-CGSeVpsY.js";
|
|
2
2
|
|
|
3
3
|
//#region src/integration.d.ts
|
|
4
4
|
type SessionReplayIntegrationOptions = Omit<SessionReplayConfig, "getSessionAttributes" | "getSessionId" | "getUser" | "headers" | "maxSessionDurationMs" | "now" | "random" | "replayUrl" | "sessionIdleTimeoutMs" | "token">;
|