@micropage-sh/mcp 0.1.2 → 0.1.3
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 +11 -0
- package/dist/client/assets.d.ts +26 -8
- package/dist/client/assets.js +54 -116
- package/dist/client/assets.js.map +1 -1
- package/dist/client/auth-provider.d.ts +9 -3
- package/dist/client/auth-provider.js +11 -0
- package/dist/client/auth-provider.js.map +1 -1
- package/dist/client/bearer-auth.d.ts +16 -0
- package/dist/client/bearer-auth.js +24 -0
- package/dist/client/bearer-auth.js.map +1 -0
- package/dist/client/deploy-token.d.ts +6 -0
- package/dist/client/deploy-token.js +10 -4
- package/dist/client/deploy-token.js.map +1 -1
- package/dist/client/errors.d.ts +1 -1
- package/dist/client/errors.js.map +1 -1
- package/dist/client/http.d.ts +4 -0
- package/dist/client/http.js +7 -4
- package/dist/client/http.js.map +1 -1
- package/dist/client/ip.d.ts +12 -0
- package/dist/client/ip.js +93 -0
- package/dist/client/ip.js.map +1 -0
- package/dist/client/session-store.d.ts +3 -2
- package/dist/client/session-store.js +5 -1
- package/dist/client/session-store.js.map +1 -1
- package/dist/client/tier.d.ts +23 -3
- package/dist/client/tier.js +56 -17
- package/dist/client/tier.js.map +1 -1
- package/dist/context.d.ts +43 -7
- package/dist/guards.d.ts +11 -10
- package/dist/guards.js +21 -19
- package/dist/guards.js.map +1 -1
- package/dist/hints.d.ts +46 -0
- package/dist/hints.js +70 -0
- package/dist/hints.js.map +1 -0
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/node/deps.d.ts +26 -0
- package/dist/node/deps.js +51 -0
- package/dist/node/deps.js.map +1 -0
- package/dist/node/host-lookup.d.ts +3 -0
- package/dist/node/host-lookup.js +4 -0
- package/dist/node/host-lookup.js.map +1 -0
- package/dist/node/path-source.d.ts +3 -0
- package/dist/node/path-source.js +28 -0
- package/dist/node/path-source.js.map +1 -0
- package/dist/reference/prompts.d.ts +2 -1
- package/dist/reference/prompts.js +4 -3
- package/dist/reference/prompts.js.map +1 -1
- package/dist/reference.d.ts +1 -1
- package/dist/reference.js +2 -2
- package/dist/reference.js.map +1 -1
- package/dist/server.d.ts +4 -19
- package/dist/server.js +27 -33
- package/dist/server.js.map +1 -1
- package/dist/tools/account.d.ts +1 -0
- package/dist/tools/account.js +8 -8
- package/dist/tools/account.js.map +1 -1
- package/dist/tools/files.d.ts +15 -6
- package/dist/tools/files.js +63 -45
- package/dist/tools/files.js.map +1 -1
- package/dist/tools/forms.js +1 -1
- package/dist/tools/forms.js.map +1 -1
- package/dist/tools/posts.d.ts +2 -3
- package/dist/tools/posts.js +15 -16
- package/dist/tools/posts.js.map +1 -1
- package/dist/tools/projects.js +2 -2
- package/dist/tools/projects.js.map +1 -1
- package/dist/tools/shared.d.ts +1 -1
- package/dist/tools/shared.js +1 -1
- package/dist/tools/shared.js.map +1 -1
- package/dist/version.d.ts +2 -2
- package/dist/version.js +6 -7
- package/dist/version.js.map +1 -1
- package/package.json +6 -3
package/README.md
CHANGED
|
@@ -29,6 +29,17 @@ For other clients, run `npx -y @micropage-sh/mcp` over stdio:
|
|
|
29
29
|
|
|
30
30
|
Emailing subscribers, deleting projects and reading form submissions are off by default. Turn them on with `MICROPAGE_MCP_ALLOW_SEND=1`, `MICROPAGE_MCP_ALLOW_DELETE=1` and `MICROPAGE_MCP_SUBMISSIONS=1`. For headless use, set `MICROPAGE_DEPLOY_TOKEN` and `MICROPAGE_DEPLOY_PROJECT` instead of logging in. See [Install](https://docs.micropage.sh/docs/mcp/install/) and [Safety](https://docs.micropage.sh/docs/mcp/safety/).
|
|
31
31
|
|
|
32
|
+
## Hosted server
|
|
33
|
+
|
|
34
|
+
micropage also hosts this server at `https://mcp.micropage.sh/mcp`. Clients connect over streamable HTTP and sign in with OAuth through the micropage account, so nothing is installed locally. Dynamic client registration is off, so each client uses a pre-registered client ID. Claude Code:
|
|
35
|
+
|
|
36
|
+
```sh
|
|
37
|
+
claude mcp add --transport http --client-id f1176948-266f-42af-9fe6-b285e023421c --callback-port 33418 \
|
|
38
|
+
micropage https://mcp.micropage.sh/mcp
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
The setup for claude.ai and Claude Desktop, the per-connection permissions, and the deploy-token headers for headless use are in [Hosted server](https://docs.micropage.sh/docs/mcp/remote/).
|
|
42
|
+
|
|
32
43
|
## Development
|
|
33
44
|
|
|
34
45
|
See [DEVELOPMENT.md](DEVELOPMENT.md) for working on the server and [PUBLISHING.md](PUBLISHING.md) for releases.
|
package/dist/client/assets.d.ts
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
|
+
import { MicropageError } from "./errors.js";
|
|
1
2
|
import type { FetchLike, Http } from "./http.js";
|
|
3
|
+
import { isPrivateAddress } from "./ip.js";
|
|
4
|
+
export { isPrivateAddress };
|
|
2
5
|
/** Same extensions and types as the CLI (cli/src/mime.js); upload-file stores whatever type it is sent. */
|
|
3
6
|
export declare const ASSET_MIME_TYPES: Readonly<Record<string, string>>;
|
|
4
7
|
export declare const MAX_ASSET_BYTES: number;
|
|
@@ -25,26 +28,41 @@ export type AssetSource = {
|
|
|
25
28
|
} | {
|
|
26
29
|
base64: string;
|
|
27
30
|
};
|
|
31
|
+
/** Reads a `{path}` source, refusing anything over maxBytes. Only a local server has one. */
|
|
32
|
+
export type PathLoader = (path: string, maxBytes: number) => Promise<Uint8Array>;
|
|
28
33
|
export interface LoadSourceOptions {
|
|
29
34
|
/** Used for `{url}` sources only; never sent micropage credentials. */
|
|
30
35
|
fetch?: FetchLike;
|
|
31
|
-
/**
|
|
32
|
-
|
|
36
|
+
/**
|
|
37
|
+
* Resolves `{url}` hostnames before each fetch so private addresses are
|
|
38
|
+
* refused. Without one only IP-literal hosts and the denylist are checked,
|
|
39
|
+
* which is enough only where fetch itself cannot reach private networks.
|
|
40
|
+
*/
|
|
41
|
+
lookup?: HostLookup | null;
|
|
42
|
+
/** Hostnames never fetched, checked on every redirect hop. */
|
|
43
|
+
deniedHosts?: HostDenylist;
|
|
44
|
+
/** Without one, `{path}` sources are refused. */
|
|
45
|
+
pathLoader?: PathLoader;
|
|
33
46
|
maxBytes?: number;
|
|
34
47
|
timeoutMs?: number;
|
|
35
48
|
}
|
|
49
|
+
export declare function assetTooLarge(size: number | string, maxBytes: number): MicropageError;
|
|
36
50
|
export declare function loadAssetSource(source: AssetSource, options?: LoadSourceOptions): Promise<Buffer>;
|
|
37
51
|
export type HostLookup = (hostname: string) => Promise<ReadonlyArray<{
|
|
38
52
|
address: string;
|
|
39
53
|
family: number;
|
|
40
54
|
}>>;
|
|
41
|
-
/**
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
55
|
+
/**
|
|
56
|
+
* Hostnames `{url}` sources must not fetch. `exact` matches the host only;
|
|
57
|
+
* a `suffixes` entry matches the domain itself and every subdomain of it
|
|
58
|
+
* ("example.com" covers example.com and a.b.example.com, not badexample.com).
|
|
59
|
+
* Case and a trailing dot are ignored.
|
|
60
|
+
*/
|
|
61
|
+
export interface HostDenylist {
|
|
62
|
+
exact?: ReadonlyArray<string>;
|
|
63
|
+
suffixes?: ReadonlyArray<string>;
|
|
64
|
+
}
|
|
45
65
|
export declare const MAX_URL_REDIRECTS = 5;
|
|
46
|
-
/** True for loopback, private, link-local, CGNAT, ULA, multicast and unspecified addresses, in any notation. */
|
|
47
|
-
export declare function isPrivateAddress(ip: string): boolean;
|
|
48
66
|
export declare function sha256Hex(bytes: Uint8Array): string;
|
|
49
67
|
export interface UserFile {
|
|
50
68
|
id: string;
|
package/dist/client/assets.js
CHANGED
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
import { createHash } from "node:crypto";
|
|
2
|
-
import { lookup } from "node:dns/promises";
|
|
3
|
-
import { readFile, stat } from "node:fs/promises";
|
|
4
|
-
import { isIP } from "node:net";
|
|
5
|
-
import { extname, isAbsolute } from "node:path";
|
|
6
2
|
import { VERSION } from "../version.js";
|
|
7
3
|
import { MicropageError, isMicropageError } from "./errors.js";
|
|
4
|
+
import { ipFamily, isPrivateAddress } from "./ip.js";
|
|
5
|
+
export { isPrivateAddress };
|
|
8
6
|
/** Same extensions and types as the CLI (cli/src/mime.js); upload-file stores whatever type it is sent. */
|
|
9
7
|
export const ASSET_MIME_TYPES = Object.freeze({
|
|
10
8
|
".png": "image/png",
|
|
@@ -22,6 +20,14 @@ const formatMb = (bytes) => `${(bytes / MB).toFixed(bytes < 10 * MB ? 2 : 1)} MB
|
|
|
22
20
|
// ---------------------------------------------------------------------------
|
|
23
21
|
// Filename
|
|
24
22
|
// ---------------------------------------------------------------------------
|
|
23
|
+
/** path.extname for a bare filename: "" for no extension and for dotfiles such as ".png". */
|
|
24
|
+
function extname(filename) {
|
|
25
|
+
const base = filename.slice(filename.lastIndexOf("/") + 1);
|
|
26
|
+
const dot = base.lastIndexOf(".");
|
|
27
|
+
if (dot <= 0 || /^\.+$/.test(base))
|
|
28
|
+
return "";
|
|
29
|
+
return base.slice(dot);
|
|
30
|
+
}
|
|
25
31
|
/**
|
|
26
32
|
* The stored filename is what `.page` markup references (`img: <- logo.png`),
|
|
27
33
|
* so it must be a bare name with an extension the CLI would upload.
|
|
@@ -75,7 +81,7 @@ function looksLike(ext, bytes) {
|
|
|
75
81
|
case ".ico":
|
|
76
82
|
return startsWith(bytes, [0x00, 0x00, 0x01, 0x00]);
|
|
77
83
|
case ".svg":
|
|
78
|
-
return hasSvgRoot(Buffer.from(bytes).toString("utf8"));
|
|
84
|
+
return hasSvgRoot(Buffer.from(bytes.buffer, bytes.byteOffset, bytes.byteLength).toString("utf8"));
|
|
79
85
|
default:
|
|
80
86
|
return false;
|
|
81
87
|
}
|
|
@@ -129,137 +135,63 @@ export function assertContentMatchesExtension(filename, bytes) {
|
|
|
129
135
|
"Check the source, or rename the file to its real image type. Nothing was uploaded.");
|
|
130
136
|
}
|
|
131
137
|
}
|
|
132
|
-
function
|
|
138
|
+
export function assetTooLarge(size, maxBytes) {
|
|
133
139
|
const shown = typeof size === "number" ? formatMb(size) : size;
|
|
134
140
|
return new MicropageError("ASSET_TOO_LARGE", `The asset is ${shown}; the limit is ${formatMb(maxBytes)}. Resize or recompress it (e.g. to WebP) and retry. Nothing was uploaded.`);
|
|
135
141
|
}
|
|
136
142
|
export async function loadAssetSource(source, options = {}) {
|
|
137
143
|
const maxBytes = options.maxBytes ?? MAX_ASSET_BYTES;
|
|
138
|
-
if ("path" in source)
|
|
139
|
-
|
|
144
|
+
if ("path" in source) {
|
|
145
|
+
if (!options.pathLoader) {
|
|
146
|
+
throw new MicropageError("INVALID_SOURCE", "source.path is not available on this server: it cannot read files from the user's machine. " +
|
|
147
|
+
"Pass the image as source.base64, or as source.url if it is on a public https host.");
|
|
148
|
+
}
|
|
149
|
+
const bytes = await options.pathLoader(source.path, maxBytes);
|
|
150
|
+
if (bytes.length > maxBytes)
|
|
151
|
+
throw assetTooLarge(bytes.length, maxBytes);
|
|
152
|
+
return Buffer.from(bytes.buffer, bytes.byteOffset, bytes.byteLength);
|
|
153
|
+
}
|
|
140
154
|
if ("url" in source) {
|
|
141
155
|
return loadUrl(source.url, {
|
|
142
156
|
maxBytes,
|
|
143
157
|
timeoutMs: options.timeoutMs ?? URL_FETCH_TIMEOUT_MS,
|
|
144
158
|
fetchImpl: options.fetch ?? ((i, init) => fetch(i, init)),
|
|
145
|
-
lookup: options.lookup ??
|
|
159
|
+
lookup: options.lookup ?? null,
|
|
160
|
+
denied: compileDenylist(options.deniedHosts),
|
|
161
|
+
localAlternative: options.pathLoader ? "source.path or source.base64" : "source.base64",
|
|
146
162
|
});
|
|
147
163
|
}
|
|
148
164
|
return loadBase64(source.base64, maxBytes);
|
|
149
165
|
}
|
|
150
|
-
async function loadPath(path, maxBytes) {
|
|
151
|
-
if (!isAbsolute(path)) {
|
|
152
|
-
throw new MicropageError("INVALID_SOURCE", `source.path "${path}" is relative. Pass an absolute path; the server's working directory is not the user's.`);
|
|
153
|
-
}
|
|
154
|
-
let info;
|
|
155
|
-
try {
|
|
156
|
-
info = await stat(path);
|
|
157
|
-
}
|
|
158
|
-
catch (err) {
|
|
159
|
-
throw new MicropageError("INVALID_SOURCE", `Cannot read source.path "${path}": ${err.code ?? String(err)}.`, {
|
|
160
|
-
cause: err,
|
|
161
|
-
});
|
|
162
|
-
}
|
|
163
|
-
if (!info.isFile())
|
|
164
|
-
throw new MicropageError("INVALID_SOURCE", `source.path "${path}" is not a regular file.`);
|
|
165
|
-
if (info.size > maxBytes)
|
|
166
|
-
throw tooLarge(info.size, maxBytes);
|
|
167
|
-
const bytes = await readFile(path);
|
|
168
|
-
if (bytes.length > maxBytes)
|
|
169
|
-
throw tooLarge(bytes.length, maxBytes);
|
|
170
|
-
return bytes;
|
|
171
|
-
}
|
|
172
166
|
function loadBase64(raw, maxBytes) {
|
|
173
167
|
// Accept a data: URL as well as bare base64, and ignore line wrapping.
|
|
174
|
-
|
|
168
|
+
// The argument can be megabytes, so it is only copied when it has whitespace to strip.
|
|
169
|
+
const unprefixed = raw.replace(/^data:[^,]*;base64,/i, "");
|
|
170
|
+
const body = /\s/.test(unprefixed) ? unprefixed.replace(/\s+/g, "") : unprefixed;
|
|
175
171
|
if (!body || !/^[A-Za-z0-9+/_-]+={0,2}$/.test(body)) {
|
|
176
172
|
throw new MicropageError("INVALID_SOURCE", "source.base64 is not valid base64. Pass the file bytes base64-encoded (a data: URL is fine).");
|
|
177
173
|
}
|
|
178
174
|
// Checked before decoding so an oversized argument is never materialized twice.
|
|
179
175
|
if (Math.floor((body.length * 3) / 4) > maxBytes + 2)
|
|
180
|
-
throw
|
|
176
|
+
throw assetTooLarge(Math.floor((body.length * 3) / 4), maxBytes);
|
|
181
177
|
// Node's base64 decoder also accepts the URL-safe alphabet.
|
|
182
178
|
const bytes = Buffer.from(body, "base64");
|
|
183
179
|
if (bytes.length > maxBytes)
|
|
184
|
-
throw
|
|
185
|
-
return bytes;
|
|
186
|
-
}
|
|
187
|
-
/** Swappable in tests so no real DNS query is made. */
|
|
188
|
-
export const urlHostLookup = {
|
|
189
|
-
current: (hostname) => lookup(hostname, { all: true, verbatim: true }),
|
|
190
|
-
};
|
|
191
|
-
export const MAX_URL_REDIRECTS = 5;
|
|
192
|
-
function ipv4Bytes(ip) {
|
|
193
|
-
const parts = ip.split(".");
|
|
194
|
-
if (parts.length !== 4)
|
|
195
|
-
return null;
|
|
196
|
-
const bytes = parts.map((p) => (/^\d{1,3}$/.test(p) ? Number(p) : Number.NaN));
|
|
197
|
-
return bytes.every((b) => b >= 0 && b <= 255) ? bytes : null;
|
|
198
|
-
}
|
|
199
|
-
/** 16 bytes of an IPv6 address (zone id dropped), or null when it does not parse. */
|
|
200
|
-
function ipv6Bytes(raw) {
|
|
201
|
-
let ip = raw.split("%")[0];
|
|
202
|
-
let tail = [];
|
|
203
|
-
const lastColon = ip.lastIndexOf(":");
|
|
204
|
-
if (ip.slice(lastColon + 1).includes(".")) {
|
|
205
|
-
const v4 = ipv4Bytes(ip.slice(lastColon + 1));
|
|
206
|
-
if (!v4)
|
|
207
|
-
return null;
|
|
208
|
-
tail = v4;
|
|
209
|
-
ip = `${ip.slice(0, lastColon + 1)}0:0`;
|
|
210
|
-
}
|
|
211
|
-
const halves = ip.split("::");
|
|
212
|
-
if (halves.length > 2)
|
|
213
|
-
return null;
|
|
214
|
-
const groups = (h) => (h === "" ? [] : h.split(":"));
|
|
215
|
-
const head = groups(halves[0]);
|
|
216
|
-
const back = halves.length === 2 ? groups(halves[1]) : [];
|
|
217
|
-
const fill = 8 - head.length - back.length;
|
|
218
|
-
if (halves.length === 1 ? fill !== 0 : fill < 1)
|
|
219
|
-
return null;
|
|
220
|
-
const all = [...head, ...Array(halves.length === 2 ? fill : 0).fill("0"), ...back];
|
|
221
|
-
const bytes = [];
|
|
222
|
-
for (const g of all) {
|
|
223
|
-
if (!/^[0-9a-f]{1,4}$/i.test(g))
|
|
224
|
-
return null;
|
|
225
|
-
const n = parseInt(g, 16);
|
|
226
|
-
bytes.push(n >> 8, n & 0xff);
|
|
227
|
-
}
|
|
228
|
-
if (tail.length)
|
|
229
|
-
bytes.splice(12, 4, ...tail);
|
|
180
|
+
throw assetTooLarge(bytes.length, maxBytes);
|
|
230
181
|
return bytes;
|
|
231
182
|
}
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
(
|
|
237
|
-
|
|
238
|
-
(a === 172 && b >= 16 && b <= 31) ||
|
|
239
|
-
(a === 192 && b === 168) ||
|
|
240
|
-
a >= 224 // multicast 224/4 and reserved 240/4, incl. broadcast
|
|
241
|
-
);
|
|
183
|
+
const normaliseHost = (host) => host.trim().toLowerCase().replace(/\.+$/, "");
|
|
184
|
+
function compileDenylist(list) {
|
|
185
|
+
return {
|
|
186
|
+
exact: new Set((list?.exact ?? []).map(normaliseHost).filter(Boolean)),
|
|
187
|
+
suffixes: (list?.suffixes ?? []).map((s) => normaliseHost(s).replace(/^\.+/, "")).filter(Boolean),
|
|
188
|
+
};
|
|
242
189
|
}
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
const family = isIP(ip.split("%")[0]);
|
|
246
|
-
if (family === 4)
|
|
247
|
-
return blockedV4(ipv4Bytes(ip));
|
|
248
|
-
if (family !== 6)
|
|
249
|
-
return true;
|
|
250
|
-
const b = ipv6Bytes(ip);
|
|
251
|
-
if (!b)
|
|
252
|
-
return true;
|
|
253
|
-
const zeros = (n) => b.slice(0, n).every((x) => x === 0);
|
|
254
|
-
// ::ffff:a.b.c.d (mapped) and ::a.b.c.d (compatible, which also covers :: and ::1).
|
|
255
|
-
if ((zeros(10) && b[10] === 0xff && b[11] === 0xff) || zeros(12))
|
|
256
|
-
return blockedV4(b.slice(12));
|
|
257
|
-
return ((b[0] === 0xfe && (b[1] & 0xc0) === 0x80) || // fe80::/10 link-local
|
|
258
|
-
(b[0] & 0xfe) === 0xfc || // fc00::/7 unique local
|
|
259
|
-
b[0] === 0xff // ff00::/8 multicast
|
|
260
|
-
);
|
|
190
|
+
function matchesDenylist(host, denied) {
|
|
191
|
+
return denied.exact.has(host) || denied.suffixes.some((s) => host === s || host.endsWith(`.${s}`));
|
|
261
192
|
}
|
|
262
|
-
|
|
193
|
+
export const MAX_URL_REDIRECTS = 5;
|
|
194
|
+
async function assertPublicHost(url, check, redirected) {
|
|
263
195
|
if (url.protocol !== "https:") {
|
|
264
196
|
throw new MicropageError("INVALID_SOURCE", redirected
|
|
265
197
|
? `source.url redirected to a non-https URL (${url.toString()}). Nothing was uploaded.`
|
|
@@ -267,15 +199,21 @@ async function assertPublicHost(url, lookupHost, redirected) {
|
|
|
267
199
|
}
|
|
268
200
|
const host = url.hostname.replace(/^\[|\]$/g, "");
|
|
269
201
|
const refuse = (address) => new MicropageError("INVALID_SOURCE", `source.url host ${url.hostname} is a private, local or reserved address (${address}). Only public https hosts are ` +
|
|
270
|
-
|
|
271
|
-
if (
|
|
202
|
+
`fetched; upload a local file with ${check.localAlternative} instead. Nothing was fetched.`);
|
|
203
|
+
if (ipFamily(host)) {
|
|
272
204
|
if (isPrivateAddress(host))
|
|
273
205
|
throw refuse(host);
|
|
274
206
|
return;
|
|
275
207
|
}
|
|
208
|
+
if (matchesDenylist(normaliseHost(host), check.denied)) {
|
|
209
|
+
throw new MicropageError("INVALID_SOURCE", `source.url host ${url.hostname} is not fetched by this server. Pass the image from another public https host, ` +
|
|
210
|
+
`or upload it with ${check.localAlternative}. Nothing was fetched.`);
|
|
211
|
+
}
|
|
212
|
+
if (!check.lookup)
|
|
213
|
+
return;
|
|
276
214
|
let addresses;
|
|
277
215
|
try {
|
|
278
|
-
addresses = await
|
|
216
|
+
addresses = await check.lookup(host);
|
|
279
217
|
}
|
|
280
218
|
catch (err) {
|
|
281
219
|
throw new MicropageError("NETWORK", `Could not resolve ${host}: ${err instanceof Error ? err.message : String(err)}. Check the URL.`, {
|
|
@@ -289,7 +227,7 @@ async function assertPublicHost(url, lookupHost, redirected) {
|
|
|
289
227
|
throw refuse(bad.address);
|
|
290
228
|
}
|
|
291
229
|
const REDIRECT_STATUSES = new Set([301, 302, 303, 307, 308]);
|
|
292
|
-
async function loadUrl(raw, { maxBytes, timeoutMs, fetchImpl,
|
|
230
|
+
async function loadUrl(raw, { maxBytes, timeoutMs, fetchImpl, ...check }) {
|
|
293
231
|
let url;
|
|
294
232
|
try {
|
|
295
233
|
url = new URL(raw);
|
|
@@ -300,7 +238,7 @@ async function loadUrl(raw, { maxBytes, timeoutMs, fetchImpl, lookup: lookupHost
|
|
|
300
238
|
const signal = AbortSignal.timeout(timeoutMs);
|
|
301
239
|
let res;
|
|
302
240
|
for (let hop = 0;; hop++) {
|
|
303
|
-
await assertPublicHost(url,
|
|
241
|
+
await assertPublicHost(url, check, hop > 0);
|
|
304
242
|
try {
|
|
305
243
|
res = await fetchImpl(url.toString(), {
|
|
306
244
|
method: "GET",
|
|
@@ -346,7 +284,7 @@ async function loadUrl(raw, { maxBytes, timeoutMs, fetchImpl, lookup: lookupHost
|
|
|
346
284
|
const declared = Number(res.headers.get("content-length"));
|
|
347
285
|
if (Number.isFinite(declared) && declared > maxBytes) {
|
|
348
286
|
await res.body?.cancel().catch(() => undefined);
|
|
349
|
-
throw
|
|
287
|
+
throw assetTooLarge(declared, maxBytes);
|
|
350
288
|
}
|
|
351
289
|
// Content-Length can be absent or wrong, so the cap is enforced while reading.
|
|
352
290
|
const chunks = [];
|
|
@@ -361,7 +299,7 @@ async function loadUrl(raw, { maxBytes, timeoutMs, fetchImpl, lookup: lookupHost
|
|
|
361
299
|
total += value.byteLength;
|
|
362
300
|
if (total > maxBytes) {
|
|
363
301
|
await reader.cancel().catch(() => undefined);
|
|
364
|
-
throw
|
|
302
|
+
throw assetTooLarge(`over ${formatMb(maxBytes)}`, maxBytes);
|
|
365
303
|
}
|
|
366
304
|
chunks.push(value);
|
|
367
305
|
}
|
|
@@ -403,7 +341,7 @@ export async function deleteFile(http, fileId) {
|
|
|
403
341
|
/** Multipart body exactly as the CLI's uploadAssetWithToken builds it. */
|
|
404
342
|
export function buildUploadForm(projectId, filename, bytes, contentHash) {
|
|
405
343
|
const form = new FormData();
|
|
406
|
-
form.append("file", new Blob([
|
|
344
|
+
form.append("file", new Blob([bytes], { type: mimeTypeFor(filename) }), filename);
|
|
407
345
|
form.append("project_id", String(projectId));
|
|
408
346
|
form.append("content_hash", contentHash);
|
|
409
347
|
return form;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assets.js","sourceRoot":"","sources":["../../src/client/assets.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"assets.js","sourceRoot":"","sources":["../../src/client/assets.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,17 @@
|
|
|
1
|
-
|
|
1
|
+
import { type ModeHints } from "../hints.js";
|
|
2
|
+
export type AuthMode = "session" | "deploy_token" | "oauth" | "none";
|
|
3
|
+
export declare const LOGIN_HINT = "Run `micropage login` in a terminal, then retry.";
|
|
2
4
|
/**
|
|
3
5
|
* Where access tokens come from. Injected into Http so the same client code
|
|
4
|
-
* serves the stdio server (CLI session file or deploy token) and
|
|
5
|
-
*
|
|
6
|
+
* serves the stdio server (CLI session file or deploy token) and the remote
|
|
7
|
+
* server (an OAuth bearer per request).
|
|
6
8
|
*/
|
|
7
9
|
export interface AuthProvider {
|
|
8
10
|
readonly mode: AuthMode;
|
|
9
11
|
/** Set in deploy-token mode: the only project this process may touch. */
|
|
10
12
|
readonly pinnedProjectUuid?: string;
|
|
13
|
+
/** Set in session mode: the CLI session file in use. */
|
|
14
|
+
readonly sessionPath?: string;
|
|
11
15
|
/**
|
|
12
16
|
* A currently valid access token. With `forceRefresh` the provider must
|
|
13
17
|
* not return its cached token without first trying to obtain a new one;
|
|
@@ -17,6 +21,8 @@ export interface AuthProvider {
|
|
|
17
21
|
forceRefresh?: boolean;
|
|
18
22
|
}): Promise<string>;
|
|
19
23
|
}
|
|
24
|
+
/** The signed-in user's id, read from the current access token's `sub`. */
|
|
25
|
+
export declare function currentUserId(auth: AuthProvider, hints?: Pick<ModeHints, "tokenNoUser">): Promise<string>;
|
|
20
26
|
/** Placeholder used until a real provider is resolved: every call explains how to log in. */
|
|
21
27
|
export declare class NoAuthProvider implements AuthProvider {
|
|
22
28
|
readonly mode: "none";
|
|
@@ -1,4 +1,15 @@
|
|
|
1
|
+
import { STDIO_HINTS } from "../hints.js";
|
|
1
2
|
import { MicropageError } from "./errors.js";
|
|
3
|
+
import { decodeJwtClaims } from "./jwt.js";
|
|
4
|
+
export const LOGIN_HINT = "Run `micropage login` in a terminal, then retry.";
|
|
5
|
+
/** The signed-in user's id, read from the current access token's `sub`. */
|
|
6
|
+
export async function currentUserId(auth, hints = STDIO_HINTS) {
|
|
7
|
+
const sub = decodeJwtClaims(await auth.getAccessToken())?.sub;
|
|
8
|
+
if (typeof sub !== "string" || !sub) {
|
|
9
|
+
throw new MicropageError("SESSION_EXPIRED", hints.tokenNoUser);
|
|
10
|
+
}
|
|
11
|
+
return sub;
|
|
12
|
+
}
|
|
2
13
|
/** Placeholder used until a real provider is resolved: every call explains how to log in. */
|
|
3
14
|
export class NoAuthProvider {
|
|
4
15
|
mode = "none";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-provider.js","sourceRoot":"","sources":["../../src/client/auth-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"auth-provider.js","sourceRoot":"","sources":["../../src/client/auth-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAkB,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAI3C,MAAM,CAAC,MAAM,UAAU,GAAG,kDAAkD,CAAC;AAqB7E,2EAA2E;AAC3E,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAkB,EAAE,QAAwC,WAAW;IACzG,MAAM,GAAG,GAAG,eAAe,CAAC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC,EAAE,GAAG,CAAC;IAC9D,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,GAAG,EAAE,CAAC;QACpC,MAAM,IAAI,cAAc,CAAC,iBAAiB,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;IACjE,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,6FAA6F;AAC7F,MAAM,OAAO,cAAc;IAChB,IAAI,GAAG,MAAe,CAAC;IAEhC,KAAK,CAAC,cAAc;QAClB,MAAM,IAAI,cAAc,CACtB,eAAe,EACf,kFAAkF;YAChF,2EAA2E,CAC9E,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { AuthProvider } from "./auth-provider.js";
|
|
2
|
+
export declare const REAUTH_MESSAGE: string;
|
|
3
|
+
/**
|
|
4
|
+
* Serves one access token that the caller already verified (the remote
|
|
5
|
+
* server checks each request's bearer before building deps). It cannot
|
|
6
|
+
* refresh: the refresh token belongs to the MCP client, so a token the API
|
|
7
|
+
* rejects ends the request with AUTH_EXPIRED and the client re-authenticates.
|
|
8
|
+
*/
|
|
9
|
+
export declare class BearerAuthProvider implements AuthProvider {
|
|
10
|
+
readonly mode: "oauth";
|
|
11
|
+
private readonly accessToken;
|
|
12
|
+
constructor(accessToken: string);
|
|
13
|
+
getAccessToken(options?: {
|
|
14
|
+
forceRefresh?: boolean;
|
|
15
|
+
}): Promise<string>;
|
|
16
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { MicropageError } from "./errors.js";
|
|
2
|
+
export const REAUTH_MESSAGE = "The micropage authorization for this connection has expired or was revoked. Ask the user to reconnect " +
|
|
3
|
+
"(re-authenticate) the micropage connector in their MCP client, then retry. Nothing was changed by the failed call.";
|
|
4
|
+
/**
|
|
5
|
+
* Serves one access token that the caller already verified (the remote
|
|
6
|
+
* server checks each request's bearer before building deps). It cannot
|
|
7
|
+
* refresh: the refresh token belongs to the MCP client, so a token the API
|
|
8
|
+
* rejects ends the request with AUTH_EXPIRED and the client re-authenticates.
|
|
9
|
+
*/
|
|
10
|
+
export class BearerAuthProvider {
|
|
11
|
+
mode = "oauth";
|
|
12
|
+
accessToken;
|
|
13
|
+
constructor(accessToken) {
|
|
14
|
+
if (!accessToken.trim())
|
|
15
|
+
throw new MicropageError("AUTH_EXPIRED", REAUTH_MESSAGE);
|
|
16
|
+
this.accessToken = accessToken;
|
|
17
|
+
}
|
|
18
|
+
async getAccessToken(options = {}) {
|
|
19
|
+
if (options.forceRefresh)
|
|
20
|
+
throw new MicropageError("AUTH_EXPIRED", REAUTH_MESSAGE, { status: 401 });
|
|
21
|
+
return this.accessToken;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=bearer-auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bearer-auth.js","sourceRoot":"","sources":["../../src/client/bearer-auth.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,CAAC,MAAM,cAAc,GACzB,wGAAwG;IACxG,oHAAoH,CAAC;AAEvH;;;;;GAKG;AACH,MAAM,OAAO,kBAAkB;IACpB,IAAI,GAAG,OAAgB,CAAC;IAChB,WAAW,CAAS;IAErC,YAAY,WAAmB;QAC7B,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;YAAE,MAAM,IAAI,cAAc,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;QAClF,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,UAAsC,EAAE;QAC3D,IAAI,OAAO,CAAC,YAAY;YAAE,MAAM,IAAI,cAAc,CAAC,cAAc,EAAE,cAAc,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QACpG,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;CACF"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type ModeHints } from "../hints.js";
|
|
1
2
|
import type { AuthProvider } from "./auth-provider.js";
|
|
2
3
|
import type { MicropageConfig } from "./config.js";
|
|
3
4
|
import type { FetchLike } from "./http.js";
|
|
@@ -20,6 +21,8 @@ export interface DeployTokenAuthOptions extends DeployTokenEnv {
|
|
|
20
21
|
now?: () => number;
|
|
21
22
|
ttlSeconds?: number;
|
|
22
23
|
timeoutMs?: number;
|
|
24
|
+
/** What a refused exchange tells the user to check. Defaults to the stdio wording (env vars). */
|
|
25
|
+
hints?: Pick<ModeHints, "deployTokenCheck" | "deployProjectCheck">;
|
|
23
26
|
}
|
|
24
27
|
/**
|
|
25
28
|
* Exchanges a project deploy token for a short-lived owner JWT
|
|
@@ -38,9 +41,12 @@ export declare class DeployTokenAuthProvider implements AuthProvider {
|
|
|
38
41
|
private readonly now;
|
|
39
42
|
private readonly ttlSeconds;
|
|
40
43
|
private readonly timeoutMs;
|
|
44
|
+
private readonly hints;
|
|
41
45
|
private cached;
|
|
42
46
|
private inflight;
|
|
43
47
|
constructor(options: DeployTokenAuthOptions);
|
|
48
|
+
/** True when getAccessToken() would answer from the cached JWT, without an exchange. */
|
|
49
|
+
hasFreshToken(): boolean;
|
|
44
50
|
getAccessToken(options?: {
|
|
45
51
|
forceRefresh?: boolean;
|
|
46
52
|
}): Promise<string>;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { STDIO_HINTS } from "../hints.js";
|
|
1
2
|
import { VERSION } from "../version.js";
|
|
2
3
|
import { MicropageError, planRequiredError } from "./errors.js";
|
|
3
4
|
import { isProjectUuid } from "./project-ref.js";
|
|
@@ -44,6 +45,7 @@ export class DeployTokenAuthProvider {
|
|
|
44
45
|
now;
|
|
45
46
|
ttlSeconds;
|
|
46
47
|
timeoutMs;
|
|
48
|
+
hints;
|
|
47
49
|
cached = null;
|
|
48
50
|
inflight = null;
|
|
49
51
|
constructor(options) {
|
|
@@ -54,10 +56,15 @@ export class DeployTokenAuthProvider {
|
|
|
54
56
|
this.now = options.now ?? Date.now;
|
|
55
57
|
this.ttlSeconds = options.ttlSeconds ?? DEPLOY_TOKEN_TTL_SECONDS;
|
|
56
58
|
this.timeoutMs = options.timeoutMs ?? 20_000;
|
|
59
|
+
this.hints = options.hints ?? STDIO_HINTS;
|
|
60
|
+
}
|
|
61
|
+
/** True when getAccessToken() would answer from the cached JWT, without an exchange. */
|
|
62
|
+
hasFreshToken() {
|
|
63
|
+
return this.cached !== null && this.cached.expiresAtMs - REEXCHANGE_SKEW_MS > this.now();
|
|
57
64
|
}
|
|
58
65
|
async getAccessToken(options = {}) {
|
|
59
66
|
const cached = this.cached;
|
|
60
|
-
if (!options.forceRefresh && cached &&
|
|
67
|
+
if (!options.forceRefresh && cached && this.hasFreshToken()) {
|
|
61
68
|
return cached.accessToken;
|
|
62
69
|
}
|
|
63
70
|
this.inflight ??= this.exchange(options.forceRefresh ? cached?.accessToken : undefined).finally(() => {
|
|
@@ -101,11 +108,10 @@ export class DeployTokenAuthProvider {
|
|
|
101
108
|
if (planRequired)
|
|
102
109
|
throw planRequired;
|
|
103
110
|
if (res.status === 401 || res.status === 403) {
|
|
104
|
-
throw new MicropageError("DEPLOY_TOKEN_INVALID", `The deploy token was rejected (${detail}).
|
|
105
|
-
`token in the micropage editor under Settings > Deploy tokens.`, { status: res.status, data });
|
|
111
|
+
throw new MicropageError("DEPLOY_TOKEN_INVALID", `The deploy token was rejected (${detail}). ${this.hints.deployTokenCheck}`, { status: res.status, data });
|
|
106
112
|
}
|
|
107
113
|
if (res.status === 404) {
|
|
108
|
-
throw new MicropageError("DEPLOY_TOKEN_INVALID", `No project with uuid ${this.pinnedProjectUuid} exists (${detail}).
|
|
114
|
+
throw new MicropageError("DEPLOY_TOKEN_INVALID", `No project with uuid ${this.pinnedProjectUuid} exists (${detail}). ${this.hints.deployProjectCheck}`, { status: 404, data });
|
|
109
115
|
}
|
|
110
116
|
if (!res.ok) {
|
|
111
117
|
throw new MicropageError("HTTP", `Exchanging the deploy token failed (HTTP ${res.status}): ${detail}`, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deploy-token.js","sourceRoot":"","sources":["../../src/client/deploy-token.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAGxC,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhE,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,mFAAmF;AACnF,MAAM,CAAC,MAAM,wBAAwB,GAAG,IAAI,CAAC;AAC7C,2DAA2D;AAC3D,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAOlC;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAyB,OAAO,CAAC,GAAG;IACrE,MAAM,KAAK,GAAG,GAAG,CAAC,sBAAsB,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACvD,MAAM,WAAW,GAAG,GAAG,CAAC,wBAAwB,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC/D,IAAI,CAAC,KAAK,IAAI,CAAC,WAAW;QAAE,OAAO,IAAI,CAAC;IACxC,IAAI,CAAC,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,wBAAwB,CAAC;QAC9E,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,0BAA0B,CAAC;QAC9E,MAAM,IAAI,cAAc,CACtB,qBAAqB,EACrB,GAAG,OAAO,eAAe,OAAO,8DAA8D;YAC5F,sDAAsD,CACzD,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,cAAc,CACtB,qBAAqB,EACrB,yGAAyG,WAAW,IAAI,CACzH,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,CAAC,WAAW,EAAE,EAAE,CAAC;AAC3D,CAAC;
|
|
1
|
+
{"version":3,"file":"deploy-token.js","sourceRoot":"","sources":["../../src/client/deploy-token.ts"],"names":[],"mappings":"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"}
|