@extenshi/mcp 0.0.3 → 0.0.5
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 +3 -0
- package/dist/config.d.ts +3 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +3 -0
- package/dist/config.js.map +1 -1
- package/dist/docs.d.ts +49 -0
- package/dist/docs.d.ts.map +1 -0
- package/dist/docs.js +186 -0
- package/dist/docs.js.map +1 -0
- package/dist/index.js +42 -3
- package/dist/index.js.map +1 -1
- package/dist/publish.d.ts.map +1 -1
- package/dist/publish.js +10 -0
- package/dist/publish.js.map +1 -1
- package/dist/scan.d.ts.map +1 -1
- package/dist/scan.js +8 -0
- package/dist/scan.js.map +1 -1
- package/dist/validate-artifact.d.ts +28 -0
- package/dist/validate-artifact.d.ts.map +1 -0
- package/dist/validate-artifact.js +95 -0
- package/dist/validate-artifact.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -41,7 +41,9 @@ enforces it too.
|
|
|
41
41
|
| `get_security` | Risk score + finding counts + top grouped findings (reads existing scans) | 1 read |
|
|
42
42
|
| `get_related_extensions` | Similar / competing extensions for competitive analysis | 1 read |
|
|
43
43
|
| `market_overview` | Aggregate catalog stats + facet counts (category / pricing / risk) | 1 read |
|
|
44
|
+
| `search_docs` | Search the Extenshi docs + `@extenshi/cli` reference so the assistant can quote exact commands | Free (no key) |
|
|
44
45
|
| `scan_extension` | Pre-publish security scan of a local artifact (.zip/.crx/.xpi), with live progress | 1 monthly-quota scan |
|
|
46
|
+
| `publish_extension` | Publish to Chrome/Firefox/Edge with your own store credentials (fully local) | Free |
|
|
45
47
|
|
|
46
48
|
Every plan includes monthly reads and scans — the Free plan has 25 reads and 5 scans per
|
|
47
49
|
month, paid plans go up to 10,000 reads and 1,000 scans. Quotas reset on the 1st (UTC).
|
|
@@ -54,6 +56,7 @@ Manage your plan at https://dojo.extenshi.io/billing.
|
|
|
54
56
|
| `EXTENSHI_API_KEY` | — | Your `ek_…` developer key (required) |
|
|
55
57
|
| `EXTENSHI_BFF_URL` | `https://bff.extenshi.io` | Catalog read API base URL |
|
|
56
58
|
| `EXTENSHI_API_URL` | `https://scan.extenshi.io` | Scan backend base URL |
|
|
59
|
+
| `EXTENSHI_DOCS_URL` | `https://docs.extenshi.io` | Docs base URL for `search_docs` |
|
|
57
60
|
|
|
58
61
|
## Develop
|
|
59
62
|
|
package/dist/config.d.ts
CHANGED
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
* Base URLs default to production and are overridable for local/staging:
|
|
14
14
|
* - EXTENSHI_BFF_URL (read tools) default https://bff.extenshi.io
|
|
15
15
|
* - EXTENSHI_API_URL (scan) default https://scan.extenshi.io
|
|
16
|
+
* - EXTENSHI_DOCS_URL (search_docs) default https://docs.extenshi.io
|
|
16
17
|
*
|
|
17
18
|
* stdout is the MCP protocol channel — this module must NEVER write to it.
|
|
18
19
|
*/
|
|
@@ -23,6 +24,8 @@ export interface ResolvedConfig {
|
|
|
23
24
|
bffUrl: string;
|
|
24
25
|
/** Base URL of the scan backend (scan_extension tool), no trailing slash. */
|
|
25
26
|
scanUrl: string;
|
|
27
|
+
/** Base URL of the docs site (search_docs tool), no trailing slash. */
|
|
28
|
+
docsUrl: string;
|
|
26
29
|
}
|
|
27
30
|
export declare function loadConfig(): ResolvedConfig;
|
|
28
31
|
//# sourceMappingURL=config.d.ts.map
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAiBH,MAAM,WAAW,cAAc;IAC9B,mEAAmE;IACnE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,mEAAmE;IACnE,MAAM,EAAE,MAAM,CAAA;IACd,6EAA6E;IAC7E,OAAO,EAAE,MAAM,CAAA;IACf,uEAAuE;IACvE,OAAO,EAAE,MAAM,CAAA;CACf;AAoDD,wBAAgB,UAAU,IAAI,cAAc,CAU3C"}
|
package/dist/config.js
CHANGED
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
* Base URLs default to production and are overridable for local/staging:
|
|
14
14
|
* - EXTENSHI_BFF_URL (read tools) default https://bff.extenshi.io
|
|
15
15
|
* - EXTENSHI_API_URL (scan) default https://scan.extenshi.io
|
|
16
|
+
* - EXTENSHI_DOCS_URL (search_docs) default https://docs.extenshi.io
|
|
16
17
|
*
|
|
17
18
|
* stdout is the MCP protocol channel — this module must NEVER write to it.
|
|
18
19
|
*/
|
|
@@ -21,6 +22,7 @@ import os from 'node:os';
|
|
|
21
22
|
import path from 'node:path';
|
|
22
23
|
const DEFAULT_BFF_URL = 'https://bff.extenshi.io';
|
|
23
24
|
const DEFAULT_SCAN_URL = 'https://scan.extenshi.io';
|
|
25
|
+
const DEFAULT_DOCS_URL = 'https://docs.extenshi.io';
|
|
24
26
|
const CONFIG_PATH = path.join(os.homedir(), '.extenshi', 'config.json');
|
|
25
27
|
function readConfigFile() {
|
|
26
28
|
try {
|
|
@@ -78,6 +80,7 @@ export function loadConfig() {
|
|
|
78
80
|
apiKey: process.env.EXTENSHI_API_KEY ?? file.apiKey ?? null,
|
|
79
81
|
bffUrl: stripSlash(process.env.EXTENSHI_BFF_URL ?? DEFAULT_BFF_URL),
|
|
80
82
|
scanUrl: stripSlash(process.env.EXTENSHI_API_URL ?? file.apiUrl ?? DEFAULT_SCAN_URL),
|
|
83
|
+
docsUrl: stripSlash(process.env.EXTENSHI_DOCS_URL ?? DEFAULT_DOCS_URL),
|
|
81
84
|
};
|
|
82
85
|
}
|
|
83
86
|
//# sourceMappingURL=config.js.map
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/docs.d.ts
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Documentation access for the Extenshi MCP server (`search_docs` tool).
|
|
3
|
+
*
|
|
4
|
+
* Teaches the assistant to consult the LIVE extenshi.io documentation —
|
|
5
|
+
* including the full `@extenshi/cli` command reference — so it can answer
|
|
6
|
+
* "how do I…" questions and quote exact CLI commands instead of guessing.
|
|
7
|
+
*
|
|
8
|
+
* Source of truth is the docs site's machine-readable export (the llms.txt
|
|
9
|
+
* convention), regenerated on every docs deploy:
|
|
10
|
+
* - <docsUrl>/llms.txt a one-line index of every page
|
|
11
|
+
* - <docsUrl>/llms-full.txt the full text of every page (one H1 per page)
|
|
12
|
+
*
|
|
13
|
+
* Both are PUBLIC static files — no API key, no metering — so this tool works
|
|
14
|
+
* even before a developer has configured a key (handy for guiding setup). We
|
|
15
|
+
* fetch lazily, cache in-process with a short TTL, and rank sections locally.
|
|
16
|
+
*
|
|
17
|
+
* stdout is the MCP protocol channel — this module must NEVER write to it.
|
|
18
|
+
*/
|
|
19
|
+
/** A failure the tool layer turns into an actionable `UserError`. */
|
|
20
|
+
export declare class DocsError extends Error {
|
|
21
|
+
constructor(message: string);
|
|
22
|
+
}
|
|
23
|
+
/** One page-sized chunk of `llms-full.txt`, split on top-level headings. */
|
|
24
|
+
export interface DocSection {
|
|
25
|
+
title: string;
|
|
26
|
+
body: string;
|
|
27
|
+
}
|
|
28
|
+
/** Clear the cache — test seam, also usable to force a refresh. */
|
|
29
|
+
export declare function clearDocsCache(): void;
|
|
30
|
+
/**
|
|
31
|
+
* Split `llms-full.txt` into per-page sections on top-level (`# `) headings.
|
|
32
|
+
* Fence-aware: a `# comment` inside a ``` code block is NOT a boundary, so CLI
|
|
33
|
+
* examples never get chopped in half.
|
|
34
|
+
*/
|
|
35
|
+
export declare function splitSections(full: string): DocSection[];
|
|
36
|
+
/**
|
|
37
|
+
* Rank sections against a query. A term in the title is worth more than one in
|
|
38
|
+
* the body. Pure (no I/O) so it is unit-testable with a fixture.
|
|
39
|
+
*/
|
|
40
|
+
export declare function rankSections(full: string, query: string, limit: number): DocSection[];
|
|
41
|
+
/** Fetch the docs index (`llms.txt`) — the page list returned when no query is given. */
|
|
42
|
+
export declare function getDocsIndex(docsUrl: string): Promise<string>;
|
|
43
|
+
/**
|
|
44
|
+
* Search the docs and return a formatted, LLM-friendly answer: the top matching
|
|
45
|
+
* sections, each with its source link. Falls back to a clear "nothing matched"
|
|
46
|
+
* note pointing at the index.
|
|
47
|
+
*/
|
|
48
|
+
export declare function searchDocs(docsUrl: string, query: string, limit: number): Promise<string>;
|
|
49
|
+
//# sourceMappingURL=docs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docs.d.ts","sourceRoot":"","sources":["../src/docs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,qEAAqE;AACrE,qBAAa,SAAU,SAAQ,KAAK;gBACvB,OAAO,EAAE,MAAM;CAI3B;AAED,4EAA4E;AAC5E,MAAM,WAAW,UAAU;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;CACZ;AAmDD,mEAAmE;AACnE,wBAAgB,cAAc,IAAI,IAAI,CAErC;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,EAAE,CAyBxD;AAoCD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,UAAU,EAAE,CAwBrF;AAUD,yFAAyF;AACzF,wBAAsB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAEnE;AAED;;;;GAIG;AACH,wBAAsB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAa/F"}
|
package/dist/docs.js
ADDED
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Documentation access for the Extenshi MCP server (`search_docs` tool).
|
|
3
|
+
*
|
|
4
|
+
* Teaches the assistant to consult the LIVE extenshi.io documentation —
|
|
5
|
+
* including the full `@extenshi/cli` command reference — so it can answer
|
|
6
|
+
* "how do I…" questions and quote exact CLI commands instead of guessing.
|
|
7
|
+
*
|
|
8
|
+
* Source of truth is the docs site's machine-readable export (the llms.txt
|
|
9
|
+
* convention), regenerated on every docs deploy:
|
|
10
|
+
* - <docsUrl>/llms.txt a one-line index of every page
|
|
11
|
+
* - <docsUrl>/llms-full.txt the full text of every page (one H1 per page)
|
|
12
|
+
*
|
|
13
|
+
* Both are PUBLIC static files — no API key, no metering — so this tool works
|
|
14
|
+
* even before a developer has configured a key (handy for guiding setup). We
|
|
15
|
+
* fetch lazily, cache in-process with a short TTL, and rank sections locally.
|
|
16
|
+
*
|
|
17
|
+
* stdout is the MCP protocol channel — this module must NEVER write to it.
|
|
18
|
+
*/
|
|
19
|
+
/** A failure the tool layer turns into an actionable `UserError`. */
|
|
20
|
+
export class DocsError extends Error {
|
|
21
|
+
constructor(message) {
|
|
22
|
+
super(message);
|
|
23
|
+
this.name = 'DocsError';
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
const FETCH_TIMEOUT_MS = 10_000;
|
|
27
|
+
const CACHE_TTL_MS = 10 * 60 * 1000;
|
|
28
|
+
// A descriptive, identifiable UA — deliberately NOT an AI-crawler signature
|
|
29
|
+
// (GPTBot/ClaudeBot/…), so the Cloudflare edge AI-bot block never catches this
|
|
30
|
+
// server-side fetch, and the operator can allowlist it by name if bot rules
|
|
31
|
+
// tighten. This runs on the developer's machine for their own MCP session.
|
|
32
|
+
const DOCS_FETCH_UA = 'extenshi-mcp (+https://docs.extenshi.io/developers/mcp)';
|
|
33
|
+
// Keyed by absolute URL so index and full text cache independently, and a
|
|
34
|
+
// custom EXTENSHI_DOCS_URL (local/staging) never collides with production.
|
|
35
|
+
const cache = new Map();
|
|
36
|
+
/** Monotonic-enough clock; isolated so tests can stay deterministic. */
|
|
37
|
+
function now() {
|
|
38
|
+
return Date.now();
|
|
39
|
+
}
|
|
40
|
+
async function fetchText(url) {
|
|
41
|
+
let res;
|
|
42
|
+
try {
|
|
43
|
+
res = await fetch(url, {
|
|
44
|
+
headers: { accept: 'text/plain', 'user-agent': DOCS_FETCH_UA },
|
|
45
|
+
signal: AbortSignal.timeout(FETCH_TIMEOUT_MS),
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
catch (err) {
|
|
49
|
+
const reason = err instanceof Error ? err.message : String(err);
|
|
50
|
+
throw new DocsError(`Could not reach the Extenshi docs at ${url} (${reason}).`);
|
|
51
|
+
}
|
|
52
|
+
if (!res.ok) {
|
|
53
|
+
throw new DocsError(`Extenshi docs request failed: ${res.status} ${res.statusText} (${url}).`);
|
|
54
|
+
}
|
|
55
|
+
return res.text();
|
|
56
|
+
}
|
|
57
|
+
/** Fetch `url` through the in-process TTL cache. */
|
|
58
|
+
async function fetchCached(url) {
|
|
59
|
+
const hit = cache.get(url);
|
|
60
|
+
if (hit && now() - hit.fetchedAt < CACHE_TTL_MS)
|
|
61
|
+
return hit.text;
|
|
62
|
+
const text = await fetchText(url);
|
|
63
|
+
cache.set(url, { text, fetchedAt: now() });
|
|
64
|
+
return text;
|
|
65
|
+
}
|
|
66
|
+
/** Clear the cache — test seam, also usable to force a refresh. */
|
|
67
|
+
export function clearDocsCache() {
|
|
68
|
+
cache.clear();
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Split `llms-full.txt` into per-page sections on top-level (`# `) headings.
|
|
72
|
+
* Fence-aware: a `# comment` inside a ``` code block is NOT a boundary, so CLI
|
|
73
|
+
* examples never get chopped in half.
|
|
74
|
+
*/
|
|
75
|
+
export function splitSections(full) {
|
|
76
|
+
const sections = [];
|
|
77
|
+
let title = '';
|
|
78
|
+
let lines = [];
|
|
79
|
+
let inFence = false;
|
|
80
|
+
const flush = () => {
|
|
81
|
+
if (title || lines.some((l) => l.trim())) {
|
|
82
|
+
sections.push({ title, body: lines.join('\n').trim() });
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
for (const line of full.split('\n')) {
|
|
86
|
+
if (/^\s*```/.test(line))
|
|
87
|
+
inFence = !inFence;
|
|
88
|
+
const h1 = !inFence ? /^#\s+(.+)$/.exec(line) : null;
|
|
89
|
+
if (h1) {
|
|
90
|
+
flush();
|
|
91
|
+
title = h1[1].trim();
|
|
92
|
+
lines = [];
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
95
|
+
lines.push(line);
|
|
96
|
+
}
|
|
97
|
+
flush();
|
|
98
|
+
return sections;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Tokenize a query two ways:
|
|
102
|
+
* - `words`: alphanumeric terms for broad recall — `review-risk` → review, risk
|
|
103
|
+
* - `phrases`: distinctive tokens that keep internal separators or are long
|
|
104
|
+
* (`review-risk`, `scan_extension`, `extenshi`) — high-precision
|
|
105
|
+
* signals for command and flag names that bare words dilute.
|
|
106
|
+
*/
|
|
107
|
+
function tokenize(query) {
|
|
108
|
+
const lower = query.toLowerCase();
|
|
109
|
+
const words = Array.from(new Set(lower.split(/[^a-z0-9]+/).filter((t) => t.length > 1)));
|
|
110
|
+
const phrases = Array.from(new Set(lower
|
|
111
|
+
.split(/\s+/)
|
|
112
|
+
.map((t) => t.replace(/^[^a-z0-9]+|[^a-z0-9]+$/g, ''))
|
|
113
|
+
.filter((t) => t.length > 1 && (/[-_.]/.test(t) || t.length >= 5))));
|
|
114
|
+
return { words, phrases };
|
|
115
|
+
}
|
|
116
|
+
/** Count non-overlapping occurrences of `needle` in `haystack`. */
|
|
117
|
+
function countOccurrences(haystack, needle) {
|
|
118
|
+
if (!needle)
|
|
119
|
+
return 0;
|
|
120
|
+
let count = 0;
|
|
121
|
+
let from = 0;
|
|
122
|
+
for (;;) {
|
|
123
|
+
const idx = haystack.indexOf(needle, from);
|
|
124
|
+
if (idx === -1)
|
|
125
|
+
return count;
|
|
126
|
+
count++;
|
|
127
|
+
from = idx + needle.length;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Rank sections against a query. A term in the title is worth more than one in
|
|
132
|
+
* the body. Pure (no I/O) so it is unit-testable with a fixture.
|
|
133
|
+
*/
|
|
134
|
+
export function rankSections(full, query, limit) {
|
|
135
|
+
const { words, phrases } = tokenize(query);
|
|
136
|
+
if (words.length === 0)
|
|
137
|
+
return [];
|
|
138
|
+
const scored = splitSections(full)
|
|
139
|
+
.map((section) => {
|
|
140
|
+
const title = section.title.toLowerCase();
|
|
141
|
+
const body = section.body.toLowerCase();
|
|
142
|
+
let score = 0;
|
|
143
|
+
for (const w of words) {
|
|
144
|
+
if (title.includes(w))
|
|
145
|
+
score += 5;
|
|
146
|
+
score += countOccurrences(body, w);
|
|
147
|
+
}
|
|
148
|
+
// Command/flag names (e.g. "review-risk") are strong, precise signals.
|
|
149
|
+
for (const p of phrases) {
|
|
150
|
+
if (title.includes(p))
|
|
151
|
+
score += 8;
|
|
152
|
+
score += countOccurrences(body, p) * 3;
|
|
153
|
+
}
|
|
154
|
+
return { section, score };
|
|
155
|
+
})
|
|
156
|
+
.filter((s) => s.score > 0)
|
|
157
|
+
.sort((a, b) => b.score - a.score);
|
|
158
|
+
return scored.slice(0, Math.max(1, limit)).map((s) => s.section);
|
|
159
|
+
}
|
|
160
|
+
/** Keep each returned section bounded; large enough to hold a full docs page. */
|
|
161
|
+
const MAX_SECTION_CHARS = 8000;
|
|
162
|
+
function clampSection(body) {
|
|
163
|
+
if (body.length <= MAX_SECTION_CHARS)
|
|
164
|
+
return body;
|
|
165
|
+
return `${body.slice(0, MAX_SECTION_CHARS).trimEnd()}\n\n…(section truncated — open the source link for the rest)`;
|
|
166
|
+
}
|
|
167
|
+
/** Fetch the docs index (`llms.txt`) — the page list returned when no query is given. */
|
|
168
|
+
export async function getDocsIndex(docsUrl) {
|
|
169
|
+
return fetchCached(`${docsUrl}/llms.txt`);
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Search the docs and return a formatted, LLM-friendly answer: the top matching
|
|
173
|
+
* sections, each with its source link. Falls back to a clear "nothing matched"
|
|
174
|
+
* note pointing at the index.
|
|
175
|
+
*/
|
|
176
|
+
export async function searchDocs(docsUrl, query, limit) {
|
|
177
|
+
const full = await fetchCached(`${docsUrl}/llms-full.txt`);
|
|
178
|
+
const matches = rankSections(full, query, limit);
|
|
179
|
+
if (matches.length === 0) {
|
|
180
|
+
return (`No documentation section matched "${query}". ` +
|
|
181
|
+
'Call search_docs with no query to list every available page, then read the relevant one.');
|
|
182
|
+
}
|
|
183
|
+
const blocks = matches.map((m) => `## ${m.title || 'Untitled'}\n\n${clampSection(m.body)}`);
|
|
184
|
+
return `Top ${matches.length} documentation section(s) for "${query}":\n\n${blocks.join('\n\n---\n\n')}`;
|
|
185
|
+
}
|
|
186
|
+
//# sourceMappingURL=docs.js.map
|
package/dist/docs.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docs.js","sourceRoot":"","sources":["../src/docs.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -19,6 +19,7 @@ import { FastMCP, UserError } from 'fastmcp';
|
|
|
19
19
|
import { z } from 'zod';
|
|
20
20
|
import { makeBff } from './bff.js';
|
|
21
21
|
import { loadConfig } from './config.js';
|
|
22
|
+
import { DocsError, getDocsIndex, searchDocs } from './docs.js';
|
|
22
23
|
import { PublishSetupError, publishArtifact, readStoreCredentials, validateStoreCredentials, } from './publish.js';
|
|
23
24
|
import { checkPublishAccess } from './publish-access.js';
|
|
24
25
|
import { ScanError, scanArtifact } from './scan.js';
|
|
@@ -59,9 +60,12 @@ const server = new FastMCP({
|
|
|
59
60
|
version: pkg.version,
|
|
60
61
|
instructions: 'Extenshi catalog tools for extension developers: search the cross-store catalog, ' +
|
|
61
62
|
'inspect an extension and its security findings, find competitors, read market stats, ' +
|
|
62
|
-
'
|
|
63
|
-
|
|
64
|
-
|
|
63
|
+
'run a pre-publish security scan, and publish to the stores. Use search_docs (free, no ' +
|
|
64
|
+
'key) to consult the live product documentation and the @extenshi/cli command reference — ' +
|
|
65
|
+
'prefer quoting exact CLI commands and flags from the docs over guessing. The catalog and ' +
|
|
66
|
+
`scan tools require an Extenshi API key (${KEY_PAGE}). Every account gets a free monthly ` +
|
|
67
|
+
'allowance — 25 reads and 5 scans per month; beyond it, buy prepaid credit packs (scans ' +
|
|
68
|
+
`and reads, never expire) at ${BILLING_PAGE}.`,
|
|
65
69
|
});
|
|
66
70
|
// ── Read tools (free; key required) ─────────────────────────────────────────
|
|
67
71
|
server.addTool({
|
|
@@ -209,6 +213,41 @@ server.addTool({
|
|
|
209
213
|
}
|
|
210
214
|
},
|
|
211
215
|
});
|
|
216
|
+
// ── Documentation (free; no API key required) ───────────────────────────────
|
|
217
|
+
server.addTool({
|
|
218
|
+
name: 'search_docs',
|
|
219
|
+
description: 'Search the official Extenshi documentation (docs.extenshi.io) — product guides plus the ' +
|
|
220
|
+
'full @extenshi/cli command reference (scan, review-risk, publish, login). Use it to answer ' +
|
|
221
|
+
'"how do I…" questions and to give developers exact CLI commands and flags instead of ' +
|
|
222
|
+
'guessing. Free: reads public docs, no API key or quota required. Omit the query to list ' +
|
|
223
|
+
'every available documentation page.',
|
|
224
|
+
parameters: z.object({
|
|
225
|
+
query: z
|
|
226
|
+
.string()
|
|
227
|
+
.optional()
|
|
228
|
+
.describe('What to look up, e.g. "scan a zip in CI", "review-risk flags", "publish to edge", "get an API key". Omit to list every page.'),
|
|
229
|
+
limit: z
|
|
230
|
+
.number()
|
|
231
|
+
.int()
|
|
232
|
+
.min(1)
|
|
233
|
+
.max(10)
|
|
234
|
+
.default(4)
|
|
235
|
+
.describe('Max documentation sections to return (1–10).'),
|
|
236
|
+
}),
|
|
237
|
+
execute: async (args) => {
|
|
238
|
+
try {
|
|
239
|
+
const query = args.query?.trim();
|
|
240
|
+
if (!query)
|
|
241
|
+
return await getDocsIndex(cfg.docsUrl);
|
|
242
|
+
return await searchDocs(cfg.docsUrl, query, args.limit ?? 4);
|
|
243
|
+
}
|
|
244
|
+
catch (err) {
|
|
245
|
+
if (err instanceof DocsError)
|
|
246
|
+
throw new UserError(err.message);
|
|
247
|
+
throw new UserError(err instanceof Error ? err.message : String(err));
|
|
248
|
+
}
|
|
249
|
+
},
|
|
250
|
+
});
|
|
212
251
|
// ── Action tool (paid; key required) ────────────────────────────────────────
|
|
213
252
|
server.addTool({
|
|
214
253
|
name: 'scan_extension',
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAC5C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAY,OAAO,EAAE,MAAM,UAAU,CAAA;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAC/D,OAAO,EACN,iBAAiB,EACjB,eAAe,EACf,oBAAoB,EACpB,wBAAwB,GACxB,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AACxD,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AACnD,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAEvE,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAC9C,MAAM,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAwB,CAAA;AAE7D,MAAM,QAAQ,GAAG,mCAAmC,CAAA;AACpD,MAAM,WAAW,GAAG,iCAAiC,CAAA;AACrD,MAAM,YAAY,GAAG,kCAAkC,CAAA;AAEvD,MAAM,mBAAmB,GACxB,iDAAiD;IACjD,GAAG,QAAQ,sBAAsB,WAAW,kCAAkC;IAC9E,4FAA4F,CAAA;AAE7F,MAAM,GAAG,GAAG,UAAU,EAAE,CAAA;AAExB,0EAA0E;AAC1E,SAAS,UAAU;IAClB,IAAI,CAAC,GAAG,CAAC,MAAM;QAAE,MAAM,IAAI,SAAS,CAAC,mBAAmB,CAAC,CAAA;IACzD,OAAO,GAAG,CAAC,MAAM,CAAA;AAClB,CAAC;AAED,+EAA+E;AAC/E,SAAS,GAAG;IACX,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,CAAA;AACzC,CAAC;AAED,gEAAgE;AAChE,SAAS,SAAS,CAAC,GAAY;IAC9B,IAAI,GAAG,YAAY,SAAS;QAAE,MAAM,GAAG,CAAA;IACvC,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IAChE,2EAA2E;IAC3E,IAAI,2BAA2B,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC/C,MAAM,IAAI,SAAS,CAAC,sBAAsB,OAAO,OAAO,mBAAmB,EAAE,CAAC,CAAA;IAC/E,CAAC;IACD,MAAM,IAAI,SAAS,CAAC,OAAO,CAAC,CAAA;AAC7B,CAAC;AAED,MAAM,MAAM,GAAG,IAAI,OAAO,CAAC;IAC1B,IAAI,EAAE,UAAU;IAChB,2FAA2F;IAC3F,OAAO,EAAE,GAAG,CAAC,OAA0C;IACvD,YAAY,EACX,mFAAmF;QACnF,uFAAuF;QACvF,wFAAwF;QACxF,2FAA2F;QAC3F,2FAA2F;QAC3F,2CAA2C,QAAQ,uCAAuC;QAC1F,yFAAyF;QACzF,+BAA+B,YAAY,GAAG;CAC/C,CAAC,CAAA;AAEF,+EAA+E;AAE/E,MAAM,CAAC,OAAO,CAAC;IACd,IAAI,EAAE,mBAAmB;IACzB,WAAW,EACV,0FAA0F;QAC1F,oFAAoF;QACpF,sEAAsE;IACvE,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uDAAuD,CAAC;QAC9F,MAAM,EAAE,CAAC;aACP,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;aAC5C,QAAQ,EAAE;aACV,QAAQ,CAAC,gDAAgD,CAAC;QAC5D,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;QACzF,OAAO,EAAE,CAAC;aACR,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,kBAAkB,EAAE,cAAc,CAAC,CAAC,CAAC;aACvE,QAAQ,EAAE;aACV,QAAQ,CAAC,4BAA4B,CAAC;QACxC,IAAI,EAAE,CAAC;aACL,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;aAC5D,QAAQ,EAAE;aACV,QAAQ,CAAC,6BAA6B,CAAC;QACzC,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+CAA+C,CAAC;QACrG,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;QAC9C,MAAM,EAAE,CAAC;aACP,IAAI,CAAC,CAAC,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;aACpE,QAAQ,EAAE;aACV,QAAQ,CAAC,oEAAoE,CAAC;QAChF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,+BAA+B,CAAC;KAC5F,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACvB,IAAI,CAAC;YACJ,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAA;YAC9B,MAAM,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,gBAAgB,CAAC;gBAC3C,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,aAAa,EAAE,IAAI,CAAC,OAAO;gBAC3B,cAAc,EAAE,IAAI,CAAC,IAAI;gBACzB,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;gBAC7D,IAAI,EAAE,KAAK;aACX,CAAC,CAAA;YACF,OAAO,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;QAC3D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,OAAO,SAAS,CAAC,GAAG,CAAC,CAAA;QACtB,CAAC;IACF,CAAC;CACD,CAAC,CAAA;AAEF,MAAM,CAAC,OAAO,CAAC;IACd,IAAI,EAAE,eAAe;IACrB,WAAW,EACV,iFAAiF;QACjF,sEAAsE;IACvE,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,sDAAsD,CAAC;KAC/F,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACvB,IAAI,CAAC;YACJ,MAAM,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;YAC9D,IAAI,CAAC,MAAM;gBAAE,MAAM,IAAI,SAAS,CAAC,sCAAsC,IAAI,CAAC,YAAY,GAAG,CAAC,CAAA;YAC5F,OAAO,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;QACvD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,OAAO,SAAS,CAAC,GAAG,CAAC,CAAA;QACtB,CAAC;IACF,CAAC;CACD,CAAC,CAAA;AAEF,MAAM,CAAC,OAAO,CAAC;IACd,IAAI,EAAE,cAAc;IACpB,WAAW,EACV,qFAAqF;QACrF,wFAAwF;QACxF,wFAAwF;QACxF,mFAAmF;QACnF,kFAAkF;IACnF,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;KAC9D,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACvB,IAAI,CAAC;YACJ,MAAM,MAAM,GAAG,GAAG,EAAE,CAAA;YACpB,yEAAyE;YACzE,qEAAqE;YACrE,uEAAuE;YACvE,MAAM,CAAC,QAAQ,EAAE,WAAW,EAAE,SAAS,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBAC5D,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;gBAC3D,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;gBAC1D,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;aAC5D,CAAC,CAAA;YACF,MAAM,oBAAoB,GACzB,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ;gBACzC,CAAC,CAAE,SAAqC,CAAC,oBAAoB;gBAC7D,CAAC,CAAC,IAAI,CAAA;YACR,OAAO,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,QAAQ,EAAE,WAAW,EAAE,oBAAoB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;QAC3F,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,OAAO,SAAS,CAAC,GAAG,CAAC,CAAA;QACtB,CAAC;IACF,CAAC;CACD,CAAC,CAAA;AAEF,MAAM,CAAC,OAAO,CAAC;IACd,IAAI,EAAE,wBAAwB;IAC9B,WAAW,EACV,mFAAmF;QACnF,qCAAqC;IACtC,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;QAC9D,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,oCAAoC,CAAC;KAChG,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACvB,IAAI,CAAC;YACJ,MAAM,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,CAAA;YACnF,OAAO,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;QACrE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,OAAO,SAAS,CAAC,GAAG,CAAC,CAAA;QACtB,CAAC;IACF,CAAC;CACD,CAAC,CAAA;AAEF,MAAM,CAAC,OAAO,CAAC;IACd,IAAI,EAAE,iBAAiB;IACvB,WAAW,EACV,uFAAuF;QACvF,8EAA8E;IAC/E,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;QACpF,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;QACjE,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;KAC1C,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACvB,IAAI,CAAC;YACJ,MAAM,MAAM,GAAG,GAAG,EAAE,CAAA;YACpB,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBACzC,MAAM,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;gBACnC,MAAM;qBACJ,eAAe,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;qBACxF,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;aACnB,CAAC,CAAA;YACF,OAAO,IAAI,CAAC,SAAS,CACpB;gBACC,KAAK,EAAE,KAAK,IAAI,SAAS;gBACzB,MAAM,EAAE,MAAM,IAAI,SAAS;aAC3B,EACD,IAAI,EACJ,CAAC,CACD,CAAA;QACF,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,OAAO,SAAS,CAAC,GAAG,CAAC,CAAA;QACtB,CAAC;IACF,CAAC;CACD,CAAC,CAAA;AAEF,+EAA+E;AAE/E,MAAM,CAAC,OAAO,CAAC;IACd,IAAI,EAAE,aAAa;IACnB,WAAW,EACV,0FAA0F;QAC1F,6FAA6F;QAC7F,uFAAuF;QACvF,0FAA0F;QAC1F,qCAAqC;IACtC,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,KAAK,EAAE,CAAC;aACN,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CACR,8HAA8H,CAC9H;QACF,KAAK,EAAE,CAAC;aACN,MAAM,EAAE;aACR,GAAG,EAAE;aACL,GAAG,CAAC,CAAC,CAAC;aACN,GAAG,CAAC,EAAE,CAAC;aACP,OAAO,CAAC,CAAC,CAAC;aACV,QAAQ,CAAC,8CAA8C,CAAC;KAC1D,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACvB,IAAI,CAAC;YACJ,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,CAAA;YAChC,IAAI,CAAC,KAAK;gBAAE,OAAO,MAAM,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;YAClD,OAAO,MAAM,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,CAAA;QAC7D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,IAAI,GAAG,YAAY,SAAS;gBAAE,MAAM,IAAI,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;YAC9D,MAAM,IAAI,SAAS,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;QACtE,CAAC;IACF,CAAC;CACD,CAAC,CAAA;AAEF,+EAA+E;AAE/E,MAAM,CAAC,OAAO,CAAC;IACd,IAAI,EAAE,gBAAgB;IACtB,WAAW,EACV,qFAAqF;QACrF,yFAAyF;QACzF,8EAA8E;IAC/E,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qEAAqE,CAAC;QACzG,YAAY,EAAE,CAAC;aACb,MAAM,EAAE;aACR,GAAG,EAAE;aACL,QAAQ,EAAE;aACV,QAAQ,CAAC,2EAA2E,CAAC;KACvF,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE;QAC3C,MAAM,MAAM,GAAG,UAAU,EAAE,CAAA;QAC3B,IAAI,CAAC;YACJ,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC;gBACjC,YAAY,EAAE,IAAI,CAAC,aAAa;gBAChC,MAAM;gBACN,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,WAAW,EAAE,IAAI,CAAC,YAAY,EAAE,QAAQ,EAAE;gBAC1C,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE;oBACjB,IAAI,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;wBAChD,KAAK,cAAc,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,SAAS,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAA;oBACpE,CAAC;gBACF,CAAC;aACD,CAAC,CAAA;YACF,OAAO,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;QACvD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,IAAI,GAAG,YAAY,SAAS;gBAAE,MAAM,IAAI,SAAS,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAA;YACxE,MAAM,GAAG,CAAA;QACV,CAAC;IACF,CAAC;CACD,CAAC,CAAA;AAEF,MAAM,CAAC,OAAO,CAAC;IACd,IAAI,EAAE,mBAAmB;IACzB,WAAW,EACV,wGAAwG;QACxG,iGAAiG;QACjG,mGAAmG;QACnG,kFAAkF;QAClF,qGAAqG;QACrG,2GAA2G;QAC3G,uFAAuF;QACvF,uDAAuD;IACxD,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,aAAa,EAAE,CAAC;aACd,MAAM,EAAE;aACR,QAAQ,CAAC,+EAA+E,CAAC;QAC3F,MAAM,EAAE,CAAC;aACP,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;aAC5C,QAAQ,EAAE;aACV,QAAQ,CAAC,0FAA0F,CAAC;QACtG,qBAAqB,EAAE,CAAC;aACtB,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,8DAA8D,CAAC;QAC1E,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;QAC3F,YAAY,EAAE,CAAC;aACb,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,kFAAkF,CAAC;QAC9F,aAAa,EAAE,CAAC;aACd,OAAO,EAAE;aACT,QAAQ,EAAE;aACV,QAAQ,CAAC,+EAA+E,CAAC;KAC3F,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE;QAC3C,IAAI,CAAC;YACJ,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;gBACxB,MAAM,MAAM,GAAG,MAAM,wBAAwB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;gBAC1D,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;YAC3C,CAAC;YAED,wEAAwE;YACxE,2EAA2E;YAC3E,qEAAqE;YACrE,oDAAoD;YACpD,MAAM,KAAK,GAAG,oBAAoB,EAAE,CAAA;YACpC,MAAM,QAAQ,GAA2D,EAAE,CAAA;YAC3E,IAAI,KAAK,CAAC,MAAM;gBAAE,QAAQ,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAA;YACtD,IAAI,KAAK,CAAC,OAAO;gBAAE,QAAQ,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAA;YAC7D,IAAI,KAAK,CAAC,IAAI;gBAAE,QAAQ,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAA;YACpD,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC;gBACvC,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,QAAQ;gBACR,WAAW,EAAE,IAAI,CAAC,YAAY;aAC9B,CAAC,CAAA;YACF,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACrB,MAAM,IAAI,SAAS,CAClB,MAAM,CAAC,OAAO;oBACb,oFAAoF,CACrF,CAAA;YACF,CAAC;YAED,KAAK,cAAc,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAA;YAC9C,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC;gBACpC,YAAY,EAAE,IAAI,CAAC,aAAa;gBAChC,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,mBAAmB,EAAE,IAAI,CAAC,qBAAqB;gBAC/C,YAAY,EAAE,IAAI,CAAC,aAAa;aAChC,CAAC,CAAA;YACF,KAAK,cAAc,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAA;YAC9C,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;QACvC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,IAAI,GAAG,YAAY,iBAAiB;gBAAE,MAAM,IAAI,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;YACtE,MAAM,GAAG,CAAA;QACV,CAAC;IACF,CAAC;CACD,CAAC,CAAA;AAEF,6DAA6D;AAC7D,SAAS,gBAAgB,CAAC,GAAc;IACvC,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC;QACpB,KAAK,GAAG;YACP,OAAO,0BAA0B,GAAG,CAAC,OAAO,OAAO,mBAAmB,EAAE,CAAA;QACzE,KAAK,GAAG;YACP,OAAO,2CAA2C,YAAY,uDAAuD,CAAA;QACtH,KAAK,GAAG;YACP,oEAAoE;YACpE,sEAAsE;YACtE,IAAI,GAAG,CAAC,SAAS,KAAK,qBAAqB,IAAI,GAAG,CAAC,SAAS,KAAK,kCAAkC,EAAE,CAAC;gBACrG,OAAO,GAAG,GAAG,CAAC,OAAO,0BAA0B,YAAY,+BAA+B,CAAA;YAC3F,CAAC;YACD,OAAO,kBAAkB,GAAG,CAAC,OAAO,EAAE,CAAA;QACvC,KAAK,GAAG;YACP,OAAO,uBAAuB,GAAG,CAAC,aAAa,IAAI,EAAE,wBAAwB,CAAA;QAC9E;YACC,OAAO,GAAG,CAAC,OAAO,CAAA;IACpB,CAAC;AACF,CAAC;AAED,MAAM,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC,CAAA"}
|
package/dist/publish.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publish.d.ts","sourceRoot":"","sources":["../src/publish.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAKN,KAAK,SAAS,EACd,KAAK,sBAAsB,EAC3B,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"publish.d.ts","sourceRoot":"","sources":["../src/publish.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAKN,KAAK,SAAS,EACd,KAAK,sBAAsB,EAC3B,MAAM,qBAAqB,CAAA;AAG5B,MAAM,WAAW,gBAAgB;IAChC,MAAM,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAA;IACxF,OAAO,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAA;IACrE,IAAI,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAA;CACtF;AAED,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,CAIhD,CAAA;AAED,wBAAgB,oBAAoB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,gBAAgB,CA0B3F;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAE3D;AAED,MAAM,WAAW,WAAW;IAC3B,YAAY,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,SAAS,EAAE,CAAA;IACpB,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,qBAAa,iBAAkB,SAAQ,KAAK;CAAG;AAE/C,wBAAsB,eAAe,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAgDxF;AAED,wBAAsB,wBAAwB,CAC7C,MAAM,CAAC,EAAE,SAAS,EAAE,GAClB,OAAO,CAAC,KAAK,CAAC;IAAE,KAAK,EAAE,SAAS,CAAC;IAAC,UAAU,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAC,CAAC,CA4B3E"}
|
package/dist/publish.js
CHANGED
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
*/
|
|
9
9
|
import * as fs from 'node:fs';
|
|
10
10
|
import { ChromeAPI, EdgeAPI, FirefoxAPI, publishToStores, } from '@extenshi/publisher';
|
|
11
|
+
import { assertValidArtifact } from './validate-artifact.js';
|
|
11
12
|
export const ENV_DOCS = {
|
|
12
13
|
chrome: ['CHROME_APP_ID', 'CHROME_CLIENT_ID', 'CHROME_CLIENT_SECRET', 'CHROME_REFRESH_TOKEN'],
|
|
13
14
|
firefox: ['FIREFOX_ADDON_GUID', 'FIREFOX_JWT_ISSUER', 'FIREFOX_JWT_SECRET'],
|
|
@@ -52,6 +53,15 @@ export async function publishArtifact(args) {
|
|
|
52
53
|
if (args.firefoxArtifactPath && !fs.existsSync(args.firefoxArtifactPath)) {
|
|
53
54
|
throw new PublishSetupError(`Firefox artifact not found: ${args.firefoxArtifactPath}`);
|
|
54
55
|
}
|
|
56
|
+
// Refuse to upload anything that isn't a real extension package.
|
|
57
|
+
try {
|
|
58
|
+
assertValidArtifact(args.artifactPath);
|
|
59
|
+
if (args.firefoxArtifactPath)
|
|
60
|
+
assertValidArtifact(args.firefoxArtifactPath);
|
|
61
|
+
}
|
|
62
|
+
catch (err) {
|
|
63
|
+
throw new PublishSetupError(err instanceof Error ? err.message : String(err));
|
|
64
|
+
}
|
|
55
65
|
const creds = readStoreCredentials();
|
|
56
66
|
const configured = ['chrome', 'firefox', 'edge'].filter((s) => creds[s]);
|
|
57
67
|
const stores = args.stores?.length ? args.stores : configured;
|
package/dist/publish.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publish.js","sourceRoot":"","sources":["../src/publish.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAA;AAC7B,OAAO,EACN,SAAS,EACT,OAAO,EACP,UAAU,EACV,eAAe,GAGf,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"publish.js","sourceRoot":"","sources":["../src/publish.ts"],"names":[],"mappings":"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"}
|
package/dist/scan.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../src/scan.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;
|
|
1
|
+
{"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../src/scan.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAWH,MAAM,WAAW,YAAY;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,GAAG,CAAC,EAAE,MAAM,CAAA;CACZ;AAED,MAAM,WAAW,mBAAmB;IACnC,YAAY,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,MAAM,CAAA;IACd,gFAAgF;IAChF,OAAO,EAAE,MAAM,CAAA;IACf,uFAAuF;IACvF,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,2EAA2E;IAC3E,UAAU,CAAC,EAAE,CAAC,CAAC,EAAE,YAAY,KAAK,IAAI,CAAA;CACtC;AAED,kFAAkF;AAClF,qBAAa,SAAU,SAAQ,KAAK;IACnC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,aAAa,CAAC,EAAE,MAAM,CAAA;gBAEV,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAAO;CAOvG;AAED,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAEhD,wBAAsB,YAAY,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,UAAU,CAAC,CAwDjF"}
|
package/dist/scan.js
CHANGED
|
@@ -16,6 +16,7 @@ import fs from 'node:fs';
|
|
|
16
16
|
import path from 'node:path';
|
|
17
17
|
import { FormData, fetch } from 'undici';
|
|
18
18
|
import { parseSseFrames } from './sse.js';
|
|
19
|
+
import { assertValidArtifact } from './validate-artifact.js';
|
|
19
20
|
const SCAN_TIMEOUT_MS = 240_000;
|
|
20
21
|
const MAX_ARTIFACT_BYTES = 50 * 1024 * 1024;
|
|
21
22
|
/** A scan failure that carries the HTTP status and the backend's machine code. */
|
|
@@ -43,6 +44,13 @@ export async function scanArtifact(opts) {
|
|
|
43
44
|
if (stats.size > MAX_ARTIFACT_BYTES) {
|
|
44
45
|
throw new ScanError(`Artifact exceeds 50 MB limit (${(stats.size / 1024 / 1024).toFixed(1)} MB)`);
|
|
45
46
|
}
|
|
47
|
+
// Refuse non-extension files (executables, scripts, …) before uploading.
|
|
48
|
+
try {
|
|
49
|
+
assertValidArtifact(artifactPath);
|
|
50
|
+
}
|
|
51
|
+
catch (err) {
|
|
52
|
+
throw new ScanError(err instanceof Error ? err.message : String(err));
|
|
53
|
+
}
|
|
46
54
|
const form = new FormData();
|
|
47
55
|
form.append('apiKey', apiKey);
|
|
48
56
|
form.append('artifact', new File([fs.readFileSync(artifactPath)], path.basename(artifactPath)));
|
package/dist/scan.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scan.js","sourceRoot":"","sources":["../src/scan.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAiB,MAAM,QAAQ,CAAA;AACvD,OAAO,EAAE,cAAc,EAAiB,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"scan.js","sourceRoot":"","sources":["../src/scan.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Artifact safety gate — shared by the `scan_extension` and `publish_extension`
|
|
3
|
+
* MCP tools.
|
|
4
|
+
*
|
|
5
|
+
* Before we read an extension package into memory, upload it to the scan
|
|
6
|
+
* backend, or push it to a store, we confirm it really is an extension
|
|
7
|
+
* archive:
|
|
8
|
+
*
|
|
9
|
+
* 1. the filename extension is one of .crx / .xpi / .zip, AND
|
|
10
|
+
* 2. the file's leading bytes are a ZIP (`PK\x03\x04`, or the empty-archive
|
|
11
|
+
* marker `PK\x05\x06`) or a CRX (`Cr24`) container — an .xpi is a ZIP.
|
|
12
|
+
*
|
|
13
|
+
* Anything else — an ELF/PE/Mach-O executable, a shell script, a gzip stream,
|
|
14
|
+
* an HTML error page — is refused outright: we never upload it or hand it on.
|
|
15
|
+
* The scan server enforces the same rule at its own boundary; this is a fast,
|
|
16
|
+
* local, defence-in-depth check so a non-extension never leaves the machine.
|
|
17
|
+
*
|
|
18
|
+
* This module is intentionally vendored (copied) into both @extenshi/cli and
|
|
19
|
+
* @extenshi/mcp rather than shared — npm rejects `workspace:*`, so each package
|
|
20
|
+
* stays independently publishable.
|
|
21
|
+
*/
|
|
22
|
+
/**
|
|
23
|
+
* Throw unless `artifactPath` is a real extension package (.crx/.xpi/.zip whose
|
|
24
|
+
* leading bytes are a ZIP or CRX archive). Call this before reading, uploading,
|
|
25
|
+
* or publishing the file. Assumes the path already exists and is a regular file.
|
|
26
|
+
*/
|
|
27
|
+
export declare function assertValidArtifact(artifactPath: string): void;
|
|
28
|
+
//# sourceMappingURL=validate-artifact.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate-artifact.d.ts","sourceRoot":"","sources":["../src/validate-artifact.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAgDH;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CA6B9D"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Artifact safety gate — shared by the `scan_extension` and `publish_extension`
|
|
3
|
+
* MCP tools.
|
|
4
|
+
*
|
|
5
|
+
* Before we read an extension package into memory, upload it to the scan
|
|
6
|
+
* backend, or push it to a store, we confirm it really is an extension
|
|
7
|
+
* archive:
|
|
8
|
+
*
|
|
9
|
+
* 1. the filename extension is one of .crx / .xpi / .zip, AND
|
|
10
|
+
* 2. the file's leading bytes are a ZIP (`PK\x03\x04`, or the empty-archive
|
|
11
|
+
* marker `PK\x05\x06`) or a CRX (`Cr24`) container — an .xpi is a ZIP.
|
|
12
|
+
*
|
|
13
|
+
* Anything else — an ELF/PE/Mach-O executable, a shell script, a gzip stream,
|
|
14
|
+
* an HTML error page — is refused outright: we never upload it or hand it on.
|
|
15
|
+
* The scan server enforces the same rule at its own boundary; this is a fast,
|
|
16
|
+
* local, defence-in-depth check so a non-extension never leaves the machine.
|
|
17
|
+
*
|
|
18
|
+
* This module is intentionally vendored (copied) into both @extenshi/cli and
|
|
19
|
+
* @extenshi/mcp rather than shared — npm rejects `workspace:*`, so each package
|
|
20
|
+
* stays independently publishable.
|
|
21
|
+
*/
|
|
22
|
+
import fs from 'node:fs';
|
|
23
|
+
import path from 'node:path';
|
|
24
|
+
const ALLOWED_EXTENSIONS = new Set(['.crx', '.xpi', '.zip']);
|
|
25
|
+
/** Compare the head buffer against a byte signature. */
|
|
26
|
+
function startsWith(head, sig) {
|
|
27
|
+
if (head.length < sig.length)
|
|
28
|
+
return false;
|
|
29
|
+
for (let i = 0; i < sig.length; i++) {
|
|
30
|
+
if (head[i] !== sig[i])
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
35
|
+
/** A ZIP local-file header `PK\x03\x04` or the empty-archive marker `PK\x05\x06`. */
|
|
36
|
+
function isZip(head) {
|
|
37
|
+
return startsWith(head, [0x50, 0x4b, 0x03, 0x04]) || startsWith(head, [0x50, 0x4b, 0x05, 0x06]);
|
|
38
|
+
}
|
|
39
|
+
/** The Chrome/Edge CRX container magic `Cr24`. */
|
|
40
|
+
function isCrx(head) {
|
|
41
|
+
return startsWith(head, [0x43, 0x72, 0x32, 0x34]);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Best-effort label for a clearer refusal message. NOT the security gate — the
|
|
45
|
+
* ZIP/CRX allow-list is. We only reach here for a file that is already rejected.
|
|
46
|
+
*/
|
|
47
|
+
function sniffNonArchive(head) {
|
|
48
|
+
const signatures = [
|
|
49
|
+
[[0x7f, 0x45, 0x4c, 0x46], 'an ELF executable'],
|
|
50
|
+
[[0x4d, 0x5a], 'a Windows PE executable'],
|
|
51
|
+
[[0xfe, 0xed, 0xfa, 0xce], 'a Mach-O executable'],
|
|
52
|
+
[[0xfe, 0xed, 0xfa, 0xcf], 'a Mach-O executable'],
|
|
53
|
+
[[0xce, 0xfa, 0xed, 0xfe], 'a Mach-O executable'],
|
|
54
|
+
[[0xcf, 0xfa, 0xed, 0xfe], 'a Mach-O executable'],
|
|
55
|
+
[[0xca, 0xfe, 0xba, 0xbe], 'a Mach-O or fat binary'],
|
|
56
|
+
[[0x23, 0x21], 'a script'],
|
|
57
|
+
[[0x1f, 0x8b], 'a gzip stream'],
|
|
58
|
+
];
|
|
59
|
+
for (const [sig, label] of signatures) {
|
|
60
|
+
if (startsWith(head, sig))
|
|
61
|
+
return label;
|
|
62
|
+
}
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Throw unless `artifactPath` is a real extension package (.crx/.xpi/.zip whose
|
|
67
|
+
* leading bytes are a ZIP or CRX archive). Call this before reading, uploading,
|
|
68
|
+
* or publishing the file. Assumes the path already exists and is a regular file.
|
|
69
|
+
*/
|
|
70
|
+
export function assertValidArtifact(artifactPath) {
|
|
71
|
+
const ext = path.extname(artifactPath).toLowerCase();
|
|
72
|
+
if (!ALLOWED_EXTENSIONS.has(ext)) {
|
|
73
|
+
throw new Error(`Unsupported artifact type "${ext || '(no extension)'}". ` +
|
|
74
|
+
'Provide a packaged extension: .crx (Chrome/Edge), .xpi (Firefox), or .zip.');
|
|
75
|
+
}
|
|
76
|
+
// Read just the first 8 bytes — enough to identify the container.
|
|
77
|
+
const head = Buffer.alloc(8);
|
|
78
|
+
const fd = fs.openSync(artifactPath, 'r');
|
|
79
|
+
let bytesRead = 0;
|
|
80
|
+
try {
|
|
81
|
+
bytesRead = fs.readSync(fd, head, 0, 8, 0);
|
|
82
|
+
}
|
|
83
|
+
finally {
|
|
84
|
+
fs.closeSync(fd);
|
|
85
|
+
}
|
|
86
|
+
const leading = head.subarray(0, bytesRead);
|
|
87
|
+
if (isZip(leading) || isCrx(leading))
|
|
88
|
+
return;
|
|
89
|
+
const detected = sniffNonArchive(leading);
|
|
90
|
+
throw new Error(`"${path.basename(artifactPath)}" is not a valid extension package — its contents are ` +
|
|
91
|
+
'not a ZIP or CRX archive' +
|
|
92
|
+
(detected ? ` (looks like ${detected})` : '') +
|
|
93
|
+
'. Refusing to process it.');
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=validate-artifact.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate-artifact.js","sourceRoot":"","sources":["../src/validate-artifact.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED