webstore-lint 1.0.28 → 1.0.30
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/README.md +16 -0
- package/bin/webstore-lint.mjs +18 -0
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -311,6 +311,17 @@ npx webstore-lint ./my-extension \
|
|
|
311
311
|
This is the only flag that touches the network, and only when you pass a URL.
|
|
312
312
|
Without it the tool opens no sockets at all.
|
|
313
313
|
|
|
314
|
+
Run the privacy URL check and the permission ledger as separate commands:
|
|
315
|
+
|
|
316
|
+
```bash
|
|
317
|
+
npx webstore-lint ./my-extension --privacy-policy https://example.com/privacy
|
|
318
|
+
npx webstore-lint ./my-extension --permissions
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
Combining `--privacy-policy`, `--permissions` or `--policy` is a usage error
|
|
322
|
+
(exit 2). No checks run for that combination. `--json` works with either the
|
|
323
|
+
privacy check or the permission ledger.
|
|
324
|
+
|
|
314
325
|
It exists because of a real rejection. A developer was rejected under **Purple
|
|
315
326
|
Lithium** and the cause was mundane: the privacy policy URL in their listing
|
|
316
327
|
404'd, because the GitHub repository serving it was private. It looks perfectly
|
|
@@ -347,6 +358,11 @@ file tree.
|
|
|
347
358
|
|
|
348
359
|
## If you have been rejected, or warned
|
|
349
360
|
|
|
361
|
+
**[See a worked $149 resubmission pack](https://github.com/Circadian-agent/chrome-extension-rejection-lint/tree/main/examples/resubmission-pack).**
|
|
362
|
+
A fictional extension, before-and-after manifests, permission justifications and
|
|
363
|
+
privacy-practices guidance. Every code reference can be checked in the example.
|
|
364
|
+
|
|
365
|
+
|
|
350
366
|
The linter is free and always will be, and it tells you what is wrong. Writing
|
|
351
367
|
the way back through review is a separate job, and it is the paid one: a
|
|
352
368
|
**resubmission pack, 149 USD once**. It is the text the Web Store dashboard makes
|
package/bin/webstore-lint.mjs
CHANGED
|
@@ -88,6 +88,8 @@ if (flags.has("--help") || (!target && !flags.has("--policy"))) {
|
|
|
88
88
|
and only when you pass a url
|
|
89
89
|
webstore-lint --policy list the policy data this build carries
|
|
90
90
|
|
|
91
|
+
Use --permissions, --privacy-policy and --policy in separate commands.
|
|
92
|
+
|
|
91
93
|
The one-liner, no install needed:
|
|
92
94
|
npx webstore-lint <extension-directory>
|
|
93
95
|
|
|
@@ -100,6 +102,19 @@ not affiliated with Google. A clean run is not a promise of approval.`);
|
|
|
100
102
|
process.exit(flags.has("--help") ? 0 : 2);
|
|
101
103
|
}
|
|
102
104
|
|
|
105
|
+
// These branches produce different reports and return early. Combining them
|
|
106
|
+
// used to exit successfully after silently skipping an explicitly requested
|
|
107
|
+
// check, including a broken privacy URL. Reject before producing any report.
|
|
108
|
+
const modes = ["--permissions", "--privacy-policy", "--policy"].filter(f => flags.has(f));
|
|
109
|
+
if (modes.length > 1) {
|
|
110
|
+
console.error(`${modes.join(", ")} cannot be combined. No checks were run.`);
|
|
111
|
+
console.error("Run each mode separately:");
|
|
112
|
+
console.error(" webstore-lint <extension-directory> --permissions");
|
|
113
|
+
console.error(" webstore-lint <extension-directory> --privacy-policy <url>");
|
|
114
|
+
console.error(" webstore-lint --policy");
|
|
115
|
+
process.exit(2);
|
|
116
|
+
}
|
|
117
|
+
|
|
103
118
|
if (flags.has("--policy")) {
|
|
104
119
|
console.log(`${Object.keys(POLICY.categories).length} verified rejection categories, from ${POLICY.generatedFrom}\n`);
|
|
105
120
|
for (const [id, c] of Object.entries(POLICY.categories)) {
|
|
@@ -328,6 +343,9 @@ if (fail) {
|
|
|
328
343
|
console.log("that notice is typically 7 to 30 days before the extension is taken down. The pack");
|
|
329
344
|
console.log("is delivered in two business days, which fits inside the shortest of those windows.");
|
|
330
345
|
console.log("https://circadian-agent.com/webstore-lint");
|
|
346
|
+
// A worked pack for a fictional extension, so the reader can see what 149 USD
|
|
347
|
+
// buys before paying. Added item 473.
|
|
348
|
+
console.log("Worked example: https://github.com/Circadian-agent/chrome-extension-rejection-lint/tree/main/examples/resubmission-pack");
|
|
331
349
|
}
|
|
332
350
|
console.log("");
|
|
333
351
|
// Same trap, same reason: the human report is also large on a real extension
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "webstore-lint",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.30",
|
|
4
4
|
"description": "Check an unpacked Chrome extension against the Chrome Web Store program policies before you submit it. Every finding cites Google's own notification ID and verbatim policy text. Covers the 1 August 2026 policy updates.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"chrome-extension",
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
"node": ">=18"
|
|
39
39
|
},
|
|
40
40
|
"scripts": {
|
|
41
|
-
"test": "node test/lint.test.mjs && node test/action.test.mjs && node --test test/permissions-output.test.mjs"
|
|
41
|
+
"test": "node test/lint.test.mjs && node test/action.test.mjs && node --test test/permissions-output.test.mjs test/cli-modes.test.mjs"
|
|
42
42
|
},
|
|
43
43
|
"repository": {
|
|
44
44
|
"type": "git",
|