ibp-tms 1.0.21 → 1.0.22
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/package.json +1 -1
- package/tms.js +1 -1
- package/tms.js.map +1 -1
package/package.json
CHANGED
package/tms.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
!function(t,e){if("object"==typeof exports&&"object"==typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var n=e();for(var o in n)("object"==typeof exports?exports:t)[o]=n[o]}}(self,(()=>(function(){let t,e,n=[],o=null,i=0,a=0,r=20;function d(o,i){const a=Date.now();if(t&&e){const r=o-t.x,d=i-t.y,c=a-e,l=Math.sqrt(r*r+d*d)/c;n.push({dx:r,dy:d,dt:c,velocity:l}),n.length>100&&n.shift()}t={x:o,y:i},e=a}function c(t){if(i>0&&(t=i),n.length-a<(t||r))return!1;a=n.length-1;let e=n.some(((t,e,n)=>e>0&&Math.abs(t.velocity-n[e-1].velocity)>.05)),o=n.some(((t,e,n)=>e>1&&(Math.abs(t.dx-n[e-1].dx)>.1||Math.abs(t.dy-n[e-1].dy)>.1))),d=n.some((t=>t.dt>50&&t.dt<500));return e&&o&&d}function l(t){let e=c();if(e||t||i>0){var n=t&&!e?function(){let t=s(),e=null;return null!=t&&t.hash&&(e=t.hash,delete t.hash,h(t)),e}():u(i);if(null==n)return;let a="/tfp/"+n+".png";var o=new Image;o.onload=function(){(function(t,e={}){const n=e.threshold??20,o=e.ratio??.95,i=t.naturalWidth,a=t.naturalHeight,r=200,d=Math.min(1,r/Math.max(i,a)),c=document.createElement("canvas");c.width=Math.max(1,Math.floor(i*d)),c.height=Math.max(1,Math.floor(a*d));const l=c.getContext("2d");l.drawImage(t,0,0,c.width,c.height);const{data:u,width:s,height:h}=l.getImageData(0,0,c.width,c.height),m=s*h;let f=0;for(let t=0;t<u.length;t+=4){const e=u[t],o=u[t+1],i=u[t+2];0!==u[t+3]&&(Math.max(e,o,i)<=n&&f++)}return f/m>=o})(o)&&function(){try{fetch("/traffic/id",{method:"GET"}).then((t=>t.json())).then((t=>{if(t&&t.id){let e=s();null==e&&(e={}),e.id=t.id,h(e)}})).catch((t=>{}))}catch(t){}}()},o.src=a}}function u(t){let e=0==t?function(t){let e=0,n=0,o=0,i=0,a=[];t.forEach((t=>{e+=t.dx,n+=t.dy,o+=t.dt;let r=Math.sqrt(t.dx*t.dx+t.dy*t.dy);i+=r,a.push(r/(t.dt||1e-5))}));let r=a.length?a.reduce(((t,e)=>t+e),0)/a.length:0,d=Math.atan2(n,e);return[Math.round(255*Math.min(1,r/5)),Math.round(255*(d+Math.PI)/(2*Math.PI)),Math.round(255*Math.min(1,i/100))]}(n):[0,0,0],i=0==t?function(t,e,n){const o=.299*t+.587*e+.114*n;return Math.round(o/255*100)}(e[0],e[1],e[2]):-1,a=o&&o.id?"U-"+o.id:"UN";return btoa(`${a}|${i}|${e[0]}|${e[1]}|${e[2]}
|
|
1
|
+
!function(t,e){if("object"==typeof exports&&"object"==typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var n=e();for(var o in n)("object"==typeof exports?exports:t)[o]=n[o]}}(self,(()=>(function(){let t,e,n=[],o=null,i=0,a=0,r=20;function d(o,i){const a=Date.now();if(t&&e){const r=o-t.x,d=i-t.y,c=a-e,l=Math.sqrt(r*r+d*d)/c;n.push({dx:r,dy:d,dt:c,velocity:l}),n.length>100&&n.shift()}t={x:o,y:i},e=a}function c(t){if(i>0&&(t=i),n.length-a<(t||r))return!1;a=n.length-1;let e=n.some(((t,e,n)=>e>0&&Math.abs(t.velocity-n[e-1].velocity)>.05)),o=n.some(((t,e,n)=>e>1&&(Math.abs(t.dx-n[e-1].dx)>.1||Math.abs(t.dy-n[e-1].dy)>.1))),d=n.some((t=>t.dt>50&&t.dt<500));return e&&o&&d}function l(t){let e=c();if(e||t||i>0){var n=t&&!e?function(){let t=s(),e=null;return null!=t&&t.hash&&(e=t.hash,delete t.hash,h(t)),e}():u(i);if(null==n)return;let a="/tfp/"+n+".png";var o=new Image;o.onload=function(){(function(t,e={}){const n=e.threshold??20,o=e.ratio??.95,i=t.naturalWidth,a=t.naturalHeight,r=200,d=Math.min(1,r/Math.max(i,a)),c=document.createElement("canvas");c.width=Math.max(1,Math.floor(i*d)),c.height=Math.max(1,Math.floor(a*d));const l=c.getContext("2d");l.drawImage(t,0,0,c.width,c.height);const{data:u,width:s,height:h}=l.getImageData(0,0,c.width,c.height),m=s*h;let f=0;for(let t=0;t<u.length;t+=4){const e=u[t],o=u[t+1],i=u[t+2];0!==u[t+3]&&(Math.max(e,o,i)<=n&&f++)}return f/m>=o})(o)&&function(){try{fetch("/traffic/id",{method:"GET"}).then((t=>t.json())).then((t=>{if(t&&t.id){let e=s();null==e&&(e={}),e.id=t.id,h(e)}})).catch((t=>{}))}catch(t){}}()},o.src=a}}function u(t){let e=0==t?function(t){let e=0,n=0,o=0,i=0,a=[];t.forEach((t=>{e+=t.dx,n+=t.dy,o+=t.dt;let r=Math.sqrt(t.dx*t.dx+t.dy*t.dy);i+=r,a.push(r/(t.dt||1e-5))}));let r=a.length?a.reduce(((t,e)=>t+e),0)/a.length:0,d=Math.atan2(n,e);return[Math.round(255*Math.min(1,r/5)),Math.round(255*(d+Math.PI)/(2*Math.PI)),Math.round(255*Math.min(1,i/100))]}(n):[0,0,0],i=0==t?function(t,e,n){const o=.299*t+.587*e+.114*n;return Math.round(o/255*100)}(e[0],e[1],e[2]):-1,a=o&&o.id?"U-"+o.id:"UN";return btoa(`${a}|${i}|${e[0]}|${e[1]}|${e[2]}|${t??0}`).replace(/[^A-z0-9\.]/gi,"-e")}function s(){return null==window.localStorage.getItem("TSM")?null:JSON.parse(window.localStorage.getItem("TSM"))}function h(t){return window.localStorage.setItem("TSM",JSON.stringify(t)),!0}let m=0;function f(t){l(t),m++,m<10&&setTimeout((()=>{f(!1)}),5e3*m)}function g(){f(!0),document.addEventListener("click",(()=>{l(!1)})),document.addEventListener("touchend",(()=>{l(!1)})),window.addEventListener("unload",(()=>{!function(){if(c()){let t=s();null==t&&(t={}),t.hash=u(i),h(t)}}()}))}o=s(),document&&document.body&&null!=document.body&&document.body.hasAttribute("r-id")?document.body.addEventListener("ag.tsm.valid",(t=>{let e=s();null==e&&(e={}),e.token=t.detail.token,e.id=t.detail.id,h(e)})):(i=function(){if(navigator.webdriver||window.chrome?.runtime?.sendMessage||/HeadlessChrome|Chrome-Lighthouse/i.test(navigator.userAgent))return 1e3;if(0==navigator.languages?.length)return 500;try{const t=document.createElement("canvas"),e=t.getContext("webgl")||t.getContext("experimental-webgl"),n=["SwiftShader","llvmpipe","softpipe","swrast","Basic Render Driver"];if(e){const t=e.getExtension("WEBGL_debug_renderer_info"),o=t?e.getParameter(t.UNMASKED_RENDERER_WEBGL):e.getParameter(e.RENDERER);if(n.some((t=>o.toLowerCase().includes(t.toLowerCase()))))return 700}}catch(e){}let t=!1;const e=new Error;return Object.defineProperty(e,"stack",{get(){t=!0}}),t||!("ontouchstart"in window)&&navigator.maxTouchPoints>0?400:0}(),r="ontouchstart"in window||navigator.maxTouchPoints>0||navigator.msMaxTouchPoints>0?2:20,null!=o&&o.valid||(document.addEventListener("mousemove",(t=>d(t.clientX,t.clientY))),document.addEventListener("mousedown",(t=>d(t.clientX,t.clientY))),document.addEventListener("touchstart",(t=>{const e=t.touches[0];e&&e.clientX&&d(e.clientX,e.clientY)})),document.addEventListener("touchend",(t=>{const e=t.touches[0];e&&e.clientX&&d(e.clientX,e.clientY)})),document.addEventListener("touchmove",(t=>{const e=t.touches[0];e&&e.clientX&&d(e.clientX,e.clientY)})),document.addEventListener("scroll",(t=>{d(window.scrollX,window.scrollY)})),g()))}(),{})));
|
package/tms.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tms.js","mappings":"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","sources":["webpack:///webpack/universalModuleDefinition","webpack:///./src/tms.js"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, () => {\nreturn ","(function(){\r\n \r\n \r\n let movements = [];\r\n\r\n let tsm = null;\r\n\r\n let lastPos;\r\n\r\n let lastTime;\r\n\r\n let suspectScore = 0;\r\n\r\n let lastLength = 0;\r\n\r\n let defaultLimit = 20;\r\n\r\n const isTouchCapable = () => {\r\n return (\r\n 'ontouchstart' in window ||\r\n navigator.maxTouchPoints > 0 ||\r\n navigator.msMaxTouchPoints > 0 // For older IE\r\n );\r\n };\r\n \r\n function getSignature() {\r\n\r\n var singnatureSamples = movements.filter((x, i) => { return i < 16 });\r\n var signatureValue = singnatureSamples.reduce((x, y, i) => {\r\n return x + '|' + Math.round(y.dx + y.dy + y.dt + y.velocity);\r\n }, '');\r\n return btoa(signatureValue);\r\n }\r\n\r\n function recordMovement(x, y) {\r\n const now = Date.now();\r\n if (lastPos && lastTime) {\r\n const dx = x - lastPos.x;\r\n const dy = y - lastPos.y;\r\n const dt = now - lastTime;\r\n const distance = Math.sqrt(dx * dx + dy * dy);\r\n const velocity = distance / dt;\r\n movements.push({ dx, dy, dt, velocity });\r\n if(movements.length>100)movements.shift();\r\n }\r\n lastPos = { x, y };\r\n lastTime = now;\r\n }\r\n\r\n function huristicAdaption(points) {\r\n let totalDx = 0, totalDy = 0, totalDt = 0;\r\n let totalDist = 0;\r\n let velocities = [];\r\n points.forEach(p => {\r\n totalDx += p.dx;\r\n totalDy += p.dy;\r\n totalDt += p.dt;\r\n let dist = Math.sqrt(p.dx * p.dx + p.dy * p.dy);\r\n totalDist += dist;\r\n velocities.push(dist / (p.dt || 1e-5)); // avoid divide by zero\r\n });\r\n // Feature extraction\r\n let avgVel = velocities.length ? velocities.reduce((a, b) => a + b, 0) / velocities.length : 0;\r\n let direction = Math.atan2(totalDy, totalDx); // angle in radians, -π to π\r\n\r\n // Non-linear scaling and normalization\r\n // velocity: [0, max], direction: [-π, π], totalDist: scale as you wish\r\n let r = Math.round(255 * Math.min(1, avgVel / 5)); // scale velocity, or use other non-linear (logistic, sqrt, etc)\r\n let g = Math.round(255 * (direction + Math.PI) / (2 * Math.PI)); // normalize angle to [0,1]\r\n let b = Math.round(255 * Math.min(1, totalDist / 100)); // scale total distance, or another feature\r\n\r\n return [r, g, b];\r\n }\r\n\r\n\r\n function rgbToGrayWight(r, g, b) {\r\n const gray = 0.299 * r + 0.587 * g + 0.114 * b; // Accurate grayscale\r\n return Math.round(gray / 255 * 100); // Scale to 0-100\r\n }\r\n\r\n\r\n\r\n\r\n function onRecord()\r\n {\r\n document.addEventListener(\"mousemove\", e => recordMovement(e.clientX, e.clientY));\r\n document.addEventListener(\"mousedown\", e => recordMovement(e.clientX, e.clientY));\r\n document.addEventListener(\"touchstart\", e => {\r\n const t = e.touches[0];\r\n if(t && t.clientX)\r\n recordMovement(t.clientX, t.clientY);\r\n });\r\n\r\n document.addEventListener(\"touchend\", e => {\r\n const t = e.touches[0];\r\n if(t && t.clientX)\r\n recordMovement(t.clientX, t.clientY);\r\n });\r\n\r\n document.addEventListener(\"touchmove\", e => {\r\n const t = e.touches[0];\r\n if(t && t.clientX)\r\n recordMovement(t.clientX, t.clientY);\r\n });\r\n\r\n document.addEventListener(\"scroll\", e=>{ \r\n recordMovement(window.scrollX, window.scrollY);\r\n });\r\n }\r\n\r\n function getSuspectAutomationScore(){\r\n if(navigator.webdriver|| window.chrome?.runtime?.sendMessage ||/HeadlessChrome|Chrome-Lighthouse/i.test(navigator.userAgent))return 1000;\r\n if(navigator.languages?.length==0)return 500;\r\n try {\r\n const canvas = document.createElement('canvas');\r\n const gl = canvas.getContext('webgl') || canvas.getContext('experimental-webgl');\r\n const softwareRenderers = ['SwiftShader', 'llvmpipe', 'softpipe', 'swrast', 'Basic Render Driver'];\r\n if (gl) {\r\n const debugInfo = gl.getExtension('WEBGL_debug_renderer_info');\r\n const renderer = debugInfo ? gl.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL) : gl.getParameter(gl.RENDERER); \r\n if (softwareRenderers.some(r=>renderer.toLowerCase().includes(r.toLowerCase()))) {\r\n return 700;\r\n }\r\n }\r\n } catch (e) { \r\n }\r\n let cdpDetected = false;\r\n const e = new Error();\r\n Object.defineProperty(e, 'stack', {\r\n get() {\r\n cdpDetected = true;\r\n }\r\n });\r\n if(cdpDetected)\r\n return 400;\r\n //if(!(window.innerWidth==window.outerWidth&&window.innerHeight==window.outerHeight))return 400;\r\n if(!('ontouchstart' in window)&&navigator.maxTouchPoints>0)return 400;\r\n return 0;\r\n }\r\n\r\n function isHuman(limit) {\r\n if(suspectScore>0)limit = suspectScore;\r\n if (movements.length - lastLength < (limit?limit:defaultLimit)) return false;\r\n lastLength = movements.length - 1;\r\n let varying = movements.some((m, i, arr) => i > 0 && (Math.abs(m.velocity - arr[i - 1].velocity) > 0.05));\r\n let nonLinear = movements.some((m, i, arr) => i > 1 && (Math.abs(m.dx - arr[i - 1].dx) > 0.1 || Math.abs(m.dy - arr[i - 1].dy) > 0.1));\r\n let irregular = movements.some(m => m.dt > 50 && m.dt < 500); \r\n return varying && nonLinear && irregular;\r\n }\r\n\r\n function updateId(){\r\n try{\r\n fetch('/traffic/id',{method:'GET'}).then(res=>res.json()).then(data=>{\r\n if(data && data.id){\r\n let currentValue = getCurrentValue();\r\n if(currentValue==null)currentValue={};\r\n currentValue.id = data.id;\r\n setCurrentValue(currentValue);\r\n }\r\n }).catch(ex=>{});\r\n }catch(ex){}\r\n }\r\n\r\n function updateScore(isInit){\r\n let isHumanResult = isHuman();\r\n if(isHumanResult||isInit||suspectScore>0){ \r\n var hashValue = isInit&&!isHumanResult?getScoreFromLocal():getHash(suspectScore); \r\n if(hashValue==null)return;\r\n let src = \"/tfp/\"+hashValue+'.png';\r\n var image = new Image();\r\n image.onload = function() {\r\n if(isImageMostlyBlack(image)){\r\n updateId();\r\n }else{\r\n\r\n }\r\n };\r\n image.src = src;\r\n } \r\n }\r\n\r\n function updateScoreToLocal(){\r\n if(isHuman()){ \r\n let currentValue = getCurrentValue();\r\n if(currentValue==null)currentValue={};\r\n currentValue.hash = getHash(suspectScore);\r\n setCurrentValue(currentValue);\r\n }\r\n }\r\n\r\n function getScoreFromLocal(){\r\n let currentValue = getCurrentValue();\r\n let valueToSend = null;\r\n if(currentValue!=null&¤tValue.hash)\r\n {\r\n valueToSend = currentValue.hash;\r\n delete currentValue.hash;\r\n setCurrentValue(currentValue);\r\n }\r\n return valueToSend;\r\n }\r\n\r\n function getHash(suspectScoreDetected){\r\n let rgb = suspectScoreDetected==0?huristicAdaption(movements):[0,0,0];\r\n let score = suspectScoreDetected==0?rgbToGrayWight(rgb[0],rgb[1],rgb[2]):-1; \r\n let id = tsm && tsm.id ?'U-'+ tsm.id : 'UN';\r\n return btoa(`${id}|${score}|${rgb[0]}|${rgb[1]}|${rgb[2]}|7`).replace(/[^A-z0-9\\.]/gi,'-e');\r\n }\r\n\r\n function getCurrentValue()\r\n {\r\n if(window.localStorage.getItem(\"TSM\")==null)return null;\r\n return JSON.parse(window.localStorage.getItem(\"TSM\"));\r\n }\r\n\r\n function setCurrentValue(value)\r\n {\r\n window.localStorage.setItem(\"TSM\", JSON.stringify(value));\r\n return true;\r\n }\r\n\r\n function isImageMostlyBlack(image, opts = {}) {\r\n const threshold = opts.threshold ?? 20; // 0–255, max brightness to count as black\r\n const ratio = opts.ratio ?? 0.95; // fraction of pixels that must be black\r\n\r\n const w = image.naturalWidth;\r\n const h = image.naturalHeight;\r\n\r\n // Downscale to speed up: sample at most 200x200\r\n const maxSize = 200;\r\n const scale = Math.min(1, maxSize / Math.max(w, h));\r\n\r\n const canvas = document.createElement('canvas');\r\n canvas.width = Math.max(1, Math.floor(w * scale));\r\n canvas.height = Math.max(1, Math.floor(h * scale));\r\n const ctx = canvas.getContext('2d');\r\n\r\n ctx.drawImage(image, 0, 0, canvas.width, canvas.height);\r\n\r\n const { data, width, height } = ctx.getImageData(0, 0, canvas.width, canvas.height);\r\n const totalPixels = width * height;\r\n\r\n let blackPixels = 0;\r\n for (let i = 0; i < data.length; i += 4) {\r\n const r = data[i];\r\n const g = data[i + 1];\r\n const b = data[i + 2];\r\n const a = data[i + 3];\r\n\r\n // Treat transparent pixels as non‑black (optional)\r\n if (a === 0) continue;\r\n\r\n // brightness via simple max channel\r\n const brightness = Math.max(r, g, b);\r\n\r\n if (brightness <= threshold) {\r\n blackPixels++;\r\n }\r\n }\r\n\r\n return blackPixels / totalPixels >= ratio;\r\n }\r\n\r\n let startPeriod = 5000;\r\n let startIndex = 10;\r\n let currentIndex = 0;\r\n\r\n function autoUpdate(isInit){\r\n updateScore(isInit);\r\n currentIndex++;\r\n if(currentIndex<startIndex)\r\n setTimeout(() => {\r\n autoUpdate(false); \r\n }, startPeriod*currentIndex);\r\n }\r\n\r\n function start(){\r\n autoUpdate(true);\r\n document.addEventListener('click',()=>{updateScore(false);});\r\n document.addEventListener('touchend',()=>{updateScore(false);});\r\n window.addEventListener('unload',()=>{updateScoreToLocal();});\r\n }\r\n\r\n function attachListener(){\r\n document.body.addEventListener('ag.tsm.valid',(e)=>{\r\n let currentValue = getCurrentValue();\r\n if(currentValue==null)currentValue={};\r\n currentValue.token = e.detail.token;\r\n currentValue.id = e.detail.id;\r\n setCurrentValue(currentValue);\r\n });\r\n }\r\n\r\n function init(){\r\n tsm = getCurrentValue();\r\n if(document && document.body && document.body!=null && document.body.hasAttribute('r-id')){\r\n attachListener();\r\n }\r\n else{\r\n suspectScore = getSuspectAutomationScore();\r\n defaultLimit = isTouchCapable()?2:20;\r\n if(tsm==null||!tsm.valid){\r\n onRecord();\r\n start();\r\n }\r\n }\r\n }\r\n \r\n init();\r\n\r\n})();\r\n\r\n\r\n"],"names":["root","factory","exports","module","define","amd","a","i","self","lastPos","lastTime","movements","tsm","suspectScore","lastLength","defaultLimit","recordMovement","x","y","now","Date","dx","dy","dt","velocity","Math","sqrt","push","length","shift","isHuman","limit","varying","some","m","arr","abs","nonLinear","irregular","updateScore","isInit","isHumanResult","hashValue","currentValue","getCurrentValue","valueToSend","hash","setCurrentValue","getScoreFromLocal","getHash","src","image","Image","onload","opts","threshold","ratio","w","naturalWidth","h","naturalHeight","maxSize","scale","min","max","canvas","document","createElement","width","floor","height","ctx","getContext","drawImage","data","getImageData","totalPixels","blackPixels","r","g","b","isImageMostlyBlack","fetch","method","then","res","json","id","catch","ex","updateId","suspectScoreDetected","rgb","points","totalDx","totalDy","totalDt","totalDist","velocities","forEach","p","dist","avgVel","reduce","direction","atan2","round","PI","huristicAdaption","score","gray","rgbToGrayWight","btoa","replace","window","localStorage","getItem","JSON","parse","value","setItem","stringify","currentIndex","autoUpdate","setTimeout","start","addEventListener","updateScoreToLocal","body","hasAttribute","e","token","detail","navigator","webdriver","chrome","runtime","sendMessage","test","userAgent","languages","gl","softwareRenderers","debugInfo","getExtension","renderer","getParameter","UNMASKED_RENDERER_WEBGL","RENDERER","toLowerCase","includes","cdpDetected","Error","Object","defineProperty","get","maxTouchPoints","getSuspectAutomationScore","msMaxTouchPoints","valid","clientX","clientY","t","touches","scrollX","scrollY"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"tms.js","mappings":"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","sources":["webpack:///webpack/universalModuleDefinition","webpack:///./src/tms.js"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, () => {\nreturn ","(function(){\r\n \r\n \r\n let movements = [];\r\n\r\n let tsm = null;\r\n\r\n let lastPos;\r\n\r\n let lastTime;\r\n\r\n let suspectScore = 0;\r\n\r\n let lastLength = 0;\r\n\r\n let defaultLimit = 20;\r\n\r\n const isTouchCapable = () => {\r\n return (\r\n 'ontouchstart' in window ||\r\n navigator.maxTouchPoints > 0 ||\r\n navigator.msMaxTouchPoints > 0 // For older IE\r\n );\r\n };\r\n \r\n function getSignature() {\r\n\r\n var singnatureSamples = movements.filter((x, i) => { return i < 16 });\r\n var signatureValue = singnatureSamples.reduce((x, y, i) => {\r\n return x + '|' + Math.round(y.dx + y.dy + y.dt + y.velocity);\r\n }, '');\r\n return btoa(signatureValue);\r\n }\r\n\r\n function recordMovement(x, y) {\r\n const now = Date.now();\r\n if (lastPos && lastTime) {\r\n const dx = x - lastPos.x;\r\n const dy = y - lastPos.y;\r\n const dt = now - lastTime;\r\n const distance = Math.sqrt(dx * dx + dy * dy);\r\n const velocity = distance / dt;\r\n movements.push({ dx, dy, dt, velocity });\r\n if(movements.length>100)movements.shift();\r\n }\r\n lastPos = { x, y };\r\n lastTime = now;\r\n }\r\n\r\n function huristicAdaption(points) {\r\n let totalDx = 0, totalDy = 0, totalDt = 0;\r\n let totalDist = 0;\r\n let velocities = [];\r\n points.forEach(p => {\r\n totalDx += p.dx;\r\n totalDy += p.dy;\r\n totalDt += p.dt;\r\n let dist = Math.sqrt(p.dx * p.dx + p.dy * p.dy);\r\n totalDist += dist;\r\n velocities.push(dist / (p.dt || 1e-5)); // avoid divide by zero\r\n });\r\n // Feature extraction\r\n let avgVel = velocities.length ? velocities.reduce((a, b) => a + b, 0) / velocities.length : 0;\r\n let direction = Math.atan2(totalDy, totalDx); // angle in radians, -π to π\r\n\r\n // Non-linear scaling and normalization\r\n // velocity: [0, max], direction: [-π, π], totalDist: scale as you wish\r\n let r = Math.round(255 * Math.min(1, avgVel / 5)); // scale velocity, or use other non-linear (logistic, sqrt, etc)\r\n let g = Math.round(255 * (direction + Math.PI) / (2 * Math.PI)); // normalize angle to [0,1]\r\n let b = Math.round(255 * Math.min(1, totalDist / 100)); // scale total distance, or another feature\r\n\r\n return [r, g, b];\r\n }\r\n\r\n\r\n function rgbToGrayWight(r, g, b) {\r\n const gray = 0.299 * r + 0.587 * g + 0.114 * b; // Accurate grayscale\r\n return Math.round(gray / 255 * 100); // Scale to 0-100\r\n }\r\n\r\n\r\n\r\n\r\n function onRecord()\r\n {\r\n document.addEventListener(\"mousemove\", e => recordMovement(e.clientX, e.clientY));\r\n document.addEventListener(\"mousedown\", e => recordMovement(e.clientX, e.clientY));\r\n document.addEventListener(\"touchstart\", e => {\r\n const t = e.touches[0];\r\n if(t && t.clientX)\r\n recordMovement(t.clientX, t.clientY);\r\n });\r\n\r\n document.addEventListener(\"touchend\", e => {\r\n const t = e.touches[0];\r\n if(t && t.clientX)\r\n recordMovement(t.clientX, t.clientY);\r\n });\r\n\r\n document.addEventListener(\"touchmove\", e => {\r\n const t = e.touches[0];\r\n if(t && t.clientX)\r\n recordMovement(t.clientX, t.clientY);\r\n });\r\n\r\n document.addEventListener(\"scroll\", e=>{ \r\n recordMovement(window.scrollX, window.scrollY);\r\n });\r\n }\r\n\r\n function getSuspectAutomationScore(){\r\n if(navigator.webdriver|| window.chrome?.runtime?.sendMessage ||/HeadlessChrome|Chrome-Lighthouse/i.test(navigator.userAgent))return 1000;\r\n if(navigator.languages?.length==0)return 500;\r\n try {\r\n const canvas = document.createElement('canvas');\r\n const gl = canvas.getContext('webgl') || canvas.getContext('experimental-webgl');\r\n const softwareRenderers = ['SwiftShader', 'llvmpipe', 'softpipe', 'swrast', 'Basic Render Driver'];\r\n if (gl) {\r\n const debugInfo = gl.getExtension('WEBGL_debug_renderer_info');\r\n const renderer = debugInfo ? gl.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL) : gl.getParameter(gl.RENDERER); \r\n if (softwareRenderers.some(r=>renderer.toLowerCase().includes(r.toLowerCase()))) {\r\n return 700;\r\n }\r\n }\r\n } catch (e) { \r\n }\r\n let cdpDetected = false;\r\n const e = new Error();\r\n Object.defineProperty(e, 'stack', {\r\n get() {\r\n cdpDetected = true;\r\n }\r\n });\r\n if(cdpDetected)\r\n return 400;\r\n //if(!(window.innerWidth==window.outerWidth&&window.innerHeight==window.outerHeight))return 400;\r\n if(!('ontouchstart' in window)&&navigator.maxTouchPoints>0)return 400;\r\n return 0;\r\n }\r\n\r\n function isHuman(limit) {\r\n if(suspectScore>0)limit = suspectScore;\r\n if (movements.length - lastLength < (limit?limit:defaultLimit)) return false;\r\n lastLength = movements.length - 1;\r\n let varying = movements.some((m, i, arr) => i > 0 && (Math.abs(m.velocity - arr[i - 1].velocity) > 0.05));\r\n let nonLinear = movements.some((m, i, arr) => i > 1 && (Math.abs(m.dx - arr[i - 1].dx) > 0.1 || Math.abs(m.dy - arr[i - 1].dy) > 0.1));\r\n let irregular = movements.some(m => m.dt > 50 && m.dt < 500); \r\n return varying && nonLinear && irregular;\r\n }\r\n\r\n function updateId(){\r\n try{\r\n fetch('/traffic/id',{method:'GET'}).then(res=>res.json()).then(data=>{\r\n if(data && data.id){\r\n let currentValue = getCurrentValue();\r\n if(currentValue==null)currentValue={};\r\n currentValue.id = data.id;\r\n setCurrentValue(currentValue);\r\n }\r\n }).catch(ex=>{});\r\n }catch(ex){}\r\n }\r\n\r\n function updateScore(isInit){\r\n let isHumanResult = isHuman();\r\n if(isHumanResult||isInit||suspectScore>0){ \r\n var hashValue = isInit&&!isHumanResult?getScoreFromLocal():getHash(suspectScore); \r\n if(hashValue==null)return;\r\n let src = \"/tfp/\"+hashValue+'.png';\r\n var image = new Image();\r\n image.onload = function() {\r\n if(isImageMostlyBlack(image)){\r\n updateId();\r\n }else{\r\n\r\n }\r\n };\r\n image.src = src;\r\n } \r\n }\r\n\r\n function updateScoreToLocal(){\r\n if(isHuman()){ \r\n let currentValue = getCurrentValue();\r\n if(currentValue==null)currentValue={};\r\n currentValue.hash = getHash(suspectScore);\r\n setCurrentValue(currentValue);\r\n }\r\n }\r\n\r\n function getScoreFromLocal(){\r\n let currentValue = getCurrentValue();\r\n let valueToSend = null;\r\n if(currentValue!=null&¤tValue.hash)\r\n {\r\n valueToSend = currentValue.hash;\r\n delete currentValue.hash;\r\n setCurrentValue(currentValue);\r\n }\r\n return valueToSend;\r\n }\r\n\r\n function getHash(suspectScoreDetected){\r\n let rgb = suspectScoreDetected==0?huristicAdaption(movements):[0,0,0];\r\n let score = suspectScoreDetected==0?rgbToGrayWight(rgb[0],rgb[1],rgb[2]):-1; \r\n let id = tsm && tsm.id ?'U-'+ tsm.id : 'UN';\r\n return btoa(`${id}|${score}|${rgb[0]}|${rgb[1]}|${rgb[2]}|${suspectScoreDetected??0}`).replace(/[^A-z0-9\\.]/gi,'-e');\r\n }\r\n\r\n function getCurrentValue()\r\n {\r\n if(window.localStorage.getItem(\"TSM\")==null)return null;\r\n return JSON.parse(window.localStorage.getItem(\"TSM\"));\r\n }\r\n\r\n function setCurrentValue(value)\r\n {\r\n window.localStorage.setItem(\"TSM\", JSON.stringify(value));\r\n return true;\r\n }\r\n\r\n function isImageMostlyBlack(image, opts = {}) {\r\n const threshold = opts.threshold ?? 20; // 0–255, max brightness to count as black\r\n const ratio = opts.ratio ?? 0.95; // fraction of pixels that must be black\r\n\r\n const w = image.naturalWidth;\r\n const h = image.naturalHeight;\r\n\r\n // Downscale to speed up: sample at most 200x200\r\n const maxSize = 200;\r\n const scale = Math.min(1, maxSize / Math.max(w, h));\r\n\r\n const canvas = document.createElement('canvas');\r\n canvas.width = Math.max(1, Math.floor(w * scale));\r\n canvas.height = Math.max(1, Math.floor(h * scale));\r\n const ctx = canvas.getContext('2d');\r\n\r\n ctx.drawImage(image, 0, 0, canvas.width, canvas.height);\r\n\r\n const { data, width, height } = ctx.getImageData(0, 0, canvas.width, canvas.height);\r\n const totalPixels = width * height;\r\n\r\n let blackPixels = 0;\r\n for (let i = 0; i < data.length; i += 4) {\r\n const r = data[i];\r\n const g = data[i + 1];\r\n const b = data[i + 2];\r\n const a = data[i + 3];\r\n\r\n // Treat transparent pixels as non‑black (optional)\r\n if (a === 0) continue;\r\n\r\n // brightness via simple max channel\r\n const brightness = Math.max(r, g, b);\r\n\r\n if (brightness <= threshold) {\r\n blackPixels++;\r\n }\r\n }\r\n\r\n return blackPixels / totalPixels >= ratio;\r\n }\r\n\r\n let startPeriod = 5000;\r\n let startIndex = 10;\r\n let currentIndex = 0;\r\n\r\n function autoUpdate(isInit){\r\n updateScore(isInit);\r\n currentIndex++;\r\n if(currentIndex<startIndex)\r\n setTimeout(() => {\r\n autoUpdate(false); \r\n }, startPeriod*currentIndex);\r\n }\r\n\r\n function start(){\r\n autoUpdate(true);\r\n document.addEventListener('click',()=>{updateScore(false);});\r\n document.addEventListener('touchend',()=>{updateScore(false);});\r\n window.addEventListener('unload',()=>{updateScoreToLocal();});\r\n }\r\n\r\n function attachListener(){\r\n document.body.addEventListener('ag.tsm.valid',(e)=>{\r\n let currentValue = getCurrentValue();\r\n if(currentValue==null)currentValue={};\r\n currentValue.token = e.detail.token;\r\n currentValue.id = e.detail.id;\r\n setCurrentValue(currentValue);\r\n });\r\n }\r\n\r\n function init(){\r\n tsm = getCurrentValue();\r\n if(document && document.body && document.body!=null && document.body.hasAttribute('r-id')){\r\n attachListener();\r\n }\r\n else{\r\n suspectScore = getSuspectAutomationScore();\r\n defaultLimit = isTouchCapable()?2:20;\r\n if(tsm==null||!tsm.valid){\r\n onRecord();\r\n start();\r\n }\r\n }\r\n }\r\n \r\n init();\r\n\r\n})();\r\n\r\n\r\n"],"names":["root","factory","exports","module","define","amd","a","i","self","lastPos","lastTime","movements","tsm","suspectScore","lastLength","defaultLimit","recordMovement","x","y","now","Date","dx","dy","dt","velocity","Math","sqrt","push","length","shift","isHuman","limit","varying","some","m","arr","abs","nonLinear","irregular","updateScore","isInit","isHumanResult","hashValue","currentValue","getCurrentValue","valueToSend","hash","setCurrentValue","getScoreFromLocal","getHash","src","image","Image","onload","opts","threshold","ratio","w","naturalWidth","h","naturalHeight","maxSize","scale","min","max","canvas","document","createElement","width","floor","height","ctx","getContext","drawImage","data","getImageData","totalPixels","blackPixels","r","g","b","isImageMostlyBlack","fetch","method","then","res","json","id","catch","ex","updateId","suspectScoreDetected","rgb","points","totalDx","totalDy","totalDt","totalDist","velocities","forEach","p","dist","avgVel","reduce","direction","atan2","round","PI","huristicAdaption","score","gray","rgbToGrayWight","btoa","replace","window","localStorage","getItem","JSON","parse","value","setItem","stringify","currentIndex","autoUpdate","setTimeout","start","addEventListener","updateScoreToLocal","body","hasAttribute","e","token","detail","navigator","webdriver","chrome","runtime","sendMessage","test","userAgent","languages","gl","softwareRenderers","debugInfo","getExtension","renderer","getParameter","UNMASKED_RENDERER_WEBGL","RENDERER","toLowerCase","includes","cdpDetected","Error","Object","defineProperty","get","maxTouchPoints","getSuspectAutomationScore","msMaxTouchPoints","valid","clientX","clientY","t","touches","scrollX","scrollY"],"sourceRoot":""}
|