@classcad/mcp 0.2.2 → 0.3.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/README.md +128 -87
- package/dist/app/SOURCE.txt +4 -0
- package/dist/app/assets/index-54a14bc0.css +8 -0
- package/dist/app/assets/index-c650c783.js +11257 -0
- package/dist/app/assets/troika-three-text.esm-188d86b5.js +220 -0
- package/dist/app/favicon.svg +98 -0
- package/dist/app/index.html +19 -0
- package/dist/app/manifest.json +14 -0
- package/dist/auth.d.ts +8 -0
- package/dist/auth.js +49 -10
- package/dist/auth.js.map +1 -1
- package/dist/backend.d.ts +8 -0
- package/dist/backend.js +39 -0
- package/dist/backend.js.map +1 -0
- package/dist/client.d.ts +48 -11
- package/dist/client.js +152 -167
- package/dist/client.js.map +1 -1
- package/dist/daemon.d.ts +0 -2
- package/dist/daemon.js +77 -62
- package/dist/daemon.js.map +1 -1
- package/dist/engine/key.d.ts +29 -0
- package/dist/engine/key.js +145 -0
- package/dist/engine/key.js.map +1 -0
- package/dist/engine/wasm-worker.js +7 -7
- package/dist/engine/wasm-worker.js.map +1 -1
- package/dist/engine/wasm.d.ts +16 -14
- package/dist/engine/wasm.js +22 -30
- package/dist/engine/wasm.js.map +1 -1
- package/dist/mcp-server.d.ts +4 -4
- package/dist/mcp-server.js +72 -28
- package/dist/mcp-server.js.map +1 -1
- package/dist/queue.js +1 -1
- package/dist/queue.js.map +1 -1
- package/dist/server.js +69 -36
- package/dist/server.js.map +1 -1
- package/dist/share/hub.d.ts +70 -0
- package/dist/share/hub.js +494 -0
- package/dist/share/hub.js.map +1 -0
- package/dist/share/protocol.d.ts +87 -0
- package/dist/share/protocol.js +54 -0
- package/dist/share/protocol.js.map +1 -0
- package/dist/share/relay.d.ts +45 -0
- package/dist/share/relay.js +230 -0
- package/dist/share/relay.js.map +1 -0
- package/dist/share/server.d.ts +27 -0
- package/dist/share/server.js +399 -0
- package/dist/share/server.js.map +1 -0
- package/dist/share/session.d.ts +120 -0
- package/dist/share/session.js +336 -0
- package/dist/share/session.js.map +1 -0
- package/dist/tools/auth.js +1 -1
- package/dist/tools/auth.js.map +1 -1
- package/dist/tools/docs.js +3 -2
- package/dist/tools/docs.js.map +1 -1
- package/dist/tools/lifecycle.js +36 -9
- package/dist/tools/lifecycle.js.map +1 -1
- package/dist/tools/share.d.ts +18 -0
- package/dist/tools/share.js +277 -0
- package/dist/tools/share.js.map +1 -0
- package/dist/tools/viewer.d.ts +1 -1
- package/dist/tools/viewer.js +11 -6
- package/dist/tools/viewer.js.map +1 -1
- package/package.json +4 -3
- package/dist/bridge/protocol.d.ts +0 -87
- package/dist/bridge/protocol.js +0 -14
- package/dist/bridge/protocol.js.map +0 -1
- package/dist/bridge/server.d.ts +0 -35
- package/dist/bridge/server.js +0 -236
- package/dist/bridge/server.js.map +0 -1
- package/dist/tools/bridge.d.ts +0 -4
- package/dist/tools/bridge.js +0 -115
- package/dist/tools/bridge.js.map +0 -1
package/dist/daemon.js
CHANGED
|
@@ -2,41 +2,43 @@
|
|
|
2
2
|
// daemon.ts — the one ClassCAD MCP process per machine.
|
|
3
3
|
//
|
|
4
4
|
// Why a daemon: stdio MCP servers are child processes of their host, one per
|
|
5
|
-
// Claude tab.
|
|
6
|
-
//
|
|
7
|
-
//
|
|
8
|
-
//
|
|
9
|
-
// bind the other address family of "localhost" and receive half the apps.
|
|
5
|
+
// Claude tab. The MCP also LISTENS: apps dock into its sessions on one local
|
|
6
|
+
// address (share/server.ts), and a listening port belongs to exactly one
|
|
7
|
+
// process. With one daemon every session's app link has the same address,
|
|
8
|
+
// and the engine's files are loaded once.
|
|
10
9
|
//
|
|
11
10
|
// So the MCP itself is a thin stdio shim (server.ts) that finds or starts
|
|
12
11
|
// this daemon and forwards its host's JSON-RPC to it over HTTP (MCP
|
|
13
12
|
// Streamable HTTP transport). The daemon holds:
|
|
14
|
-
// • the single bridge listener,
|
|
15
13
|
// • one MCP server instance PER SESSION — every tab gets its own engine
|
|
16
|
-
// client,
|
|
17
|
-
// •
|
|
18
|
-
//
|
|
19
|
-
//
|
|
14
|
+
// client, caches, tool queue and invites (mcp-server.ts),
|
|
15
|
+
// • the listener sessions are joined on (share/server.ts): apps dock into
|
|
16
|
+
// the MCP's sessions there, and pages that host a session of their own
|
|
17
|
+
// offer it there for MCP sessions to join,
|
|
18
|
+
// • an idle timer: with no sessions and no page offering one it exits by
|
|
19
|
+
// itself.
|
|
20
20
|
//
|
|
21
21
|
// HTTP surface (127.0.0.1 only; requests with an Origin header or a
|
|
22
22
|
// non-loopback Host are refused with 403 — no browser may drive it):
|
|
23
|
-
// GET /health → { name:'classcad-mcp', version, build, pid, sessions, apps,
|
|
23
|
+
// GET /health → { name:'classcad-mcp', version, build, pid, sessions, apps, join, logFile, uptimeMs }
|
|
24
24
|
// POST /shutdown → exits when no session is active (409 otherwise);
|
|
25
25
|
// ?drain=1 → stops taking NEW sessions (503) and exits as
|
|
26
26
|
// soon as the current ones are gone (a newer build waits)
|
|
27
27
|
// POST/GET/DELETE /mcp → MCP Streamable HTTP (session id in mcp-session-id)
|
|
28
|
-
// A shim
|
|
28
|
+
// A shim says on its initialize request how its host shows the session's app
|
|
29
|
+
// (`x-classcad-show`), and may pass `x-classcad-ws-url` to choose the
|
|
29
30
|
// worker URL for that session (defaults to the daemon's CLASSCAD_WS_URL).
|
|
30
31
|
import { createServer } from 'node:http';
|
|
31
32
|
import { randomUUID } from 'node:crypto';
|
|
32
33
|
import { appendFileSync, mkdirSync, statSync } from 'node:fs';
|
|
33
34
|
import { join, dirname } from 'node:path';
|
|
34
|
-
import { tmpdir } from 'node:os';
|
|
35
|
+
import { homedir, tmpdir } from 'node:os';
|
|
35
36
|
import { fileURLToPath } from 'node:url';
|
|
36
37
|
import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
|
|
37
38
|
import { isInitializeRequest } from '@modelcontextprotocol/sdk/types.js';
|
|
38
39
|
import { createMcpServer, DEFAULT_WS_URL, VERSION } from './mcp-server.js';
|
|
39
|
-
import {
|
|
40
|
+
import { closeListener as closeShareListener, dockedApps, listen as listenForApps, offeringPages, SESSION_PATH } from './share/server.js';
|
|
41
|
+
import { showFromEnv } from './share/session.js';
|
|
40
42
|
import { wasmOptionsFromEnv } from './engine/wasm.js';
|
|
41
43
|
import { DEFAULT_DAEMON_PORT } from './ports.js';
|
|
42
44
|
export const DAEMON_HOST = '127.0.0.1';
|
|
@@ -95,11 +97,8 @@ function isLoopbackClient(req) {
|
|
|
95
97
|
}
|
|
96
98
|
}
|
|
97
99
|
export { DEFAULT_DAEMON_PORT };
|
|
98
|
-
export const DEFAULT_BRIDGE_LISTEN = 'ws://127.0.0.1:9096/bridge';
|
|
99
100
|
/** Exit after this long without any session (ms). */
|
|
100
101
|
export const DEFAULT_IDLE_MS = 60_000;
|
|
101
|
-
/** Retry interval when the bridge port is taken (ms). */
|
|
102
|
-
const BRIDGE_RETRY_MS = 5_000;
|
|
103
102
|
function makeLog(logFile) {
|
|
104
103
|
if (!logFile)
|
|
105
104
|
return msg => process.stderr.write(`[classcad-mcp daemon] ${msg}\n`);
|
|
@@ -144,50 +143,30 @@ function sendJson(res, status, body) {
|
|
|
144
143
|
export async function startDaemon(opts = {}) {
|
|
145
144
|
const port = opts.port ?? DEFAULT_DAEMON_PORT;
|
|
146
145
|
const wsUrl = opts.wsUrl ?? DEFAULT_WS_URL;
|
|
147
|
-
const bridgeListen = opts.bridgeListen ?? DEFAULT_BRIDGE_LISTEN;
|
|
148
146
|
const idleMs = opts.idleMs ?? DEFAULT_IDLE_MS;
|
|
149
147
|
const log = makeLog(opts.logFile);
|
|
150
148
|
const startedAt = Date.now();
|
|
151
149
|
// Taken once: the code this process runs, not whatever a later build left on disk.
|
|
152
150
|
const build = daemonBuildStamp();
|
|
153
|
-
// The bridge listener: one per machine, hence one per daemon. Apps announce
|
|
154
|
-
// their share tokens here; sessions attach to them through the registry.
|
|
155
|
-
// If the port is taken (typically an MCP of the previous, pre-daemon build
|
|
156
|
-
// that a still-open tab keeps alive) the daemon runs without a bridge and
|
|
157
|
-
// keeps retrying: as soon as the old process is gone the listener comes up,
|
|
158
|
-
// no restart needed.
|
|
159
|
-
let bridgeRegistry = null;
|
|
160
|
-
let bridgeRetry = null;
|
|
161
151
|
let closing = false;
|
|
162
152
|
// Draining: a newer build asked us to go. Existing sessions run to their
|
|
163
153
|
// end, new ones are refused, exit right after the last one closes.
|
|
164
154
|
let draining = false;
|
|
165
|
-
const bindBridge = async () => {
|
|
166
|
-
try {
|
|
167
|
-
bridgeRegistry = await startBridgeServer({ listen: bridgeListen, log });
|
|
168
|
-
log(`bridge listener on ${bridgeRegistry.url}`);
|
|
169
|
-
}
|
|
170
|
-
catch (err) {
|
|
171
|
-
log(`bridge listener failed (${bridgeListen}): ${err instanceof Error ? err.message : err} — retrying every ${BRIDGE_RETRY_MS / 1000}s`);
|
|
172
|
-
if (!closing)
|
|
173
|
-
bridgeRetry = setTimeout(() => void bindBridge(), BRIDGE_RETRY_MS);
|
|
174
|
-
}
|
|
175
|
-
};
|
|
176
|
-
await bindBridge();
|
|
177
155
|
const sessions = new Map();
|
|
156
|
+
// Where sessions are joined on this machine, once the listener is up.
|
|
157
|
+
let joinAddress = null;
|
|
178
158
|
let idleTimer = null;
|
|
179
|
-
// "Idle" = no MCP session AND no
|
|
180
|
-
//
|
|
181
|
-
//
|
|
182
|
-
//
|
|
183
|
-
const appCount = () => bridgeRegistry?.list().length ?? 0;
|
|
159
|
+
// "Idle" = no MCP session AND no page offering a session of its own. Such a
|
|
160
|
+
// page counts as use: it waits for an MCP session to join it, and would have
|
|
161
|
+
// to find a new daemon first. There is no event for it going away, so the
|
|
162
|
+
// timer re-checks itself.
|
|
184
163
|
const armIdle = () => {
|
|
185
164
|
if (idleTimer)
|
|
186
165
|
clearTimeout(idleTimer);
|
|
187
166
|
idleTimer = setTimeout(() => {
|
|
188
167
|
if (closing || sessions.size > 0)
|
|
189
168
|
return;
|
|
190
|
-
if (
|
|
169
|
+
if (offeringPages() > 0) {
|
|
191
170
|
armIdle();
|
|
192
171
|
return;
|
|
193
172
|
}
|
|
@@ -237,9 +216,8 @@ export async function startDaemon(opts = {}) {
|
|
|
237
216
|
pid: process.pid,
|
|
238
217
|
sessions: sessions.size,
|
|
239
218
|
draining,
|
|
240
|
-
apps:
|
|
241
|
-
|
|
242
|
-
bridgeListen,
|
|
219
|
+
apps: dockedApps(),
|
|
220
|
+
join: joinAddress,
|
|
243
221
|
logFile: opts.logFile ?? null,
|
|
244
222
|
uptimeMs: Date.now() - startedAt,
|
|
245
223
|
});
|
|
@@ -306,18 +284,28 @@ export async function startDaemon(opts = {}) {
|
|
|
306
284
|
};
|
|
307
285
|
const sessionWsUrl = hdr('x-classcad-ws-url') ?? wsUrl;
|
|
308
286
|
const enginePolicy = hdr('x-classcad-engine') ?? opts.engine ?? 'auto';
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
287
|
+
// The local engine's key: the host's own (CLASSCAD_WASM_KEY of the shim), else fetched from the
|
|
288
|
+
// sign-in at each engine start (opts.wasm.getKey). An older shim sends "undefined" for no key.
|
|
289
|
+
const sent = hdr('x-classcad-wasm-key');
|
|
290
|
+
const own = sent && sent !== 'undefined' && sent !== 'null' ? sent : opts.wasm?.key;
|
|
291
|
+
const origin = hdr('x-classcad-wasm-origin') ?? opts.wasm?.origin;
|
|
292
|
+
const sessionWasm = opts.wasm
|
|
293
|
+
? { ...opts.wasm, ...(own ? { key: own } : {}), origin }
|
|
294
|
+
: own
|
|
295
|
+
? { key: own, origin }
|
|
296
|
+
: null;
|
|
297
|
+
// How the session's app reaches the user depends on the host that started the shim, not on
|
|
298
|
+
// whoever started this daemon: the shim says.
|
|
299
|
+
const named = hdr('x-classcad-show');
|
|
300
|
+
const show = named === 'browser' || named === 'host' || named === 'off' ? named : showFromEnv();
|
|
313
301
|
const sessionLog = (msg) => log(`[${transport.sessionId ?? 'new'}] ${msg}`);
|
|
314
|
-
const { server, client } = await createMcpServer({ wsUrl: sessionWsUrl,
|
|
302
|
+
const { server, client } = await createMcpServer({ wsUrl: sessionWsUrl, engine: enginePolicy, wasm: sessionWasm, show, log: sessionLog });
|
|
315
303
|
const transport = new StreamableHTTPServerTransport({
|
|
316
304
|
sessionIdGenerator: () => randomUUID(),
|
|
317
305
|
onsessioninitialized: id => {
|
|
318
306
|
disarmIdle();
|
|
319
307
|
sessions.set(id, { transport, server, client, createdAt: Date.now() });
|
|
320
|
-
log(`session ${id} opened (worker ${sessionWsUrl}, engine ${enginePolicy}, local wasm ${sessionWasm ? 'available' : 'no key'}); ${sessions.size} active`);
|
|
308
|
+
log(`session ${id} opened (worker ${sessionWsUrl}, engine ${enginePolicy}, local wasm ${sessionWasm ? 'available' : 'no key'}, app shown by ${show}); ${sessions.size} active`);
|
|
321
309
|
},
|
|
322
310
|
});
|
|
323
311
|
transport.onclose = () => {
|
|
@@ -344,25 +332,46 @@ export async function startDaemon(opts = {}) {
|
|
|
344
332
|
});
|
|
345
333
|
const url = `http://${DAEMON_HOST}:${port}`;
|
|
346
334
|
log(`daemon ${VERSION} pid ${process.pid} listening on ${url}`);
|
|
335
|
+
// Pages that host their own session look for the MCP on this address before any MCP session exists.
|
|
336
|
+
listenForApps().then(l => {
|
|
337
|
+
joinAddress = `ws://127.0.0.1:${l.port}${SESSION_PATH}`;
|
|
338
|
+
log(`sessions are joined on ${joinAddress}`);
|
|
339
|
+
}, err => log(`no listener for apps (${err instanceof Error ? err.message : err}): they cannot dock, the tools work as usual`));
|
|
347
340
|
armIdle();
|
|
341
|
+
const asDaemon = process.env.CLASSCAD_MCP_DAEMON === '1';
|
|
348
342
|
const shutdown = async (code) => {
|
|
349
343
|
if (closing)
|
|
350
344
|
return;
|
|
351
345
|
closing = true;
|
|
352
346
|
disarmIdle();
|
|
353
|
-
|
|
354
|
-
|
|
347
|
+
// A server is closed when its last connection is: one that somebody keeps
|
|
348
|
+
// open (a host's event stream, an app's socket) must not keep the process.
|
|
349
|
+
// They are cut below; should one survive that, the process goes anyway.
|
|
350
|
+
const deadline = setTimeout(() => {
|
|
351
|
+
log('stopped (connections that would not close were left behind)');
|
|
352
|
+
if (asDaemon)
|
|
353
|
+
process.exit(code);
|
|
354
|
+
}, 3_000);
|
|
355
|
+
deadline.unref();
|
|
355
356
|
for (const [id] of sessions)
|
|
356
357
|
dropSession(id, 'daemon shutdown');
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
358
|
+
await closeShareListener();
|
|
359
|
+
const closed = new Promise(r => httpServer.close(() => r()));
|
|
360
|
+
httpServer.closeAllConnections?.();
|
|
361
|
+
await closed;
|
|
362
|
+
clearTimeout(deadline);
|
|
360
363
|
log('stopped');
|
|
361
|
-
if (
|
|
364
|
+
if (asDaemon)
|
|
362
365
|
process.exit(code);
|
|
363
366
|
};
|
|
364
|
-
|
|
365
|
-
|
|
367
|
+
// A second signal while the first shutdown is still under way ends the process at once.
|
|
368
|
+
const onSignal = () => {
|
|
369
|
+
if (closing && asDaemon)
|
|
370
|
+
process.exit(0);
|
|
371
|
+
void shutdown(0);
|
|
372
|
+
};
|
|
373
|
+
process.on('SIGINT', onSignal);
|
|
374
|
+
process.on('SIGTERM', onSignal);
|
|
366
375
|
return { url, port, close: () => shutdown(0) };
|
|
367
376
|
}
|
|
368
377
|
/** Default log file of a detached daemon (stderr is not connected then). */
|
|
@@ -379,11 +388,17 @@ const isMain = (() => {
|
|
|
379
388
|
}
|
|
380
389
|
})();
|
|
381
390
|
if (isMain) {
|
|
391
|
+
// The daemon outlives the shim that spawned it, and that shim's folder can go away under it (a scratch
|
|
392
|
+
// workspace removed with its session): Node then cannot name its working directory, and the WASM engine
|
|
393
|
+
// fails to start for every session. Shims spawn it in the home folder; one from an older shim moves there.
|
|
394
|
+
try {
|
|
395
|
+
process.chdir(homedir());
|
|
396
|
+
}
|
|
397
|
+
catch { }
|
|
382
398
|
const port = Number(process.env.CLASSCAD_MCP_PORT ?? DEFAULT_DAEMON_PORT);
|
|
383
399
|
startDaemon({
|
|
384
400
|
port,
|
|
385
401
|
wsUrl: process.env.CLASSCAD_WS_URL,
|
|
386
|
-
bridgeListen: process.env.CLASSCAD_BRIDGE_LISTEN,
|
|
387
402
|
idleMs: process.env.CLASSCAD_DAEMON_IDLE_MS ? Number(process.env.CLASSCAD_DAEMON_IDLE_MS) : undefined,
|
|
388
403
|
logFile: process.env.CLASSCAD_MCP_LOG ?? (process.env.CLASSCAD_MCP_DAEMON === '1' ? defaultDaemonLogFile() : undefined),
|
|
389
404
|
engine: process.env.CLASSCAD_ENGINE,
|
package/dist/daemon.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"daemon.js","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"daemon.js","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export type EngineKey = {
|
|
2
|
+
key: string;
|
|
3
|
+
exp: number;
|
|
4
|
+
plan: string;
|
|
5
|
+
exportFormats: string[];
|
|
6
|
+
};
|
|
7
|
+
/** The backend said no: the plan or the token does not allow it. Final, unlike a backend that cannot be reached. */
|
|
8
|
+
export declare class KeyRefused extends Error {
|
|
9
|
+
}
|
|
10
|
+
/** Forgets the kept key (on sign-out). */
|
|
11
|
+
export declare function forgetEngineKey(): void;
|
|
12
|
+
/** The plan of the kept key, for gates like the export formats; null when there is none. */
|
|
13
|
+
export declare function keptPlan(): {
|
|
14
|
+
plan: string;
|
|
15
|
+
exportFormats: string[];
|
|
16
|
+
} | null;
|
|
17
|
+
/** The key for the next engine start. */
|
|
18
|
+
export declare function engineKey(client?: string): Promise<EngineKey>;
|
|
19
|
+
/**
|
|
20
|
+
* Whether the plan exports `format`. GLB counts as STL (both are triangles); JSON as OFB (the
|
|
21
|
+
* model). Without a plan (a key of one's own, or no key fetched yet) nothing is refused here:
|
|
22
|
+
* this gate explains the plan to people, the engine's key is what holds.
|
|
23
|
+
*/
|
|
24
|
+
export declare function exportAllowed(format: string): {
|
|
25
|
+
ok: true;
|
|
26
|
+
} | {
|
|
27
|
+
ok: false;
|
|
28
|
+
message: string;
|
|
29
|
+
};
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
// key.ts — the local engine's key, from ClassCAD's backend.
|
|
2
|
+
//
|
|
3
|
+
// The engine starts only with a key, a licence it checks itself. The backend
|
|
4
|
+
// issues one for what the account's plan allows:
|
|
5
|
+
// • a signed-in machine shows its sign-in (the Firebase ID token, auth.ts);
|
|
6
|
+
// • on CI, a secret access token does instead (CLASSCAD_TOKEN, ccsk_…, made
|
|
7
|
+
// on classcad.ch/account).
|
|
8
|
+
// Keys for local use name `localhost`, which the engine matches on any port, so
|
|
9
|
+
// the origin the MCP declares (wasm-worker.ts) is simply true.
|
|
10
|
+
//
|
|
11
|
+
// The key is kept in ~/.classcad-mcp/engine-key.json until shortly before it
|
|
12
|
+
// expires and renewed ahead of time; while the backend cannot be reached, a
|
|
13
|
+
// kept key that has not expired still starts the engine. CLASSCAD_WASM_KEY
|
|
14
|
+
// takes a key of one's own instead (a machine without internet, a contract).
|
|
15
|
+
import { createHash } from 'node:crypto';
|
|
16
|
+
import { mkdirSync, readFileSync, rmSync, writeFileSync } from 'node:fs';
|
|
17
|
+
import { homedir } from 'node:os';
|
|
18
|
+
import { dirname, join } from 'node:path';
|
|
19
|
+
import { authStatus, idToken } from '../auth.js';
|
|
20
|
+
import { KEY_URL } from '../backend.js';
|
|
21
|
+
const FILE = process.env.CLASSCAD_KEY_FILE || join(homedir(), '.classcad-mcp', 'engine-key.json');
|
|
22
|
+
const DAY = 24 * 3600 * 1000;
|
|
23
|
+
/** The backend said no: the plan or the token does not allow it. Final, unlike a backend that cannot be reached. */
|
|
24
|
+
export class KeyRefused extends Error {
|
|
25
|
+
}
|
|
26
|
+
function readKept() {
|
|
27
|
+
try {
|
|
28
|
+
const k = JSON.parse(readFileSync(FILE, 'utf8'));
|
|
29
|
+
return k && typeof k.key === 'string' && typeof k.exp === 'number' ? k : null;
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
function writeKept(k) {
|
|
36
|
+
mkdirSync(dirname(FILE), { recursive: true });
|
|
37
|
+
writeFileSync(FILE, JSON.stringify(k), { mode: 0o600 });
|
|
38
|
+
}
|
|
39
|
+
/** Forgets the kept key (on sign-out). */
|
|
40
|
+
export function forgetEngineKey() {
|
|
41
|
+
rmSync(FILE, { force: true });
|
|
42
|
+
}
|
|
43
|
+
/** The plan of the kept key, for gates like the export formats; null when there is none. */
|
|
44
|
+
export function keptPlan() {
|
|
45
|
+
if (process.env.CLASSCAD_WASM_KEY)
|
|
46
|
+
return null;
|
|
47
|
+
const k = readKept();
|
|
48
|
+
return k ? { plan: k.plan, exportFormats: k.exportFormats } : null;
|
|
49
|
+
}
|
|
50
|
+
/** The key for the next engine start. */
|
|
51
|
+
export async function engineKey(client = '@classcad/mcp') {
|
|
52
|
+
const own = process.env.CLASSCAD_WASM_KEY;
|
|
53
|
+
if (own)
|
|
54
|
+
return { key: own, exp: Number.MAX_SAFE_INTEGER, plan: 'own key', exportFormats: ['*'] };
|
|
55
|
+
const token = process.env.CLASSCAD_TOKEN;
|
|
56
|
+
let who;
|
|
57
|
+
if (token) {
|
|
58
|
+
who = 'token:' + createHash('sha256').update(token).digest('hex').slice(0, 16);
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
const status = await authStatus();
|
|
62
|
+
if (!status.signedIn) {
|
|
63
|
+
throw new KeyRefused('Sign-in required: the local engine gets its key from your classcad.ch account (call `login`), or set CLASSCAD_TOKEN to a secret access token.');
|
|
64
|
+
}
|
|
65
|
+
who = 'account:' + status.account.uid;
|
|
66
|
+
}
|
|
67
|
+
const ask = async (bearer) => {
|
|
68
|
+
if (!bearer)
|
|
69
|
+
throw new Error('could not get a fresh sign-in token to ask for a key');
|
|
70
|
+
let res;
|
|
71
|
+
try {
|
|
72
|
+
res = await fetch(KEY_URL, {
|
|
73
|
+
method: 'POST',
|
|
74
|
+
headers: { 'content-type': 'application/json', authorization: `Bearer ${bearer}` },
|
|
75
|
+
body: JSON.stringify({ appType: 'wasm', client }),
|
|
76
|
+
signal: AbortSignal.timeout(15000),
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
catch (err) {
|
|
80
|
+
throw new Error(`the ClassCAD key service cannot be reached (${err.message})`);
|
|
81
|
+
}
|
|
82
|
+
return { res, body: (await res.json().catch(() => null)) };
|
|
83
|
+
};
|
|
84
|
+
const fetchKey = async () => {
|
|
85
|
+
let { res, body } = await ask(token ?? (await idToken()));
|
|
86
|
+
// The sign-in kept for the hour may be from before the address was confirmed: once more with a fresh one
|
|
87
|
+
if (!token && res.status === 403 && body?.code === 'email_not_verified')
|
|
88
|
+
({ res, body } = await ask(await idToken(true)));
|
|
89
|
+
if (!res.ok || !body || typeof body.key !== 'string') {
|
|
90
|
+
const message = body?.message ?? `the ClassCAD key service answered ${res.status}`;
|
|
91
|
+
if (res.status >= 400 && res.status < 500 && res.status !== 429)
|
|
92
|
+
throw new KeyRefused(message);
|
|
93
|
+
throw new Error(message);
|
|
94
|
+
}
|
|
95
|
+
const kept = {
|
|
96
|
+
key: body.key,
|
|
97
|
+
exp: Number(body.exp),
|
|
98
|
+
plan: String(body.plan ?? ''),
|
|
99
|
+
exportFormats: Array.isArray(body.exportFormats) ? body.exportFormats : [],
|
|
100
|
+
iat: Date.now(),
|
|
101
|
+
who,
|
|
102
|
+
};
|
|
103
|
+
writeKept(kept);
|
|
104
|
+
return kept;
|
|
105
|
+
};
|
|
106
|
+
const kept = readKept();
|
|
107
|
+
const now = Date.now();
|
|
108
|
+
if (kept && kept.who === who && kept.exp > now + 60_000) {
|
|
109
|
+
const left = kept.exp - now;
|
|
110
|
+
const life = kept.exp - kept.iat;
|
|
111
|
+
// The engine checks its key at start only: renewing now readies the next start
|
|
112
|
+
if (left < DAY || left < life * 0.25)
|
|
113
|
+
fetchKey().catch(() => { });
|
|
114
|
+
return kept;
|
|
115
|
+
}
|
|
116
|
+
try {
|
|
117
|
+
return await fetchKey();
|
|
118
|
+
}
|
|
119
|
+
catch (err) {
|
|
120
|
+
if (!(err instanceof KeyRefused) && kept && kept.who === who && kept.exp > now)
|
|
121
|
+
return kept;
|
|
122
|
+
throw err;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
// What the formats are called in the plans (functions/src/plans/plans.ts in buerli-backend)
|
|
126
|
+
const PLAN_FORMAT = { STP: 'step', STEP: 'step', STL: 'stl', GLB: 'stl', OFB: 'ofb', JSON: 'ofb' };
|
|
127
|
+
/**
|
|
128
|
+
* Whether the plan exports `format`. GLB counts as STL (both are triangles); JSON as OFB (the
|
|
129
|
+
* model). Without a plan (a key of one's own, or no key fetched yet) nothing is refused here:
|
|
130
|
+
* this gate explains the plan to people, the engine's key is what holds.
|
|
131
|
+
*/
|
|
132
|
+
export function exportAllowed(format) {
|
|
133
|
+
const plan = keptPlan();
|
|
134
|
+
if (!plan || plan.exportFormats.length === 0 || plan.exportFormats.includes('*'))
|
|
135
|
+
return { ok: true };
|
|
136
|
+
const wanted = PLAN_FORMAT[format.toUpperCase()];
|
|
137
|
+
if (!wanted || plan.exportFormats.includes(wanted))
|
|
138
|
+
return { ok: true };
|
|
139
|
+
const label = plan.plan ? plan.plan[0].toUpperCase() + plan.plan.slice(1) : 'This plan';
|
|
140
|
+
return {
|
|
141
|
+
ok: false,
|
|
142
|
+
message: `${label} exports ${plan.exportFormats.map(f => f.toUpperCase()).join(' and ')}. ${format.toUpperCase()} comes with Solo and up: https://classcad.ch/subscriptions`,
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=key.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"key.js","sourceRoot":"","sources":["../../src/engine/key.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,15 +2,15 @@
|
|
|
2
2
|
// worker_thread. This is what ClassCADWasmWorker.js does in the browser,
|
|
3
3
|
// minus the browser: the engine is synchronous and blocks its thread for the
|
|
4
4
|
// duration of a command, so it lives in its own thread and the daemon's
|
|
5
|
-
// event loop (other sessions,
|
|
5
|
+
// event loop (other sessions, docked apps, /health) stays responsive.
|
|
6
6
|
//
|
|
7
7
|
// Two shims make the web-built engine run in Node:
|
|
8
|
-
// • location: the engine's license key is bound to "allowed origins"
|
|
9
|
-
//
|
|
10
|
-
//
|
|
11
|
-
//
|
|
12
|
-
//
|
|
13
|
-
//
|
|
8
|
+
// • location: the engine's license key is bound to "allowed origins". The
|
|
9
|
+
// engine compares globalThis.location.origin with the siteLocation handed
|
|
10
|
+
// to init() and with the key's origins. The MCP runs on this machine and
|
|
11
|
+
// says so: http://localhost, which keys for local use allow on any port
|
|
12
|
+
// (CLASSCAD_WASM_ORIGIN overrides it for a key of one's own). An engine
|
|
13
|
+
// build for Node would make this shim unnecessary.
|
|
14
14
|
// • XMLHttpRequest: the glue was built with -sENVIRONMENT=web and loads its
|
|
15
15
|
// side modules (lgs2d, lgs3d, ExpWasm) through XHR. We answer those from
|
|
16
16
|
// the local asset directory. A real XHR completes on a later task; the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wasm-worker.js","sourceRoot":"","sources":["../../src/engine/wasm-worker.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,yEAAyE;AACzE,6EAA6E;AAC7E,wEAAwE;AACxE,
|
|
1
|
+
{"version":3,"file":"wasm-worker.js","sourceRoot":"","sources":["../../src/engine/wasm-worker.ts"],"names":[],"mappings":"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"}
|
package/dist/engine/wasm.d.ts
CHANGED
|
@@ -1,21 +1,16 @@
|
|
|
1
|
-
import type { EngineExecuteResult } from '../bridge/protocol.js';
|
|
2
1
|
/** The ClassCAD release the MCP hosts (the same the buerli apps load). */
|
|
3
2
|
export declare const DEFAULT_WASM_VERSION = "21.2.0";
|
|
4
|
-
|
|
5
|
-
* The MCP's built-in key: wasm, enterprise, allowed origin http://localhost:3000,
|
|
6
|
-
* valid for six months (issued 2026-09-30). Built in so the local engine needs
|
|
7
|
-
* no configuration; CLASSCAD_WASM_KEY overrides it. Renew it before
|
|
8
|
-
* DEV_WASM_KEY_EXPIRES with buerli-backend/functions/scripts/appkey.mjs and
|
|
9
|
-
* ship a release: the engine refuses an expired key.
|
|
10
|
-
*/
|
|
11
|
-
export declare const DEV_WASM_KEY = "MS4xLlZZUG51VkNpOGdjQm50RXB0VkE1RnQ1ekVVazNOR1dYMk9weHlxRGJjazRSdGYwTFRPTFl5NVdjYmY4VnFOOXlWTDQ0OUNzSExTbmhQRHZpNEVidXRubFJhZUpQVVA3aW1xZFBlWXlIcFRocFVlamVSZmJUaVM3aWcwWnlpdXNjSm5OaHFnTDhmN2EvSVRsZWxFQy9BRXJSQzZ5VUNLUC9UbFBiTTFINk10UlhNbkYwZm5QN2J0bE5DSWdWWW5RTldFSjFNcGYzaEJ4VjBjTHZlcW9tUXY0bklzVFFWSVl5T0hZVHM4ZU8vbENlaTZhdGxFbERycy9WVldoZHIwNm5DdWRvVEhTNGlmSGRWQ2FSak5QSmVNc1BmK1ZMYm5WVFI4aXl2MENadW1MbEsra2N3L0tqc0hLanZTUXJBTG5EQjcvOWpjcFhwbHlHNkFYRVppeVVESFZ0Ly9EL1VKdndMZ2E3S1ZFcFNRTStmS0xSZDR0RFYrVU41VHBrZ0wvYk5uK2huR3FHU2FtUExybXVGdXQ0T0EycHhiSlNZakZvYjFqbUZEbG5hVk1BTW11c1RqblVyQklGWGFxOUJDZnZRck13eHlGeE1RdEtCdGpnQUd5b1VSNmZmaFRXWVhpOGVtL2ZkU3hMNjFRamF4ejdLVExPS3pFOXJVMVgzcXBPQVo1NEFVenFVVzg0Zk9BeUZ0KzRMT2M0dzJMMWJ1U0YxUkZFby9CZXZ4UGRzQ3A4ZWUxMUxiTDRCQ0pFUEZJMGQyYU9JU0grN0NqOFZhVEpHb2JKVys3cktPemUyTTE4V3hOZnJMWVlhZXJzdDEwdDl1YTFja3lPdUZzRjMwdWFiejUvdGRVeENRRjhhcysxNFR2Slo4THowd1lxRkx2RTgrcG12N2VpT1ZUTzRtVSsvWXpLYkljVXFoNjNRdllkOU5jeWx3c0ZqRkZ4NGJlbGxrcHFuQjFNNHcvZVVmQ2VpNzRXT256ZGtNQzJiYWx2US9VWWJvS3ltbjZHVWtzbjZJczd0ZU5RMGs2TGovTm5mcFllcldNUXQxeEhjWnVySlZxd2hDRjBTTVRhSmhHWFNQODkwd3RFdkNRSS8zSHNYdUpseWFkWkpmZDZHRmJhNTRldEdoNUIveE80aWdNMEVuekVUMWVKa0tWMWhtbTduZjlZZzRwZmw4QnI5Z0ZZdFlPV080S2hWTjczYTB5Y0g5SlpMUUJydmlBVFowQm1uL3RNYnlKWitadmZjYzN1S2lvdXl4VC9ONlJwejlycFdrUmJvSHZSaHF4VkdjY3B4bG1nbnZudkNVaHZSZktFNTYvaDh0eEZXcXFncEo4VFR4cndFQVo3R0liRlVYVWN6TUhoQW9FV2lSWnVMTWxQck0zTVJWQkJ4YXA5a1BUeWVGaUFXU0tzZ2krUHRQbVp4ZTJldlRkekYzTEpvSkc4R25mQjZ5MVE4VWE5Q09wU3pMN05aamFpak9NRmU0dXBFaVI0andrOTUxMDVkcW9TTFExY0JoU2J0MytiNjkxcE1YYmNFZGNjU1ZYSnE5ejdubUJCeGs1THdUaURRdjdDTkQyZGNmejdKa0hXSENFcklvN2ZyMVFKU1V2dG5RRk5YUGxPNWhsTnZGVU9qWngwQkNDMGc2UDFrQUxVUEoweWtaZ3pQSnRYckdHL09XQjFUaERtTVNvMVpmdE1vbTlCdENjVGhMeGJuWDJmODlEcTNHZFE4RUd2UVV0cFRCNkVkeTdBOEE1aVNMemR1OEJhek5nYUwrclFlNk9CTko4VVEweEMzdmUrTFFoTmtVMTVzQWlycmtVdDJmL3JkMDM2bHd5d3ZnZTg2Umlvc1pnOVQ2RHVhNWRoQ1N3L0ZTQmpCOUo0QmI2Kys2TmNEOS9OTGFXNUIwUXJzdDRXYjR0cDEzL3Q3RXlxWEZiV3JLMVdiQlZtMnVhd3pzLzZ4RklR";
|
|
12
|
-
export declare const DEV_WASM_KEY_EXPIRES = "2027-03-30T09:25:07Z";
|
|
13
|
-
export declare const DEFAULT_WASM_ORIGIN = "http://localhost:3000";
|
|
3
|
+
export declare const DEFAULT_WASM_ORIGIN = "http://localhost";
|
|
14
4
|
/** Files of one release under https://awvstatic.com/classcad/download/release/<version>/wasm/. */
|
|
15
5
|
export declare const WASM_ASSETS: string[];
|
|
16
6
|
export type LocalWasmOptions = {
|
|
17
|
-
/** ClassCAD key
|
|
18
|
-
key
|
|
7
|
+
/** A ClassCAD key; without one, getKey supplies it when the engine starts. */
|
|
8
|
+
key?: string;
|
|
9
|
+
/** The key for an engine start: from the backend (engine/key.ts). */
|
|
10
|
+
getKey?: () => Promise<{
|
|
11
|
+
key: string;
|
|
12
|
+
plan?: string;
|
|
13
|
+
}>;
|
|
19
14
|
/** Origin the engine believes it runs on; must be in the key's allowed origins. */
|
|
20
15
|
origin?: string;
|
|
21
16
|
/** Release to host. */
|
|
@@ -26,6 +21,13 @@ export type LocalWasmOptions = {
|
|
|
26
21
|
url?: string;
|
|
27
22
|
log?: (msg: string) => void;
|
|
28
23
|
};
|
|
24
|
+
/** What the engine emitted for one command: its text messages and inflated binary graphic packages, in emission order. */
|
|
25
|
+
export type EngineExecuteResult = {
|
|
26
|
+
messages: Record<string, any>[];
|
|
27
|
+
binaryMessages: Record<string, any>[];
|
|
28
|
+
/** Emitted messages that could not be decoded (dropped, never thrown into the engine). */
|
|
29
|
+
decodeErrors?: string[];
|
|
30
|
+
};
|
|
29
31
|
export type LocalEngine = {
|
|
30
32
|
execute: (command: Record<string, unknown>) => Promise<EngineExecuteResult>;
|
|
31
33
|
/**
|
|
@@ -45,7 +47,7 @@ export type LocalEngine = {
|
|
|
45
47
|
readonly dir: string;
|
|
46
48
|
readonly memoryMB: number;
|
|
47
49
|
};
|
|
48
|
-
/** Resolves the local engine settings from the environment
|
|
50
|
+
/** Resolves the local engine settings from the environment; the key is fetched at each engine start. */
|
|
49
51
|
export declare function wasmOptionsFromEnv(env?: NodeJS.ProcessEnv): LocalWasmOptions | null;
|
|
50
52
|
export declare function defaultWasmDir(version?: string): string;
|
|
51
53
|
export declare function assetBaseUrl(version?: string): string;
|