@thumbmarkjs/thumbmarkjs 0.12.1

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.
Files changed (78) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +95 -0
  3. package/dist/components/audio/audio.d.ts +1 -0
  4. package/dist/components/audio/audio.js +91 -0
  5. package/dist/components/audio/audio.js.map +1 -0
  6. package/dist/components/canvas/canvas.d.ts +2 -0
  7. package/dist/components/canvas/canvas.js +71 -0
  8. package/dist/components/canvas/canvas.js.map +1 -0
  9. package/dist/components/canvas/canvas.test.d.ts +1 -0
  10. package/dist/components/canvas/canvas.test.js +32 -0
  11. package/dist/components/canvas/canvas.test.js.map +1 -0
  12. package/dist/components/fonts/fonts.d.ts +2 -0
  13. package/dist/components/fonts/fonts.js +179 -0
  14. package/dist/components/fonts/fonts.js.map +1 -0
  15. package/dist/components/hardware/hardware.d.ts +1 -0
  16. package/dist/components/hardware/hardware.js +37 -0
  17. package/dist/components/hardware/hardware.js.map +1 -0
  18. package/dist/components/index.d.ts +16 -0
  19. package/dist/components/index.js +19 -0
  20. package/dist/components/index.js.map +1 -0
  21. package/dist/components/locales/locales.d.ts +1 -0
  22. package/dist/components/locales/locales.js +20 -0
  23. package/dist/components/locales/locales.js.map +1 -0
  24. package/dist/components/math/math.d.ts +1 -0
  25. package/dist/components/math/math.js +76 -0
  26. package/dist/components/math/math.js.map +1 -0
  27. package/dist/components/permissions/permissions.d.ts +2 -0
  28. package/dist/components/permissions/permissions.js +109 -0
  29. package/dist/components/permissions/permissions.js.map +1 -0
  30. package/dist/components/plugins/plugins.d.ts +2 -0
  31. package/dist/components/plugins/plugins.js +20 -0
  32. package/dist/components/plugins/plugins.js.map +1 -0
  33. package/dist/components/screen/screen.d.ts +1 -0
  34. package/dist/components/screen/screen.js +44 -0
  35. package/dist/components/screen/screen.js.map +1 -0
  36. package/dist/components/system/browser.d.ts +6 -0
  37. package/dist/components/system/browser.js +47 -0
  38. package/dist/components/system/browser.js.map +1 -0
  39. package/dist/components/system/system.d.ts +1 -0
  40. package/dist/components/system/system.js +19 -0
  41. package/dist/components/system/system.js.map +1 -0
  42. package/dist/components/webgl/webgl.d.ts +1 -0
  43. package/dist/components/webgl/webgl.js +160 -0
  44. package/dist/components/webgl/webgl.js.map +1 -0
  45. package/dist/factory.d.ts +30 -0
  46. package/dist/factory.js +38 -0
  47. package/dist/factory.js.map +1 -0
  48. package/dist/fingerprint/functions.d.ts +6 -0
  49. package/dist/fingerprint/functions.js +122 -0
  50. package/dist/fingerprint/functions.js.map +1 -0
  51. package/dist/index.d.ts +8 -0
  52. package/dist/index.js +41 -0
  53. package/dist/index.js.map +1 -0
  54. package/dist/storage/getItem.d.ts +2 -0
  55. package/dist/storage/getItem.js +81 -0
  56. package/dist/storage/getItem.js.map +1 -0
  57. package/dist/storage/index.d.ts +3 -0
  58. package/dist/storage/index.js +8 -0
  59. package/dist/storage/index.js.map +1 -0
  60. package/dist/storage/setItem.d.ts +2 -0
  61. package/dist/storage/setItem.js +91 -0
  62. package/dist/storage/setItem.js.map +1 -0
  63. package/dist/utils/commonPixels.d.ts +1 -0
  64. package/dist/utils/commonPixels.js +37 -0
  65. package/dist/utils/commonPixels.js.map +1 -0
  66. package/dist/utils/ephemeralIFrame.d.ts +4 -0
  67. package/dist/utils/ephemeralIFrame.js +79 -0
  68. package/dist/utils/ephemeralIFrame.js.map +1 -0
  69. package/dist/utils/getMostFrequent.d.ts +5 -0
  70. package/dist/utils/getMostFrequent.js +36 -0
  71. package/dist/utils/getMostFrequent.js.map +1 -0
  72. package/dist/utils/hash.d.ts +1 -0
  73. package/dist/utils/hash.js +67 -0
  74. package/dist/utils/hash.js.map +1 -0
  75. package/dist/utils/raceAll.d.ts +9 -0
  76. package/dist/utils/raceAll.js +32 -0
  77. package/dist/utils/raceAll.js.map +1 -0
  78. package/package.json +39 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024 Ilkka
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,95 @@
1
+ # ThumbmarkJS
2
+ ![GitHub package.json dynamic](https://img.shields.io/github/package-json/version/ilkkapeltola/thumbmarkjs)
3
+ ![NPM Version](https://img.shields.io/npm/v/@thumbmarkjs/thumbmarkjs)
4
+
5
+ ThumbmarkJS is the world's second best browser fingerprinting JavaScript library. While not (yet?) as good, it's a free open source alternative to the market leading [FingerprintJS](https://github.com/fingerprintjs/fingerprintjs). It is easy to use and easily extendable.
6
+
7
+ ThumbmarkJS is open source (MIT).
8
+
9
+ ## Demo page
10
+
11
+ You can help this project by visiting the demo page that **logs your fingerprint for analysis**. The logged fingerprint data is only used to improve this library. Visit the page from the link: [Show and log my fingerprint](https://www.thumbmarkjs.com/)
12
+
13
+ The library works very well to distinguish common browsers.
14
+
15
+ ## Simple usage from CDN
16
+
17
+ ```javascript
18
+ <script src="https://cdn.thumbmarkjs.com/latest/Thumbmark.js"></script>
19
+ <script>
20
+ ThumbmarkJS.getFingerprint().then(
21
+ function(fp) {
22
+ console.log(fp);
23
+ }
24
+ );
25
+ </script>
26
+
27
+ <!-- or -->
28
+
29
+ <script>
30
+ import('https://cdn.thumbmarkjs.com/latest/Thumbmark.js')
31
+ .then(() => {
32
+ ThumbmarkJS.getFingerprint().then((fp) => { console.log(fp)})
33
+ })
34
+ </script>
35
+
36
+ ```
37
+
38
+ You can also call `ThumbmarkJS.getFingerprintData()` to get a full JSON object with all its components.
39
+ You can also get any previous version from the CDN by replacing `latest` with the version number. Currently the URL would be
40
+ `https://cdn.thumbmarkjs.com/0.11.4/Thumbmark.js`
41
+
42
+ ## Install with NPM
43
+
44
+ Installing from NPM:
45
+
46
+ ```bash
47
+ npm install @thumbmarkjs/thumbmarkjs
48
+ ```
49
+
50
+ and in your code
51
+
52
+ ```javascript
53
+ import { getFingerprint } from '@thumbmarkjs/thumbmarkjs'
54
+ ```
55
+
56
+ But bear in mind that the library is meant to be running in the browser. Let me know if the library fails on a server side import. However, `getFingerprint()` is not meant to be called server side.
57
+
58
+ ## Build it yourself
59
+
60
+ Clone this repo and then run
61
+
62
+ ```
63
+ npm run install
64
+ npm run build
65
+ ```
66
+
67
+ ## How you can help
68
+
69
+ Simply going to the [Show and log my fingerprint](https://www.thumbmarkjs.com/)-page helps a lot. The logging is all anonymous and only used to develop this library. Let me know if you run into any errors by opening an issue. The discussion section is also open.
70
+
71
+ Test cases you can try:
72
+ - Check your fingerprint, then refresh the page with Ctrl + R
73
+ - Refresh without cache
74
+ - Move the window to another screen
75
+ - Try in incognito
76
+
77
+ if you see a fingerprint change when it shouldn't, you can use [this JSON Diff Finder tool](https://url-decode.com/tool/json-diff) to check what causes the diff.
78
+
79
+ ## Components included in fingerprint
80
+ - audio fingerprint
81
+ - canvas fingerprint
82
+ - webgl fingerprint
83
+ - available fonts and how they render
84
+ - videocard
85
+ - browser languages and time zone
86
+ - browser permissions
87
+ - available plugins
88
+ - a ton of screen details including media queries
89
+ - and a bunch of smaller things
90
+
91
+ ## Technical details
92
+
93
+ I wanted to create something that's easy to build, extend and use. If you're interested in how the library works, the structure is very simple.
94
+
95
+ Have a look at the [technical_details](technical_details.md)
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ var factory_1 = require("../../factory");
40
+ function createAudioFingerprint() {
41
+ return __awaiter(this, void 0, void 0, function () {
42
+ var resultPromise;
43
+ return __generator(this, function (_a) {
44
+ resultPromise = new Promise(function (resolve, reject) {
45
+ try {
46
+ // Set up audio parameters
47
+ var sampleRate = 44100;
48
+ var numSamples = 5000;
49
+ var audioContext_1 = new (window.OfflineAudioContext || window.webkitOfflineAudioContext)(1, numSamples, sampleRate);
50
+ var audioBuffer_1 = audioContext_1.createBufferSource();
51
+ var oscillator_1 = audioContext_1.createOscillator();
52
+ oscillator_1.frequency.value = 1000;
53
+ var compressor = audioContext_1.createDynamicsCompressor();
54
+ compressor.threshold.value = -50;
55
+ compressor.knee.value = 40;
56
+ compressor.ratio.value = 12;
57
+ compressor.attack.value = 0;
58
+ compressor.release.value = 0.2;
59
+ oscillator_1.connect(compressor);
60
+ compressor.connect(audioContext_1.destination);
61
+ oscillator_1.start();
62
+ var samples_1;
63
+ audioContext_1.oncomplete = function (event) {
64
+ samples_1 = event.renderedBuffer.getChannelData(0);
65
+ resolve({
66
+ 'sampleHash': calculateHash(samples_1),
67
+ 'oscillator': oscillator_1.type,
68
+ 'maxChannels': audioContext_1.destination.maxChannelCount,
69
+ 'channelCountMode': audioBuffer_1.channelCountMode,
70
+ });
71
+ };
72
+ audioContext_1.startRendering();
73
+ }
74
+ catch (error) {
75
+ console.error('Error creating audio fingerprint:', error);
76
+ reject(error);
77
+ }
78
+ });
79
+ return [2 /*return*/, resultPromise];
80
+ });
81
+ });
82
+ }
83
+ function calculateHash(samples) {
84
+ var hash = 0;
85
+ for (var i = 0; i < samples.length; ++i) {
86
+ hash += Math.abs(samples[i]);
87
+ }
88
+ return hash;
89
+ }
90
+ (0, factory_1.includeComponent)('audio', createAudioFingerprint);
91
+ //# sourceMappingURL=audio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audio.js","sourceRoot":"","sources":["../../../src/components/audio/audio.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yCAAoE;AAEpE,SAAe,sBAAsB;;;;YAC7B,aAAa,GAAG,IAAI,OAAO,CAAqB,UAAC,OAAO,EAAE,MAAM;gBACpE,IAAI,CAAC;oBACH,0BAA0B;oBAC1B,IAAM,UAAU,GAAG,KAAK,CAAC;oBACzB,IAAM,UAAU,GAAG,IAAI,CAAC;oBACxB,IAAM,cAAY,GAAG,IAAI,CAAC,MAAM,CAAC,mBAAmB,IAAI,MAAM,CAAC,yBAAyB,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,UAAU,CAAE,CAAC;oBACtH,IAAM,aAAW,GAAG,cAAY,CAAC,kBAAkB,EAAE,CAAC;oBAEtD,IAAM,YAAU,GAAG,cAAY,CAAC,gBAAgB,EAAE,CAAC;oBACnD,YAAU,CAAC,SAAS,CAAC,KAAK,GAAG,IAAI,CAAC;oBAClC,IAAM,UAAU,GAAG,cAAY,CAAC,wBAAwB,EAAE,CAAC;oBAC3D,UAAU,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;oBACjC,UAAU,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;oBAC3B,UAAU,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC;oBAC5B,UAAU,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;oBAC5B,UAAU,CAAC,OAAO,CAAC,KAAK,GAAG,GAAG,CAAC;oBAC/B,YAAU,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;oBAC/B,UAAU,CAAC,OAAO,CAAC,cAAY,CAAC,WAAW,CAAC,CAAC;oBAC7C,YAAU,CAAC,KAAK,EAAE,CAAC;oBACnB,IAAI,SAAqB,CAAC;oBAE1B,cAAY,CAAC,UAAU,GAAG,UAAA,KAAK;wBAC7B,SAAO,GAAG,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;wBACjD,OAAO,CACH;4BACI,YAAY,EAAE,aAAa,CAAC,SAAO,CAAC;4BACpC,YAAY,EAAE,YAAU,CAAC,IAAI;4BAC7B,aAAa,EAAE,cAAY,CAAC,WAAW,CAAC,eAAe;4BACvD,kBAAkB,EAAE,aAAW,CAAC,gBAAgB;yBAEnD,CACF,CAAC;oBACN,CAAC,CAAC;oBAEF,cAAY,CAAC,cAAc,EAAE,CAAC;gBAGhC,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAC;oBAC1D,MAAM,CAAC,KAAK,CAAC,CAAC;gBAChB,CAAC;YAEH,CAAC,CAAC,CAAC;YAEH,sBAAO,aAAa,EAAC;;;CAEtB;AAGD,SAAS,aAAa,CAAC,OAAqB;IAC1C,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;QACxC,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,IAAA,0BAAgB,EAAC,OAAO,EAAE,sBAAsB,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { componentInterface } from '../../factory';
2
+ export default function generateCanvasFingerprint(): Promise<componentInterface>;
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var factory_1 = require("../../factory");
4
+ var hash_1 = require("../../utils/hash");
5
+ var commonPixels_1 = require("../../utils/commonPixels");
6
+ /**
7
+ * A simple canvas finger printing function
8
+ *
9
+ * @returns a CanvasInfo JSON object
10
+ */
11
+ var _WIDTH = 280;
12
+ var _HEIGHT = 20;
13
+ function generateCanvasFingerprint() {
14
+ var canvas = document.createElement('canvas');
15
+ var ctx = canvas.getContext('2d');
16
+ return new Promise(function (resolve) {
17
+ /**
18
+ * Since some browsers fudge with the canvas pixels to prevent fingerprinting, the following
19
+ * creates the canvas three times and getCommonPixels picks the most common byte for each
20
+ * channel of each pixel.
21
+ */
22
+ var imageDatas = Array.from({ length: 3 }, function () { return generateCanvasImageData(); });
23
+ var commonImageData = (0, commonPixels_1.getCommonPixels)(imageDatas, _WIDTH, _HEIGHT);
24
+ resolve({
25
+ 'commonImageDataHash': (0, hash_1.hash)(commonImageData.data.toString()).toString()
26
+ });
27
+ });
28
+ }
29
+ exports.default = generateCanvasFingerprint;
30
+ function generateCanvasImageData() {
31
+ var canvas = document.createElement('canvas');
32
+ var ctx = canvas.getContext('2d');
33
+ if (!ctx) {
34
+ return new ImageData(1, 1);
35
+ }
36
+ // Set canvas dimensions
37
+ canvas.width = _WIDTH;
38
+ canvas.height = _HEIGHT;
39
+ // Create rainbow gradient for the background rectangle
40
+ var gradient = ctx.createLinearGradient(0, 0, canvas.width, canvas.height);
41
+ gradient.addColorStop(0, "red");
42
+ gradient.addColorStop(1 / 6, "orange");
43
+ gradient.addColorStop(2 / 6, "yellow");
44
+ gradient.addColorStop(3 / 6, "green");
45
+ gradient.addColorStop(4 / 6, "blue");
46
+ gradient.addColorStop(5 / 6, "indigo");
47
+ gradient.addColorStop(1, "violet");
48
+ // Draw background rectangle with the rainbow gradient
49
+ ctx.fillStyle = gradient;
50
+ ctx.fillRect(0, 0, canvas.width, canvas.height);
51
+ // Draw some random text
52
+ var randomText = 'Random Text WMwmil10Oo';
53
+ ctx.font = '23.123px Arial';
54
+ ctx.fillStyle = 'black';
55
+ ctx.fillText(randomText, -5, 15);
56
+ // Draw the same text with an offset, different color, and slight transparency
57
+ ctx.fillStyle = 'rgba(0, 0, 255, 0.5)';
58
+ ctx.fillText(randomText, -3.3, 17.7);
59
+ // Draw a line crossing the image at an arbitrary angle
60
+ ctx.beginPath();
61
+ ctx.moveTo(0, 0);
62
+ ctx.lineTo(canvas.width * 2 / 7, canvas.height);
63
+ ctx.strokeStyle = 'white';
64
+ ctx.lineWidth = 2;
65
+ ctx.stroke();
66
+ var imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
67
+ // Return data URL of the canvas
68
+ return imageData;
69
+ }
70
+ (0, factory_1.includeComponent)('canvas', generateCanvasFingerprint);
71
+ //# sourceMappingURL=canvas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvas.js","sourceRoot":"","sources":["../../../src/components/canvas/canvas.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var canvas_1 = require("./canvas");
4
+ var MockImageData = /** @class */ (function () {
5
+ function MockImageData(pixelData, width, height) {
6
+ this.width = width;
7
+ this.height = height;
8
+ this.data = new Uint8ClampedArray(pixelData);
9
+ ; // Mimic the data structure of ImageData
10
+ }
11
+ return MockImageData;
12
+ }());
13
+ // Mock the global ImageData object in jsdom environment
14
+ global.ImageData = MockImageData;
15
+ var createImageFromArray = function (array) {
16
+ var width = 1;
17
+ var height = 1;
18
+ var pixelData = array;
19
+ var pixelArray = new Uint8ClampedArray(pixelData);
20
+ return new ImageData(pixelArray, width, height);
21
+ };
22
+ describe('canvas tests', function () {
23
+ test("single pixel array", function () {
24
+ var pixel1 = createImageFromArray([128, 255, 255, 255]);
25
+ var pixel2 = createImageFromArray([255, 200, 255, 230]);
26
+ var pixel3 = createImageFromArray([255, 255, 250, 255]);
27
+ var pixel4 = createImageFromArray([255, 255, 255, 255]);
28
+ expect((0, canvas_1.getCommonPixels)([pixel1, pixel2, pixel3], 1, 1)).toBeInstanceOf(ImageData);
29
+ expect((0, canvas_1.getCommonPixels)([pixel1, pixel2, pixel3], 1, 1).data).toStrictEqual(pixel4.data);
30
+ });
31
+ });
32
+ //# sourceMappingURL=canvas.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvas.test.js","sourceRoot":"","sources":["../../../src/components/canvas/canvas.test.ts"],"names":[],"mappings":";;AAAA,mCAA2C;AAE3C;IAKI,uBAAY,SAAmB,EAAE,KAAa,EAAE,MAAc;QAC5D,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAAA,CAAC,CAAC,wCAAwC;IACzF,CAAC;IACH,oBAAC;AAAD,CAAC,AAVH,IAUG;AAEH,wDAAwD;AACvD,MAAc,CAAC,SAAS,GAAG,aAAa,CAAC;AAE1C,IAAM,oBAAoB,GAAG,UAAC,KAAe;IACzC,IAAM,KAAK,GAAG,CAAC,CAAC;IAChB,IAAM,MAAM,GAAG,CAAC,CAAC;IACjB,IAAM,SAAS,GAAG,KAAK,CAAC;IACxB,IAAM,UAAU,GAAG,IAAI,iBAAiB,CAAC,SAAS,CAAC,CAAC;IACpD,OAAO,IAAI,SAAS,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AACpD,CAAC,CAAA;AAED,QAAQ,CAAC,cAAc,EAAE;IACrB,IAAI,CAAC,oBAAoB,EAAE;QACvB,IAAM,MAAM,GAAG,oBAAoB,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QAC1D,IAAM,MAAM,GAAG,oBAAoB,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QAC1D,IAAM,MAAM,GAAG,oBAAoB,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QAC1D,IAAM,MAAM,GAAG,oBAAoB,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QAC1D,MAAM,CAAC,IAAA,wBAAe,EAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QAClF,MAAM,CAAC,IAAA,wBAAe,EAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC5F,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { componentInterface } from '../../factory';
2
+ export default function getFontMetrics(): Promise<componentInterface>;
@@ -0,0 +1,179 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ var factory_1 = require("../../factory");
40
+ var ephemeralIFrame_1 = require("../../utils/ephemeralIFrame");
41
+ var browser_1 = require("../system/browser");
42
+ var availableFonts = [
43
+ 'Arial',
44
+ 'Arial Black',
45
+ 'Arial Narrow',
46
+ 'Arial Rounded MT',
47
+ 'Arimo',
48
+ 'Archivo',
49
+ 'Barlow',
50
+ 'Bebas Neue',
51
+ 'Bitter',
52
+ 'Bookman',
53
+ 'Calibri',
54
+ 'Cabin',
55
+ 'Candara',
56
+ 'Century',
57
+ 'Century Gothic',
58
+ 'Comic Sans MS',
59
+ 'Constantia',
60
+ 'Courier',
61
+ 'Courier New',
62
+ 'Crimson Text',
63
+ 'DM Mono',
64
+ 'DM Sans',
65
+ 'DM Serif Display',
66
+ 'DM Serif Text',
67
+ 'Dosis',
68
+ 'Droid Sans',
69
+ 'Exo',
70
+ 'Fira Code',
71
+ 'Fira Sans',
72
+ 'Franklin Gothic Medium',
73
+ 'Garamond',
74
+ 'Geneva',
75
+ 'Georgia',
76
+ 'Gill Sans',
77
+ 'Helvetica',
78
+ 'Impact',
79
+ 'Inconsolata',
80
+ 'Indie Flower',
81
+ 'Inter',
82
+ 'Josefin Sans',
83
+ 'Karla',
84
+ 'Lato',
85
+ 'Lexend',
86
+ 'Lucida Bright',
87
+ 'Lucida Console',
88
+ 'Lucida Sans Unicode',
89
+ 'Manrope',
90
+ 'Merriweather',
91
+ 'Merriweather Sans',
92
+ 'Montserrat',
93
+ 'Myriad',
94
+ 'Noto Sans',
95
+ 'Nunito',
96
+ 'Nunito Sans',
97
+ 'Open Sans',
98
+ 'Optima',
99
+ 'Orbitron',
100
+ 'Oswald',
101
+ 'Pacifico',
102
+ 'Palatino',
103
+ 'Perpetua',
104
+ 'PT Sans',
105
+ 'PT Serif',
106
+ 'Poppins',
107
+ 'Prompt',
108
+ 'Public Sans',
109
+ 'Quicksand',
110
+ 'Rajdhani',
111
+ 'Recursive',
112
+ 'Roboto',
113
+ 'Roboto Condensed',
114
+ 'Rockwell',
115
+ 'Rubik',
116
+ 'Segoe Print',
117
+ 'Segoe Script',
118
+ 'Segoe UI',
119
+ 'Sora',
120
+ 'Source Sans Pro',
121
+ 'Space Mono',
122
+ 'Tahoma',
123
+ 'Taviraj',
124
+ 'Times',
125
+ 'Times New Roman',
126
+ 'Titillium Web',
127
+ 'Trebuchet MS',
128
+ 'Ubuntu',
129
+ 'Varela Round',
130
+ 'Verdana',
131
+ 'Work Sans',
132
+ ];
133
+ var baseFonts = ['monospace', 'sans-serif', 'serif'];
134
+ function getFontMetrics() {
135
+ var _this = this;
136
+ return new Promise(function (resolve, reject) {
137
+ try {
138
+ (0, ephemeralIFrame_1.ephemeralIFrame)(function (_a) {
139
+ var iframe = _a.iframe;
140
+ return __awaiter(_this, void 0, void 0, function () {
141
+ var textToRender, canvas, ctx, defaultWidths, results;
142
+ return __generator(this, function (_b) {
143
+ textToRender = 'Hello, world!';
144
+ canvas = iframe.createElement('canvas');
145
+ ctx = canvas.getContext('2d');
146
+ defaultWidths = baseFonts.map(function (font) {
147
+ return measureSingleFont(ctx, font);
148
+ });
149
+ results = {};
150
+ availableFonts.forEach(function (font) {
151
+ var fontWidth = measureSingleFont(ctx, font);
152
+ if (!defaultWidths.includes(fontWidth))
153
+ results[font] = fontWidth;
154
+ });
155
+ resolve(results);
156
+ return [2 /*return*/];
157
+ });
158
+ });
159
+ });
160
+ }
161
+ catch (error) {
162
+ reject({ 'error': 'unsupported' });
163
+ }
164
+ });
165
+ }
166
+ exports.default = getFontMetrics;
167
+ ;
168
+ function measureSingleFont(ctx, font) {
169
+ if (!ctx) {
170
+ throw new Error('Canvas context not supported');
171
+ }
172
+ var text = "WwMmLli0Oo";
173
+ var defaultFont = ctx.font; // Store default font
174
+ ctx.font = "72px ".concat(font); // Set a default font size
175
+ return ctx.measureText(text).width;
176
+ }
177
+ if ((0, browser_1.getBrowser)().name != 'Firefox')
178
+ (0, factory_1.includeComponent)('fonts', getFontMetrics);
179
+ //# sourceMappingURL=fonts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fonts.js","sourceRoot":"","sources":["../../../src/components/fonts/fonts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var factory_1 = require("../../factory");
4
+ function getHardwareInfo() {
5
+ return new Promise(function (resolve, reject) {
6
+ var deviceMemory = (navigator.deviceMemory !== undefined) ? navigator.deviceMemory : 0;
7
+ resolve({
8
+ 'videocard': getVideoCard(),
9
+ 'architecture': getArchitecture(),
10
+ 'deviceMemory': deviceMemory.toString() || 'undefined'
11
+ });
12
+ });
13
+ }
14
+ /**
15
+ * @see Credits: https://stackoverflow.com/a/49267844
16
+ */
17
+ function getVideoCard() {
18
+ var _a;
19
+ var canvas = document.createElement('canvas');
20
+ var gl = (_a = canvas.getContext('webgl')) !== null && _a !== void 0 ? _a : canvas.getContext('experimental-webgl');
21
+ if (gl && 'getParameter' in gl) {
22
+ return {
23
+ vendor: (gl.getParameter(gl.VENDOR) || '').toString(),
24
+ renderer: (gl.getParameter(gl.RENDERER) || '').toString(),
25
+ };
26
+ }
27
+ return "undefined";
28
+ }
29
+ function getArchitecture() {
30
+ var f = new Float32Array(1);
31
+ var u8 = new Uint8Array(f.buffer);
32
+ f[0] = Infinity;
33
+ f[0] = f[0] - f[0];
34
+ return u8[3];
35
+ }
36
+ (0, factory_1.includeComponent)('hardware', getHardwareInfo);
37
+ //# sourceMappingURL=hardware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hardware.js","sourceRoot":"","sources":["../../../src/components/hardware/hardware.ts"],"names":[],"mappings":";;AAAA,yCAAoE;AAEpE,SAAS,eAAe;IACtB,OAAO,IAAI,OAAO,CAAC,UAAC,OAAO,EAAE,MAAM;QACjC,IAAM,YAAY,GAAG,CAAC,SAAS,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAA;QACxF,OAAO,CACL;YACE,WAAW,EAAE,YAAY,EAAE;YAC3B,cAAc,EAAE,eAAe,EAAE;YACjC,cAAc,EAAE,YAAY,CAAC,QAAQ,EAAE,IAAI,WAAW;SACvD,CACF,CAAA;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAOD;;GAEG;AACH,SAAS,YAAY;;IACnB,IAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;IAC/C,IAAM,EAAE,GAAG,MAAA,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,mCAAI,MAAM,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAA;IAChF,IAAI,EAAE,IAAI,cAAc,IAAI,EAAE,EAAE,CAAC;QAC/B,OAAO;YACL,MAAM,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE;YACrD,QAAQ,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE;SAC1D,CAAA;IACH,CAAC;IACD,OAAO,WAAW,CAAA;AACpB,CAAC;AAED,SAAS,eAAe;IACtB,IAAM,CAAC,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;IAC9B,IAAM,EAAE,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;IAChB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAEnB,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;AACf,CAAC;AAED,IAAA,0BAAgB,EAAC,UAAU,EAAE,eAAe,CAAC,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Does anyone have a cleaner way of doing this?
3
+ * I want to import all the components in this folder
4
+ * Feels a little dumb I'm doing this manually.
5
+ */
6
+ import './audio/audio';
7
+ import './canvas/canvas';
8
+ import './fonts/fonts';
9
+ import './hardware/hardware';
10
+ import './locales/locales';
11
+ import './permissions/permissions';
12
+ import './plugins/plugins';
13
+ import './screen/screen';
14
+ import './system/system';
15
+ import './webgl/webgl';
16
+ import './math/math';
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ /**
3
+ * Does anyone have a cleaner way of doing this?
4
+ * I want to import all the components in this folder
5
+ * Feels a little dumb I'm doing this manually.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ require("./audio/audio");
9
+ require("./canvas/canvas");
10
+ require("./fonts/fonts");
11
+ require("./hardware/hardware");
12
+ require("./locales/locales");
13
+ require("./permissions/permissions");
14
+ require("./plugins/plugins");
15
+ require("./screen/screen");
16
+ require("./system/system");
17
+ require("./webgl/webgl");
18
+ require("./math/math");
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;AAEH,yBAAsB;AACtB,2BAAwB;AACxB,yBAAsB;AACtB,+BAA4B;AAC5B,6BAA0B;AAC1B,qCAAkC;AAClC,6BAA0B;AAC1B,2BAAwB;AACxB,2BAAwB;AACxB,yBAAsB;AACtB,uBAAoB"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var factory_1 = require("../../factory");
4
+ function getLocales() {
5
+ return new Promise(function (resolve) {
6
+ resolve({
7
+ 'languages': getUserLanguage(),
8
+ 'timezone': getUserTimezone()
9
+ });
10
+ });
11
+ }
12
+ function getUserLanguage() {
13
+ var userLanguages = [];
14
+ return navigator.language;
15
+ }
16
+ function getUserTimezone() {
17
+ return Intl.DateTimeFormat().resolvedOptions().timeZone;
18
+ }
19
+ (0, factory_1.includeComponent)('locales', getLocales);
20
+ //# sourceMappingURL=locales.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"locales.js","sourceRoot":"","sources":["../../../src/components/locales/locales.ts"],"names":[],"mappings":";;AAAA,yCAAoE;AAEpE,SAAS,UAAU;IACjB,OAAO,IAAI,OAAO,CAAC,UAAC,OAAO;QACzB,OAAO,CACL;YACE,WAAW,EAAE,eAAe,EAAE;YAC9B,UAAU,EAAE,eAAe,EAAE;SAC9B,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACP,CAAC;AAED,SAAS,eAAe;IACpB,IAAM,aAAa,GAAa,EAAE,CAAC;IAEnC,OAAO,SAAS,CAAC,QAAQ,CAAC;AAC5B,CAAC;AAED,SAAS,eAAe;IACtB,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC,eAAe,EAAE,CAAC,QAAQ,CAAC;AAC1D,CAAC;AAED,IAAA,0BAAgB,EAAC,SAAS,EAAE,UAAU,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export {};