@pydantic/logfire-session-replay 0.5.0 → 0.7.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 CHANGED
@@ -158,6 +158,14 @@ configured cadence. After five minutes without activity, background events use
158
158
  the greater of `flushIntervalMs` and five minutes. After the replay reaches its
159
159
  minimum duration, reaching `maxBufferBytes` still flushes immediately.
160
160
 
161
+ Normal recording takes a full-DOM checkpoint on the first recorded incremental
162
+ event after five minutes since the previous full snapshot. Each checkpoint
163
+ starts a new upload chunk with its `Meta` and `FullSnapshot` pair. This does not
164
+ change the upload cadence. Error-buffered recording retains its two-minute
165
+ checkpoint interval. If `minSessionDurationMs` exceeds five minutes, normal
166
+ recording uses that longer checkpoint interval so replacement snapshots cannot
167
+ restart the minimum-duration gate before it completes.
168
+
161
169
  Replays must contain at least `minSessionDurationMs` of recorded events (10
162
170
  seconds by default) before they are uploaded. While waiting, events stay
163
171
  buffered. The initial `Meta` and `FullSnapshot` anchor is retained even when it
@@ -267,8 +275,8 @@ The recorder uses a Sentry-style two-rate model:
267
275
 
268
276
  - `sessionSampleRate`: records the current browser session continuously
269
277
  - `onErrorSampleRate`: for sessions not selected by `sessionSampleRate`, keeps
270
- an in-memory replay buffer and promotes it only for an uncaught `window.error`
271
- or `unhandledrejection`
278
+ an in-memory replay buffer and promotes it for an uncaught `window.error` or
279
+ `unhandledrejection`, or for an error passed to `captureError()`
272
280
 
273
281
  Buffer mode is bounded by `maxBufferBytes`, measured as the UTF-8 byte sum of
274
282
  event JSON before envelope metadata and compression. It keeps the latest full
@@ -284,8 +292,14 @@ properties. A sampled-off session keeps only a lightweight session-id monitor;
284
292
  it does not start rrweb or patch console, network, or navigation globals, and a
285
293
  later sampled session can begin recording without reloading the page.
286
294
 
287
- Caught exceptions, `console.error`, and errors reported through another API do
288
- not automatically promote the replay buffer.
295
+ Pass a caught error to `replay.captureError(error)` to add it to the replay and
296
+ promote the buffer, as an uncaught error does. For an error that occurred
297
+ earlier, pass `{ timestamp }` in epoch milliseconds; the error event records it. An error object is added once,
298
+ even when it is also uncaught later. `console.error` does not promote the buffer.
299
+
300
+ Set `captureGlobalErrors: false` when another layer listens for uncaught errors
301
+ and forwards them through `captureError()`. The replay then installs no `error`
302
+ or `unhandledrejection` listeners.
289
303
 
290
304
  `stop()` is awaitable and flushes the final chunk before resolving.
291
305
 
@@ -317,7 +331,9 @@ logfire.configure({
317
331
  ```
318
332
 
319
333
  The browser package owns RUM session identity, span correlation attributes, and
320
- cleanup ordering. Call `startSessionReplay()` directly only for standalone or
334
+ cleanup ordering. It also reports uncaught errors as spans and passes every
335
+ `reportError()` call to `captureError()`, so a handled error that the
336
+ application reports promotes an error-buffered replay. Call `startSessionReplay()` directly only for standalone or
321
337
  advanced integrations that do not use `@pydantic/logfire-browser`.
322
338
 
323
339
  ## Local Development Notes
@@ -89,37 +89,39 @@ interface ChunkEnvelope {
89
89
  events: RrwebEvent[];
90
90
  }
91
91
  /**
92
- * Early Access session replay recorder configuration. Keep browser replay
93
- * rollout behind an application flag.
94
- */
92
+ * Early Access session replay recorder configuration. Keep browser replay
93
+ * rollout behind an application flag.
94
+ */
95
95
  interface SessionReplayConfig {
96
96
  /**
97
- * Browser-safe replay upload endpoint, either direct Logfire ingest with a
98
- * restricted frontend application token or an application-owned proxy. The
99
- * SDK posts to `${replayUrl}/${sessionId}?seq=${seq}`.
100
- */
97
+ * Browser-safe replay upload endpoint, either direct Logfire ingest with a
98
+ * restricted frontend application token or an application-owned proxy. The
99
+ * SDK posts to `${replayUrl}/${recordingId}?seq=${seq}`. A replay continues
100
+ * across same-tab reloads/navigations; a new tab gets a separate recording id.
101
+ */
101
102
  replayUrl: string;
102
103
  /**
103
- * Headers added to each replay upload. Direct Logfire ingest uses the same
104
- * restricted frontend application headers as traces and metrics.
105
- */
104
+ * Headers added to each replay upload. Direct Logfire ingest uses the same
105
+ * restricted frontend application headers as traces and metrics.
106
+ */
106
107
  headers?: () => MaybePromise<Record<string, string>>;
107
108
  /**
108
- * Convenience token source. A non-empty value removes any case-insensitive
109
- * Authorization entry returned by `headers`, then sets
110
- * `Authorization: Bearer ${token}`. Only restricted frontend application
111
- * tokens are safe in browsers.
112
- */
109
+ * Convenience token source. A non-empty value removes any case-insensitive
110
+ * Authorization entry returned by `headers`, then sets
111
+ * `Authorization: Bearer ${token}`. Only restricted frontend application
112
+ * tokens are safe in browsers.
113
+ */
113
114
  token?: string | (() => MaybePromise<string>);
114
115
  /**
115
- * Optional external session id source. The browser SDK integration should
116
- * pass its RUM session id here.
117
- */
116
+ * Optional external session id source. The browser SDK integration should
117
+ * pass its RUM session id here. This controls sampling and session rotation;
118
+ * it is not used as the upload/playback id (see `getRecordingId()`).
119
+ */
118
120
  getSessionId?: () => string | undefined;
119
121
  /**
120
- * Returns low-cardinality, non-PII dimensions to snapshot once per replay
121
- * session. Invalid or oversized entries are omitted.
122
- */
122
+ * Returns low-cardinality, non-PII dimensions to snapshot once per replay
123
+ * session. Invalid or oversized entries are omitted.
124
+ */
123
125
  getSessionAttributes?: () => SessionAttributesInput;
124
126
  /** Probability of recording each new browser session in full. */
125
127
  sessionSampleRate?: number;
@@ -136,19 +138,26 @@ interface SessionReplayConfig {
136
138
  /** Minimum recording duration before a replay is uploaded. Defaults to 10 seconds. */
137
139
  minSessionDurationMs?: number;
138
140
  sessionIdleTimeoutMs?: number;
141
+ /** Maximum recording duration before the session ID rotates. Defaults to 2 hours. */
139
142
  maxSessionDurationMs?: number;
140
143
  distinctId?: string;
141
144
  getDistinctId?: () => string | undefined;
142
145
  /**
143
- * Returns the current user, snapshotted for every chunk as `meta.user`. Only
144
- * a non-empty `id`, `name` and `email` are kept; name and email are optional
145
- * personal data. Without `getDistinctId`, the same snapshot's `id` becomes
146
- * `meta.distinctId`.
147
- */
146
+ * Returns the current user, snapshotted for every chunk as `meta.user`. Only
147
+ * a non-empty `id`, `name` and `email` are kept; name and email are optional
148
+ * personal data. Without `getDistinctId`, the same snapshot's `id` becomes
149
+ * `meta.distinctId`.
150
+ */
148
151
  getUser?: () => ReplayUser | undefined;
149
152
  captureConsole?: boolean;
150
153
  captureNetwork?: boolean;
151
154
  captureNavigation?: boolean;
155
+ /**
156
+ * Listen for uncaught `error` and `unhandledrejection` events, add them to the replay, and
157
+ * promote an error-sampled buffer. Defaults to true. The browser SDK turns this off when it
158
+ * captures global errors itself and forwards them through `captureError()`.
159
+ */
160
+ captureGlobalErrors?: boolean;
152
161
  ignoreUrlPatterns?: RegExp[];
153
162
  redactUrlPatterns?: RegExp[];
154
163
  onError?: (error: unknown) => void;
@@ -159,10 +168,10 @@ interface SessionReplayConfig {
159
168
  //#endregion
160
169
  //#region src/uploadError.d.ts
161
170
  /**
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
- */
171
+ * - `unconfirmed`: retries ended after a request reached the network; the server may hold the chunk.
172
+ * - `rejected`: the server answered with a terminal HTTP status.
173
+ * - `not-sent`: no request reached the network (queue full, compression, headers or token failed).
174
+ */
166
175
  type ReplayUploadFailureReason = "unconfirmed" | "rejected" | "not-sent";
167
176
  interface ReplayUploadErrorInit {
168
177
  cause: unknown;
@@ -173,10 +182,10 @@ interface ReplayUploadErrorInit {
173
182
  status?: number | undefined;
174
183
  }
175
184
  /**
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
- */
185
+ * Reported through `onError` when a replay chunk is not confirmed by the server.
186
+ * Recording continues from a fresh full snapshot, so `droppedSeqs` lists the
187
+ * later chunks that were discarded because they depended on the lost one.
188
+ */
180
189
  declare class ReplayUploadError extends Error {
181
190
  readonly droppedSeqs: readonly number[];
182
191
  readonly reason: ReplayUploadFailureReason;
@@ -191,9 +200,21 @@ interface SessionReplay {
191
200
  readonly recording: boolean;
192
201
  readonly mode: "full" | "buffer" | "off";
193
202
  getSessionId(): string;
203
+ /**
204
+ * Add an error to the replay and promote an error-sampled buffer, as an uncaught error does.
205
+ * The same error object is added once, however many times it is captured. Pass the time the
206
+ * error occurred, in epoch milliseconds, when it is captured later; the error event records it
207
+ * as `timestamp`.
208
+ */
209
+ captureError(error: unknown, options?: CaptureErrorOptions): void;
210
+ /** The current DOM recording's upload/playback id; distinct from the RUM session id. */
211
+ getRecordingId(): string;
194
212
  flush(): Promise<void>;
195
213
  stop(): Promise<void>;
196
214
  }
215
+ interface CaptureErrorOptions {
216
+ timestamp?: number;
217
+ }
197
218
  declare function startSessionReplay(config: SessionReplayConfig): SessionReplay;
198
219
  //#endregion
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 };
220
+ export { SessionReplayConfig as C, SessionAttributesInput as S, ReplayUser as _, ReplayUploadErrorInit as a, SessionAttributeValue as b, ChunkEnvelope as c, CustomTag as d, EventType as f, NetworkPayload as g, NavigationPayload as h, ReplayUploadError as i, ChunkMeta as l, MouseInteractions as m, SessionReplay as n, ReplayUploadFailureReason as o, IncrementalSource as p, startSessionReplay as r, CHUNK_ENVELOPE_VERSION as s, CaptureErrorOptions as t, ConsolePayload as u, RrwebEvent as v, SessionAttributes as x, SamplingMode as y };
@@ -89,37 +89,39 @@ interface ChunkEnvelope {
89
89
  events: RrwebEvent[];
90
90
  }
91
91
  /**
92
- * Early Access session replay recorder configuration. Keep browser replay
93
- * rollout behind an application flag.
94
- */
92
+ * Early Access session replay recorder configuration. Keep browser replay
93
+ * rollout behind an application flag.
94
+ */
95
95
  interface SessionReplayConfig {
96
96
  /**
97
- * Browser-safe replay upload endpoint, either direct Logfire ingest with a
98
- * restricted frontend application token or an application-owned proxy. The
99
- * SDK posts to `${replayUrl}/${sessionId}?seq=${seq}`.
100
- */
97
+ * Browser-safe replay upload endpoint, either direct Logfire ingest with a
98
+ * restricted frontend application token or an application-owned proxy. The
99
+ * SDK posts to `${replayUrl}/${recordingId}?seq=${seq}`. A replay continues
100
+ * across same-tab reloads/navigations; a new tab gets a separate recording id.
101
+ */
101
102
  replayUrl: string;
102
103
  /**
103
- * Headers added to each replay upload. Direct Logfire ingest uses the same
104
- * restricted frontend application headers as traces and metrics.
105
- */
104
+ * Headers added to each replay upload. Direct Logfire ingest uses the same
105
+ * restricted frontend application headers as traces and metrics.
106
+ */
106
107
  headers?: () => MaybePromise<Record<string, string>>;
107
108
  /**
108
- * Convenience token source. A non-empty value removes any case-insensitive
109
- * Authorization entry returned by `headers`, then sets
110
- * `Authorization: Bearer ${token}`. Only restricted frontend application
111
- * tokens are safe in browsers.
112
- */
109
+ * Convenience token source. A non-empty value removes any case-insensitive
110
+ * Authorization entry returned by `headers`, then sets
111
+ * `Authorization: Bearer ${token}`. Only restricted frontend application
112
+ * tokens are safe in browsers.
113
+ */
113
114
  token?: string | (() => MaybePromise<string>);
114
115
  /**
115
- * Optional external session id source. The browser SDK integration should
116
- * pass its RUM session id here.
117
- */
116
+ * Optional external session id source. The browser SDK integration should
117
+ * pass its RUM session id here. This controls sampling and session rotation;
118
+ * it is not used as the upload/playback id (see `getRecordingId()`).
119
+ */
118
120
  getSessionId?: () => string | undefined;
119
121
  /**
120
- * Returns low-cardinality, non-PII dimensions to snapshot once per replay
121
- * session. Invalid or oversized entries are omitted.
122
- */
122
+ * Returns low-cardinality, non-PII dimensions to snapshot once per replay
123
+ * session. Invalid or oversized entries are omitted.
124
+ */
123
125
  getSessionAttributes?: () => SessionAttributesInput;
124
126
  /** Probability of recording each new browser session in full. */
125
127
  sessionSampleRate?: number;
@@ -136,19 +138,26 @@ interface SessionReplayConfig {
136
138
  /** Minimum recording duration before a replay is uploaded. Defaults to 10 seconds. */
137
139
  minSessionDurationMs?: number;
138
140
  sessionIdleTimeoutMs?: number;
141
+ /** Maximum recording duration before the session ID rotates. Defaults to 2 hours. */
139
142
  maxSessionDurationMs?: number;
140
143
  distinctId?: string;
141
144
  getDistinctId?: () => string | undefined;
142
145
  /**
143
- * Returns the current user, snapshotted for every chunk as `meta.user`. Only
144
- * a non-empty `id`, `name` and `email` are kept; name and email are optional
145
- * personal data. Without `getDistinctId`, the same snapshot's `id` becomes
146
- * `meta.distinctId`.
147
- */
146
+ * Returns the current user, snapshotted for every chunk as `meta.user`. Only
147
+ * a non-empty `id`, `name` and `email` are kept; name and email are optional
148
+ * personal data. Without `getDistinctId`, the same snapshot's `id` becomes
149
+ * `meta.distinctId`.
150
+ */
148
151
  getUser?: () => ReplayUser | undefined;
149
152
  captureConsole?: boolean;
150
153
  captureNetwork?: boolean;
151
154
  captureNavigation?: boolean;
155
+ /**
156
+ * Listen for uncaught `error` and `unhandledrejection` events, add them to the replay, and
157
+ * promote an error-sampled buffer. Defaults to true. The browser SDK turns this off when it
158
+ * captures global errors itself and forwards them through `captureError()`.
159
+ */
160
+ captureGlobalErrors?: boolean;
152
161
  ignoreUrlPatterns?: RegExp[];
153
162
  redactUrlPatterns?: RegExp[];
154
163
  onError?: (error: unknown) => void;
@@ -159,10 +168,10 @@ interface SessionReplayConfig {
159
168
  //#endregion
160
169
  //#region src/uploadError.d.ts
161
170
  /**
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
- */
171
+ * - `unconfirmed`: retries ended after a request reached the network; the server may hold the chunk.
172
+ * - `rejected`: the server answered with a terminal HTTP status.
173
+ * - `not-sent`: no request reached the network (queue full, compression, headers or token failed).
174
+ */
166
175
  type ReplayUploadFailureReason = "unconfirmed" | "rejected" | "not-sent";
167
176
  interface ReplayUploadErrorInit {
168
177
  cause: unknown;
@@ -173,10 +182,10 @@ interface ReplayUploadErrorInit {
173
182
  status?: number | undefined;
174
183
  }
175
184
  /**
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
- */
185
+ * Reported through `onError` when a replay chunk is not confirmed by the server.
186
+ * Recording continues from a fresh full snapshot, so `droppedSeqs` lists the
187
+ * later chunks that were discarded because they depended on the lost one.
188
+ */
180
189
  declare class ReplayUploadError extends Error {
181
190
  readonly droppedSeqs: readonly number[];
182
191
  readonly reason: ReplayUploadFailureReason;
@@ -191,9 +200,21 @@ interface SessionReplay {
191
200
  readonly recording: boolean;
192
201
  readonly mode: "full" | "buffer" | "off";
193
202
  getSessionId(): string;
203
+ /**
204
+ * Add an error to the replay and promote an error-sampled buffer, as an uncaught error does.
205
+ * The same error object is added once, however many times it is captured. Pass the time the
206
+ * error occurred, in epoch milliseconds, when it is captured later; the error event records it
207
+ * as `timestamp`.
208
+ */
209
+ captureError(error: unknown, options?: CaptureErrorOptions): void;
210
+ /** The current DOM recording's upload/playback id; distinct from the RUM session id. */
211
+ getRecordingId(): string;
194
212
  flush(): Promise<void>;
195
213
  stop(): Promise<void>;
196
214
  }
215
+ interface CaptureErrorOptions {
216
+ timestamp?: number;
217
+ }
197
218
  declare function startSessionReplay(config: SessionReplayConfig): SessionReplay;
198
219
  //#endregion
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 };
220
+ export { SessionReplayConfig as C, SessionAttributesInput as S, ReplayUser as _, ReplayUploadErrorInit as a, SessionAttributeValue as b, ChunkEnvelope as c, CustomTag as d, EventType as f, NetworkPayload as g, NavigationPayload as h, ReplayUploadError as i, ChunkMeta as l, MouseInteractions as m, SessionReplay as n, ReplayUploadFailureReason as o, IncrementalSource as p, startSessionReplay as r, CHUNK_ENVELOPE_VERSION as s, CaptureErrorOptions as t, ConsolePayload as u, RrwebEvent as v, SessionAttributes as x, SamplingMode 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=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;
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:72e5,distinctId:``,captureConsole:!1,captureNetwork:!0,captureNavigation:!0,captureGlobalErrors:!0,redactUrlPatterns:[/.+/u]},s=/* @__PURE__ */ 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=C(t.onError);try{for(let t of f)typeof console[t]==`function`&&n.push(T(console,t,(n,i)=>function(...o){return i()&&S(e,a.Console,{level:t,args:o.slice(0,10).map(O)},r),n.apply(this,o)}));return E(n)}catch(e){throw D(n),e}}function g(e,t){let n=b(t),r={...n,onError:C(n.onError)},i=v(e,r);try{return E([i,y(e,r)])}catch(e){throw i(),e}}function _(e,t={redactUrlPatterns:[]}){let n=C(t.onError),r=r=>{let i=d(window.location.href,t.redactUrlPatterns??[],window.location.href);S(e,a.Navigation,{url:i,kind:r},n)},i=[];try{i.push(T(history,`pushState`,(e,t)=>function(...n){let i=e.apply(this,n);return t()&&r(`push`),i})),i.push(T(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)}),E(i)}catch(e){throw D(i),e}}function v(e,t){return typeof window.fetch==`function`?T(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=A(i,o),u=j(i);if(ne(u,t.ignoreUrlPatterns))return s.call(this,i,o);let f=d(u,t.redactUrlPatterns,window.location.href),p=N(o?.body);try{let n=await s.call(this,i,o);return r()&&S(e,a.Network,M({method:l,url:f,status:n.status,durationMs:Math.max(0,t.now()-c),reqBytes:p,resBytes:ee(n.headers)}),t.onError),n}catch(n){throw r()&&S(e,a.Network,M({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 y(e,t){let n=window.XMLHttpRequest.prototype,r=/* @__PURE__ */ new WeakMap,i=[];try{return i.push(T(n,`open`,(e,n)=>function(...i){let[a,o]=i;if(!n())return e.apply(this,i);let s=o.toString();return ne(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(T(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=N(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()&&S(e,a.Network,M({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:te(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()&&S(e,a.Network,M({method:c.method,url:c.url,status:0,durationMs:Math.max(0,t.now()-c.startedAt),failed:!0,reqBytes:c.reqBytes}),t.onError),n}})),E(i)}catch(e){throw D(i),e}}function b(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);w(t)&&Promise.resolve(t).catch(()=>void 0)}catch{}finally{t=!1}}}}function w(e){return typeof e==`object`&&!!e&&`then`in e&&typeof e.then==`function`}function T(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 E(e){let t=!1;return()=>{t||(t=!0,D(e))}}function D(e){for(let t=e.length-1;t>=0;--t)try{e[t]?.()}catch{}}function O(e){if(e==null)return String(e);if(typeof e==`string`)return k(e);if(typeof e==`number`||typeof e==`boolean`||typeof e==`bigint`)return String(e);if(e instanceof Error)return k(e.stack??`${e.name}: ${e.message}`);try{return k(JSON.stringify(e))}catch{return Object.prototype.toString.call(e)}}function k(e){if(e.length<=p)return e;let t=e.charCodeAt(1023),n=t>=55296&&t<=56319?1023:p;return`${e.slice(0,n)}...(+${String(e.length-n)} chars)`}function A(e,t){return(t?.method??(typeof e==`object`&&`method`in e?e.method:`GET`)).toUpperCase()}function j(e){return typeof e==`string`||e instanceof URL?e.toString():e.url}function ee(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 te(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 M(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 N(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 ne(e,t){return u(e,t)}const re=/* @__PURE__ */ new Set([`action`,`formaction`,`href`,`src`]);function ie(t){let n=()=>{t.beforeUserActivity?.()},r={emit:e=>{t.emit(ae(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 ae(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=P(i,t);return a===i?e:{...e,data:a}}function P(e,t){if(Array.isArray(e)){let n=!1,r=[];for(let i of e){let e=P(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)?oe(a,t):P(a,t);n!==a&&(r=!0),i[e]=n}return r?i:e}function oe(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(!re.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 F(e){return typeof e==`object`&&e?e:void 0}function I(e){return typeof e==`string`&&e.length>0?e:void 0}function se(e){let t=F(e),n=I(t?.id);if(t===void 0||n===void 0)return;let r=I(t.name),i=I(t.email);return{id:n,...r===void 0?{}:{name:r},...i===void 0?{}:{email:i}}}function ce(e,t,o,s={},c){let l=1/0,u=0,d=0,f=0,p=0,m=!1,h=/* @__PURE__ */ new Set;for(let e of t){e.timestamp<l&&(l=e.timestamp),e.timestamp>u&&(u=e.timestamp);let t=F(e.data);if(e.type===n.FullSnapshot)m=!0;else if(e.type===n.Meta){let e=I(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=I(t.tag),n=F(t.payload);if(e===a.Error)p++;else if(e===a.Console)n?.level===`error`&&p++;else if(e===a.Navigation){let e=I(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}}}}function L(e=Date.now){let t=e(),n=new Uint8Array(/* @__PURE__ */ new ArrayBuffer(16));le(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/256)&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 le(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 ue=`lf_session_replay`;var de=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?R():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:L(this.now),startedAt:e,lastActivityAt:e};return this.flushPendingStorage(),this.writeNow(t),t}read(){if(this.storage!==null)try{let e=this.storage.getItem(ue);if(e!==null){let t=JSON.parse(e);if(fe(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(ue,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 R(){try{return globalThis.sessionStorage??null}catch{return null}}function fe(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)}var z=class extends Error{droppedSeqs;reason;seq;sessionId;status;constructor(e){super(pe(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 pe(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 B=`lf_session_replay_seq`,V=1e4,me=3e4,he={gzip:t.gzip,gzipSync:t.gzipSync};var ge=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=/* @__PURE__ */ 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;sequenceRecord;sequenceRecordFailed=!1;awaitingBinding;bindingBufferIncomplete=!1;constructor(e,t,n,r=R(),i=he,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.sequenceRecord=o.sequenceRecord,this.awaitingBinding=o.awaitBinding===!0,this.minimumDurationSatisfied=e.minSessionDurationMs===0,this.seq=o.sequenceRecord?.initialSeq??this.readPersistedSequence()??0,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=W(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||this.awaitingBinding){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:W(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.bindingBufferIncomplete||=this.awaitingBinding,this.minimumBufferIncomplete||=r,r&&this.finishMinimumBufferingEvent();return}if(this.pendingBytes+t>this.config.maxBufferBytes){this.heldBufferIncomplete||=this.held,this.bindingBufferIncomplete||=this.awaitingBinding,this.minimumBufferIncomplete||=r,r&&this.finishMinimumBufferingEvent();return}}if(e.type===n.Meta&&this.mode===`full`&&this.buffer.length>0&&this.flushAndReport(),this.buffer.push(e),this.pendingBytes+=t,r&&this.minimumDurationReached()){this.flushAndReport();return}this.mode===`full`&&this.pendingBytes>=this.config.maxBufferBytes&&e.type!==n.Meta?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:W(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.awaitingBinding||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=Se(t),n=this.allocateSeq(e.length);if(n===void 0)return;let 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.awaitingBinding||!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=>{H(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){H(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){H(this.config.onError,e)}else e!==void 0&&(t=e.id);return{distinctId:t,user:e}}createEnvelope(e,t,n){return{version:1,meta:ce(t,e,n.distinctId,this.sessionAttributes,n.user),events:e}}snapshotUser(){if(this.config.getUser!==void 0)try{return se(this.config.getUser())}catch(e){H(this.config.onError,e);return}}allocateSeq(e){let t=this.seq,n=this.sequenceRecord;if(n!==void 0){if(this.sequenceRecordFailed)return;if(!n.write(t+e)){this.sequenceRecordFailed=!0,this.discard();try{n.onFailure()}catch(e){H(this.config.onError,e)}return}}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){H(this.config.onError,new z({cause:/* @__PURE__ */ Error(`replay upload queue is full`),reason:`not-sent`,seq:void 0,sessionId:r})),this.beginResync();return}let o=this.allocateSeq(1);if(o===void 0)return;let s=()=>void 0,c={body:void 0,done:new Promise(e=>{s=e}),events:e,hasFullSnapshot:e.some(e=>e.type===n.FullSnapshot),identity:i,reachedFetch:!1,resolve:s,retainedBytes:t,seq:o,sessionId:r,settled:!1};return this.queue.push(c),this.retainedBytes+=t,this.draining||(this.draining=!0,this.drainPromise=this.drain()),c}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=me-(Date.now()-n);if(t>1&&i<=0)return G(r,e.reachedFetch);let a=await this.attemptQueued(e,Math.min(V,i));if(a===void 0)return;r=a;let o=Ee(a,t,this.config.random);if(o===void 0||this.shuttingDown||Date.now()-n+o>=me)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=V){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,V)});if(await Promise.race([t,r]),clearTimeout(n),this.shuttingDown){this.deadlineAbort.abort(/* @__PURE__ */ Error(`replay upload did not finish before shutdown`));for(let e of[...this.queue])this.settle(e,{cause:/* @__PURE__ */ 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=be(n.events),r=xe(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()}H(this.config.onError,new z({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=be(this.buffer),this.pendingBytes=xe(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){H(this.config.onError,e),this.scheduleResyncSnapshot();return}this.isResyncPending()&&(H(this.config.onError,/* @__PURE__ */ 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 Ce(this.compression,e)}catch{return this.asyncCompressionAvailable=!1,this.compression.gzipSync(e)}}async send(e,t,n=V){let r,i,a,o=new AbortController,s=setTimeout(()=>{o.abort(/* @__PURE__ */ 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 ye(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 we(l),!l.ok){let e=l.status===429||l.status===503?De(l.headers.get(`retry-after`),Date.now()):void 0;throw new U(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 ve(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`}}canResumeSequence(){return this.awaitingBinding?!0:this.readPersistedSequence()===this.seq}isAwaitingBinding(){return this.awaitingBinding}bind(e){this.awaitingBinding&&!this.closed&&(this.sequenceRecord=e,this.seq=e.initialSeq,this.awaitingBinding=!1,this.bindingBufferIncomplete&&(this.bindingBufferIncomplete=!1,this.buffer=[],this.bufferHasFullSnapshot=!1,this.pendingBytes=0,this.takeFullSnapshot?.()),!(this.mode!==`full`||this.held||this.buffer.length===0)&&(this.pendingBytes>=this.config.maxBufferBytes?this.flushAndReport():this.scheduleFlush()))}readPersistedSequence(){if(this.storage!==null)try{let e=this.storage.getItem(B);if(e===null)return;let t=JSON.parse(e);if(typeof t!=`object`||!t)return;let n=t;return n.id===this.sessionId&&typeof n.seq==`number`&&Number.isSafeInteger(n.seq)&&n.seq>=0?n.seq:void 0}catch{return}}saveSeq(e,t){if(this.storage!==null)try{this.storage.setItem(B,JSON.stringify({id:e,seq:t}))}catch{}}};function H(e,t){try{let n=e?.(t);_e(n)&&Promise.resolve(n).catch(()=>void 0)}catch{}}function _e(e){return typeof e==`object`&&!!e&&`then`in e&&typeof e.then==`function`}var U=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 ve(e){return typeof e==`function`?e():e}async function ye(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 W(e){try{return(0,t.strToU8)(JSON.stringify(e)).byteLength}catch{return 0}}function be(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 xe(e){return e.reduce((e,t)=>e+W(t),0)}function Se(e){let t=[],n=[],r=0;for(let i of e){let e=W(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 Ce(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(/* @__PURE__ */ 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 we(e){if(e.body===null)return!0;try{return await e.body.cancel(),!0}catch{return!1}}function Te(e){return e===408||e===425||e===429||e>=500}function Ee(e,t,n){if(e instanceof U&&!Te(e.status))return;let r=Math.min(8e3,500*2**(t-1)),i=Math.round(r*(1-.5*n())),a=e instanceof U?e.retryAfter:void 0;return a===void 0?i:Math.max(a,i)}function G(e,t){let n=e instanceof U?e.status:void 0;return n!==void 0&&!Te(n)?{cause:e,reason:`rejected`,status:n}:{cause:e,reason:t?`unconfirmed`:`not-sent`,status:n}}function De(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=je(n,t);return r===void 0?void 0:Math.max(0,r-t)}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 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=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=/* @__PURE__ */ 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=`lf_session_replay_recording`,q=`lf_session_replay_recording_owner`,Ne=72e5;var Pe=class{state;resumed=!1;storage;owner;now;maxDurationMs;readOpenerState;constructor(e,t,n,r=()=>null){this.storage=e,this.now=t,this.owner=L(t),this.maxDurationMs=Math.min(n,Ne),this.readOpenerState=r;try{e?.getItem(`lf_session_replay_recording_owner`)===null&&(this.state=this.readResumableState()),e?.setItem(q,this.owner),e?.getItem(`lf_session_replay_recording_owner`)!==this.owner&&(this.storage=null,this.state=void 0)}catch{this.storage=null,this.state=void 0}this.resumed=this.state!==void 0}get(e){return this.state!==void 0&&this.isCurrent(this.state.id,e)?this.state.id:this.replace(e)}candidate(e){return{id:this.get(e),resumed:this.resumed}}replace(e){this.state={id:L(this.now),rumSessionId:e,startedAt:this.now()},this.resumed=!1;try{this.storage?.setItem(Me,JSON.stringify(this.state))}catch{}return this.state.id}isCurrent(e,t){let n=this.state;if(n===void 0)return!1;let r=this.now();return n.id===e&&n.rumSessionId===t&&r>=n.startedAt&&r-n.startedAt<this.maxDurationMs}release(){try{this.storage?.getItem(`lf_session_replay_recording_owner`)===this.owner&&this.storage.removeItem(q)}catch{}}resume(){try{this.state=this.storage?.getItem(`lf_session_replay_recording_owner`)===null?this.readResumableState():void 0,this.storage?.setItem(q,this.owner),this.storage?.getItem(`lf_session_replay_recording_owner`)!==this.owner&&(this.state=void 0,this.storage=null)}catch{this.state=void 0,this.storage=null}this.resumed=this.state!==void 0}readResumableState(){let e=this.storage?.getItem(Me),t=this.storage?.getItem(B);if(e==null||t==null)return;let n=null;try{n=this.readOpenerState()}catch{}if(n!==e)return Fe(e,t)}};function Fe(e,t){let n=JSON.parse(e),r=JSON.parse(t);if(typeof n!=`object`||!n||typeof r!=`object`||!r)return;let i=n,a=r;if(!(typeof i.id!=`string`||i.id.length===0||typeof i.rumSessionId!=`string`||typeof i.startedAt!=`number`||!Number.isFinite(i.startedAt)||a.id!==i.id||typeof a.seq!=`number`||!Number.isSafeInteger(a.seq)||a.seq<0))return{id:i.id,rumSessionId:i.rumSessionId,startedAt:i.startedAt}}function Ie(){try{if(typeof window>`u`||!window.isSecureContext)return;let e=globalThis.navigator?.locks;return typeof e?.request==`function`?e:void 0}catch{return}}async function Le(e,t,n,r=1e3){return n.aborted?{kind:`aborted`}:new Promise(i=>{let a=!1,o=e=>{a||(a=!0,clearTimeout(c),n.removeEventListener(`abort`,l),i(e))},s=new AbortController,c=setTimeout(()=>{s.abort(),o({kind:`timeout`})},r),l=()=>{s.abort(),o({kind:`aborted`})};n.addEventListener(`abort`,l);let u=!1;try{e.request(`logfire-session-replay:${t}`,{mode:`exclusive`,signal:s.signal},async()=>{if(u=!0,a||n.aborted){o({kind:`aborted`});return}await new Promise(e=>{o({kind:`held`,lock:{release:e}})})}).catch(()=>{u||o({kind:`aborted`})})}catch{o({kind:`aborted`})}})}function Re(e){return Number.isFinite(e)?Math.min(1,Math.max(0,e)):0}function ze(e){let t=e.random??Math.random;return t()<Re(e.sessionSampleRate)?`full`:t()<Re(e.onErrorSampleRate)?`buffer`:`off`}const Be=`lf_session_replay_seq:`,J=`lf_session_replay_probe`;var Ve=class{storage;now;constructor(e,t){this.storage=e,this.now=t}read(e){try{return We(this.storage.getItem(Ue(e)))?.seq}catch{return}}write(e,t){try{return this.storage.setItem(Ue(e),JSON.stringify({seq:t,at:this.now()})),this.read(e)===t}catch{return!1}}prune(e){try{let t=this.now()-e,n=[];for(let e=0;e<this.storage.length;e+=1){let r=this.storage.key(e);if(r===null||!r.startsWith(Be))continue;let i=We(this.storage.getItem(r));(i===void 0||i.at<t)&&n.push(r)}for(let e of n)this.storage.removeItem(e)}catch{}}};function He(){try{let e=globalThis.localStorage;if(e===void 0)return null;e.setItem(J,`1`);let t=e.getItem(J)===`1`;return e.removeItem(J),t?e:null}catch{return null}}function Ue(e){return`${Be}${e}`}function We(e){if(e!==null)try{let t=JSON.parse(e);if(typeof t!=`object`||!t)return;let n=t;return typeof n.seq!=`number`||!Number.isSafeInteger(n.seq)||n.seq<0||typeof n.at!=`number`||!Number.isFinite(n.at)?void 0:{seq:n.seq,at:n.at}}catch{return}}const Ge=/^[a-z][a-z0-9_]{0,63}$/u;function Ke(e,t){let n=0;for(let r of e)if(n+=+(r.length>0),n>t)return!1;return!0}function qe(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`&&Ke(r,200))&&(Object.defineProperty(a,e,{configurable:!0,enumerable:!0,value:r,writable:!0}),o+=1,o===20))break}return Object.freeze(a)}const Je={mode:`off`,recording:!1,getSessionId:()=>``,captureError:()=>void 0,getRecordingId:()=>``,flush:async()=>Promise.resolve(),stop:async()=>Promise.resolve()},Ye=`lf_session_replay_mode`,Y=Symbol.for(`@pydantic/logfire-session-replay/controller`);function Xe(e){if(typeof window>`u`||typeof document>`u`)return Je;let t=ct();try{let n=Qe(e),r=new de({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=R(),s=new Pe(o,n.now,n.maxSessionDurationMs,()=>window.opener?.sessionStorage.getItem(`lf_session_replay_recording`)??null),c=$e(n.now),l=a(!1),u=s.get(l),d,f=!1,p=!1,m=0,h=!0,g=Promise.resolve(),_=Promise.resolve(),v,y,b,x=!1,S=e=>{y!==void 0&&(e===void 0||y.recordingId===e)&&(y.lock.release(),y=void 0)},C=(e,t,r=!t,i=!1)=>{let c=et(n,e,o);if(!(c===`off`||f||p||d!==void 0||e!==l))try{x=i&&s.candidate(e).resumed;let t=u;d=Ze({config:n,getSessionId:a,mode:c,onSessionChanged:O,samplingModeStorage:o,sessionId:e,recordingId:t,isCurrentRecording:()=>s.isCurrent(t,a(!1)),holdUntilActivity:r,awaitBinding:i})}catch(e){if(d=void 0,t)throw e;Q(n.onError,e)}},w=(e,t,n)=>({initialSeq:n,write:n=>e.records.write(t,n),onFailure:()=>{queueMicrotask(()=>{!f&&u===t&&(s.replace(l),O(l,!1))})}}),T=async(e,t,r)=>{b?.abort();let i=new AbortController;b=i;let a=()=>i.signal.aborted||f||p||m!==r||l!==t,o=s.candidate(t);u=o.id;let c=()=>{o={id:s.replace(t),resumed:!1},u=o.id};for(let t=0;t<2;t+=1){let t=await Le(e.locks,o.id,i.signal);if(t.kind===`aborted`)return;if(t.kind===`timeout`){c();continue}if(a()||u!==o.id){t.lock.release();return}let n;if(o.resumed?n=e.records.read(o.id):e.records.write(o.id,0)&&(n=0),n===void 0){t.lock.release(),c();continue}return y={recordingId:o.id,lock:t.lock},{recordingId:o.id,sequenceRecord:w(e,o.id,n)}}Q(n.onError,/* @__PURE__ */ Error(`logfire session replay: could not claim a replay recording`))},E=async(e,t,r,i)=>{try{let n=await T(e,t,r),a=!f&&!p&&m===r&&l===t;if(n===void 0){a&&d?.transport.isAwaitingBinding()===!0&&(d.discard(),d=void 0);return}if(!a){S(n.recordingId);return}if(d!==void 0&&d.recordingId!==n.recordingId&&(d.discard(),d=void 0,C(t,!1,i,!0)),d===void 0||d.recordingId!==n.recordingId){S(n.recordingId);return}x=!1,d.transport.bind(n.sequenceRecord)}catch(e){Q(n.onError,e)}},D=async(e,t,n)=>{C(e,!1,n,c!==void 0),c!==void 0&&d!==void 0&&await E(c,e,t,n)},O=(e,t=!0)=>{if(f||p)return;let r=s.get(e);if(e===l&&r===u)return;let i=u;l=e,u=r,b?.abort();let a=d;d=void 0;let o=a?.deactivate()??Promise.resolve(),c=m;g=g.then(async()=>{await Z(o,n.onError),S(i),!f&&m===c&&l===e&&u===r&&await D(e,c,t)})},k;try{if(c===void 0)C(l,!0);else if(c.records.prune(Ne),C(l,!0,!1,!0),d!==void 0){let e=l,t=m;g=g.then(async()=>E(c,e,t,!1))}k=setInterval(()=>{O(a(!1))},1e3)}catch(e){throw d?.discard(),d=void 0,b?.abort(),S(),s.release(),e}let A=()=>{p=!0,m+=1,b?.abort();let e=d;d=void 0;let t=e?.deactivate(!0)??Promise.resolve();S(),_=Promise.all([_,g,Z(t,n.onError)]).then(()=>void 0),g=Promise.resolve(),h=e?.transport.canResumeSequence()??h,h&&s.release()},j=e=>{if(!e.persisted||f)return;d?.discard(),d=void 0;let t=m;g=g.then(async()=>{await new Promise(e=>{setTimeout(e,0)}),!(f||m!==t)&&(p=!1,s.resume(),l=a(!1),u=s.get(l),h=!0,await D(l,t,!1))})};return window.addEventListener(`pagehide`,A),window.addEventListener(`pageshow`,j),{get mode(){try{return d?.transport.getMode()??`off`}catch(e){return Q(n.onError,e),`off`}},get recording(){try{return d!==void 0}catch(e){return Q(n.onError,e),!1}},getSessionId:()=>a(!1),captureError:(e,t)=>{try{d?.captureError(e,t)}catch(e){Q(n.onError,e)}},getRecordingId:()=>d===void 0||x&&d.transport.isAwaitingBinding()?``:s.isCurrent(d.recordingId,a(!1))?d.recordingId:``,flush:async()=>{try{await g,await d?.transport.flush()}catch(e){Q(n.onError,e)}},stop:async()=>(v??=(async()=>{f=!0,m+=1,b?.abort(),clearInterval(k),window.removeEventListener(`pagehide`,A),window.removeEventListener(`pageshow`,j);let e=d;d=void 0,await Z(e?.deactivate()??Promise.resolve(),n.onError),await g,await _,r.flushPendingStorage(),h=e?.transport.canResumeSequence()??h,h&&s.release(),S(),t()})(),v)}}catch(e){throw t(),e}}function Ze(e){let{config:t,getSessionId:n,holdUntilActivity:r,mode:i,onSessionChanged:o,samplingModeStorage:s,sessionId:l,recordingId:u,isCurrentRecording:d,awaitBinding:f}=e,p=qe(t.getSessionAttributes,e=>{Q(t.onError,e)}),m,v=new ge(t,u,i,void 0,void 0,p,{holdUntilActivity:r,takeFullSnapshot:()=>{m.takeFullSnapshot()},awaitBinding:f}),y=[],b=!0,x=()=>b,S;try{m=ie({beforeUserActivity:()=>{if(b&&v.isHeld())try{let e=n(!0);if(e!==l||!d()){o(e,!1);return}v.releaseHeld(()=>{m.takeFullSnapshot()})}catch(e){Q(t.onError,e)}},emit:e=>{if(b)try{let t=n(c(e));if(t!==l||!d()){o(t,!1);return}v.add(e)}catch(e){Q(t.onError,e)}},maskAllText:t.maskAllText,maskAllInputs:t.maskAllInputs,maskTextSelector:t.maskTextSelector,blockSelector:t.blockSelector,checkoutEveryNms:i===`buffer`?12e4:Math.max(3e5,t.minSessionDurationMs),redactUrlPatterns:t.redactUrlPatterns}),y.push(()=>{m.stop()});let e=(e,n)=>{if(b)try{m.addCustomEvent(e,n)}catch(e){Q(t.onError,e)}},r=n=>{x()&&(v.releaseHeld(()=>{m.takeFullSnapshot()}),e(a.Error,n),x()&&v.getMode()===`buffer`&&(nt(s,l,`full`),X(v.triggerFlush(),t.onError)))},f=/* @__PURE__ */ new WeakSet,p=e=>typeof e!=`object`||!e||!f.has(e)&&(f.add(e),!0),C=(e,t)=>{if(p(e)){let n=lt(it(e),void 0,at(e));r(typeof t?.timestamp==`number`?{...n,timestamp:t.timestamp}:n)}},w=e=>{e instanceof ErrorEvent&&p(e.error)&&r(lt(e.message,e.filename,at(e.error)))},T=e=>{C(e.reason)},E=()=>{document.visibilityState===`hidden`&&X(v.flush({keepalive:!0}),t.onError)},D=()=>{X(v.flush({keepalive:!0}),t.onError)};return t.captureGlobalErrors&&(window.addEventListener(`error`,w,!0),y.push(()=>{window.removeEventListener(`error`,w,!0)}),window.addEventListener(`unhandledrejection`,T,!0),y.push(()=>{window.removeEventListener(`unhandledrejection`,T,!0)})),document.addEventListener(`visibilitychange`,E),y.push(()=>{document.removeEventListener(`visibilitychange`,E)}),window.addEventListener(`pagehide`,D),y.push(()=>{window.removeEventListener(`pagehide`,D)}),t.captureConsole&&y.push(h(e,{onError:t.onError})),t.captureNetwork&&y.push(g(e,{ignoreUrlPatterns:t.ignoreUrlPatterns,now:t.now,onError:t.onError,redactUrlPatterns:t.redactUrlPatterns})),t.captureNavigation&&y.push(_(e,{onError:t.onError,redactUrlPatterns:t.redactUrlPatterns})),v.start(),{sessionId:l,recordingId:u,transport:v,captureError:C,deactivate:async(e=!1)=>(S??=(async()=>{let t=v.shutdown({keepalive:e});b=!1,$(y),await t})(),S),discard:()=>{b=!1,$(y),v.discard()}}}catch(e){throw b=!1,$(y),v.discard(),e}}function Qe(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,captureGlobalErrors:e.captureGlobalErrors??o.captureGlobalErrors,ignoreUrlPatterns:e.ignoreUrlPatterns??[],redactUrlPatterns:e.redactUrlPatterns??[...o.redactUrlPatterns],onError:e.onError,fetchImpl:n,now:e.now??Date.now,random:e.random??Math.random}}function $e(e){let t=Ie();if(t===void 0)return;let n=He();return n===null?void 0:{locks:t,records:new Ve(n,e)}}function et(e,t,n){let r=tt(n,t);if(r!==void 0)return r;let i=ze({sessionSampleRate:e.sessionSampleRate,onErrorSampleRate:e.onErrorSampleRate,random:e.random});return nt(n,t,i),i}function tt(e,t){if(e!==null)try{let n=e.getItem(Ye);if(n===null)return;let r=JSON.parse(n);if(typeof r!=`object`||!r)return;let i=r;return i.id!==t||!rt(i.mode)?void 0:i.mode}catch{return}}function nt(e,t,n){if(e!==null)try{e.setItem(Ye,JSON.stringify({id:t,mode:n}))}catch{}}function rt(e){return e===`full`||e===`buffer`||e===`off`}function it(e){return ut(ot(e,`message`)??e)}function at(e){let t=ot(e,`stack`);return typeof t==`string`?t:void 0}function ot(e,t){try{return typeof e==`object`&&e&&t in e?e[t]:void 0}catch{return}}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);st(n)&&Promise.resolve(n).catch(()=>void 0)}catch{}}function st(e){return typeof e==`object`&&!!e&&`then`in e&&typeof e.then==`function`}function ct(){let e=globalThis;if(e[Y]!==void 0)throw Error(`logfire session replay: a replay controller is already active in this page`);let t={};Object.defineProperty(e,Y,{configurable:!0,enumerable:!1,value:t,writable:!0});let n=!1;return()=>{n||(n=!0,e[Y]===t&&Reflect.deleteProperty(e,Y))}}function $(e){for(let t=e.length-1;t>=0;--t)try{e[t]?.()}catch{}e.length=0}function lt(e,t,n){return{message:e,...t===void 0||t.length===0?{}:{source:t},...n===void 0?{}:{stack:n}}}function ut(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{return Object.prototype.toString.call(e)}catch{return`[object Object]`}}exports.CHUNK_ENVELOPE_VERSION=1,exports.CustomTag=a,exports.EventType=n,exports.IncrementalSource=r,exports.MouseInteractions=i,exports.ReplayUploadError=z,exports.startSessionReplay=Xe;
package/dist/index.d.cts CHANGED
@@ -1,2 +1,2 @@
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 };
1
+ import { C as SessionReplayConfig, S as SessionAttributesInput, _ as ReplayUser, a as ReplayUploadErrorInit, b as SessionAttributeValue, c as ChunkEnvelope, d as CustomTag, f as EventType, g as NetworkPayload, h as NavigationPayload, i as ReplayUploadError, l as ChunkMeta, m as MouseInteractions, n as SessionReplay, o as ReplayUploadFailureReason, p as IncrementalSource, r as startSessionReplay, s as CHUNK_ENVELOPE_VERSION, t as CaptureErrorOptions, u as ConsolePayload, v as RrwebEvent, x as SessionAttributes, y as SamplingMode } from "./index-BxzwrVOz.js";
2
+ export { CHUNK_ENVELOPE_VERSION, CaptureErrorOptions, 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 { 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 };
1
+ import { C as SessionReplayConfig, S as SessionAttributesInput, _ as ReplayUser, a as ReplayUploadErrorInit, b as SessionAttributeValue, c as ChunkEnvelope, d as CustomTag, f as EventType, g as NetworkPayload, h as NavigationPayload, i as ReplayUploadError, l as ChunkMeta, m as MouseInteractions, n as SessionReplay, o as ReplayUploadFailureReason, p as IncrementalSource, r as startSessionReplay, s as CHUNK_ENVELOPE_VERSION, t as CaptureErrorOptions, u as ConsolePayload, v as RrwebEvent, x as SessionAttributes, y as SamplingMode } from "./index-BxzwrVOz.js";
2
+ export { CHUNK_ENVELOPE_VERSION, CaptureErrorOptions, 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=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};
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:72e5,distinctId:``,captureConsole:!1,captureNetwork:!0,captureNavigation:!0,captureGlobalErrors:!0,redactUrlPatterns:[/.+/u]},u=/* @__PURE__ */ 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 v(e,t={}){let n=[],r=E(t.onError);try{for(let t of h)typeof console[t]==`function`&&n.push(O(console,t,(n,i)=>function(...a){return i()&&T(e,s.Console,{level:t,args:a.slice(0,10).map(j)},r),n.apply(this,a)}));return k(n)}catch(e){throw A(n),e}}function y(e,t){let n=C(t),r={...n,onError:E(n.onError)},i=x(e,r);try{return k([i,S(e,r)])}catch(e){throw i(),e}}function b(e,t={redactUrlPatterns:[]}){let n=E(t.onError),r=r=>{let i=m(window.location.href,t.redactUrlPatterns??[],window.location.href);T(e,s.Navigation,{url:i,kind:r},n)},i=[];try{i.push(O(history,`pushState`,(e,t)=>function(...n){let i=e.apply(this,n);return t()&&r(`push`),i})),i.push(O(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)}),k(i)}catch(e){throw A(i),e}}function x(e,t){return typeof window.fetch==`function`?O(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=ee(i,a),u=te(i);if(ae(u,t.ignoreUrlPatterns))return o.call(this,i,a);let d=m(u,t.redactUrlPatterns,window.location.href),f=ie(a?.body);try{let n=await o.call(this,i,a);return r()&&T(e,s.Network,N({method:l,url:d,status:n.status,durationMs:Math.max(0,t.now()-c),reqBytes:f,resBytes:ne(n.headers)}),t.onError),n}catch(n){throw r()&&T(e,s.Network,N({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 S(e,t){let n=window.XMLHttpRequest.prototype,r=/* @__PURE__ */ new WeakMap,i=[];try{return i.push(O(n,`open`,(e,n)=>function(...i){let[a,o]=i;if(!n())return e.apply(this,i);let s=o.toString();return ae(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(O(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=ie(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()&&T(e,s.Network,N({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:re(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()&&T(e,s.Network,N({method:c.method,url:c.url,status:0,durationMs:Math.max(0,t.now()-c.startedAt),failed:!0,reqBytes:c.reqBytes}),t.onError),n}})),k(i)}catch(e){throw A(i),e}}function C(e){return{...e,ignoreUrlPatterns:w(e.ignoreUrlPatterns),redactUrlPatterns:w(e.redactUrlPatterns)}}function w(e){return e.map(e=>{let t=e.flags.replace(/[gy]/gu,``);return t===e.flags?e:new RegExp(e.source,t)})}function T(e,t,n,r){try{e(t,n)}catch(e){r?.(e)}}function E(e){let t=!1;return n=>{if(!t){t=!0;try{let t=e?.(n);D(t)&&Promise.resolve(t).catch(()=>void 0)}catch{}finally{t=!1}}}}function D(e){return typeof e==`object`&&!!e&&`then`in e&&typeof e.then==`function`}function O(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 k(e){let t=!1;return()=>{t||(t=!0,A(e))}}function A(e){for(let t=e.length-1;t>=0;--t)try{e[t]?.()}catch{}}function j(e){if(e==null)return String(e);if(typeof e==`string`)return M(e);if(typeof e==`number`||typeof e==`boolean`||typeof e==`bigint`)return String(e);if(e instanceof Error)return M(e.stack??`${e.name}: ${e.message}`);try{return M(JSON.stringify(e))}catch{return Object.prototype.toString.call(e)}}function M(e){if(e.length<=g)return e;let t=e.charCodeAt(1023),n=t>=55296&&t<=56319?1023:g;return`${e.slice(0,n)}...(+${String(e.length-n)} chars)`}function ee(e,t){return(t?.method??(typeof e==`object`&&`method`in e?e.method:`GET`)).toUpperCase()}function te(e){return typeof e==`string`||e instanceof URL?e.toString():e.url}function ne(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 re(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 N(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 ie(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 ae(e,t){return p(e,t)}const oe=/* @__PURE__ */ new Set([`action`,`formaction`,`href`,`src`]);function se(t){let n=()=>{t.beforeUserActivity?.()},r={emit:e=>{t.emit(ce(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 ce(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=P(n,t);return r===n?e:{...e,data:r}}function P(e,t){if(Array.isArray(e)){let n=!1,r=[];for(let i of e){let e=P(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)?le(a,t):P(a,t);n!==a&&(r=!0),i[e]=n}return r?i:e}function le(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(!oe.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 F(e){return typeof e==`object`&&e?e:void 0}function I(e){return typeof e==`string`&&e.length>0?e:void 0}function ue(e){let t=F(e),n=I(t?.id);if(t===void 0||n===void 0)return;let r=I(t.name),i=I(t.email);return{id:n,...r===void 0?{}:{name:r},...i===void 0?{}:{email:i}}}function de(e,t,n,r={},c){let l=1/0,u=0,d=0,f=0,p=0,m=!1,h=/* @__PURE__ */ new Set;for(let e of t){e.timestamp<l&&(l=e.timestamp),e.timestamp>u&&(u=e.timestamp);let t=F(e.data);if(e.type===i.FullSnapshot)m=!0;else if(e.type===i.Meta){let e=I(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=I(t.tag),n=F(t.payload);if(e===s.Error)p++;else if(e===s.Console)n?.level===`error`&&p++;else if(e===s.Navigation){let e=I(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}}}}function L(e=Date.now){let t=e(),n=new Uint8Array(/* @__PURE__ */ new ArrayBuffer(16));fe(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/256)&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 fe(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 pe=`lf_session_replay`;var me=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?R():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:L(this.now),startedAt:e,lastActivityAt:e};return this.flushPendingStorage(),this.writeNow(t),t}read(){if(this.storage!==null)try{let e=this.storage.getItem(pe);if(e!==null){let t=JSON.parse(e);if(he(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(pe,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 R(){try{return globalThis.sessionStorage??null}catch{return null}}function he(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)}var z=class extends Error{droppedSeqs;reason;seq;sessionId;status;constructor(e){super(ge(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 ge(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 B=`lf_session_replay_seq`,V=1e4,_e=3e4,ve={gzip:t,gzipSync:n};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;queue=[];retainedBytes=0;activeUpload;drainPromise;draining=!1;lifecycleFlights=/* @__PURE__ */ 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;sequenceRecord;sequenceRecordFailed=!1;awaitingBinding;bindingBufferIncomplete=!1;constructor(e,t,n,r=R(),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.sequenceRecord=o.sequenceRecord,this.awaitingBinding=o.awaitBinding===!0,this.minimumDurationSatisfied=e.minSessionDurationMs===0,this.seq=o.sequenceRecord?.initialSeq??this.readPersistedSequence()??0,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=W(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||this.awaitingBinding){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:W(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.bindingBufferIncomplete||=this.awaitingBinding,this.minimumBufferIncomplete||=n,n&&this.finishMinimumBufferingEvent();return}if(this.pendingBytes+t>this.config.maxBufferBytes){this.heldBufferIncomplete||=this.held,this.bindingBufferIncomplete||=this.awaitingBinding,this.minimumBufferIncomplete||=n,n&&this.finishMinimumBufferingEvent();return}}if(e.type===i.Meta&&this.mode===`full`&&this.buffer.length>0&&this.flushAndReport(),this.buffer.push(e),this.pendingBytes+=t,n&&this.minimumDurationReached()){this.flushAndReport();return}this.mode===`full`&&this.pendingBytes>=this.config.maxBufferBytes&&e.type!==i.Meta?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:W(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.awaitingBinding||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=Te(t),n=this.allocateSeq(e.length);if(n===void 0)return;let 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.awaitingBinding||!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=>{H(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){H(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){H(this.config.onError,e)}else e!==void 0&&(t=e.id);return{distinctId:t,user:e}}createEnvelope(e,t,n){return{version:1,meta:de(t,e,n.distinctId,this.sessionAttributes,n.user),events:e}}snapshotUser(){if(this.config.getUser!==void 0)try{return ue(this.config.getUser())}catch(e){H(this.config.onError,e);return}}allocateSeq(e){let t=this.seq,n=this.sequenceRecord;if(n!==void 0){if(this.sequenceRecordFailed)return;if(!n.write(t+e)){this.sequenceRecordFailed=!0,this.discard();try{n.onFailure()}catch(e){H(this.config.onError,e)}return}}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){H(this.config.onError,new z({cause:/* @__PURE__ */ Error(`replay upload queue is full`),reason:`not-sent`,seq:void 0,sessionId:n})),this.beginResync();return}let o=this.allocateSeq(1);if(o===void 0)return;let s=()=>void 0,c={body:void 0,done:new Promise(e=>{s=e}),events:e,hasFullSnapshot:e.some(e=>e.type===i.FullSnapshot),identity:r,reachedFetch:!1,resolve:s,retainedBytes:t,seq:o,sessionId:n,settled:!1};return this.queue.push(c),this.retainedBytes+=t,this.draining||(this.draining=!0,this.drainPromise=this.drain()),c}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=_e-(Date.now()-n);if(t>1&&i<=0)return G(r,e.reachedFetch);let a=await this.attemptQueued(e,Math.min(V,i));if(a===void 0)return;r=a;let o=ke(a,t,this.config.random);if(o===void 0||this.shuttingDown||Date.now()-n+o>=_e)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=V){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,V)});if(await Promise.race([t,r]),clearTimeout(n),this.shuttingDown){this.deadlineAbort.abort(/* @__PURE__ */ Error(`replay upload did not finish before shutdown`));for(let e of[...this.queue])this.settle(e,{cause:/* @__PURE__ */ 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=Ce(n.events),r=we(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()}H(this.config.onError,new z({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=Ce(this.buffer),this.pendingBytes=we(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){H(this.config.onError,e),this.scheduleResyncSnapshot();return}this.isResyncPending()&&(H(this.config.onError,/* @__PURE__ */ 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 Ee(this.compression,e)}catch{return this.asyncCompressionAvailable=!1,this.compression.gzipSync(e)}}async send(e,t,n=V){let r,i,a,o=new AbortController,s=setTimeout(()=>{o.abort(/* @__PURE__ */ 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 Se(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 De(l),!l.ok){let e=l.status===429||l.status===503?Ae(l.headers.get(`retry-after`),Date.now()):void 0;throw new U(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 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`}}canResumeSequence(){return this.awaitingBinding?!0:this.readPersistedSequence()===this.seq}isAwaitingBinding(){return this.awaitingBinding}bind(e){this.awaitingBinding&&!this.closed&&(this.sequenceRecord=e,this.seq=e.initialSeq,this.awaitingBinding=!1,this.bindingBufferIncomplete&&(this.bindingBufferIncomplete=!1,this.buffer=[],this.bufferHasFullSnapshot=!1,this.pendingBytes=0,this.takeFullSnapshot?.()),!(this.mode!==`full`||this.held||this.buffer.length===0)&&(this.pendingBytes>=this.config.maxBufferBytes?this.flushAndReport():this.scheduleFlush()))}readPersistedSequence(){if(this.storage!==null)try{let e=this.storage.getItem(B);if(e===null)return;let t=JSON.parse(e);if(typeof t!=`object`||!t)return;let n=t;return n.id===this.sessionId&&typeof n.seq==`number`&&Number.isSafeInteger(n.seq)&&n.seq>=0?n.seq:void 0}catch{return}}saveSeq(e,t){if(this.storage!==null)try{this.storage.setItem(B,JSON.stringify({id:e,seq:t}))}catch{}}};function H(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 U=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,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 W(e){try{return r(JSON.stringify(e)).byteLength}catch{return 0}}function Ce(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 we(e){return e.reduce((e,t)=>e+W(t),0)}function Te(e){let t=[],n=[],r=0;for(let i of e){let e=W(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(/* @__PURE__ */ 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){return e===408||e===425||e===429||e>=500}function ke(e,t,n){if(e instanceof U&&!Oe(e.status))return;let r=Math.min(8e3,500*2**(t-1)),i=Math.round(r*(1-.5*n())),a=e instanceof U?e.retryAfter:void 0;return a===void 0?i:Math.max(a,i)}function G(e,t){let n=e instanceof U?e.status:void 0;return n!==void 0&&!Oe(n)?{cause:e,reason:`rejected`,status:n}:{cause:e,reason:t?`unconfirmed`:`not-sent`,status:n}}function Ae(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=Pe(n,t);return r===void 0?void 0:Math.max(0,r-t)}const je=[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`],Me=[`Sun`,`Mon`,`Tue`,`Wed`,`Thu`,`Fri`,`Sat`],Ne=[`Sunday`,`Monday`,`Tuesday`,`Wednesday`,`Thursday`,`Friday`,`Saturday`];function Pe(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=je.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=/* @__PURE__ */ 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=Me.indexOf(e),h=Ne.indexOf(e);return(m>=0?m:h)===p.getUTCDay()?p.getTime():void 0}const Fe=`lf_session_replay_recording`,q=`lf_session_replay_recording_owner`,Ie=72e5;var Le=class{state;resumed=!1;storage;owner;now;maxDurationMs;readOpenerState;constructor(e,t,n,r=()=>null){this.storage=e,this.now=t,this.owner=L(t),this.maxDurationMs=Math.min(n,Ie),this.readOpenerState=r;try{e?.getItem(`lf_session_replay_recording_owner`)===null&&(this.state=this.readResumableState()),e?.setItem(q,this.owner),e?.getItem(`lf_session_replay_recording_owner`)!==this.owner&&(this.storage=null,this.state=void 0)}catch{this.storage=null,this.state=void 0}this.resumed=this.state!==void 0}get(e){return this.state!==void 0&&this.isCurrent(this.state.id,e)?this.state.id:this.replace(e)}candidate(e){return{id:this.get(e),resumed:this.resumed}}replace(e){this.state={id:L(this.now),rumSessionId:e,startedAt:this.now()},this.resumed=!1;try{this.storage?.setItem(Fe,JSON.stringify(this.state))}catch{}return this.state.id}isCurrent(e,t){let n=this.state;if(n===void 0)return!1;let r=this.now();return n.id===e&&n.rumSessionId===t&&r>=n.startedAt&&r-n.startedAt<this.maxDurationMs}release(){try{this.storage?.getItem(`lf_session_replay_recording_owner`)===this.owner&&this.storage.removeItem(q)}catch{}}resume(){try{this.state=this.storage?.getItem(`lf_session_replay_recording_owner`)===null?this.readResumableState():void 0,this.storage?.setItem(q,this.owner),this.storage?.getItem(`lf_session_replay_recording_owner`)!==this.owner&&(this.state=void 0,this.storage=null)}catch{this.state=void 0,this.storage=null}this.resumed=this.state!==void 0}readResumableState(){let e=this.storage?.getItem(Fe),t=this.storage?.getItem(B);if(e==null||t==null)return;let n=null;try{n=this.readOpenerState()}catch{}if(n!==e)return Re(e,t)}};function Re(e,t){let n=JSON.parse(e),r=JSON.parse(t);if(typeof n!=`object`||!n||typeof r!=`object`||!r)return;let i=n,a=r;if(!(typeof i.id!=`string`||i.id.length===0||typeof i.rumSessionId!=`string`||typeof i.startedAt!=`number`||!Number.isFinite(i.startedAt)||a.id!==i.id||typeof a.seq!=`number`||!Number.isSafeInteger(a.seq)||a.seq<0))return{id:i.id,rumSessionId:i.rumSessionId,startedAt:i.startedAt}}function ze(){try{if(typeof window>`u`||!window.isSecureContext)return;let e=globalThis.navigator?.locks;return typeof e?.request==`function`?e:void 0}catch{return}}async function Be(e,t,n,r=1e3){return n.aborted?{kind:`aborted`}:new Promise(i=>{let a=!1,o=e=>{a||(a=!0,clearTimeout(c),n.removeEventListener(`abort`,l),i(e))},s=new AbortController,c=setTimeout(()=>{s.abort(),o({kind:`timeout`})},r),l=()=>{s.abort(),o({kind:`aborted`})};n.addEventListener(`abort`,l);let u=!1;try{e.request(`logfire-session-replay:${t}`,{mode:`exclusive`,signal:s.signal},async()=>{if(u=!0,a||n.aborted){o({kind:`aborted`});return}await new Promise(e=>{o({kind:`held`,lock:{release:e}})})}).catch(()=>{u||o({kind:`aborted`})})}catch{o({kind:`aborted`})}})}function Ve(e){return Number.isFinite(e)?Math.min(1,Math.max(0,e)):0}function He(e){let t=e.random??Math.random;return t()<Ve(e.sessionSampleRate)?`full`:t()<Ve(e.onErrorSampleRate)?`buffer`:`off`}const Ue=`lf_session_replay_seq:`,J=`lf_session_replay_probe`;var We=class{storage;now;constructor(e,t){this.storage=e,this.now=t}read(e){try{return qe(this.storage.getItem(Ke(e)))?.seq}catch{return}}write(e,t){try{return this.storage.setItem(Ke(e),JSON.stringify({seq:t,at:this.now()})),this.read(e)===t}catch{return!1}}prune(e){try{let t=this.now()-e,n=[];for(let e=0;e<this.storage.length;e+=1){let r=this.storage.key(e);if(r===null||!r.startsWith(Ue))continue;let i=qe(this.storage.getItem(r));(i===void 0||i.at<t)&&n.push(r)}for(let e of n)this.storage.removeItem(e)}catch{}}};function Ge(){try{let e=globalThis.localStorage;if(e===void 0)return null;e.setItem(J,`1`);let t=e.getItem(J)===`1`;return e.removeItem(J),t?e:null}catch{return null}}function Ke(e){return`${Ue}${e}`}function qe(e){if(e!==null)try{let t=JSON.parse(e);if(typeof t!=`object`||!t)return;let n=t;return typeof n.seq!=`number`||!Number.isSafeInteger(n.seq)||n.seq<0||typeof n.at!=`number`||!Number.isFinite(n.at)?void 0:{seq:n.seq,at:n.at}}catch{return}}const Je=/^[a-z][a-z0-9_]{0,63}$/u;function Ye(e,t){let n=0;for(let r of e)if(n+=+(r.length>0),n>t)return!1;return!0}function Xe(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(!Je.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`&&Ye(r,200))&&(Object.defineProperty(a,e,{configurable:!0,enumerable:!0,value:r,writable:!0}),o+=1,o===20))break}return Object.freeze(a)}const Ze={mode:`off`,recording:!1,getSessionId:()=>``,captureError:()=>void 0,getRecordingId:()=>``,flush:async()=>Promise.resolve(),stop:async()=>Promise.resolve()},Qe=`lf_session_replay_mode`,Y=Symbol.for(`@pydantic/logfire-session-replay/controller`);function $e(e){if(typeof window>`u`||typeof document>`u`)return Ze;let t=dt();try{let n=tt(e),r=new me({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=R(),s=new Le(o,n.now,n.maxSessionDurationMs,()=>window.opener?.sessionStorage.getItem(`lf_session_replay_recording`)??null),c=nt(n.now),l=a(!1),u=s.get(l),d,f=!1,p=!1,m=0,h=!0,g=Promise.resolve(),_=Promise.resolve(),v,y,b,x=!1,S=e=>{y!==void 0&&(e===void 0||y.recordingId===e)&&(y.lock.release(),y=void 0)},C=(e,t,r=!t,i=!1)=>{let c=rt(n,e,o);if(!(c===`off`||f||p||d!==void 0||e!==l))try{x=i&&s.candidate(e).resumed;let t=u;d=et({config:n,getSessionId:a,mode:c,onSessionChanged:O,samplingModeStorage:o,sessionId:e,recordingId:t,isCurrentRecording:()=>s.isCurrent(t,a(!1)),holdUntilActivity:r,awaitBinding:i})}catch(e){if(d=void 0,t)throw e;Q(n.onError,e)}},w=(e,t,n)=>({initialSeq:n,write:n=>e.records.write(t,n),onFailure:()=>{queueMicrotask(()=>{!f&&u===t&&(s.replace(l),O(l,!1))})}}),T=async(e,t,r)=>{b?.abort();let i=new AbortController;b=i;let a=()=>i.signal.aborted||f||p||m!==r||l!==t,o=s.candidate(t);u=o.id;let c=()=>{o={id:s.replace(t),resumed:!1},u=o.id};for(let t=0;t<2;t+=1){let t=await Be(e.locks,o.id,i.signal);if(t.kind===`aborted`)return;if(t.kind===`timeout`){c();continue}if(a()||u!==o.id){t.lock.release();return}let n;if(o.resumed?n=e.records.read(o.id):e.records.write(o.id,0)&&(n=0),n===void 0){t.lock.release(),c();continue}return y={recordingId:o.id,lock:t.lock},{recordingId:o.id,sequenceRecord:w(e,o.id,n)}}Q(n.onError,/* @__PURE__ */ Error(`logfire session replay: could not claim a replay recording`))},E=async(e,t,r,i)=>{try{let n=await T(e,t,r),a=!f&&!p&&m===r&&l===t;if(n===void 0){a&&d?.transport.isAwaitingBinding()===!0&&(d.discard(),d=void 0);return}if(!a){S(n.recordingId);return}if(d!==void 0&&d.recordingId!==n.recordingId&&(d.discard(),d=void 0,C(t,!1,i,!0)),d===void 0||d.recordingId!==n.recordingId){S(n.recordingId);return}x=!1,d.transport.bind(n.sequenceRecord)}catch(e){Q(n.onError,e)}},D=async(e,t,n)=>{C(e,!1,n,c!==void 0),c!==void 0&&d!==void 0&&await E(c,e,t,n)},O=(e,t=!0)=>{if(f||p)return;let r=s.get(e);if(e===l&&r===u)return;let i=u;l=e,u=r,b?.abort();let a=d;d=void 0;let o=a?.deactivate()??Promise.resolve(),c=m;g=g.then(async()=>{await Z(o,n.onError),S(i),!f&&m===c&&l===e&&u===r&&await D(e,c,t)})},k;try{if(c===void 0)C(l,!0);else if(c.records.prune(Ie),C(l,!0,!1,!0),d!==void 0){let e=l,t=m;g=g.then(async()=>E(c,e,t,!1))}k=setInterval(()=>{O(a(!1))},1e3)}catch(e){throw d?.discard(),d=void 0,b?.abort(),S(),s.release(),e}let A=()=>{p=!0,m+=1,b?.abort();let e=d;d=void 0;let t=e?.deactivate(!0)??Promise.resolve();S(),_=Promise.all([_,g,Z(t,n.onError)]).then(()=>void 0),g=Promise.resolve(),h=e?.transport.canResumeSequence()??h,h&&s.release()},j=e=>{if(!e.persisted||f)return;d?.discard(),d=void 0;let t=m;g=g.then(async()=>{await new Promise(e=>{setTimeout(e,0)}),!(f||m!==t)&&(p=!1,s.resume(),l=a(!1),u=s.get(l),h=!0,await D(l,t,!1))})};return window.addEventListener(`pagehide`,A),window.addEventListener(`pageshow`,j),{get mode(){try{return d?.transport.getMode()??`off`}catch(e){return Q(n.onError,e),`off`}},get recording(){try{return d!==void 0}catch(e){return Q(n.onError,e),!1}},getSessionId:()=>a(!1),captureError:(e,t)=>{try{d?.captureError(e,t)}catch(e){Q(n.onError,e)}},getRecordingId:()=>d===void 0||x&&d.transport.isAwaitingBinding()?``:s.isCurrent(d.recordingId,a(!1))?d.recordingId:``,flush:async()=>{try{await g,await d?.transport.flush()}catch(e){Q(n.onError,e)}},stop:async()=>(v??=(async()=>{f=!0,m+=1,b?.abort(),clearInterval(k),window.removeEventListener(`pagehide`,A),window.removeEventListener(`pageshow`,j);let e=d;d=void 0,await Z(e?.deactivate()??Promise.resolve(),n.onError),await g,await _,r.flushPendingStorage(),h=e?.transport.canResumeSequence()??h,h&&s.release(),S(),t()})(),v)}}catch(e){throw t(),e}}function et(e){let{config:t,getSessionId:n,holdUntilActivity:r,mode:i,onSessionChanged:a,samplingModeStorage:o,sessionId:c,recordingId:l,isCurrentRecording:u,awaitBinding:f}=e,p=Xe(t.getSessionAttributes,e=>{Q(t.onError,e)}),m,h=new ye(t,l,i,void 0,void 0,p,{holdUntilActivity:r,takeFullSnapshot:()=>{m.takeFullSnapshot()},awaitBinding:f}),g=[],_=!0,x=()=>_,S;try{m=se({beforeUserActivity:()=>{if(_&&h.isHeld())try{let e=n(!0);if(e!==c||!u()){a(e,!1);return}h.releaseHeld(()=>{m.takeFullSnapshot()})}catch(e){Q(t.onError,e)}},emit:e=>{if(_)try{let t=n(d(e));if(t!==c||!u()){a(t,!1);return}h.add(e)}catch(e){Q(t.onError,e)}},maskAllText:t.maskAllText,maskAllInputs:t.maskAllInputs,maskTextSelector:t.maskTextSelector,blockSelector:t.blockSelector,checkoutEveryNms:i===`buffer`?12e4:Math.max(3e5,t.minSessionDurationMs),redactUrlPatterns:t.redactUrlPatterns}),g.push(()=>{m.stop()});let e=(e,n)=>{if(_)try{m.addCustomEvent(e,n)}catch(e){Q(t.onError,e)}},r=n=>{x()&&(h.releaseHeld(()=>{m.takeFullSnapshot()}),e(s.Error,n),x()&&h.getMode()===`buffer`&&(at(o,c,`full`),X(h.triggerFlush(),t.onError)))},f=/* @__PURE__ */ new WeakSet,p=e=>typeof e!=`object`||!e||!f.has(e)&&(f.add(e),!0),C=(e,t)=>{if(p(e)){let n=ft(st(e),void 0,ct(e));r(typeof t?.timestamp==`number`?{...n,timestamp:t.timestamp}:n)}},w=e=>{e instanceof ErrorEvent&&p(e.error)&&r(ft(e.message,e.filename,ct(e.error)))},T=e=>{C(e.reason)},E=()=>{document.visibilityState===`hidden`&&X(h.flush({keepalive:!0}),t.onError)},D=()=>{X(h.flush({keepalive:!0}),t.onError)};return t.captureGlobalErrors&&(window.addEventListener(`error`,w,!0),g.push(()=>{window.removeEventListener(`error`,w,!0)}),window.addEventListener(`unhandledrejection`,T,!0),g.push(()=>{window.removeEventListener(`unhandledrejection`,T,!0)})),document.addEventListener(`visibilitychange`,E),g.push(()=>{document.removeEventListener(`visibilitychange`,E)}),window.addEventListener(`pagehide`,D),g.push(()=>{window.removeEventListener(`pagehide`,D)}),t.captureConsole&&g.push(v(e,{onError:t.onError})),t.captureNetwork&&g.push(y(e,{ignoreUrlPatterns:t.ignoreUrlPatterns,now:t.now,onError:t.onError,redactUrlPatterns:t.redactUrlPatterns})),t.captureNavigation&&g.push(b(e,{onError:t.onError,redactUrlPatterns:t.redactUrlPatterns})),h.start(),{sessionId:c,recordingId:l,transport:h,captureError:C,deactivate:async(e=!1)=>(S??=(async()=>{let t=h.shutdown({keepalive:e});_=!1,$(g),await t})(),S),discard:()=>{_=!1,$(g),h.discard()}}}catch(e){throw _=!1,$(g),h.discard(),e}}function tt(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,captureGlobalErrors:e.captureGlobalErrors??l.captureGlobalErrors,ignoreUrlPatterns:e.ignoreUrlPatterns??[],redactUrlPatterns:e.redactUrlPatterns??[...l.redactUrlPatterns],onError:e.onError,fetchImpl:n,now:e.now??Date.now,random:e.random??Math.random}}function nt(e){let t=ze();if(t===void 0)return;let n=Ge();return n===null?void 0:{locks:t,records:new We(n,e)}}function rt(e,t,n){let r=it(n,t);if(r!==void 0)return r;let i=He({sessionSampleRate:e.sessionSampleRate,onErrorSampleRate:e.onErrorSampleRate,random:e.random});return at(n,t,i),i}function it(e,t){if(e!==null)try{let n=e.getItem(Qe);if(n===null)return;let r=JSON.parse(n);if(typeof r!=`object`||!r)return;let i=r;return i.id!==t||!ot(i.mode)?void 0:i.mode}catch{return}}function at(e,t,n){if(e!==null)try{e.setItem(Qe,JSON.stringify({id:t,mode:n}))}catch{}}function ot(e){return e===`full`||e===`buffer`||e===`off`}function st(e){return pt(lt(e,`message`)??e)}function ct(e){let t=lt(e,`stack`);return typeof t==`string`?t:void 0}function lt(e,t){try{return typeof e==`object`&&e&&t in e?e[t]:void 0}catch{return}}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);ut(n)&&Promise.resolve(n).catch(()=>void 0)}catch{}}function ut(e){return typeof e==`object`&&!!e&&`then`in e&&typeof e.then==`function`}function dt(){let e=globalThis;if(e[Y]!==void 0)throw Error(`logfire session replay: a replay controller is already active in this page`);let t={};Object.defineProperty(e,Y,{configurable:!0,enumerable:!1,value:t,writable:!0});let n=!1;return()=>{n||(n=!0,e[Y]===t&&Reflect.deleteProperty(e,Y))}}function $(e){for(let t=e.length-1;t>=0;--t)try{e[t]?.()}catch{}e.length=0}function ft(e,t,n){return{message:e,...t===void 0||t.length===0?{}:{source:t},...n===void 0?{}:{stack:n}}}function pt(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{return Object.prototype.toString.call(e)}catch{return`[object Object]`}}export{c as CHUNK_ENVELOPE_VERSION,s as CustomTag,i as EventType,a as IncrementalSource,o as MouseInteractions,z as ReplayUploadError,$e as startSessionReplay};
@@ -1,16 +1,14 @@
1
- import { S as SessionReplayConfig, n as startSessionReplay } from "./index-CGSeVpsY.js";
2
-
1
+ import { C as SessionReplayConfig, r as startSessionReplay } from "./index-BxzwrVOz.js";
3
2
  //#region src/integration.d.ts
4
- type SessionReplayIntegrationOptions = Omit<SessionReplayConfig, "getSessionAttributes" | "getSessionId" | "getUser" | "headers" | "maxSessionDurationMs" | "now" | "random" | "replayUrl" | "sessionIdleTimeoutMs" | "token">;
5
- interface SessionReplayIntegration extends SessionReplayIntegrationOptions {
3
+ export type SessionReplayIntegrationOptions = Omit<SessionReplayConfig, "getSessionAttributes" | "getSessionId" | "getUser" | "headers" | "maxSessionDurationMs" | "now" | "random" | "replayUrl" | "sessionIdleTimeoutMs" | "token">;
4
+ export interface SessionReplayIntegration extends SessionReplayIntegrationOptions {
6
5
  load: () => Promise<{
7
6
  startSessionReplay: typeof startSessionReplay;
8
7
  }>;
9
8
  }
10
9
  /**
11
- * Configure the optional browser SDK integration without eagerly bundling the
12
- * session replay recorder.
13
- */
14
- declare function sessionReplayIntegration(options?: SessionReplayIntegrationOptions): SessionReplayIntegration;
15
- //#endregion
16
- export { SessionReplayIntegration, SessionReplayIntegrationOptions, sessionReplayIntegration };
10
+ * Configure the optional browser SDK integration without eagerly bundling the
11
+ * session replay recorder.
12
+ */
13
+ export declare function sessionReplayIntegration(options?: SessionReplayIntegrationOptions): SessionReplayIntegration;
14
+ //#endregion
@@ -1,16 +1,14 @@
1
- import { S as SessionReplayConfig, n as startSessionReplay } from "./index-CGSeVpsY.js";
2
-
1
+ import { C as SessionReplayConfig, r as startSessionReplay } from "./index-BxzwrVOz.js";
3
2
  //#region src/integration.d.ts
4
- type SessionReplayIntegrationOptions = Omit<SessionReplayConfig, "getSessionAttributes" | "getSessionId" | "getUser" | "headers" | "maxSessionDurationMs" | "now" | "random" | "replayUrl" | "sessionIdleTimeoutMs" | "token">;
5
- interface SessionReplayIntegration extends SessionReplayIntegrationOptions {
3
+ export type SessionReplayIntegrationOptions = Omit<SessionReplayConfig, "getSessionAttributes" | "getSessionId" | "getUser" | "headers" | "maxSessionDurationMs" | "now" | "random" | "replayUrl" | "sessionIdleTimeoutMs" | "token">;
4
+ export interface SessionReplayIntegration extends SessionReplayIntegrationOptions {
6
5
  load: () => Promise<{
7
6
  startSessionReplay: typeof startSessionReplay;
8
7
  }>;
9
8
  }
10
9
  /**
11
- * Configure the optional browser SDK integration without eagerly bundling the
12
- * session replay recorder.
13
- */
14
- declare function sessionReplayIntegration(options?: SessionReplayIntegrationOptions): SessionReplayIntegration;
15
- //#endregion
16
- export { SessionReplayIntegration, SessionReplayIntegrationOptions, sessionReplayIntegration };
10
+ * Configure the optional browser SDK integration without eagerly bundling the
11
+ * session replay recorder.
12
+ */
13
+ export declare function sessionReplayIntegration(options?: SessionReplayIntegrationOptions): SessionReplayIntegration;
14
+ //#endregion
package/package.json CHANGED
@@ -24,7 +24,7 @@
24
24
  "rum",
25
25
  "rrweb"
26
26
  ],
27
- "version": "0.5.0",
27
+ "version": "0.7.0",
28
28
  "type": "module",
29
29
  "main": "./dist/index.cjs",
30
30
  "module": "./dist/index.js",
@@ -60,7 +60,7 @@
60
60
  "@rrweb/replay": "2.1.1",
61
61
  "@types/node": "^22.5.1",
62
62
  "jsdom": "^29.1.1",
63
- "vitest": "4.1.9"
63
+ "vitest": "5.0.1"
64
64
  },
65
65
  "files": [
66
66
  "dist",