dembrandt 0.19.6 → 0.19.7
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/dist/lib/extractors/logo.js +14 -0
- package/dist/lib/extractors/logo.js.map +1 -1
- package/dist/lib/extractors/platform-colors.d.ts +60 -0
- package/dist/lib/extractors/platform-colors.js +121 -0
- package/dist/lib/extractors/platform-colors.js.map +1 -0
- package/dist/package.json +1 -1
- package/dist/test/platform-colors.test.d.ts +1 -0
- package/dist/test/platform-colors.test.js +173 -0
- package/dist/test/platform-colors.test.js.map +1 -0
- package/dist/test/stealth.test.d.ts +1 -0
- package/dist/test/stealth.test.js +118 -0
- package/dist/test/stealth.test.js.map +1 -0
- package/package.json +1 -1
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { DOM_COLOR_SNAPSHOT_SCRIPT, extractPlatformColors, resolvePlatformColors } from './platform-colors.js';
|
|
1
2
|
export async function extractSiteName(page) {
|
|
2
3
|
return await page.evaluate(() => {
|
|
3
4
|
const ogSiteName = document.querySelector('meta[property="og:site_name"]');
|
|
@@ -82,6 +83,19 @@ export async function extractLogo(page, url) {
|
|
|
82
83
|
}
|
|
83
84
|
catch { }
|
|
84
85
|
}
|
|
86
|
+
// Platform-specific color hints (meta/link tags) — fills gaps not covered by manifest
|
|
87
|
+
const domSnap = await page.evaluate(DOM_COLOR_SNAPSHOT_SCRIPT);
|
|
88
|
+
const platformHints = extractPlatformColors(domSnap);
|
|
89
|
+
const resolved = resolvePlatformColors(platformHints, {
|
|
90
|
+
themeColor: manifestMeta.themeColor,
|
|
91
|
+
backgroundColor: manifestMeta.backgroundColor,
|
|
92
|
+
});
|
|
93
|
+
if (resolved.themeColor)
|
|
94
|
+
manifestMeta.themeColor = resolved.themeColor;
|
|
95
|
+
if (resolved.darkThemeColor)
|
|
96
|
+
manifestMeta.darkThemeColor = resolved.darkThemeColor;
|
|
97
|
+
if (resolved.backgroundColor)
|
|
98
|
+
manifestMeta.backgroundColor = resolved.backgroundColor;
|
|
85
99
|
const result = await page.evaluate((baseUrl) => {
|
|
86
100
|
const siteDomain = new URL(baseUrl).hostname.replace('www.', '').split('.')[0].toLowerCase();
|
|
87
101
|
// Canvas for background color detection
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logo.js","sourceRoot":"","sources":["../../../lib/extractors/logo.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"logo.js","sourceRoot":"","sources":["../../../lib/extractors/logo.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Platform-specific brand color hints extracted from HTML meta / link tags.
|
|
3
|
+
*
|
|
4
|
+
* All sources documented with real-world prevalence notes so priority decisions
|
|
5
|
+
* are auditable without researching specs from scratch.
|
|
6
|
+
*
|
|
7
|
+
* Sources covered:
|
|
8
|
+
* theme-color W3C / Chrome Android, Safari 15+, Edge — most common
|
|
9
|
+
* theme-color (dark) Same tag with media="(prefers-color-scheme: dark)"
|
|
10
|
+
* mask-icon color Safari pinned tab — explicit brand hex, high signal
|
|
11
|
+
* msapplication-* IE11 / Windows pinned tiles — legacy but widespread
|
|
12
|
+
* apple-mobile-web-app-status-bar-style iOS Safari — value is black|default|#hex
|
|
13
|
+
* og:image Not a color, skip
|
|
14
|
+
*/
|
|
15
|
+
export interface PlatformColorHint {
|
|
16
|
+
value: string;
|
|
17
|
+
source: string;
|
|
18
|
+
scheme?: 'light' | 'dark';
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Snapshot of the DOM fields we need. Passed in so the logic is pure and
|
|
22
|
+
* unit-testable without a browser page object.
|
|
23
|
+
*/
|
|
24
|
+
export interface DomColorSnapshot {
|
|
25
|
+
/** All <meta> elements serialized as { name, property, content, media } */
|
|
26
|
+
metas: Array<{
|
|
27
|
+
name?: string;
|
|
28
|
+
property?: string;
|
|
29
|
+
content?: string;
|
|
30
|
+
media?: string;
|
|
31
|
+
}>;
|
|
32
|
+
/** All <link> elements serialized as { rel, href, color } */
|
|
33
|
+
links: Array<{
|
|
34
|
+
rel?: string;
|
|
35
|
+
href?: string;
|
|
36
|
+
color?: string;
|
|
37
|
+
}>;
|
|
38
|
+
}
|
|
39
|
+
/** Run inside page.evaluate() to produce the snapshot. */
|
|
40
|
+
export declare const DOM_COLOR_SNAPSHOT_SCRIPT = "(() => {\n const metas = Array.from(document.querySelectorAll('meta')).map(m => ({\n name: m.getAttribute('name') || undefined,\n property: m.getAttribute('property') || undefined,\n content: m.getAttribute('content') || undefined,\n media: m.getAttribute('media') || undefined,\n }));\n const links = Array.from(document.querySelectorAll('link')).map(l => ({\n rel: l.getAttribute('rel') || undefined,\n href: l.getAttribute('href') || undefined,\n color: l.getAttribute('color') || undefined,\n }));\n return { metas, links };\n})()";
|
|
41
|
+
/**
|
|
42
|
+
* Returns color hints ordered by trust: manifest (already handled upstream) >
|
|
43
|
+
* explicit hex sources > inferred. Only includes entries with a non-empty value
|
|
44
|
+
* that looks like a color (hex, rgb, named). Does NOT normalize — caller normalizes
|
|
45
|
+
* via page.evaluate so CSS named colors resolve correctly.
|
|
46
|
+
*/
|
|
47
|
+
export declare function extractPlatformColors(snap: DomColorSnapshot): PlatformColorHint[];
|
|
48
|
+
/**
|
|
49
|
+
* Collapse hints into { themeColor, darkThemeColor, backgroundColor } using source
|
|
50
|
+
* priority. Manifest values (already in manifestMeta upstream) take precedence — pass
|
|
51
|
+
* them as `existing` so this function only fills gaps.
|
|
52
|
+
*/
|
|
53
|
+
export declare function resolvePlatformColors(hints: PlatformColorHint[], existing: {
|
|
54
|
+
themeColor?: string;
|
|
55
|
+
backgroundColor?: string;
|
|
56
|
+
}): {
|
|
57
|
+
themeColor?: string;
|
|
58
|
+
darkThemeColor?: string;
|
|
59
|
+
backgroundColor?: string;
|
|
60
|
+
};
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Platform-specific brand color hints extracted from HTML meta / link tags.
|
|
3
|
+
*
|
|
4
|
+
* All sources documented with real-world prevalence notes so priority decisions
|
|
5
|
+
* are auditable without researching specs from scratch.
|
|
6
|
+
*
|
|
7
|
+
* Sources covered:
|
|
8
|
+
* theme-color W3C / Chrome Android, Safari 15+, Edge — most common
|
|
9
|
+
* theme-color (dark) Same tag with media="(prefers-color-scheme: dark)"
|
|
10
|
+
* mask-icon color Safari pinned tab — explicit brand hex, high signal
|
|
11
|
+
* msapplication-* IE11 / Windows pinned tiles — legacy but widespread
|
|
12
|
+
* apple-mobile-web-app-status-bar-style iOS Safari — value is black|default|#hex
|
|
13
|
+
* og:image Not a color, skip
|
|
14
|
+
*/
|
|
15
|
+
/** Run inside page.evaluate() to produce the snapshot. */
|
|
16
|
+
export const DOM_COLOR_SNAPSHOT_SCRIPT = `(() => {
|
|
17
|
+
const metas = Array.from(document.querySelectorAll('meta')).map(m => ({
|
|
18
|
+
name: m.getAttribute('name') || undefined,
|
|
19
|
+
property: m.getAttribute('property') || undefined,
|
|
20
|
+
content: m.getAttribute('content') || undefined,
|
|
21
|
+
media: m.getAttribute('media') || undefined,
|
|
22
|
+
}));
|
|
23
|
+
const links = Array.from(document.querySelectorAll('link')).map(l => ({
|
|
24
|
+
rel: l.getAttribute('rel') || undefined,
|
|
25
|
+
href: l.getAttribute('href') || undefined,
|
|
26
|
+
color: l.getAttribute('color') || undefined,
|
|
27
|
+
}));
|
|
28
|
+
return { metas, links };
|
|
29
|
+
})()`;
|
|
30
|
+
/**
|
|
31
|
+
* Returns color hints ordered by trust: manifest (already handled upstream) >
|
|
32
|
+
* explicit hex sources > inferred. Only includes entries with a non-empty value
|
|
33
|
+
* that looks like a color (hex, rgb, named). Does NOT normalize — caller normalizes
|
|
34
|
+
* via page.evaluate so CSS named colors resolve correctly.
|
|
35
|
+
*/
|
|
36
|
+
export function extractPlatformColors(snap) {
|
|
37
|
+
const hints = [];
|
|
38
|
+
const addMeta = (name, source, scheme) => {
|
|
39
|
+
for (const m of snap.metas) {
|
|
40
|
+
if (m.name?.toLowerCase() !== name.toLowerCase())
|
|
41
|
+
continue;
|
|
42
|
+
const val = m.content?.trim();
|
|
43
|
+
if (!val || val === 'yes' || val === 'no')
|
|
44
|
+
continue;
|
|
45
|
+
// For theme-color: respect media queries to distinguish light/dark
|
|
46
|
+
if (name === 'theme-color' && m.media) {
|
|
47
|
+
const media = m.media.toLowerCase();
|
|
48
|
+
if (media.includes('dark')) {
|
|
49
|
+
hints.push({ value: val, source, scheme: 'dark' });
|
|
50
|
+
}
|
|
51
|
+
else if (media.includes('light')) {
|
|
52
|
+
hints.push({ value: val, source, scheme: 'light' });
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
hints.push({ value: val, source });
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
hints.push({ value: val, source, ...(scheme ? { scheme } : {}) });
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
// 1. theme-color — covers all media variants in one pass
|
|
64
|
+
addMeta('theme-color', 'meta:theme-color');
|
|
65
|
+
// 2. Safari pinned tab — <link rel="mask-icon" color="#hex"> — explicit, high trust
|
|
66
|
+
for (const l of snap.links) {
|
|
67
|
+
if (l.rel?.toLowerCase().includes('mask-icon') && l.color?.trim()) {
|
|
68
|
+
hints.push({ value: l.color.trim(), source: 'link:mask-icon' });
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
// 3. Windows tile color
|
|
72
|
+
addMeta('msapplication-TileColor', 'meta:msapplication-TileColor');
|
|
73
|
+
addMeta('msapplication-navbutton-color', 'meta:msapplication-navbutton-color');
|
|
74
|
+
// 4. iOS status bar — value is usually "black", "default", or "black-translucent",
|
|
75
|
+
// but some sites set a hex. Skip non-hex values — they carry no color information.
|
|
76
|
+
for (const m of snap.metas) {
|
|
77
|
+
if (m.name?.toLowerCase() !== 'apple-mobile-web-app-status-bar-style')
|
|
78
|
+
continue;
|
|
79
|
+
const val = m.content?.trim();
|
|
80
|
+
if (val && /^#[0-9a-f]{3,8}$/i.test(val)) {
|
|
81
|
+
hints.push({ value: val, source: 'meta:apple-status-bar' });
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return hints;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Collapse hints into { themeColor, darkThemeColor, backgroundColor } using source
|
|
88
|
+
* priority. Manifest values (already in manifestMeta upstream) take precedence — pass
|
|
89
|
+
* them as `existing` so this function only fills gaps.
|
|
90
|
+
*/
|
|
91
|
+
export function resolvePlatformColors(hints, existing) {
|
|
92
|
+
const result = {};
|
|
93
|
+
// Priority order for light/unschemed theme color:
|
|
94
|
+
// meta:theme-color (light/none) > link:mask-icon > msapplication-navbutton-color
|
|
95
|
+
const lightOrder = ['meta:theme-color', 'link:mask-icon', 'meta:msapplication-navbutton-color'];
|
|
96
|
+
const bgOrder = ['meta:msapplication-TileColor'];
|
|
97
|
+
if (!existing.themeColor) {
|
|
98
|
+
for (const src of lightOrder) {
|
|
99
|
+
const match = hints.find(h => h.source === src && h.scheme !== 'dark');
|
|
100
|
+
if (match) {
|
|
101
|
+
result.themeColor = match.value;
|
|
102
|
+
break;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
// Dark variant — always populate if present, no upstream equivalent
|
|
107
|
+
const darkMatch = hints.find(h => h.scheme === 'dark' && h.source === 'meta:theme-color');
|
|
108
|
+
if (darkMatch)
|
|
109
|
+
result.darkThemeColor = darkMatch.value;
|
|
110
|
+
if (!existing.backgroundColor) {
|
|
111
|
+
for (const src of bgOrder) {
|
|
112
|
+
const match = hints.find(h => h.source === src);
|
|
113
|
+
if (match) {
|
|
114
|
+
result.backgroundColor = match.value;
|
|
115
|
+
break;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
return result;
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=platform-colors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform-colors.js","sourceRoot":"","sources":["../../../lib/extractors/platform-colors.ts"],"names":[],"mappings":"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"}
|
package/dist/package.json
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import assert from 'node:assert/strict';
|
|
2
|
+
import { test } from 'node:test';
|
|
3
|
+
import { extractPlatformColors, resolvePlatformColors } from '../lib/extractors/platform-colors.js';
|
|
4
|
+
// ---------------------------------------------------------------------------
|
|
5
|
+
// extractPlatformColors
|
|
6
|
+
// ---------------------------------------------------------------------------
|
|
7
|
+
test('extracts theme-color meta without media attribute', () => {
|
|
8
|
+
const snap = {
|
|
9
|
+
metas: [{ name: 'theme-color', content: '#1a73e8' }],
|
|
10
|
+
links: [],
|
|
11
|
+
};
|
|
12
|
+
const hints = extractPlatformColors(snap);
|
|
13
|
+
assert.equal(hints.length, 1);
|
|
14
|
+
assert.equal(hints[0].value, '#1a73e8');
|
|
15
|
+
assert.equal(hints[0].source, 'meta:theme-color');
|
|
16
|
+
assert.equal(hints[0].scheme, undefined);
|
|
17
|
+
});
|
|
18
|
+
test('splits theme-color into light and dark via media attribute', () => {
|
|
19
|
+
const snap = {
|
|
20
|
+
metas: [
|
|
21
|
+
{ name: 'theme-color', content: '#ffffff', media: '(prefers-color-scheme: light)' },
|
|
22
|
+
{ name: 'theme-color', content: '#000000', media: '(prefers-color-scheme: dark)' },
|
|
23
|
+
],
|
|
24
|
+
links: [],
|
|
25
|
+
};
|
|
26
|
+
const hints = extractPlatformColors(snap);
|
|
27
|
+
assert.equal(hints.length, 2);
|
|
28
|
+
const light = hints.find(h => h.scheme === 'light');
|
|
29
|
+
const dark = hints.find(h => h.scheme === 'dark');
|
|
30
|
+
assert.equal(light?.value, '#ffffff');
|
|
31
|
+
assert.equal(dark?.value, '#000000');
|
|
32
|
+
});
|
|
33
|
+
test('extracts mask-icon color from link tag', () => {
|
|
34
|
+
const snap = {
|
|
35
|
+
metas: [],
|
|
36
|
+
links: [{ rel: 'mask-icon', href: '/icon.svg', color: '#5bbad5' }],
|
|
37
|
+
};
|
|
38
|
+
const hints = extractPlatformColors(snap);
|
|
39
|
+
assert.equal(hints.length, 1);
|
|
40
|
+
assert.equal(hints[0].source, 'link:mask-icon');
|
|
41
|
+
assert.equal(hints[0].value, '#5bbad5');
|
|
42
|
+
});
|
|
43
|
+
test('ignores mask-icon without color attribute', () => {
|
|
44
|
+
const snap = {
|
|
45
|
+
metas: [],
|
|
46
|
+
links: [{ rel: 'mask-icon', href: '/icon.svg' }],
|
|
47
|
+
};
|
|
48
|
+
assert.equal(extractPlatformColors(snap).length, 0);
|
|
49
|
+
});
|
|
50
|
+
test('extracts msapplication-TileColor', () => {
|
|
51
|
+
const snap = {
|
|
52
|
+
metas: [{ name: 'msapplication-TileColor', content: '#da532c' }],
|
|
53
|
+
links: [],
|
|
54
|
+
};
|
|
55
|
+
const hints = extractPlatformColors(snap);
|
|
56
|
+
assert.equal(hints[0].source, 'meta:msapplication-TileColor');
|
|
57
|
+
assert.equal(hints[0].value, '#da532c');
|
|
58
|
+
});
|
|
59
|
+
test('extracts msapplication-navbutton-color', () => {
|
|
60
|
+
const snap = {
|
|
61
|
+
metas: [{ name: 'msapplication-navbutton-color', content: '#ff6600' }],
|
|
62
|
+
links: [],
|
|
63
|
+
};
|
|
64
|
+
const hints = extractPlatformColors(snap);
|
|
65
|
+
assert.equal(hints[0].source, 'meta:msapplication-navbutton-color');
|
|
66
|
+
});
|
|
67
|
+
test('apple status bar: skips non-hex values like "black" or "default"', () => {
|
|
68
|
+
const snap = {
|
|
69
|
+
metas: [
|
|
70
|
+
{ name: 'apple-mobile-web-app-status-bar-style', content: 'black' },
|
|
71
|
+
{ name: 'apple-mobile-web-app-status-bar-style', content: 'default' },
|
|
72
|
+
{ name: 'apple-mobile-web-app-status-bar-style', content: 'black-translucent' },
|
|
73
|
+
],
|
|
74
|
+
links: [],
|
|
75
|
+
};
|
|
76
|
+
assert.equal(extractPlatformColors(snap).length, 0);
|
|
77
|
+
});
|
|
78
|
+
test('apple status bar: accepts hex value', () => {
|
|
79
|
+
const snap = {
|
|
80
|
+
metas: [{ name: 'apple-mobile-web-app-status-bar-style', content: '#007aff' }],
|
|
81
|
+
links: [],
|
|
82
|
+
};
|
|
83
|
+
const hints = extractPlatformColors(snap);
|
|
84
|
+
assert.equal(hints.length, 1);
|
|
85
|
+
assert.equal(hints[0].source, 'meta:apple-status-bar');
|
|
86
|
+
assert.equal(hints[0].value, '#007aff');
|
|
87
|
+
});
|
|
88
|
+
test('case-insensitive name matching', () => {
|
|
89
|
+
const snap = {
|
|
90
|
+
metas: [{ name: 'Theme-Color', content: '#abcdef' }],
|
|
91
|
+
links: [],
|
|
92
|
+
};
|
|
93
|
+
assert.equal(extractPlatformColors(snap).length, 1);
|
|
94
|
+
});
|
|
95
|
+
test('ignores meta with empty or boolean-like content', () => {
|
|
96
|
+
const snap = {
|
|
97
|
+
metas: [
|
|
98
|
+
{ name: 'theme-color', content: '' },
|
|
99
|
+
{ name: 'theme-color', content: 'yes' },
|
|
100
|
+
{ name: 'theme-color', content: 'no' },
|
|
101
|
+
],
|
|
102
|
+
links: [],
|
|
103
|
+
};
|
|
104
|
+
assert.equal(extractPlatformColors(snap).length, 0);
|
|
105
|
+
});
|
|
106
|
+
test('empty snapshot yields no hints', () => {
|
|
107
|
+
assert.equal(extractPlatformColors({ metas: [], links: [] }).length, 0);
|
|
108
|
+
});
|
|
109
|
+
// ---------------------------------------------------------------------------
|
|
110
|
+
// resolvePlatformColors
|
|
111
|
+
// ---------------------------------------------------------------------------
|
|
112
|
+
test('sets themeColor from first matching light/unschemed hint', () => {
|
|
113
|
+
const hints = extractPlatformColors({
|
|
114
|
+
metas: [{ name: 'theme-color', content: '#aabbcc' }],
|
|
115
|
+
links: [],
|
|
116
|
+
});
|
|
117
|
+
const result = resolvePlatformColors(hints, {});
|
|
118
|
+
assert.equal(result.themeColor, '#aabbcc');
|
|
119
|
+
});
|
|
120
|
+
test('does not overwrite existing themeColor from manifest', () => {
|
|
121
|
+
const hints = extractPlatformColors({
|
|
122
|
+
metas: [{ name: 'theme-color', content: '#aabbcc' }],
|
|
123
|
+
links: [],
|
|
124
|
+
});
|
|
125
|
+
const result = resolvePlatformColors(hints, { themeColor: '#manifest' });
|
|
126
|
+
assert.equal(result.themeColor, undefined);
|
|
127
|
+
});
|
|
128
|
+
test('always populates darkThemeColor even when light is set', () => {
|
|
129
|
+
const snap = {
|
|
130
|
+
metas: [
|
|
131
|
+
{ name: 'theme-color', content: '#ffffff', media: '(prefers-color-scheme: light)' },
|
|
132
|
+
{ name: 'theme-color', content: '#111111', media: '(prefers-color-scheme: dark)' },
|
|
133
|
+
],
|
|
134
|
+
links: [],
|
|
135
|
+
};
|
|
136
|
+
const hints = extractPlatformColors(snap);
|
|
137
|
+
const result = resolvePlatformColors(hints, {});
|
|
138
|
+
assert.equal(result.themeColor, '#ffffff');
|
|
139
|
+
assert.equal(result.darkThemeColor, '#111111');
|
|
140
|
+
});
|
|
141
|
+
test('mask-icon used as themeColor fallback when no theme-color meta', () => {
|
|
142
|
+
const hints = extractPlatformColors({
|
|
143
|
+
metas: [],
|
|
144
|
+
links: [{ rel: 'mask-icon', color: '#5bbad5' }],
|
|
145
|
+
});
|
|
146
|
+
const result = resolvePlatformColors(hints, {});
|
|
147
|
+
assert.equal(result.themeColor, '#5bbad5');
|
|
148
|
+
});
|
|
149
|
+
test('theme-color meta takes priority over mask-icon', () => {
|
|
150
|
+
const hints = extractPlatformColors({
|
|
151
|
+
metas: [{ name: 'theme-color', content: '#ff0000' }],
|
|
152
|
+
links: [{ rel: 'mask-icon', color: '#00ff00' }],
|
|
153
|
+
});
|
|
154
|
+
const result = resolvePlatformColors(hints, {});
|
|
155
|
+
assert.equal(result.themeColor, '#ff0000');
|
|
156
|
+
});
|
|
157
|
+
test('msapplication-TileColor maps to backgroundColor', () => {
|
|
158
|
+
const hints = extractPlatformColors({
|
|
159
|
+
metas: [{ name: 'msapplication-TileColor', content: '#da532c' }],
|
|
160
|
+
links: [],
|
|
161
|
+
});
|
|
162
|
+
const result = resolvePlatformColors(hints, {});
|
|
163
|
+
assert.equal(result.backgroundColor, '#da532c');
|
|
164
|
+
});
|
|
165
|
+
test('does not overwrite existing backgroundColor from manifest', () => {
|
|
166
|
+
const hints = extractPlatformColors({
|
|
167
|
+
metas: [{ name: 'msapplication-TileColor', content: '#da532c' }],
|
|
168
|
+
links: [],
|
|
169
|
+
});
|
|
170
|
+
const result = resolvePlatformColors(hints, { backgroundColor: '#from-manifest' });
|
|
171
|
+
assert.equal(result.backgroundColor, undefined);
|
|
172
|
+
});
|
|
173
|
+
//# sourceMappingURL=platform-colors.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform-colors.test.js","sourceRoot":"","sources":["../../test/platform-colors.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import assert from 'node:assert/strict';
|
|
2
|
+
import { test } from 'node:test';
|
|
3
|
+
const SPOOFED_VENDOR = 'Google Inc. (NVIDIA)';
|
|
4
|
+
const SPOOFED_RENDERER = 'ANGLE (NVIDIA, NVIDIA GeForce RTX 3060 Direct3D11 vs_5_0 ps_5_0, D3D11)';
|
|
5
|
+
function makeWebGLProto() {
|
|
6
|
+
const store = {
|
|
7
|
+
37445: 'Google Inc. (SwiftShader)',
|
|
8
|
+
37446: 'SwiftShader ANGLE (Google, Vulkan 1.3.0)',
|
|
9
|
+
9729: 'some-other-value',
|
|
10
|
+
};
|
|
11
|
+
return {
|
|
12
|
+
getParameter(param) {
|
|
13
|
+
return store[param];
|
|
14
|
+
},
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
function applyWebGLPatch(proto) {
|
|
18
|
+
const orig = proto.getParameter.bind(proto);
|
|
19
|
+
proto.getParameter = function (param) {
|
|
20
|
+
if (param === 37445)
|
|
21
|
+
return SPOOFED_VENDOR;
|
|
22
|
+
if (param === 37446)
|
|
23
|
+
return SPOOFED_RENDERER;
|
|
24
|
+
return orig(param);
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
test('WebGL patch overrides vendor (37445)', () => {
|
|
28
|
+
const proto = makeWebGLProto();
|
|
29
|
+
applyWebGLPatch(proto);
|
|
30
|
+
assert.equal(proto.getParameter(37445), SPOOFED_VENDOR);
|
|
31
|
+
});
|
|
32
|
+
test('WebGL patch overrides renderer (37446)', () => {
|
|
33
|
+
const proto = makeWebGLProto();
|
|
34
|
+
applyWebGLPatch(proto);
|
|
35
|
+
assert.equal(proto.getParameter(37446), SPOOFED_RENDERER);
|
|
36
|
+
});
|
|
37
|
+
test('WebGL patch passes through other parameters', () => {
|
|
38
|
+
const proto = makeWebGLProto();
|
|
39
|
+
applyWebGLPatch(proto);
|
|
40
|
+
assert.equal(proto.getParameter(9729), 'some-other-value');
|
|
41
|
+
});
|
|
42
|
+
test('WebGL patch works independently on two prototypes (WebGL1 + WebGL2)', () => {
|
|
43
|
+
const proto1 = makeWebGLProto();
|
|
44
|
+
const proto2 = makeWebGLProto();
|
|
45
|
+
applyWebGLPatch(proto1);
|
|
46
|
+
applyWebGLPatch(proto2);
|
|
47
|
+
assert.equal(proto1.getParameter(37445), SPOOFED_VENDOR);
|
|
48
|
+
assert.equal(proto2.getParameter(37445), SPOOFED_VENDOR);
|
|
49
|
+
assert.equal(proto1.getParameter(9729), proto2.getParameter(9729));
|
|
50
|
+
});
|
|
51
|
+
// --- Audio fingerprint ---
|
|
52
|
+
function makeSessionNoise(seed) {
|
|
53
|
+
return (index) => {
|
|
54
|
+
const x = Math.sin(seed * 9301 + index * 49297 + 233720) * 10000;
|
|
55
|
+
return 1e-7 + (x - Math.floor(x)) * 9e-7;
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
function makeOfflineAudioContextProto() {
|
|
59
|
+
return {
|
|
60
|
+
startRendering() {
|
|
61
|
+
const data = new Float32Array(128).fill(0.5);
|
|
62
|
+
return Promise.resolve({ getChannelData: (_ch) => data });
|
|
63
|
+
},
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
function applyAudioPatch(proto, sessionNoise) {
|
|
67
|
+
const orig = proto.startRendering.bind(proto);
|
|
68
|
+
proto.startRendering = function () {
|
|
69
|
+
return orig().then((buffer) => {
|
|
70
|
+
const data = buffer.getChannelData(0);
|
|
71
|
+
for (let i = 0; i < Math.min(data.length, 20); i++) {
|
|
72
|
+
data[i] += sessionNoise(i);
|
|
73
|
+
}
|
|
74
|
+
return buffer;
|
|
75
|
+
});
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
test('audio patch mutates only first 20 samples of the rendered buffer', async () => {
|
|
79
|
+
const proto = makeOfflineAudioContextProto();
|
|
80
|
+
const baseline = new Float32Array(128).fill(0.5);
|
|
81
|
+
applyAudioPatch(proto, makeSessionNoise(0.73));
|
|
82
|
+
const buffer = await proto.startRendering();
|
|
83
|
+
const data = buffer.getChannelData(0);
|
|
84
|
+
for (let i = 0; i < 20; i++) {
|
|
85
|
+
assert.ok(data[i] !== baseline[i], `sample ${i} unchanged`);
|
|
86
|
+
assert.ok(Math.abs(data[i] - baseline[i]) < 1e-5, `sample ${i} noise too large`);
|
|
87
|
+
}
|
|
88
|
+
for (let i = 20; i < 128; i++) {
|
|
89
|
+
assert.equal(data[i], baseline[i], `sample ${i} unexpectedly modified`);
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
test('audio patch is session-stable: two startRendering calls produce identical output', async () => {
|
|
93
|
+
const noise = makeSessionNoise(0.42);
|
|
94
|
+
const proto = makeOfflineAudioContextProto();
|
|
95
|
+
applyAudioPatch(proto, noise);
|
|
96
|
+
const b1 = await proto.startRendering();
|
|
97
|
+
const d1 = Float32Array.from(b1.getChannelData(0));
|
|
98
|
+
// Reset underlying data to simulate a second fingerprint probe on the same page.
|
|
99
|
+
const proto2 = makeOfflineAudioContextProto();
|
|
100
|
+
applyAudioPatch(proto2, noise);
|
|
101
|
+
const b2 = await proto2.startRendering();
|
|
102
|
+
const d2 = b2.getChannelData(0);
|
|
103
|
+
for (let i = 0; i < 20; i++) {
|
|
104
|
+
assert.equal(d1[i], d2[i], `sample ${i} differs between reads`);
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
test('audio patch noise differs across sessions (different seeds)', async () => {
|
|
108
|
+
async function render(seed) {
|
|
109
|
+
const proto = makeOfflineAudioContextProto();
|
|
110
|
+
applyAudioPatch(proto, makeSessionNoise(seed));
|
|
111
|
+
const buf = await proto.startRendering();
|
|
112
|
+
return buf.getChannelData(0)[0];
|
|
113
|
+
}
|
|
114
|
+
const v1 = await render(0.1);
|
|
115
|
+
const v2 = await render(0.9);
|
|
116
|
+
assert.notEqual(v1, v2);
|
|
117
|
+
});
|
|
118
|
+
//# sourceMappingURL=stealth.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stealth.test.js","sourceRoot":"","sources":["../../test/stealth.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED