- site vitrine + fingerprint test + zmap + z-panel - remplacement duckdns -> riricdev.tail5ea5cd.ts.net (canonical/og/alternates/docs) - suppression du token DuckDNS (plus utilisé)
134 lines
4.4 KiB
JavaScript
134 lines
4.4 KiB
JavaScript
"use strict"
|
|
|
|
var FONT_LIST = [
|
|
"Arial", "Arial Black", "Arial Narrow", "Arial Unicode MS", "Bahnschrift", "Baskerville",
|
|
"Calibri", "Cambria", "Cambria Math", "Candara", "Century Gothic", "Charter", "Cochin",
|
|
"Comic Sans MS", "Consolas", "Constantia", "Corbel", "Courier", "Courier New", "DejaVu Sans",
|
|
"DejaVu Sans Mono", "DejaVu Serif", "Didot", "Franklin Gothic Medium", "Futura", "Geneva",
|
|
"Georgia", "Gill Sans", "Helvetica", "Helvetica Neue", "Impact", "Iowan Old Style", "Lato",
|
|
"Liberation Sans", "Liberation Serif", "Lucida Console", "Malgun Gothic", "Menlo", "Microsoft JhengHei",
|
|
"Microsoft Sans Serif", "Microsoft YaHei", "Monaco", "Noto Sans", "Noto Sans Mono", "Noto Serif",
|
|
"Open Sans", "Optima", "Palatino", "Palatino Linotype", "Roboto", "Segoe UI", "Segoe UI Emoji",
|
|
"Sitka", "Symbol", "Tahoma", "Times New Roman", "Trebuchet MS", "Ubuntu", "Ubuntu Mono",
|
|
"Verdana", "Webdings", "Wingdings", "Zapfino"
|
|
]
|
|
|
|
function probeCanvasFonts(list) {
|
|
var found = []
|
|
try {
|
|
var cv = new OffscreenCanvas(300, 60)
|
|
var cx = cv.getContext("2d")
|
|
cx.font = "48px serif"
|
|
var base = cx.measureText("mmllii").width
|
|
for (var i = 0; i < list.length; i++) {
|
|
cx.font = "48px '" + list[i] + "', serif"
|
|
if (cx.measureText("mmllii").width !== base) found.push(list[i])
|
|
}
|
|
} catch (e) {}
|
|
return found
|
|
}
|
|
|
|
function probeScreen() {
|
|
var o = {}
|
|
try {
|
|
if (typeof self.screen !== "undefined" && self.screen) {
|
|
o.colorDepth = String(self.screen.colorDepth || "")
|
|
o.orientation = (self.screen.orientation && self.screen.orientation.type) || ""
|
|
}
|
|
} catch (e) {}
|
|
return o
|
|
}
|
|
|
|
function probeCodecs() {
|
|
var got = {}
|
|
try {
|
|
if (navigator.mediaCapabilities && navigator.mediaCapabilities.decodingInfo) {
|
|
var tests = {
|
|
vp9: { type: "file", video: { contentType: 'video/webm;codecs="vp09.00.10.08"', width: 1920, height: 1080, bitrate: 4000000, framerate: 30 } },
|
|
av1: { type: "file", video: { contentType: 'video/webm;codecs="av01.0.04M.08"', width: 1920, height: 1080, bitrate: 4000000, framerate: 30 } },
|
|
opus: { type: "file", audio: { contentType: 'audio/ogg;codecs="opus"' } }
|
|
}
|
|
return Promise.all(
|
|
["vp9", "av1", "opus"].map(function (k) {
|
|
return navigator.mediaCapabilities
|
|
.decodingInfo(tests[k])
|
|
.then(function (r) { got[k] = r && r.supported ? "1" : "0" })
|
|
.catch(function () { got[k] = "0" })
|
|
})
|
|
).then(function () { return got })
|
|
}
|
|
} catch (e) {}
|
|
return Promise.resolve(got)
|
|
}
|
|
|
|
self.onmessage = function () {
|
|
var out = {}
|
|
|
|
try {
|
|
var ops = ["sin", "cos", "tan", "log", "exp", "sqrt", "asin", "acos", "atan2", "sinh", "cosh", "tanh", "cbrt"]
|
|
var m = []
|
|
for (var i = 0; i < ops.length; i++) {
|
|
m.push(Math[ops[i]](i * 0.123456789 + 1).toPrecision(17))
|
|
}
|
|
out.math = m.join(":")
|
|
} catch (e) {
|
|
out.math = null
|
|
}
|
|
|
|
try {
|
|
out.calendars = typeof Intl.supportedValuesOf === "function" ? Intl.supportedValuesOf("calendar").join(",") : null
|
|
} catch (e) {
|
|
out.calendars = null
|
|
}
|
|
try {
|
|
out.locale = Intl.DateTimeFormat().resolvedOptions().locale
|
|
} catch (e) {
|
|
out.locale = null
|
|
}
|
|
try {
|
|
out.numbering = new Intl.NumberFormat().resolvedOptions().numberingSystem
|
|
} catch (e) {
|
|
out.numbering = null
|
|
}
|
|
|
|
out.wasm = !!self.WebAssembly
|
|
try {
|
|
out.simd = self.WebAssembly.validate(
|
|
new Uint8Array([
|
|
0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00,
|
|
0x01, 0x05, 0x01, 0x60, 0x00, 0x01, 0x7b,
|
|
0x03, 0x02, 0x01, 0x00,
|
|
0x0a, 0x17, 0x01, 0x15, 0x00,
|
|
0x41, 0x00, 0xfd, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b
|
|
])
|
|
)
|
|
} catch (e) {
|
|
out.simd = false
|
|
}
|
|
|
|
var t0 = performance.now()
|
|
var x = 0
|
|
for (var k = 0; k < 2000000; k++) {
|
|
x = (x + k) % 97
|
|
x = Math.sqrt(x) + Math.log(k + 1)
|
|
}
|
|
var dt = performance.now() - t0
|
|
out.bench = dt > 0 ? Math.round(2000000 / dt) : 0
|
|
|
|
out.fonts = probeCanvasFonts(FONT_LIST)
|
|
var scr = probeScreen()
|
|
out.colorDepth = scr.colorDepth || ""
|
|
out.orientation = scr.orientation || ""
|
|
|
|
try {
|
|
out.fontLocalApi = typeof FontFace === "function" && typeof self.fonts === "object" && self.fonts && typeof self.fonts.add === "function" ? "local" : "unsupported"
|
|
} catch (e) {
|
|
out.fontLocalApi = "unsupported"
|
|
}
|
|
|
|
probeCodecs().then(function (codecs) {
|
|
out.codecs = codecs
|
|
postMessage(out)
|
|
})
|
|
}
|