UNPKG

@thumbmarkjs/thumbmarkjs

Version:

![GitHub package.json dynamic](https://img.shields.io/github/package-json/version/ilkkapeltola/thumbmarkjs) ![NPM Version](https://img.shields.io/npm/v/@thumbmarkjs/thumbmarkjs) ![NPM Downloads](https://img.shields.io/npm/dm/%40thumbmarkjs%2Fthumbmarkjs

3 lines (2 loc) 20 kB
const e="https://api.thumbmarkjs.com",n={exclude:[],include:[],stabilize:["private","iframe"],logging:!0,timeout:5e3,cache_api_call:!0,performance:!1};let t={...n};function o(e,n){t[e]=n}const r={private:[{exclude:["canvas"],browsers:["firefox","safari>=17","brave"]},{exclude:["audio"],browsers:["samsungbrowser","safari"]},{exclude:["fonts"],browsers:["firefox"]},{exclude:["plugins"],browsers:["brave"]}],iframe:[{exclude:["permissions.camera","permission.geolocation","permissions.microphone","system.applePayVersion","system.cookieEnabled"],browsers:["safari"]}],vpn:[{exclude:["ip"]}]};function i(e){let n=0;for(let t=0;t<e.length;++t)n+=Math.abs(e[t]);return n}function a(e,n,t){let o=[];for(let n=0;n<e[0].data.length;n++){let t=[];for(let o=0;o<e.length;o++)t.push(e[o].data[n]);o.push(s(t))}const r=new Uint8ClampedArray(o);return new ImageData(r,n,t)}function s(e){if(0===e.length)return 0;const n={};for(const t of e)n[t]=(n[t]||0)+1;let t=e[0];for(const e in n)n[e]>n[t]&&(t=parseInt(e,10));return t}function c(e){return e^=e>>>16,e=Math.imul(e,2246822507),e^=e>>>13,e=Math.imul(e,3266489909),(e^=e>>>16)>>>0}const l=new Uint32Array([597399067,2869860233,951274213,2716044179]);function u(e,n){return e<<n|e>>>32-n}function d(e,n=0){var t;if(n=n?0|n:0,"string"==typeof e&&(t=e,e=(new TextEncoder).encode(t).buffer),!(e instanceof ArrayBuffer))throw new TypeError("Expected key to be ArrayBuffer or string");const o=new Uint32Array([n,n,n,n]);!function(e,n){const t=e.byteLength/16|0,o=new Uint32Array(e,0,4*t);for(let e=0;e<t;e++){const t=o.subarray(4*e,4*(e+1));t[0]=Math.imul(t[0],l[0]),t[0]=u(t[0],15),t[0]=Math.imul(t[0],l[1]),n[0]=n[0]^t[0],n[0]=u(n[0],19),n[0]=n[0]+n[1],n[0]=Math.imul(n[0],5)+1444728091,t[1]=Math.imul(t[1],l[1]),t[1]=u(t[1],16),t[1]=Math.imul(t[1],l[2]),n[1]=n[1]^t[1],n[1]=u(n[1],17),n[1]=n[1]+n[2],n[1]=Math.imul(n[1],5)+197830471,t[2]=Math.imul(t[2],l[2]),t[2]=u(t[2],17),t[2]=Math.imul(t[2],l[3]),n[2]=n[2]^t[2],n[2]=u(n[2],15),n[2]=n[2]+n[3],n[2]=Math.imul(n[2],5)+2530024501,t[3]=Math.imul(t[3],l[3]),t[3]=u(t[3],18),t[3]=Math.imul(t[3],l[0]),n[3]=n[3]^t[3],n[3]=u(n[3],13),n[3]=n[3]+n[0],n[3]=Math.imul(n[3],5)+850148119}}(e,o),function(e,n){const t=e.byteLength/16|0,o=e.byteLength%16,r=new Uint32Array(4),i=new Uint8Array(e,16*t,o);switch(o){case 15:r[3]=r[3]^i[14]<<16;case 14:r[3]=r[3]^i[13]<<8;case 13:r[3]=r[3]^i[12],r[3]=Math.imul(r[3],l[3]),r[3]=u(r[3],18),r[3]=Math.imul(r[3],l[0]),n[3]=n[3]^r[3];case 12:r[2]=r[2]^i[11]<<24;case 11:r[2]=r[2]^i[10]<<16;case 10:r[2]=r[2]^i[9]<<8;case 9:r[2]=r[2]^i[8],r[2]=Math.imul(r[2],l[2]),r[2]=u(r[2],17),r[2]=Math.imul(r[2],l[3]),n[2]=n[2]^r[2];case 8:r[1]=r[1]^i[7]<<24;case 7:r[1]=r[1]^i[6]<<16;case 6:r[1]=r[1]^i[5]<<8;case 5:r[1]=r[1]^i[4],r[1]=Math.imul(r[1],l[1]),r[1]=u(r[1],16),r[1]=Math.imul(r[1],l[2]),n[1]=n[1]^r[1];case 4:r[0]=r[0]^i[3]<<24;case 3:r[0]=r[0]^i[2]<<16;case 2:r[0]=r[0]^i[1]<<8;case 1:r[0]=r[0]^i[0],r[0]=Math.imul(r[0],l[0]),r[0]=u(r[0],15),r[0]=Math.imul(r[0],l[1]),n[0]=n[0]^r[0]}}(e,o),function(e,n){n[0]=n[0]^e.byteLength,n[1]=n[1]^e.byteLength,n[2]=n[2]^e.byteLength,n[3]=n[3]^e.byteLength,n[0]=n[0]+n[1]|0,n[0]=n[0]+n[2]|0,n[0]=n[0]+n[3]|0,n[1]=n[1]+n[0]|0,n[2]=n[2]+n[0]|0,n[3]=n[3]+n[0]|0,n[0]=c(n[0]),n[1]=c(n[1]),n[2]=c(n[2]),n[3]=c(n[3]),n[0]=n[0]+n[1]|0,n[0]=n[0]+n[2]|0,n[0]=n[0]+n[3]|0,n[1]=n[1]+n[0]|0,n[2]=n[2]+n[0]|0,n[3]=n[3]+n[0]|0}(e,o);const r=new Uint8Array(o.buffer);return Array.from(r).map((e=>e.toString(16).padStart(2,"0"))).join("")}const m=280;function h(e,n){return new Promise((t=>setTimeout(t,e,n)))}const f=["Arial","Arial Black","Arial Narrow","Arial Rounded MT","Arimo","Archivo","Barlow","Bebas Neue","Bitter","Bookman","Calibri","Cabin","Candara","Century","Century Gothic","Comic Sans MS","Constantia","Courier","Courier New","Crimson Text","DM Mono","DM Sans","DM Serif Display","DM Serif Text","Dosis","Droid Sans","Exo","Fira Code","Fira Sans","Franklin Gothic Medium","Garamond","Geneva","Georgia","Gill Sans","Helvetica","Impact","Inconsolata","Indie Flower","Inter","Josefin Sans","Karla","Lato","Lexend","Lucida Bright","Lucida Console","Lucida Sans Unicode","Manrope","Merriweather","Merriweather Sans","Montserrat","Myriad","Noto Sans","Nunito","Nunito Sans","Open Sans","Optima","Orbitron","Oswald","Pacifico","Palatino","Perpetua","PT Sans","PT Serif","Poppins","Prompt","Public Sans","Quicksand","Rajdhani","Recursive","Roboto","Roboto Condensed","Rockwell","Rubik","Segoe Print","Segoe Script","Segoe UI","Sora","Source Sans Pro","Space Mono","Tahoma","Taviraj","Times","Times New Roman","Titillium Web","Trebuchet MS","Ubuntu","Varela Round","Verdana","Work Sans"],p=["monospace","sans-serif","serif"];function g(e,n){if(!e)throw new Error("Canvas context not supported");return e.font=`72px ${n}`,e.measureText("WwMmLli0Oo").width}function v(){var e;const n=document.createElement("canvas"),t=null!==(e=n.getContext("webgl"))&&void 0!==e?e:n.getContext("experimental-webgl");if(t&&"getParameter"in t)try{const e=(t.getParameter(t.VENDOR)||"").toString(),n=(t.getParameter(t.RENDERER)||"").toString();let o={vendor:e,renderer:n,version:(t.getParameter(t.VERSION)||"").toString(),shadingLanguageVersion:(t.getParameter(t.SHADING_LANGUAGE_VERSION)||"").toString()};if(!n.length||!e.length){const e=t.getExtension("WEBGL_debug_renderer_info");if(e){const n=(t.getParameter(e.UNMASKED_VENDOR_WEBGL)||"").toString(),r=(t.getParameter(e.UNMASKED_RENDERER_WEBGL)||"").toString();n&&(o.vendorUnmasked=n),r&&(o.rendererUnmasked=r)}}return o}catch(e){}return"undefined"}function w(){const e=new Float32Array(1),n=new Uint8Array(e.buffer);return e[0]=1/0,e[0]=e[0]-e[0],n[3]}const y=(e,n,t,o)=>{const r=(t-n)/o;let i=0;for(let t=0;t<o;t++){i+=e(n+(t+.5)*r)}return i*r};function S(e,n){const t={};return n.forEach((n=>{const o=function(e){if(0===e.length)return null;const n={};e.forEach((e=>{const t=String(e);n[t]=(n[t]||0)+1}));let t=e[0],o=1;return Object.keys(n).forEach((e=>{n[e]>o&&(t=e,o=n[e])})),t}(e.map((e=>n in e?e[n]:void 0)).filter((e=>void 0!==e)));o&&(t[n]=o)})),t}const b=["accelerometer","accessibility","accessibility-events","ambient-light-sensor","background-fetch","background-sync","bluetooth","camera","clipboard-read","clipboard-write","device-info","display-capture","gyroscope","geolocation","local-fonts","magnetometer","microphone","midi","nfc","notifications","payment-handler","persistent-storage","push","speaker","storage-access","top-level-storage-access","window-management","query"];function M(){var e,n,t,o,r,i;if("undefined"==typeof navigator)return{name:"unknown",version:"unknown"};const a=navigator.userAgent,s=[/(?<name>SamsungBrowser)\/(?<version>\d+(?:\.\d+)+)/,/(?<name>EdgA|EdgiOS|Edg)\/(?<version>\d+(?:\.\d+)+)/,/(?<name>OPR|OPX)\/(?<version>\d+(?:\.\d+)+)/,/Opera[\s\/](?<version>\d+(?:\.\d+)+)/,/Opera Mini\/(?<version>\d+(?:\.\d+)+)/,/Opera Mobi\/(?<version>\d+(?:\.\d+)+)/,/(?<name>Vivaldi)\/(?<version>\d+(?:\.\d+)+)/,/(?<name>Brave)\/(?<version>\d+(?:\.\d+)+)/,/(?<name>CriOS)\/(?<version>\d+(?:\.\d+)+)/,/(?<name>FxiOS)\/(?<version>\d+(?:\.\d+)+)/,/(?<name>Chrome|Chromium)\/(?<version>\d+(?:\.\d+)+)/,/(?<name>Firefox|Waterfox|Iceweasel|IceCat)\/(?<version>\d+(?:\.\d+)+)/,/Version\/(?<version1>[\d.]+).*Safari\/[\d.]+|(?<name>Safari)\/(?<version2>[\d.]+)/,/(?<name>MSIE|Trident|IEMobile).+?(?<version>\d+(?:\.\d+)+)/,/(?<name>[A-Za-z]+)\/(?<version>\d+(?:\.\d+)+)/],c={edg:"Edge",edga:"Edge",edgios:"Edge",opr:"Opera",opx:"Opera",crios:"Chrome",fxios:"Firefox",samsung:"SamsungBrowser",vivaldi:"Vivaldi",brave:"Brave"};for(const l of s){const s=a.match(l);if(s){let a=null===(e=s.groups)||void 0===e?void 0:e.name,u=(null===(n=s.groups)||void 0===n?void 0:n.version)||(null===(t=s.groups)||void 0===t?void 0:t.version1)||(null===(o=s.groups)||void 0===o?void 0:o.version2);if(a||!(null===(r=s.groups)||void 0===r?void 0:r.version1)&&!(null===(i=s.groups)||void 0===i?void 0:i.version2)||(a="Safari"),!a&&l.source.includes("Opera Mini")&&(a="Opera Mini"),!a&&l.source.includes("Opera Mobi")&&(a="Opera Mobi"),!a&&l.source.includes("Opera")&&(a="Opera"),!a&&s[1]&&(a=s[1]),!u&&s[2]&&(u=s[2]),a){return{name:c[a.toLowerCase()]||a,version:u||"unknown"}}}}return{name:"unknown",version:"unknown"}}function P(){if("undefined"==typeof navigator||!navigator.userAgent)return!1;const e=navigator.userAgent;return/Mobi|Android|iPhone|iPod|IEMobile|Opera Mini|Opera Mobi|webOS|BlackBerry|Windows Phone/i.test(e)&&!/iPad/i.test(e)}function E(){let e=[];const n={"prefers-contrast":["high","more","low","less","forced","no-preference"],"any-hover":["hover","none"],"any-pointer":["none","coarse","fine"],pointer:["none","coarse","fine"],hover:["hover","none"],update:["fast","slow"],"inverted-colors":["inverted","none"],"prefers-reduced-motion":["reduce","no-preference"],"prefers-reduced-transparency":["reduce","no-preference"],scripting:["none","initial-only","enabled"],"forced-colors":["active","none"]};return Object.keys(n).forEach((t=>{n[t].forEach((n=>{matchMedia(`(${t}: ${n})`).matches&&e.push(`${t}: ${n}`)}))})),e}function A(){if("https:"===window.location.protocol&&"function"==typeof window.ApplePaySession)try{const e=window.ApplePaySession.supportsVersion;for(let n=15;n>0;n--)if(e(n))return n}catch(e){return 0}return 0}const C="SamsungBrowser"!==M().name?1:3;let x,O=null;const T={audio:async function(){return async function(){return new Promise(((e,n)=>{try{const n=44100,t=5e3,o=new(window.OfflineAudioContext||window.webkitOfflineAudioContext)(1,t,n),r=o.createBufferSource(),a=o.createOscillator();a.frequency.value=1e3;const s=o.createDynamicsCompressor();let c;s.threshold.value=-50,s.knee.value=40,s.ratio.value=12,s.attack.value=0,s.release.value=.2,a.connect(s),s.connect(o.destination),a.start(),o.oncomplete=n=>{c=n.renderedBuffer.getChannelData(0),e({sampleHash:i(c),maxChannels:o.destination.maxChannelCount,channelCountMode:r.channelCountMode})},o.startRendering()}catch(e){console.error("Error creating audio fingerprint:",e),n(e)}}))}()},canvas:async function(){return new Promise((e=>{const n=Array.from({length:3},(()=>function(){const e=document.createElement("canvas"),n=e.getContext("2d");if(!n)return new ImageData(1,1);e.width=m,e.height=20;const t=n.createLinearGradient(0,0,e.width,e.height);t.addColorStop(0,"red"),t.addColorStop(1/6,"orange"),t.addColorStop(2/6,"yellow"),t.addColorStop(.5,"green"),t.addColorStop(4/6,"blue"),t.addColorStop(5/6,"indigo"),t.addColorStop(1,"violet"),n.fillStyle=t,n.fillRect(0,0,e.width,e.height);const o="Random Text WMwmil10Oo";n.font="23.123px Arial",n.fillStyle="black",n.fillText(o,-5,15),n.fillStyle="rgba(0, 0, 255, 0.5)",n.fillText(o,-3.3,17.7),n.beginPath(),n.moveTo(0,0),n.lineTo(2*e.width/7,e.height),n.strokeStyle="white",n.lineWidth=2,n.stroke();const r=n.getImageData(0,0,e.width,e.height);return r}()));e({commonPixelsHash:d(a(n,m,20).data.toString()).toString()})}))},fonts:async function(e){return new Promise(((e,n)=>{try{!async function(e){for(var n;!document.body;)await h(50);const t=document.createElement("iframe");t.setAttribute("frameBorder","0");const o=t.style;o.setProperty("position","fixed"),o.setProperty("display","block","important"),o.setProperty("visibility","visible"),o.setProperty("border","0"),o.setProperty("opacity","0"),t.src="about:blank",document.body.appendChild(t);const r=t.contentDocument||(null===(n=t.contentWindow)||void 0===n?void 0:n.document);if(!r)throw new Error("Iframe document is not accessible");e({iframe:r}),setTimeout((()=>{document.body.removeChild(t)}),0)}((async({iframe:n})=>{const t=n.createElement("canvas").getContext("2d"),o=p.map((e=>g(t,e)));let r={};f.forEach((e=>{const n=g(t,e);o.includes(n)||(r[e]=n)})),e(r)}))}catch(e){n({error:"unsupported"})}}))},hardware:function(){return new Promise(((e,n)=>{const t=void 0!==navigator.deviceMemory?navigator.deviceMemory:0,o=window.performance&&window.performance.memory?window.performance.memory:0;e({videocard:v(),architecture:w(),deviceMemory:t.toString()||"undefined",jsHeapSizeLimit:o.jsHeapSizeLimit||0})}))},locales:function(){return new Promise((e=>{e({languages:navigator.language,timezone:Intl.DateTimeFormat().resolvedOptions().timeZone})}))},math:function(){return new Promise((e=>{e({acos:Math.acos(.5),asin:y(Math.asin,-1,1,97),cos:y(Math.cos,0,Math.PI,97),largeCos:Math.cos(1e20),largeSin:Math.sin(1e20),largeTan:Math.tan(1e20),sin:y(Math.sin,-Math.PI,Math.PI,97),tan:y(Math.tan,0,2*Math.PI,97)})}))},permissions:async function(e){let n=(null==e?void 0:e.permissions_to_check)||b;const t=Array.from({length:3},(()=>async function(e){const n={};for(const t of e)try{const e=await navigator.permissions.query({name:t});n[t]=e.state.toString()}catch(e){}return n}(n)));return Promise.all(t).then((e=>S(e,n)))},plugins:async function(){const e=[];if(navigator.plugins)for(let n=0;n<navigator.plugins.length;n++){const t=navigator.plugins[n];e.push([t.name,t.filename,t.description].join("|"))}return new Promise((n=>{n({plugins:e})}))},screen:function(){return new Promise((e=>{const n={is_touchscreen:navigator.maxTouchPoints>0,maxTouchPoints:navigator.maxTouchPoints,colorDepth:screen.colorDepth,mediaMatches:E()};P()&&navigator.maxTouchPoints>0&&(n.resolution=function(){const e=window.screen.width,n=window.screen.height,t=Math.max(e,n).toString(),o=Math.min(e,n).toString();return`${t}x${o}`}()),e(n)}))},system:function(){return new Promise((e=>{const n=M();e({platform:window.navigator.platform,productSub:navigator.productSub,product:navigator.product,useragent:navigator.userAgent,hardwareConcurrency:navigator.hardwareConcurrency,browser:{name:n.name,version:n.version},mobile:P(),applePayVersion:A(),cookieEnabled:window.navigator.cookieEnabled})}))},webgl:async function(){"undefined"!=typeof document&&(x=document.createElement("canvas"),x.width=200,x.height=100,O=x.getContext("webgl"));try{if(!O)throw new Error("WebGL not supported");const e=Array.from({length:C},(()=>function(){try{if(!O)throw new Error("WebGL not supported");const e="\n attribute vec2 position;\n void main() {\n gl_Position = vec4(position, 0.0, 1.0);\n }\n ",n="\n precision mediump float;\n void main() {\n gl_FragColor = vec4(0.812, 0.195, 0.553, 0.921); // Set line color\n }\n ",t=O.createShader(O.VERTEX_SHADER),o=O.createShader(O.FRAGMENT_SHADER);if(!t||!o)throw new Error("Failed to create shaders");if(O.shaderSource(t,e),O.shaderSource(o,n),O.compileShader(t),!O.getShaderParameter(t,O.COMPILE_STATUS))throw new Error("Vertex shader compilation failed: "+O.getShaderInfoLog(t));if(O.compileShader(o),!O.getShaderParameter(o,O.COMPILE_STATUS))throw new Error("Fragment shader compilation failed: "+O.getShaderInfoLog(o));const r=O.createProgram();if(!r)throw new Error("Failed to create shader program");if(O.attachShader(r,t),O.attachShader(r,o),O.linkProgram(r),!O.getProgramParameter(r,O.LINK_STATUS))throw new Error("Shader program linking failed: "+O.getProgramInfoLog(r));O.useProgram(r);const i=137,a=new Float32Array(4*i),s=2*Math.PI/i;for(let e=0;e<i;e++){const n=e*s;a[4*e]=0,a[4*e+1]=0,a[4*e+2]=Math.cos(n)*(x.width/2),a[4*e+3]=Math.sin(n)*(x.height/2)}const c=O.createBuffer();O.bindBuffer(O.ARRAY_BUFFER,c),O.bufferData(O.ARRAY_BUFFER,a,O.STATIC_DRAW);const l=O.getAttribLocation(r,"position");O.enableVertexAttribArray(l),O.vertexAttribPointer(l,2,O.FLOAT,!1,0,0),O.viewport(0,0,x.width,x.height),O.clearColor(0,0,0,1),O.clear(O.COLOR_BUFFER_BIT),O.drawArrays(O.LINES,0,2*i);const u=new Uint8ClampedArray(x.width*x.height*4);O.readPixels(0,0,x.width,x.height,O.RGBA,O.UNSIGNED_BYTE,u);return new ImageData(u,x.width,x.height)}catch(e){return new ImageData(1,1)}finally{O&&(O.bindBuffer(O.ARRAY_BUFFER,null),O.useProgram(null),O.viewport(0,0,O.drawingBufferWidth,O.drawingBufferHeight),O.clearColor(0,0,0,0))}}()));return{commonPixelsHash:d(a(e,x.width,x.height).data.toString()).toString()}}catch(e){return{webgl:"unsupported"}}}},k={},I={timeout:"true"},R=(e,n,t)=>{k[e]=n};function _(){return"1.1.1"}function L(e,n){var t;const o=M(),i=o.name.toLowerCase(),a=o.version.split(".")[0]||"0",s=parseInt(a,10),c=[...(null==n?void 0:n.exclude)||[]],l=(null==n?void 0:n.stabilize)||[],u=(null==n?void 0:n.include)||[];for(const e of l){const n=r[e];if(n)for(const e of n){const n=!("browsers"in e),o=!n&&(null===(t=e.browsers)||void 0===t?void 0:t.some((e=>{const n=e.match(/(.+?)(>=)(\d+)/);if(n){const[,e,,t]=n,o=parseInt(t,10);return i===e&&s>=o}return i===e})));(n||o)&&c.push(...e.exclude)}}return function e(n,t=""){const o={};for(const[r,i]of Object.entries(n)){const n=t?`${t}.${r}`:r;if("object"!=typeof i||Array.isArray(i)||null===i){const e=c.some((e=>n.startsWith(e))),t=u.some((e=>n.startsWith(e)));e&&!t||(o[r]=i)}else{const t=e(i,n);Object.keys(t).length>0&&(o[r]=t)}}return o}(e)}let B=null,D=null;async function N(t){const o={...n,...t},r={...T,...k},{elapsed:i,resolvedComponents:a}=await U(r,o),s=o.api_key?((n,t)=>{if(n.cache_api_call&&D)return Promise.resolve(D);if(B)return B;const o=fetch(`${e}/thumbmark`,{method:"POST",headers:{"x-api-key":n.api_key,Authorization:"custom-authorized","Content-Type":"application/json"},body:JSON.stringify({components:t,options:n,clientHash:d(JSON.stringify(t))})}).then((e=>{if(!e.ok)throw new Error(`HTTP error! status: ${e.status}`);return e.json()})).then((e=>(D=e,B=null,e))).catch((e=>(console.error("Error fetching pro data",e),B=null,null))),r=n.timeout||5e3,i=new Promise((e=>{setTimeout((()=>{e({thumbmark:d(JSON.stringify(t)),info:{timed_out:!0},version:"1.1.1"})}),r)}));return B=Promise.race([o,i]),B})(o,a):null,c=s?await s:null,l=o.performance?{elapsed:i}:{},u=L((null==c?void 0:c.components)||{},o),m={...a,...u},h=(null==c?void 0:c.info)||{uniqueness:{score:"api only"}},f=d(JSON.stringify(m));return async function(n,t,o){var r;const i=`${e}/log`,a={thumbmark:n,components:t,version:"1.1.1",options:o,path:null===(r=null===window||void 0===window?void 0:window.location)||void 0===r?void 0:r.pathname};if(!sessionStorage.getItem("_tmjs_l")&&Math.random()<1e-4){sessionStorage.setItem("_tmjs_l","1");try{await fetch(i,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)})}catch(e){}}}(f,m,o).catch((()=>{})),{thumbmark:f,components:m,info:h,version:"1.1.1",...l}}async function U(e,t){const o={...n,...t},r=Object.entries(e).filter((([e])=>{var n;return!(null===(n=null==o?void 0:o.exclude)||void 0===n?void 0:n.includes(e))})).filter((([e])=>{var n,t,r,i;return(null===(n=null==o?void 0:o.include)||void 0===n?void 0:n.some((e=>e.includes("."))))?null===(t=null==o?void 0:o.include)||void 0===t?void 0:t.some((n=>n.startsWith(e))):0===(null===(r=null==o?void 0:o.include)||void 0===r?void 0:r.length)||(null===(i=null==o?void 0:o.include)||void 0===i?void 0:i.includes(e))})),i=r.map((([e])=>e)),a=r.map((([e,n])=>n(t))),s=await function(e,n,t){return Promise.all(e.map((e=>{const o=performance.now();return Promise.race([e.then((e=>({value:e,elapsed:performance.now()-o}))),(r=n,i=t,new Promise((e=>{setTimeout((()=>e(i)),r)}))).then((e=>({value:e,elapsed:performance.now()-o})))]);var r,i})))}(a,(null==o?void 0:o.timeout)||5e3,I),c={},l={};s.forEach(((e,n)=>{var t;null!=e.value&&(l[i[n]]=e.value,c[i[n]]=null!==(t=e.elapsed)&&void 0!==t?t:0)}));const u=L(l,o);return{elapsed:c,resolvedComponents:u}}async function F(){return(await N(t)).components}async function j(e){try{const n=await N(t);return e?{hash:n.thumbmark.toString(),data:n.components}:n.thumbmark.toString()}catch(e){throw e}}async function G(){try{const{elapsed:e,resolvedComponents:n}=await U(T,t);return{...n,elapsed:e}}catch(e){throw e}}class W{constructor(e){this.options={...n,...e}}async get(e){return N({...this.options,...e})}getVersion(){return"1.1.1"}includeComponent(e,n){R(e,n)}}export{W as Thumbmark,j as getFingerprint,F as getFingerprintData,G as getFingerprintPerformance,N as getThumbmark,_ as getVersion,R as includeComponent,o as setOption}; //# sourceMappingURL=thumbmark.esm.js.map