chore: checkpoint initial — Zektyc dataset, avant humanisation

- site vitrine + fingerprint test + zmap + z-panel
- remplacement duckdns -> riricdev.tail5ea5cd.ts.net (canonical/og/alternates/docs)
- suppression du token DuckDNS (plus utilisé)
This commit is contained in:
riricdev 2026-09-06 13:03:25 +02:00
commit d7ec32a458
92 changed files with 17476 additions and 0 deletions

134
public/js/zf-worker.js Normal file
View file

@ -0,0 +1,134 @@
"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)
})
}