@extenshi/cli 0.14.1 → 0.15.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/cli.js +5 -1
- package/dist/cli.js.map +1 -1
- package/dist/compliance-review.d.ts +49 -1
- package/dist/compliance-review.d.ts.map +1 -1
- package/dist/compliance-review.js +100 -17
- package/dist/compliance-review.js.map +1 -1
- package/dist/cws-policies.d.ts.map +1 -1
- package/dist/cws-policies.js +5 -0
- package/dist/cws-policies.js.map +1 -1
- package/dist/html-report.d.ts.map +1 -1
- package/dist/html-report.js +52 -1
- package/dist/html-report.js.map +1 -1
- package/dist/listing.d.ts +50 -5
- package/dist/listing.d.ts.map +1 -1
- package/dist/listing.js +124 -5
- package/dist/listing.js.map +1 -1
- package/dist/render.d.ts +35 -0
- package/dist/render.d.ts.map +1 -1
- package/dist/render.js +99 -0
- package/dist/render.js.map +1 -1
- package/dist/report.d.ts.map +1 -1
- package/dist/report.js +47 -1
- package/dist/report.js.map +1 -1
- package/dist/review-catalog.d.ts +41 -1
- package/dist/review-catalog.d.ts.map +1 -1
- package/dist/review-catalog.js +95 -3
- package/dist/review-catalog.js.map +1 -1
- package/dist/review-checks.d.ts +30 -0
- package/dist/review-checks.d.ts.map +1 -1
- package/dist/review-checks.js +158 -0
- package/dist/review-checks.js.map +1 -1
- package/dist/review-risk.d.ts.map +1 -1
- package/dist/review-risk.js +21 -58
- package/dist/review-risk.js.map +1 -1
- package/dist/scan.d.ts +10 -2
- package/dist/scan.d.ts.map +1 -1
- package/dist/scan.js +32 -11
- package/dist/scan.js.map +1 -1
- package/dist/telemetry.d.ts +9 -1
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +20 -2
- package/dist/telemetry.js.map +1 -1
- package/package.json +1 -1
package/dist/report.js
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* the published CLI does not need to vendor the rule registry. When the server
|
|
8
8
|
* has not been updated to emit `compliance` yet, the report degrades to a note.
|
|
9
9
|
*/
|
|
10
|
-
import { OUTCOME_LABEL, STORE_IMPACT_SHORT, summarizeCompliance, summarizeComplianceReview, summarizePermissionUsage, summarizeReport, } from './render.js';
|
|
10
|
+
import { LISTING_COVERAGE_CAVEAT, OUTCOME_LABEL, STORE_IMPACT_SHORT, summarizeCompliance, summarizeComplianceReview, summarizeListing, summarizePermissionUsage, summarizeReport, } from './render.js';
|
|
11
11
|
/** Escape characters that would break a markdown table cell. */
|
|
12
12
|
function cell(s) {
|
|
13
13
|
return s.replace(/\|/g, '\\|').replace(/\r?\n/g, ' ').trim();
|
|
@@ -205,6 +205,49 @@ function renderReviewRiskSection(r) {
|
|
|
205
205
|
out.push(`_${r.diffNote}_`, '');
|
|
206
206
|
return out;
|
|
207
207
|
}
|
|
208
|
+
/**
|
|
209
|
+
* The store-listing section.
|
|
210
|
+
*
|
|
211
|
+
* Separate from the review-risk section because the two read different things:
|
|
212
|
+
* these rules see only the text the package carries, in every locale it ships,
|
|
213
|
+
* and never the full dashboard description. The coverage line is printed on a
|
|
214
|
+
* CLEAN result too — that is exactly when a developer would otherwise conclude
|
|
215
|
+
* their whole listing was cleared.
|
|
216
|
+
*/
|
|
217
|
+
function renderListingSection(l) {
|
|
218
|
+
const out = ['## Store listing', ''];
|
|
219
|
+
if (!l.available) {
|
|
220
|
+
out.push(`_${l.reason || 'The store listing was not checked.'}_`, '');
|
|
221
|
+
return out;
|
|
222
|
+
}
|
|
223
|
+
const where = l.locales.length
|
|
224
|
+
? `Read ${l.locales.length} locale(s): ${l.locales.map((x) => `\`${x}\``).join(', ')}.`
|
|
225
|
+
: 'No locale carried listing text.';
|
|
226
|
+
const version = l.rulesVersion ? ` Listing rules v${l.rulesVersion}.` : '';
|
|
227
|
+
out.push(`${where}${version}`, '');
|
|
228
|
+
if (l.findings.length === 0) {
|
|
229
|
+
out.push('_Nothing to flag in the listing text we could read._', '');
|
|
230
|
+
out.push(`_${LISTING_COVERAGE_CAVEAT}_`, '');
|
|
231
|
+
return out;
|
|
232
|
+
}
|
|
233
|
+
out.push(`**${l.findings.length} listing item${l.findings.length === 1 ? '' : 's'} to review**`, '');
|
|
234
|
+
for (const f of l.findings) {
|
|
235
|
+
out.push(`#### ${f.title}`);
|
|
236
|
+
if (f.detail)
|
|
237
|
+
out.push('', f.detail);
|
|
238
|
+
if (f.evidence)
|
|
239
|
+
out.push('', `**Found:** \`${f.evidence}\``);
|
|
240
|
+
if (f.recommendation)
|
|
241
|
+
out.push('', `**How to fix:** ${f.recommendation}`);
|
|
242
|
+
if (f.policyTitle)
|
|
243
|
+
out.push('', `**Policy:** [${f.policyTitle}](${f.policyUrl})`);
|
|
244
|
+
else if (f.citation)
|
|
245
|
+
out.push('', `_${f.citation}_`);
|
|
246
|
+
out.push('');
|
|
247
|
+
}
|
|
248
|
+
out.push(`_${LISTING_COVERAGE_CAVEAT}_`, '');
|
|
249
|
+
return out;
|
|
250
|
+
}
|
|
208
251
|
function renderSecuritySection(summary) {
|
|
209
252
|
const out = ['## Security findings', ''];
|
|
210
253
|
if (summary.findings.length === 0) {
|
|
@@ -251,6 +294,9 @@ export function renderMarkdownReport(body, meta) {
|
|
|
251
294
|
const reviewRisk = summarizeComplianceReview(body);
|
|
252
295
|
if (reviewRisk.present)
|
|
253
296
|
lines.push(...renderReviewRiskSection(reviewRisk));
|
|
297
|
+
const listing = summarizeListing(body);
|
|
298
|
+
if (listing.present)
|
|
299
|
+
lines.push(...renderListingSection(listing));
|
|
254
300
|
lines.push(...renderSecuritySection(summary));
|
|
255
301
|
lines.push('## Scanner status', '');
|
|
256
302
|
lines.push(`${summary.scannersOk}/${summary.scannersRun} scanners succeeded.`, '');
|
package/dist/report.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"report.js","sourceRoot":"","sources":["../src/report.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"report.js","sourceRoot":"","sources":["../src/report.ts"],"names":[],"mappings":"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"}
|
package/dist/review-catalog.d.ts
CHANGED
|
@@ -5,7 +5,13 @@
|
|
|
5
5
|
* whether *this* update adds an auto-disabling permission versus what's live.
|
|
6
6
|
*
|
|
7
7
|
* Talks to the public BFF tRPC gateway:
|
|
8
|
-
* GET {bffUrl}/api/trpc/
|
|
8
|
+
* GET {bffUrl}/api/trpc/catalog.getLatestPublishedManifest?input=<json>
|
|
9
|
+
*
|
|
10
|
+
* The namespace is `catalog`, NOT `store`: the BFF mounts its `storeRouter`
|
|
11
|
+
* under the `catalog` key (routers/index.ts). Getting this wrong does not fail
|
|
12
|
+
* loudly — tRPC answers "No procedure found" with HTTP 404, which this module
|
|
13
|
+
* reports as "the deployed catalog API predates this feature", i.e. exactly the
|
|
14
|
+
* message that makes a permanently-broken path look like a pending rollout.
|
|
9
15
|
*
|
|
10
16
|
* The BFF read path may be gated behind a developer API key, so we send the
|
|
11
17
|
* `ek_` key when the caller has one. Everything here is fail-soft: any problem
|
|
@@ -40,4 +46,38 @@ export interface FetchPriorManifestOptions {
|
|
|
40
46
|
store?: 'CHROME' | 'FIREFOX' | 'EDGE';
|
|
41
47
|
}
|
|
42
48
|
export declare function fetchPriorManifest(opts: FetchPriorManifestOptions): Promise<PriorManifestResult>;
|
|
49
|
+
/** The published listing text, or null with a reason when it could not be had. */
|
|
50
|
+
export interface CatalogListingResult {
|
|
51
|
+
/** Null when unavailable — `reason` says why. */
|
|
52
|
+
listing: {
|
|
53
|
+
name?: string;
|
|
54
|
+
shortDescription?: string;
|
|
55
|
+
description?: string;
|
|
56
|
+
} | null;
|
|
57
|
+
reason?: string;
|
|
58
|
+
meta?: {
|
|
59
|
+
store?: string;
|
|
60
|
+
version?: string;
|
|
61
|
+
fetchedAt?: string;
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Fetch the PUBLISHED store listing for an extension.
|
|
66
|
+
*
|
|
67
|
+
* This exists for one field: the full description. It lives in the developer
|
|
68
|
+
* dashboard and never in the packaged artifact, so without it the listing rules
|
|
69
|
+
* can only read the name and short description a package happens to carry — and
|
|
70
|
+
* the full description is where keyword spam overwhelmingly lives.
|
|
71
|
+
*
|
|
72
|
+
* What comes back is what is LIVE in the store, not what the caller is about to
|
|
73
|
+
* publish. Callers must treat it as filling gaps, never as overriding the text
|
|
74
|
+
* in the artifact or in `--listing`, and must say so in the report — otherwise a
|
|
75
|
+
* developer rewriting their description gets findings against the old copy.
|
|
76
|
+
*
|
|
77
|
+
* Fail-soft on every path, exactly like `fetchPriorManifest`: a gated read, an
|
|
78
|
+
* unknown extension, a catalog older than this CLI or a flaky network all
|
|
79
|
+
* resolve to `{ listing: null, reason }` so the listing rules still run over the
|
|
80
|
+
* package text.
|
|
81
|
+
*/
|
|
82
|
+
export declare function fetchCatalogListing(opts: FetchPriorManifestOptions): Promise<CatalogListingResult>;
|
|
43
83
|
//# sourceMappingURL=review-catalog.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"review-catalog.d.ts","sourceRoot":"","sources":["../src/review-catalog.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"review-catalog.d.ts","sourceRoot":"","sources":["../src/review-catalog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAMH,MAAM,WAAW,mBAAmB;IACnC,iFAAiF;IACjF,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAA;IACxC,uEAAuE;IACvE,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,qCAAqC;IACrC,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAC/D;AAED,MAAM,WAAW,yBAAyB;IACzC,sEAAsE;IACtE,MAAM,EAAE,MAAM,CAAA;IACd,oCAAoC;IACpC,WAAW,EAAE,MAAM,CAAA;IACnB,uEAAuE;IACvE,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;;;OAIG;IACH,KAAK,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAA;CACrC;AAED,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,yBAAyB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAiFtG;AAED,kFAAkF;AAClF,MAAM,WAAW,oBAAoB;IACpC,iDAAiD;IACjD,OAAO,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;IAClF,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAC/D;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,yBAAyB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAoFxG"}
|
package/dist/review-catalog.js
CHANGED
|
@@ -5,7 +5,13 @@
|
|
|
5
5
|
* whether *this* update adds an auto-disabling permission versus what's live.
|
|
6
6
|
*
|
|
7
7
|
* Talks to the public BFF tRPC gateway:
|
|
8
|
-
* GET {bffUrl}/api/trpc/
|
|
8
|
+
* GET {bffUrl}/api/trpc/catalog.getLatestPublishedManifest?input=<json>
|
|
9
|
+
*
|
|
10
|
+
* The namespace is `catalog`, NOT `store`: the BFF mounts its `storeRouter`
|
|
11
|
+
* under the `catalog` key (routers/index.ts). Getting this wrong does not fail
|
|
12
|
+
* loudly — tRPC answers "No procedure found" with HTTP 404, which this module
|
|
13
|
+
* reports as "the deployed catalog API predates this feature", i.e. exactly the
|
|
14
|
+
* message that makes a permanently-broken path look like a pending rollout.
|
|
9
15
|
*
|
|
10
16
|
* The BFF read path may be gated behind a developer API key, so we send the
|
|
11
17
|
* `ek_` key when the caller has one. Everything here is fail-soft: any problem
|
|
@@ -25,7 +31,7 @@ export async function fetchPriorManifest(opts) {
|
|
|
25
31
|
}
|
|
26
32
|
const query = opts.store ? { extensionId: id, store: opts.store } : { extensionId: id };
|
|
27
33
|
const input = encodeURIComponent(JSON.stringify(query));
|
|
28
|
-
const url = `${opts.bffUrl}/api/trpc/
|
|
34
|
+
const url = `${opts.bffUrl}/api/trpc/catalog.getLatestPublishedManifest?input=${input}`;
|
|
29
35
|
let res;
|
|
30
36
|
try {
|
|
31
37
|
res = await fetch(url, {
|
|
@@ -47,7 +53,7 @@ export async function fetchPriorManifest(opts) {
|
|
|
47
53
|
if (res.status === 404) {
|
|
48
54
|
return {
|
|
49
55
|
manifest: null,
|
|
50
|
-
reason: 'the
|
|
56
|
+
reason: 'the catalog has no getLatestPublishedManifest endpoint (HTTP 404) — update this CLI, and if it persists the BFF route has moved',
|
|
51
57
|
};
|
|
52
58
|
}
|
|
53
59
|
if (!res.ok) {
|
|
@@ -79,4 +85,90 @@ export async function fetchPriorManifest(opts) {
|
|
|
79
85
|
meta: { store: data.store, version: data.version, fetchedAt: data.fetchedAt },
|
|
80
86
|
};
|
|
81
87
|
}
|
|
88
|
+
/**
|
|
89
|
+
* Fetch the PUBLISHED store listing for an extension.
|
|
90
|
+
*
|
|
91
|
+
* This exists for one field: the full description. It lives in the developer
|
|
92
|
+
* dashboard and never in the packaged artifact, so without it the listing rules
|
|
93
|
+
* can only read the name and short description a package happens to carry — and
|
|
94
|
+
* the full description is where keyword spam overwhelmingly lives.
|
|
95
|
+
*
|
|
96
|
+
* What comes back is what is LIVE in the store, not what the caller is about to
|
|
97
|
+
* publish. Callers must treat it as filling gaps, never as overriding the text
|
|
98
|
+
* in the artifact or in `--listing`, and must say so in the report — otherwise a
|
|
99
|
+
* developer rewriting their description gets findings against the old copy.
|
|
100
|
+
*
|
|
101
|
+
* Fail-soft on every path, exactly like `fetchPriorManifest`: a gated read, an
|
|
102
|
+
* unknown extension, a catalog older than this CLI or a flaky network all
|
|
103
|
+
* resolve to `{ listing: null, reason }` so the listing rules still run over the
|
|
104
|
+
* package text.
|
|
105
|
+
*/
|
|
106
|
+
export async function fetchCatalogListing(opts) {
|
|
107
|
+
const id = Number(opts.extensionId);
|
|
108
|
+
if (!Number.isInteger(id) || id <= 0) {
|
|
109
|
+
return {
|
|
110
|
+
listing: null,
|
|
111
|
+
reason: `invalid --extension-id "${opts.extensionId}" (expected a positive number)`,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
const query = opts.store ? { extensionId: id, store: opts.store } : { extensionId: id };
|
|
115
|
+
const input = encodeURIComponent(JSON.stringify(query));
|
|
116
|
+
const url = `${opts.bffUrl}/api/trpc/catalog.getLatestListing?input=${input}`;
|
|
117
|
+
let res;
|
|
118
|
+
try {
|
|
119
|
+
res = await fetch(url, {
|
|
120
|
+
headers: opts.apiKey ? { authorization: `Bearer ${opts.apiKey}` } : {},
|
|
121
|
+
signal: AbortSignal.timeout(FETCH_TIMEOUT_MS),
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
catch (err) {
|
|
125
|
+
const e = err;
|
|
126
|
+
const why = e.name === 'TimeoutError' ? `timed out after ${FETCH_TIMEOUT_MS / 1000}s` : e.message;
|
|
127
|
+
return { listing: null, reason: `could not reach the catalog (${why})` };
|
|
128
|
+
}
|
|
129
|
+
if (res.status === 401) {
|
|
130
|
+
return {
|
|
131
|
+
listing: null,
|
|
132
|
+
reason: 'the catalog listing read is gated — set EXTENSHI_API_KEY (run `extenshi login`) to enable it',
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
if (res.status === 404) {
|
|
136
|
+
return {
|
|
137
|
+
listing: null,
|
|
138
|
+
reason: 'the catalog has no getLatestListing endpoint (HTTP 404) — update this CLI, and if it persists the BFF route has moved',
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
if (!res.ok)
|
|
142
|
+
return { listing: null, reason: `catalog returned HTTP ${res.status}` };
|
|
143
|
+
let body;
|
|
144
|
+
try {
|
|
145
|
+
body = await res.json();
|
|
146
|
+
}
|
|
147
|
+
catch {
|
|
148
|
+
return { listing: null, reason: 'catalog returned a non-JSON response' };
|
|
149
|
+
}
|
|
150
|
+
const error = body.error;
|
|
151
|
+
if (error)
|
|
152
|
+
return { listing: null, reason: `catalog error: ${error.message ?? 'unknown'}` };
|
|
153
|
+
const data = body.result?.data;
|
|
154
|
+
if (!data || data.found !== true) {
|
|
155
|
+
const reason = data?.reason === 'no_snapshot'
|
|
156
|
+
? 'this extension has no catalog snapshot yet'
|
|
157
|
+
: data?.reason === 'no_listing_text'
|
|
158
|
+
? 'the catalog snapshot carries no listing text'
|
|
159
|
+
: 'the catalog returned no listing for this extension';
|
|
160
|
+
return { listing: null, reason };
|
|
161
|
+
}
|
|
162
|
+
// Trims as well as rejecting blanks, so the name says what it does: a
|
|
163
|
+
// whitespace-only column is the catalog's way of storing "empty".
|
|
164
|
+
const trimmed = (v) => v?.trim() || undefined;
|
|
165
|
+
return {
|
|
166
|
+
listing: {
|
|
167
|
+
name: trimmed(data.name),
|
|
168
|
+
shortDescription: trimmed(data.shortDescription),
|
|
169
|
+
description: trimmed(data.description),
|
|
170
|
+
},
|
|
171
|
+
meta: { store: data.store, version: data.version, fetchedAt: data.fetchedAt },
|
|
172
|
+
};
|
|
173
|
+
}
|
|
82
174
|
//# sourceMappingURL=review-catalog.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"review-catalog.js","sourceRoot":"","sources":["../src/review-catalog.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"review-catalog.js","sourceRoot":"","sources":["../src/review-catalog.ts"],"names":[],"mappings":"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"}
|
package/dist/review-checks.d.ts
CHANGED
|
@@ -141,6 +141,13 @@ export declare function checkServiceWorker(m: Manifest, files: FileMap): ReviewF
|
|
|
141
141
|
export declare function checkActiveTabAdvisor(m: Manifest): ReviewFinding[];
|
|
142
142
|
export declare const OFFLINE_CHECKED_PERMISSIONS: readonly string[];
|
|
143
143
|
export declare function checkUnusedPermissions(m: Manifest, files: FileMap): ReviewFinding[];
|
|
144
|
+
/**
|
|
145
|
+
* What the store will ask this package to declare, derived from its manifest.
|
|
146
|
+
*
|
|
147
|
+
* Optional permissions count: the declaration covers what the extension can
|
|
148
|
+
* request, and an optional permission ships in the package and is grantable.
|
|
149
|
+
*/
|
|
150
|
+
export declare function checkPrivacyDisclosure(manifest: Manifest): ReviewFinding[];
|
|
144
151
|
export interface ReviewInputs {
|
|
145
152
|
manifest: Manifest;
|
|
146
153
|
files: FileMap;
|
|
@@ -154,6 +161,29 @@ export interface ReviewInputs {
|
|
|
154
161
|
listing?: Listing | null;
|
|
155
162
|
}
|
|
156
163
|
export declare function runChecks(input: ReviewInputs): ReviewFinding[];
|
|
164
|
+
/**
|
|
165
|
+
* The store-listing rules alone — deduped, capped and policy-stamped exactly as
|
|
166
|
+
* `runChecks` treats them.
|
|
167
|
+
*
|
|
168
|
+
* `scan` renders the listing as its own report section rather than mixing it
|
|
169
|
+
* into the code findings, because the two do not have the same coverage: the
|
|
170
|
+
* code checks read the whole package, while the listing checks read only the
|
|
171
|
+
* text the package carries (never the full dashboard description). A section
|
|
172
|
+
* can state that caveat next to its own findings; a merged list cannot.
|
|
173
|
+
*
|
|
174
|
+
* `listing-change-rereview` is deliberately NOT here — it is a note about the
|
|
175
|
+
* review process, not a reading of the listing text, and it stays with the
|
|
176
|
+
* code checks where `runChecks` puts it.
|
|
177
|
+
*
|
|
178
|
+
* Running the rules in isolation is not a weaker `dedupeAndCap` than running
|
|
179
|
+
* them inside `runChecks`: both the dedup key and the per-check cap are keyed on
|
|
180
|
+
* `f.check`, so findings only ever interact with findings of the SAME check id.
|
|
181
|
+
* Splitting the input therefore yields identical output — but only while the
|
|
182
|
+
* listing rules and the code rules keep disjoint check ids. A rule author who
|
|
183
|
+
* ever reuses an id across the two sets breaks that, and would make `scan` and
|
|
184
|
+
* `review-risk` disagree on counts.
|
|
185
|
+
*/
|
|
186
|
+
export declare function runListingOnlyChecks(listing: Listing | null): ReviewFinding[];
|
|
157
187
|
export interface ReviewSummary {
|
|
158
188
|
findings: ReviewFinding[];
|
|
159
189
|
counts: Record<Verdict, number>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"review-checks.d.ts","sourceRoot":"","sources":["../src/review-checks.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"review-checks.d.ts","sourceRoot":"","sources":["../src/review-checks.ts"],"names":[],"mappings":"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"}
|
package/dist/review-checks.js
CHANGED
|
@@ -698,6 +698,138 @@ export function checkUnusedPermissions(m, files) {
|
|
|
698
698
|
citation: `Chrome extensions: declare permissions — ${DOC_PERMISSIONS}`,
|
|
699
699
|
}));
|
|
700
700
|
}
|
|
701
|
+
// ── Check: privacy-disclosure checklist (pre-publish) ────────────────────────
|
|
702
|
+
//
|
|
703
|
+
// Chrome Web Store makes you fill in "Privacy practices" at submission: which
|
|
704
|
+
// data types the extension handles, and a privacy policy URL. Which questions
|
|
705
|
+
// you get is driven by what your manifest asks for, so the answer is knowable
|
|
706
|
+
// from the package alone — before you ever open the dashboard.
|
|
707
|
+
//
|
|
708
|
+
// This is a REQUIREMENTS CHECKLIST, not an accusation. It says what the store
|
|
709
|
+
// will ask you to declare; it never claims you failed to declare it. That
|
|
710
|
+
// distinction is what makes it safe to run on a package with no listing at all,
|
|
711
|
+
// which is the case it exists for: an unpublished extension has no store
|
|
712
|
+
// declaration to compare against, so nothing else in this suite can help.
|
|
713
|
+
//
|
|
714
|
+
// The catalog-side counterpart deliberately does NOT do the mirror of this.
|
|
715
|
+
// Comparing a held permission against a published declaration and calling the
|
|
716
|
+
// difference "undeclared" is unsound: holding `history` does not prove
|
|
717
|
+
// collection — reading it on-device to render a UI obtains no copy — and
|
|
718
|
+
// measured on the live catalog that rule would fire on 2 282 extensions, 2 005
|
|
719
|
+
// of them merely `NO_COLLECTION` holders of the permission. The sound
|
|
720
|
+
// server-side check is the existing data-FLOW matcher, which needs evidence the
|
|
721
|
+
// data actually moves. See dags/.../declaration_matchers.py.
|
|
722
|
+
const DOC_PRIVACY_PRACTICES = 'https://developer.chrome.com/docs/webstore/cws-dashboard-privacy';
|
|
723
|
+
const PRIVACY_POLICY_GENERATOR = 'https://dojo.extenshi.io/privacy-policy-generator';
|
|
724
|
+
/**
|
|
725
|
+
* Deliberately absent, recorded so nobody re-opens them without the reason:
|
|
726
|
+
* `tabs`, `<all_urls>` and host permissions — held by most legitimate
|
|
727
|
+
* extensions; a checklist that tells everyone they handle everything is one
|
|
728
|
+
* nobody reads.
|
|
729
|
+
* `cookies` — a cookie is only auth data sometimes, and the permission is
|
|
730
|
+
* routinely used for non-identifying preferences. The catalog matcher makes
|
|
731
|
+
* the same call: it maps `cookies_api_exfiltration`, never plain access.
|
|
732
|
+
* `downloads` — sees file names the user chose to download, not a declarable
|
|
733
|
+
* category on its own.
|
|
734
|
+
* `browsingData` — CLEARS data, it does not read it. Nothing to declare.
|
|
735
|
+
* `webNavigation` — real browsing activity, but a common plumbing permission
|
|
736
|
+
* and the mapping is arguable; omitted under the same when-unsure rule the
|
|
737
|
+
* rest of this file follows.
|
|
738
|
+
*/
|
|
739
|
+
const PERMISSION_DISCLOSURES = [
|
|
740
|
+
{
|
|
741
|
+
permission: 'history',
|
|
742
|
+
dataType: 'Web history',
|
|
743
|
+
reason: 'chrome.history reads the list of pages the user visited',
|
|
744
|
+
},
|
|
745
|
+
{
|
|
746
|
+
permission: 'topSites',
|
|
747
|
+
dataType: 'Web history',
|
|
748
|
+
reason: 'chrome.topSites returns most-visited sites, derived from history',
|
|
749
|
+
},
|
|
750
|
+
{
|
|
751
|
+
permission: 'geolocation',
|
|
752
|
+
dataType: 'Location',
|
|
753
|
+
reason: 'the geolocation API reads the physical location',
|
|
754
|
+
},
|
|
755
|
+
{
|
|
756
|
+
permission: 'clipboardRead',
|
|
757
|
+
dataType: 'User activity',
|
|
758
|
+
reason: 'reading the clipboard returns whatever the user last copied',
|
|
759
|
+
},
|
|
760
|
+
{
|
|
761
|
+
permission: 'identity',
|
|
762
|
+
dataType: 'Personally identifiable information',
|
|
763
|
+
reason: 'chrome.identity reads the signed-in account',
|
|
764
|
+
},
|
|
765
|
+
{
|
|
766
|
+
permission: 'identity.email',
|
|
767
|
+
dataType: 'Personally identifiable information',
|
|
768
|
+
reason: 'the account email address is PII',
|
|
769
|
+
},
|
|
770
|
+
{
|
|
771
|
+
permission: 'desktopCapture',
|
|
772
|
+
dataType: 'User activity',
|
|
773
|
+
reason: 'capturing the screen records whatever is on it',
|
|
774
|
+
},
|
|
775
|
+
{
|
|
776
|
+
permission: 'pageCapture',
|
|
777
|
+
dataType: 'Website content',
|
|
778
|
+
reason: 'chrome.pageCapture saves full page contents, including signed-in pages',
|
|
779
|
+
},
|
|
780
|
+
];
|
|
781
|
+
/**
|
|
782
|
+
* What the store will ask this package to declare, derived from its manifest.
|
|
783
|
+
*
|
|
784
|
+
* Optional permissions count: the declaration covers what the extension can
|
|
785
|
+
* request, and an optional permission ships in the package and is grantable.
|
|
786
|
+
*/
|
|
787
|
+
export function checkPrivacyDisclosure(manifest) {
|
|
788
|
+
const held = new Set();
|
|
789
|
+
for (const key of ['permissions', 'optional_permissions']) {
|
|
790
|
+
const raw = manifest[key];
|
|
791
|
+
if (!Array.isArray(raw))
|
|
792
|
+
continue;
|
|
793
|
+
for (const p of raw)
|
|
794
|
+
if (typeof p === 'string' && p.trim())
|
|
795
|
+
held.add(p.trim());
|
|
796
|
+
}
|
|
797
|
+
// Group by data type so a package asking for `history` AND `topSites` is told
|
|
798
|
+
// once what to declare, not twice — the developer ticks one box either way.
|
|
799
|
+
// No early return on an empty `held`: the `byType` check below is the only
|
|
800
|
+
// terminal condition, and a second guard saying the same thing can drift from
|
|
801
|
+
// it without anything noticing.
|
|
802
|
+
const byType = new Map();
|
|
803
|
+
for (const { permission, dataType, reason } of PERMISSION_DISCLOSURES) {
|
|
804
|
+
if (!held.has(permission))
|
|
805
|
+
continue;
|
|
806
|
+
const reasons = byType.get(dataType) ?? [];
|
|
807
|
+
reasons.push(`\`${permission}\` — ${reason}`);
|
|
808
|
+
byType.set(dataType, reasons);
|
|
809
|
+
}
|
|
810
|
+
if (byType.size === 0)
|
|
811
|
+
return [];
|
|
812
|
+
// Entries, not keys: the values travel with them, so there is no unreachable
|
|
813
|
+
// "key missing from its own map" branch to pretend to handle.
|
|
814
|
+
const grouped = [...byType.entries()].sort(([a], [b]) => a.localeCompare(b));
|
|
815
|
+
const types = grouped.map(([dataType]) => dataType);
|
|
816
|
+
return [
|
|
817
|
+
{
|
|
818
|
+
verdict: 'SLOW',
|
|
819
|
+
check: 'privacy-disclosure-required',
|
|
820
|
+
title: `Submission will require declaring ${types.length} data type${types.length === 1 ? '' : 's'} and a privacy policy`,
|
|
821
|
+
detail: 'Chrome Web Store derives the "Privacy practices" questions from your manifest, so these are ' +
|
|
822
|
+
'settled before you open the dashboard. A submission whose declaration does not cover a permission ' +
|
|
823
|
+
'it ships is a common rejection, and a privacy policy is mandatory once any of these apply — ' +
|
|
824
|
+
'every published extension in our catalog has one.',
|
|
825
|
+
evidence: grouped.map(([dataType, reasons]) => `${dataType}: ${reasons.join('; ')}`).join(' | '),
|
|
826
|
+
recommendation: `Declare ${types.map((t) => `"${t}"`).join(', ')} under Privacy practices, and publish a privacy ` +
|
|
827
|
+
`policy URL that names the data you handle. Generate one at ${PRIVACY_POLICY_GENERATOR} if you ` +
|
|
828
|
+
'do not have it yet. Dropping a permission you do not need removes its question entirely.',
|
|
829
|
+
citation: `Chrome Web Store: Privacy practices in the dashboard — ${DOC_PRIVACY_PRACTICES}`,
|
|
830
|
+
},
|
|
831
|
+
];
|
|
832
|
+
}
|
|
701
833
|
/**
|
|
702
834
|
* Drop exact duplicates (same check + same evidence — a single bundled pattern
|
|
703
835
|
* copied across N entry chunks would otherwise become N "REJECTED" rows) and cap
|
|
@@ -744,10 +876,36 @@ export function runChecks(input) {
|
|
|
744
876
|
...checkSlowReviewQueue(input.manifest),
|
|
745
877
|
...checkActiveTabAdvisor(input.manifest),
|
|
746
878
|
...checkUnusedPermissions(input.manifest, input.files),
|
|
879
|
+
...checkPrivacyDisclosure(input.manifest),
|
|
747
880
|
...runListingChecks(input.listing ?? null),
|
|
748
881
|
...checkListingChangeReReview(),
|
|
749
882
|
]));
|
|
750
883
|
}
|
|
884
|
+
/**
|
|
885
|
+
* The store-listing rules alone — deduped, capped and policy-stamped exactly as
|
|
886
|
+
* `runChecks` treats them.
|
|
887
|
+
*
|
|
888
|
+
* `scan` renders the listing as its own report section rather than mixing it
|
|
889
|
+
* into the code findings, because the two do not have the same coverage: the
|
|
890
|
+
* code checks read the whole package, while the listing checks read only the
|
|
891
|
+
* text the package carries (never the full dashboard description). A section
|
|
892
|
+
* can state that caveat next to its own findings; a merged list cannot.
|
|
893
|
+
*
|
|
894
|
+
* `listing-change-rereview` is deliberately NOT here — it is a note about the
|
|
895
|
+
* review process, not a reading of the listing text, and it stays with the
|
|
896
|
+
* code checks where `runChecks` puts it.
|
|
897
|
+
*
|
|
898
|
+
* Running the rules in isolation is not a weaker `dedupeAndCap` than running
|
|
899
|
+
* them inside `runChecks`: both the dedup key and the per-check cap are keyed on
|
|
900
|
+
* `f.check`, so findings only ever interact with findings of the SAME check id.
|
|
901
|
+
* Splitting the input therefore yields identical output — but only while the
|
|
902
|
+
* listing rules and the code rules keep disjoint check ids. A rule author who
|
|
903
|
+
* ever reuses an id across the two sets breaks that, and would make `scan` and
|
|
904
|
+
* `review-risk` disagree on counts.
|
|
905
|
+
*/
|
|
906
|
+
export function runListingOnlyChecks(listing) {
|
|
907
|
+
return withPolicies(dedupeAndCap(runListingChecks(listing)));
|
|
908
|
+
}
|
|
751
909
|
/**
|
|
752
910
|
* Stamp each finding with the store policy its check is registered against.
|
|
753
911
|
*
|