poulet 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -6
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.global.js +1 -1
- package/dist/index.global.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/react.cjs +1 -1
- package/dist/react.cjs.map +1 -1
- package/dist/react.d.cts +1 -51
- package/dist/react.d.ts +1 -51
- package/dist/react.global.js +25 -0
- package/dist/react.global.js.map +1 -0
- package/dist/react.js +1 -1
- package/dist/react.js.map +1 -1
- package/package.json +23 -4
package/dist/react.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
'use strict';var react=require('react'),jsxRuntime=require('react/jsx-runtime');var s=()=>Date.now();var P=(e,t,n)=>(e.addEventListener(t,n,{passive:true}),()=>e.removeEventListener(t,n)),f=(e,t)=>(document.addEventListener(e,t,{passive:true}),()=>document.removeEventListener(e,t));var E=(e,t=.1)=>{let n=e*t;return e+(Math.random()*2-1)*n},I=e=>{if(!e||typeof e!="object")return e;let t=["email","phone","password","ssn"],n=Array.isArray(e)?[]:{};for(let o of Object.keys(e)){if(t.includes(o.toLowerCase()))continue;let i=e[o];n[o]=typeof i=="object"?I(i):i;}return n},y=(...e)=>{window.__POULET_DEBUG__&&console.log("[poulet]",...e);},O=e=>Uint8Array.from(atob(e),t=>t.charCodeAt(0));var F=Date.now(),A=[],q=()=>F,H=()=>{L();let e=()=>{F=Date.now();},t=f("mousemove",e),n=f("keydown",e),o=f("scroll",e),i=f("touchstart",e),c=P(window,"focus",e),g=P(window,"blur",e),_=f("visibilitychange",e);A=[t,n,o,i,c,g,_];},L=()=>{A.forEach(e=>e()),A=[];};var u="poulet_leader_session",d=false,z=e=>{let t=localStorage.getItem(u);return t?(d=t===e,d):(localStorage.setItem(u,e),d=true,true)},N=e=>{localStorage.getItem(u)===e&&localStorage.removeItem(u),d=false;};var V=(e,t)=>{let n=o=>{if(o.key!==u)return;let i=localStorage.getItem(u);i?(d=i===e,t(d)):(localStorage.setItem(u,e),t(true),d=true);};return window.addEventListener("storage",n),()=>window.removeEventListener("storage",n)},T=()=>{var e;return {ua:navigator.userAgent,tz:(e=Intl.DateTimeFormat().resolvedOptions().timeZone)!=null?e:"UTC",dpr:window.devicePixelRatio||1}};var w=false,G=true,J=e=>{G=e;},Y=e=>{G&&typeof navigator!="undefined"&&navigator.doNotTrack==="1"&&(w=false,"denied");},Z=e=>{typeof e.analytics=="boolean"&&(w=e.analytics,w?"granted":"denied"),typeof e.replay=="boolean"&&(e.replay);};var K=()=>w===true;var p,m=[],D=false;async function ie(e){if(!(!p.hmacPublicKey||!("crypto"in window)))try{let t=O(p.hmacPublicKey),n=await crypto.subtle.importKey("raw",t,{name:"HMAC",hash:"SHA-256"},!1,["sign"]),o=await crypto.subtle.sign("HMAC",n,new TextEncoder().encode(e));return btoa(String.fromCharCode(...new Uint8Array(o)))}catch(t){return}}async function re(e){let t=e.map(c=>I(c)),n=JSON.stringify({projectKey:p.projectKey,items:t}),o=await ie(n);if(navigator.sendBeacon&&!p.debug){let c={type:"application/json"},g=new Blob([n],c);if(navigator.sendBeacon(p.endpoint+"/ingest",g))return true}return (await fetch(p.endpoint+"/ingest",{method:"POST",headers:{"Content-Type":"application/json",...o?{"x-signature":o}:{}},body:n})).ok}function Q(e){p=e,window.addEventListener("online",x),setInterval(x,5e3);}function l(e){m.push(e),m.length>=10&&x();}async function x(){if(!(D||m.length===0)){D=true;try{let e=m.splice(0,20);await re(e)||(m.unshift(...e),y("flush failed, will retry"));}catch(e){y("flush error",e);}finally{D=false;}}}var a,r=null,b=null,v,X={projectKey:"",endpoint:"",consent:{default:"pending"},user:{},billing:{heartbeatSec:15,idleSec:60,maxHoursPerDay:6},privacy:{piiFilter:true,dntRespect:true,countryHint:"FR"},security:{hmacPublicKey:void 0},features:{bugReporter:true,replay:false,sentryBridge:false},sampling:{heartbeats:1,events:1,bugs:1},debug:false};function $(e){a={...X,...e,consent:{...X.consent,...e.consent}},window.__POULET_DEBUG__=!!a.debug,Q({endpoint:a.endpoint,projectKey:a.projectKey,hmacPublicKey:a.security.hmacPublicKey,debug:a.debug});}function S(){if(r)return;let e=crypto.randomUUID(),t=T();r={sessionId:e,startedAt:s(),lastActivityAt:s(),active:true,leader:z(e)},v&&v(),v=V(e,o=>{r&&(r.leader=o);}),H();let n={type:"session.start",sessionId:e,ts:s(),projectKey:a.projectKey,ua:t.ua,tz:t.tz,dpr:t.dpr,consentFlags:{analytics:K(),replay:false}};l(n),se(),y("session opened",e);}function j(e){if(!r)return;ee(),L(),N(r.sessionId);let t={type:"session.end",sessionId:r.sessionId,ts:s(),reason:e};l(t),x(),v&&v(),r=null,y("session closed",e);}function se(){ee();let e=()=>{if(!r||!K())return;let t=s()-q()>=a.billing.idleSec*1e3,n=document.visibilityState==="visible",o=n&&!t&&r.leader,i=T();if(Math.random()<=a.sampling.heartbeats&&o){let g={type:"heartbeat",sessionId:r.sessionId,ts:s(),active:true,vis:n,idle:false,jitter:Math.random(),ua:i.ua,tz:i.tz,dpr:i.dpr,purpose:"billing"};l(g);}let c=E(a.billing.heartbeatSec*1e3,.1);b=window.setTimeout(e,c);};b=window.setTimeout(e,E(a.billing.heartbeatSec*1e3,.1));}function ee(){b&&(clearTimeout(b),b=null);}var h=()=>{var e;return (e=r==null?void 0:r.sessionId)!=null?e:null};function C(e){let t=h();if(!t)return;let n={type:"bug",sessionId:t,ts:s(),title:e.title,description:e.description,severity:e.severity,hasCapture:!!(e.attachments&&e.attachments.length>0),purpose:"diagnostics"};l(n);}var te=false;function ne(e){var t,n,o,i;te||(J((n=(t=e.privacy)==null?void 0:t.dntRespect)!=null?n:true),Y((i=(o=e.consent)==null?void 0:o.default)!=null?i:"pending"),$(e),document.visibilityState==="visible"&&S(),document.addEventListener("visibilitychange",()=>{document.visibilityState==="visible"&&S();}),addEventListener("pagehide",()=>j("pagehide")),te=true);}function M(e){Z(e),document.visibilityState==="visible"&&S();}function B(e,t){let n=h();if(!n)return;let o={type:"event",sessionId:n,ts:s(),name:e,props:t,purpose:"diagnostics"};l(o);}function R(){j("shutdown");}function U(){return h()}var oe=react.createContext({trackEvent:B,reportBug:C,setConsent:M,shutdown:R,getSessionId:U}),ze=({config:e,children:t})=>(react.useEffect(()=>{ne(e);},[]),jsxRuntime.jsx(oe.Provider,{value:{trackEvent:B,reportBug:C,setConsent:M,shutdown:R,getSessionId:U},children:t})),Ne=()=>react.useContext(oe);exports.MetricsProvider=ze;exports.useMetrics=Ne;//# sourceMappingURL=react.cjs.map
|
|
2
2
|
//# sourceMappingURL=react.cjs.map
|
package/dist/react.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/react.tsx","../src/utils.ts","../src/activity.ts","../src/antifraud.ts","../src/consent.ts","../src/transport.ts","../src/core.ts","../src/bug.ts","../src/index.ts"],"sourcesContent":["// src/react.tsx\nimport React, { createContext, useContext, useEffect } from 'react';\nimport type { Config } from './types';\nimport { init, trackEvent, reportBug, setConsent, shutdown, getSessionId } from './index';\n\nconst Ctx = createContext({ trackEvent, reportBug, setConsent, shutdown, getSessionId });\n\nexport const MetricsProvider: React.FC<{ config: Config; children: React.ReactNode }> = ({ config, children }) => {\n useEffect(() => { init(config); }, []); // eslint-disable-line\n return <Ctx.Provider value={{ trackEvent, reportBug, setConsent, shutdown, getSessionId }}>{children}</Ctx.Provider>;\n};\n\nexport const useMetrics = () => useContext(Ctx);\n","// src/utils.ts\nexport const now = () => Date.now();\n\nexport const uuid = (): string =>\n (crypto?.randomUUID?.() ?? 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = (crypto.getRandomValues(new Uint8Array(1))[0] & 0xf) >> 0;\n const v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n }));\n\nexport const isVisible = () => typeof document !== 'undefined' && document.visibilityState === 'visible';\n\nexport const on = <K extends keyof WindowEventMap>(t: Window, type: K, fn: (e: WindowEventMap[K]) => void) => {\n t.addEventListener(type, fn as any, { passive: true });\n return () => t.removeEventListener(type, fn as any);\n};\n\nexport const onDoc = <K extends keyof DocumentEventMap>(type: K, fn: (e: DocumentEventMap[K]) => void) => {\n document.addEventListener(type, fn as any, { passive: true });\n return () => document.removeEventListener(type, fn as any);\n};\n\nexport const clamp = (n: number, min: number, max: number) => Math.max(min, Math.min(max, n));\n\nexport const jitterMs = (baseMs: number, pct = 0.1) => {\n const delta = baseMs * pct;\n return baseMs + (Math.random() * 2 - 1) * delta;\n};\n\nexport const filterPII = (o: any): any => {\n if (!o || typeof o !== 'object') return o;\n const SUSPICIOUS = ['email', 'phone', 'password', 'ssn'];\n const out: any = Array.isArray(o) ? [] : {};\n for (const k of Object.keys(o)) {\n if (SUSPICIOUS.includes(k.toLowerCase())) continue;\n const v = (o as any)[k];\n out[k] = typeof v === 'object' ? filterPII(v) : v;\n }\n return out;\n};\n\nexport const log = (...args: any[]) => {\n if ((window as any).__POULET_DEBUG__) console.log('[poulet]', ...args);\n};\n\nexport const base64ToArrayBuffer = (b64: string) => Uint8Array.from(atob(b64), (c) => c.charCodeAt(0));\n","// src/activity.ts\nimport { isVisible, onDoc, on } from './utils';\n\nlet lastActivity = Date.now();\nlet unsub: Array<() => void> = [];\n\nexport const getLastActivity = () => lastActivity;\n\nexport const startActivityTracking = () => {\n stopActivityTracking();\n const touch = () => { lastActivity = Date.now(); };\n const un1 = onDoc('mousemove', touch);\n const un2 = onDoc('keydown', touch);\n const un3 = onDoc('scroll', touch);\n const un4 = onDoc('touchstart', touch);\n const un5 = on(window, 'focus', touch);\n const un6 = on(window, 'blur', touch);\n const un7 = onDoc('visibilitychange' as any, touch);\n unsub = [un1, un2, un3, un4, un5, un6, un7];\n};\n\nexport const stopActivityTracking = () => {\n unsub.forEach((f) => f());\n unsub = [];\n};\n\nexport const isActive = (idleSec: number) => {\n const idleMs = idleSec * 1000;\n return isVisible() && (Date.now() - lastActivity) < idleMs;\n};\n","// src/antifraud.ts\nconst LS_KEY = 'poulet_leader_session';\nlet leader = false;\n\nexport const becomeLeaderIfFree = (sessionId: string): boolean => {\n const current = localStorage.getItem(LS_KEY);\n if (!current) {\n localStorage.setItem(LS_KEY, sessionId);\n leader = true;\n return true;\n }\n leader = current === sessionId;\n return leader;\n};\n\nexport const relinquishLeadership = (sessionId: string) => {\n const current = localStorage.getItem(LS_KEY);\n if (current === sessionId) {\n localStorage.removeItem(LS_KEY);\n }\n leader = false;\n};\n\nexport const isLeader = () => leader;\n\nexport const handleStorageLeadership = (sessionId: string, onChange: (isLeader: boolean)=>void) => {\n const listener = (e: StorageEvent) => {\n if (e.key !== LS_KEY) return;\n const now = localStorage.getItem(LS_KEY);\n const newLeader = now === sessionId || !now;\n if (!now) { // try claim\n localStorage.setItem(LS_KEY, sessionId);\n onChange(true);\n leader = true;\n } else {\n leader = now === sessionId;\n onChange(leader);\n }\n };\n window.addEventListener('storage', listener);\n return () => window.removeEventListener('storage', listener);\n};\n\nexport const fingerprintLite = () => ({\n ua: navigator.userAgent,\n tz: Intl.DateTimeFormat().resolvedOptions().timeZone ?? 'UTC',\n dpr: window.devicePixelRatio || 1,\n});\n","// src/consent.ts\nimport type { ConsentState } from './types';\n\nlet analyticsAllowed = false;\nlet replayAllowed = false;\nlet state: ConsentState = 'pending';\nlet dntRespected = true;\n\nexport const setDNTPolicy = (respect: boolean) => { dntRespected = respect; };\n\nexport const initConsent = (defaultState: ConsentState) => {\n state = defaultState;\n if (dntRespected && typeof navigator !== 'undefined' && (navigator as any).doNotTrack === '1') {\n analyticsAllowed = false;\n replayAllowed = false;\n state = 'denied';\n }\n};\n\nexport const setConsent = (flags: { analytics?: boolean; replay?: boolean }) => {\n if (typeof flags.analytics === 'boolean') {\n analyticsAllowed = flags.analytics;\n state = analyticsAllowed ? 'granted' : 'denied';\n }\n if (typeof flags.replay === 'boolean') replayAllowed = flags.replay;\n};\n\nexport const consentFlags = () => ({ analytics: analyticsAllowed, replay: replayAllowed, state });\nexport const analyticsOn = () => analyticsAllowed === true;\nexport const replayOn = () => replayAllowed === true;\n","// src/transport.ts\nimport { base64ToArrayBuffer, filterPII, log } from './utils';\nimport type { OutgoingPayload } from './types';\n\ntype TransportConfig = {\n endpoint: string;\n projectKey: string;\n hmacPublicKey?: string; // base64; optional\n debug?: boolean;\n};\n\nlet cfg: TransportConfig;\nlet queue: OutgoingPayload[] = [];\nlet flushing = false;\n\nasync function sign(body: string): Promise<string | undefined> {\n if (!cfg.hmacPublicKey || !('crypto' in window)) return undefined;\n try {\n const keyData = base64ToArrayBuffer(cfg.hmacPublicKey);\n const key = await crypto.subtle.importKey('raw', keyData, { name: 'HMAC', hash: 'SHA-256' }, false, ['sign']);\n const sig = await crypto.subtle.sign('HMAC', key, new TextEncoder().encode(body));\n return btoa(String.fromCharCode(...new Uint8Array(sig)));\n } catch {\n return undefined;\n }\n}\n\nasync function postBatch(items: OutgoingPayload[]) {\n const sanitized = items.map((i) => filterPII(i));\n const body = JSON.stringify({ projectKey: cfg.projectKey, items: sanitized });\n const sig = await sign(body);\n\n // Try Beacon first\n if (navigator.sendBeacon && !cfg.debug) {\n const headers = { type: 'application/json' };\n const blob = new Blob([body], headers);\n const ok = navigator.sendBeacon(cfg.endpoint + '/ingest', blob);\n if (ok) return true;\n }\n\n // Fallback fetch\n const res = await fetch(cfg.endpoint + '/ingest', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json', ...(sig ? { 'x-signature': sig } : {}) },\n body\n });\n return res.ok;\n}\n\nexport function initTransport(config: TransportConfig) {\n cfg = config;\n window.addEventListener('online', flush);\n setInterval(flush, 5000);\n}\n\nexport function enqueue(payload: OutgoingPayload) {\n queue.push(payload);\n if (queue.length >= 10) void flush();\n}\n\nexport async function flush() {\n if (flushing || queue.length === 0) return;\n flushing = true;\n try {\n const batch = queue.splice(0, 20);\n const ok = await postBatch(batch);\n if (!ok) {\n // put back\n queue.unshift(...batch);\n log('flush failed, will retry');\n }\n } catch (e) {\n log('flush error', e);\n } finally {\n flushing = false;\n }\n}\n","// src/core.ts\nimport { jitterMs, log, now } from './utils';\nimport { startActivityTracking, stopActivityTracking, isActive, getLastActivity } from './activity';\nimport { becomeLeaderIfFree, handleStorageLeadership, relinquishLeadership, isLeader, fingerprintLite } from './antifraud';\nimport { analyticsOn, consentFlags } from './consent';\nimport { initTransport, enqueue, flush } from './transport';\nimport type { Config, SessionState, HeartbeatPayload, SessionStart, SessionEnd } from './types';\n\nlet config: Required<Config>;\nlet session: SessionState | null = null;\nlet hbTimer: number | null = null;\nlet unStorage: (() => void) | undefined;\n\nconst DEFAULTS: Required<Config> = {\n projectKey: '',\n endpoint: '',\n consent: { default: 'pending' },\n user: {},\n billing: { heartbeatSec: 15, idleSec: 60, maxHoursPerDay: 6 },\n privacy: { piiFilter: true, dntRespect: true, countryHint: 'FR' },\n security: { hmacPublicKey: undefined as any },\n features: { bugReporter: true, replay: false, sentryBridge: false },\n sampling: { heartbeats: 1, events: 1, bugs: 1 },\n debug: false,\n};\n\nexport function configure(cfg: Config) {\n config = { ...DEFAULTS, ...cfg, consent: { ...DEFAULTS.consent, ...cfg.consent } } as Required<Config>;\n (window as any).__POULET_DEBUG__ = !!config.debug;\n initTransport({\n endpoint: config.endpoint,\n projectKey: config.projectKey,\n hmacPublicKey: config.security.hmacPublicKey,\n debug: config.debug,\n });\n}\n\nexport function openSession() {\n if (session) return;\n const id = crypto.randomUUID();\n const fp = fingerprintLite();\n session = {\n sessionId: id,\n startedAt: now(),\n lastActivityAt: now(),\n active: true,\n leader: becomeLeaderIfFree(id),\n };\n if (unStorage) unStorage();\n unStorage = handleStorageLeadership(id, (lead) => {\n if (session) session.leader = lead;\n });\n\n startActivityTracking();\n\n const startPayload: SessionStart = {\n type: 'session.start',\n sessionId: id,\n ts: now(),\n projectKey: config.projectKey,\n ua: fp.ua,\n tz: fp.tz,\n dpr: fp.dpr,\n consentFlags: { analytics: analyticsOn(), replay: false },\n };\n enqueue(startPayload);\n scheduleHeartbeats();\n log('session opened', id);\n}\n\nexport function closeSession(reason: SessionEnd['reason']) {\n if (!session) return;\n stopHeartbeats();\n stopActivityTracking();\n relinquishLeadership(session.sessionId);\n const endPayload: SessionEnd = { type: 'session.end', sessionId: session.sessionId, ts: now(), reason };\n enqueue(endPayload);\n void flush();\n if (unStorage) unStorage();\n session = null;\n log('session closed', reason);\n}\n\nfunction scheduleHeartbeats() {\n stopHeartbeats();\n const loop = () => {\n if (!session) return;\n if (!analyticsOn()) return; // consent required\n // @ts-ignore\n const idle = (now() - getLastActivity()) >= config.billing.idleSec * 1000;\n const vis = document.visibilityState === 'visible';\n const active = vis && !idle && session.leader;\n const fp = fingerprintLite();\n\n // @ts-ignore\n if (Math.random() <= config.sampling.heartbeats && active) {\n const hb: HeartbeatPayload = {\n type: 'heartbeat',\n sessionId: session.sessionId,\n ts: now(),\n active: true,\n vis,\n idle: false,\n jitter: Math.random(),\n ua: fp.ua,\n tz: fp.tz,\n dpr: fp.dpr,\n purpose: 'billing',\n };\n enqueue(hb);\n }\n\n // @ts-ignore\n const next = jitterMs(config.billing.heartbeatSec * 1000, 0.1);\n hbTimer = window.setTimeout(loop, next);\n };\n // @ts-ignore\n hbTimer = window.setTimeout(loop, jitterMs(config.billing.heartbeatSec * 1000, 0.1));\n}\n\nfunction stopHeartbeats() {\n if (hbTimer) {\n clearTimeout(hbTimer);\n hbTimer = null;\n }\n}\n\nexport const getSessionIdSafe = () => session?.sessionId ?? null;\n","// src/bug.ts\nimport { enqueue } from './transport';\nimport type { BugPayload } from './types';\nimport { now } from './utils';\nimport { getSessionIdSafe } from './core';\n\nexport function reportBug(payload: {\n title: string; description?: string;\n severity?: 'blocker'|'major'|'minor'|'ux';\n attachments?: Blob[];\n}) {\n const sessionId = getSessionIdSafe();\n if (!sessionId) return;\n const p: BugPayload = {\n type: 'bug',\n sessionId,\n ts: now(),\n title: payload.title,\n description: payload.description,\n severity: payload.severity,\n hasCapture: !!(payload.attachments && payload.attachments.length > 0),\n purpose: 'diagnostics'\n };\n enqueue(p);\n // NOTE: upload des pièces jointes = hors scope core (peut passer par un autre endpoint)\n}\n","// src/index.ts\nimport { configure, openSession, closeSession, getSessionIdSafe } from './core';\nimport { setConsent as _setConsent, initConsent, setDNTPolicy, consentFlags } from './consent';\nimport { enqueue } from './transport';\nimport type { Config, EventPayload } from './types';\nimport { now } from './utils';\nexport * from './types';\nexport { reportBug } from './bug';\n\nlet initialized = false;\n\nexport function init(cfg: Config) {\n if (initialized) return;\n setDNTPolicy(cfg.privacy?.dntRespect ?? true);\n initConsent(cfg.consent?.default ?? 'pending');\n configure(cfg);\n // ouverture paresseuse : dès qu’il y a visibilité/activité\n if (document.visibilityState === 'visible') openSession();\n document.addEventListener('visibilitychange', () => {\n if (document.visibilityState === 'visible') openSession();\n });\n // Flush/close sur pagehide\n addEventListener('pagehide', () => closeSession('pagehide'));\n initialized = true;\n}\n\nexport function setConsent(flags: { analytics?: boolean; replay?: boolean }) {\n _setConsent(flags);\n if (document.visibilityState === 'visible') openSession();\n}\n\nexport function trackEvent(name: string, props?: Record<string, unknown>) {\n const sessionId = getSessionIdSafe();\n if (!sessionId) return;\n const ev: EventPayload = {\n type: 'event',\n sessionId,\n ts: now(),\n name,\n props,\n purpose: 'diagnostics',\n };\n enqueue(ev);\n}\n\nexport function shutdown() {\n closeSession('shutdown');\n}\n\nexport function getSessionId() {\n return getSessionIdSafe();\n}\n\nexport function forgetMe() {\n // côté core : rien de persistant par défaut (queue en mémoire).\n // si tu ajoutes IndexedDB/localStorage pour queue offline, purge ici.\n // Pour l’exemple, on ne stocke pas persistantement.\n closeSession('shutdown');\n}\n\nexport const _consentFlags = consentFlags;\n"],"mappings":"mbAAA,IAAAA,GAAA,GAAAC,GAAAD,GAAA,qBAAAE,GAAA,eAAAC,KAAA,eAAAC,GAAAJ,IACA,IAAAK,EAA4D,iBCArD,IAAMC,EAAM,IAAM,KAAK,IAAI,EAW3B,IAAMC,EAAK,CAAiCC,EAAWC,EAASC,KACnEF,EAAE,iBAAiBC,EAAMC,EAAW,CAAE,QAAS,EAAK,CAAC,EAC9C,IAAMF,EAAE,oBAAoBC,EAAMC,CAAS,GAGzCC,EAAQ,CAAmCF,EAASC,KAC7D,SAAS,iBAAiBD,EAAMC,EAAW,CAAE,QAAS,EAAK,CAAC,EACrD,IAAM,SAAS,oBAAoBD,EAAMC,CAAS,GAKtD,IAAME,EAAW,CAACC,EAAgBC,EAAM,KAAQ,CACnD,IAAMC,EAAQF,EAASC,EACvB,OAAOD,GAAU,KAAK,OAAO,EAAI,EAAI,GAAKE,CAC9C,EAEaC,EAAaC,GAAgB,CACtC,GAAI,CAACA,GAAK,OAAOA,GAAM,SAAU,OAAOA,EACxC,IAAMC,EAAa,CAAC,QAAS,QAAS,WAAY,KAAK,EACjDC,EAAW,MAAM,QAAQF,CAAC,EAAI,CAAC,EAAI,CAAC,EAC1C,QAAWG,KAAK,OAAO,KAAKH,CAAC,EAAG,CAC5B,GAAIC,EAAW,SAASE,EAAE,YAAY,CAAC,EAAG,SAC1C,IAAMC,EAAKJ,EAAUG,CAAC,EACtBD,EAAIC,CAAC,EAAI,OAAOC,GAAM,SAAWL,EAAUK,CAAC,EAAIA,CACpD,CACA,OAAOF,CACX,EAEaG,EAAM,IAAIC,IAAgB,CAC9B,OAAe,kBAAkB,QAAQ,IAAI,WAAY,GAAGA,CAAI,CACzE,EAEaC,EAAuBC,GAAgB,WAAW,KAAK,KAAKA,CAAG,EAAIC,GAAMA,EAAE,WAAW,CAAC,CAAC,EC1CrG,IAAIC,EAAe,KAAK,IAAI,EACxBC,EAA2B,CAAC,EAEnBC,EAAkB,IAAMF,EAExBG,EAAwB,IAAM,CACvCC,EAAqB,EACrB,IAAMC,EAAQ,IAAM,CAAEL,EAAe,KAAK,IAAI,CAAG,EAC3CM,EAAMC,EAAM,YAAaF,CAAK,EAC9BG,EAAMD,EAAM,UAAWF,CAAK,EAC5BI,EAAMF,EAAM,SAAUF,CAAK,EAC3BK,EAAMH,EAAM,aAAcF,CAAK,EAC/BM,EAAMC,EAAG,OAAQ,QAASP,CAAK,EAC/BQ,EAAMD,EAAG,OAAQ,OAAQP,CAAK,EAC9BS,EAAMP,EAAM,mBAA2BF,CAAK,EAClDJ,EAAQ,CAACK,EAAKE,EAAKC,EAAKC,EAAKC,EAAKE,EAAKC,CAAG,CAC9C,EAEaV,EAAuB,IAAM,CACtCH,EAAM,QAASc,GAAMA,EAAE,CAAC,EACxBd,EAAQ,CAAC,CACb,ECvBA,IAAMe,EAAS,wBACXC,EAAS,GAEAC,EAAsBC,GAA+B,CAC9D,IAAMC,EAAU,aAAa,QAAQJ,CAAM,EAC3C,OAAKI,GAKLH,EAASG,IAAYD,EACdF,IALH,aAAa,QAAQD,EAAQG,CAAS,EACtCF,EAAS,GACF,GAIf,EAEaI,EAAwBF,GAAsB,CACvC,aAAa,QAAQH,CAAM,IAC3BG,GACZ,aAAa,WAAWH,CAAM,EAElCC,EAAS,EACb,EAIO,IAAMK,EAA0B,CAACC,EAAmBC,IAAwC,CAC/F,IAAMC,EAAYC,GAAoB,CAClC,GAAIA,EAAE,MAAQC,EAAQ,OACtB,IAAMC,EAAM,aAAa,QAAQD,CAAM,EACjCE,EAAYD,IAAQL,GAAa,CAACK,EACnCA,GAKDE,EAASF,IAAQL,EACjBC,EAASM,CAAM,IALf,aAAa,QAAQH,EAAQJ,CAAS,EACtCC,EAAS,EAAI,EACbM,EAAS,GAKjB,EACA,cAAO,iBAAiB,UAAWL,CAAQ,EACpC,IAAM,OAAO,oBAAoB,UAAWA,CAAQ,CAC/D,EAEaM,EAAkB,IAAG,CA3ClC,IAAAC,EA2CsC,OAClC,GAAI,UAAU,UACd,IAAIA,EAAA,KAAK,eAAe,EAAE,gBAAgB,EAAE,WAAxC,KAAAA,EAAoD,MACxD,IAAK,OAAO,kBAAoB,CACpC,GC5CA,IAAIC,EAAmB,GACnBC,EAAgB,GAChBC,EAAsB,UACtBC,EAAe,GAENC,EAAgBC,GAAqB,CAAEF,EAAeE,CAAS,EAE/DC,EAAeC,GAA+B,CACvDL,EAAQK,EACJJ,GAAgB,OAAO,WAAc,aAAgB,UAAkB,aAAe,MACtFH,EAAmB,GACnBC,EAAgB,GAChBC,EAAQ,SAEhB,EAEaM,EAAcC,GAAqD,CACxE,OAAOA,EAAM,WAAc,YAC3BT,EAAmBS,EAAM,UACzBP,EAAQF,EAAmB,UAAY,UAEvC,OAAOS,EAAM,QAAW,YAAWR,EAAgBQ,EAAM,OACjE,EAGO,IAAMC,EAAc,IAAMC,IAAqB,GCjBtD,IAAIC,EACAC,EAA2B,CAAC,EAC5BC,EAAW,GAEf,eAAeC,GAAKC,EAA2C,CAC3D,GAAI,GAACJ,EAAI,eAAiB,EAAE,WAAY,SACxC,GAAI,CACA,IAAMK,EAAUC,EAAoBN,EAAI,aAAa,EAC/CO,EAAM,MAAM,OAAO,OAAO,UAAU,MAAOF,EAAS,CAAE,KAAM,OAAQ,KAAM,SAAU,EAAG,GAAO,CAAC,MAAM,CAAC,EACtGG,EAAM,MAAM,OAAO,OAAO,KAAK,OAAQD,EAAK,IAAI,YAAY,EAAE,OAAOH,CAAI,CAAC,EAChF,OAAO,KAAK,OAAO,aAAa,GAAG,IAAI,WAAWI,CAAG,CAAC,CAAC,CAC3D,OAAQC,EAAA,CACJ,MACJ,CACJ,CAEA,eAAeC,GAAUC,EAA0B,CAC/C,IAAMC,EAAYD,EAAM,IAAKE,GAAMC,EAAUD,CAAC,CAAC,EACzCT,EAAO,KAAK,UAAU,CAAE,WAAYJ,EAAI,WAAY,MAAOY,CAAU,CAAC,EACtEJ,EAAM,MAAML,GAAKC,CAAI,EAG3B,GAAI,UAAU,YAAc,CAACJ,EAAI,MAAO,CACpC,IAAMe,EAAU,CAAE,KAAM,kBAAmB,EACrCC,EAAO,IAAI,KAAK,CAACZ,CAAI,EAAGW,CAAO,EAErC,GADW,UAAU,WAAWf,EAAI,SAAW,UAAWgB,CAAI,EACtD,MAAO,EACnB,CAQA,OALY,MAAM,MAAMhB,EAAI,SAAW,UAAW,CAC9C,OAAQ,OACR,QAAS,CAAE,eAAgB,mBAAoB,GAAIQ,EAAM,CAAE,cAAeA,CAAI,EAAI,CAAC,CAAG,EACtF,KAAAJ,CACJ,CAAC,GACU,EACf,CAEO,SAASa,EAAcC,EAAyB,CACnDlB,EAAMkB,EACN,OAAO,iBAAiB,SAAUC,CAAK,EACvC,YAAYA,EAAO,GAAI,CAC3B,CAEO,SAASC,EAAQC,EAA0B,CAC9CpB,EAAM,KAAKoB,CAAO,EACdpB,EAAM,QAAU,IAASkB,EAAM,CACvC,CAEA,eAAsBA,GAAQ,CAC1B,GAAI,EAAAjB,GAAYD,EAAM,SAAW,GACjC,CAAAC,EAAW,GACX,GAAI,CACA,IAAMoB,EAAQrB,EAAM,OAAO,EAAG,EAAE,EACrB,MAAMS,GAAUY,CAAK,IAG5BrB,EAAM,QAAQ,GAAGqB,CAAK,EACtBC,EAAI,0BAA0B,EAEtC,OAAS,EAAG,CACRA,EAAI,cAAe,CAAC,CACxB,QAAE,CACErB,EAAW,EACf,EACJ,CCpEA,IAAIsB,EACAC,EAA+B,KAC/BC,EAAyB,KACzBC,EAEEC,GAA6B,CAC/B,WAAY,GACZ,SAAU,GACV,QAAS,CAAE,QAAS,SAAU,EAC9B,KAAM,CAAC,EACP,QAAS,CAAE,aAAc,GAAI,QAAS,GAAI,eAAgB,CAAE,EAC5D,QAAS,CAAE,UAAW,GAAM,WAAY,GAAM,YAAa,IAAK,EAChE,SAAU,CAAE,cAAe,MAAiB,EAC5C,SAAU,CAAE,YAAa,GAAM,OAAQ,GAAO,aAAc,EAAM,EAClE,SAAU,CAAE,WAAY,EAAG,OAAQ,EAAG,KAAM,CAAE,EAC9C,MAAO,EACX,EAEO,SAASC,GAAUC,EAAa,CACnCN,EAAS,CAAE,GAAGI,GAAU,GAAGE,EAAK,QAAS,CAAE,GAAGF,GAAS,QAAS,GAAGE,EAAI,OAAQ,CAAE,EAChF,OAAe,iBAAmB,CAAC,CAACN,EAAO,MAC5CO,EAAc,CACV,SAAUP,EAAO,SACjB,WAAYA,EAAO,WACnB,cAAeA,EAAO,SAAS,cAC/B,MAAOA,EAAO,KAClB,CAAC,CACL,CAEO,SAASQ,GAAc,CAC1B,GAAIP,EAAS,OACb,IAAMQ,EAAK,OAAO,WAAW,EACvBC,EAAKC,EAAgB,EAC3BV,EAAU,CACN,UAAWQ,EACX,UAAWG,EAAI,EACf,eAAgBA,EAAI,EACpB,OAAQ,GACR,OAAQC,EAAmBJ,CAAE,CACjC,EACIN,GAAWA,EAAU,EACzBA,EAAYW,EAAwBL,EAAKM,GAAS,CAC1Cd,IAASA,EAAQ,OAASc,EAClC,CAAC,EAEDC,EAAsB,EAEtB,IAAMC,EAA6B,CAC/B,KAAM,gBACN,UAAWR,EACX,GAAIG,EAAI,EACR,WAAYZ,EAAO,WACnB,GAAIU,EAAG,GACP,GAAIA,EAAG,GACP,IAAKA,EAAG,IACR,aAAc,CAAE,UAAWQ,EAAY,EAAG,OAAQ,EAAM,CAC5D,EACAC,EAAQF,CAAY,EACpBG,GAAmB,EACnBC,EAAI,iBAAkBZ,CAAE,CAC5B,CAEO,SAASa,EAAaC,EAA8B,CACvD,GAAI,CAACtB,EAAS,OACduB,GAAe,EACfC,EAAqB,EACrBC,EAAqBzB,EAAQ,SAAS,EACtC,IAAM0B,EAAyB,CAAE,KAAM,cAAe,UAAW1B,EAAQ,UAAW,GAAIW,EAAI,EAAG,OAAAW,CAAO,EACtGJ,EAAQQ,CAAU,EACbC,EAAM,EACPzB,GAAWA,EAAU,EACzBF,EAAU,KACVoB,EAAI,iBAAkBE,CAAM,CAChC,CAEA,SAASH,IAAqB,CAC1BI,GAAe,EACf,IAAMK,EAAO,IAAM,CAEf,GADI,CAAC5B,GACD,CAACiB,EAAY,EAAG,OAEpB,IAAMY,EAAQlB,EAAI,EAAImB,EAAgB,GAAM/B,EAAO,QAAQ,QAAU,IAC/DgC,EAAM,SAAS,kBAAoB,UACnCC,EAASD,GAAO,CAACF,GAAQ7B,EAAQ,OACjCS,EAAKC,EAAgB,EAG3B,GAAI,KAAK,OAAO,GAAKX,EAAO,SAAS,YAAciC,EAAQ,CACvD,IAAMC,EAAuB,CACzB,KAAM,YACN,UAAWjC,EAAQ,UACnB,GAAIW,EAAI,EACR,OAAQ,GACR,IAAAoB,EACA,KAAM,GACN,OAAQ,KAAK,OAAO,EACpB,GAAItB,EAAG,GACP,GAAIA,EAAG,GACP,IAAKA,EAAG,IACR,QAAS,SACb,EACAS,EAAQe,CAAE,CACd,CAGA,IAAMC,EAAOC,EAASpC,EAAO,QAAQ,aAAe,IAAM,EAAG,EAC7DE,EAAU,OAAO,WAAW2B,EAAMM,CAAI,CAC1C,EAEAjC,EAAU,OAAO,WAAW2B,EAAMO,EAASpC,EAAO,QAAQ,aAAe,IAAM,EAAG,CAAC,CACvF,CAEA,SAASwB,IAAiB,CAClBtB,IACA,aAAaA,CAAO,EACpBA,EAAU,KAElB,CAEO,IAAMmC,EAAmB,IAAG,CA/HnC,IAAAC,EA+HsC,OAAAA,EAAArC,GAAA,YAAAA,EAAS,YAAT,KAAAqC,EAAsB,MCzHrD,SAASC,EAAUC,EAIvB,CACC,IAAMC,EAAYC,EAAiB,EACnC,GAAI,CAACD,EAAW,OAChB,IAAME,EAAgB,CAClB,KAAM,MACN,UAAAF,EACA,GAAIG,EAAI,EACR,MAAOJ,EAAQ,MACf,YAAaA,EAAQ,YACrB,SAAUA,EAAQ,SAClB,WAAY,CAAC,EAAEA,EAAQ,aAAeA,EAAQ,YAAY,OAAS,GACnE,QAAS,aACb,EACAK,EAAQF,CAAC,CAEb,CChBA,IAAIG,GAAc,GAEX,SAASC,GAAKC,EAAa,CAXlC,IAAAC,EAAAC,EAAAC,EAAAC,EAYQN,KACJO,GAAaH,GAAAD,EAAAD,EAAI,UAAJ,YAAAC,EAAa,aAAb,KAAAC,EAA2B,EAAI,EAC5CI,GAAYF,GAAAD,EAAAH,EAAI,UAAJ,YAAAG,EAAa,UAAb,KAAAC,EAAwB,SAAS,EAC7CG,GAAUP,CAAG,EAET,SAAS,kBAAoB,WAAWQ,EAAY,EACxD,SAAS,iBAAiB,mBAAoB,IAAM,CAC5C,SAAS,kBAAoB,WAAWA,EAAY,CAC5D,CAAC,EAED,iBAAiB,WAAY,IAAMC,EAAa,UAAU,CAAC,EAC3DX,GAAc,GAClB,CAEO,SAASY,EAAWC,EAAkD,CACzED,EAAYC,CAAK,EACb,SAAS,kBAAoB,WAAWH,EAAY,CAC5D,CAEO,SAASI,EAAWC,EAAcC,EAAiC,CACtE,IAAMC,EAAYC,EAAiB,EACnC,GAAI,CAACD,EAAW,OAChB,IAAME,EAAmB,CACrB,KAAM,QACN,UAAAF,EACA,GAAIG,EAAI,EACR,KAAAL,EACA,MAAAC,EACA,QAAS,aACb,EACAK,EAAQF,CAAE,CACd,CAEO,SAASG,GAAW,CACvBX,EAAa,UAAU,CAC3B,CAEO,SAASY,GAAe,CAC3B,OAAOL,EAAiB,CAC5B,CR1CW,IAAAM,GAAA,6BAJLC,MAAM,iBAAc,CAAE,WAAAC,EAAY,UAAAC,EAAW,WAAAC,EAAY,SAAAC,EAAU,aAAAC,CAAa,CAAC,EAE1EC,GAA2E,CAAC,CAAE,OAAAC,EAAQ,SAAAC,CAAS,QACxG,aAAU,IAAM,CAAEC,GAAKF,CAAM,CAAG,EAAG,CAAC,CAAC,KAC9B,QAACP,GAAI,SAAJ,CAAa,MAAO,CAAE,WAAAC,EAAY,UAAAC,EAAW,WAAAC,EAAY,SAAAC,EAAU,aAAAC,CAAa,EAAI,SAAAG,EAAS,GAG5FE,GAAa,OAAM,cAAWV,EAAG","names":["react_exports","__export","MetricsProvider","useMetrics","__toCommonJS","import_react","now","on","t","type","fn","onDoc","jitterMs","baseMs","pct","delta","filterPII","o","SUSPICIOUS","out","k","v","log","args","base64ToArrayBuffer","b64","c","lastActivity","unsub","getLastActivity","startActivityTracking","stopActivityTracking","touch","un1","onDoc","un2","un3","un4","un5","on","un6","un7","f","LS_KEY","leader","becomeLeaderIfFree","sessionId","current","relinquishLeadership","handleStorageLeadership","sessionId","onChange","listener","e","LS_KEY","now","newLeader","leader","fingerprintLite","_a","analyticsAllowed","replayAllowed","state","dntRespected","setDNTPolicy","respect","initConsent","defaultState","setConsent","flags","analyticsOn","analyticsAllowed","cfg","queue","flushing","sign","body","keyData","base64ToArrayBuffer","key","sig","e","postBatch","items","sanitized","i","filterPII","headers","blob","initTransport","config","flush","enqueue","payload","batch","log","config","session","hbTimer","unStorage","DEFAULTS","configure","cfg","initTransport","openSession","id","fp","fingerprintLite","now","becomeLeaderIfFree","handleStorageLeadership","lead","startActivityTracking","startPayload","analyticsOn","enqueue","scheduleHeartbeats","log","closeSession","reason","stopHeartbeats","stopActivityTracking","relinquishLeadership","endPayload","flush","loop","idle","getLastActivity","vis","active","hb","next","jitterMs","getSessionIdSafe","_a","reportBug","payload","sessionId","getSessionIdSafe","p","now","enqueue","initialized","init","cfg","_a","_b","_c","_d","setDNTPolicy","initConsent","configure","openSession","closeSession","setConsent","flags","trackEvent","name","props","sessionId","getSessionIdSafe","ev","now","enqueue","shutdown","getSessionId","import_jsx_runtime","Ctx","trackEvent","reportBug","setConsent","shutdown","getSessionId","MetricsProvider","config","children","init","useMetrics"]}
|
|
1
|
+
{"version":3,"sources":["../src/utils.ts","../src/activity.ts","../src/antifraud.ts","../src/consent.ts","../src/transport.ts","../src/core.ts","../src/bug.ts","../src/index.ts","../src/react.tsx"],"names":["now","on","t","type","fn","onDoc","jitterMs","baseMs","pct","delta","filterPII","o","SUSPICIOUS","out","k","v","log","args","base64ToArrayBuffer","b64","c","lastActivity","unsub","getLastActivity","startActivityTracking","stopActivityTracking","touch","un1","un2","un3","un4","un5","un6","un7","f","LS_KEY","leader","becomeLeaderIfFree","sessionId","current","relinquishLeadership","handleStorageLeadership","onChange","listener","e","fingerprintLite","_a","analyticsAllowed","dntRespected","setDNTPolicy","respect","initConsent","defaultState","setConsent","flags","analyticsOn","cfg","queue","flushing","sign","body","keyData","key","sig","postBatch","items","sanitized","i","headers","blob","initTransport","config","flush","enqueue","payload","batch","session","hbTimer","unStorage","DEFAULTS","configure","openSession","id","fp","lead","startPayload","scheduleHeartbeats","closeSession","reason","stopHeartbeats","endPayload","loop","idle","vis","active","hb","next","getSessionIdSafe","reportBug","p","initialized","init","_b","_c","_d","trackEvent","name","props","ev","shutdown","getSessionId","Ctx","createContext","MetricsProvider","children","useEffect","jsx","useMetrics","useContext"],"mappings":"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","file":"react.cjs","sourcesContent":["// src/utils.ts\nexport const now = () => Date.now();\n\nexport const uuid = (): string =>\n (crypto?.randomUUID?.() ?? 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = (crypto.getRandomValues(new Uint8Array(1))[0] & 0xf) >> 0;\n const v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n }));\n\nexport const isVisible = () => typeof document !== 'undefined' && document.visibilityState === 'visible';\n\nexport const on = <K extends keyof WindowEventMap>(t: Window, type: K, fn: (e: WindowEventMap[K]) => void) => {\n t.addEventListener(type, fn as any, { passive: true });\n return () => t.removeEventListener(type, fn as any);\n};\n\nexport const onDoc = <K extends keyof DocumentEventMap>(type: K, fn: (e: DocumentEventMap[K]) => void) => {\n document.addEventListener(type, fn as any, { passive: true });\n return () => document.removeEventListener(type, fn as any);\n};\n\nexport const clamp = (n: number, min: number, max: number) => Math.max(min, Math.min(max, n));\n\nexport const jitterMs = (baseMs: number, pct = 0.1) => {\n const delta = baseMs * pct;\n return baseMs + (Math.random() * 2 - 1) * delta;\n};\n\nexport const filterPII = (o: any): any => {\n if (!o || typeof o !== 'object') return o;\n const SUSPICIOUS = ['email', 'phone', 'password', 'ssn'];\n const out: any = Array.isArray(o) ? [] : {};\n for (const k of Object.keys(o)) {\n if (SUSPICIOUS.includes(k.toLowerCase())) continue;\n const v = (o as any)[k];\n out[k] = typeof v === 'object' ? filterPII(v) : v;\n }\n return out;\n};\n\nexport const log = (...args: any[]) => {\n if ((window as any).__POULET_DEBUG__) console.log('[poulet]', ...args);\n};\n\nexport const base64ToArrayBuffer = (b64: string) => Uint8Array.from(atob(b64), (c) => c.charCodeAt(0));\n","// src/activity.ts\nimport { isVisible, onDoc, on } from './utils';\n\nlet lastActivity = Date.now();\nlet unsub: Array<() => void> = [];\n\nexport const getLastActivity = () => lastActivity;\n\nexport const startActivityTracking = () => {\n stopActivityTracking();\n const touch = () => { lastActivity = Date.now(); };\n const un1 = onDoc('mousemove', touch);\n const un2 = onDoc('keydown', touch);\n const un3 = onDoc('scroll', touch);\n const un4 = onDoc('touchstart', touch);\n const un5 = on(window, 'focus', touch);\n const un6 = on(window, 'blur', touch);\n const un7 = onDoc('visibilitychange' as any, touch);\n unsub = [un1, un2, un3, un4, un5, un6, un7];\n};\n\nexport const stopActivityTracking = () => {\n unsub.forEach((f) => f());\n unsub = [];\n};\n\nexport const isActive = (idleSec: number) => {\n const idleMs = idleSec * 1000;\n return isVisible() && (Date.now() - lastActivity) < idleMs;\n};\n","// src/antifraud.ts\nconst LS_KEY = 'poulet_leader_session';\nlet leader = false;\n\nexport const becomeLeaderIfFree = (sessionId: string): boolean => {\n const current = localStorage.getItem(LS_KEY);\n if (!current) {\n localStorage.setItem(LS_KEY, sessionId);\n leader = true;\n return true;\n }\n leader = current === sessionId;\n return leader;\n};\n\nexport const relinquishLeadership = (sessionId: string) => {\n const current = localStorage.getItem(LS_KEY);\n if (current === sessionId) {\n localStorage.removeItem(LS_KEY);\n }\n leader = false;\n};\n\nexport const isLeader = () => leader;\n\nexport const handleStorageLeadership = (sessionId: string, onChange: (isLeader: boolean)=>void) => {\n const listener = (e: StorageEvent) => {\n if (e.key !== LS_KEY) return;\n const now = localStorage.getItem(LS_KEY);\n const newLeader = now === sessionId || !now;\n if (!now) { // try claim\n localStorage.setItem(LS_KEY, sessionId);\n onChange(true);\n leader = true;\n } else {\n leader = now === sessionId;\n onChange(leader);\n }\n };\n window.addEventListener('storage', listener);\n return () => window.removeEventListener('storage', listener);\n};\n\nexport const fingerprintLite = () => ({\n ua: navigator.userAgent,\n tz: Intl.DateTimeFormat().resolvedOptions().timeZone ?? 'UTC',\n dpr: window.devicePixelRatio || 1,\n});\n","// src/consent.ts\nimport type { ConsentState } from './types';\n\nlet analyticsAllowed = false;\nlet replayAllowed = false;\nlet state: ConsentState = 'pending';\nlet dntRespected = true;\n\nexport const setDNTPolicy = (respect: boolean) => { dntRespected = respect; };\n\nexport const initConsent = (defaultState: ConsentState) => {\n state = defaultState;\n if (dntRespected && typeof navigator !== 'undefined' && (navigator as any).doNotTrack === '1') {\n analyticsAllowed = false;\n replayAllowed = false;\n state = 'denied';\n }\n};\n\nexport const setConsent = (flags: { analytics?: boolean; replay?: boolean }) => {\n if (typeof flags.analytics === 'boolean') {\n analyticsAllowed = flags.analytics;\n state = analyticsAllowed ? 'granted' : 'denied';\n }\n if (typeof flags.replay === 'boolean') replayAllowed = flags.replay;\n};\n\nexport const consentFlags = () => ({ analytics: analyticsAllowed, replay: replayAllowed, state });\nexport const analyticsOn = () => analyticsAllowed === true;\nexport const replayOn = () => replayAllowed === true;\n","// src/transport.ts\nimport { base64ToArrayBuffer, filterPII, log } from './utils';\nimport type { OutgoingPayload } from './types';\n\ntype TransportConfig = {\n endpoint: string;\n projectKey: string;\n hmacPublicKey?: string; // base64; optional\n debug?: boolean;\n};\n\nlet cfg: TransportConfig;\nlet queue: OutgoingPayload[] = [];\nlet flushing = false;\n\nasync function sign(body: string): Promise<string | undefined> {\n if (!cfg.hmacPublicKey || !('crypto' in window)) return undefined;\n try {\n const keyData = base64ToArrayBuffer(cfg.hmacPublicKey);\n const key = await crypto.subtle.importKey('raw', keyData, { name: 'HMAC', hash: 'SHA-256' }, false, ['sign']);\n const sig = await crypto.subtle.sign('HMAC', key, new TextEncoder().encode(body));\n return btoa(String.fromCharCode(...new Uint8Array(sig)));\n } catch {\n return undefined;\n }\n}\n\nasync function postBatch(items: OutgoingPayload[]) {\n const sanitized = items.map((i) => filterPII(i));\n const body = JSON.stringify({ projectKey: cfg.projectKey, items: sanitized });\n const sig = await sign(body);\n\n // Try Beacon first\n if (navigator.sendBeacon && !cfg.debug) {\n const headers = { type: 'application/json' };\n const blob = new Blob([body], headers);\n const ok = navigator.sendBeacon(cfg.endpoint + '/ingest', blob);\n if (ok) return true;\n }\n\n // Fallback fetch\n const res = await fetch(cfg.endpoint + '/ingest', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json', ...(sig ? { 'x-signature': sig } : {}) },\n body\n });\n return res.ok;\n}\n\nexport function initTransport(config: TransportConfig) {\n cfg = config;\n window.addEventListener('online', flush);\n setInterval(flush, 5000);\n}\n\nexport function enqueue(payload: OutgoingPayload) {\n queue.push(payload);\n if (queue.length >= 10) void flush();\n}\n\nexport async function flush() {\n if (flushing || queue.length === 0) return;\n flushing = true;\n try {\n const batch = queue.splice(0, 20);\n const ok = await postBatch(batch);\n if (!ok) {\n // put back\n queue.unshift(...batch);\n log('flush failed, will retry');\n }\n } catch (e) {\n log('flush error', e);\n } finally {\n flushing = false;\n }\n}\n","// src/core.ts\nimport { jitterMs, log, now } from './utils';\nimport { startActivityTracking, stopActivityTracking, isActive, getLastActivity } from './activity';\nimport { becomeLeaderIfFree, handleStorageLeadership, relinquishLeadership, isLeader, fingerprintLite } from './antifraud';\nimport { analyticsOn, consentFlags } from './consent';\nimport { initTransport, enqueue, flush } from './transport';\nimport type { Config, SessionState, HeartbeatPayload, SessionStart, SessionEnd } from './types';\n\nlet config: Required<Config>;\nlet session: SessionState | null = null;\nlet hbTimer: number | null = null;\nlet unStorage: (() => void) | undefined;\n\nconst DEFAULTS: Required<Config> = {\n projectKey: '',\n endpoint: '',\n consent: { default: 'pending' },\n user: {},\n billing: { heartbeatSec: 15, idleSec: 60, maxHoursPerDay: 6 },\n privacy: { piiFilter: true, dntRespect: true, countryHint: 'FR' },\n security: { hmacPublicKey: undefined as any },\n features: { bugReporter: true, replay: false, sentryBridge: false },\n sampling: { heartbeats: 1, events: 1, bugs: 1 },\n debug: false,\n};\n\nexport function configure(cfg: Config) {\n config = { ...DEFAULTS, ...cfg, consent: { ...DEFAULTS.consent, ...cfg.consent } } as Required<Config>;\n (window as any).__POULET_DEBUG__ = !!config.debug;\n initTransport({\n endpoint: config.endpoint,\n projectKey: config.projectKey,\n hmacPublicKey: config.security.hmacPublicKey,\n debug: config.debug,\n });\n}\n\nexport function openSession() {\n if (session) return;\n const id = crypto.randomUUID();\n const fp = fingerprintLite();\n session = {\n sessionId: id,\n startedAt: now(),\n lastActivityAt: now(),\n active: true,\n leader: becomeLeaderIfFree(id),\n };\n if (unStorage) unStorage();\n unStorage = handleStorageLeadership(id, (lead) => {\n if (session) session.leader = lead;\n });\n\n startActivityTracking();\n\n const startPayload: SessionStart = {\n type: 'session.start',\n sessionId: id,\n ts: now(),\n projectKey: config.projectKey,\n ua: fp.ua,\n tz: fp.tz,\n dpr: fp.dpr,\n consentFlags: { analytics: analyticsOn(), replay: false },\n };\n enqueue(startPayload);\n scheduleHeartbeats();\n log('session opened', id);\n}\n\nexport function closeSession(reason: SessionEnd['reason']) {\n if (!session) return;\n stopHeartbeats();\n stopActivityTracking();\n relinquishLeadership(session.sessionId);\n const endPayload: SessionEnd = { type: 'session.end', sessionId: session.sessionId, ts: now(), reason };\n enqueue(endPayload);\n void flush();\n if (unStorage) unStorage();\n session = null;\n log('session closed', reason);\n}\n\nfunction scheduleHeartbeats() {\n stopHeartbeats();\n const loop = () => {\n if (!session) return;\n if (!analyticsOn()) return; // consent required\n // @ts-ignore\n const idle = (now() - getLastActivity()) >= config.billing.idleSec * 1000;\n const vis = document.visibilityState === 'visible';\n const active = vis && !idle && session.leader;\n const fp = fingerprintLite();\n\n // @ts-ignore\n if (Math.random() <= config.sampling.heartbeats && active) {\n const hb: HeartbeatPayload = {\n type: 'heartbeat',\n sessionId: session.sessionId,\n ts: now(),\n active: true,\n vis,\n idle: false,\n jitter: Math.random(),\n ua: fp.ua,\n tz: fp.tz,\n dpr: fp.dpr,\n purpose: 'billing',\n };\n enqueue(hb);\n }\n\n // @ts-ignore\n const next = jitterMs(config.billing.heartbeatSec * 1000, 0.1);\n hbTimer = window.setTimeout(loop, next);\n };\n // @ts-ignore\n hbTimer = window.setTimeout(loop, jitterMs(config.billing.heartbeatSec * 1000, 0.1));\n}\n\nfunction stopHeartbeats() {\n if (hbTimer) {\n clearTimeout(hbTimer);\n hbTimer = null;\n }\n}\n\nexport const getSessionIdSafe = () => session?.sessionId ?? null;\n","// src/bug.ts\nimport { enqueue } from './transport';\nimport type { BugPayload } from './types';\nimport { now } from './utils';\nimport { getSessionIdSafe } from './core';\n\nexport function reportBug(payload: {\n title: string; description?: string;\n severity?: 'blocker'|'major'|'minor'|'ux';\n attachments?: Blob[];\n}) {\n const sessionId = getSessionIdSafe();\n if (!sessionId) return;\n const p: BugPayload = {\n type: 'bug',\n sessionId,\n ts: now(),\n title: payload.title,\n description: payload.description,\n severity: payload.severity,\n hasCapture: !!(payload.attachments && payload.attachments.length > 0),\n purpose: 'diagnostics'\n };\n enqueue(p);\n // NOTE: upload des pièces jointes = hors scope core (peut passer par un autre endpoint)\n}\n","// src/index.ts\nimport { configure, openSession, closeSession, getSessionIdSafe } from './core';\nimport { setConsent as _setConsent, initConsent, setDNTPolicy, consentFlags } from './consent';\nimport { enqueue } from './transport';\nimport type { Config, EventPayload } from './types';\nimport { now } from './utils';\nexport * from './types';\nexport { reportBug } from './bug';\n\nlet initialized = false;\n\nexport function init(cfg: Config) {\n if (initialized) return;\n setDNTPolicy(cfg.privacy?.dntRespect ?? true);\n initConsent(cfg.consent?.default ?? 'pending');\n configure(cfg);\n // ouverture paresseuse : dès qu’il y a visibilité/activité\n if (document.visibilityState === 'visible') openSession();\n document.addEventListener('visibilitychange', () => {\n if (document.visibilityState === 'visible') openSession();\n });\n // Flush/close sur pagehide\n addEventListener('pagehide', () => closeSession('pagehide'));\n initialized = true;\n}\n\nexport function setConsent(flags: { analytics?: boolean; replay?: boolean }) {\n _setConsent(flags);\n if (document.visibilityState === 'visible') openSession();\n}\n\nexport function trackEvent(name: string, props?: Record<string, unknown>) {\n const sessionId = getSessionIdSafe();\n if (!sessionId) return;\n const ev: EventPayload = {\n type: 'event',\n sessionId,\n ts: now(),\n name,\n props,\n purpose: 'diagnostics',\n };\n enqueue(ev);\n}\n\nexport function shutdown() {\n closeSession('shutdown');\n}\n\nexport function getSessionId() {\n return getSessionIdSafe();\n}\n\nexport function forgetMe() {\n // côté core : rien de persistant par défaut (queue en mémoire).\n // si tu ajoutes IndexedDB/localStorage pour queue offline, purge ici.\n // Pour l’exemple, on ne stocke pas persistantement.\n closeSession('shutdown');\n}\n\nexport const _consentFlags = consentFlags;\n","// src/react.tsx\nimport React, { createContext, useContext, useEffect } from 'react';\nimport type { Config } from './types';\nimport { init, trackEvent, reportBug, setConsent, shutdown, getSessionId } from './index';\n\nconst Ctx = createContext({ trackEvent, reportBug, setConsent, shutdown, getSessionId });\n\nexport const MetricsProvider: React.FC<{ config: Config; children: React.ReactNode }> = ({ config, children }) => {\n useEffect(() => { init(config); }, []); // eslint-disable-line\n return <Ctx.Provider value={{ trackEvent, reportBug, setConsent, shutdown, getSessionId }}>{children}</Ctx.Provider>;\n};\n\nexport const useMetrics = () => useContext(Ctx);\n"]}
|
package/dist/react.d.cts
CHANGED
|
@@ -1,55 +1,5 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
|
|
3
|
-
type ConsentState = 'pending' | 'granted' | 'denied';
|
|
4
|
-
type Config = {
|
|
5
|
-
projectKey: string;
|
|
6
|
-
endpoint: string;
|
|
7
|
-
consent?: {
|
|
8
|
-
default: ConsentState;
|
|
9
|
-
};
|
|
10
|
-
user?: {
|
|
11
|
-
testerPseudoId?: string;
|
|
12
|
-
};
|
|
13
|
-
billing?: {
|
|
14
|
-
heartbeatSec?: number;
|
|
15
|
-
idleSec?: number;
|
|
16
|
-
maxHoursPerDay?: number;
|
|
17
|
-
};
|
|
18
|
-
privacy?: {
|
|
19
|
-
piiFilter?: boolean;
|
|
20
|
-
dntRespect?: boolean;
|
|
21
|
-
countryHint?: string;
|
|
22
|
-
};
|
|
23
|
-
security?: {
|
|
24
|
-
hmacPublicKey?: string;
|
|
25
|
-
};
|
|
26
|
-
features?: {
|
|
27
|
-
bugReporter?: boolean;
|
|
28
|
-
replay?: boolean;
|
|
29
|
-
sentryBridge?: boolean;
|
|
30
|
-
};
|
|
31
|
-
sampling?: {
|
|
32
|
-
heartbeats?: number;
|
|
33
|
-
events?: number;
|
|
34
|
-
bugs?: number;
|
|
35
|
-
};
|
|
36
|
-
debug?: boolean;
|
|
37
|
-
};
|
|
38
|
-
|
|
39
|
-
declare function reportBug(payload: {
|
|
40
|
-
title: string;
|
|
41
|
-
description?: string;
|
|
42
|
-
severity?: 'blocker' | 'major' | 'minor' | 'ux';
|
|
43
|
-
attachments?: Blob[];
|
|
44
|
-
}): void;
|
|
45
|
-
|
|
46
|
-
declare function setConsent(flags: {
|
|
47
|
-
analytics?: boolean;
|
|
48
|
-
replay?: boolean;
|
|
49
|
-
}): void;
|
|
50
|
-
declare function trackEvent(name: string, props?: Record<string, unknown>): void;
|
|
51
|
-
declare function shutdown(): void;
|
|
52
|
-
declare function getSessionId(): string | null;
|
|
2
|
+
import { Config, trackEvent, reportBug, setConsent, shutdown, getSessionId } from './index.cjs';
|
|
53
3
|
|
|
54
4
|
declare const MetricsProvider: React.FC<{
|
|
55
5
|
config: Config;
|
package/dist/react.d.ts
CHANGED
|
@@ -1,55 +1,5 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
|
|
3
|
-
type ConsentState = 'pending' | 'granted' | 'denied';
|
|
4
|
-
type Config = {
|
|
5
|
-
projectKey: string;
|
|
6
|
-
endpoint: string;
|
|
7
|
-
consent?: {
|
|
8
|
-
default: ConsentState;
|
|
9
|
-
};
|
|
10
|
-
user?: {
|
|
11
|
-
testerPseudoId?: string;
|
|
12
|
-
};
|
|
13
|
-
billing?: {
|
|
14
|
-
heartbeatSec?: number;
|
|
15
|
-
idleSec?: number;
|
|
16
|
-
maxHoursPerDay?: number;
|
|
17
|
-
};
|
|
18
|
-
privacy?: {
|
|
19
|
-
piiFilter?: boolean;
|
|
20
|
-
dntRespect?: boolean;
|
|
21
|
-
countryHint?: string;
|
|
22
|
-
};
|
|
23
|
-
security?: {
|
|
24
|
-
hmacPublicKey?: string;
|
|
25
|
-
};
|
|
26
|
-
features?: {
|
|
27
|
-
bugReporter?: boolean;
|
|
28
|
-
replay?: boolean;
|
|
29
|
-
sentryBridge?: boolean;
|
|
30
|
-
};
|
|
31
|
-
sampling?: {
|
|
32
|
-
heartbeats?: number;
|
|
33
|
-
events?: number;
|
|
34
|
-
bugs?: number;
|
|
35
|
-
};
|
|
36
|
-
debug?: boolean;
|
|
37
|
-
};
|
|
38
|
-
|
|
39
|
-
declare function reportBug(payload: {
|
|
40
|
-
title: string;
|
|
41
|
-
description?: string;
|
|
42
|
-
severity?: 'blocker' | 'major' | 'minor' | 'ux';
|
|
43
|
-
attachments?: Blob[];
|
|
44
|
-
}): void;
|
|
45
|
-
|
|
46
|
-
declare function setConsent(flags: {
|
|
47
|
-
analytics?: boolean;
|
|
48
|
-
replay?: boolean;
|
|
49
|
-
}): void;
|
|
50
|
-
declare function trackEvent(name: string, props?: Record<string, unknown>): void;
|
|
51
|
-
declare function shutdown(): void;
|
|
52
|
-
declare function getSessionId(): string | null;
|
|
2
|
+
import { Config, trackEvent, reportBug, setConsent, shutdown, getSessionId } from './index.js';
|
|
53
3
|
|
|
54
4
|
declare const MetricsProvider: React.FC<{
|
|
55
5
|
config: Config;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
var Poulet=(function(exports){'use strict';var qt=Object.create;var nt=Object.defineProperty;var Kt=Object.getOwnPropertyDescriptor;var Yt=Object.getOwnPropertyNames;var Bt=Object.getPrototypeOf,zt=Object.prototype.hasOwnProperty;var A=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var Ft=(t,e,n,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of Yt(e))!zt.call(t,r)&&r!==n&&nt(t,r,{get:()=>e[r],enumerable:!(o=Kt(e,r))||o.enumerable});return t};var k=(t,e,n)=>(n=t!=null?qt(Bt(t)):{},Ft(nt(n,"default",{value:t,enumerable:true}),t));var yt=A(i=>{var H=Symbol.for("react.transitional.element"),Gt=Symbol.for("react.portal"),Wt=Symbol.for("react.fragment"),Vt=Symbol.for("react.strict_mode"),Zt=Symbol.for("react.profiler"),Jt=Symbol.for("react.consumer"),Qt=Symbol.for("react.context"),Xt=Symbol.for("react.forward_ref"),te=Symbol.for("react.suspense"),ee=Symbol.for("react.memo"),ct=Symbol.for("react.lazy"),ot=Symbol.iterator;function ne(t){return t===null||typeof t!="object"?null:(t=ot&&t[ot]||t["@@iterator"],typeof t=="function"?t:null)}var at={isMounted:function(){return false},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},ft=Object.assign,pt={};function x(t,e,n){this.props=t,this.context=e,this.refs=pt,this.updater=n||at;}x.prototype.isReactComponent={};x.prototype.setState=function(t,e){if(typeof t!="object"&&typeof t!="function"&&t!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,t,e,"setState");};x.prototype.forceUpdate=function(t){this.updater.enqueueForceUpdate(this,t,"forceUpdate");};function lt(){}lt.prototype=x.prototype;function D(t,e,n){this.props=t,this.context=e,this.refs=pt,this.updater=n||at;}var U=D.prototype=new lt;U.constructor=D;ft(U,x.prototype);U.isPureReactComponent=true;var rt=Array.isArray,c={H:null,A:null,T:null,S:null,V:null},dt=Object.prototype.hasOwnProperty;function N(t,e,n,o,r,u){return n=u.ref,{$$typeof:H,type:t,key:e,ref:n!==void 0?n:null,props:u}}function oe(t,e){return N(t.type,e,void 0,void 0,void 0,t.props)}function $(t){return typeof t=="object"&&t!==null&&t.$$typeof===H}function re(t){var e={"=":"=0",":":"=2"};return "$"+t.replace(/[=:]/g,function(n){return e[n]})}var st=/\/+/g;function M(t,e){return typeof t=="object"&&t!==null&&t.key!=null?re(""+t.key):e.toString(36)}function it(){}function se(t){switch(t.status){case "fulfilled":return t.value;case "rejected":throw t.reason;default:switch(typeof t.status=="string"?t.then(it,it):(t.status="pending",t.then(function(e){t.status==="pending"&&(t.status="fulfilled",t.value=e);},function(e){t.status==="pending"&&(t.status="rejected",t.reason=e);})),t.status){case "fulfilled":return t.value;case "rejected":throw t.reason}}throw t}function E(t,e,n,o,r){var u=typeof t;(u==="undefined"||u==="boolean")&&(t=null);var s=false;if(t===null)s=true;else switch(u){case "bigint":case "string":case "number":s=true;break;case "object":switch(t.$$typeof){case H:case Gt:s=true;break;case ct:return s=t._init,E(s(t._payload),e,n,o,r)}}if(s)return r=r(t),s=o===""?"."+M(t,0):o,rt(r)?(n="",s!=null&&(n=s.replace(st,"$&/")+"/"),E(r,e,n,"",function($t){return $t})):r!=null&&($(r)&&(r=oe(r,n+(r.key==null||t&&t.key===r.key?"":(""+r.key).replace(st,"$&/")+"/")+s)),e.push(r)),1;s=0;var p=o===""?".":o+":";if(rt(t))for(var a=0;a<t.length;a++)o=t[a],u=p+M(o,a),s+=E(o,e,n,u,r);else if(a=ne(t),typeof a=="function")for(t=a.call(t),a=0;!(o=t.next()).done;)o=o.value,u=p+M(o,a++),s+=E(o,e,n,u,r);else if(u==="object"){if(typeof t.then=="function")return E(se(t),e,n,o,r);throw e=String(t),Error("Objects are not valid as a React child (found: "+(e==="[object Object]"?"object with keys {"+Object.keys(t).join(", ")+"}":e)+"). If you meant to render a collection of children, use an array instead.")}return s}function P(t,e,n){if(t==null)return t;var o=[],r=0;return E(t,o,"","",function(u){return e.call(n,u,r++)}),o}function ie(t){if(t._status===-1){var e=t._result;e=e(),e.then(function(n){(t._status===0||t._status===-1)&&(t._status=1,t._result=n);},function(n){(t._status===0||t._status===-1)&&(t._status=2,t._result=n);}),t._status===-1&&(t._status=0,t._result=e);}if(t._status===1)return t._result.default;throw t._result}var ut=typeof reportError=="function"?reportError:function(t){if(typeof window=="object"&&typeof window.ErrorEvent=="function"){var e=new window.ErrorEvent("error",{bubbles:true,cancelable:true,message:typeof t=="object"&&t!==null&&typeof t.message=="string"?String(t.message):String(t),error:t});if(!window.dispatchEvent(e))return}else if(typeof process=="object"&&typeof process.emit=="function"){process.emit("uncaughtException",t);return}console.error(t);};function ue(){}i.Children={map:P,forEach:function(t,e,n){P(t,function(){e.apply(this,arguments);},n);},count:function(t){var e=0;return P(t,function(){e++;}),e},toArray:function(t){return P(t,function(e){return e})||[]},only:function(t){if(!$(t))throw Error("React.Children.only expected to receive a single React element child.");return t}};i.Component=x;i.Fragment=Wt;i.Profiler=Zt;i.PureComponent=D;i.StrictMode=Vt;i.Suspense=te;i.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=c;i.__COMPILER_RUNTIME={__proto__:null,c:function(t){return c.H.useMemoCache(t)}};i.cache=function(t){return function(){return t.apply(null,arguments)}};i.cloneElement=function(t,e,n){if(t==null)throw Error("The argument must be a React element, but you passed "+t+".");var o=ft({},t.props),r=t.key,u=void 0;if(e!=null)for(s in e.ref!==void 0&&(u=void 0),e.key!==void 0&&(r=""+e.key),e)!dt.call(e,s)||s==="key"||s==="__self"||s==="__source"||s==="ref"&&e.ref===void 0||(o[s]=e[s]);var s=arguments.length-2;if(s===1)o.children=n;else if(1<s){for(var p=Array(s),a=0;a<s;a++)p[a]=arguments[a+2];o.children=p;}return N(t.type,r,void 0,void 0,u,o)};i.createContext=function(t){return t={$$typeof:Qt,_currentValue:t,_currentValue2:t,_threadCount:0,Provider:null,Consumer:null},t.Provider=t,t.Consumer={$$typeof:Jt,_context:t},t};i.createElement=function(t,e,n){var o,r={},u=null;if(e!=null)for(o in e.key!==void 0&&(u=""+e.key),e)dt.call(e,o)&&o!=="key"&&o!=="__self"&&o!=="__source"&&(r[o]=e[o]);var s=arguments.length-2;if(s===1)r.children=n;else if(1<s){for(var p=Array(s),a=0;a<s;a++)p[a]=arguments[a+2];r.children=p;}if(t&&t.defaultProps)for(o in s=t.defaultProps,s)r[o]===void 0&&(r[o]=s[o]);return N(t,u,void 0,void 0,null,r)};i.createRef=function(){return {current:null}};i.forwardRef=function(t){return {$$typeof:Xt,render:t}};i.isValidElement=$;i.lazy=function(t){return {$$typeof:ct,_payload:{_status:-1,_result:t},_init:ie}};i.memo=function(t,e){return {$$typeof:ee,type:t,compare:e===void 0?null:e}};i.startTransition=function(t){var e=c.T,n={};c.T=n;try{var o=t(),r=c.S;r!==null&&r(n,o),typeof o=="object"&&o!==null&&typeof o.then=="function"&&o.then(ue,ut);}catch(u){ut(u);}finally{c.T=e;}};i.unstable_useCacheRefresh=function(){return c.H.useCacheRefresh()};i.use=function(t){return c.H.use(t)};i.useActionState=function(t,e,n){return c.H.useActionState(t,e,n)};i.useCallback=function(t,e){return c.H.useCallback(t,e)};i.useContext=function(t){return c.H.useContext(t)};i.useDebugValue=function(){};i.useDeferredValue=function(t,e){return c.H.useDeferredValue(t,e)};i.useEffect=function(t,e,n){var o=c.H;if(typeof n=="function")throw Error("useEffect CRUD overload is not enabled in this build of React.");return o.useEffect(t,e)};i.useId=function(){return c.H.useId()};i.useImperativeHandle=function(t,e,n){return c.H.useImperativeHandle(t,e,n)};i.useInsertionEffect=function(t,e){return c.H.useInsertionEffect(t,e)};i.useLayoutEffect=function(t,e){return c.H.useLayoutEffect(t,e)};i.useMemo=function(t,e){return c.H.useMemo(t,e)};i.useOptimistic=function(t,e){return c.H.useOptimistic(t,e)};i.useReducer=function(t,e,n){return c.H.useReducer(t,e,n)};i.useRef=function(t){return c.H.useRef(t)};i.useState=function(t){return c.H.useState(t)};i.useSyncExternalStore=function(t,e,n){return c.H.useSyncExternalStore(t,e,n)};i.useTransition=function(){return c.H.useTransition()};i.version="19.1.1";});var vt=A((me,mt)=>{mt.exports=yt();});var Ht=A(O=>{var pe=Symbol.for("react.transitional.element"),le=Symbol.for("react.fragment");function Mt(t,e,n){var o=null;if(n!==void 0&&(o=""+n),e.key!==void 0&&(o=""+e.key),"key"in e){n={};for(var r in e)r!=="key"&&(n[r]=e[r]);}else n=e;return e=n.ref,{$$typeof:pe,type:t,key:o,ref:e!==void 0?e:null,props:n}}O.Fragment=le;O.jsx=Mt;O.jsxs=Mt;});var et=A((Fe,Dt)=>{Dt.exports=Ht();});var w=k(vt());var l=()=>Date.now();var q=(t,e,n)=>(t.addEventListener(e,n,{passive:true}),()=>t.removeEventListener(e,n)),_=(t,e)=>(document.addEventListener(t,e,{passive:true}),()=>document.removeEventListener(t,e));var K=(t,e=.1)=>{let n=t*e;return t+(Math.random()*2-1)*n},Y=t=>{if(!t||typeof t!="object")return t;let e=["email","phone","password","ssn"],n=Array.isArray(t)?[]:{};for(let o of Object.keys(t)){if(e.includes(o.toLowerCase()))continue;let r=t[o];n[o]=typeof r=="object"?Y(r):r;}return n},h=(...t)=>{window.__POULET_DEBUG__&&console.log("[poulet]",...t);},gt=t=>Uint8Array.from(atob(t),e=>e.charCodeAt(0));var Et=Date.now(),B=[],xt=()=>Et,_t=()=>{z();let t=()=>{Et=Date.now();},e=_("mousemove",t),n=_("keydown",t),o=_("scroll",t),r=_("touchstart",t),u=q(window,"focus",t),s=q(window,"blur",t),p=_("visibilitychange",t);B=[e,n,o,r,u,s,p];},z=()=>{B.forEach(t=>t()),B=[];};var m="poulet_leader_session",v=false,ht=t=>{let e=localStorage.getItem(m);return e?(v=e===t,v):(localStorage.setItem(m,t),v=true,true)},wt=t=>{localStorage.getItem(m)===t&&localStorage.removeItem(m),v=false;};var St=(t,e)=>{let n=o=>{if(o.key!==m)return;let r=localStorage.getItem(m);r?(v=r===t,e(v)):(localStorage.setItem(m,t),e(true),v=true);};return window.addEventListener("storage",n),()=>window.removeEventListener("storage",n)},F=()=>{var t;return {ua:navigator.userAgent,tz:(t=Intl.DateTimeFormat().resolvedOptions().timeZone)!=null?t:"UTC",dpr:window.devicePixelRatio||1}};var j=false,Ct=true,Tt=t=>{Ct=t;},Rt=t=>{Ct&&typeof navigator!="undefined"&&navigator.doNotTrack==="1"&&(j=false,"denied");},At=t=>{typeof t.analytics=="boolean"&&(j=t.analytics,j?"granted":"denied"),typeof t.replay=="boolean"&&(t.replay);};var W=()=>j===true;var g,S=[],V=false;async function ce(t){if(!(!g.hmacPublicKey||!("crypto"in window)))try{let e=gt(g.hmacPublicKey),n=await crypto.subtle.importKey("raw",e,{name:"HMAC",hash:"SHA-256"},!1,["sign"]),o=await crypto.subtle.sign("HMAC",n,new TextEncoder().encode(t));return btoa(String.fromCharCode(...new Uint8Array(o)))}catch(e){return}}async function ae(t){let e=t.map(u=>Y(u)),n=JSON.stringify({projectKey:g.projectKey,items:e}),o=await ce(n);if(navigator.sendBeacon&&!g.debug){let u={type:"application/json"},s=new Blob([n],u);if(navigator.sendBeacon(g.endpoint+"/ingest",s))return true}return (await fetch(g.endpoint+"/ingest",{method:"POST",headers:{"Content-Type":"application/json",...o?{"x-signature":o}:{}},body:n})).ok}function Pt(t){g=t,window.addEventListener("online",b),setInterval(b,5e3);}function y(t){S.push(t),S.length>=10&&b();}async function b(){if(!(V||S.length===0)){V=true;try{let t=S.splice(0,20);await ae(t)||(S.unshift(...t),h("flush failed, will retry"));}catch(t){h("flush error",t);}finally{V=false;}}}var d,f=null,C=null,T,jt={projectKey:"",endpoint:"",consent:{default:"pending"},user:{},billing:{heartbeatSec:15,idleSec:60,maxHoursPerDay:6},privacy:{piiFilter:true,dntRespect:true,countryHint:"FR"},security:{hmacPublicKey:void 0},features:{bugReporter:true,replay:false,sentryBridge:false},sampling:{heartbeats:1,events:1,bugs:1},debug:false};function It(t){d={...jt,...t,consent:{...jt.consent,...t.consent}},window.__POULET_DEBUG__=!!d.debug,Pt({endpoint:d.endpoint,projectKey:d.projectKey,hmacPublicKey:d.security.hmacPublicKey,debug:d.debug});}function I(){if(f)return;let t=crypto.randomUUID(),e=F();f={sessionId:t,startedAt:l(),lastActivityAt:l(),active:true,leader:ht(t)},T&&T(),T=St(t,o=>{f&&(f.leader=o);}),_t();let n={type:"session.start",sessionId:t,ts:l(),projectKey:d.projectKey,ua:e.ua,tz:e.tz,dpr:e.dpr,consentFlags:{analytics:W(),replay:false}};y(n),fe(),h("session opened",t);}function Z(t){if(!f)return;Lt(),z(),wt(f.sessionId);let e={type:"session.end",sessionId:f.sessionId,ts:l(),reason:t};y(e),b(),T&&T(),f=null,h("session closed",t);}function fe(){Lt();let t=()=>{if(!f||!W())return;let e=l()-xt()>=d.billing.idleSec*1e3,n=document.visibilityState==="visible",o=n&&!e&&f.leader,r=F();if(Math.random()<=d.sampling.heartbeats&&o){let s={type:"heartbeat",sessionId:f.sessionId,ts:l(),active:true,vis:n,idle:false,jitter:Math.random(),ua:r.ua,tz:r.tz,dpr:r.dpr,purpose:"billing"};y(s);}let u=K(d.billing.heartbeatSec*1e3,.1);C=window.setTimeout(t,u);};C=window.setTimeout(t,K(d.billing.heartbeatSec*1e3,.1));}function Lt(){C&&(clearTimeout(C),C=null);}var R=()=>{var t;return (t=f==null?void 0:f.sessionId)!=null?t:null};function L(t){let e=R();if(!e)return;let n={type:"bug",sessionId:e,ts:l(),title:t.title,description:t.description,severity:t.severity,hasCapture:!!(t.attachments&&t.attachments.length>0),purpose:"diagnostics"};y(n);}var Ot=false;function kt(t){var e,n,o,r;Ot||(Tt((n=(e=t.privacy)==null?void 0:e.dntRespect)!=null?n:true),Rt((r=(o=t.consent)==null?void 0:o.default)!=null?r:"pending"),It(t),document.visibilityState==="visible"&&I(),document.addEventListener("visibilitychange",()=>{document.visibilityState==="visible"&&I();}),addEventListener("pagehide",()=>Z("pagehide")),Ot=true);}function J(t){At(t),document.visibilityState==="visible"&&I();}function Q(t,e){let n=R();if(!n)return;let o={type:"event",sessionId:n,ts:l(),name:t,props:e,purpose:"diagnostics"};y(o);}function X(){Z("shutdown");}function tt(){return R()}var Nt=k(et()),Ut=(0, w.createContext)({trackEvent:Q,reportBug:L,setConsent:J,shutdown:X,getSessionId:tt}),Ve=({config:t,children:e})=>((0, w.useEffect)(()=>{kt(t);},[]),(0, Nt.jsx)(Ut.Provider,{value:{trackEvent:Q,reportBug:L,setConsent:J,shutdown:X,getSessionId:tt},children:e})),Ze=()=>(0, w.useContext)(Ut);/*! Bundled license information:
|
|
2
|
+
|
|
3
|
+
react/cjs/react.production.js:
|
|
4
|
+
(**
|
|
5
|
+
* @license React
|
|
6
|
+
* react.production.js
|
|
7
|
+
*
|
|
8
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
9
|
+
*
|
|
10
|
+
* This source code is licensed under the MIT license found in the
|
|
11
|
+
* LICENSE file in the root directory of this source tree.
|
|
12
|
+
*)
|
|
13
|
+
|
|
14
|
+
react/cjs/react-jsx-runtime.production.js:
|
|
15
|
+
(**
|
|
16
|
+
* @license React
|
|
17
|
+
* react-jsx-runtime.production.js
|
|
18
|
+
*
|
|
19
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
20
|
+
*
|
|
21
|
+
* This source code is licensed under the MIT license found in the
|
|
22
|
+
* LICENSE file in the root directory of this source tree.
|
|
23
|
+
*)
|
|
24
|
+
*/exports.MetricsProvider=Ve;exports.useMetrics=Ze;return exports;})({});//# sourceMappingURL=react.global.js.map
|
|
25
|
+
//# sourceMappingURL=react.global.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../node_modules/react/cjs/react.production.js","../node_modules/react/index.js","../node_modules/react/cjs/react-jsx-runtime.production.js","../node_modules/react/jsx-runtime.js","../src/react.tsx","../src/utils.ts","../src/activity.ts","../src/antifraud.ts","../src/consent.ts","../src/transport.ts","../src/core.ts","../src/bug.ts","../src/index.ts"],"names":["require_react_production","__commonJSMin","exports","REACT_ELEMENT_TYPE","REACT_PORTAL_TYPE","REACT_FRAGMENT_TYPE","REACT_STRICT_MODE_TYPE","REACT_PROFILER_TYPE","REACT_CONSUMER_TYPE","REACT_CONTEXT_TYPE","REACT_FORWARD_REF_TYPE","REACT_SUSPENSE_TYPE","REACT_MEMO_TYPE","REACT_LAZY_TYPE","MAYBE_ITERATOR_SYMBOL","getIteratorFn","maybeIterable","ReactNoopUpdateQueue","assign","emptyObject","Component","props","context","updater","partialState","callback","ComponentDummy","PureComponent","pureComponentPrototype","isArrayImpl","ReactSharedInternals","hasOwnProperty","ReactElement","type","key","self","source","owner","cloneAndReplaceKey","oldElement","newKey","isValidElement","object","escape","escaperLookup","match","userProvidedKeyEscapeRegex","getElementKey","element","index","noop$1","resolveThenable","thenable","fulfilledValue","error","mapIntoArray","children","array","escapedPrefix","nameSoFar","invokeCallback","c","nextNamePrefix","i","mapChildren","func","result","count","child","lazyInitializer","payload","ctor","moduleObject","reportGlobalError","event","noop","forEachFunc","forEachContext","n","size","fn","config","propName","childArray","defaultValue","childrenLength","render","compare","scope","prevTransition","currentTransition","returnValue","onStartTransitionFinish","usable","action","initialState","permalink","deps","Context","value","initialValue","create","createDeps","update","dispatcher","ref","passthrough","reducer","initialArg","init","subscribe","getSnapshot","getServerSnapshot","require_react","module","require_react_jsx_runtime_production","jsxProd","maybeKey","require_jsx_runtime","import_react","now","on","onDoc","jitterMs","baseMs","pct","delta","filterPII","o","SUSPICIOUS","out","k","v","log","args","base64ToArrayBuffer","b64","lastActivity","unsub","getLastActivity","startActivityTracking","stopActivityTracking","touch","un1","un2","un3","un4","un5","un6","un7","f","LS_KEY","leader","becomeLeaderIfFree","sessionId","current","relinquishLeadership","handleStorageLeadership","onChange","listener","e","fingerprintLite","_a","analyticsAllowed","dntRespected","setDNTPolicy","respect","initConsent","defaultState","setConsent","flags","analyticsOn","cfg","queue","flushing","sign","body","keyData","sig","postBatch","items","sanitized","headers","blob","initTransport","flush","enqueue","batch","session","hbTimer","unStorage","DEFAULTS","configure","openSession","id","fp","lead","startPayload","scheduleHeartbeats","closeSession","reason","stopHeartbeats","endPayload","loop","idle","vis","active","hb","next","getSessionIdSafe","reportBug","p","initialized","_b","_c","_d","trackEvent","name","ev","shutdown","getSessionId","import_jsx_runtime","Ctx","MetricsProvider","useMetrics"],"mappings":"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","file":"react.global.js","sourcesContent":["/**\n * @license React\n * react.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nfunction getIteratorFn(maybeIterable) {\n if (null === maybeIterable || \"object\" !== typeof maybeIterable) return null;\n maybeIterable =\n (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) ||\n maybeIterable[\"@@iterator\"];\n return \"function\" === typeof maybeIterable ? maybeIterable : null;\n}\nvar ReactNoopUpdateQueue = {\n isMounted: function () {\n return !1;\n },\n enqueueForceUpdate: function () {},\n enqueueReplaceState: function () {},\n enqueueSetState: function () {}\n },\n assign = Object.assign,\n emptyObject = {};\nfunction Component(props, context, updater) {\n this.props = props;\n this.context = context;\n this.refs = emptyObject;\n this.updater = updater || ReactNoopUpdateQueue;\n}\nComponent.prototype.isReactComponent = {};\nComponent.prototype.setState = function (partialState, callback) {\n if (\n \"object\" !== typeof partialState &&\n \"function\" !== typeof partialState &&\n null != partialState\n )\n throw Error(\n \"takes an object of state variables to update or a function which returns an object of state variables.\"\n );\n this.updater.enqueueSetState(this, partialState, callback, \"setState\");\n};\nComponent.prototype.forceUpdate = function (callback) {\n this.updater.enqueueForceUpdate(this, callback, \"forceUpdate\");\n};\nfunction ComponentDummy() {}\nComponentDummy.prototype = Component.prototype;\nfunction PureComponent(props, context, updater) {\n this.props = props;\n this.context = context;\n this.refs = emptyObject;\n this.updater = updater || ReactNoopUpdateQueue;\n}\nvar pureComponentPrototype = (PureComponent.prototype = new ComponentDummy());\npureComponentPrototype.constructor = PureComponent;\nassign(pureComponentPrototype, Component.prototype);\npureComponentPrototype.isPureReactComponent = !0;\nvar isArrayImpl = Array.isArray,\n ReactSharedInternals = { H: null, A: null, T: null, S: null, V: null },\n hasOwnProperty = Object.prototype.hasOwnProperty;\nfunction ReactElement(type, key, self, source, owner, props) {\n self = props.ref;\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n ref: void 0 !== self ? self : null,\n props: props\n };\n}\nfunction cloneAndReplaceKey(oldElement, newKey) {\n return ReactElement(\n oldElement.type,\n newKey,\n void 0,\n void 0,\n void 0,\n oldElement.props\n );\n}\nfunction isValidElement(object) {\n return (\n \"object\" === typeof object &&\n null !== object &&\n object.$$typeof === REACT_ELEMENT_TYPE\n );\n}\nfunction escape(key) {\n var escaperLookup = { \"=\": \"=0\", \":\": \"=2\" };\n return (\n \"$\" +\n key.replace(/[=:]/g, function (match) {\n return escaperLookup[match];\n })\n );\n}\nvar userProvidedKeyEscapeRegex = /\\/+/g;\nfunction getElementKey(element, index) {\n return \"object\" === typeof element && null !== element && null != element.key\n ? escape(\"\" + element.key)\n : index.toString(36);\n}\nfunction noop$1() {}\nfunction resolveThenable(thenable) {\n switch (thenable.status) {\n case \"fulfilled\":\n return thenable.value;\n case \"rejected\":\n throw thenable.reason;\n default:\n switch (\n (\"string\" === typeof thenable.status\n ? thenable.then(noop$1, noop$1)\n : ((thenable.status = \"pending\"),\n thenable.then(\n function (fulfilledValue) {\n \"pending\" === thenable.status &&\n ((thenable.status = \"fulfilled\"),\n (thenable.value = fulfilledValue));\n },\n function (error) {\n \"pending\" === thenable.status &&\n ((thenable.status = \"rejected\"), (thenable.reason = error));\n }\n )),\n thenable.status)\n ) {\n case \"fulfilled\":\n return thenable.value;\n case \"rejected\":\n throw thenable.reason;\n }\n }\n throw thenable;\n}\nfunction mapIntoArray(children, array, escapedPrefix, nameSoFar, callback) {\n var type = typeof children;\n if (\"undefined\" === type || \"boolean\" === type) children = null;\n var invokeCallback = !1;\n if (null === children) invokeCallback = !0;\n else\n switch (type) {\n case \"bigint\":\n case \"string\":\n case \"number\":\n invokeCallback = !0;\n break;\n case \"object\":\n switch (children.$$typeof) {\n case REACT_ELEMENT_TYPE:\n case REACT_PORTAL_TYPE:\n invokeCallback = !0;\n break;\n case REACT_LAZY_TYPE:\n return (\n (invokeCallback = children._init),\n mapIntoArray(\n invokeCallback(children._payload),\n array,\n escapedPrefix,\n nameSoFar,\n callback\n )\n );\n }\n }\n if (invokeCallback)\n return (\n (callback = callback(children)),\n (invokeCallback =\n \"\" === nameSoFar ? \".\" + getElementKey(children, 0) : nameSoFar),\n isArrayImpl(callback)\n ? ((escapedPrefix = \"\"),\n null != invokeCallback &&\n (escapedPrefix =\n invokeCallback.replace(userProvidedKeyEscapeRegex, \"$&/\") + \"/\"),\n mapIntoArray(callback, array, escapedPrefix, \"\", function (c) {\n return c;\n }))\n : null != callback &&\n (isValidElement(callback) &&\n (callback = cloneAndReplaceKey(\n callback,\n escapedPrefix +\n (null == callback.key ||\n (children && children.key === callback.key)\n ? \"\"\n : (\"\" + callback.key).replace(\n userProvidedKeyEscapeRegex,\n \"$&/\"\n ) + \"/\") +\n invokeCallback\n )),\n array.push(callback)),\n 1\n );\n invokeCallback = 0;\n var nextNamePrefix = \"\" === nameSoFar ? \".\" : nameSoFar + \":\";\n if (isArrayImpl(children))\n for (var i = 0; i < children.length; i++)\n (nameSoFar = children[i]),\n (type = nextNamePrefix + getElementKey(nameSoFar, i)),\n (invokeCallback += mapIntoArray(\n nameSoFar,\n array,\n escapedPrefix,\n type,\n callback\n ));\n else if (((i = getIteratorFn(children)), \"function\" === typeof i))\n for (\n children = i.call(children), i = 0;\n !(nameSoFar = children.next()).done;\n\n )\n (nameSoFar = nameSoFar.value),\n (type = nextNamePrefix + getElementKey(nameSoFar, i++)),\n (invokeCallback += mapIntoArray(\n nameSoFar,\n array,\n escapedPrefix,\n type,\n callback\n ));\n else if (\"object\" === type) {\n if (\"function\" === typeof children.then)\n return mapIntoArray(\n resolveThenable(children),\n array,\n escapedPrefix,\n nameSoFar,\n callback\n );\n array = String(children);\n throw Error(\n \"Objects are not valid as a React child (found: \" +\n (\"[object Object]\" === array\n ? \"object with keys {\" + Object.keys(children).join(\", \") + \"}\"\n : array) +\n \"). If you meant to render a collection of children, use an array instead.\"\n );\n }\n return invokeCallback;\n}\nfunction mapChildren(children, func, context) {\n if (null == children) return children;\n var result = [],\n count = 0;\n mapIntoArray(children, result, \"\", \"\", function (child) {\n return func.call(context, child, count++);\n });\n return result;\n}\nfunction lazyInitializer(payload) {\n if (-1 === payload._status) {\n var ctor = payload._result;\n ctor = ctor();\n ctor.then(\n function (moduleObject) {\n if (0 === payload._status || -1 === payload._status)\n (payload._status = 1), (payload._result = moduleObject);\n },\n function (error) {\n if (0 === payload._status || -1 === payload._status)\n (payload._status = 2), (payload._result = error);\n }\n );\n -1 === payload._status && ((payload._status = 0), (payload._result = ctor));\n }\n if (1 === payload._status) return payload._result.default;\n throw payload._result;\n}\nvar reportGlobalError =\n \"function\" === typeof reportError\n ? reportError\n : function (error) {\n if (\n \"object\" === typeof window &&\n \"function\" === typeof window.ErrorEvent\n ) {\n var event = new window.ErrorEvent(\"error\", {\n bubbles: !0,\n cancelable: !0,\n message:\n \"object\" === typeof error &&\n null !== error &&\n \"string\" === typeof error.message\n ? String(error.message)\n : String(error),\n error: error\n });\n if (!window.dispatchEvent(event)) return;\n } else if (\n \"object\" === typeof process &&\n \"function\" === typeof process.emit\n ) {\n process.emit(\"uncaughtException\", error);\n return;\n }\n console.error(error);\n };\nfunction noop() {}\nexports.Children = {\n map: mapChildren,\n forEach: function (children, forEachFunc, forEachContext) {\n mapChildren(\n children,\n function () {\n forEachFunc.apply(this, arguments);\n },\n forEachContext\n );\n },\n count: function (children) {\n var n = 0;\n mapChildren(children, function () {\n n++;\n });\n return n;\n },\n toArray: function (children) {\n return (\n mapChildren(children, function (child) {\n return child;\n }) || []\n );\n },\n only: function (children) {\n if (!isValidElement(children))\n throw Error(\n \"React.Children.only expected to receive a single React element child.\"\n );\n return children;\n }\n};\nexports.Component = Component;\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.Profiler = REACT_PROFILER_TYPE;\nexports.PureComponent = PureComponent;\nexports.StrictMode = REACT_STRICT_MODE_TYPE;\nexports.Suspense = REACT_SUSPENSE_TYPE;\nexports.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE =\n ReactSharedInternals;\nexports.__COMPILER_RUNTIME = {\n __proto__: null,\n c: function (size) {\n return ReactSharedInternals.H.useMemoCache(size);\n }\n};\nexports.cache = function (fn) {\n return function () {\n return fn.apply(null, arguments);\n };\n};\nexports.cloneElement = function (element, config, children) {\n if (null === element || void 0 === element)\n throw Error(\n \"The argument must be a React element, but you passed \" + element + \".\"\n );\n var props = assign({}, element.props),\n key = element.key,\n owner = void 0;\n if (null != config)\n for (propName in (void 0 !== config.ref && (owner = void 0),\n void 0 !== config.key && (key = \"\" + config.key),\n config))\n !hasOwnProperty.call(config, propName) ||\n \"key\" === propName ||\n \"__self\" === propName ||\n \"__source\" === propName ||\n (\"ref\" === propName && void 0 === config.ref) ||\n (props[propName] = config[propName]);\n var propName = arguments.length - 2;\n if (1 === propName) props.children = children;\n else if (1 < propName) {\n for (var childArray = Array(propName), i = 0; i < propName; i++)\n childArray[i] = arguments[i + 2];\n props.children = childArray;\n }\n return ReactElement(element.type, key, void 0, void 0, owner, props);\n};\nexports.createContext = function (defaultValue) {\n defaultValue = {\n $$typeof: REACT_CONTEXT_TYPE,\n _currentValue: defaultValue,\n _currentValue2: defaultValue,\n _threadCount: 0,\n Provider: null,\n Consumer: null\n };\n defaultValue.Provider = defaultValue;\n defaultValue.Consumer = {\n $$typeof: REACT_CONSUMER_TYPE,\n _context: defaultValue\n };\n return defaultValue;\n};\nexports.createElement = function (type, config, children) {\n var propName,\n props = {},\n key = null;\n if (null != config)\n for (propName in (void 0 !== config.key && (key = \"\" + config.key), config))\n hasOwnProperty.call(config, propName) &&\n \"key\" !== propName &&\n \"__self\" !== propName &&\n \"__source\" !== propName &&\n (props[propName] = config[propName]);\n var childrenLength = arguments.length - 2;\n if (1 === childrenLength) props.children = children;\n else if (1 < childrenLength) {\n for (var childArray = Array(childrenLength), i = 0; i < childrenLength; i++)\n childArray[i] = arguments[i + 2];\n props.children = childArray;\n }\n if (type && type.defaultProps)\n for (propName in ((childrenLength = type.defaultProps), childrenLength))\n void 0 === props[propName] &&\n (props[propName] = childrenLength[propName]);\n return ReactElement(type, key, void 0, void 0, null, props);\n};\nexports.createRef = function () {\n return { current: null };\n};\nexports.forwardRef = function (render) {\n return { $$typeof: REACT_FORWARD_REF_TYPE, render: render };\n};\nexports.isValidElement = isValidElement;\nexports.lazy = function (ctor) {\n return {\n $$typeof: REACT_LAZY_TYPE,\n _payload: { _status: -1, _result: ctor },\n _init: lazyInitializer\n };\n};\nexports.memo = function (type, compare) {\n return {\n $$typeof: REACT_MEMO_TYPE,\n type: type,\n compare: void 0 === compare ? null : compare\n };\n};\nexports.startTransition = function (scope) {\n var prevTransition = ReactSharedInternals.T,\n currentTransition = {};\n ReactSharedInternals.T = currentTransition;\n try {\n var returnValue = scope(),\n onStartTransitionFinish = ReactSharedInternals.S;\n null !== onStartTransitionFinish &&\n onStartTransitionFinish(currentTransition, returnValue);\n \"object\" === typeof returnValue &&\n null !== returnValue &&\n \"function\" === typeof returnValue.then &&\n returnValue.then(noop, reportGlobalError);\n } catch (error) {\n reportGlobalError(error);\n } finally {\n ReactSharedInternals.T = prevTransition;\n }\n};\nexports.unstable_useCacheRefresh = function () {\n return ReactSharedInternals.H.useCacheRefresh();\n};\nexports.use = function (usable) {\n return ReactSharedInternals.H.use(usable);\n};\nexports.useActionState = function (action, initialState, permalink) {\n return ReactSharedInternals.H.useActionState(action, initialState, permalink);\n};\nexports.useCallback = function (callback, deps) {\n return ReactSharedInternals.H.useCallback(callback, deps);\n};\nexports.useContext = function (Context) {\n return ReactSharedInternals.H.useContext(Context);\n};\nexports.useDebugValue = function () {};\nexports.useDeferredValue = function (value, initialValue) {\n return ReactSharedInternals.H.useDeferredValue(value, initialValue);\n};\nexports.useEffect = function (create, createDeps, update) {\n var dispatcher = ReactSharedInternals.H;\n if (\"function\" === typeof update)\n throw Error(\n \"useEffect CRUD overload is not enabled in this build of React.\"\n );\n return dispatcher.useEffect(create, createDeps);\n};\nexports.useId = function () {\n return ReactSharedInternals.H.useId();\n};\nexports.useImperativeHandle = function (ref, create, deps) {\n return ReactSharedInternals.H.useImperativeHandle(ref, create, deps);\n};\nexports.useInsertionEffect = function (create, deps) {\n return ReactSharedInternals.H.useInsertionEffect(create, deps);\n};\nexports.useLayoutEffect = function (create, deps) {\n return ReactSharedInternals.H.useLayoutEffect(create, deps);\n};\nexports.useMemo = function (create, deps) {\n return ReactSharedInternals.H.useMemo(create, deps);\n};\nexports.useOptimistic = function (passthrough, reducer) {\n return ReactSharedInternals.H.useOptimistic(passthrough, reducer);\n};\nexports.useReducer = function (reducer, initialArg, init) {\n return ReactSharedInternals.H.useReducer(reducer, initialArg, init);\n};\nexports.useRef = function (initialValue) {\n return ReactSharedInternals.H.useRef(initialValue);\n};\nexports.useState = function (initialState) {\n return ReactSharedInternals.H.useState(initialState);\n};\nexports.useSyncExternalStore = function (\n subscribe,\n getSnapshot,\n getServerSnapshot\n) {\n return ReactSharedInternals.H.useSyncExternalStore(\n subscribe,\n getSnapshot,\n getServerSnapshot\n );\n};\nexports.useTransition = function () {\n return ReactSharedInternals.H.useTransition();\n};\nexports.version = \"19.1.1\";\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react.production.js');\n} else {\n module.exports = require('./cjs/react.development.js');\n}\n","/**\n * @license React\n * react-jsx-runtime.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\");\nfunction jsxProd(type, config, maybeKey) {\n var key = null;\n void 0 !== maybeKey && (key = \"\" + maybeKey);\n void 0 !== config.key && (key = \"\" + config.key);\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n config = maybeKey.ref;\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n ref: void 0 !== config ? config : null,\n props: maybeKey\n };\n}\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsxProd;\nexports.jsxs = jsxProd;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","// src/react.tsx\nimport React, { createContext, useContext, useEffect } from 'react';\nimport type { Config } from './types';\nimport { init, trackEvent, reportBug, setConsent, shutdown, getSessionId } from './index';\n\nconst Ctx = createContext({ trackEvent, reportBug, setConsent, shutdown, getSessionId });\n\nexport const MetricsProvider: React.FC<{ config: Config; children: React.ReactNode }> = ({ config, children }) => {\n useEffect(() => { init(config); }, []); // eslint-disable-line\n return <Ctx.Provider value={{ trackEvent, reportBug, setConsent, shutdown, getSessionId }}>{children}</Ctx.Provider>;\n};\n\nexport const useMetrics = () => useContext(Ctx);\n","// src/utils.ts\nexport const now = () => Date.now();\n\nexport const uuid = (): string =>\n (crypto?.randomUUID?.() ?? 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = (crypto.getRandomValues(new Uint8Array(1))[0] & 0xf) >> 0;\n const v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n }));\n\nexport const isVisible = () => typeof document !== 'undefined' && document.visibilityState === 'visible';\n\nexport const on = <K extends keyof WindowEventMap>(t: Window, type: K, fn: (e: WindowEventMap[K]) => void) => {\n t.addEventListener(type, fn as any, { passive: true });\n return () => t.removeEventListener(type, fn as any);\n};\n\nexport const onDoc = <K extends keyof DocumentEventMap>(type: K, fn: (e: DocumentEventMap[K]) => void) => {\n document.addEventListener(type, fn as any, { passive: true });\n return () => document.removeEventListener(type, fn as any);\n};\n\nexport const clamp = (n: number, min: number, max: number) => Math.max(min, Math.min(max, n));\n\nexport const jitterMs = (baseMs: number, pct = 0.1) => {\n const delta = baseMs * pct;\n return baseMs + (Math.random() * 2 - 1) * delta;\n};\n\nexport const filterPII = (o: any): any => {\n if (!o || typeof o !== 'object') return o;\n const SUSPICIOUS = ['email', 'phone', 'password', 'ssn'];\n const out: any = Array.isArray(o) ? [] : {};\n for (const k of Object.keys(o)) {\n if (SUSPICIOUS.includes(k.toLowerCase())) continue;\n const v = (o as any)[k];\n out[k] = typeof v === 'object' ? filterPII(v) : v;\n }\n return out;\n};\n\nexport const log = (...args: any[]) => {\n if ((window as any).__POULET_DEBUG__) console.log('[poulet]', ...args);\n};\n\nexport const base64ToArrayBuffer = (b64: string) => Uint8Array.from(atob(b64), (c) => c.charCodeAt(0));\n","// src/activity.ts\nimport { isVisible, onDoc, on } from './utils';\n\nlet lastActivity = Date.now();\nlet unsub: Array<() => void> = [];\n\nexport const getLastActivity = () => lastActivity;\n\nexport const startActivityTracking = () => {\n stopActivityTracking();\n const touch = () => { lastActivity = Date.now(); };\n const un1 = onDoc('mousemove', touch);\n const un2 = onDoc('keydown', touch);\n const un3 = onDoc('scroll', touch);\n const un4 = onDoc('touchstart', touch);\n const un5 = on(window, 'focus', touch);\n const un6 = on(window, 'blur', touch);\n const un7 = onDoc('visibilitychange' as any, touch);\n unsub = [un1, un2, un3, un4, un5, un6, un7];\n};\n\nexport const stopActivityTracking = () => {\n unsub.forEach((f) => f());\n unsub = [];\n};\n\nexport const isActive = (idleSec: number) => {\n const idleMs = idleSec * 1000;\n return isVisible() && (Date.now() - lastActivity) < idleMs;\n};\n","// src/antifraud.ts\nconst LS_KEY = 'poulet_leader_session';\nlet leader = false;\n\nexport const becomeLeaderIfFree = (sessionId: string): boolean => {\n const current = localStorage.getItem(LS_KEY);\n if (!current) {\n localStorage.setItem(LS_KEY, sessionId);\n leader = true;\n return true;\n }\n leader = current === sessionId;\n return leader;\n};\n\nexport const relinquishLeadership = (sessionId: string) => {\n const current = localStorage.getItem(LS_KEY);\n if (current === sessionId) {\n localStorage.removeItem(LS_KEY);\n }\n leader = false;\n};\n\nexport const isLeader = () => leader;\n\nexport const handleStorageLeadership = (sessionId: string, onChange: (isLeader: boolean)=>void) => {\n const listener = (e: StorageEvent) => {\n if (e.key !== LS_KEY) return;\n const now = localStorage.getItem(LS_KEY);\n const newLeader = now === sessionId || !now;\n if (!now) { // try claim\n localStorage.setItem(LS_KEY, sessionId);\n onChange(true);\n leader = true;\n } else {\n leader = now === sessionId;\n onChange(leader);\n }\n };\n window.addEventListener('storage', listener);\n return () => window.removeEventListener('storage', listener);\n};\n\nexport const fingerprintLite = () => ({\n ua: navigator.userAgent,\n tz: Intl.DateTimeFormat().resolvedOptions().timeZone ?? 'UTC',\n dpr: window.devicePixelRatio || 1,\n});\n","// src/consent.ts\nimport type { ConsentState } from './types';\n\nlet analyticsAllowed = false;\nlet replayAllowed = false;\nlet state: ConsentState = 'pending';\nlet dntRespected = true;\n\nexport const setDNTPolicy = (respect: boolean) => { dntRespected = respect; };\n\nexport const initConsent = (defaultState: ConsentState) => {\n state = defaultState;\n if (dntRespected && typeof navigator !== 'undefined' && (navigator as any).doNotTrack === '1') {\n analyticsAllowed = false;\n replayAllowed = false;\n state = 'denied';\n }\n};\n\nexport const setConsent = (flags: { analytics?: boolean; replay?: boolean }) => {\n if (typeof flags.analytics === 'boolean') {\n analyticsAllowed = flags.analytics;\n state = analyticsAllowed ? 'granted' : 'denied';\n }\n if (typeof flags.replay === 'boolean') replayAllowed = flags.replay;\n};\n\nexport const consentFlags = () => ({ analytics: analyticsAllowed, replay: replayAllowed, state });\nexport const analyticsOn = () => analyticsAllowed === true;\nexport const replayOn = () => replayAllowed === true;\n","// src/transport.ts\nimport { base64ToArrayBuffer, filterPII, log } from './utils';\nimport type { OutgoingPayload } from './types';\n\ntype TransportConfig = {\n endpoint: string;\n projectKey: string;\n hmacPublicKey?: string; // base64; optional\n debug?: boolean;\n};\n\nlet cfg: TransportConfig;\nlet queue: OutgoingPayload[] = [];\nlet flushing = false;\n\nasync function sign(body: string): Promise<string | undefined> {\n if (!cfg.hmacPublicKey || !('crypto' in window)) return undefined;\n try {\n const keyData = base64ToArrayBuffer(cfg.hmacPublicKey);\n const key = await crypto.subtle.importKey('raw', keyData, { name: 'HMAC', hash: 'SHA-256' }, false, ['sign']);\n const sig = await crypto.subtle.sign('HMAC', key, new TextEncoder().encode(body));\n return btoa(String.fromCharCode(...new Uint8Array(sig)));\n } catch {\n return undefined;\n }\n}\n\nasync function postBatch(items: OutgoingPayload[]) {\n const sanitized = items.map((i) => filterPII(i));\n const body = JSON.stringify({ projectKey: cfg.projectKey, items: sanitized });\n const sig = await sign(body);\n\n // Try Beacon first\n if (navigator.sendBeacon && !cfg.debug) {\n const headers = { type: 'application/json' };\n const blob = new Blob([body], headers);\n const ok = navigator.sendBeacon(cfg.endpoint + '/ingest', blob);\n if (ok) return true;\n }\n\n // Fallback fetch\n const res = await fetch(cfg.endpoint + '/ingest', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json', ...(sig ? { 'x-signature': sig } : {}) },\n body\n });\n return res.ok;\n}\n\nexport function initTransport(config: TransportConfig) {\n cfg = config;\n window.addEventListener('online', flush);\n setInterval(flush, 5000);\n}\n\nexport function enqueue(payload: OutgoingPayload) {\n queue.push(payload);\n if (queue.length >= 10) void flush();\n}\n\nexport async function flush() {\n if (flushing || queue.length === 0) return;\n flushing = true;\n try {\n const batch = queue.splice(0, 20);\n const ok = await postBatch(batch);\n if (!ok) {\n // put back\n queue.unshift(...batch);\n log('flush failed, will retry');\n }\n } catch (e) {\n log('flush error', e);\n } finally {\n flushing = false;\n }\n}\n","// src/core.ts\nimport { jitterMs, log, now } from './utils';\nimport { startActivityTracking, stopActivityTracking, isActive, getLastActivity } from './activity';\nimport { becomeLeaderIfFree, handleStorageLeadership, relinquishLeadership, isLeader, fingerprintLite } from './antifraud';\nimport { analyticsOn, consentFlags } from './consent';\nimport { initTransport, enqueue, flush } from './transport';\nimport type { Config, SessionState, HeartbeatPayload, SessionStart, SessionEnd } from './types';\n\nlet config: Required<Config>;\nlet session: SessionState | null = null;\nlet hbTimer: number | null = null;\nlet unStorage: (() => void) | undefined;\n\nconst DEFAULTS: Required<Config> = {\n projectKey: '',\n endpoint: '',\n consent: { default: 'pending' },\n user: {},\n billing: { heartbeatSec: 15, idleSec: 60, maxHoursPerDay: 6 },\n privacy: { piiFilter: true, dntRespect: true, countryHint: 'FR' },\n security: { hmacPublicKey: undefined as any },\n features: { bugReporter: true, replay: false, sentryBridge: false },\n sampling: { heartbeats: 1, events: 1, bugs: 1 },\n debug: false,\n};\n\nexport function configure(cfg: Config) {\n config = { ...DEFAULTS, ...cfg, consent: { ...DEFAULTS.consent, ...cfg.consent } } as Required<Config>;\n (window as any).__POULET_DEBUG__ = !!config.debug;\n initTransport({\n endpoint: config.endpoint,\n projectKey: config.projectKey,\n hmacPublicKey: config.security.hmacPublicKey,\n debug: config.debug,\n });\n}\n\nexport function openSession() {\n if (session) return;\n const id = crypto.randomUUID();\n const fp = fingerprintLite();\n session = {\n sessionId: id,\n startedAt: now(),\n lastActivityAt: now(),\n active: true,\n leader: becomeLeaderIfFree(id),\n };\n if (unStorage) unStorage();\n unStorage = handleStorageLeadership(id, (lead) => {\n if (session) session.leader = lead;\n });\n\n startActivityTracking();\n\n const startPayload: SessionStart = {\n type: 'session.start',\n sessionId: id,\n ts: now(),\n projectKey: config.projectKey,\n ua: fp.ua,\n tz: fp.tz,\n dpr: fp.dpr,\n consentFlags: { analytics: analyticsOn(), replay: false },\n };\n enqueue(startPayload);\n scheduleHeartbeats();\n log('session opened', id);\n}\n\nexport function closeSession(reason: SessionEnd['reason']) {\n if (!session) return;\n stopHeartbeats();\n stopActivityTracking();\n relinquishLeadership(session.sessionId);\n const endPayload: SessionEnd = { type: 'session.end', sessionId: session.sessionId, ts: now(), reason };\n enqueue(endPayload);\n void flush();\n if (unStorage) unStorage();\n session = null;\n log('session closed', reason);\n}\n\nfunction scheduleHeartbeats() {\n stopHeartbeats();\n const loop = () => {\n if (!session) return;\n if (!analyticsOn()) return; // consent required\n // @ts-ignore\n const idle = (now() - getLastActivity()) >= config.billing.idleSec * 1000;\n const vis = document.visibilityState === 'visible';\n const active = vis && !idle && session.leader;\n const fp = fingerprintLite();\n\n // @ts-ignore\n if (Math.random() <= config.sampling.heartbeats && active) {\n const hb: HeartbeatPayload = {\n type: 'heartbeat',\n sessionId: session.sessionId,\n ts: now(),\n active: true,\n vis,\n idle: false,\n jitter: Math.random(),\n ua: fp.ua,\n tz: fp.tz,\n dpr: fp.dpr,\n purpose: 'billing',\n };\n enqueue(hb);\n }\n\n // @ts-ignore\n const next = jitterMs(config.billing.heartbeatSec * 1000, 0.1);\n hbTimer = window.setTimeout(loop, next);\n };\n // @ts-ignore\n hbTimer = window.setTimeout(loop, jitterMs(config.billing.heartbeatSec * 1000, 0.1));\n}\n\nfunction stopHeartbeats() {\n if (hbTimer) {\n clearTimeout(hbTimer);\n hbTimer = null;\n }\n}\n\nexport const getSessionIdSafe = () => session?.sessionId ?? null;\n","// src/bug.ts\nimport { enqueue } from './transport';\nimport type { BugPayload } from './types';\nimport { now } from './utils';\nimport { getSessionIdSafe } from './core';\n\nexport function reportBug(payload: {\n title: string; description?: string;\n severity?: 'blocker'|'major'|'minor'|'ux';\n attachments?: Blob[];\n}) {\n const sessionId = getSessionIdSafe();\n if (!sessionId) return;\n const p: BugPayload = {\n type: 'bug',\n sessionId,\n ts: now(),\n title: payload.title,\n description: payload.description,\n severity: payload.severity,\n hasCapture: !!(payload.attachments && payload.attachments.length > 0),\n purpose: 'diagnostics'\n };\n enqueue(p);\n // NOTE: upload des pièces jointes = hors scope core (peut passer par un autre endpoint)\n}\n","// src/index.ts\nimport { configure, openSession, closeSession, getSessionIdSafe } from './core';\nimport { setConsent as _setConsent, initConsent, setDNTPolicy, consentFlags } from './consent';\nimport { enqueue } from './transport';\nimport type { Config, EventPayload } from './types';\nimport { now } from './utils';\nexport * from './types';\nexport { reportBug } from './bug';\n\nlet initialized = false;\n\nexport function init(cfg: Config) {\n if (initialized) return;\n setDNTPolicy(cfg.privacy?.dntRespect ?? true);\n initConsent(cfg.consent?.default ?? 'pending');\n configure(cfg);\n // ouverture paresseuse : dès qu’il y a visibilité/activité\n if (document.visibilityState === 'visible') openSession();\n document.addEventListener('visibilitychange', () => {\n if (document.visibilityState === 'visible') openSession();\n });\n // Flush/close sur pagehide\n addEventListener('pagehide', () => closeSession('pagehide'));\n initialized = true;\n}\n\nexport function setConsent(flags: { analytics?: boolean; replay?: boolean }) {\n _setConsent(flags);\n if (document.visibilityState === 'visible') openSession();\n}\n\nexport function trackEvent(name: string, props?: Record<string, unknown>) {\n const sessionId = getSessionIdSafe();\n if (!sessionId) return;\n const ev: EventPayload = {\n type: 'event',\n sessionId,\n ts: now(),\n name,\n props,\n purpose: 'diagnostics',\n };\n enqueue(ev);\n}\n\nexport function shutdown() {\n closeSession('shutdown');\n}\n\nexport function getSessionId() {\n return getSessionIdSafe();\n}\n\nexport function forgetMe() {\n // côté core : rien de persistant par défaut (queue en mémoire).\n // si tu ajoutes IndexedDB/localStorage pour queue offline, purge ici.\n // Pour l’exemple, on ne stocke pas persistantement.\n closeSession('shutdown');\n}\n\nexport const _consentFlags = consentFlags;\n"]}
|
package/dist/react.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{createContext
|
|
1
|
+
import {createContext,useContext,useEffect}from'react';import {jsx}from'react/jsx-runtime';var s=()=>Date.now();var P=(e,t,n)=>(e.addEventListener(t,n,{passive:true}),()=>e.removeEventListener(t,n)),f=(e,t)=>(document.addEventListener(e,t,{passive:true}),()=>document.removeEventListener(e,t));var E=(e,t=.1)=>{let n=e*t;return e+(Math.random()*2-1)*n},I=e=>{if(!e||typeof e!="object")return e;let t=["email","phone","password","ssn"],n=Array.isArray(e)?[]:{};for(let o of Object.keys(e)){if(t.includes(o.toLowerCase()))continue;let i=e[o];n[o]=typeof i=="object"?I(i):i;}return n},y=(...e)=>{window.__POULET_DEBUG__&&console.log("[poulet]",...e);},O=e=>Uint8Array.from(atob(e),t=>t.charCodeAt(0));var F=Date.now(),A=[],q=()=>F,H=()=>{L();let e=()=>{F=Date.now();},t=f("mousemove",e),n=f("keydown",e),o=f("scroll",e),i=f("touchstart",e),c=P(window,"focus",e),g=P(window,"blur",e),_=f("visibilitychange",e);A=[t,n,o,i,c,g,_];},L=()=>{A.forEach(e=>e()),A=[];};var u="poulet_leader_session",d=false,z=e=>{let t=localStorage.getItem(u);return t?(d=t===e,d):(localStorage.setItem(u,e),d=true,true)},N=e=>{localStorage.getItem(u)===e&&localStorage.removeItem(u),d=false;};var V=(e,t)=>{let n=o=>{if(o.key!==u)return;let i=localStorage.getItem(u);i?(d=i===e,t(d)):(localStorage.setItem(u,e),t(true),d=true);};return window.addEventListener("storage",n),()=>window.removeEventListener("storage",n)},T=()=>{var e;return {ua:navigator.userAgent,tz:(e=Intl.DateTimeFormat().resolvedOptions().timeZone)!=null?e:"UTC",dpr:window.devicePixelRatio||1}};var w=false,G=true,J=e=>{G=e;},Y=e=>{G&&typeof navigator!="undefined"&&navigator.doNotTrack==="1"&&(w=false,"denied");},Z=e=>{typeof e.analytics=="boolean"&&(w=e.analytics,w?"granted":"denied"),typeof e.replay=="boolean"&&(e.replay);};var K=()=>w===true;var p,m=[],D=false;async function ie(e){if(!(!p.hmacPublicKey||!("crypto"in window)))try{let t=O(p.hmacPublicKey),n=await crypto.subtle.importKey("raw",t,{name:"HMAC",hash:"SHA-256"},!1,["sign"]),o=await crypto.subtle.sign("HMAC",n,new TextEncoder().encode(e));return btoa(String.fromCharCode(...new Uint8Array(o)))}catch(t){return}}async function re(e){let t=e.map(c=>I(c)),n=JSON.stringify({projectKey:p.projectKey,items:t}),o=await ie(n);if(navigator.sendBeacon&&!p.debug){let c={type:"application/json"},g=new Blob([n],c);if(navigator.sendBeacon(p.endpoint+"/ingest",g))return true}return (await fetch(p.endpoint+"/ingest",{method:"POST",headers:{"Content-Type":"application/json",...o?{"x-signature":o}:{}},body:n})).ok}function Q(e){p=e,window.addEventListener("online",x),setInterval(x,5e3);}function l(e){m.push(e),m.length>=10&&x();}async function x(){if(!(D||m.length===0)){D=true;try{let e=m.splice(0,20);await re(e)||(m.unshift(...e),y("flush failed, will retry"));}catch(e){y("flush error",e);}finally{D=false;}}}var a,r=null,b=null,v,X={projectKey:"",endpoint:"",consent:{default:"pending"},user:{},billing:{heartbeatSec:15,idleSec:60,maxHoursPerDay:6},privacy:{piiFilter:true,dntRespect:true,countryHint:"FR"},security:{hmacPublicKey:void 0},features:{bugReporter:true,replay:false,sentryBridge:false},sampling:{heartbeats:1,events:1,bugs:1},debug:false};function $(e){a={...X,...e,consent:{...X.consent,...e.consent}},window.__POULET_DEBUG__=!!a.debug,Q({endpoint:a.endpoint,projectKey:a.projectKey,hmacPublicKey:a.security.hmacPublicKey,debug:a.debug});}function S(){if(r)return;let e=crypto.randomUUID(),t=T();r={sessionId:e,startedAt:s(),lastActivityAt:s(),active:true,leader:z(e)},v&&v(),v=V(e,o=>{r&&(r.leader=o);}),H();let n={type:"session.start",sessionId:e,ts:s(),projectKey:a.projectKey,ua:t.ua,tz:t.tz,dpr:t.dpr,consentFlags:{analytics:K(),replay:false}};l(n),se(),y("session opened",e);}function j(e){if(!r)return;ee(),L(),N(r.sessionId);let t={type:"session.end",sessionId:r.sessionId,ts:s(),reason:e};l(t),x(),v&&v(),r=null,y("session closed",e);}function se(){ee();let e=()=>{if(!r||!K())return;let t=s()-q()>=a.billing.idleSec*1e3,n=document.visibilityState==="visible",o=n&&!t&&r.leader,i=T();if(Math.random()<=a.sampling.heartbeats&&o){let g={type:"heartbeat",sessionId:r.sessionId,ts:s(),active:true,vis:n,idle:false,jitter:Math.random(),ua:i.ua,tz:i.tz,dpr:i.dpr,purpose:"billing"};l(g);}let c=E(a.billing.heartbeatSec*1e3,.1);b=window.setTimeout(e,c);};b=window.setTimeout(e,E(a.billing.heartbeatSec*1e3,.1));}function ee(){b&&(clearTimeout(b),b=null);}var h=()=>{var e;return (e=r==null?void 0:r.sessionId)!=null?e:null};function C(e){let t=h();if(!t)return;let n={type:"bug",sessionId:t,ts:s(),title:e.title,description:e.description,severity:e.severity,hasCapture:!!(e.attachments&&e.attachments.length>0),purpose:"diagnostics"};l(n);}var te=false;function ne(e){var t,n,o,i;te||(J((n=(t=e.privacy)==null?void 0:t.dntRespect)!=null?n:true),Y((i=(o=e.consent)==null?void 0:o.default)!=null?i:"pending"),$(e),document.visibilityState==="visible"&&S(),document.addEventListener("visibilitychange",()=>{document.visibilityState==="visible"&&S();}),addEventListener("pagehide",()=>j("pagehide")),te=true);}function M(e){Z(e),document.visibilityState==="visible"&&S();}function B(e,t){let n=h();if(!n)return;let o={type:"event",sessionId:n,ts:s(),name:e,props:t,purpose:"diagnostics"};l(o);}function R(){j("shutdown");}function U(){return h()}var oe=createContext({trackEvent:B,reportBug:C,setConsent:M,shutdown:R,getSessionId:U}),ze=({config:e,children:t})=>(useEffect(()=>{ne(e);},[]),jsx(oe.Provider,{value:{trackEvent:B,reportBug:C,setConsent:M,shutdown:R,getSessionId:U},children:t})),Ne=()=>useContext(oe);export{ze as MetricsProvider,Ne as useMetrics};//# sourceMappingURL=react.js.map
|
|
2
2
|
//# sourceMappingURL=react.js.map
|