@@ -1346,73 +1346,79 @@ window.getUserAgent = function () {
1346
1346
1347
1347
// Session based AI tokens for users
1348
1348
async function fingerPrint ( ) {
1349
- var canvas = document . body . appendChild ( document . createElement ( 'canvas' ) ) ;
1350
- canvas . width = 600 ;
1351
- canvas . height = 300 ;
1352
- canvas . style . display = "none" ;
1353
- const ctx = canvas . getContext ( "2d" ) ;
1354
- const size = 24 ;
1355
- const diamondSize = 28 ;
1356
- const gap = 4 ;
1357
- const startX = 30 ;
1358
- const startY = 30 ;
1359
- const blue = "#1A3276" ;
1360
- const orange = "#F28C00" ;
1361
- const colorMap = [
1362
- [ "blue" , "blue" , "diamond" ] ,
1363
- [ "blue" , "orange" , "blue" ] ,
1364
- [ "blue" , "blue" , "blue" ]
1365
- ] ;
1366
- function drawSquare ( x , y , color ) {
1367
- ctx . fillStyle = color ;
1368
- ctx . fillRect ( x , y , size , size ) ;
1369
- }
1370
- function drawDiamond ( centerX , centerY , size , color ) {
1371
- ctx . fillStyle = color ;
1372
- ctx . beginPath ( ) ;
1373
- ctx . moveTo ( centerX , centerY - size / 2 ) ;
1374
- ctx . lineTo ( centerX + size / 2 , centerY ) ;
1375
- ctx . lineTo ( centerX , centerY + size / 2 ) ;
1376
- ctx . lineTo ( centerX - size / 2 , centerY ) ;
1377
- ctx . closePath ( ) ;
1378
- ctx . fill ( ) ;
1379
- }
1380
- for ( let row = 0 ; row < 3 ; row ++ ) {
1381
- for ( let col = 0 ; col < 3 ; col ++ ) {
1382
- const type = colorMap [ row ] [ col ] ;
1383
- const x = startX + col * ( size + gap ) ;
1384
- const y = startY + row * ( size + gap ) ;
1385
- if ( type === "blue" ) drawSquare ( x , y , blue ) ;
1386
- else if ( type === "orange" ) drawSquare ( x , y , orange ) ;
1387
- else if ( type === "diamond" ) drawDiamond ( x + size / 2 , y + size / 2 , diamondSize , orange ) ;
1349
+ try {
1350
+ var canvas = document . body . appendChild ( document . createElement ( 'canvas' ) ) ;
1351
+ canvas . width = 600 ;
1352
+ canvas . height = 300 ;
1353
+ canvas . style . display = "none" ;
1354
+ const ctx = canvas . getContext ( "2d" ) ;
1355
+ const size = 24 ;
1356
+ const diamondSize = 28 ;
1357
+ const gap = 4 ;
1358
+ const startX = 30 ;
1359
+ const startY = 30 ;
1360
+ const blue = "#1A3276" ;
1361
+ const orange = "#F28C00" ;
1362
+ const colorMap = [
1363
+ [ "blue" , "blue" , "diamond" ] ,
1364
+ [ "blue" , "orange" , "blue" ] ,
1365
+ [ "blue" , "blue" , "blue" ]
1366
+ ] ;
1367
+ function drawSquare ( x , y , color ) {
1368
+ ctx . fillStyle = color ;
1369
+ ctx . fillRect ( x , y , size , size ) ;
1388
1370
}
1389
- }
1390
- ctx . font = "20px Arial" ;
1391
- ctx . fillStyle = blue ;
1392
- ctx . textBaseline = "middle" ;
1393
- ctx . fillText ( "Syncfusion" , startX + 3 * ( size + gap ) + 20 , startY + size + gap ) ;
1394
- ctx . globalCompositeOperation = "multiply" ;
1395
- ctx . fillStyle = "rgb(255,0,255)" ;
1396
- ctx . beginPath ( ) ; ctx . arc ( 50 , 200 , 50 , 0 , Math . PI * 2 ) ; ctx . fill ( ) ;
1397
- ctx . fillStyle = "rgb(0,255,255)" ;
1398
- ctx . beginPath ( ) ; ctx . arc ( 100 , 200 , 50 , 0 , Math . PI * 2 ) ; ctx . fill ( ) ;
1399
- ctx . fillStyle = "rgb(255,255,0)" ;
1400
- ctx . beginPath ( ) ; ctx . arc ( 75 , 250 , 50 , 0 , Math . PI * 2 ) ; ctx . fill ( ) ;
1401
- ctx . fillStyle = "rgb(255,0,255)" ;
1402
- ctx . beginPath ( ) ;
1403
- ctx . arc ( 200 , 200 , 75 , 0 , Math . PI * 2 , true ) ;
1404
- ctx . arc ( 200 , 200 , 25 , 0 , Math . PI * 2 , true ) ;
1405
- ctx . fill ( "evenodd" ) ;
1406
- const sha256 = async function ( str ) {
1407
- const encoder = new TextEncoder ( ) ;
1408
- const data = encoder . encode ( str ) ;
1409
- const hashBuffer = await crypto . subtle . digest ( 'SHA-256' , data ) ;
1410
- const hashArray = Array . from ( new Uint8Array ( hashBuffer ) ) ;
1411
- return hashArray . map ( b => b . toString ( 16 ) . padStart ( 2 , '0' ) ) . join ( '' ) ;
1412
- } ;
1371
+ function drawDiamond ( centerX , centerY , size , color ) {
1372
+ ctx . fillStyle = color ;
1373
+ ctx . beginPath ( ) ;
1374
+ ctx . moveTo ( centerX , centerY - size / 2 ) ;
1375
+ ctx . lineTo ( centerX + size / 2 , centerY ) ;
1376
+ ctx . lineTo ( centerX , centerY + size / 2 ) ;
1377
+ ctx . lineTo ( centerX - size / 2 , centerY ) ;
1378
+ ctx . closePath ( ) ;
1379
+ ctx . fill ( ) ;
1380
+ }
1381
+ for ( let row = 0 ; row < 3 ; row ++ ) {
1382
+ for ( let col = 0 ; col < 3 ; col ++ ) {
1383
+ const type = colorMap [ row ] [ col ] ;
1384
+ const x = startX + col * ( size + gap ) ;
1385
+ const y = startY + row * ( size + gap ) ;
1386
+ if ( type === "blue" ) drawSquare ( x , y , blue ) ;
1387
+ else if ( type === "orange" ) drawSquare ( x , y , orange ) ;
1388
+ else if ( type === "diamond" ) drawDiamond ( x + size / 2 , y + size / 2 , diamondSize , orange ) ;
1389
+ }
1390
+ }
1391
+ ctx . font = "20px Arial" ;
1392
+ ctx . fillStyle = blue ;
1393
+ ctx . textBaseline = "middle" ;
1394
+ ctx . fillText ( "Syncfusion" , startX + 3 * ( size + gap ) + 20 , startY + size + gap ) ;
1395
+ ctx . globalCompositeOperation = "multiply" ;
1396
+ ctx . fillStyle = "rgb(255,0,255)" ;
1397
+ ctx . beginPath ( ) ; ctx . arc ( 50 , 200 , 50 , 0 , Math . PI * 2 ) ; ctx . fill ( ) ;
1398
+ ctx . fillStyle = "rgb(0,255,255)" ;
1399
+ ctx . beginPath ( ) ; ctx . arc ( 100 , 200 , 50 , 0 , Math . PI * 2 ) ; ctx . fill ( ) ;
1400
+ ctx . fillStyle = "rgb(255,255,0)" ;
1401
+ ctx . beginPath ( ) ; ctx . arc ( 75 , 250 , 50 , 0 , Math . PI * 2 ) ; ctx . fill ( ) ;
1402
+ ctx . fillStyle = "rgb(255,0,255)" ;
1403
+ ctx . beginPath ( ) ;
1404
+ ctx . arc ( 200 , 200 , 75 , 0 , Math . PI * 2 , true ) ;
1405
+ ctx . arc ( 200 , 200 , 25 , 0 , Math . PI * 2 , true ) ;
1406
+ ctx . fill ( "evenodd" ) ;
1407
+ const sha256 = async function ( str ) {
1408
+ const encoder = new TextEncoder ( ) ;
1409
+ const data = encoder . encode ( str ) ;
1410
+ const hashBuffer = await crypto . subtle . digest ( 'SHA-256' , data ) ;
1411
+ const hashArray = Array . from ( new Uint8Array ( hashBuffer ) ) ;
1412
+ return hashArray . map ( b => b . toString ( 16 ) . padStart ( 2 , '0' ) ) . join ( '' ) ;
1413
+ } ;
1413
1414
1414
- const visitorID = sha256 ( canvas . toDataURL ( ) ) ;
1415
- return visitorID ;
1415
+ const visitorID = sha256 ( canvas . toDataURL ( ) ) ;
1416
+ return visitorID ;
1417
+ }
1418
+ catch ( error ) {
1419
+ console . error ( error ) ;
1420
+ return null ;
1421
+ }
1416
1422
}
1417
1423
1418
1424
async function getRemainingTokens ( userId ) {
0 commit comments