@classcad/mcp 0.2.2 → 0.3.1

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.
Files changed (72) hide show
  1. package/README.md +128 -87
  2. package/dist/app/SOURCE.txt +4 -0
  3. package/dist/app/assets/index-54a14bc0.css +8 -0
  4. package/dist/app/assets/index-c650c783.js +11257 -0
  5. package/dist/app/assets/troika-three-text.esm-188d86b5.js +220 -0
  6. package/dist/app/favicon.svg +98 -0
  7. package/dist/app/index.html +19 -0
  8. package/dist/app/manifest.json +14 -0
  9. package/dist/auth.d.ts +8 -0
  10. package/dist/auth.js +49 -10
  11. package/dist/auth.js.map +1 -1
  12. package/dist/backend.d.ts +8 -0
  13. package/dist/backend.js +39 -0
  14. package/dist/backend.js.map +1 -0
  15. package/dist/client.d.ts +48 -11
  16. package/dist/client.js +152 -167
  17. package/dist/client.js.map +1 -1
  18. package/dist/daemon.d.ts +0 -2
  19. package/dist/daemon.js +77 -62
  20. package/dist/daemon.js.map +1 -1
  21. package/dist/engine/key.d.ts +29 -0
  22. package/dist/engine/key.js +145 -0
  23. package/dist/engine/key.js.map +1 -0
  24. package/dist/engine/wasm-worker.js +7 -7
  25. package/dist/engine/wasm-worker.js.map +1 -1
  26. package/dist/engine/wasm.d.ts +16 -14
  27. package/dist/engine/wasm.js +22 -30
  28. package/dist/engine/wasm.js.map +1 -1
  29. package/dist/mcp-server.d.ts +4 -4
  30. package/dist/mcp-server.js +72 -28
  31. package/dist/mcp-server.js.map +1 -1
  32. package/dist/queue.js +1 -1
  33. package/dist/queue.js.map +1 -1
  34. package/dist/server.js +69 -36
  35. package/dist/server.js.map +1 -1
  36. package/dist/share/hub.d.ts +70 -0
  37. package/dist/share/hub.js +494 -0
  38. package/dist/share/hub.js.map +1 -0
  39. package/dist/share/protocol.d.ts +87 -0
  40. package/dist/share/protocol.js +54 -0
  41. package/dist/share/protocol.js.map +1 -0
  42. package/dist/share/relay.d.ts +45 -0
  43. package/dist/share/relay.js +230 -0
  44. package/dist/share/relay.js.map +1 -0
  45. package/dist/share/server.d.ts +27 -0
  46. package/dist/share/server.js +399 -0
  47. package/dist/share/server.js.map +1 -0
  48. package/dist/share/session.d.ts +120 -0
  49. package/dist/share/session.js +336 -0
  50. package/dist/share/session.js.map +1 -0
  51. package/dist/tools/auth.js +1 -1
  52. package/dist/tools/auth.js.map +1 -1
  53. package/dist/tools/docs.js +3 -2
  54. package/dist/tools/docs.js.map +1 -1
  55. package/dist/tools/lifecycle.js +36 -9
  56. package/dist/tools/lifecycle.js.map +1 -1
  57. package/dist/tools/share.d.ts +18 -0
  58. package/dist/tools/share.js +277 -0
  59. package/dist/tools/share.js.map +1 -0
  60. package/dist/tools/viewer.d.ts +1 -1
  61. package/dist/tools/viewer.js +11 -6
  62. package/dist/tools/viewer.js.map +1 -1
  63. package/package.json +4 -3
  64. package/dist/bridge/protocol.d.ts +0 -87
  65. package/dist/bridge/protocol.js +0 -14
  66. package/dist/bridge/protocol.js.map +0 -1
  67. package/dist/bridge/server.d.ts +0 -35
  68. package/dist/bridge/server.js +0 -236
  69. package/dist/bridge/server.js.map +0 -1
  70. package/dist/tools/bridge.d.ts +0 -4
  71. package/dist/tools/bridge.js +0 -115
  72. 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. That was fine while the MCP was only a WebSocket client of a
6
- // ClassCAD worker. With the app bridge it also LISTENS (apps announce share
7
- // tokens on ws://127.0.0.1:9096/bridge), and a listening port belongs to
8
- // exactly one process — a second tab would either fail to bind or, worse,
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, emission config, caches and tool queue (mcp-server.ts),
17
- // • an idle timer: with no sessions and no app attached it exits by itself
18
- // (a Drogon-only user never notices it; a WASM user has it running while
19
- // a tab is shared).
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, bridge, bridgeListen, logFile, uptimeMs }
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 may pass `x-classcad-ws-url` on its initialize request to choose the
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 { startBridgeServer } from './bridge/server.js';
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 app holding a bridge connection. A shared
180
- // WASM tab counts as use: its bridge must stay up so the next tab's
181
- // use_session attaches at once instead of waiting for the app's reconnect
182
- // backoff. The registry has no change event, so the timer re-checks itself.
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 (appCount() > 0) {
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: appCount(),
241
- bridge: bridgeRegistry?.url ?? null,
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
- const key = hdr('x-classcad-wasm-key') ?? opts.wasm?.key;
310
- const sessionWasm = key
311
- ? { ...(opts.wasm ?? { key }), key, origin: hdr('x-classcad-wasm-origin') ?? opts.wasm?.origin }
312
- : null;
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, bridge: () => bridgeRegistry, engine: enginePolicy, wasm: sessionWasm, log: sessionLog });
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
- if (bridgeRetry)
354
- clearTimeout(bridgeRetry);
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
- if (bridgeRegistry)
358
- await bridgeRegistry.close().catch(() => { });
359
- await new Promise(r => httpServer.close(() => r()));
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 (process.env.CLASSCAD_MCP_DAEMON === '1')
364
+ if (asDaemon)
362
365
  process.exit(code);
363
366
  };
364
- process.once('SIGINT', () => void shutdown(0));
365
- process.once('SIGTERM', () => void shutdown(0));
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,
@@ -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, the bridge, /health) stays responsive.
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
- // (configured on classcad.ch/user). The engine compares
10
- // globalThis.location.origin with the siteLocation handed to init() and
11
- // with the key's origins. The MCP presents itself as one of those
12
- // origins (CLASSCAD_WASM_ORIGIN, default http://localhost:3000 - the
13
- // origin most dev keys already allow).
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":"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"}
1
+ {"version":3,"file":"wasm-worker.js","sourceRoot":"","sources":["../../src/engine/wasm-worker.ts"],"names":[],"mappings":"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"}
@@ -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 (classcad.ch/user). Required — without it there is no local engine. */
18
- key: string;
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 (the built-in key unless CLASSCAD_WASM_KEY is set). */
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;