deeplinkit 0.0.0-stage → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +17 -2
- package/index.d.ts +7 -0
- package/index.js +9 -0
- package/package.json +24 -4
package/README.md
CHANGED
|
@@ -1,3 +1,18 @@
|
|
|
1
|
-
#
|
|
1
|
+
# deeplinkit
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Browser JavaScript SDK. Run this on the page visitors open on their phones.
|
|
4
|
+
|
|
5
|
+
```js
|
|
6
|
+
import { Deeplinkit } from 'deeplinkit';
|
|
7
|
+
|
|
8
|
+
const client = new Deeplinkit({
|
|
9
|
+
url: 'https://api.example.com',
|
|
10
|
+
applicationId: 'app_example',
|
|
11
|
+
});
|
|
12
|
+
const link = await client.createLink({ payload: { screen: 'product', id: '123' } });
|
|
13
|
+
// Show link.url in a regular link or button for the visitor to open.
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
The SDK records this browser's click context and encrypts it for the configured collector. No developer server route or server API key is required. Use a secure browser context (HTTPS). Requests are never retried automatically.
|
|
17
|
+
|
|
18
|
+
Proprietary software. All rights reserved.
|
package/index.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export type JSONValue = string | number | boolean | null | JSONValue[] | { [key: string]: JSONValue };
|
|
2
|
+
export interface DeepLink { id: string; url: string; }
|
|
3
|
+
/** Run in the visitor's browser. No server API key is required. */
|
|
4
|
+
export class Deeplinkit {
|
|
5
|
+
constructor(options: { url: string; applicationId: string; /** Network timeout in milliseconds; defaults to 10000. */ timeout?: number });
|
|
6
|
+
createLink(options: { payload: { [key: string]: JSONValue } }): Promise<DeepLink>;
|
|
7
|
+
}
|
package/index.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
var $=e=>new TextEncoder().encode(e),it=new Set(["/v1/identify","/v1/browser-links","/v1/clicks","/v1/recover"]),at=32768;function j(e){let t="";for(let r of new Uint8Array(e))t+=String.fromCharCode(r);return btoa(t).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function st(e){if(typeof e!="string"||!e.length||!/^[A-Za-z0-9_-]+$/.test(e)||e.length%4===1)throw Error("Invalid encoding");let t=Uint8Array.from(atob(e.replace(/-/g,"+").replace(/_/g,"/")),r=>r.charCodeAt(0));if(j(t)!==e)throw Error("Invalid encoding");return t}function ct(e){let t=new URL(e,"https://collector.invalid").pathname;if(!it.has(t))throw Error("Unsupported collector path");return t}function M(e){if(!e||e.kty!=="RSA"||typeof e.kid!="string"||!/^[A-Za-z0-9_-]{1,64}$/.test(e.kid)||typeof e.n!="string"||typeof e.e!="string")throw Error("Invalid collector key");let t=st(e.n);if(t.length<256||t.length>512||t[0]<128||e.e!=="AQAB")throw Error("Unsupported collector key");return{kty:"RSA",kid:e.kid,n:e.n,e:e.e,alg:"RSA-OAEP-256",use:"enc"}}async function ie(e,t,r){let n=M(t),o=ct(r),a=JSON.stringify(e),i=$(a);if(i.length>at)throw Error("Collector body too large");let c=await crypto.subtle.importKey("jwk",n,{name:"RSA-OAEP",hash:"SHA-256"},!1,["encrypt"]),s=await crypto.subtle.generateKey({name:"AES-GCM",length:256},!0,["encrypt"]),l=crypto.getRandomValues(new Uint8Array(12)),u=j($(JSON.stringify({alg:"RSA-OAEP-256",enc:"A256GCM",kid:n.kid,typ:"deeplink-collector+jwe",dlp:o}))),[y,f]=await Promise.all([crypto.subtle.encrypt({name:"RSA-OAEP"},c,await crypto.subtle.exportKey("raw",s)),crypto.subtle.encrypt({name:"AES-GCM",iv:l,additionalData:$(u),tagLength:128},s,i)]),d=new Uint8Array(f);return{sealed:[u,j(y),j(l),j(d.slice(0,-16)),j(d.slice(-16))].join(".")}}async function U(e,{document:t=globalThis.document,signal:r}={}){let n=()=>{if(r?.aborted)throw Object.assign(Error("Isolated document cancelled"),{timeout:!0})};n();let o=t?.body??t?.documentElement;if(typeof o?.append!="function"||typeof t?.createElement!="function")throw Object.assign(Error("Isolated document unavailable"),{unsupported:!0});let a=t.createElement("iframe"),i=!1,c=()=>{i||(i=!0,a?.remove?.())};try{a.style.cssText="position:absolute;left:-10000px;top:0;width:800px;height:100px;border:0;visibility:hidden",r?.addEventListener("abort",c,{once:!0}),o.append(a),n();let s=a.contentDocument;if(!s?.body)throw Object.assign(Error("Isolated document unavailable"),{unsupported:!0});let l=await e(s);return n(),l}finally{r?.removeEventListener("abort",c),c()}}function G(e,t){let r=()=>{throw Object.assign(Error("Canvas encoding unavailable"),{unsupported:!0})},n=()=>{let i=e.toDataURL();return(typeof i!="string"||!i.startsWith("data:image/")||i.indexOf(",")<11||i.endsWith(","))&&r(),i},o=()=>{let i=n();if(i!==n())throw Object.assign(Error("Unstable canvas encoding"),{unstable:!0});return i},a=o();t.save();try{t.setTransform(1,0,0,1,0,0),t.globalCompositeOperation="copy",t.globalAlpha=1,t.fillStyle="#000",t.fillRect(0,0,e.width,e.height),o()===a&&r()}finally{t.restore()}return a}var se="dl_date_layout_v1",ae=["version","dateWidth","dateHeight","controlWidth","fontPx"];function lt(e){return!!(e&&typeof e=="object"&&!Array.isArray(e)&&Object.keys(e).length===ae.length&&ae.every(t=>Object.hasOwn(e,t))&&e.version===1&&Number.isFinite(e.dateWidth)&&e.dateWidth>=4&&e.dateWidth<=1024&&Number.isFinite(e.dateHeight)&&e.dateHeight>=4&&e.dateHeight<=256&&e.controlWidth===200&&e.fontPx===17)}function ce({scope:e=globalThis,signal:t}={}){let r=()=>{if(t?.aborted)throw Object.assign(Error("Date-layout read cancelled"),{timeout:!0})},n=()=>{throw Object.assign(Error("Date-layout measurement unavailable"),{unsupported:!0})};r();let o=e.document,a=o?.defaultView??e;(!o?.body||typeof o.createElement!="function"||typeof a.getComputedStyle!="function"||typeof e.CSS?.supports!="function")&&n(),(e.CSS.supports("font","17px system-ui")!==!0||e.CSS.supports("font","owned-invalid-font")!==!1)&&n();let i=o.createElement("div");try{i.style.cssText="all:initial!important;position:fixed!important;left:-100000px!important;top:0!important;visibility:hidden!important;",typeof i.attachShadow!="function"&&n();let c=i.attachShadow({mode:"closed"}),s=["date","text"].map(d=>{let m=o.createElement("input");return m.type=d,m.value=d==="date"?"2020-11-23":"13:37",(m.type!==d||m.value!==(d==="date"?"2020-11-23":"13:37"))&&n(),m.style.cssText="font:17px system-ui!important;-webkit-text-size-adjust:none!important;text-size-adjust:none!important;margin:0!important;"+(d==="text"?"width:200px!important;height:30px!important;box-sizing:border-box!important;padding:0!important;border:0!important;":""),c.append(m),m});o.body.append(i),r();let l=d=>{r();let m=a.getComputedStyle(d).getPropertyValue("font-size"),g=d.getBoundingClientRect();return(m!=="17px"||![g.width,g.height].every(x=>Number.isFinite(x)&&x>0))&&n(),{width:g.width,height:g.height}},u=s.map(l),y=s.map(l);if(r(),u.some((d,m)=>d.width!==y[m].width||d.height!==y[m].height))throw Object.assign(Error("Unstable clock-layout read"),{unstable:!0});u[1].height!==30&&n();let f={version:1,dateWidth:u[0].width,dateHeight:u[0].height,controlWidth:u[1].width,fontPx:17};return lt(f)||n(),f}finally{i.remove()}}var ue="dl_clock_layout_v1",le=["version","timeWidth","timeHeight","controlWidth","fontPx"];function ut(e){return!!(e&&typeof e=="object"&&!Array.isArray(e)&&Object.keys(e).length===le.length&&le.every(t=>Object.hasOwn(e,t))&&e.version===1&&Number.isFinite(e.timeWidth)&&e.timeWidth>=4&&e.timeWidth<=1024&&Number.isFinite(e.timeHeight)&&e.timeHeight>=4&&e.timeHeight<=256&&e.controlWidth===200&&e.fontPx===17)}function de({scope:e=globalThis,signal:t}={}){let r=()=>{if(t?.aborted)throw Object.assign(Error("Clock-layout read cancelled"),{timeout:!0})},n=()=>{throw Object.assign(Error("Clock-layout measurement unavailable"),{unsupported:!0})};r();let o=e.document,a=o?.defaultView??e;(!o?.body||typeof o.createElement!="function"||typeof a.getComputedStyle!="function"||typeof e.CSS?.supports!="function")&&n(),(e.CSS.supports("font","17px system-ui")!==!0||e.CSS.supports("font","owned-invalid-font")!==!1)&&n();let i=o.createElement("div");try{i.style.cssText="all:initial!important;position:fixed!important;left:-100000px!important;top:0!important;visibility:hidden!important;",typeof i.attachShadow!="function"&&n();let c=i.attachShadow({mode:"closed"}),s=["time","text"].map(d=>{let m=o.createElement("input");return m.type=d,m.value="13:37",(m.type!==d||m.value!=="13:37")&&n(),m.style.cssText="font:17px system-ui!important;-webkit-text-size-adjust:none!important;text-size-adjust:none!important;margin:0!important;"+(d==="text"?"width:200px!important;height:30px!important;box-sizing:border-box!important;padding:0!important;border:0!important;":""),c.append(m),m});o.body.append(i),r();let l=d=>{r();let m=a.getComputedStyle(d).getPropertyValue("font-size"),g=d.getBoundingClientRect();return(m!=="17px"||![g.width,g.height].every(x=>Number.isFinite(x)&&x>0))&&n(),{width:g.width,height:g.height}},u=s.map(l),y=s.map(l);if(r(),u.some((d,m)=>d.width!==y[m].width||d.height!==y[m].height))throw Object.assign(Error("Unstable clock-layout read"),{unstable:!0});u[1].height!==30&&n();let f={version:1,timeWidth:u[0].width,timeHeight:u[0].height,controlWidth:u[1].width,fontPx:17};return ut(f)||n(),f}finally{i.remove()}}var fe="dl_text_size_v1";function dt(e){return!!(e&&typeof e=="object"&&!Array.isArray(e)&&Object.keys(e).length===3&&["version","bodyPx","controlPx"].every(t=>Object.hasOwn(e,t))&&e.version===1&&Number.isFinite(e.bodyPx)&&e.bodyPx>=4&&e.bodyPx<=256&&e.controlPx===17)}function pe({scope:e=globalThis,signal:t}={}){let r=()=>{if(t?.aborted)throw Object.assign(Error("Text-size read cancelled"),{timeout:!0})},n=()=>{throw Object.assign(Error("Text-size measurement unavailable"),{unsupported:!0})};r();let o=e.document,a=o?.defaultView??e;(!o?.body||typeof o.createElement!="function"||typeof a.getComputedStyle!="function"||typeof e.CSS?.supports!="function")&&n(),(e.CSS.supports("font","17px system-ui")!==!0||e.CSS.supports("font","owned-invalid-font")!==!1||e.CSS.supports("font","-apple-system-body")!==!0)&&n(),r();let i=o.createElement("div");try{i.style.cssText="all:initial!important;position:fixed!important;left:-100000px!important;top:0!important;visibility:hidden!important;",typeof i.attachShadow!="function"&&n();let c=i.attachShadow({mode:"closed"}),s=["-apple-system-body","17px system-ui"].map(d=>{let m=o.createElement("span");return m.style.cssText="all:initial!important;visibility:hidden!important;",m.style.setProperty("font",d,"important"),m.style.setProperty("-webkit-text-size-adjust","none","important"),m.style.setProperty("text-size-adjust","none","important"),m.textContent="M",c.append(m),m});o.body.append(i),r();let l=d=>{r();let m=a.getComputedStyle(d).getPropertyValue("font-size");return(typeof m!="string"||!/^\d+(?:\.\d+)?px$/.test(m))&&n(),Number(m.slice(0,-2))},u=s.map(l),y=s.map(l);if(r(),u.some((d,m)=>d!==y[m]))throw Object.assign(Error("Unstable text-size read"),{unstable:!0});let f={version:1,bodyPx:u[0],controlPx:u[1]};return dt(f)||n(),f}finally{i.remove()}}var me="dl_software_capabilities_v1",ft=Object.freeze(["float16Array","regexpEscape","uint8ToHex","textWrapBalance","anchorName","contrastColor","overflowAnchor","stretchWidth"]);function Y({scope:e=globalThis,signal:t}={}){let r=()=>{if(t?.aborted)throw Object.assign(Error("Software capability read cancelled"),{timeout:!0})};r();let n=i=>{try{return i()?"supported":"unsupported"}catch{return"unavailable"}},o=(i,c)=>{try{if(typeof e.CSS?.supports!="function"||e.CSS.supports("color","red")!==!0||e.CSS.supports("owned-invalid-property","owned-invalid-value")!==!1)return"unavailable";let s=e.CSS.supports(i,c);return typeof s=="boolean"?s?"supported":"unsupported":"unavailable"}catch{return"unavailable"}},a={float16Array:n(()=>typeof e.Float16Array=="function"),regexpEscape:n(()=>typeof e.RegExp?.escape=="function"),uint8ToHex:n(()=>typeof e.Uint8Array?.prototype?.toHex=="function"),textWrapBalance:o("text-wrap","balance"),anchorName:o("anchor-name","--owned-capability-anchor"),contrastColor:o("color","contrast-color(red)"),overflowAnchor:o("overflow-anchor","none"),stretchWidth:o("width","stretch")};return r(),{version:1,checks:a}}var ye="dl_software_capabilities_v2",Nt=Object.freeze([...ft,"blobBytes","requestBytes","responseBytes","viewTransitionName","transitionBehavior"]);async function he({scope:e=globalThis,signal:t}={}){let r=()=>{if(t?.aborted)throw Object.assign(Error("Software capability read cancelled"),{timeout:!0})};r();let n=Y({scope:e,signal:t}),o=async u=>{let y,f;try{let d=e[u];if(d===void 0)return"unsupported";if(typeof d!="function")return"unavailable";let m=d.prototype?.bytes;if(m===void 0)return"unsupported";if(typeof m!="function"||typeof e.Uint8Array!="function")return"unavailable";let g=new e.Uint8Array([17,83,229]),x=u==="Request"?new d("https://owned-capability.invalid/",{method:"POST",body:g}):u==="Blob"?new d([g]):new d(g),h=Promise.resolve().then(()=>(r(),m.call(x))),w=new Promise((E,T)=>{y=setTimeout(()=>T(Error("Software capability timeout")),400),f=()=>T(Object.assign(Error("Software capability read cancelled"),{timeout:!0})),t?.addEventListener("abort",f,{once:!0}),t?.aborted&&f()}),v=await Promise.race([h,w]);return r(),v instanceof e.Uint8Array&&v.length===3&&v.every((E,T)=>E===g[T])?"supported":"unavailable"}catch{return r(),"unavailable"}finally{clearTimeout(y),f&&t?.removeEventListener("abort",f)}},a=(u,y)=>{try{if(typeof e.CSS?.supports!="function"||e.CSS.supports("color","red")!==!0||e.CSS.supports("owned-invalid-property","owned-invalid-value")!==!1)return"unavailable";let f=e.CSS.supports(u,y);return typeof f=="boolean"?f?"supported":"unsupported":"unavailable"}catch{return"unavailable"}},[i,c,s]=await Promise.all(["Blob","Request","Response"].map(o));r();let l={...n.checks,blobBytes:i,requestBytes:c,responseBytes:s,viewTransitionName:a("view-transition-name","owned-capability"),transitionBehavior:a("transition-behavior","allow-discrete")};return r(),{version:2,checks:l}}var ge=Object.freeze({canvas:["s17","s76","s209","s70"],audio:["s21"],fonts:["s20","s51","s92","s93","s206","s207"],gpu:["s74","s75","s210","s221"]}),jt=Object.values(ge).flat();var be=Object.values(ge).flat().filter(e=>!["s51","s92","s93"].includes(e)),we=Object.freeze(["s83","s37","s38","s39","s40","s41","s43","s44","s91"]);function R(e=globalThis.crypto){if(typeof e?.randomUUID=="function")return e.randomUUID();if(typeof e?.getRandomValues!="function")throw Error("Secure random values unavailable");let t=e.getRandomValues(new Uint8Array(16));t[6]=t[6]&15|64,t[8]=t[8]&63|128;let r=Array.from(t,n=>n.toString(16).padStart(2,"0")).join("");return`${r.slice(0,8)}-${r.slice(8,12)}-${r.slice(12,16)}-${r.slice(16,20)}-${r.slice(20)}`}var ve=e=>Object.freeze(Array.from(e,t=>{let r={};for(let n of["name","voiceURI","lang","localService","default"]){let o=t[n];o!==void 0&&(r[n]=o)}return Object.freeze(r)}));async function Ee(e,{signal:t,timeoutMs:r=150}={}){if(t?.aborted)throw Object.assign(Error("Voice collection cancelled"),{timeout:!0});if(!e?.getVoices)return[];let n=e.getVoices();if(t?.aborted)throw Object.assign(Error("Voice collection cancelled"),{timeout:!0});return n.length||!e.addEventListener?ve(n):new Promise((o,a)=>{let i,c=!1,s=()=>{clearTimeout(i),e.removeEventListener("voiceschanged",y),t?.removeEventListener("abort",f)},l=d=>{c||(c=!0,s(),a(d))},u=d=>{if(c)return;if(t?.aborted)return f();let m;try{m=ve(d)}catch(g){return l(g)}c=!0,s(),o(m)},y=()=>{if(!c){if(t?.aborted)return f();try{let d=e.getVoices();d.length&&u(d)}catch(d){l(d)}}},f=()=>l(Object.assign(Error("Voice collection cancelled"),{timeout:!0}));i=setTimeout(()=>{try{u(e.getVoices())}catch(d){l(d)}},r),e.addEventListener("voiceschanged",y),t?.addEventListener("abort",f,{once:!0}),t?.aborted?f():y()})}async function xe(e,t,r=6){if(!Number.isInteger(r)||r<1)throw Error("Invalid probe concurrency");let n=new Map,o=0,a=async()=>{for(;o<e.length;){let[i,c]=e[o++];n.set(i,await t(c,i))}};return await Promise.all(Array.from({length:Math.min(r,e.length)},a)),Object.fromEntries(e.map(([i])=>[i,n.get(i)]))}var Ae="dl_av1_playback_v1",K='video/mp4; codecs="av01.0.08M.08"',Se='video/mp4; codecs="av01.0.16M.08"',pt=e=>["","maybe","probably"].includes(e);function Te({scope:e=globalThis,signal:t}={}){let r=()=>{if(t?.aborted)throw Object.assign(Error("AV1 query cancelled"),{timeout:!0})};if(r(),typeof e.document?.createElement!="function")throw Object.assign(Error("Playback query unavailable"),{unsupported:!0});let n=e.document.createElement("video");if(typeof n?.canPlayType!="function")throw Object.assign(Error("Playback query unavailable"),{unsupported:!0});let o=n.canPlayType(K);if(r(),!pt(o))throw Error("Invalid AV1 playback metadata");return o}var p=()=>{throw Object.assign(new Error("Unsupported"),{unsupported:!0})},_=e=>typeof e=="number"&&Number.isFinite(e)?e:p(),O=async e=>Array.from(new Uint8Array(await crypto.subtle.digest("SHA-256",new TextEncoder().encode(JSON.stringify(e))))).map(t=>t.toString(16).padStart(2,"0")).join(""),N=e=>{if(typeof matchMedia!="function"||matchMedia("all")?.matches!==!0||matchMedia("not all")?.matches!==!1)return p();let t=matchMedia(e)?.matches;return typeof t=="boolean"?t:p()},B=(e,t,r)=>{let n=N(`(${e}: ${t})`),o=N(`(${e}: ${r})`);return e==="dynamic-range"?o?n:p():n===o?p():n},mt=(e,t)=>{let r=t.filter(n=>N(`(${e}: ${n})`));return r.length===1?r[0]:p()},yt=()=>{let e=["rec2020","p3","srgb"],t=e.map(r=>N(`(color-gamut: ${r})`));return t.some((r,n)=>r&&n+1<t.length&&!t[n+1])?p():e[t.indexOf(!0)]||p()},L=(e,t)=>e?.[t]===void 0?p():e[t],Oe=()=>{let e=navigator.languages;return!Array.isArray(e)||Array.from(e).some(t=>typeof t!="string"||!t.length)?p():Array.from(e)},Pe=e=>{try{return!!window[e]}catch{return p()}},Le=Symbol("collectionWebGLSnapshot"),ke=Symbol("collectionVoiceSnapshot");async function Ne(e={}){if(e.signal?.aborted)throw Object.assign(Error("Voice collection cancelled"),{timeout:!0});let t=e[ke],r=a=>Ee(window.speechSynthesis,{signal:a}),n=t?t.pending??=r():r(e.signal),o=await I(n,e.signal);return o.length?o:p()}var _e=(e,t)=>e<t?-1:e>t?1:0;function ht(){let e=document.createElement("canvas"),t=e.getContext("webgl");if(!t)return p();try{if(t.isContextLost?.())throw Error("WebGL context lost");let n=Object.fromEntries(["VERSION","SHADING_LANGUAGE_VERSION","VENDOR","RENDERER","MAX_TEXTURE_SIZE","MAX_CUBE_MAP_TEXTURE_SIZE","MAX_RENDERBUFFER_SIZE","MAX_VERTEX_ATTRIBS","MAX_VERTEX_UNIFORM_VECTORS","MAX_FRAGMENT_UNIFORM_VECTORS","MAX_VARYING_VECTORS","MAX_TEXTURE_IMAGE_UNITS","MAX_COMBINED_TEXTURE_IMAGE_UNITS","ALIASED_LINE_WIDTH_RANGE","ALIASED_POINT_SIZE_RANGE"].map(c=>{let s=t.getParameter(t[c]),l;if(c.startsWith("MAX_")?l=Number.isSafeInteger(s)&&s>0:c.startsWith("ALIASED_")?l=ArrayBuffer.isView(s)&&s.length===2&&Array.from(s).every(u=>Number.isFinite(u)&&u>0)&&s[0]<=s[1]:l=typeof s=="string"&&s.trim().length>0,!l)throw Error("WebGL parameter unavailable");return[c,ArrayBuffer.isView(s)?Array.from(s):s]})),o=[];for(let c of["VERTEX_SHADER","FRAGMENT_SHADER"])for(let s of["LOW_FLOAT","MEDIUM_FLOAT","HIGH_FLOAT","LOW_INT","MEDIUM_INT","HIGH_INT"]){let l=t.getShaderPrecisionFormat(t[c],t[s]);o.push([c,s,l?.rangeMin,l?.rangeMax,l?.precision])}let a=t.getSupportedExtensions();if(!Array.isArray(a)||Array.from(a).some(c=>typeof c!="string"))throw Error("WebGL extensions unavailable");a.sort();let i=t.getError?.();if(t.isContextLost?.()||i!==void 0&&i!==t.NO_ERROR)throw Error("WebGL metadata read failed");return{parameters:n,extensions:a,shaderPrecision:o}}finally{t.getExtension("WEBGL_lose_context")?.loseContext()}}function Ie(e){let t=e?.[Le];if(t?.value)return t.value;let r=ht();return t&&V(r)&&De(r.shaderPrecision)&&(t.value=r),r}function De(e){return Array.isArray(e)&&e.length===12&&e.every(t=>Array.isArray(t)&&t.length===5&&t.slice(2).every(r=>Number.isSafeInteger(r)&&r>=0))}async function gt(e={}){return U(async t=>{let r=t.createElement("div");r.style.cssText="all:initial;position:absolute;left:-10000px;visibility:hidden;white-space:nowrap;font:64px serif;line-height:normal",t.body.append(r);try{let n=r.attachShadow({mode:"closed"}),o=["monospace","serif","sans-serif"],a="WwmiIl1\u03A9\u{1F3B5}",i=["Arial","Arial Narrow","Helvetica Neue","Georgia","Times New Roman","Courier New","Menlo","Verdana","Trebuchet MS","Palatino","Baskerville","Avenir","Avenir Next","Futura","Gill Sans","Optima","American Typewriter","Apple Color Emoji"],c=h=>{let w=t.createElement("span");return w.style.position="absolute",w.style.left="0",w.style.top="0",w.style.fontFamily=h,w.textContent=a,n.append(w),w},s=o.map(c),l=i.map(h=>o.map(w=>c(`"${h}",${w}`))),u=h=>{let w=[h.offsetWidth,h.offsetHeight],v=[h.offsetWidth,h.offsetHeight];if(!w.every(E=>Number.isFinite(E)&&E>0))return p();if(!v.every((E,T)=>E===w[T]))throw Object.assign(Error("Unstable font layout"),{unstable:!0});return w.join(":")},y=s.map(u),f=l.map(h=>h.map(u)),d=[...s,...l.flat()],m=[...y,...f.flat()].map(h=>Number(h.split(":")[0])),g=()=>d.map(h=>{let w=h.offsetWidth,v=h.offsetWidth;if(!Number.isFinite(w)||!Number.isFinite(v))return p();if(w!==v)throw Object.assign(Error("Unstable font control"),{unstable:!0});return w});for(let h of d)h.textContent="M";if(g().some((h,w)=>!Number.isFinite(h)||h<=0||h>=m[w]))return p();for(let h of d)h.textContent="";return g().some(h=>h!==0)?p():i.filter((h,w)=>f[w].some((v,E)=>v!==y[E]))}finally{r.remove()}},{signal:e.signal})}function bt(e={}){return U(t=>{let r=t.createElement("canvas");r.width=256,r.height=96;let n=r.getContext("2d");if(!n)return p();n.font="19px Georgia",n.fillStyle="#236",n.fillText("Browser continuity \u03A9 \u{1F3B5}",3,27),n.globalCompositeOperation="multiply";for(let[o,a]of[[50,"#e74"],[94,"#4bd"],[138,"#b6e"]])n.beginPath(),n.fillStyle=a,n.arc(o,60,24,0,Math.PI*2),n.fill();return O(G(r,n))},{signal:e.signal})}async function X(e=!1){let t=window.OfflineAudioContext||window.webkitOfflineAudioContext;if(!t)return null;try{let r=new t(1,5e3,44100),n,o,a;try{e||(n=r.createOscillator(),o=r.createDynamicsCompressor(),n.type="triangle",n.frequency.value=1e4,o.threshold.value=-50,o.knee.value=40,o.ratio.value=12,o.attack.value=0,o.release.value=.25,n.connect(o),o.connect(r.destination),n.start(0));let i=await Promise.race([r.startRendering(),new Promise((m,g)=>{a=setTimeout(()=>g(new Error("Audio timeout")),1500)})]),c=i.getChannelData(0);if(!c||c.length<5e3)return null;let s;typeof i.copyFromChannel=="function"&&(s=new Float32Array(500).fill(NaN),i.copyFromChannel(s,0,4500));let l=new Float32Array(500),u=0,y=1/0,f=-1/0;for(let m=4500;m<5e3;m++){let g=c[m];if(!Number.isFinite(g)||s&&s[m-4500]!==g)return null;l[m-4500]=g,y=Math.min(y,g),f=Math.max(f,g),u+=Math.abs(g)}if(e)return u===0?{value:"0.00000000",samples:l}:null;if(!Number.isFinite(u)||u<=0||y===f)return null;let d=u.toFixed(8);return d==="0.00000000"?null:{value:d,samples:l}}finally{clearTimeout(a);try{n?.stop?.()}catch{}for(let i of[n,o])try{i?.disconnect()}catch{}}}catch{return null}}async function wt(){let e=await Promise.all([X(),X(),X(!0)]);if(e.some(t=>t===null))return null;if(e[0].value!==e[1].value||e[0].samples.some((t,r)=>t!==e[1].samples[r]))throw Object.assign(Error("Unstable audio rendering"),{unstable:!0});return e[0].value}function Ce(e=K){let t={contentType:e,method:"canPlayType"};try{if(typeof document>"u")return{...t,status:"unsupported"};let r=document.createElement("video");if(typeof r.canPlayType!="function")return{...t,status:"unsupported"};let n=r.canPlayType(e);return["","maybe","probably"].includes(n)?{...t,status:"measured",support:n}:{...t,status:"unavailable"}}catch{return{...t,status:"unavailable"}}}var S={s1:()=>L(navigator,"oscpu"),s2:()=>({primary:navigator.language,languages:Oe()}),s3:()=>_(screen.colorDepth),s4:()=>_(navigator.deviceMemory),s5:()=>[screen.width,screen.height].sort((e,t)=>t-e),s6:()=>[screen.availLeft??0,screen.availTop??0,screen.width-screen.availWidth,screen.height-screen.availHeight],s7:()=>_(navigator.hardwareConcurrency),s9:()=>Intl.DateTimeFormat().resolvedOptions().timeZone,s10:()=>Pe("sessionStorage"),s11:()=>Pe("localStorage"),s12:()=>typeof indexedDB<"u",s13:()=>typeof window.openDatabase=="function",s14:()=>L(navigator,"cpuClass"),s15:()=>navigator.platform,s16:()=>Array.from(navigator.plugins||[],e=>({name:e.name,description:e.description})),s17:bt,s19:()=>({points:navigator.maxTouchPoints,touchEvent:typeof TouchEvent<"u",touchStart:"ontouchstart"in window}),s20:gt,s21:async()=>await wt()??p(),s24:()=>Function.prototype.toString.call(eval).length,s27:()=>navigator.vendor,s28:()=>["safari","chrome","webkit","__crWeb","__gCrWeb","__firefox__"].filter(e=>typeof window[e]=="object"),s32:()=>{let e="dl_probe_"+R().replaceAll("-","");try{return document.cookie=`${e}=1; SameSite=Strict; Path=/`,document.cookie.split(";").some(t=>t.trim()===`${e}=1`)}finally{document.cookie=`${e}=; Max-Age=0; Path=/; SameSite=Strict`}},s30:()=>L(navigator,"doNotTrack"),s37:yt,s38:()=>mt("prefers-contrast",["more","less","no-preference"]),s39:()=>B("forced-colors","active","none"),s40:()=>B("dynamic-range","high","standard"),s41:()=>B("inverted-colors","inverted","none"),s42:()=>{if(!N("(min-monochrome: 0)"))return p();for(let e=0;e<=32;e++)if(N(`(max-monochrome: ${e})`))return e;return p()},s43:()=>B("prefers-reduced-motion","reduce","no-preference"),s44:()=>B("prefers-color-scheme","dark","light"),s57:()=>_(devicePixelRatio),s46:()=>O({sin:Math.sin(1e100),cos:Math.cos(1e100),tan:Math.tan(1e100),acos:Math.acos(.234567),asin:Math.asin(.234567),exp:Math.exp(.234567),log:Math.log(.234567),sqrt:Math.sqrt(2),pow:Math.pow(Math.PI,-77),sinh:Math.sinh(.234567),asinh:Math.asinh(.234567)}),s74:async(e={})=>Ie(e).parameters,s75:async(e={})=>{let t=Ie(e);if(!De(t.shaderPrecision))throw Error("WebGL shader precision unavailable");return{extensions:t.extensions,shaderPrecision:t.shaderPrecision}},s80:()=>L(navigator,"pdfViewerEnabled"),s81:()=>{let e=new Float32Array([NaN]);return Array.from(new Uint8Array(e.buffer))},s82:()=>navigator.language,s83:Oe,s91:()=>B("prefers-reduced-transparency","reduce","no-preference"),s96:()=>{if(typeof AudioContext>"u")return p();let e=new AudioContext;try{return _(e.baseLatency)}finally{e.close().catch(()=>{})}},s98:()=>typeof navigator.serviceWorker<"u",s99:()=>window.isSecureContext,s101:()=>navigator.userAgent,s103:()=>navigator.appVersion,s104:()=>_(navigator.connection?.rtt),s117:()=>_(navigator.plugins?.length),s106:async()=>{if(typeof Notification>"u"||!navigator.permissions?.query)return p();let e=await navigator.permissions.query({name:"notifications"});return Notification.permission==="denied"&&e.state==="prompt"},s123:()=>L(navigator,"productSub"),s150:()=>({innerWidth,innerHeight,outerWidth,outerHeight}),s215:async()=>typeof PublicKeyCredential>"u"||!PublicKeyCredential.getClientCapabilities?p():PublicKeyCredential.getClientCapabilities(),s202:()=>Intl.DateTimeFormat().resolvedOptions().locale,s205:()=>new URL("D:/").protocol,s207:async()=>{if(typeof FontFace!="function")return p();try{return await new FontFace("ProbeFont","local('Arial')").load(),!0}catch{return!1}}};function k(e,t){let r=document.body??document.documentElement;if(typeof r?.append!="function")return p();let n=document.createElement("div");n.style.cssText="all:initial;position:absolute;left:-10000px;visibility:hidden;white-space:nowrap;font:16px serif;line-height:normal";try{r.append(n);let o=n.attachShadow({mode:"closed"}),a=e();if(o.append(a),t)return t(a);let i=a.getBoundingClientRect();return{width:i.width,height:i.height,font:getComputedStyle(a).fontFamily}}finally{n.remove()}}var Z=e=>typeof e=="function"?Function.prototype.toString.call(e):p();Object.assign(S,{s45:()=>({offset:new Date().getTimezoneOffset(),january:new Date(2020,0,1).getTimezoneOffset(),july:new Date(2020,6,1).getTimezoneOffset()}),s119:()=>{try{null.invalid()}catch(e){return String(e.stack||e)}},s133:()=>String(L(window,"external")),s136:()=>!navigator.mimeTypes||typeof MimeTypeArray>"u"||typeof MimeType>"u"?p():{array:Object.getPrototypeOf(navigator.mimeTypes)===MimeTypeArray.prototype,items:Array.from(navigator.mimeTypes,e=>Object.getPrototypeOf(e)===MimeType.prototype)},s155:()=>Object.fromEntries(["userAgent","platform","languages","hardwareConcurrency","webdriver"].map(e=>{let t=navigator;for(;t&&!Object.getOwnPropertyDescriptor(t,e);)t=Object.getPrototypeOf(t);let r=t&&Object.getOwnPropertyDescriptor(t,e)?.get;return[e,r?Z(r):null]})),s66:()=>{let e=document.createElement("a");return{attributionSourceId:"attributionSourceId"in e,attributionsourceid:"attributionsourceid"in e}},s71:()=>Array.from(location.ancestorOrigins||[]),s120:()=>{try{return typeof"a".toSource=="function"&&typeof"a".toSource()=="string"}catch{return!1}},s130:()=>[typeof SourceBuffer,typeof SourceBufferList],s132:()=>Z(window.close),s135:()=>_(navigator.mimeTypes?.length),s139:()=>typeof CSS>"u"?p():CSS.supports("backdrop-filter","blur(2px)"),s142:()=>N("(min-resolution: 192dpi), (-webkit-min-device-pixel-ratio: 2)"),s144:()=>typeof SharedArrayBuffer>"u"?p():new SharedArrayBuffer(1).byteLength,s145:()=>Object.getOwnPropertyNames(Object.getPrototypeOf(navigator)).flatMap(e=>{try{return typeof navigator[e]=="function"?[navigator[e].name]:[]}catch{return[]}}),s146:()=>typeof window.objectToInspect<"u",s151:()=>{let e=Object.getOwnPropertyDescriptor(document,"createElement");return e?{own:!0,hasWriteable:"writeable"in e}:{own:!1}},s153:()=>!!navigator.onLine,s162:()=>{let e=navigator.languages;return e?Object.getOwnPropertyNames(e).map(t=>{let r=Object.getOwnPropertyDescriptor(e,t);return{key:t,writable:!!r.writable,configurable:!!r.configurable}}):p()},s165:()=>new Event("").isTrusted,s49:()=>{let e=performance.now(),t=[];for(let r=0;r<5e3;r++){let n=performance.now();n>e&&t.push(n-e),e=n}return[...new Set(t)].sort((r,n)=>r-n).slice(0,2)},s50:()=>_(performance.memory?.jsHeapSizeLimit),s200:()=>performance.timeOrigin??Date.now()-performance.now(),s201:()=>({audioLatency:typeof Audio<"u"&&"srLatency"in Audio.prototype,audioChannels:typeof Audio<"u"&&"srChannelCount"in Audio.prototype,posture:"devicePosture"in navigator,segments:!!(window.visualViewport&&"segments"in visualViewport),imageText:typeof Image<"u"&&"getTextInformation"in Image.prototype}),s203:()=>{let e=document.createElement("a");return e.style.width="calc(1px * sin(66911823500 * (36781 / -0.55 * cos(-30780.497322536891))))",e.style.width},s204:()=>k(()=>{let e=document.createElement("div");return e.style.cssText="width:100px;height:100px;overflow:scroll",e},e=>e.offsetWidth===e.clientWidth),s206:()=>k(()=>{let e=document.createElement("input");return e.type="radio",e}).font,s209:()=>{let e=document.createElement("canvas");e.width=e.height=8;let t=e.getContext("2d");if(!t)return p();let r=305419896,n=()=>(r=Math.imul(r,1664525)+1013904223>>>0,r>>>24);for(let o=0;o<8;o++)for(let a=0;a<8;a++)t.fillStyle=`rgb(${n()},${n()},${n()})`,t.fillRect(a,o,1,1);return O(Array.from(t.getImageData(0,0,8,8).data))},s210:async(e={})=>{if(typeof navigator.gpu?.requestAdapter!="function")return p();let t=await I(navigator.gpu.requestAdapter(),e.signal);if(!t)return p();let r=t.info||await I(t.requestAdapterInfo?.(),e.signal),o=Object.fromEntries(["maxTextureDimension1D","maxTextureDimension2D","maxTextureDimension3D","maxBindGroups","maxBufferSize","maxComputeWorkgroupStorageSize","maxComputeInvocationsPerWorkgroup"].map(a=>[a,t.limits?.[a]]));return Object.values(o).some(a=>!Number.isSafeInteger(a)||a<=0)?p():{description:r?.description??null,device:r?.device??null,fallback:t.isFallbackAdapter??r?.isFallbackAdapter??null,limits:o}},s211:async()=>Promise.all(['video/mp4; codecs="avc1.42E028"','video/webm; codecs="vp8"'].map(async e=>{try{if(typeof navigator>"u"||typeof navigator.mediaCapabilities?.decodingInfo!="function")return{contentType:e,method:"decodingInfo",status:"unsupported"};let t=await navigator.mediaCapabilities.decodingInfo({type:"file",video:{contentType:e,width:1920,height:1080,bitrate:5e6,framerate:30}});return{contentType:e,supported:t.supported,smooth:t.smooth,powerEfficient:t.powerEfficient}}catch{return{contentType:e,error:!0}}})).then(e=>[...e,Ce(),Ce(Se)]),s217:async()=>{if(!navigator.getBattery)return p();let e=await navigator.getBattery(),t=r=>Number.isFinite(r)?r:String(r);return{charging:e.charging,level:e.level,chargingTime:t(e.chargingTime),dischargingTime:t(e.dischargingTime)}},s222:async()=>navigator.keyboard?.getLayoutMap?Array.from((await navigator.keyboard.getLayoutMap()).entries()):p(),s212:()=>{let e=getComputedStyle(document.documentElement);return["--hydra-450","--super-color","--super-bg-color","--border-dynamic","--size-md","--banner-height"].filter(t=>e.getPropertyValue(t)!=="").length>=4},s221:()=>{let e=document.createElement("canvas").getContext("webgl2");if(!e)return p();try{if(e.isContextLost?.())throw Error("WebGL2 context lost");let t=e.getSupportedExtensions();if(!Array.isArray(t)||Array.from(t).some(n=>typeof n!="string"))throw Error("WebGL2 extensions unavailable");let r=e.getError?.();if(e.isContextLost?.()||r!==void 0&&r!==e.NO_ERROR)throw Error("WebGL2 extension read failed");return t.sort()}finally{try{e.getExtension("WEBGL_lose_context")?.loseContext()}catch{}}},s58:async()=>{let e=navigator.userAgentData;if(!e)return p();let t=null;return e.getHighEntropyValues&&(t=await e.getHighEntropyValues(["architecture","bitness","model","platformVersion","fullVersionList"])),{brands:e.brands,mobile:e.mobile,platform:e.platform,high:t}},s26:async()=>!navigator.mediaDevices?.enumerateDevices||!navigator.permissions?.query||!(await Promise.all(["camera","microphone"].map(async t=>{try{return(await navigator.permissions.query({name:t})).state}catch{return"unsupported"}}))).includes("granted")?p():(await navigator.mediaDevices.enumerateDevices()).map(t=>({kind:t.kind,label:t.label,deviceId:t.deviceId,groupId:t.groupId})),s52:async(e={})=>{let t=await Ne(e);return O(t.map(r=>({name:r.name,uri:r.voiceURI,language:r.lang,local:r.localService,default:r.default})).sort((r,n)=>_e(r.uri||"",n.uri||"")||_e(JSON.stringify(r),JSON.stringify(n))))},s29:async()=>navigator.storage?.estimate?_((await navigator.storage.estimate()).quota):p(),s84:()=>({width:screen.width,height:screen.height}),s87:()=>k(()=>document.createElement("div"),e=>{let t={};for(let r of["AccentColor","AccentColorText","ButtonFace","ButtonText","Canvas","CanvasText","Field","FieldText","GrayText","Highlight","HighlightText","LinkText","VisitedText"])e.style.color="",e.style.color=r,t[r]=e.style.color?getComputedStyle(e).color:null;return t}),s92:()=>k(()=>{let e=document.createElementNS("http://www.w3.org/1998/Math/MathML","math");for(let[t,r]of[["mi","\u{1D508}"],["mo","\u220F"],["mi","\u03C5\u03C4\u03C1\u03C3"]]){let n=document.createElementNS(e.namespaceURI,t);n.textContent=r,e.append(n)}return e}),s93:()=>k(()=>{let e=document.createElement("span");return e.textContent=Array.from({length:80},(t,r)=>String.fromCodePoint(128512+r)).join(""),e}),s213:async()=>!navigator.permissions?.query||!navigator.geolocation||(await navigator.permissions.query({name:"geolocation"})).state!=="granted"?p():new Promise((t,r)=>navigator.geolocation.getCurrentPosition(n=>t({latitude:n.coords.latitude,longitude:n.coords.longitude,accuracy:n.coords.accuracy}),r,{timeout:1200,maximumAge:6e4}))});Object.assign(S,{s22:()=>typeof WebAssembly>"u"?p():{emptyModule:WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0])),streaming:typeof WebAssembly.compileStreaming=="function",exceptions:typeof WebAssembly.Exception=="function",tag:typeof WebAssembly.Tag=="function",memory:typeof WebAssembly.Memory=="function"},s76:()=>{let e=document.createElement("canvas");e.width=128,e.height=64;let t=e.getContext("webgl");if(!t)return p();let r=[],n,o;try{if(t.isContextLost?.())throw Error("WebGL context lost");if(n=t.createProgram(),o=t.createBuffer(),!n||!o)throw Error("WebGL allocation failed");for(let[u,y]of[[t.VERTEX_SHADER,"attribute vec2 p; varying vec2 v; void main(){v=p;gl_Position=vec4(p,0.,1.);}"],[t.FRAGMENT_SHADER,"precision mediump float; varying vec2 v; void main(){gl_FragColor=vec4(sin(v.x*3.1)*0.5+0.5,cos(v.y*2.7)*0.5+0.5,0.3,1.);}"]]){let f=t.createShader(u);if(!f)throw Error("WebGL shader allocation failed");if(r.push(f),t.shaderSource(f,y),t.compileShader(f),!t.getShaderParameter(f,t.COMPILE_STATUS))throw Error("Shader compilation");t.attachShader(n,f)}if(t.linkProgram(n),!t.getProgramParameter(n,t.LINK_STATUS))throw Error("Program linking");t.useProgram(n),t.bindBuffer(t.ARRAY_BUFFER,o),t.bufferData(t.ARRAY_BUFFER,new Float32Array([-1,-1,1,-1,0,1]),t.STATIC_DRAW);let a=t.getAttribLocation(n,"p");t.enableVertexAttribArray(a),t.vertexAttribPointer(a,2,t.FLOAT,!1,0,0),t.drawArrays(t.TRIANGLES,0,3);let i=new Uint8Array(8192*4),c=new Uint8Array(i.length);t.readPixels(0,0,128,64,t.RGBA,t.UNSIGNED_BYTE,i),t.readPixels(0,0,128,64,t.RGBA,t.UNSIGNED_BYTE,c);let s=t.getError?.();if(t.isContextLost?.()||s!==void 0&&s!==t.NO_ERROR)throw Error("WebGL pixel read failed");if(i.some((u,y)=>u!==c[y]))throw Object.assign(Error("Unstable WebGL pixels"),{unstable:!0});let l=!1;for(let u=4;u<i.length;u+=4)if(i[u]!==i[0]||i[u+1]!==i[1]||i[u+2]!==i[2]){l=!0;break}return l?O(Array.from(i)):p()}finally{for(let a of r)try{t.deleteShader(a)}catch{}if(n)try{t.deleteProgram(n)}catch{}if(o)try{t.deleteBuffer(o)}catch{}try{t.getExtension("WEBGL_lose_context")?.loseContext()}catch{}}},s223:async()=>{if(typeof PresentationRequest!="function")return p();let e=new PresentationRequest(["cast:"]);if(typeof e.reconnect!="function")return p();try{return await e.reconnect("deeplink-probe-nonexistent-session"),{reconnected:!0}}catch(t){return{name:t.name,message:t.message}}},s163:async()=>{let e=!1,t=new Error;return Object.defineProperty(t,"stack",{get(){return e=!0,""}}),console.debug(t),await new Promise(r=>setTimeout(r,0)),e},s72:()=>L(navigator,"webdriver"),s102:()=>typeof navigator.userAgentData=="object",s118:()=>!navigator.plugins||typeof PluginArray>"u"||typeof Plugin>"u"?p():Object.getPrototypeOf(navigator.plugins)===PluginArray.prototype&&Array.from(navigator.plugins).every(e=>Object.getPrototypeOf(e)===Plugin.prototype)});var W=()=>({microsoft:["MSCSSMatrix","msSetImmediate","msIndexedDB","MSStream","msWriteProfilerMark"].filter(e=>e in window),microsoftNavigator:["msMaxTouchPoints","msPointerEnabled","msLaunchUri","msSaveBlob"].filter(e=>e in navigator),chromium:["webkitPersistentStorage","webkitTemporaryStorage"].filter(e=>e in navigator).concat(["BatteryManager","webkitMediaStream","webkitSpeechGrammar","webkitResolveLocalFileSystemURL"].filter(e=>e in window)),webkit:["ApplePayError","CSSPrimitiveValue","Counter","RGBColor","WebKitMediaKeys"].filter(e=>e in window),gecko:["onmozfullscreenchange","mozInnerScreenX","CSSMozDocumentRule","CanvasCaptureMediaStream"].filter(e=>e in window)});Object.assign(S,{s59:()=>({window:W().microsoft,navigator:W().microsoftNavigator}),s60:()=>({profiler:"msWriteProfilerMark"in window,stream:"MSStream"in window,launch:"msLaunchUri"in navigator,save:"msSaveBlob"in navigator}),s61:()=>({properties:W().chromium,vendor:navigator.vendor}),s62:()=>({properties:W().webkit,vendor:navigator.vendor}),s63:()=>({safari:"safari"in window,gesture:"ongestureend"in window,touch:"TouchEvent"in window,orientation:"orientation"in window,autocapitalize:typeof HTMLElement<"u"&&"autocapitalize"in HTMLElement.prototype,pointerLock:typeof Document<"u"&&"pointerLockElement"in Document.prototype}),s64:()=>({properties:W().gecko,buildID:"buildID"in navigator,mozAppearance:"MozAppearance"in document.documentElement.style}),s65:()=>({orientation:"orientation"in window,orientationEvent:"onorientationchange"in window,capture:typeof HTMLInputElement<"u"&&"capture"in HTMLInputElement.prototype,networkTypeChange:typeof NetworkInformation<"u"&&"ontypechange"in NetworkInformation.prototype,audioSink:typeof Audio<"u"&&"sinkId"in Audio.prototype,android:/android/i.test(navigator.appVersion)}),s68:()=>({push:"PushManager"in window,audio:"AudioBuffer"in window,rtc:"RTCPeerConnection"in window,location:"geolocation"in navigator,serviceWorker:"ServiceWorker"in window}),s69:async()=>{let e=[],t=window,r=n=>{try{let o=new URL(n);return o.origin+o.pathname}catch{return""}};for(let n=0;n<16;n++)try{if(e.push({url:await O(r(t.location.href)),referrer:await O(r(t.document.referrer))}),t.parent===t)break;t=t.parent}catch{break}return e},s131:()=>document.documentElement.getAttributeNames(),s148:()=>Z(Function.prototype.bind),s149:()=>window.process?{type:typeof window.process,versions:window.process.versions??null,browser:window.process.browser??null}:p(),s157:()=>{let e=["awesomium","RunPerfTest","CefSharp","__nightmare","nightmare","__phantomas","callPhantom","_phantom","_selenium","webdriver","__webdriverFunc","wdioElectron","domAutomation","domAutomationController"],t=["__selenium_evaluate","__webdriver_evaluate","__driver_evaluate","__webdriver_script_fn"];return{window:e.filter(r=>r in window),document:t.filter(r=>r in document)}},s166:()=>{let e=Object.getOwnPropertyNames(Navigator.prototype);return{length:e.length,properties:e.map((t,r)=>({name:t,index:r})).filter(t=>["webdriver","languages","plugins","mimeTypes"].includes(t.name))}}});Object.assign(S,{s36:()=>k(()=>{let e=document.createElement("div");for(let t of["adsbox","ad-banner","advertisement","sponsored-text-links"]){let r=document.createElement("div");r.className=t,r.style.cssText="width:1px;height:1px",e.append(r)}return e},e=>Array.from(e.children,t=>({selector:t.className,blocked:t.offsetParent===null||getComputedStyle(t).display==="none"}))),s51:()=>Object.fromEntries(["serif","sans-serif","monospace","system-ui","cursive","fantasy"].map(e=>[e,k(()=>{let t=document.createElement("span");return t.style.cssText=`font:16px ${e};white-space:nowrap`,t.textContent="mmmmmmmmmmlli \u03A9\u{1F3B5}",t}).width])),s23:()=>typeof window.webkitRequestFileSystem!="function"?p():new Promise(e=>window.webkitRequestFileSystem(0,1,()=>e(!0),()=>e(!1))),s33:()=>({brave:"brave"in navigator,solana:"braveSolana"in window,ethereum:"braveEthereum"in window,connection:"connection"in navigator}),s86:()=>{if(typeof window.openDatabase!="function")return p();let e="dl_probe_"+R(),t=!1,r=!1;try{window.openDatabase(null,null,null,null)}catch{t=!0}try{localStorage.setItem(e,"1")}catch{r=!0}finally{try{localStorage.removeItem(e)}catch{}}return{databaseError:t,storageError:r}},s160:async(e={})=>{let t=await Ne(e),r=t.map(o=>o.name),n=t.map(o=>JSON.stringify([o.voiceURI||o.name,o.lang||"",typeof o.localService=="boolean"?o.localService:null])).sort();return{count:r.length,nameLengths:await O(r.map(o=>o.length).sort((o,a)=>o-a)),rosterHash:await O(n)}},s152:()=>k(()=>{let e=document.createElement("div");return e.style.border=".5px dotted transparent",e},e=>e.offsetHeight),s158:()=>{let e=document.createElement("iframe");e.style.cssText="position:absolute;left:-10000px;visibility:hidden",document.body.append(e);try{return L(e.contentWindow.navigator,"webdriver")}finally{e.remove()}}});Object.assign(S,{s85:()=>{if(typeof indexedDB>"u"||typeof Blob>"u")return p();let e="dl_probe_"+R();return new Promise((t,r)=>{let n=indexedDB.open(e,1),o=a=>{a?.close(),indexedDB.deleteDatabase(e)};n.onerror=()=>{o(),t({openError:n.error?.name??"Error"})},n.onupgradeneeded=()=>{let a=n.result;try{a.createObjectStore("probe").put(new Blob(["probe"]),"value")}catch(i){n.transaction.abort(),o(a),t({blobError:i.name})}},n.onsuccess=()=>{o(n.result),t({blobError:null})},n.onblocked=()=>{o(),r(Error("IndexedDB blocked"))}})},s89:async()=>{if(!navigator.storage?.getDirectory)return p();let e=await navigator.storage.getDirectory(),t="dl_probe_"+R();try{let r=await e.getFileHandle(t,{create:!0}),n=await r.getFile();if(!r.createWritable)return{writable:!1};let o=await r.createWritable();try{await o.write("probe")}finally{await o.close()}let a=await r.getFile();return{writable:!0,sizeBefore:n.size,sizeAfter:a.size,modifiedDelta:a.lastModified-n.lastModified}}catch(r){return{error:r.name}}finally{await e.removeEntry(t).catch(()=>{})}}});Object.assign(S,{s159:()=>{let e=document.createElement("iframe");e.style.cssText="position:absolute;left:-10000px;visibility:hidden",document.body.append(e);try{let t=e.contentWindow,n=t.navigator,o;for(;n&&!o;)o=Object.getOwnPropertyDescriptor(n,"hardwareConcurrency"),n=Object.getPrototypeOf(n);if(!o?.get)return p();let a=Object.getOwnPropertyDescriptor(t,"Function"),i=Object.getOwnPropertyDescriptor(t,"Object");try{if(!Reflect.deleteProperty(t,"Function")||!Reflect.deleteProperty(t,"Object"))return p();try{return o.get.toString(),!1}catch{return!0}}finally{a&&Object.defineProperty(t,"Function",a),i&&Object.defineProperty(t,"Object",i)}}finally{e.remove()}}});function V(e,t=0){return t>6?!1:e===null||typeof e=="boolean"?!0:typeof e=="number"?Number.isFinite(e):typeof e=="string"?e.length<=4096:Array.isArray(e)?e.length<=128&&e.every(r=>V(r,t+1)):e&&typeof e=="object"?Object.keys(e).length<=64&&Object.entries(e).every(([r,n])=>r.length<=128&&V(n,t+1)):!1}Object.assign(S,{s154:async()=>{if(typeof navigator.requestMediaKeySystemAccess!="function")return p();let e={initDataTypes:["cenc"],audioCapabilities:[{contentType:'audio/mp4; codecs="mp4a.40.2"'}],distinctiveIdentifier:"not-allowed",persistentState:"not-allowed",sessionTypes:["temporary"]},t=["com.widevine.alpha","com.microsoft.playready","org.w3.clearkey","com.adobe.primetime","com.apple.fairplay"];return Object.fromEntries(await Promise.all(t.map(async r=>{try{return await navigator.requestMediaKeySystemAccess(r,[e]),[r,!0]}catch{return[r,!1]}})))},s156:()=>{let e=Object.getOwnPropertyNames(window),t=e.map((r,n)=>({name:r,index:n})).filter(r=>/webdriver|selenium|phantom|nightmare|automation|CefSharp|__crWeb|__gCrWeb|cdc_/i.test(r.name));return{count:e.length,selected:t.slice(0,64)}}});Object.assign(S,{s214:async()=>{if(!navigator.storageBuckets?.open||!navigator.storageBuckets?.delete)return p();let e="dl-probe-"+R(),t;try{if(t=await navigator.storageBuckets.open(e),!t.indexedDB||!t.estimate)return p();let r=t.indexedDB;await new Promise((o,a)=>{let i=r.open("probe",1);i.onupgradeneeded=()=>i.result.createObjectStore("probe").put("probe","value"),i.onerror=()=>a(i.error),i.onsuccess=()=>{i.result.close(),o()},i.onblocked=()=>a(Error("Bucket database blocked"))});let n=await t.estimate();return{indexedDB:!0,usage:n.usage??null,quota:n.quota??null}}finally{await navigator.storageBuckets.delete(e).catch(()=>{})}},exp_s1027:()=>{if(typeof WebAssembly>"u")return p();let e=new Uint8Array([0,97,115,109,1,0,0,0,1,5,1,96,0,1,127,3,2,1,0,7,5,1,1,102,0,0,10,6,1,4,0,65,42,11]),t=WebAssembly.validate(e),r=t?new WebAssembly.Instance(new WebAssembly.Module(e)).exports.f():null;return{valid:t,result:r,features:["Exception","Tag","JSTag","Memory","Table","Global","compileStreaming","instantiateStreaming"].filter(n=>n in WebAssembly),crossOriginIsolated:!!window.crossOriginIsolated}}});Object.assign(S,{s97:async()=>{if(typeof DataTransfer!="function"||typeof File!="function")return p();let e=new DataTransfer,t=document.createElement("input");t.type="file",e.items.add(new File(["probe"],"probe.txt",{lastModified:0})),t.files=e.files;let r=t.webkitEntries;return r?.length?Promise.all(Array.from(r).slice(0,8).map(n=>new Promise(o=>{if(!n.getMetadata)return o({metadata:!1});n.getMetadata(a=>o({metadata:!0,size:a.size,modified:a.modificationTime?.getTime()??null}),a=>o({metadata:!1,error:a.name??"Error"}))}))):p()},s79:()=>{if(typeof File!="function")return p();let e=new File([],"probe/folder/name.txt",{lastModified:0}),t=new URL("https://probe.invalid/#"+encodeURIComponent(e.name)+"-"+e.lastModified);return{relativePath:e.webkitRelativePath??null,lastModified:e.lastModified,name:e.name,fragment:t.hash}}});function I(e,t,r=()=>{}){return t?new Promise((n,o)=>{let a=()=>o(Object.assign(new Error("Probe cancelled"),{timeout:!0}));t.aborted?a():t.addEventListener("abort",a,{once:!0}),Promise.resolve(e).then(i=>{if(t.removeEventListener("abort",a),t.aborted){try{r(i)}catch{}return}n(i)},i=>{t.removeEventListener("abort",a),o(i)})}):e}Object.assign(S,{s70:async(e={})=>{if(!navigator.gpu||typeof GPUTextureUsage>"u"||typeof GPUBufferUsage>"u"||typeof GPUMapMode>"u")return p();let t=await I(navigator.gpu.requestAdapter(),e.signal);if(!t)return p();let r,n,o;try{r=await I(t.requestDevice(),e.signal,f=>f.destroy());let a=r.createShaderModule({code:`
|
|
2
|
+
@vertex fn vertex(@builtin(vertex_index) i:u32)->@builtin(position) vec4f {
|
|
3
|
+
var points=array<vec2f,3>(vec2f(-1.0,-1.0),vec2f(3.0,-1.0),vec2f(-1.0,3.0));
|
|
4
|
+
return vec4f(points[i],0.0,1.0);
|
|
5
|
+
}
|
|
6
|
+
@fragment fn fragment(@builtin(position) p:vec4f)->@location(0) vec4f {
|
|
7
|
+
let x=p.x/32.0;let y=p.y/32.0;
|
|
8
|
+
return vec4f(sin(x*6.2831853)*0.5+0.5,cos(y*3.1415926)*0.5+0.5,x*y,1.0);
|
|
9
|
+
}`}),i=await I(r.createRenderPipelineAsync({layout:"auto",vertex:{module:a,entryPoint:"vertex"},fragment:{module:a,entryPoint:"fragment",targets:[{format:"rgba8unorm"}]},primitive:{topology:"triangle-list"}}),e.signal);n=r.createTexture({size:[32,32],format:"rgba8unorm",usage:GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.COPY_SRC}),o=r.createBuffer({size:256*32,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ});let c=async f=>{let d=r.createCommandEncoder(),m=d.beginRenderPass({colorAttachments:[{view:n.createView(),clearValue:{r:0,g:0,b:0,a:1},loadOp:"clear",storeOp:"store"}]});f&&(m.setPipeline(i),m.draw(3)),m.end(),d.copyTextureToBuffer({texture:n},{buffer:o,bytesPerRow:256},[32,32]),r.queue.submit([d.finish()]),await I(o.mapAsync(GPUMapMode.READ),e.signal);try{let g=new Uint8Array(o.getMappedRange());if(g.byteLength!==256*32)throw Error("Invalid WebGPU pixel buffer size");let x=new Uint8Array(1024*4);for(let h=0;h<32;h++)x.set(g.subarray(h*256,h*256+128),h*128);return x}finally{o.unmap()}},s=await c(!0);if(s.some((f,d)=>d%4===3&&f!==255))return p();let l=!1;for(let f=4;f<s.length;f+=4)if(s[f]!==s[0]||s[f+1]!==s[1]||s[f+2]!==s[2]){l=!0;break}if(!l)return p();let u=await c(!0);if(s.some((f,d)=>f!==u[d]))throw Object.assign(Error("Unstable WebGPU pixels"),{unstable:!0});return(await c(!1)).some((f,d)=>f!==(d%4===3?255:0))?p():{pixels:await O(Array.from(s)),features:Array.from(t.features).sort()}}finally{for(let a of[o,n,r])try{a?.destroy()}catch{}}}});async function J(e,t=window.RTCPeerConnection){if(!e||typeof t!="function")return p();let r=Array.isArray(e.urls)?e.urls:[e.urls];if(!r.length||r.length>4||r.some(l=>typeof l!="string"||!/^turns?:[^\s]+$/.test(l)))throw new Error("Invalid TURN configuration");if(typeof e.username!="string"||typeof e.credential!="string")throw new Error("TURN credentials required");let n=new t({iceServers:[{urls:r,username:e.username,credential:e.credential}],iceTransportPolicy:"relay"}),o,a,i={},c=[],s=!1;try{let l=new Promise(y=>{n.onicecandidate=f=>{if(!f.candidate){s=!0,y();return}let d=f.candidate.type||"unknown";i[d]=(i[d]||0)+1},n.onicecandidateerror=f=>{c.length<8&&c.push(Number.isFinite(f.errorCode)?f.errorCode:0)},o=setTimeout(y,1200)});a=n.createDataChannel("probe");let u=async()=>n.setLocalDescription(await n.createOffer());return await Promise.race([u(),l]),await l,{completed:s,candidateTypes:i,errorCodes:c}}finally{clearTimeout(o),n.onicecandidate=null,n.onicecandidateerror=null,a?.close(),n.close()}}Object.assign(S,{s94:(e={})=>J(e.turnVariants?.standard),s219:(e={})=>J(e.turnVariants?.alternatePort),s224:(e={})=>J(e.turnVariants?.alternateTransport)});function vt(){let e=new Uint8Array(52),t=new DataView(e.buffer);return t.setUint32(0,52),e.set([112,115,115,104],4),e.set([237,239,139,169,121,214,74,206,163,200,39,220,213,29,33,237],12),t.setUint32(28,20),e.set([18,16],32),e.fill(1,34,50),e.set([32,0],50),e}async function Re(e,t=()=>{}){if(typeof navigator.requestMediaKeySystemAccess!="function")return p();t("key-system-access");let r;try{r=await I(navigator.requestMediaKeySystemAccess("com.widevine.alpha",[{initDataTypes:["cenc"],audioCapabilities:[{contentType:'audio/mp4; codecs="mp4a.40.2"'}],distinctiveIdentifier:"not-allowed",persistentState:"not-allowed",sessionTypes:["temporary"]}]),e)}catch(n){if(n.name==="NotSupportedError")return p();throw n}return t("create-media-keys"),I(r.createMediaKeys(),e)}Object.assign(S,{s167:async(e={})=>{if(e.drmChallenge===!1)return p();let t=e.onPhase||(()=>{}),r=await Re(e.signal,t),n,o;try{t("create-session"),n=r.createSession("temporary"),t("challenge-message");let a=new Promise((s,l)=>{n.addEventListener("message",u=>s({type:u.messageType,bytes:new Uint8Array(u.message)}),{once:!0}),o=setTimeout(()=>l(Object.assign(Error("DRM challenge timeout"),{timeout:!0})),1e3)}),i=n.generateRequest("cenc",e.drmInitData||vt()),c=await I(Promise.race([i.then(()=>(t("request-generated"),a)),a]),e.signal);return{type:c.type,bytes:c.bytes.length,signature:await O(Array.from(c.bytes))}}finally{if(clearTimeout(o),n){t("close-session");try{Promise.resolve(n.close()).catch(()=>{})}catch{}}}},s95:async(e={})=>{if(!e.drmStress)return p();let t=await Re(e.signal),r=[];try{let n=null;for(let o=0;o<8;o++)try{r.push(t.createSession("temporary"))}catch(a){n=a.name;break}return{allocated:r.length,limit:8,failure:n}}finally{await Promise.all(r.map(n=>n.close().catch(()=>{})))}}});Object.assign(S,{s216:async()=>{if(typeof navigator.managed?.getManagedConfiguration!="function")return p();try{return await navigator.managed.getManagedConfiguration([""]),{completed:!0}}catch(e){return{completed:!1,name:String(e.name||"Error"),message:await O(String(e.message||e))}}}});async function C(e,t=1800){let r,n=new AbortController,o=performance.now();try{let a=await Promise.race([Promise.resolve().then(()=>e(n.signal)),new Promise((i,c)=>{r=setTimeout(()=>{n.abort(),c(Object.assign(new Error("Timeout"),{timeout:!0}))},t)})]);if(performance.now()-o>=t)throw Object.assign(new Error("Timeout"),{timeout:!0});if(!V(a)||JSON.stringify(a).length>8192)throw new Error("Invalid probe output");return{status:"ok",value:a,durationMs:Math.round(performance.now()-o)}}catch(a){return{status:a?.unsupported?"unsupported":a?.unstable?"unstable":a?.timeout?"timeout":"error",durationMs:Math.round(performance.now()-o)}}finally{clearTimeout(r),n.abort()}}async function Q(e={}){let t=e.ids===void 0?Object.keys(S):e.ids;if(!Array.isArray(t)||t.some(s=>!Object.prototype.hasOwnProperty.call(S,s)))throw Error("Invalid probe selection");let r=new Set(t),n=Object.entries(S).filter(([s])=>r.has(s)),o=[...n].sort(([s],[l])=>+(l==="s167")-+(s==="s167")),a={},i={},c=await xe(o,(s,l)=>C(u=>s({...e,[Le]:a,[ke]:i,signal:u,onPhase:y=>e.onProbePhase?.(l,y)}),l==="s167"?300:1800));return Object.fromEntries(n.map(([s])=>[s,c[s]]))}var je="exp_font_v1",Et="isolated-generic-fonts-v1",D=Object.freeze(["serif","sans-serif","monospace","system-ui","cursive","fantasy"]);function Be(e=globalThis.document){let t=()=>Object.assign(new Error("Isolated font document unavailable"),{unsupported:!0}),r=e?.body??e?.documentElement;if(typeof r?.append!="function"||typeof e?.createElement!="function")throw t();let n=e.createElement("iframe");n.style.cssText="position:absolute;left:-10000px;top:0;width:800px;height:100px;border:0;visibility:hidden",n.src="about:blank";try{r.append(n);let o=n.contentDocument;if(!o||(o.open(),o.write("<!doctype html><html><body></body></html>"),o.close(),!o.body))throw t();let a={},i=[];try{for(let s of D){let l=o.createElement("span");l.style.cssText=`all:initial;position:absolute;display:inline-block;font:16px ${s};white-space:nowrap;-webkit-text-size-adjust:100%;text-size-adjust:100%`,l.textContent="mmmmmmmmmmlli \u03A9\u{1F3B5}",i.push(l),o.body.append(l)}for(let s=0;s<D.length;s++){let l=i[s].getBoundingClientRect().width;if(!Number.isFinite(l)||l<=0)throw t();a[D[s]]=l}for(let s=0;s<D.length;s++)if(i[s].getBoundingClientRect().width!==a[D[s]])throw t();for(let s of i)s.textContent="M";let c=i.map(s=>s.getBoundingClientRect().width);for(let s=0;s<D.length;s++){let l=c[s];if(!Number.isFinite(l)||l<=0||l>=a[D[s]]||i[s].getBoundingClientRect().width!==l)throw t()}for(let s of i)s.textContent="";for(let s of i)if(s.getBoundingClientRect().width!==0||s.getBoundingClientRect().width!==0)throw t()}finally{for(let c of i)c.remove()}return{protocol:Et,widths:a}}finally{n.remove()}}var Me="dl_gpu_features_v1";function xt(e){return Array.isArray(e)&&e.length<=128&&e.every((t,r)=>typeof t=="string"&&t.length<=128&&/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(t)&&(r===0||e[r-1]<t))}async function Ue({scope:e=globalThis,signal:t,timeoutMs:r=1e3}={}){if(!Number.isInteger(r)||r<1||r>1e3)throw Error("Invalid GPU feature deadline");let n=()=>Object.assign(Error("GPU feature read timed out"),{timeout:!0});if(t?.aborted)throw n();let o=e.navigator?.gpu;if(typeof o?.requestAdapter!="function")throw Object.assign(Error("WebGPU unavailable"),{unsupported:!0});let a,i;try{let c=await Promise.race([Promise.resolve().then(()=>{if(t?.aborted)throw n();return o.requestAdapter()}),new Promise((y,f)=>{a=setTimeout(()=>f(n()),r),t&&(i=()=>f(n()),t.addEventListener("abort",i,{once:!0}),t.aborted&&i())})]);if(t?.aborted)throw n();if(!c)throw Object.assign(Error("WebGPU adapter unavailable"),{unsupported:!0});let s=c.features;if(!s||typeof s!="object"||typeof s[Symbol.iterator]!="function")throw Error("Invalid GPU feature set");let l=[];for(let y of s){if(l.length>=128||typeof y!="string")throw Error("Invalid GPU feature set");l.push(y)}let u=[...new Set(l)].sort();if(t?.aborted)throw n();if(!xt(u))throw Error("Invalid GPU feature set");return u}finally{clearTimeout(a),i&&t.removeEventListener("abort",i)}}var We="dl_webgl_samples_v1",At=e=>Number.isInteger(e)&&e>=4&&e<=2147483647;function Fe({scope:e=globalThis,signal:t}={}){let r=()=>{if(t?.aborted)throw Object.assign(Error("WebGL sample read cancelled"),{timeout:!0})};r();let n=e.document?.createElement("canvas");if(!n)throw Object.assign(Error("WebGL unavailable"),{unsupported:!0});n.width=n.height=1;let o=n.getContext("webgl2",{antialias:!1,depth:!1,stencil:!1,preserveDrawingBuffer:!1});if(!o)throw Object.assign(Error("WebGL2 unavailable"),{unsupported:!0});try{if(r(),o.isContextLost()||!Number.isInteger(o.MAX_SAMPLES))throw Error("WebGL sample limit unavailable");let a=o.getParameter(o.MAX_SAMPLES),i=o.getError();if(r(),o.isContextLost()||i!==o.NO_ERROR||!At(a))throw Error("Invalid WebGL sample limit");return a}finally{o.getExtension("WEBGL_lose_context")?.loseContext()}}var Ge="web-20261022.4",ze=async e=>Array.from(new Uint8Array(await crypto.subtle.digest("SHA-256",new TextEncoder().encode(e)))).map(t=>t.toString(16).padStart(2,"0")).join("");function Ve(){let e=t=>{try{let r=t();return typeof r=="string"&&r.length<=512?r:void 0}catch{return}};return{language:e(()=>navigator.language),timezone:e(()=>Intl.DateTimeFormat().resolvedOptions().timeZone)}}function qe({readNavigator:e=()=>globalThis.navigator,readScreen:t=()=>globalThis.screen,readDPR:r=()=>globalThis.devicePixelRatio}={}){let n=v=>{try{return v()}catch{return}},o=n(e),a=n(t),i=v=>{let E=n(v);return typeof E=="string"&&E.trim().length>0&&E.length<=512?E:void 0},c=(v,E,T=!1)=>{let P=n(v);return typeof P=="number"&&Number.isFinite(P)&&(T?P>=0:P>0)&&P<=E?P:void 0},s=(v,E,T=!1)=>{let P=c(v,E,T),z=c(v,E,T);return P===z?P:void 0},l=s(()=>o?.maxTouchPoints,1e5,!0),u=s(r,16),y=i(()=>o?.userAgent),f=i(()=>o?.platform),d=f?.trim().toLowerCase()==="unknown"?void 0:f,m=/iPhone|iPad/.test(y??"")||/^(iPhone|iPad)$/.test(d??"")||d==="MacIntel"&&l>1?"ios":d==="MacIntel"&&l===void 0?void 0:d,g=()=>{let v=c(()=>a?.width,16384),E=c(()=>a?.height,16384);return v===void 0||E===void 0?void 0:[Math.min(v,E),Math.max(v,E)]},x=g(),h=g(),w=x&&h&&x.every((v,E)=>v===h[E])?{width:x[0],height:x[1]}:{};return{...m?{platform:m}:{},...w,...u!==void 0?{dpr:u}:{},...l!==void 0?{touch:l}:{}}}async function St(e){if(!e)return null;let r=["Arial","Helvetica Neue","Times New Roman","Courier New","Georgia","Verdana","Menlo"].map(n=>{e.font=`72px "${n}", monospace`;let o=()=>{let y=e.measureText("mmmmmmmmmmlliWW\u03A9");return[y.width,y.actualBoundingBoxAscent,y.actualBoundingBoxDescent]},a=o(),i=o();if(!a.every(Number.isFinite)||a[0]<=0||!i.every((y,f)=>y===a[f]))return null;let c=e.measureText("M").width,s=e.measureText("M").width,l=e.measureText("").width,u=e.measureText("").width;return!Number.isFinite(c)||c<=0||c!==s||c>=a[0]||l!==0||u!==0?null:[n,...a]});return r.some(n=>n===null)?null:ze(JSON.stringify(r))}function Tt(e=globalThis.document){let t;try{if(t=e.createElement("canvas").getContext("webgl"),!t||t.isContextLost?.())return null;let r=t.getExtension("WEBGL_debug_renderer_info");if(!r)return null;let n=t.getParameter(r.UNMASKED_RENDERER_WEBGL),o=t.getError?.();return t.isContextLost?.()||o!==void 0&&o!==t.NO_ERROR?null:typeof n=="string"&&n.length<=512&&n.trim().length?n:null}catch{return null}finally{try{t?.getExtension("WEBGL_lose_context")?.loseContext()}catch{}}}async function He({onProbePhase:e,browserStorage:t="persistent",mode:r="full",identityMetadata:n=!1,fontMetrics:o="none",gpuFeatures:a=!1,webglSamples:i=!1,av1Playback:c=!1,softwareCapabilities:s=!1,textSize:l=!1,clockLayout:u=!1,dateLayout:y=!1}={}){if(typeof n!="boolean"||r==="contextual"&&n)throw Error("Invalid identity metadata collection mode");if(typeof y!="boolean")throw Error("Invalid date-layout collection mode");if(typeof u!="boolean")throw Error("Invalid clock-layout collection mode");if(typeof l!="boolean")throw Error("Invalid text-size collection mode");if(![!1,!0,"extended-v2"].includes(s))throw Error("Invalid software capability collection mode");if(typeof c!="boolean"||r==="contextual"&&c)throw Error("Invalid AV1 collection mode");if(typeof i!="boolean"||r==="contextual"&&i)throw Error("Invalid WebGL sample collection mode");if(typeof a!="boolean"||r==="contextual"&&a)throw Error("Invalid GPU feature collection mode");if(!["none","isolated-v1"].includes(o)||r==="contextual"&&o!=="none")throw Error("Invalid font metrics mode");if(!["full","contextual","matching"].includes(r))throw Error("Invalid collection mode");if(!["persistent","none"].includes(t))throw Error("Invalid browser storage mode");let f;if(t==="persistent")try{let b=localStorage.getItem("dl.browser");typeof b=="string"&&b.length>=1&&b.length<=128?f=b:(f=R(),localStorage.setItem("dl.browser",f))}catch{}let d=r==="full"?Q({onProbePhase:e,drmChallenge:!1}):Q({onProbePhase:e,ids:r==="matching"?[...be,"s101",...n?we:[]]:["s101"]}),m=o==="isolated-v1"?Promise.all([d,C(()=>Be())]).then(([b,A])=>({...b,[je]:A})):d,g=a?Promise.all([m,C(b=>Ue({signal:b}))]).then(([b,A])=>({...b,[Me]:A})):m,x=i?Promise.all([g,C(b=>Fe({signal:b}))]).then(([b,A])=>({...b,[We]:A})):g,h=c?Promise.all([x,C(b=>Te({signal:b}))]).then(([b,A])=>({...b,[Ae]:A})):x,w=s?Promise.all([h,C(b=>s==="extended-v2"?he({signal:b}):Y({signal:b}))]).then(([b,A])=>({...b,[s==="extended-v2"?ye:me]:A})):h,v=l?Promise.all([w,C(b=>pe({signal:b}))]).then(([b,A])=>({...b,[fe]:A})):w,E=u?Promise.all([v,C(b=>de({signal:b}))]).then(([b,A])=>({...b,[ue]:A})):v,T=y?Promise.all([E,C(b=>ce({signal:b}))]).then(([b,A])=>({...b,[se]:A})):E;if(r==="contextual")return{version:2,collectorRevision:Ge,browserId:f,probes:await T,render:{canvas:null,gpu:null,audio:null,fonts:null},device:qe(),locale:Ve()};let P=U(async b=>{let A,oe;try{let F=b.createElement("canvas");if(F.width=280,F.height=80,A=F.getContext("2d"),A){A.fillStyle="#f60",A.fillRect(13,7,120,42),A.font="17px Arial",A.fillStyle="#069",A.fillText("DeepLink \u03A9 \u{1F3B5} 123",4,35);let ot=G(F,A);oe=await ze(ot)}}catch{}let nt=await St(A).catch(()=>null);return{canvasHash:oe,fontHash:nt}}).catch(()=>({canvasHash:null,fontHash:null})),z=Tt(),[{canvasHash:et,fontHash:tt},H]=await Promise.all([P,T]),rt=H.s21?.status==="ok"?H.s21.value:null;return{version:2,collectorRevision:Ge,browserId:f,probes:H,render:{canvas:et||null,gpu:z||null,audio:rt,fonts:tt},device:qe(),locale:Ve()}}var te=1e4,Ot=60*1024,ee=0;function re(e){if(!Number.isInteger(e)||e<1||e>6e4)throw Error("Invalid request timeout");return e}async function $e(e,t,{timeoutMs:r=te,errorPrefix:n="Request failed",keepalive:o=!1,collectorKey:a=null}={}){if(re(r),typeof o!="boolean")throw Error("Invalid keepalive policy");let i=performance.now(),c=new AbortController,s,l=0,u=Object.assign(new Error("Connection timed out. Please try again."),{name:"TimeoutError",code:"request_timeout"}),y=new Promise((f,d)=>{s=setTimeout(()=>{d(u),c.abort(u)},r)});try{let f=(async()=>{if(a!==null&&(t=await ie(t,a,e)),c.signal.aborted||performance.now()-i>=r)throw u;let m=JSON.stringify(t),g=o?new TextEncoder().encode(m).byteLength:0,x=o&&g+ee<=Ot;x&&(ee+=g,l=g);let h=await fetch(e,{method:"POST",redirect:"error",headers:{"Content-Type":"application/json"},body:m,...x?{keepalive:!0}:{},signal:c.signal});if(!h.ok){let w=Error(`${n} (${h.status})`);throw h.status===400&&h.headers?.get?.("X-DeepLink-Recovery-Rejected")==="v1"&&(w.code="recovery_input_rejected"),w}return h.json()})(),d=await Promise.race([f,y]);if(performance.now()-i>=r)throw c.abort(u),u;return d}finally{clearTimeout(s),ee-=l}}function ne(e,t){if(e?.status!=="primer"||!Array.isArray(e.names)||!(e.names.length===2||e.version===2&&e.names.length===18))return null;let r=Array.from(e.names),n=Object.prototype.hasOwnProperty.call(e,"issuedAt")?e.issuedAt:t;return!Number.isSafeInteger(n)||n<0||!Number.isSafeInteger(e.expiresAt)||e.expiresAt<=n||e.expiresAt-n>9e5||new Set(r).size!==r.length?null:r.every(o=>typeof o=="string"&&o.endsWith(".")&&/^dns-marker-[a-f0-9]{32}\.tls-test\.walkwalk\.app\.$/.test(o))?r:null}function Pt(e,{document:t=globalThis.document,now:r=Date.now()}={}){try{let n=ne(e,r);if(!n||!t?.head)return 0;let o=n.map(a=>{let i=t.createElement("link");return i.rel="dns-prefetch",i.href=`https://${a.slice(0,-1)}/`,i});for(let a of o)t.head.appendChild(a);return n.length}catch{return 0}}async function Ye(e,{document:t=globalThis.document,now:r=Date.now(),PeerConnection:n=globalThis.RTCPeerConnection,secureContext:o=globalThis.isSecureContext,schedule:a=globalThis.setTimeout,cancel:i=globalThis.clearTimeout}={}){let c;try{c=ne(e,r)}catch{}if(!c)return{status:"unavailable",lookupCacheStateObserved:!1};let s=Pt(e,{document:t,now:r});return o!==!0||typeof n!="function"?{status:"hints_only",hints:s,lookupCacheStateObserved:!1}:new Promise(l=>{let u,y=!1,f,d,m,g=()=>{try{u?.close()}catch{}},x=h=>{y||(y=!0,i(f),i(d),h!=="requested"&&(i(m),g()),l({status:h,hints:s,lookupCacheStateObserved:!1}))};f=a(()=>x("timed_out"),1e3);try{u=new n({iceServers:[{urls:c.map(h=>`stun:${h.slice(0,-1)}:3478`)}],iceTransportPolicy:"all",iceCandidatePoolSize:0}),m=a(g,2e3),u.createDataChannel("deeplink-continuity"),(async()=>{try{let h=await u.createOffer();if(y||(await u.setLocalDescription(h),y))return;d=a(()=>x("requested"),250)}catch{x("unavailable")}})()}catch{x("unavailable")}})}async function Ke(e,t={}){let r;try{r=ne(e,t.now??Date.now())}catch{}if(!r)return{status:"unavailable",lookupCacheStateObserved:!1};if(r.length===2)return Ye(e,t);let n=[];for(let i=0;i<r.length;i+=2)n.push(Ye({...e,names:r.slice(i,i+2)},t));let o=await Promise.all(n);return{status:o.every(i=>i.status==="requested")?"requested":o.every(i=>i.status==="hints_only")?"hints_only":"partial",hints:o.reduce((i,c)=>i+(c.hints||0),0),lookupCacheStateObserved:!1}}var q=class{#r;#t;#e;#n;#o;#i;#a;#s;#c;#l;#u;#d;#f;#p;collectObservation(){return this.#r??=He({browserStorage:this.#e,mode:this.#n,...this.#o?{identityMetadata:!0}:{},fontMetrics:this.#i,gpuFeatures:this.#a,webglSamples:this.#s,av1Playback:this.#c,softwareCapabilities:this.#l,textSize:this.#u,clockLayout:this.#d,dateLayout:this.#f}).finally(()=>{this.#r=void 0})}constructor(t=location.origin,{browserStorage:r="persistent",collectionMode:n="full",identityMetadata:o=!1,fontMetrics:a="none",gpuFeatures:i=!1,webglSamples:c=!1,av1Playback:s=!1,softwareCapabilities:l=!1,textSize:u=!1,clockLayout:y=!1,dateLayout:f=!1,requestTimeoutMs:d=te,collectorKey:m=null}={}){if(typeof o!="boolean"||n==="contextual"&&o)throw Error("Invalid identity metadata collection mode");if(this.#o=o,!["persistent","none"].includes(r))throw Error("Invalid browser storage mode");if(!["full","contextual","matching"].includes(n))throw Error("Invalid collection mode");if(!["none","isolated-v1"].includes(a)||n==="contextual"&&a!=="none")throw Error("Invalid font metrics mode");if(typeof i!="boolean"||n==="contextual"&&i)throw Error("Invalid GPU feature collection mode");if(typeof c!="boolean"||n==="contextual"&&c)throw Error("Invalid WebGL sample collection mode");if(typeof s!="boolean"||n==="contextual"&&s)throw Error("Invalid AV1 collection mode");if(typeof f!="boolean")throw Error("Invalid date-layout collection mode");if(this.#f=f,typeof y!="boolean")throw Error("Invalid clock-layout collection mode");if(this.#d=y,typeof u!="boolean")throw Error("Invalid text-size collection mode");if(this.#u=u,![!1,!0,"extended-v2"].includes(l))throw Error("Invalid software capability collection mode");this.#l=l,this.#c=s,this.#s=c,this.#a=i,this.#t=m===null?null:M(m),this.#p=re(d),this.#i=a,this.baseURL=new URL(t),this.#e=r,this.#n=n}async request(t,r,{keepalive:n=!1}={}){return $e(new URL(t,this.baseURL),r,{timeoutMs:this.#p,errorPrefix:"DeepLink request failed",keepalive:n,collectorKey:this.#t})}async identify({applicationId:t}={}){return this.request("/v1/identify",{applicationId:t,observation:await this.collectObservation()})}async createLink(t){let r=await this.request("/v1/browser-links",{payload:t,observation:await this.collectObservation()},{keepalive:!0}),n=r.dnsPrimer??r.experimentalDNSPrimer;if(n)try{await Ke(n)}catch{}return r}};function Xe(e){let t=new Set;function r(o,a=0){if(a>6)throw new TypeError("Payload must be no more than 6 levels deep");if(o===null||typeof o=="string"||typeof o=="boolean"||typeof o=="number"&&Number.isFinite(o))return;if(!o||typeof o!="object"||t.has(o))throw new TypeError("Payload must contain only JSON values");let i=Array.isArray(o),c=Object.getPrototypeOf(o);if(!i&&c!==Object.prototype&&c!==null)throw new TypeError("Payload must contain only plain JSON objects");let s=Reflect.ownKeys(o).filter(l=>!(i&&l==="length"));if(s.some((l,u)=>typeof l!="string"||i&&l!==String(u))||(i?s.length!==o.length||o.length>128:s.length>64))throw new TypeError("Payload has too many properties or invalid JSON values");t.add(o);for(let l of s){let u=Object.getOwnPropertyDescriptor(o,l);if(!u.enumerable||!Object.hasOwn(u,"value"))throw new TypeError("Payload must contain only JSON values");r(u.value,a+1)}t.delete(o)}if(!e||typeof e!="object"||Array.isArray(e))throw new TypeError("Payload must be a JSON object");r(e);let n=JSON.stringify(e);if(n.length>8192)throw new TypeError("Payload exceeds 8192 characters");return n}function Je(e){let t;try{t=new URL(e)}catch{throw new TypeError("A valid HTTPS API URL is required")}if(t.protocol!=="https:"||t.username||t.password||t.search||t.hash||t.pathname!=="/")throw new TypeError("An HTTPS origin is required");return t.origin}async function Ze(e,t){let r=new AbortController,n,o=new Promise((a,i)=>{n=setTimeout(()=>{i(Object.assign(new Error("Connection timed out."),{code:"request_timeout"})),r.abort()},t)});try{return await Promise.race([(async()=>{let a=await fetch(e,{redirect:"error",credentials:"omit",signal:r.signal,headers:{Accept:"application/json"}});if(!a.ok)throw new Error(`SDK configuration failed (${a.status})`);return a.json()})(),o])}finally{clearTimeout(n)}}var Qe=class{#r;#t;#e;#n;constructor({url:t,applicationId:r,timeout:n=1e4}={}){if(this.#r=Je(t),typeof r!="string"||!/^[A-Za-z0-9_-]{1,64}$/.test(r))throw new TypeError("A valid applicationId is required");if(!Number.isInteger(n)||n<1||n>6e4)throw new TypeError("Timeout must be between 1 and 60000 milliseconds");this.#t=r,this.#e=n}#o(){return this.#n??=(async()=>{let t=await Ze(new URL("/v1/config",this.#r),this.#e),r=Je(t.collectorOrigin),{key:n}=await Ze(new URL("/v1/collector-key",r),this.#e),o=M(n);return new q(r,{collectorKey:o,requestTimeoutMs:this.#e})})().catch(t=>{throw this.#n=void 0,t})}async createLink({payload:t}={}){let r=JSON.parse(Xe(t));if(Object.hasOwn(r,"app")&&r.app!==this.#t)throw new TypeError("Payload app must match applicationId");let n={...r,app:this.#t};Xe(n);let a=await(await this.#o()).createLink(n),i;try{i=new URL(a.url)}catch{throw new Error("Invalid deep link response")}if(typeof a.id!="string"||!a.id||i.protocol!=="https:"||i.username||i.password)throw new Error("Invalid deep link response");return{id:a.id,url:a.url}}};export{Qe as Deeplinkit};
|
package/package.json
CHANGED
|
@@ -1,6 +1,26 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "deeplinkit",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Browser JavaScript SDK for deeplinkit",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "index.js",
|
|
7
|
+
"types": "index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./index.d.ts",
|
|
11
|
+
"import": "./index.js",
|
|
12
|
+
"default": "./index.js"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"files": [
|
|
16
|
+
"index.js",
|
|
17
|
+
"index.d.ts"
|
|
18
|
+
],
|
|
19
|
+
"license": "UNLICENSED",
|
|
20
|
+
"author": "Paul Xu",
|
|
21
|
+
"homepage": "https://deeplinkit.com",
|
|
22
|
+
"publishConfig": {
|
|
23
|
+
"access": "public"
|
|
24
|
+
},
|
|
25
|
+
"sideEffects": false
|
|
26
|
+
}
|