@extenshi/cli 0.23.0 → 0.24.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/amo-source.d.ts +88 -17
- package/dist/amo-source.d.ts.map +1 -1
- package/dist/amo-source.js +437 -116
- package/dist/amo-source.js.map +1 -1
- package/dist/cli.js +44 -13
- package/dist/cli.js.map +1 -1
- package/dist/compliance-review.d.ts +5 -1
- package/dist/compliance-review.d.ts.map +1 -1
- package/dist/compliance-review.js +10 -5
- package/dist/compliance-review.js.map +1 -1
- package/dist/cws-policies.d.ts.map +1 -1
- package/dist/cws-policies.js +4 -0
- package/dist/cws-policies.js.map +1 -1
- package/dist/listing-checks.d.ts +15 -9
- package/dist/listing-checks.d.ts.map +1 -1
- package/dist/listing-checks.js +54 -46
- package/dist/listing-checks.js.map +1 -1
- package/dist/listing.d.ts +48 -0
- package/dist/listing.d.ts.map +1 -1
- package/dist/listing.js +201 -23
- package/dist/listing.js.map +1 -1
- package/dist/pay-contract.d.ts +3 -3
- package/dist/pay-contract.d.ts.map +1 -1
- package/dist/pay-contract.js +2 -1
- package/dist/pay-contract.js.map +1 -1
- package/dist/pay-test-cycle.d.ts.map +1 -1
- package/dist/pay-test-cycle.js +6 -1
- package/dist/pay-test-cycle.js.map +1 -1
- package/dist/png.d.ts +40 -0
- package/dist/png.d.ts.map +1 -0
- package/dist/png.js +208 -0
- package/dist/png.js.map +1 -0
- package/dist/review-checks.d.ts +48 -13
- package/dist/review-checks.d.ts.map +1 -1
- package/dist/review-checks.js +364 -56
- package/dist/review-checks.js.map +1 -1
- package/dist/review-risk.d.ts +8 -3
- package/dist/review-risk.d.ts.map +1 -1
- package/dist/review-risk.js +14 -4
- package/dist/review-risk.js.map +1 -1
- package/dist/review-stores.d.ts +63 -0
- package/dist/review-stores.d.ts.map +1 -0
- package/dist/review-stores.js +92 -0
- package/dist/review-stores.js.map +1 -0
- package/dist/scan.d.ts +8 -11
- package/dist/scan.d.ts.map +1 -1
- package/dist/scan.js +8 -11
- package/dist/scan.js.map +1 -1
- package/dist/screenshots-scenes.d.ts +13 -0
- package/dist/screenshots-scenes.d.ts.map +1 -1
- package/dist/screenshots-scenes.js +20 -2
- package/dist/screenshots-scenes.js.map +1 -1
- package/dist/screenshots.d.ts +6 -4
- package/dist/screenshots.d.ts.map +1 -1
- package/dist/screenshots.js +31 -10
- package/dist/screenshots.js.map +1 -1
- package/dist/store-assets.d.ts.map +1 -1
- package/dist/store-assets.js +7 -3
- package/dist/store-assets.js.map +1 -1
- package/dist/telemetry.d.ts +7 -0
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +8 -0
- package/dist/telemetry.js.map +1 -1
- package/package.json +1 -1
package/dist/png.js
ADDED
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PNG output for store artwork and screenshots: 24-bit RGB when every pixel is
|
|
3
|
+
* opaque, RGBA otherwise.
|
|
4
|
+
*
|
|
5
|
+
* resvg and Chromium both write RGBA (colour type 6) even for a fully opaque
|
|
6
|
+
* image, and the Chrome Web Store asks for screenshots and promo tiles as
|
|
7
|
+
* 24-bit PNGs with no alpha. Re-encoding is lossless — the pixels are the same,
|
|
8
|
+
* only the unused alpha byte goes.
|
|
9
|
+
*
|
|
10
|
+
* Deliberately small: 8-bit, non-interlaced, colour types 2 and 6 — exactly
|
|
11
|
+
* what resvg and Chromium produce. Anything else passes through untouched.
|
|
12
|
+
*/
|
|
13
|
+
import { deflateSync, inflateSync } from 'node:zlib';
|
|
14
|
+
const SIGNATURE = Buffer.from([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]);
|
|
15
|
+
const COLOR_RGB = 2;
|
|
16
|
+
const COLOR_RGBA = 6;
|
|
17
|
+
const CRC_TABLE = (() => {
|
|
18
|
+
const table = new Uint32Array(256);
|
|
19
|
+
for (let n = 0; n < 256; n++) {
|
|
20
|
+
let c = n;
|
|
21
|
+
for (let k = 0; k < 8; k++)
|
|
22
|
+
c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1;
|
|
23
|
+
table[n] = c >>> 0;
|
|
24
|
+
}
|
|
25
|
+
return table;
|
|
26
|
+
})();
|
|
27
|
+
// zlib.crc32 needs Node 20.15/22.2; the CLI supports Node 20.0.
|
|
28
|
+
function crc32(buf) {
|
|
29
|
+
let c = 0xffffffff;
|
|
30
|
+
for (const byte of buf)
|
|
31
|
+
c = CRC_TABLE[(c ^ byte) & 0xff] ^ (c >>> 8);
|
|
32
|
+
return (c ^ 0xffffffff) >>> 0;
|
|
33
|
+
}
|
|
34
|
+
function chunk(type, data) {
|
|
35
|
+
const head = Buffer.alloc(8);
|
|
36
|
+
head.writeUInt32BE(data.length, 0);
|
|
37
|
+
head.write(type, 4, 'ascii');
|
|
38
|
+
const crc = Buffer.alloc(4);
|
|
39
|
+
crc.writeUInt32BE(crc32(Buffer.concat([head.subarray(4), data])), 0);
|
|
40
|
+
return Buffer.concat([head, data, crc]);
|
|
41
|
+
}
|
|
42
|
+
function paeth(a, b, c) {
|
|
43
|
+
const p = a + b - c;
|
|
44
|
+
const pa = Math.abs(p - a);
|
|
45
|
+
const pb = Math.abs(p - b);
|
|
46
|
+
const pc = Math.abs(p - c);
|
|
47
|
+
return pa <= pb && pa <= pc ? a : pb <= pc ? b : c;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Encode raw 8-bit pixels; each row gets the filter with the smallest sum of
|
|
51
|
+
* absolute values. `keep` are whole chunks (colour space, pixel density) copied
|
|
52
|
+
* from a source PNG so the re-encoded image renders the same.
|
|
53
|
+
*/
|
|
54
|
+
export function encodePng(data, width, height, channels, keep = []) {
|
|
55
|
+
const stride = width * channels;
|
|
56
|
+
const out = Buffer.alloc((stride + 1) * height);
|
|
57
|
+
const candidate = Buffer.alloc(stride);
|
|
58
|
+
const best = Buffer.alloc(stride);
|
|
59
|
+
for (let y = 0; y < height; y++) {
|
|
60
|
+
const row = y * stride;
|
|
61
|
+
let bestType = 0;
|
|
62
|
+
let bestScore = Number.POSITIVE_INFINITY;
|
|
63
|
+
for (let type = 0; type <= 4; type++) {
|
|
64
|
+
let score = 0;
|
|
65
|
+
for (let i = 0; i < stride; i++) {
|
|
66
|
+
const x = data[row + i];
|
|
67
|
+
const a = i >= channels ? data[row + i - channels] : 0;
|
|
68
|
+
const b = y > 0 ? data[row - stride + i] : 0;
|
|
69
|
+
const c = y > 0 && i >= channels ? data[row - stride + i - channels] : 0;
|
|
70
|
+
const v = type === 0
|
|
71
|
+
? x
|
|
72
|
+
: type === 1
|
|
73
|
+
? x - a
|
|
74
|
+
: type === 2
|
|
75
|
+
? x - b
|
|
76
|
+
: type === 3
|
|
77
|
+
? x - ((a + b) >> 1)
|
|
78
|
+
: x - paeth(a, b, c);
|
|
79
|
+
const byte = v & 0xff;
|
|
80
|
+
candidate[i] = byte;
|
|
81
|
+
score += byte < 128 ? byte : 256 - byte;
|
|
82
|
+
}
|
|
83
|
+
if (score < bestScore) {
|
|
84
|
+
bestScore = score;
|
|
85
|
+
bestType = type;
|
|
86
|
+
candidate.copy(best);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
out[y * (stride + 1)] = bestType;
|
|
90
|
+
best.copy(out, y * (stride + 1) + 1);
|
|
91
|
+
}
|
|
92
|
+
const ihdr = Buffer.alloc(13);
|
|
93
|
+
ihdr.writeUInt32BE(width, 0);
|
|
94
|
+
ihdr.writeUInt32BE(height, 4);
|
|
95
|
+
ihdr[8] = 8;
|
|
96
|
+
ihdr[9] = channels === 3 ? COLOR_RGB : COLOR_RGBA;
|
|
97
|
+
return Buffer.concat([
|
|
98
|
+
SIGNATURE,
|
|
99
|
+
chunk('IHDR', ihdr),
|
|
100
|
+
...keep,
|
|
101
|
+
chunk('IDAT', deflateSync(out, { level: 9 })),
|
|
102
|
+
chunk('IEND', Buffer.alloc(0)),
|
|
103
|
+
]);
|
|
104
|
+
}
|
|
105
|
+
/** Ancillary chunks that change how the pixels are displayed — carried over on re-encode. */
|
|
106
|
+
const KEPT_CHUNKS = new Set(['sRGB', 'iCCP', 'gAMA', 'cHRM', 'pHYs']);
|
|
107
|
+
/** Decode an 8-bit, non-interlaced RGB or RGBA PNG; null for anything else. */
|
|
108
|
+
export function decodePng(png) {
|
|
109
|
+
const b = Buffer.from(png.buffer, png.byteOffset, png.byteLength);
|
|
110
|
+
if (b.length < 33 || !b.subarray(0, 8).equals(SIGNATURE))
|
|
111
|
+
return null;
|
|
112
|
+
let width = 0;
|
|
113
|
+
let height = 0;
|
|
114
|
+
let channels = 0;
|
|
115
|
+
const idat = [];
|
|
116
|
+
const keep = [];
|
|
117
|
+
for (let at = 8; at + 8 <= b.length;) {
|
|
118
|
+
const length = b.readUInt32BE(at);
|
|
119
|
+
const type = b.toString('ascii', at + 4, at + 8);
|
|
120
|
+
const data = b.subarray(at + 8, at + 8 + length);
|
|
121
|
+
if (type === 'IHDR') {
|
|
122
|
+
// A truncated IHDR would make the reads below throw; null keeps the pass-through contract.
|
|
123
|
+
if (data.length < 13)
|
|
124
|
+
return null;
|
|
125
|
+
width = data.readUInt32BE(0);
|
|
126
|
+
height = data.readUInt32BE(4);
|
|
127
|
+
const [depth, color, , , interlace] = data.subarray(8, 13);
|
|
128
|
+
if (depth !== 8 || interlace !== 0 || (color !== COLOR_RGB && color !== COLOR_RGBA))
|
|
129
|
+
return null;
|
|
130
|
+
channels = color === COLOR_RGB ? 3 : 4;
|
|
131
|
+
}
|
|
132
|
+
else if (type === 'IDAT')
|
|
133
|
+
idat.push(data);
|
|
134
|
+
else if (type === 'IEND')
|
|
135
|
+
break;
|
|
136
|
+
else if (KEPT_CHUNKS.has(type))
|
|
137
|
+
keep.push(Buffer.from(b.subarray(at, at + 12 + length)));
|
|
138
|
+
at += 12 + length;
|
|
139
|
+
}
|
|
140
|
+
if (!channels || !width || !height || idat.length === 0)
|
|
141
|
+
return null;
|
|
142
|
+
let raw;
|
|
143
|
+
try {
|
|
144
|
+
raw = inflateSync(Buffer.concat(idat));
|
|
145
|
+
}
|
|
146
|
+
catch {
|
|
147
|
+
// Truncated or corrupt pixel data: not a PNG this module can read, so the
|
|
148
|
+
// caller passes the original through instead of failing the run.
|
|
149
|
+
return null;
|
|
150
|
+
}
|
|
151
|
+
const stride = width * channels;
|
|
152
|
+
if (raw.length < (stride + 1) * height)
|
|
153
|
+
return null;
|
|
154
|
+
const pixels = new Uint8Array(stride * height);
|
|
155
|
+
for (let y = 0; y < height; y++) {
|
|
156
|
+
const type = raw[y * (stride + 1)];
|
|
157
|
+
if (type > 4)
|
|
158
|
+
return null;
|
|
159
|
+
const src = y * (stride + 1) + 1;
|
|
160
|
+
const row = y * stride;
|
|
161
|
+
for (let i = 0; i < stride; i++) {
|
|
162
|
+
const a = i >= channels ? pixels[row + i - channels] : 0;
|
|
163
|
+
const up = y > 0 ? pixels[row - stride + i] : 0;
|
|
164
|
+
const c = y > 0 && i >= channels ? pixels[row - stride + i - channels] : 0;
|
|
165
|
+
const x = raw[src + i];
|
|
166
|
+
pixels[row + i] =
|
|
167
|
+
(type === 0
|
|
168
|
+
? x
|
|
169
|
+
: type === 1
|
|
170
|
+
? x + a
|
|
171
|
+
: type === 2
|
|
172
|
+
? x + up
|
|
173
|
+
: type === 3
|
|
174
|
+
? x + ((a + up) >> 1)
|
|
175
|
+
: x + paeth(a, up, c)) & 0xff;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
return { width, height, channels, data: pixels, keep };
|
|
179
|
+
}
|
|
180
|
+
/** RGBA pixels → an RGB PNG when every pixel is opaque, null when any is not. */
|
|
181
|
+
export function rgbPngIfOpaque(rgba, width, height, keep = []) {
|
|
182
|
+
const rgb = new Uint8Array(width * height * 3);
|
|
183
|
+
for (let p = 0, q = 0; p < rgba.length; p += 4, q += 3) {
|
|
184
|
+
if (rgba[p + 3] !== 255)
|
|
185
|
+
return null;
|
|
186
|
+
rgb[q] = rgba[p];
|
|
187
|
+
rgb[q + 1] = rgba[p + 1];
|
|
188
|
+
rgb[q + 2] = rgba[p + 2];
|
|
189
|
+
}
|
|
190
|
+
return encodePng(rgb, width, height, 3, keep);
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* The same image as a 24-bit PNG when it is fully opaque; the input unchanged
|
|
194
|
+
* when it has transparency, is already RGB, or is a format this module does
|
|
195
|
+
* not read.
|
|
196
|
+
*/
|
|
197
|
+
export function opaquePngAsRgb(png) {
|
|
198
|
+
const decoded = decodePng(png);
|
|
199
|
+
const original = Buffer.from(png.buffer, png.byteOffset, png.byteLength);
|
|
200
|
+
if (!decoded || decoded.channels === 3)
|
|
201
|
+
return original;
|
|
202
|
+
return rgbPngIfOpaque(decoded.data, decoded.width, decoded.height, decoded.keep) ?? original;
|
|
203
|
+
}
|
|
204
|
+
/** The PNG colour type from IHDR (2 = RGB, 6 = RGBA). */
|
|
205
|
+
export function pngColorType(png) {
|
|
206
|
+
return Buffer.from(png.buffer, png.byteOffset, png.byteLength)[25];
|
|
207
|
+
}
|
|
208
|
+
//# sourceMappingURL=png.js.map
|
package/dist/png.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"png.js","sourceRoot":"","sources":["../src/png.ts"],"names":[],"mappings":"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"}
|
package/dist/review-checks.d.ts
CHANGED
|
@@ -14,13 +14,20 @@
|
|
|
14
14
|
* Chrome for Developers documentation so the user can verify the rule at the
|
|
15
15
|
* source. (We do not cite third-party books in product output.)
|
|
16
16
|
*
|
|
17
|
+
* The suite predicts ONE store's review per run (`store`, default Chrome Web
|
|
18
|
+
* Store). Findings that describe a store's review process — the in-depth review
|
|
19
|
+
* of broad host access, re-review on listing edits, the Privacy practices form —
|
|
20
|
+
* exist only for the store whose documentation describes them; see
|
|
21
|
+
* review-stores.ts for the wording that differs.
|
|
22
|
+
*
|
|
17
23
|
* This module is PURE (no I/O) so the rules are unit-testable against fixtures.
|
|
18
24
|
* Archive extraction lives in review-archive.ts; the network manifest fetch in
|
|
19
25
|
* review-catalog.ts; rendering in review-render.ts. The store-listing rules
|
|
20
26
|
* live in listing-checks.ts and are orchestrated from `runChecks` here so a
|
|
21
27
|
* caller gets one findings list regardless of which surface produced it.
|
|
22
28
|
*/
|
|
23
|
-
import type
|
|
29
|
+
import { type Listing } from './listing.js';
|
|
30
|
+
import { type ReviewStore } from './review-stores.js';
|
|
24
31
|
export type Verdict = 'REJECTED' | 'SLOW' | 'ATTRITION';
|
|
25
32
|
export interface ReviewFinding {
|
|
26
33
|
/** The real-world consequence — drives the label shown to the user. */
|
|
@@ -44,7 +51,9 @@ export interface ReviewFinding {
|
|
|
44
51
|
* rather than written into each rule, so one check id cannot end up
|
|
45
52
|
* attributed to two policies. `null` marks a finding about the review
|
|
46
53
|
* PROCESS rather than a rule (see the registry); absent means the check id
|
|
47
|
-
* is unregistered, which the policy test treats as a bug
|
|
54
|
+
* is unregistered, which the policy test treats as a bug — or that the run
|
|
55
|
+
* is for Edge or Firefox, where a Chrome Web Store policy would be the wrong
|
|
56
|
+
* attribution (the finding's `citation` names that store's rule instead).
|
|
48
57
|
*/
|
|
49
58
|
policy?: {
|
|
50
59
|
id: string;
|
|
@@ -114,6 +123,7 @@ export interface Manifest {
|
|
|
114
123
|
/** A text file pulled out of the artifact: package-relative path → contents. */
|
|
115
124
|
export type FileMap = Map<string, string>;
|
|
116
125
|
export declare const PERMISSION_WARNINGS: Readonly<Record<string, string>>;
|
|
126
|
+
export declare const FIREFOX_PERMISSION_MESSAGES: Readonly<Record<string, string>>;
|
|
117
127
|
export declare function isGlobalHost(value: string): boolean;
|
|
118
128
|
/**
|
|
119
129
|
* Required API permissions only (host patterns stripped out). In MV2 hosts and
|
|
@@ -131,27 +141,46 @@ export declare function normalizePath(p: string): string;
|
|
|
131
141
|
* eval get the extension rejected.
|
|
132
142
|
*/
|
|
133
143
|
export declare function htmlEntrypoints(m: Manifest): string[];
|
|
134
|
-
|
|
144
|
+
/**
|
|
145
|
+
* Chrome Web Store only. Its review-process page says reviews "may take longer
|
|
146
|
+
* for extensions that request broad host permissions". Edge certifies every
|
|
147
|
+
* submission the same way (up to 7 business days) and AMO publishes after
|
|
148
|
+
* automated checks; neither documents a longer path for broad host access, so
|
|
149
|
+
* this finding would be invented there.
|
|
150
|
+
*/
|
|
151
|
+
export declare function checkSlowReviewQueue(m: Manifest, store?: ReviewStore): ReviewFinding[];
|
|
135
152
|
/**
|
|
136
153
|
* Static advisory — there is nothing in the package to inspect; it's a
|
|
137
154
|
* publishing-process fact developers routinely get burned by. Emitted once.
|
|
155
|
+
*
|
|
156
|
+
* Per store, because the process differs: Edge restarts certification for a
|
|
157
|
+
* metadata-only update too, and AMO documents nothing about listing-only edits
|
|
158
|
+
* (so nothing is said there).
|
|
138
159
|
*/
|
|
139
|
-
export declare function checkListingChangeReReview(): ReviewFinding[];
|
|
160
|
+
export declare function checkListingChangeReReview(store?: ReviewStore): ReviewFinding[];
|
|
140
161
|
/**
|
|
141
162
|
* Diff the local manifest against the last-published one. A newly-added
|
|
142
|
-
* *required* permission that
|
|
143
|
-
*
|
|
144
|
-
*
|
|
145
|
-
*
|
|
163
|
+
* *required* permission that prompts costs the installed base on update →
|
|
164
|
+
* attrition. How depends on the browser: Chromium (Chrome, Edge) silently
|
|
165
|
+
* disables the extension until the user re-accepts (only a small toolbar icon
|
|
166
|
+
* appears); Firefox keeps users on the previous version until they approve, and
|
|
167
|
+
* installs an MV3 update without the host access it adds (see
|
|
168
|
+
* FIREFOX_PERMISSION_MESSAGES). On the Chrome Web Store, newly-added permissions
|
|
169
|
+
* of any kind also re-trip the slow review queue (ch.10).
|
|
146
170
|
*
|
|
147
171
|
* `prior` is the manifest fetched from the catalog's last snapshot; pass null
|
|
148
172
|
* when it could not be fetched (the caller surfaces why and this returns []).
|
|
149
173
|
*/
|
|
150
|
-
export declare function checkAutoDisableOnUpdate(local: Manifest, prior: Manifest | null): ReviewFinding[];
|
|
174
|
+
export declare function checkAutoDisableOnUpdate(local: Manifest, prior: Manifest | null, store?: ReviewStore): ReviewFinding[];
|
|
151
175
|
export declare function checkRemoteCode(files: FileMap): ReviewFinding[];
|
|
152
176
|
export declare function checkHtmlCsp(m: Manifest, files: FileMap): ReviewFinding[];
|
|
153
177
|
export declare function checkServiceWorker(m: Manifest, files: FileMap): ReviewFinding[];
|
|
154
|
-
|
|
178
|
+
/**
|
|
179
|
+
* Chrome Web Store only: the advice holds everywhere, but the verdict it is
|
|
180
|
+
* filed under — skipping the slow review queue — is a Chrome Web Store process
|
|
181
|
+
* fact (see `checkSlowReviewQueue`).
|
|
182
|
+
*/
|
|
183
|
+
export declare function checkActiveTabAdvisor(m: Manifest, store?: ReviewStore): ReviewFinding[];
|
|
155
184
|
export declare const OFFLINE_CHECKED_PERMISSIONS: readonly string[];
|
|
156
185
|
export declare function checkUnusedPermissions(m: Manifest, files: FileMap): ReviewFinding[];
|
|
157
186
|
/**
|
|
@@ -160,7 +189,7 @@ export declare function checkUnusedPermissions(m: Manifest, files: FileMap): Rev
|
|
|
160
189
|
* Optional permissions count: the declaration covers what the extension can
|
|
161
190
|
* request, and an optional permission ships in the package and is grantable.
|
|
162
191
|
*/
|
|
163
|
-
export declare function checkPrivacyDisclosure(manifest: Manifest): ReviewFinding[];
|
|
192
|
+
export declare function checkPrivacyDisclosure(manifest: Manifest, store?: ReviewStore): ReviewFinding[];
|
|
164
193
|
/**
|
|
165
194
|
* Privacy-practices rows for CHROMEWEBSTORE.md, from the same mapping
|
|
166
195
|
* `checkPrivacyDisclosure` uses. One row per (permission, data type) so a
|
|
@@ -171,6 +200,7 @@ export declare function privacyPracticesForManifest(manifest: Manifest): {
|
|
|
171
200
|
dataType: string;
|
|
172
201
|
permission: string;
|
|
173
202
|
}[];
|
|
203
|
+
export declare function checkManifestFieldLengths(manifest: Manifest, files: FileMap, store?: ReviewStore): ReviewFinding[];
|
|
174
204
|
export interface ReviewInputs {
|
|
175
205
|
manifest: Manifest;
|
|
176
206
|
files: FileMap;
|
|
@@ -182,6 +212,8 @@ export interface ReviewInputs {
|
|
|
182
212
|
* and, when given, `--listing`.
|
|
183
213
|
*/
|
|
184
214
|
listing?: Listing | null;
|
|
215
|
+
/** The store whose review this run predicts (default Chrome Web Store). */
|
|
216
|
+
store?: ReviewStore;
|
|
185
217
|
}
|
|
186
218
|
export declare function runChecks(input: ReviewInputs): ReviewFinding[];
|
|
187
219
|
/**
|
|
@@ -206,13 +238,16 @@ export declare function runChecks(input: ReviewInputs): ReviewFinding[];
|
|
|
206
238
|
* ever reuses an id across the two sets breaks that, and would make `scan` and
|
|
207
239
|
* `review-risk` disagree on counts.
|
|
208
240
|
*/
|
|
209
|
-
export declare function runListingOnlyChecks(listing: Listing | null): ReviewFinding[];
|
|
241
|
+
export declare function runListingOnlyChecks(listing: Listing | null, store?: ReviewStore): ReviewFinding[];
|
|
210
242
|
/**
|
|
211
243
|
* Ruleset version stamped on a persisted `review_risk` prediction.
|
|
212
244
|
* Bump when a check is added, removed, or its verdict changes — otherwise
|
|
213
245
|
* iteration 4 averages incompatible rules into one precision number.
|
|
246
|
+
*
|
|
247
|
+
* '2' (2026-10-10): `global-host-permissions` also reads content_scripts
|
|
248
|
+
* matches, and `manifest-field-length` is new.
|
|
214
249
|
*/
|
|
215
|
-
export declare const REVIEW_RISK_RULES_VERSION = "
|
|
250
|
+
export declare const REVIEW_RISK_RULES_VERSION = "2";
|
|
216
251
|
export interface ReviewSummary {
|
|
217
252
|
findings: ReviewFinding[];
|
|
218
253
|
counts: Record<Verdict, number>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"review-checks.d.ts","sourceRoot":"","sources":["../src/review-checks.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"review-checks.d.ts","sourceRoot":"","sources":["../src/review-checks.ts"],"names":[],"mappings":"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"}
|