@thumbmarkjs/thumbmarkjs 0.20.2 → 0.20.3

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@thumbmarkjs/thumbmarkjs",
3
- "version": "0.20.2",
3
+ "version": "0.20.3",
4
4
  "description": "",
5
5
  "main": "./dist/thumbmark.cjs.js",
6
6
  "module": "./dist/thumbmark.esm.js",
@@ -1,13 +1,18 @@
1
- import { componentInterface, includeComponent } from '../../factory'
2
- import { hash } from '../../utils/hash'
1
+ import { componentInterface, includeComponent } from '../../factory';
3
2
  import { getCommonPixels } from '../../utils/commonPixels';
3
+ import { hash } from '../../utils/hash';
4
4
  import { getBrowser } from '../system/browser';
5
5
 
6
- const _RUNS = (getBrowser().name !== 'SamsungBrowser') ? 1 : 3;
6
+ const browser = getBrowser();
7
+ const name = browser.name.toLowerCase();
8
+ const ver = browser.version.split('.')[0] || '0';
9
+ const majorVer = parseInt(ver, 10);
10
+
11
+ const _RUNS = name !== 'samsungbrowser' ? 1 : 3;
7
12
 
8
13
  /**
9
14
  * A simple canvas finger printing function
10
- *
15
+ *
11
16
  * @returns a CanvasInfo JSON object
12
17
  */
13
18
 
@@ -15,76 +20,74 @@ const _WIDTH = 280;
15
20
  const _HEIGHT = 20;
16
21
 
17
22
  export default function generateCanvasFingerprint(): Promise<componentInterface> {
18
- const canvas = document.createElement('canvas');
19
- const ctx = canvas.getContext('2d');
20
-
21
- return new Promise((resolve) => {
22
-
23
- /**
24
- * Since some browsers fudge with the canvas pixels to prevent fingerprinting, the following
25
- * creates the canvas three times and getCommonPixels picks the most common byte for each
26
- * channel of each pixel.
27
- */
28
- const imageDatas: ImageData[] = Array.from({length: _RUNS}, () => generateCanvasImageData() );
29
- const commonImageData = getCommonPixels(imageDatas, _WIDTH, _HEIGHT);
30
-
31
- resolve(
32
- {
33
- 'commonImageDataHash': hash(commonImageData.data.toString()).toString(),
34
- }
35
- )
23
+ const canvas = document.createElement('canvas');
24
+ const ctx = canvas.getContext('2d');
25
+
26
+ return new Promise((resolve) => {
27
+ /**
28
+ * Since some browsers fudge with the canvas pixels to prevent fingerprinting, the following
29
+ * creates the canvas three times and getCommonPixels picks the most common byte for each
30
+ * channel of each pixel.
31
+ */
32
+ const imageDatas: ImageData[] = Array.from({ length: _RUNS }, () => generateCanvasImageData());
33
+ const commonImageData = getCommonPixels(imageDatas, _WIDTH, _HEIGHT);
34
+
35
+ resolve({
36
+ commonImageDataHash: hash(commonImageData.data.toString()).toString(),
36
37
  });
38
+ });
37
39
  }
38
40
 
39
41
  function generateCanvasImageData(): ImageData {
40
- const canvas = document.createElement('canvas');
41
- const ctx = canvas.getContext('2d');
42
-
43
- if (!ctx) {
44
- return new ImageData(1,1);
45
- }
46
-
47
- // Set canvas dimensions
48
- canvas.width = _WIDTH;
49
- canvas.height = _HEIGHT;
50
-
51
- // Create rainbow gradient for the background rectangle
52
- const gradient = ctx.createLinearGradient(0, 0, canvas.width, canvas.height);
53
- gradient.addColorStop(0, "red");
54
- gradient.addColorStop(1/6, "orange");
55
- gradient.addColorStop(2/6, "yellow");
56
- gradient.addColorStop(3/6, "green");
57
- gradient.addColorStop(4/6, "blue");
58
- gradient.addColorStop(5/6, "indigo");
59
- gradient.addColorStop(1, "violet");
60
-
61
- // Draw background rectangle with the rainbow gradient
62
- ctx.fillStyle = gradient;
63
- ctx.fillRect(0, 0, canvas.width, canvas.height);
64
-
65
- // Draw some random text
66
- const randomText = 'Random Text WMwmil10Oo';
67
- ctx.font = '23.123px Arial';
68
- ctx.fillStyle = 'black';
69
- ctx.fillText(randomText, -5, 15);
70
-
71
- // Draw the same text with an offset, different color, and slight transparency
72
- ctx.fillStyle = 'rgba(0, 0, 255, 0.5)';
73
- ctx.fillText(randomText, -3.3, 17.7);
74
-
75
- // Draw a line crossing the image at an arbitrary angle
76
- ctx.beginPath();
77
- ctx.moveTo(0, 0);
78
- ctx.lineTo(canvas.width * 2/7, canvas.height);
79
- ctx.strokeStyle = 'white';
80
- ctx.lineWidth = 2;
81
- ctx.stroke();
82
-
83
- const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
84
- // Return data URL of the canvas
85
- return imageData;
42
+ const canvas = document.createElement('canvas');
43
+ const ctx = canvas.getContext('2d');
44
+
45
+ if (!ctx) {
46
+ return new ImageData(1, 1);
47
+ }
48
+
49
+ // Set canvas dimensions
50
+ canvas.width = _WIDTH;
51
+ canvas.height = _HEIGHT;
52
+
53
+ // Create rainbow gradient for the background rectangle
54
+ const gradient = ctx.createLinearGradient(0, 0, canvas.width, canvas.height);
55
+ gradient.addColorStop(0, 'red');
56
+ gradient.addColorStop(1 / 6, 'orange');
57
+ gradient.addColorStop(2 / 6, 'yellow');
58
+ gradient.addColorStop(3 / 6, 'green');
59
+ gradient.addColorStop(4 / 6, 'blue');
60
+ gradient.addColorStop(5 / 6, 'indigo');
61
+ gradient.addColorStop(1, 'violet');
62
+
63
+ // Draw background rectangle with the rainbow gradient
64
+ ctx.fillStyle = gradient;
65
+ ctx.fillRect(0, 0, canvas.width, canvas.height);
66
+
67
+ // Draw some random text
68
+ const randomText = 'Random Text WMwmil10Oo';
69
+ ctx.font = '23.123px Arial';
70
+ ctx.fillStyle = 'black';
71
+ ctx.fillText(randomText, -5, 15);
72
+
73
+ // Draw the same text with an offset, different color, and slight transparency
74
+ ctx.fillStyle = 'rgba(0, 0, 255, 0.5)';
75
+ ctx.fillText(randomText, -3.3, 17.7);
76
+
77
+ // Draw a line crossing the image at an arbitrary angle
78
+ ctx.beginPath();
79
+ ctx.moveTo(0, 0);
80
+ ctx.lineTo((canvas.width * 2) / 7, canvas.height);
81
+ ctx.strokeStyle = 'white';
82
+ ctx.lineWidth = 2;
83
+ ctx.stroke();
84
+
85
+ const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
86
+ // Return data URL of the canvas
87
+ return imageData;
86
88
  }
87
89
 
88
- if (getBrowser().name != 'Firefox')
89
- includeComponent('canvas', generateCanvasFingerprint);
90
-
90
+ // In Safari from version 17 in private and normal modes canvas differs
91
+ if (name !== 'firefox' && !(name === 'safari' && majorVer === 17)) {
92
+ includeComponent('canvas', generateCanvasFingerprint);
93
+ }