@ianmenethil/zp-devicefp 0.1.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +134 -0
- package/dist/cdn/zp.dfp.esm.js +1449 -0
- package/dist/cdn/zp.dfp.js +1453 -0
- package/dist/cdn/zp.dfp.manifest.json +34 -0
- package/dist/cdn/zp.dfp.min.js +1 -0
- package/dist/cdn/zp.dfp.obf.js +1 -0
- package/dist/npm/index.cjs +1478 -0
- package/dist/npm/index.d.ts +101 -0
- package/dist/npm/index.mjs +1449 -0
- package/docs/architecture.md +40 -0
- package/docs/privacy.md +20 -0
- package/docs/testing.md +32 -0
- package/package.json +75 -0
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@ianmenethil/zp-devicefp",
|
|
3
|
+
"version": "2.2.0",
|
|
4
|
+
"tag": "@ianmenethil/zp-devicefp@2.2.0",
|
|
5
|
+
"npmIdentifier": "ianmenethil-zp-devicefp-2.2.0",
|
|
6
|
+
"manifestPath": "ianmenethil-zp-devicefp-2.2.0-manifest.json",
|
|
7
|
+
"buildTimestamp": "2026-05-14T12:23:02.107Z",
|
|
8
|
+
"files": [
|
|
9
|
+
{
|
|
10
|
+
"file": "zp.dfp.js",
|
|
11
|
+
"hash": "75ab8712080abbc186ce9af80ca159c0a9ad4cb17a84ad9f5bf9ac1c92ec591b3d9d683a9810a214cf920a93aae4dd1d",
|
|
12
|
+
"hashSri": "sha384-dauHEggKu8GGzpr4DKFZwKmtTLF6hK2fW/msHJLsWRs9nWg6mBCiFM+SCpOq5N0d",
|
|
13
|
+
"size": 45602
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"file": "zp.dfp.min.js",
|
|
17
|
+
"hash": "84397eb56262a10bbc5e69f87d1785703002c1130e786d9f6776486a4894fbe93855376c6f2872c638439c1cd4cafff0",
|
|
18
|
+
"hashSri": "sha384-hDl+tWJioQu8Xmn4fReFcDACwRMOeG2fZ3ZIakiU++k4VTdsbyhyxjhDnBzUyv/w",
|
|
19
|
+
"size": 20680
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"file": "zp.dfp.obf.js",
|
|
23
|
+
"hash": "1fba7385337c7f16743fbdd87310b904bd7646d49bc69a2a3e31613bbc74a874d7a6cf3483330bb1d9f49f798fd44c8f",
|
|
24
|
+
"hashSri": "sha384-H7pzhTN8fxZ0P73YcxC5BL12RtSbxpoqPjFhO7x0qHTXps80gzMLsdn0n3mP1EyP",
|
|
25
|
+
"size": 217962
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"file": "zp.dfp.esm.js",
|
|
29
|
+
"hash": "6ee621312a8eb62a9fb6542d99a7cef7a6b7f70a9a790d15eb96cdcd2740294b23601607058ff112b52d0ebe1fa3dfa2",
|
|
30
|
+
"hashSri": "sha384-buYhMSqOtiqftlQtmafO96a39wqaeQ0V65bNzSdAKUsjYBYHBY/xErUtDr4fo9+i",
|
|
31
|
+
"size": 42651
|
|
32
|
+
}
|
|
33
|
+
]
|
|
34
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";(()=>{function D(){return{global:globalThis,navigator:typeof navigator>"u"?void 0:navigator,document:typeof document>"u"?void 0:document,screen:typeof screen>"u"?void 0:screen,location:typeof location>"u"?void 0:location,fetch:typeof fetch>"u"?void 0:fetch,crypto:globalThis.crypto,performance:typeof performance>"u"?void 0:performance,intl:typeof Intl>"u"?void 0:Intl}}function s(e){return e.performance?.now?.()??Date.now()}function K(e){return!!e.document?.createElement}function _(e){return!!e.document?.createElement?.("canvas").getContext}function Ne(e){let o=e;return o.OfflineAudioContext??o.webkitOfflineAudioContext}var X={name:"audio",tier:"core",supportsSync:!1,async collect(e){let o=s(e.env),t=Ne(e.env.global);if(!t)return{status:"unsupported",durationMs:s(e.env)-o};try{let n=new t(1,5e3,44100),r=n.createOscillator(),a=n.createDynamicsCompressor();r.type="triangle",r.frequency.value=1e4,a.threshold.value=-50,a.knee.value=40,a.ratio.value=12,a.attack.value=0,a.release.value=.25,r.connect(a),a.connect(n.destination),r.start(0);let i=await n.startRendering(),l=i.getChannelData(0),c=0;for(let u=4500;u<l.length;u+=1)c+=Math.abs(l[u]);return{status:"ok",durationMs:s(e.env)-o,value:{sampleRate:i.sampleRate,length:i.length,signalValue:Number(c.toFixed(6))}}}catch(n){return{status:"blocked",durationMs:s(e.env)-o,error:n instanceof Error?n.message:String(n)}}}};function Te(e){let o=e.createElement("canvas");o.width=280,o.height=80;let t=o.getContext("2d");if(!t)throw new Error("2D canvas context unavailable");return t.fillStyle="#f60",t.fillRect(8,10,120,60),t.fillStyle="#069",t.font="20px Arial",t.fillText("Browser FP",12,40),t.strokeStyle="rgba(102, 204, 0, 0.7)",t.beginPath(),t.arc(180,40,24,0,Math.PI*2),t.stroke(),{dataUrl:o.toDataURL(),winding:t.isPointInPath(1,1,"evenodd")}}var Y={name:"canvas",tier:"core",supportsSync:!0,async collect(e){return this.collectSync(e)},collectSync(e){let o=s(e.env),t=e.env.document;if(!t||!_(e.env))return{status:"unsupported",durationMs:s(e.env)-o};try{return{status:"ok",durationMs:s(e.env)-o,value:Te(t)}}catch(n){return{status:"error",durationMs:s(e.env)-o,error:n instanceof Error?n.message:String(n)}}}};var H=["ua","uaHints","locale","screen","hardware","storage","fonts","canvas","webgl","audio"],Z=["mediaDevices","permissions","webrtc","frameInfo","networkInfo","paymentSupport","referrerInfo","navigationInfo","riskSignals"],$=["ua","locale","screen","hardware","storage","fonts","canvas","webgl","frameInfo","networkInfo","paymentSupport","referrerInfo","navigationInfo"];var J=["Arial","Helvetica Neue","Times New Roman","Georgia","Courier New","Trebuchet MS","Verdana","Tahoma","Impact","Comic Sans MS"],Q=["geolocation","notifications","camera","microphone"],ee=["architecture","bitness","formFactors","fullVersionList","model","platform","platformVersion","wow64"];var De=["monospace","sans-serif","serif"],_e="mmmmmmmmmmlli";function te(e,o,t){let n=e.createElement("span");n.textContent=_e,n.style.position="absolute",n.style.left="-9999px",n.style.top="-9999px",n.style.fontSize="72px",n.style.fontFamily=`${o}, ${t}`,e.body.appendChild(n);let r=n.offsetWidth;return e.body.removeChild(n),r}function Ie(e){let o=[];for(let t of J){let n=!1;for(let r of De){let a=te(e,"",r);if(te(e,t,r)!==a){n=!0;break}}n&&o.push(t)}return o}var ne={name:"fonts",tier:"core",supportsSync:!0,async collect(e){return this.collectSync(e)},collectSync(e){let o=s(e.env),t=e.env.document;if(!t||!K(e.env))return{status:"unsupported",durationMs:s(e.env)-o};try{let n=Ie(t);return{status:"ok",durationMs:s(e.env)-o,value:{detectedFonts:n,fontCount:n.length}}}catch(n){return{status:"error",durationMs:s(e.env)-o,error:n instanceof Error?n.message:String(n)}}}};var oe={name:"frameInfo",tier:"extended",supportsSync:!0,async collect(e){return this.collectSync(e)},collectSync(e){let o=s(e.env),t=e.env.document;if(!t)return{status:"unsupported",durationMs:s(e.env)-o};try{let n=t.getElementsByTagName("iframe"),r=[];for(let i of n){let l=i.src||"";try{r.push(new URL(l).hostname)}catch{r.push("unknown")}}let a=e.env.global;return{status:"ok",durationMs:s(e.env)-o,value:{iframesCount:n.length,isTopLevel:a===a.top,iframeDomains:r}}}catch(n){return{status:"error",durationMs:s(e.env)-o,error:n instanceof Error?n.message:String(n)}}}};var re={name:"hardware",tier:"core",supportsSync:!0,async collect(e){return this.collectSync(e)},collectSync(e){let o=s(e.env),t=e.env.navigator;return t?{status:"ok",durationMs:s(e.env)-o,value:{hardwareConcurrency:t.hardwareConcurrency,deviceMemory:t.deviceMemory,platform:t.platform,maxTouchPoints:t.maxTouchPoints}}:{status:"unsupported",durationMs:s(e.env)-o}}};var se={name:"locale",tier:"core",supportsSync:!0,async collect(e){return this.collectSync(e)},collectSync(e){let o=s(e.env),t=e.env.navigator,n=e.env.intl;if(!t||!n)return{status:"unsupported",durationMs:s(e.env)-o};let r=new n.DateTimeFormat,a=r.resolvedOptions(),i=new n.NumberFormat(t.language),l=typeof n.RelativeTimeFormat=="function"?new n.RelativeTimeFormat(t.language,{numeric:"auto"}):void 0,c=new Date(Date.UTC(2024,0,2,3,4,5));return{status:"ok",durationMs:s(e.env)-o,value:{language:t.language,languages:t.languages,locale:a.locale,calendar:a.calendar,numberingSystem:a.numberingSystem,timeZone:a.timeZone,hourCycle:a.hourCycle,timeZoneOffsetMinutes:c.getTimezoneOffset(),formattedNumber:i.format(123456.789),formattedDate:r.format(c),formattedRelativeDay:l?.format(-1,"day")}}}};var ae={name:"mediaDevices",tier:"extended",supportsSync:!1,async collect(e){let o=s(e.env),t=e.env.navigator?.mediaDevices,n=e.env.global;if(!n.isSecureContext)return{status:"blocked",durationMs:s(e.env)-o,error:"Media device enumeration requires a secure context."};if(n.document?.visibilityState!=="visible")return{status:"blocked",durationMs:s(e.env)-o,error:"Media device enumeration requires a visible document."};if(!t?.enumerateDevices)return{status:"unsupported",durationMs:s(e.env)-o};try{let a=(await t.enumerateDevices()).reduce((i,l)=>(i[l.kind]=(i[l.kind]??0)+1,i),{});return{status:"ok",durationMs:s(e.env)-o,value:a}}catch(r){return{status:"blocked",durationMs:s(e.env)-o,error:r instanceof Error?r.message:String(r)}}}};var ie={name:"navigationInfo",tier:"extended",supportsSync:!0,async collect(e){return this.collectSync(e)},collectSync(e){let o=s(e.env),t=e.env.performance;if(!t)return{status:"unsupported",durationMs:s(e.env)-o};try{let n=null,a=t.getEntriesByType("navigation")?.[0];return a!==void 0&&(n=a.type),n===null&&(n=t.navigation.type),{status:"ok",durationMs:s(e.env)-o,value:{navigationType:n}}}catch(n){return{status:"error",durationMs:s(e.env)-o,error:n instanceof Error?n.message:String(n)}}}};var le={name:"networkInfo",tier:"extended",supportsSync:!0,async collect(e){return this.collectSync(e)},collectSync(e){let o=s(e.env),t=e.env.navigator;if(!t)return{status:"unsupported",durationMs:s(e.env)-o};let n=t.connection??t.mozConnection??t.webkitConnection??null;if(!n)return{status:"unsupported",durationMs:s(e.env)-o};let r=n;return{status:"ok",durationMs:s(e.env)-o,value:{effectiveType:r.effectiveType??null,downlink:r.downlink??null,rtt:r.rtt??null,saveData:typeof r.saveData=="boolean"?r.saveData:null}}}};var ce={name:"paymentSupport",tier:"extended",supportsSync:!0,async collect(e){return this.collectSync(e)},collectSync(e){let o=s(e.env),t=e.env.global;return{status:"ok",durationMs:s(e.env)-o,value:{paymentRequest:t.PaymentRequest!==void 0}}}};var ue={name:"permissions",tier:"extended",supportsSync:!1,async collect(e){let o=s(e.env),t=e.env.navigator?.permissions;if(!t?.query)return{status:"unsupported",durationMs:s(e.env)-o};try{let n=await Promise.all(Q.map(async r=>{try{let a=await t.query({name:r});return[r,a.state]}catch{return[r,"unsupported"]}}));return{status:"ok",durationMs:s(e.env)-o,value:Object.fromEntries(n)}}catch(n){return{status:"blocked",durationMs:s(e.env)-o,error:n instanceof Error?n.message:String(n)}}}};var pe={name:"referrerInfo",tier:"extended",supportsSync:!0,async collect(e){return this.collectSync(e)},collectSync(e){let o=s(e.env),t=e.env.document;return t?{status:"ok",durationMs:s(e.env)-o,value:{referrer:t.referrer}}:{status:"unsupported",durationMs:s(e.env)-o}}};var me={name:"riskSignals",tier:"extended",supportsSync:!1,async collect(e){let o=s(e.env),t=e.env.navigator,n=e.env.global;if(!t)return{status:"unsupported",durationMs:s(e.env)-o};try{let r=t.userAgent,a=t.webdriver?!0:null,i=[];r.includes("HeadlessChrome")&&i.push("headless-ua"),r.includes("Chrome")&&typeof n.chrome!="object"&&i.push("missing-chrome-object"),(n.outerHeight===0||n.outerWidth===0)&&i.push("zero-outer-dimensions"),r.includes("Chrome")&&!r.includes("Mobile")&&t.plugins.length===0&&i.push("no-plugins-on-desktop-chrome"),Array.isArray(t.languages)&&t.languages.length===0&&i.push("empty-languages");let l=null,c=t.userAgentData;if(c&&"getHighEntropyValues"in c)try{let d=c,g=r.includes("Win")?"Windows":r.includes("Mac")?"macOS":r.includes("Linux")?"Linux":null,p=d.platform||null;l=g===null||p===null?null:g===p}catch{l=null}let u=typeof Notification<"u"?Notification.permission:null,y=null;if(typeof t.permissions?.query=="function")try{(await t.permissions.query({name:"notifications"})).state==="denied"&&Notification.permission==="default"&&(y=!0)}catch{y=null}let f=e.env.performance?.timeOrigin?Math.round(Date.now()-e.env.performance.timeOrigin):null;return{status:"ok",durationMs:s(e.env)-o,value:{webdriver:a,headlessHints:i,uaConsistency:l,notificationPermission:u,permissionsHeadlessHint:y,timeToCaptureMs:f}}}catch(r){return{status:"blocked",durationMs:s(e.env)-o,error:r instanceof Error?r.message:String(r)}}}};function I(e,o){if(typeof e.matchMedia!="function")return"unsupported";try{return e.matchMedia(o).matches}catch{return"unsupported"}}var de={name:"screen",tier:"core",supportsSync:!0,async collect(e){return this.collectSync(e)},collectSync(e){let o=s(e.env),t=e.env.screen,n=e.env.navigator,r=e.env.global;return t?{status:"ok",durationMs:s(e.env)-o,value:{width:t.width,height:t.height,availWidth:t.availWidth,availHeight:t.availHeight,colorDepth:t.colorDepth,pixelDepth:t.pixelDepth,orientationType:t.orientation.type,orientationAngle:t.orientation.angle,maxTouchPoints:n?.maxTouchPoints??0,devicePixelRatio:typeof r.devicePixelRatio=="number"?r.devicePixelRatio:void 0,colorGamutP3:I(r,"(color-gamut: p3)"),prefersReducedMotion:I(r,"(prefers-reduced-motion: reduce)"),prefersContrastMore:I(r,"(prefers-contrast: more)"),forcedColorsActive:I(r,"(forced-colors: active)")}}:{status:"unsupported",durationMs:s(e.env)-o}}};function fe(e,o){try{let t=e[o];if(!t)return"unsupported";let n="__bf_probe__";return t.setItem(n,"1"),t.removeItem(n),"available"}catch{return"blocked"}}var ge={name:"storage",tier:"core",supportsSync:!0,async collect(e){return this.collectSync(e)},collectSync(e){let o=s(e.env),t=e.env.navigator,n=e.env.global;return{status:"ok",durationMs:s(e.env)-o,value:{cookiesEnabled:t?.cookieEnabled??!1,localStorage:fe(n,"localStorage"),sessionStorage:fe(n,"sessionStorage"),indexedDb:typeof n.indexedDB>"u"?"unsupported":"available",openDatabase:typeof n.openDatabase>"u"?"unsupported":"available",pdfViewerEnabled:t?.pdfViewerEnabled??!1}}}};var ye={name:"ua",tier:"core",supportsSync:!0,async collect(e){return this.collectSync(e)},collectSync(e){let o=s(e.env),t=e.env.navigator;return t?{status:"ok",durationMs:s(e.env)-o,value:{userAgent:t.userAgent,appVersion:t.appVersion,vendor:t.vendor,platform:t.platform,webdriver:t.webdriver,maxTouchPoints:t.maxTouchPoints,cookieEnabled:t.cookieEnabled,vendorSub:t.vendorSub}}:{status:"unsupported",durationMs:s(e.env)-o}}};var Se={name:"uaHints",tier:"core",supportsSync:!1,async collect(e){let o=s(e.env),t=e.env.navigator?.userAgentData;if(!t)return{status:"unsupported",durationMs:s(e.env)-o};try{let n=t.getHighEntropyValues?await t.getHighEntropyValues([...ee]):void 0;return{status:"ok",durationMs:s(e.env)-o,value:{brands:t.brands??[],mobile:!!t.mobile,platform:t.platform,...n}}}catch(n){return{status:"blocked",durationMs:s(e.env)-o,error:n instanceof Error?n.message:String(n)}}}};function Pe(e){let o=e.createElement("canvas");return o.getContext("webgl")??o.getContext("experimental-webgl")}var ve={name:"webgl",tier:"core",supportsSync:!0,async collect(e){return this.collectSync(e)},collectSync(e){let o=s(e.env),t=e.env.document;if(!t||!_(e.env))return{status:"unsupported",durationMs:s(e.env)-o};let n=Pe(t);if(!n)return{status:"unsupported",durationMs:s(e.env)-o};let r=n.getExtension("WEBGL_debug_renderer_info"),a=r?n.getParameter(r.UNMASKED_RENDERER_WEBGL):n.getParameter(n.RENDERER),i=r?n.getParameter(r.UNMASKED_VENDOR_WEBGL):n.getParameter(n.VENDOR);return{status:"ok",durationMs:s(e.env)-o,value:{vendor:i,renderer:a,version:n.getParameter(n.VERSION),shadingLanguageVersion:n.getParameter(n.SHADING_LANGUAGE_VERSION),maxTextureSize:n.getParameter(n.MAX_TEXTURE_SIZE),maxViewportDims:n.getParameter(n.MAX_VIEWPORT_DIMS),extensions:n.getSupportedExtensions()??[]}}}};function Ae(e){let o=new Set,t=new Set;for(let n of e.split(/\r?\n/)){if(n.startsWith("a=rtpmap:")){let r=n.slice(9);o.add(r.split(" ",2)[1]??n)}n.startsWith("a=extmap:")&&t.add(n.slice(9))}return{codecs:[...o].sort(),extmaps:[...t].sort()}}var he={name:"webrtc",tier:"extended",supportsSync:!1,async collect(e){let o=s(e.env),t=e.env.global,n=t.RTCPeerConnection??t.webkitRTCPeerConnection;if(!n)return{status:"unsupported",durationMs:s(e.env)-o};let r;try{r=new n,r.createDataChannel("bf");let a=await r.createOffer(),i=Ae(a.sdp??"");return{status:"ok",durationMs:s(e.env)-o,value:i}}catch(a){return{status:"blocked",durationMs:s(e.env)-o,error:a instanceof Error?a.message:String(a)}}finally{r?.close()}}};var Oe=[ye,Se,se,de,re,ge,ne,Y,ve,X,ae,ue,he,oe,le,ce,pe,ie,me],V=new Map(Oe.map(e=>[e.name,e]));function P(e){return e&&typeof e=="object"?e:void 0}function U(e){return typeof e=="string"&&e.length>0?e:void 0}function E(e){return typeof e=="number"&&Number.isFinite(e)?e:void 0}function we(e){let o=[],t=[],n=P(e.ua?.value),r=P(e.uaHints?.value),a=P(e.hardware?.value),i=P(e.screen?.value),l=U(n?.userAgent)?.toLowerCase()??"",c=U(n?.platform)?.toLowerCase()??"",u=U(r?.platform)?.toLowerCase()??"",y=!!n?.webdriver,f=E(i?.maxTouchPoints)??E(n?.maxTouchPoints)??0,d=E(i?.width)??0,g=E(i?.height)??0,p=E(a?.deviceMemory);y&&t.push("navigator_webdriver"),l.includes("headless")&&t.push("headless_user_agent"),c&&u&&!c.includes(u)&&!u.includes(c)&&o.push("ua_platform_mismatch"),l.includes("iphone")&&f===0&&o.push("touch_claim_without_touch_points"),l.includes("android")&&d>0&&d>=1600&&o.push("mobile_ua_desktop_screen"),l.includes("windows")&&c.includes("mac")&&o.push("windows_ua_mac_platform"),p!==void 0&&(p<.25||p>64)&&o.push("implausible_device_memory"),d>0&&g>0&&d<200&&g<200&&o.push("tiny_screen_geometry");let S=o.length*.12,v=t.length*.18;return{score:Math.max(0,Math.min(1,Number((1-S-v).toFixed(3)))),anomalies:o,automationHints:t}}function xe(e){return Number.isFinite(e)?Number(e.toFixed(6)):e}function B(e){if(e===void 0)return"undefined";if(e===null)return null;if(typeof e=="number")return xe(e);if(typeof e=="bigint")return e.toString();if(typeof e=="boolean"||typeof e=="string")return e;if(Array.isArray(e))return e.map(o=>B(o));if(e instanceof Date)return e.toISOString();if(typeof e=="object"){let o=e,t={};for(let n of Object.keys(o).sort())t[n]=B(o[n]);return t}return String(e)}function Fe(e){return B(e)}function G(e){return JSON.stringify(Fe(e))}var Le={ua:.5,uaHints:.7,locale:.5,screen:.8,hardware:.7,storage:.4,fonts:.9,canvas:1,webgl:1,audio:.9,mediaDevices:.6,permissions:.4,webrtc:.8,frameInfo:.3,networkInfo:.6,paymentSupport:.2,referrerInfo:.3,navigationInfo:.4,riskSignals:.7};function be(e,o){let t=0,n=0;for(let[i,l]of Object.entries(e)){let c=Le[i];if(n+=c,l.status==="ok"){t+=c;continue}if(l.status==="unsupported"||l.status==="blocked"){t+=c*.35;continue}l.status==="timeout"&&(t+=c*.15)}if(n===0)return 0;let a=t/n*(.65+o.score*.35);return Math.max(0,Math.min(1,Number(a.toFixed(3))))}var A=class{listeners=new Map;on(o,t){let n=this.listeners.get(o)??new Set;return n.add(t),this.listeners.set(o,n),()=>{n.delete(t),n.size===0&&this.listeners.delete(o)}}emit(o,t){let n=this.listeners.get(o);if(n)for(let r of n)r(t)}};var He=[1116352408,1899447441,-1245643825,-373957723,961987163,1508970993,-1841331548,-1424204075,-670586216,310598401,607225278,1426881987,1925078388,-2132889090,-1680079193,-1046744716,-459576895,-272742522,264347078,604807628,770255983,1249150122,1555081692,1996064986,-1740746414,-1473132947,-1341970488,-1084653625,-958395405,-710438585,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,-2117940946,-1838011259,-1564481375,-1474664885,-1035236496,-949202525,-778901479,-694614492,-200395387,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,-2067236844,-1933114872,-1866530822,-1538233109,-1090935817,-965641998];function h(e,o){return e>>>o|e<<32-o}function Ve(e){return new TextEncoder().encode(e)}function W(e){let o=Ve(e),t=o.length*8,n=o.length+9+63>>6<<6,r=new Uint8Array(n);r.set(o),r[o.length]=128;let a=new DataView(r.buffer);a.setUint32(n-4,t,!1);let i=1779033703,l=3144134277,c=1013904242,u=2773480762,y=1359893119,f=2600822924,d=528734635,g=1541459225,p=new Uint32Array(64);for(let S=0;S<r.length;S+=64){for(let m=0;m<16;m+=1)p[m]=a.getUint32(S+m*4,!1);for(let m=16;m<64;m+=1){let F=h(p[m-15],7)^h(p[m-15],18)^p[m-15]>>>3,L=h(p[m-2],17)^h(p[m-2],19)^p[m-2]>>>10;p[m]=p[m-16]+F+p[m-7]+L>>>0}let v=i,b=l,C=c,O=u,w=y,N=f,T=d,x=g;for(let m=0;m<64;m+=1){let F=h(w,6)^h(w,11)^h(w,25),L=w&N^~w&T,q=x+F+L+He[m]+p[m]>>>0,ke=h(v,2)^h(v,13)^h(v,22),Re=v&b^v&C^b&C,Me=ke+Re>>>0;x=T,T=N,N=w,w=O+q>>>0,O=C,C=b,b=v,v=q+Me>>>0}i=i+v>>>0,l=l+b>>>0,c=c+C>>>0,u=u+O>>>0,y=y+w>>>0,f=f+N>>>0,d=d+T>>>0,g=g+x>>>0}return[i,l,c,u,y,f,d,g].map(S=>S.toString(16).padStart(8,"0")).join("")}function k(e){return{debug:!1,extended:!1,timeoutMs:1500,...e}}function j(e,o="async"){let t=k(e),n=t.extended?[...H,...Z]:[...H],r=o==="sync"?n.filter(l=>$.includes(l)):n,a=t.include?r.filter(l=>t.include?.includes(l)):r,i=new Set(t.exclude??[]);return a.filter(l=>!i.has(l))}async function Ce(e,o,t){let n=t.endpoint&&e.fetch;if(!n)throw new Error("Fetch is not available in this runtime.");return n(t.endpoint,{method:"POST",headers:{"content-type":"application/json",...t.headers},body:JSON.stringify({fingerprint:o,...t.bodyExtras})})}var R="0.1.0",M=1;function Be(e){return{status:"timeout",durationMs:e,error:"Signal collection timed out."}}async function Ge(e,o,t,n){let r=o.performance?.now?.()??Date.now();if(t.abortSignal?.aborted)return{status:"error",durationMs:0,error:"Collection aborted before signal execution started."};let a=()=>{},i=new Promise(c=>{let u=setTimeout(()=>{c(Be((o.performance?.now?.()??Date.now())-r))},t.timeoutMs);a=()=>clearTimeout(u),t.abortSignal?.addEventListener("abort",()=>{a(),c({status:"error",durationMs:(o.performance?.now?.()??Date.now())-r,error:"Collection aborted."})},{once:!0})}),l=e.collect({env:o,options:t,warn:n});return Promise.race([l,i]).finally(()=>{a()})}function Ee(e,o,t,n){let r={};for(let[c,u]of Object.entries(e))u.value!==void 0&&(r[c]=W(G(u.value)));let a=W(G(Object.keys(r).sort().map(c=>[c,r[c]]))),i=we(e),l=be(e,i);return{schemaVersion:1,libraryVersion:R,thumbprint:a,confidence:l,componentHashes:r,signals:e,antiSpoof:i,warnings:o,diagnostics:{requestedSignals:t,completedSignals:Object.keys(e).sort(),elapsedMs:Number(n.toFixed(3))}}}async function z(e){let o=k(e),t=new A;return{on(n,r){return t.on(n,r)},async collect(n){let r=k({...o,...n}),a=D(),i=j(r,"async"),l={},c=[],u=a.performance?.now?.()??Date.now(),y=(g,p)=>{c.push(g),t.emit("warning",{signal:p,message:g})},f=0;await Promise.all(i.map(async g=>{let p=V.get(g);if(!p){y(`No collector registered for signal "${g}".`,g);return}let S=await Ge(p,a,r,y);l[g]=S,f+=1,t.emit("progress",{completed:f,total:i.length,signal:g,result:S})}));let d=Ee(l,c,i,(a.performance?.now?.()??Date.now())-u);return t.emit("complete",{result:d}),d},collectSync(n){let r=k({...o,...n}),a=D(),i=j(r,"sync"),l={},c=[],u=a.performance?.now?.()??Date.now(),y=(f,d)=>{c.push(f),t.emit("warning",{signal:d,message:f})};for(let f of i){let d=V.get(f);if(!d?.collectSync){y(`Signal "${f}" is not available in synchronous mode.`,f);continue}l[f]=d.collectSync({env:a,options:r,warn:y})}return Ee(l,c,i,(a.performance?.now?.()??Date.now())-u)},upload(n,r){return Ce(D(),n,r)}}}var We={createFingerprintClient:z,LIBRARY_VERSION:R,SCHEMA_VERSION:1};typeof globalThis<"u"&&(globalThis.DeviceFP=We);})();
|