@freegamestore/compliance 0.8.3 → 0.10.0
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/checks/audio-mute-respect.d.ts.map +1 -1
- package/dist/checks/audio-mute-respect.js +1 -5
- package/dist/checks/audio-mute-respect.js.map +1 -1
- package/dist/checks/brand-fonts.d.ts.map +1 -1
- package/dist/checks/brand-fonts.js +1 -5
- package/dist/checks/brand-fonts.js.map +1 -1
- package/dist/checks/claude-md-slim.js +1 -1
- package/dist/checks/claude-md-slim.js.map +1 -1
- package/dist/checks/license-mit.d.ts.map +1 -1
- package/dist/checks/license-mit.js +8 -1
- package/dist/checks/license-mit.js.map +1 -1
- package/dist/checks/no-any-types.d.ts.map +1 -1
- package/dist/checks/no-any-types.js +1 -5
- package/dist/checks/no-any-types.js.map +1 -1
- package/dist/checks/no-brand-overrides.d.ts.map +1 -1
- package/dist/checks/no-brand-overrides.js +34 -8
- package/dist/checks/no-brand-overrides.js.map +1 -1
- package/dist/checks/no-console-log.d.ts.map +1 -1
- package/dist/checks/no-console-log.js +1 -5
- package/dist/checks/no-console-log.js.map +1 -1
- package/dist/checks/no-cookies.d.ts.map +1 -1
- package/dist/checks/no-cookies.js +1 -5
- package/dist/checks/no-cookies.js.map +1 -1
- package/dist/checks/no-excessive-inline-styles.d.ts.map +1 -1
- package/dist/checks/no-excessive-inline-styles.js +1 -5
- package/dist/checks/no-excessive-inline-styles.js.map +1 -1
- package/dist/checks/no-external-fetch.d.ts.map +1 -1
- package/dist/checks/no-external-fetch.js +1 -5
- package/dist/checks/no-external-fetch.js.map +1 -1
- package/dist/checks/no-external-scripts.d.ts +2 -2
- package/dist/checks/no-external-scripts.d.ts.map +1 -1
- package/dist/checks/no-external-scripts.js +26 -12
- package/dist/checks/no-external-scripts.js.map +1 -1
- package/dist/checks/no-hardcoded-colors.d.ts.map +1 -1
- package/dist/checks/no-hardcoded-colors.js +1 -5
- package/dist/checks/no-hardcoded-colors.js.map +1 -1
- package/dist/checks/no-page-policy.d.ts +17 -0
- package/dist/checks/no-page-policy.d.ts.map +1 -0
- package/dist/checks/no-page-policy.js +45 -0
- package/dist/checks/no-page-policy.js.map +1 -0
- package/dist/checks/no-payment-capabilities.d.ts +4 -0
- package/dist/checks/no-payment-capabilities.d.ts.map +1 -0
- package/dist/checks/no-payment-capabilities.js +129 -0
- package/dist/checks/no-payment-capabilities.js.map +1 -0
- package/dist/checks/no-payment-sdk.d.ts.map +1 -1
- package/dist/checks/no-payment-sdk.js +1 -5
- package/dist/checks/no-payment-sdk.js.map +1 -1
- package/dist/checks/no-placeholders.d.ts.map +1 -1
- package/dist/checks/no-placeholders.js +1 -5
- package/dist/checks/no-placeholders.js.map +1 -1
- package/dist/checks/no-scroll.d.ts.map +1 -1
- package/dist/checks/no-scroll.js +1 -5
- package/dist/checks/no-scroll.js.map +1 -1
- package/dist/checks/no-tracking.d.ts.map +1 -1
- package/dist/checks/no-tracking.js +19 -6
- package/dist/checks/no-tracking.js.map +1 -1
- package/dist/checks/permissions-declared.d.ts +13 -0
- package/dist/checks/permissions-declared.d.ts.map +1 -0
- package/dist/checks/permissions-declared.js +43 -0
- package/dist/checks/permissions-declared.js.map +1 -0
- package/dist/checks/pwa-offline.d.ts.map +1 -1
- package/dist/checks/pwa-offline.js +10 -4
- package/dist/checks/pwa-offline.js.map +1 -1
- package/dist/checks/seo-metadata.d.ts +5 -0
- package/dist/checks/seo-metadata.d.ts.map +1 -0
- package/dist/checks/seo-metadata.js +23 -0
- package/dist/checks/seo-metadata.js.map +1 -0
- package/dist/checks/unsafe-vh.d.ts.map +1 -1
- package/dist/checks/unsafe-vh.js +1 -5
- package/dist/checks/unsafe-vh.js.map +1 -1
- package/dist/checks/uses-game-sdk.d.ts.map +1 -1
- package/dist/checks/uses-game-sdk.js +1 -5
- package/dist/checks/uses-game-sdk.js.map +1 -1
- package/dist/checks/uses-localstorage.d.ts +7 -3
- package/dist/checks/uses-localstorage.d.ts.map +1 -1
- package/dist/checks/uses-localstorage.js +12 -14
- package/dist/checks/uses-localstorage.js.map +1 -1
- package/dist/game-deploy-workflow.d.ts +12 -0
- package/dist/game-deploy-workflow.d.ts.map +1 -0
- package/dist/game-deploy-workflow.js +34 -0
- package/dist/game-deploy-workflow.js.map +1 -0
- package/dist/game-metadata.d.ts +60 -0
- package/dist/game-metadata.d.ts.map +1 -0
- package/dist/game-metadata.js +194 -0
- package/dist/game-metadata.js.map +1 -0
- package/dist/index.d.ts +15 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -60
- package/dist/index.js.map +1 -1
- package/dist/lib/file-source.d.ts +5 -10
- package/dist/lib/file-source.d.ts.map +1 -1
- package/dist/lib/file-source.js +7 -80
- package/dist/lib/file-source.js.map +1 -1
- package/dist/lib/fs-file-source.d.ts +21 -0
- package/dist/lib/fs-file-source.d.ts.map +1 -0
- package/dist/lib/fs-file-source.js +88 -0
- package/dist/lib/fs-file-source.js.map +1 -0
- package/dist/lib/inline-manifest.d.ts.map +1 -1
- package/dist/lib/inline-manifest.js +14 -59
- package/dist/lib/inline-manifest.js.map +1 -1
- package/dist/lib/path.d.ts +11 -0
- package/dist/lib/path.d.ts.map +1 -0
- package/dist/lib/path.js +15 -0
- package/dist/lib/path.js.map +1 -0
- package/dist/lib/permissions.d.ts +44 -0
- package/dist/lib/permissions.d.ts.map +1 -0
- package/dist/lib/permissions.js +132 -0
- package/dist/lib/permissions.js.map +1 -0
- package/dist/lib/strip.d.ts.map +1 -1
- package/dist/lib/strip.js +20 -26
- package/dist/lib/strip.js.map +1 -1
- package/dist/live/index.js +1 -1
- package/dist/live/index.js.map +1 -1
- package/dist/run-checks.d.ts +18 -0
- package/dist/run-checks.d.ts.map +1 -0
- package/dist/run-checks.js +112 -0
- package/dist/run-checks.js.map +1 -0
- package/dist/worker.d.ts +60 -0
- package/dist/worker.d.ts.map +1 -0
- package/dist/worker.js +58 -0
- package/dist/worker.js.map +1 -0
- package/package.json +7 -2
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { stripHtmlComments } from '../lib/strip.js';
|
|
2
|
+
const INDEX_HTML = 'web/index.html';
|
|
3
|
+
const NAME = 'No page-level CSP';
|
|
4
|
+
/**
|
|
5
|
+
* Warns when `web/index.html` sets its own Content-Security-Policy or
|
|
6
|
+
* Permissions-Policy with `<meta http-equiv>` (#369).
|
|
7
|
+
*
|
|
8
|
+
* The game host already sends both headers, default-open. The browser applies
|
|
9
|
+
* a page's meta policy on top of the header, so the stricter of the two wins:
|
|
10
|
+
* a meta CSP can only take capabilities away. Three games had one copied from
|
|
11
|
+
* the old platform lockdown, and it blocked the platform analytics loader
|
|
12
|
+
* without anyone noticing.
|
|
13
|
+
*
|
|
14
|
+
* WARN level: a stricter policy is the creator's choice, but it should be a
|
|
15
|
+
* deliberate one.
|
|
16
|
+
*/
|
|
17
|
+
export async function checkNoPagePolicy(source) {
|
|
18
|
+
const raw = await source.read(INDEX_HTML);
|
|
19
|
+
if (raw === null) {
|
|
20
|
+
return { name: NAME, status: 'pass', detail: 'no web/index.html (not a web project)' };
|
|
21
|
+
}
|
|
22
|
+
const html = stripHtmlComments(raw);
|
|
23
|
+
const found = new Set();
|
|
24
|
+
for (const m of html.matchAll(/<meta\b[^>]*\bhttp-equiv\s*=\s*["']?([\w-]+)/gi)) {
|
|
25
|
+
const name = (m[1] ?? '').toLowerCase();
|
|
26
|
+
if (name === 'content-security-policy')
|
|
27
|
+
found.add('Content-Security-Policy');
|
|
28
|
+
if (name === 'permissions-policy' || name === 'feature-policy')
|
|
29
|
+
found.add('Permissions-Policy');
|
|
30
|
+
}
|
|
31
|
+
if (found.size === 0) {
|
|
32
|
+
return { name: NAME, status: 'pass', detail: 'index.html sets no page-level policy' };
|
|
33
|
+
}
|
|
34
|
+
const list = [...found].join(' and ');
|
|
35
|
+
return {
|
|
36
|
+
name: NAME,
|
|
37
|
+
status: 'warn',
|
|
38
|
+
detail: `web/index.html sets its own ${list} with <meta http-equiv>, which can only remove capabilities the host allows`,
|
|
39
|
+
suggestions: [
|
|
40
|
+
`Remove the <meta http-equiv> ${list} tag. The host already sends both headers for every game, default-open (platform#369).`,
|
|
41
|
+
'If you keep a stricter CSP on purpose, allow https://api.freegamestore.online in script-src and connect-src, or the platform analytics loader is blocked.',
|
|
42
|
+
],
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=no-page-policy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"no-page-policy.js","sourceRoot":"","sources":["../../src/checks/no-page-policy.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAGpD,MAAM,UAAU,GAAG,gBAAgB,CAAC;AACpC,MAAM,IAAI,GAAG,mBAAmB,CAAC;AAEjC;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,MAAkB;IACxD,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC1C,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACjB,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,uCAAuC,EAAE,CAAC;IACzF,CAAC;IACD,MAAM,IAAI,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACpC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,gDAAgD,CAAC,EAAE,CAAC;QAChF,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QACxC,IAAI,IAAI,KAAK,yBAAyB;YAAE,KAAK,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;QAC7E,IAAI,IAAI,KAAK,oBAAoB,IAAI,IAAI,KAAK,gBAAgB;YAAE,KAAK,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IAClG,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,sCAAsC,EAAE,CAAC;IACxF,CAAC;IACD,MAAM,IAAI,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACtC,OAAO;QACL,IAAI,EAAE,IAAI;QACV,MAAM,EAAE,MAAM;QACd,MAAM,EAAE,+BAA+B,IAAI,6EAA6E;QACxH,WAAW,EAAE;YACX,gCAAgC,IAAI,wFAAwF;YAC5H,2JAA2J;SAC5J;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"no-payment-capabilities.d.ts","sourceRoot":"","sources":["../../src/checks/no-payment-capabilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAGxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AA6D/C,wBAAsB,0BAA0B,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,CAsEzF"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { extOf } from '../lib/path.js';
|
|
2
|
+
import { stripCommentsAndStrings, stripCommentsOnly, stripHtmlComments } from '../lib/strip.js';
|
|
3
|
+
const NAME = 'No payment capabilities';
|
|
4
|
+
/**
|
|
5
|
+
* FreeGameStore games take NO payments (#376, owner decision 2026-10-20). The
|
|
6
|
+
* host already sends `Permissions-Policy: payment=()` on every game response,
|
|
7
|
+
* so the browser refuses these APIs anyway. This check fails the build so the
|
|
8
|
+
* creator learns at `fgs check` / CI time rather than from a broken game.
|
|
9
|
+
*
|
|
10
|
+
* Covers the browser's own payment capabilities. Provider SDKs, checkout
|
|
11
|
+
* endpoints and their dependencies are no-payment-sdk's job.
|
|
12
|
+
* - Payment Request API (`PaymentRequest`)
|
|
13
|
+
* - Payment Handler API (`paymentManager`, `PaymentRequestEvent`, the
|
|
14
|
+
* `paymentrequest` / `canmakepayment` service-worker events)
|
|
15
|
+
* - Apple Pay JS (`ApplePaySession`) and Google Pay JS (`pay.google.com`,
|
|
16
|
+
* `google.payments`)
|
|
17
|
+
* - delegating payment to an iframe (`allow="payment"`)
|
|
18
|
+
* - payment members in the web app manifest: `payment*`, and
|
|
19
|
+
* `serviceworker`, which Chrome uses only to install a payment handler
|
|
20
|
+
* - declaring `payment` in package.json `freegamestore.permissions`
|
|
21
|
+
*
|
|
22
|
+
* The plain word "payment" is fine: a loan calculator or a shop-themed game
|
|
23
|
+
* passes. So is a link to the creator's own donation page, which is not the
|
|
24
|
+
* game taking a payment.
|
|
25
|
+
*/
|
|
26
|
+
/** Identifiers, matched on code with comments AND strings stripped. */
|
|
27
|
+
const CODE_PATTERNS = [
|
|
28
|
+
['Payment Request API (PaymentRequest)', /\bPaymentRequest\b/],
|
|
29
|
+
['Payment Handler API (paymentManager)', /\bpaymentManager\b/],
|
|
30
|
+
['Payment Handler API (PaymentRequestEvent)', /\bPaymentRequestEvent\b/],
|
|
31
|
+
['Apple Pay (ApplePaySession)', /\bApplePaySession\b/],
|
|
32
|
+
['Google Pay (google.payments)', /\bgoogle\s*\.\s*payments\b/],
|
|
33
|
+
];
|
|
34
|
+
/** Event names and hosts live in strings: matched with comments stripped only. */
|
|
35
|
+
const STRING_PATTERNS = [
|
|
36
|
+
['payment handler event (paymentrequest)', /['"`]paymentrequest['"`]/],
|
|
37
|
+
['payment handler event (canmakepayment)', /['"`]canmakepayment['"`]/],
|
|
38
|
+
['Google Pay (pay.google.com)', /\bpay\.google\.com\b/],
|
|
39
|
+
['iframe payment delegation (allow="payment")', /\ballow\s*=\s*\{?\s*["'`][^"'`]*\bpayment\b/],
|
|
40
|
+
];
|
|
41
|
+
const CODE_EXTS = new Set(['.ts', '.tsx', '.js', '.jsx', '.mjs', '.cjs', '.html']);
|
|
42
|
+
const MANIFEST_KEY = /^(?:payment\w*|serviceworker)$/i;
|
|
43
|
+
function scanned(path) {
|
|
44
|
+
return path === 'web/index.html' || path.startsWith('web/src/');
|
|
45
|
+
}
|
|
46
|
+
function manifestProblems(json) {
|
|
47
|
+
try {
|
|
48
|
+
const manifest = JSON.parse(json);
|
|
49
|
+
if (!manifest || typeof manifest !== 'object' || Array.isArray(manifest))
|
|
50
|
+
return [];
|
|
51
|
+
return Object.keys(manifest).filter((k) => MANIFEST_KEY.test(k));
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
return [];
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
export async function checkNoPaymentCapabilities(source) {
|
|
58
|
+
const findings = [];
|
|
59
|
+
const note = (what, where) => findings.push(`${what} in ${where}`);
|
|
60
|
+
for await (const path of source.list()) {
|
|
61
|
+
const ext = extOf(path);
|
|
62
|
+
if (scanned(path) && CODE_EXTS.has(ext)) {
|
|
63
|
+
const raw = await source.read(path);
|
|
64
|
+
if (!raw)
|
|
65
|
+
continue;
|
|
66
|
+
const commentless = ext === '.html' ? stripHtmlComments(raw) : stripCommentsOnly(raw);
|
|
67
|
+
const codeOnly = ext === '.html' ? commentless : stripCommentsAndStrings(raw);
|
|
68
|
+
for (const [what, re] of CODE_PATTERNS)
|
|
69
|
+
if (re.test(codeOnly))
|
|
70
|
+
note(what, path);
|
|
71
|
+
for (const [what, re] of STRING_PATTERNS)
|
|
72
|
+
if (re.test(commentless))
|
|
73
|
+
note(what, path);
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
// Web app manifests: a static manifest.json or any .webmanifest.
|
|
77
|
+
if (path === 'web/public/manifest.json' || ext === '.webmanifest') {
|
|
78
|
+
const raw = await source.read(path);
|
|
79
|
+
for (const key of raw ? manifestProblems(raw) : [])
|
|
80
|
+
note(`manifest member "${key}"`, path);
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
// vite-plugin-pwa's inline manifest. Neither key is a VitePWA option, so a
|
|
84
|
+
// match in the config can only be a manifest member.
|
|
85
|
+
if (/^web\/vite\.config\.[cm]?[jt]s$/.test(path)) {
|
|
86
|
+
const raw = await source.read(path);
|
|
87
|
+
const text = raw ? stripCommentsOnly(raw) : '';
|
|
88
|
+
for (const m of text.matchAll(/(?:^|[\s,{])['"]?(payment\w*|serviceworker)['"]?\s*:/gi)) {
|
|
89
|
+
note(`manifest member "${m[1]}"`, path);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
// A declared payment permission (#370 declarations).
|
|
94
|
+
const pkg = await source.read('package.json');
|
|
95
|
+
if (pkg) {
|
|
96
|
+
try {
|
|
97
|
+
const permissions = JSON.parse(pkg)
|
|
98
|
+
.freegamestore?.permissions;
|
|
99
|
+
const ids = Array.isArray(permissions)
|
|
100
|
+
? permissions.map((p) => (typeof p === 'string' ? p : p?.id))
|
|
101
|
+
: permissions && typeof permissions === 'object'
|
|
102
|
+
? Object.keys(permissions)
|
|
103
|
+
: [];
|
|
104
|
+
if (ids.some((id) => typeof id === 'string' && id.trim().toLowerCase() === 'payment')) {
|
|
105
|
+
note('declared "payment" permission', 'package.json');
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
// permissions-declared reports an unreadable package.json.
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
if (findings.length === 0) {
|
|
113
|
+
return {
|
|
114
|
+
name: NAME,
|
|
115
|
+
status: 'pass',
|
|
116
|
+
detail: 'no payment APIs, delegation or manifest members',
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
return {
|
|
120
|
+
name: NAME,
|
|
121
|
+
status: 'fail',
|
|
122
|
+
detail: `${findings.length} payment capabilit${findings.length === 1 ? 'y' : 'ies'}: ${findings.slice(0, 4).join('; ')}${findings.length > 4 ? '; …' : ''}`,
|
|
123
|
+
suggestions: [
|
|
124
|
+
'FreeGameStore games are free and take no payments: the host blocks the Payment Request API (Permissions-Policy payment=()). Remove the payment code.',
|
|
125
|
+
'A link to your own donation or sponsor page is fine. Paid games belong on ProGameStore.',
|
|
126
|
+
],
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=no-payment-capabilities.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"no-payment-capabilities.js","sourceRoot":"","sources":["../../src/checks/no-payment-capabilities.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no-payment-sdk.d.ts","sourceRoot":"","sources":["../../src/checks/no-payment-sdk.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"no-payment-sdk.d.ts","sourceRoot":"","sources":["../../src/checks/no-payment-sdk.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAGxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAsE/C;;;;;;;;GAQG;AACH,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,CAqChF"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { extOf } from '../lib/path.js';
|
|
1
2
|
import { stripCommentsForExt } from '../lib/strip.js';
|
|
2
3
|
const PAYMENT_SDKS = [
|
|
3
4
|
{
|
|
@@ -101,9 +102,4 @@ export async function checkNoPaymentSdk(source) {
|
|
|
101
102
|
],
|
|
102
103
|
};
|
|
103
104
|
}
|
|
104
|
-
function extOf(path) {
|
|
105
|
-
const dot = path.lastIndexOf('.');
|
|
106
|
-
const slash = path.lastIndexOf('/');
|
|
107
|
-
return dot > slash ? path.slice(dot).toLowerCase() : '';
|
|
108
|
-
}
|
|
109
105
|
//# sourceMappingURL=no-payment-sdk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no-payment-sdk.js","sourceRoot":"","sources":["../../src/checks/no-payment-sdk.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"no-payment-sdk.js","sourceRoot":"","sources":["../../src/checks/no-payment-sdk.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no-placeholders.d.ts","sourceRoot":"","sources":["../../src/checks/no-placeholders.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"no-placeholders.d.ts","sourceRoot":"","sources":["../../src/checks/no-placeholders.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAExD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAoB/C;;;;;GAKG;AACH,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,CAsBlF"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { extOf } from '../lib/path.js';
|
|
1
2
|
const TEXT_EXTS = new Set([
|
|
2
3
|
'.md',
|
|
3
4
|
'.txt',
|
|
@@ -46,9 +47,4 @@ export async function checkNoPlaceholders(source) {
|
|
|
46
47
|
],
|
|
47
48
|
};
|
|
48
49
|
}
|
|
49
|
-
function extOf(path) {
|
|
50
|
-
const dot = path.lastIndexOf('.');
|
|
51
|
-
const slash = path.lastIndexOf('/');
|
|
52
|
-
return dot > slash ? path.slice(dot).toLowerCase() : '';
|
|
53
|
-
}
|
|
54
50
|
//# sourceMappingURL=no-placeholders.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no-placeholders.js","sourceRoot":"","sources":["../../src/checks/no-placeholders.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"no-placeholders.js","sourceRoot":"","sources":["../../src/checks/no-placeholders.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAGvC,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC;IACxB,KAAK;IACL,MAAM;IACN,OAAO;IACP,KAAK;IACL,MAAM;IACN,KAAK;IACL,MAAM;IACN,OAAO;IACP,MAAM;IACN,MAAM;IACN,OAAO;IACP,OAAO;IACP,MAAM;IACN,OAAO;IACP,MAAM;CACP,CAAC,CAAC;AAEH;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,MAAkB;IAC1D,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;QACvC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAAE,SAAS;QAC1C,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,OAAO,EAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YACjC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrB,IAAI,SAAS,CAAC,MAAM,IAAI,CAAC;gBAAE,MAAM,CAAC,wBAAwB;QAC5D,CAAC;IACH,CAAC;IACD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,IAAI,EAAE,0BAA0B,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,yBAAyB,EAAE,CAAC;IACjG,CAAC;IACD,OAAO;QACL,IAAI,EAAE,0BAA0B;QAChC,MAAM,EAAE,MAAM;QACd,MAAM,EAAE,GAAG,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,mCAAmC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QACpH,WAAW,EAAE;YACX,0FAA0F;YAC1F,mFAAmF;SACpF;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no-scroll.d.ts","sourceRoot":"","sources":["../../src/checks/no-scroll.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"no-scroll.d.ts","sourceRoot":"","sources":["../../src/checks/no-scroll.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAGxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,aAAa,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,CAuE5E"}
|
package/dist/checks/no-scroll.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { extOf } from '../lib/path.js';
|
|
1
2
|
import { isGameProject } from '../lib/project-type.js';
|
|
2
3
|
/**
|
|
3
4
|
* Games on FreeGameStore must fit the viewport — no horizontal or
|
|
@@ -94,11 +95,6 @@ const FORBIDDEN_OVERFLOW = [
|
|
|
94
95
|
];
|
|
95
96
|
const FORBIDDEN_MIN_HEIGHT = [/(?:^|[\s,{])(?:html|body)\s*\{[^}]*min-height\s*:\s*100vh/im];
|
|
96
97
|
const VIEWPORT_LOCK = /(?:height|max-height)\s*:\s*100(?:s?vh)|GameShell|@freegamestore\/games/i;
|
|
97
|
-
function extOf(path) {
|
|
98
|
-
const dot = path.lastIndexOf('.');
|
|
99
|
-
const slash = path.lastIndexOf('/');
|
|
100
|
-
return dot > slash ? path.slice(dot).toLowerCase() : '';
|
|
101
|
-
}
|
|
102
98
|
function lineNumberAt(content, index) {
|
|
103
99
|
let n = 1;
|
|
104
100
|
for (let i = 0; i < index; i++)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no-scroll.js","sourceRoot":"","sources":["../../src/checks/no-scroll.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"no-scroll.js","sourceRoot":"","sources":["../../src/checks/no-scroll.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no-tracking.d.ts","sourceRoot":"","sources":["../../src/checks/no-tracking.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"no-tracking.d.ts","sourceRoot":"","sources":["../../src/checks/no-tracking.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAGxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAwF/C,wBAAsB,eAAe,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,CA6C9E"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { extOf } from '../lib/path.js';
|
|
1
2
|
import { stripCommentsForExt } from '../lib/strip.js';
|
|
2
3
|
function wb(name) {
|
|
3
4
|
// word-boundary, case-insensitive: only matches the literal token surrounded
|
|
@@ -41,6 +42,23 @@ const TRACKERS = [
|
|
|
41
42
|
{ name: 'hotjar', patterns: [wb('hotjar')] },
|
|
42
43
|
{ name: 'plausible', patterns: [wb('plausible')] },
|
|
43
44
|
{ name: 'posthog', patterns: [wb('posthog')] },
|
|
45
|
+
// Cloudflare Web Analytics installed by hand. The platform loader injects the
|
|
46
|
+
// beacon itself with the game's own token, so a direct copy skips the policy.
|
|
47
|
+
// no-external-scripts blocks its host too; this check names the problem.
|
|
48
|
+
{
|
|
49
|
+
name: 'cloudflare-web-analytics',
|
|
50
|
+
patterns: [
|
|
51
|
+
/static\.cloudflareinsights\.com/i,
|
|
52
|
+
/cloudflareinsights\.com\/beacon/i,
|
|
53
|
+
/data-cf-beacon/i,
|
|
54
|
+
],
|
|
55
|
+
},
|
|
56
|
+
{ name: 'matomo', patterns: [wb('matomo')] },
|
|
57
|
+
{ name: 'umami', patterns: [wb('umami')] },
|
|
58
|
+
{ name: 'fullstory', patterns: [/fullstory\.com/i] },
|
|
59
|
+
{ name: 'logrocket', patterns: [/logrocket\.com/i] },
|
|
60
|
+
{ name: 'heap', patterns: [/heapanalytics\.com/i] },
|
|
61
|
+
{ name: 'microsoft-clarity', patterns: [/clarity\.ms/i] },
|
|
44
62
|
];
|
|
45
63
|
const SCAN_EXTS = new Set(['.ts', '.tsx', '.js', '.jsx', '.html', '.json']);
|
|
46
64
|
function escapeForRegExp(s) {
|
|
@@ -92,13 +110,8 @@ export async function checkNoTracking(source) {
|
|
|
92
110
|
.join('; ')}${hits.length > 3 ? '…' : ''}`,
|
|
93
111
|
suggestions: [
|
|
94
112
|
'Remove the direct SDK and reference the platform loader instead: <script src="https://api.freegamestore.online/v1/analytics.js?app=<id>" defer></script>.',
|
|
95
|
-
'Configure
|
|
113
|
+
'Configure GA4 or Plausible in the Analytics panel for the game in the Studio (PUT https://console.freegamestore.online/api/analytics/<id>). The loader emits the right tags, so policy can change without redeploying every game.',
|
|
96
114
|
],
|
|
97
115
|
};
|
|
98
116
|
}
|
|
99
|
-
function extOf(path) {
|
|
100
|
-
const dot = path.lastIndexOf('.');
|
|
101
|
-
const slash = path.lastIndexOf('/');
|
|
102
|
-
return dot > slash ? path.slice(dot).toLowerCase() : '';
|
|
103
|
-
}
|
|
104
117
|
//# sourceMappingURL=no-tracking.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no-tracking.js","sourceRoot":"","sources":["../../src/checks/no-tracking.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AActD,SAAS,EAAE,CAAC,IAAY;IACtB,6EAA6E;IAC7E,oFAAoF;IACpF,OAAO,IAAI,MAAM,CAAC,sBAAsB,eAAe,CAAC,IAAI,CAAC,qBAAqB,EAAE,GAAG,CAAC,CAAC;AAC3F,CAAC;AAED,MAAM,QAAQ,GAAkB;IAC9B,EAAE,IAAI,EAAE,kBAAkB,EAAE,QAAQ,EAAE,CAAC,mBAAmB,EAAE,wBAAwB,CAAC,EAAE;IACvF,8EAA8E;IAC9E,wEAAwE;IACxE,sEAAsE;IACtE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,qBAAqB,EAAE,iBAAiB,EAAE,WAAW,CAAC,EAAE;IACnF,6EAA6E;IAC7E,6EAA6E;IAC7E,WAAW;IACX;QACE,IAAI,EAAE,WAAW;QACjB,QAAQ,EAAE;YACR,eAAe;YACf,iBAAiB;YACjB,qEAAqE;YACrE,yBAAyB;YACzB,uBAAuB;SACxB;KACF;IACD,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE;IAChD,6EAA6E;IAC7E,8EAA8E;IAC9E,WAAW;IACX;QACE,IAAI,EAAE,SAAS;QACf,QAAQ,EAAE;YACR,aAAa;YACb,cAAc;YACd,0BAA0B;YAC1B,oBAAoB;YACpB,2DAA2D;YAC3D,6BAA6B;SAC9B;KACF;IACD,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE;IAC5C,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE;IAClD,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE;
|
|
1
|
+
{"version":3,"file":"no-tracking.js","sourceRoot":"","sources":["../../src/checks/no-tracking.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { FileSource } from '../lib/file-source.js';
|
|
2
|
+
import type { CheckResult } from '../types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Every browser permission the game's code uses should be declared, with a
|
|
5
|
+
* one-line reason, in package.json under `freegamestore.permissions` (#370).
|
|
6
|
+
* The storefront shows them on the listing so the browser's prompt is no
|
|
7
|
+
* surprise to the player.
|
|
8
|
+
*
|
|
9
|
+
* WARN level: the listing shows detected permissions even when undeclared, so
|
|
10
|
+
* nothing is hidden from players; declaring adds the reason.
|
|
11
|
+
*/
|
|
12
|
+
export declare function checkPermissionsDeclared(source: FileSource): Promise<CheckResult>;
|
|
13
|
+
//# sourceMappingURL=permissions-declared.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permissions-declared.d.ts","sourceRoot":"","sources":["../../src/checks/permissions-declared.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAExD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAI/C;;;;;;;;GAQG;AACH,wBAAsB,wBAAwB,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,CAwBvF"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { detectPermissions, PERMISSIONS, parseDeclaredPermissions } from '../lib/permissions.js';
|
|
2
|
+
const NAME = 'Permissions declared';
|
|
3
|
+
/**
|
|
4
|
+
* Every browser permission the game's code uses should be declared, with a
|
|
5
|
+
* one-line reason, in package.json under `freegamestore.permissions` (#370).
|
|
6
|
+
* The storefront shows them on the listing so the browser's prompt is no
|
|
7
|
+
* surprise to the player.
|
|
8
|
+
*
|
|
9
|
+
* WARN level: the listing shows detected permissions even when undeclared, so
|
|
10
|
+
* nothing is hidden from players; declaring adds the reason.
|
|
11
|
+
*/
|
|
12
|
+
export async function checkPermissionsDeclared(source) {
|
|
13
|
+
const detected = await detectPermissions(source);
|
|
14
|
+
const { declared, unknown, error } = parseDeclaredPermissions(await source.read('package.json'));
|
|
15
|
+
if (error) {
|
|
16
|
+
return { name: NAME, status: 'warn', detail: error, suggestions: [example()] };
|
|
17
|
+
}
|
|
18
|
+
const undeclared = detected.filter((id) => !(id in declared));
|
|
19
|
+
const problems = [];
|
|
20
|
+
if (undeclared.length)
|
|
21
|
+
problems.push(`used but not declared: ${undeclared.join(', ')}`);
|
|
22
|
+
if (unknown.length)
|
|
23
|
+
problems.push(`unknown permission id(s): ${unknown.join(', ')}`);
|
|
24
|
+
if (problems.length) {
|
|
25
|
+
return {
|
|
26
|
+
name: NAME,
|
|
27
|
+
status: 'warn',
|
|
28
|
+
detail: problems.join('; '),
|
|
29
|
+
suggestions: [example(undeclared), `Known ids: ${PERMISSIONS.map((p) => p.id).join(', ')}.`],
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
const all = Object.keys(declared);
|
|
33
|
+
return {
|
|
34
|
+
name: NAME,
|
|
35
|
+
status: 'pass',
|
|
36
|
+
detail: all.length ? `declared: ${all.join(', ')}` : 'no special permissions used',
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
function example(ids = ['motion']) {
|
|
40
|
+
const body = ids.map((id) => `"${id}": "<why the game needs it>"`).join(', ');
|
|
41
|
+
return `Declare them in package.json: "freegamestore": { "permissions": { ${body} } }`;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=permissions-declared.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permissions-declared.js","sourceRoot":"","sources":["../../src/checks/permissions-declared.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAGjG,MAAM,IAAI,GAAG,sBAAsB,CAAC;AAEpC;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,MAAkB;IAC/D,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,MAAM,CAAC,CAAC;IACjD,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,wBAAwB,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;IACjG,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;IACjF,CAAC;IACD,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,QAAQ,CAAC,CAAC,CAAC;IAC9D,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IAAI,UAAU,CAAC,MAAM;QAAE,QAAQ,CAAC,IAAI,CAAC,0BAA0B,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACxF,IAAI,OAAO,CAAC,MAAM;QAAE,QAAQ,CAAC,IAAI,CAAC,6BAA6B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACrF,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;QACpB,OAAO;YACL,IAAI,EAAE,IAAI;YACV,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;YAC3B,WAAW,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,cAAc,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;SAC7F,CAAC;IACJ,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAClC,OAAO;QACL,IAAI,EAAE,IAAI;QACV,MAAM,EAAE,MAAM;QACd,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,6BAA6B;KACnF,CAAC;AACJ,CAAC;AAED,SAAS,OAAO,CAAC,MAAgB,CAAC,QAAQ,CAAC;IACzC,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,8BAA8B,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9E,OAAO,qEAAqE,IAAI,MAAM,CAAC;AACzF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pwa-offline.d.ts","sourceRoot":"","sources":["../../src/checks/pwa-offline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAExD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAM/C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,wBAAsB,eAAe,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"pwa-offline.d.ts","sourceRoot":"","sources":["../../src/checks/pwa-offline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAExD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAM/C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,wBAAsB,eAAe,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,CAsN9E"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { stripCommentsAndStrings, stripHtmlComments } from '../lib/strip.js';
|
|
1
|
+
import { stripCommentsAndStrings, stripCommentsOnly, stripHtmlComments } from '../lib/strip.js';
|
|
2
2
|
const VITE_CONFIG = 'web/vite.config.ts';
|
|
3
3
|
const INDEX_HTML = 'web/index.html';
|
|
4
4
|
const PUBLIC_DIR = 'web/public';
|
|
@@ -59,12 +59,18 @@ export async function checkPwaOffline(source) {
|
|
|
59
59
|
// inapplicable. Trust the dev's manual SW. (Matched against `config`
|
|
60
60
|
// — not `configCode` — because the string-stripping would erase
|
|
61
61
|
// `"injectManifest"` from the latter.)
|
|
62
|
-
|
|
62
|
+
// Comments ARE stripped (strings kept): a commented-out
|
|
63
|
+
// `// strategies: 'injectManifest'` is not a live setting (#94).
|
|
64
|
+
const usesInjectManifest = config !== null && /strategies\s*:\s*["']injectManifest["']/.test(stripCommentsOnly(config));
|
|
63
65
|
// Hand-rolled SW registration (e.g. an inline <script> calling
|
|
64
66
|
// navigator.serviceWorker.register) is a legitimate alternative to
|
|
65
67
|
// vite-plugin-pwa. If it exists, we trust the dev to manage their own
|
|
66
68
|
// precache and limit ourselves to the install-claim check.
|
|
67
|
-
|
|
69
|
+
// Matched against comment-stripped code only (#94): a commented-out
|
|
70
|
+
// `// navigator.serviceWorker.register('/sw.js')` — in an HTML comment, or a
|
|
71
|
+
// JS comment in an inline <script> or entry file — registers nothing, so it
|
|
72
|
+
// must not satisfy the installable-PWA mandate.
|
|
73
|
+
const hasManualSw = (htmlCode !== null && /serviceWorker\.register/.test(stripCommentsOnly(htmlCode))) ||
|
|
68
74
|
(await sourceHasSwRegistration(source));
|
|
69
75
|
const hasServiceWorker = hasVitePwa || hasManualSw;
|
|
70
76
|
// Platform mandate (freegamestore.online): every game must be an
|
|
@@ -359,7 +365,7 @@ async function sourceHasSwRegistration(source) {
|
|
|
359
365
|
];
|
|
360
366
|
for (const p of candidates) {
|
|
361
367
|
const text = await source.read(p);
|
|
362
|
-
if (text !== null && /serviceWorker\.register/.test(text))
|
|
368
|
+
if (text !== null && /serviceWorker\.register/.test(stripCommentsOnly(text)))
|
|
363
369
|
return true;
|
|
364
370
|
}
|
|
365
371
|
return false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pwa-offline.js","sourceRoot":"","sources":["../../src/checks/pwa-offline.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"pwa-offline.js","sourceRoot":"","sources":["../../src/checks/pwa-offline.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { FileSource } from '../lib/file-source.js';
|
|
2
|
+
import type { CheckResult } from '../types.js';
|
|
3
|
+
/** Warning only: the shared host supplies approved metadata at runtime. */
|
|
4
|
+
export declare function checkSeoMetadata(source: FileSource): Promise<CheckResult>;
|
|
5
|
+
//# sourceMappingURL=seo-metadata.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seo-metadata.d.ts","sourceRoot":"","sources":["../../src/checks/seo-metadata.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAExD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,2EAA2E;AAC3E,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,CAmB/E"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { stripHtmlComments } from '../lib/strip.js';
|
|
2
|
+
/** Warning only: the shared host supplies approved metadata at runtime. */
|
|
3
|
+
export async function checkSeoMetadata(source) {
|
|
4
|
+
const raw = await source.read('web/index.html');
|
|
5
|
+
if (raw === null)
|
|
6
|
+
return { name: 'SEO metadata', status: 'pass', detail: 'no web/index.html' };
|
|
7
|
+
const html = stripHtmlComments(raw);
|
|
8
|
+
const missing = ['description', 'twitter:card', 'twitter:title', 'twitter:description'].filter((name) => !new RegExp(`<meta\\b[^>]*\\bname\\s*=\\s*["']${name}["'][^>]*>`, 'i').test(html));
|
|
9
|
+
for (const name of ['og:title', 'og:description', 'og:url', 'og:type', 'og:site_name']) {
|
|
10
|
+
if (!new RegExp(`<meta\\b[^>]*\\bproperty\\s*=\\s*["']${name}["'][^>]*>`, 'i').test(html))
|
|
11
|
+
missing.push(name);
|
|
12
|
+
}
|
|
13
|
+
if (!/<link\b[^>]*\brel\s*=\s*["']canonical["'][^>]*>/i.test(html))
|
|
14
|
+
missing.push('canonical');
|
|
15
|
+
return {
|
|
16
|
+
name: 'SEO metadata',
|
|
17
|
+
status: missing.length ? 'warn' : 'pass',
|
|
18
|
+
detail: missing.length
|
|
19
|
+
? `Missing source defaults: ${missing.join(', ')}. The shared host supplies approved public-game metadata; keep the template defaults for other hosting.`
|
|
20
|
+
: 'Canonical, description and social metadata defaults present',
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=seo-metadata.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seo-metadata.js","sourceRoot":"","sources":["../../src/checks/seo-metadata.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAGpD,2EAA2E;AAC3E,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,MAAkB;IACvD,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAChD,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAAC;IAC/F,MAAM,IAAI,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACpC,MAAM,OAAO,GAAG,CAAC,aAAa,EAAE,cAAc,EAAE,eAAe,EAAE,qBAAqB,CAAC,CAAC,MAAM,CAC5F,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,oCAAoC,IAAI,YAAY,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAC5F,CAAC;IACF,KAAK,MAAM,IAAI,IAAI,CAAC,UAAU,EAAE,gBAAgB,EAAE,QAAQ,EAAE,SAAS,EAAE,cAAc,CAAC,EAAE,CAAC;QACvF,IAAI,CAAC,IAAI,MAAM,CAAC,wCAAwC,IAAI,YAAY,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YACvF,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC;IACD,IAAI,CAAC,kDAAkD,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC9F,OAAO;QACL,IAAI,EAAE,cAAc;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;QACxC,MAAM,EAAE,OAAO,CAAC,MAAM;YACpB,CAAC,CAAC,4BAA4B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,yGAAyG;YACzJ,CAAC,CAAC,6DAA6D;KAClE,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unsafe-vh.d.ts","sourceRoot":"","sources":["../../src/checks/unsafe-vh.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"unsafe-vh.d.ts","sourceRoot":"","sources":["../../src/checks/unsafe-vh.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAGxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,aAAa,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,CAoD5E"}
|
package/dist/checks/unsafe-vh.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { extOf } from '../lib/path.js';
|
|
1
2
|
import { stripCommentsForExt } from '../lib/strip.js';
|
|
2
3
|
/**
|
|
3
4
|
* Flag `100vh` (and Tailwind shortcuts that compile to it) in source.
|
|
@@ -91,11 +92,6 @@ const PATTERNS = [
|
|
|
91
92
|
{ re: /(?<![\w-])min-h-screen(?![\w-])/g, label: 'min-h-screen (Tailwind: → min-height: 100vh)' },
|
|
92
93
|
{ re: /(?<![\w-])max-h-screen(?![\w-])/g, label: 'max-h-screen (Tailwind: → max-height: 100vh)' },
|
|
93
94
|
];
|
|
94
|
-
function extOf(path) {
|
|
95
|
-
const dot = path.lastIndexOf('.');
|
|
96
|
-
const slash = path.lastIndexOf('/');
|
|
97
|
-
return dot > slash ? path.slice(dot).toLowerCase() : '';
|
|
98
|
-
}
|
|
99
95
|
function lineNumberAt(content, index) {
|
|
100
96
|
let n = 1;
|
|
101
97
|
for (let i = 0; i < index; i++)
|