@grackle-ai/server 0.135.2 → 0.136.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.
- package/dist/config.d.ts +31 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +44 -0
- package/dist/config.js.map +1 -1
- package/dist/index.js +64 -16
- package/dist/index.js.map +1 -1
- package/dist/shutdown.d.ts +4 -4
- package/dist/shutdown.d.ts.map +1 -1
- package/dist/tls.d.ts +29 -0
- package/dist/tls.d.ts.map +1 -0
- package/dist/tls.js +63 -0
- package/dist/tls.js.map +1 -0
- package/package.json +18 -18
package/dist/config.d.ts
CHANGED
|
@@ -1,3 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Native-TLS configuration resolved from environment variables.
|
|
3
|
+
*
|
|
4
|
+
* When present, every browser- and client-facing Grackle listener (web,
|
|
5
|
+
* sandbox, MCP, gRPC) terminates TLS in-process. The web/sandbox/MCP
|
|
6
|
+
* listeners use `http2.createSecureServer({ allowHTTP1: true })` so HTTP/1.1
|
|
7
|
+
* clients still negotiate via ALPN; the gRPC listener is intentionally
|
|
8
|
+
* h2-only (`createSecureServer` without `allowHTTP1`) because gRPC clients
|
|
9
|
+
* always speak h2. Used by deployments that expose the server on the network
|
|
10
|
+
* without a fronting TLS proxy (#1373).
|
|
11
|
+
*/
|
|
12
|
+
export interface TlsConfig {
|
|
13
|
+
/** Filesystem path to the PEM-encoded server certificate (`GRACKLE_TLS_CERT`). */
|
|
14
|
+
certPath: string;
|
|
15
|
+
/** Filesystem path to the PEM-encoded private key (`GRACKLE_TLS_KEY`). */
|
|
16
|
+
keyPath: string;
|
|
17
|
+
/**
|
|
18
|
+
* Optional filesystem path to an intermediate-CA PEM bundle
|
|
19
|
+
* (`GRACKLE_TLS_CHAIN`). When set, the contents are appended to the server
|
|
20
|
+
* certificate at load time so the full chain is served to clients. This is
|
|
21
|
+
* **server identity** only — for client-cert verification (mTLS) see #1393
|
|
22
|
+
* (`GRACKLE_TLS_CLIENT_CA`, future).
|
|
23
|
+
*/
|
|
24
|
+
chainPath?: string;
|
|
25
|
+
}
|
|
1
26
|
/** Validated server configuration resolved from environment variables. */
|
|
2
27
|
export interface ServerConfig {
|
|
3
28
|
/** gRPC server port (GRACKLE_PORT). */
|
|
@@ -48,6 +73,12 @@ export interface ServerConfig {
|
|
|
48
73
|
worktreeBase?: string;
|
|
49
74
|
/** Docker host for host mapping (GRACKLE_DOCKER_HOST). */
|
|
50
75
|
dockerHost?: string;
|
|
76
|
+
/**
|
|
77
|
+
* Native-TLS configuration (`GRACKLE_TLS_CERT` + `GRACKLE_TLS_KEY`, optional
|
|
78
|
+
* `GRACKLE_TLS_CHAIN`). When present, the server terminates TLS in-process on
|
|
79
|
+
* every listener. When unset, listeners serve cleartext (current behavior).
|
|
80
|
+
*/
|
|
81
|
+
tls?: TlsConfig;
|
|
51
82
|
}
|
|
52
83
|
/**
|
|
53
84
|
* Resolve and validate all server configuration from environment variables.
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAUA;;;;;;;;;;GAUG;AACH,MAAM,WAAW,SAAS;IACxB,kFAAkF;IAClF,QAAQ,EAAE,MAAM,CAAC;IACjB,0EAA0E;IAC1E,OAAO,EAAE,MAAM,CAAC;IAChB;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,0EAA0E;AAC1E,MAAM,WAAW,YAAY;IAC3B,uCAAuC;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,kDAAkD;IAClD,OAAO,EAAE,MAAM,CAAC;IAChB,0CAA0C;IAC1C,OAAO,EAAE,MAAM,CAAC;IAChB;;;;;;;;;OASG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2DAA2D;IAC3D,WAAW,EAAE,MAAM,CAAC;IACpB;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,sDAAsD;IACtD,aAAa,EAAE,MAAM,CAAC;IACtB,mDAAmD;IACnD,IAAI,EAAE,MAAM,CAAC;IACb,uFAAuF;IACvF,kBAAkB,EAAE,OAAO,CAAC;IAC5B,qGAAqG;IACrG,iBAAiB,EAAE,OAAO,CAAC;IAC3B,oEAAoE;IACpE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,kDAAkD;IAClD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0DAA0D;IAC1D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,GAAG,CAAC,EAAE,SAAS,CAAC;CACjB;AA6FD;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,YAAY,CAwBlD"}
|
package/dist/config.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { accessSync, constants as fsConstants } from "node:fs";
|
|
1
2
|
import { DEFAULT_SERVER_PORT, DEFAULT_WEB_PORT, DEFAULT_MCP_PORT, DEFAULT_POWERLINE_PORT, DEFAULT_SANDBOX_PORT, } from "@grackle-ai/common";
|
|
2
3
|
import { parsePublicOrigin } from "@grackle-ai/auth";
|
|
3
4
|
/**
|
|
@@ -20,6 +21,47 @@ function parsePort(envName, defaultValue) {
|
|
|
20
21
|
function parseFlag(envName) {
|
|
21
22
|
return process.env[envName] === "1";
|
|
22
23
|
}
|
|
24
|
+
/**
|
|
25
|
+
* Parse the native-TLS config from env vars. Returns `undefined` when neither
|
|
26
|
+
* cert nor key is set (the cleartext default). Throws when only one is set, or
|
|
27
|
+
* when any referenced file is missing/unreadable, so the operator sees a clear
|
|
28
|
+
* startup error rather than a confusing handshake failure later.
|
|
29
|
+
*/
|
|
30
|
+
function parseTlsConfig() {
|
|
31
|
+
const certPath = process.env.GRACKLE_TLS_CERT;
|
|
32
|
+
const keyPath = process.env.GRACKLE_TLS_KEY;
|
|
33
|
+
const chainPath = process.env.GRACKLE_TLS_CHAIN;
|
|
34
|
+
if (!certPath && !keyPath) {
|
|
35
|
+
if (chainPath) {
|
|
36
|
+
throw new Error("GRACKLE_TLS_CHAIN is set but GRACKLE_TLS_CERT and GRACKLE_TLS_KEY are not. " +
|
|
37
|
+
"Set both cert and key (or unset chain).");
|
|
38
|
+
}
|
|
39
|
+
return undefined;
|
|
40
|
+
}
|
|
41
|
+
if (!certPath || !keyPath) {
|
|
42
|
+
throw new Error("GRACKLE_TLS_CERT and GRACKLE_TLS_KEY must both be set, or neither. " +
|
|
43
|
+
`Got cert=${certPath ? "set" : "unset"}, key=${keyPath ? "set" : "unset"}.`);
|
|
44
|
+
}
|
|
45
|
+
const checkReadable = (envName, path) => {
|
|
46
|
+
try {
|
|
47
|
+
accessSync(path, fsConstants.R_OK);
|
|
48
|
+
}
|
|
49
|
+
catch (err) {
|
|
50
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
51
|
+
throw new Error(`${envName} path "${path}" is not readable: ${message}`);
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
checkReadable("GRACKLE_TLS_CERT", certPath);
|
|
55
|
+
checkReadable("GRACKLE_TLS_KEY", keyPath);
|
|
56
|
+
if (chainPath) {
|
|
57
|
+
checkReadable("GRACKLE_TLS_CHAIN", chainPath);
|
|
58
|
+
}
|
|
59
|
+
return {
|
|
60
|
+
certPath,
|
|
61
|
+
keyPath,
|
|
62
|
+
...(chainPath ? { chainPath } : {}),
|
|
63
|
+
};
|
|
64
|
+
}
|
|
23
65
|
/**
|
|
24
66
|
* Parse and validate the canonical public origin from an environment variable.
|
|
25
67
|
*
|
|
@@ -43,6 +85,7 @@ function parsePublicUrl(envName) {
|
|
|
43
85
|
* Throws on invalid values so the server fails fast at startup with a clear error.
|
|
44
86
|
*/
|
|
45
87
|
export function resolveServerConfig() {
|
|
88
|
+
const tls = parseTlsConfig();
|
|
46
89
|
return Object.freeze({
|
|
47
90
|
grpcPort: parsePort("GRACKLE_PORT", DEFAULT_SERVER_PORT),
|
|
48
91
|
webPort: parsePort("GRACKLE_WEB_PORT", DEFAULT_WEB_PORT),
|
|
@@ -63,6 +106,7 @@ export function resolveServerConfig() {
|
|
|
63
106
|
workingDirectory: process.env.GRACKLE_WORKING_DIRECTORY || undefined,
|
|
64
107
|
worktreeBase: process.env.GRACKLE_WORKTREE_BASE || undefined,
|
|
65
108
|
dockerHost: process.env.GRACKLE_DOCKER_HOST || undefined,
|
|
109
|
+
...(tls ? { tls } : {}),
|
|
66
110
|
});
|
|
67
111
|
}
|
|
68
112
|
//# sourceMappingURL=config.js.map
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EAChB,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -10,6 +10,7 @@ import { reconnectOrProvision } from "@grackle-ai/adapter-sdk";
|
|
|
10
10
|
import { LocalPowerLineManager } from "./local-powerline-manager.js";
|
|
11
11
|
import { registerCrashHandlers } from "./crash-handler.js";
|
|
12
12
|
import { resolveServerConfig } from "./config.js";
|
|
13
|
+
import { loadSecureContext } from "./tls.js";
|
|
13
14
|
import { createMcpServer } from "@grackle-ai/mcp";
|
|
14
15
|
import { loadOrCreateApiKey, verifyApiKey, setAuthLogger, generatePairingCode, startSessionCleanup, startPairingCleanup, startOAuthCleanup, } from "@grackle-ai/auth";
|
|
15
16
|
import { createWebServer, createSandboxServer, isWildcardAddress, } from "@grackle-ai/web-server";
|
|
@@ -31,6 +32,36 @@ async function main() {
|
|
|
31
32
|
// Resolve and validate all server configuration from env vars (fail fast on invalid values)
|
|
32
33
|
const config = resolveServerConfig();
|
|
33
34
|
logger.info({ config }, "Server configuration resolved");
|
|
35
|
+
// Load TLS material once, before any listener is constructed (#1373). When
|
|
36
|
+
// unset (the default), all listeners serve cleartext as before.
|
|
37
|
+
const secureContext = config.tls
|
|
38
|
+
? loadSecureContext(config.tls, logger)
|
|
39
|
+
: undefined;
|
|
40
|
+
// Effective public origin. Operator-set GRACKLE_PUBLIC_URL wins (#1371 — TLS
|
|
41
|
+
// terminates upstream); else if native TLS is enabled (#1373) synthesize a
|
|
42
|
+
// local https origin so every downstream piece (Secure cookie, OAuth
|
|
43
|
+
// metadata, HSTS, pairing URL, channel ingress) sees the right scheme.
|
|
44
|
+
// For the synthesized form prefer "localhost" over 127.0.0.1: it lets self-
|
|
45
|
+
// signed CN=localhost certs validate, browsers prefer it, and on Windows the
|
|
46
|
+
// IPv4 loopback alone has a Node h2 cross-process quirk that ::1 avoids.
|
|
47
|
+
const synthesizedPublicHost = isWildcardAddress(config.host)
|
|
48
|
+
? detectLanIp() || "localhost"
|
|
49
|
+
: config.host === "127.0.0.1"
|
|
50
|
+
? "localhost"
|
|
51
|
+
: config.host;
|
|
52
|
+
// Bracket IPv6 literals per RFC 2732 — `https://::1:port` is an invalid URL
|
|
53
|
+
// and parsePublicOrigin would reject it downstream in createWebServer.
|
|
54
|
+
const synthesizedUrlHost = synthesizedPublicHost.includes(":")
|
|
55
|
+
? `[${synthesizedPublicHost}]`
|
|
56
|
+
: synthesizedPublicHost;
|
|
57
|
+
const effectivePublicUrl = config.publicUrl ??
|
|
58
|
+
(secureContext ? `https://${synthesizedUrlHost}:${config.webPort}` : undefined);
|
|
59
|
+
// Listener (wire) scheme. What each listener actually speaks on its socket —
|
|
60
|
+
// driven solely by secureContext, NOT effectivePublicUrl. A TLS-terminating
|
|
61
|
+
// reverse proxy could publish https while the listener serves cleartext, or
|
|
62
|
+
// an operator could pair native TLS with `GRACKLE_PUBLIC_URL=http://...` —
|
|
63
|
+
// in either case the startup log should reflect on-the-wire reality.
|
|
64
|
+
const listenerScheme = secureContext ? "https" : "http";
|
|
34
65
|
// AHP HR7: initialize the additive OTLP logs sink for runtime diagnostics.
|
|
35
66
|
// No-op unless OTEL_EXPORTER_OTLP_ENDPOINT is set; never breaks startup.
|
|
36
67
|
initOtlpLogs();
|
|
@@ -186,7 +217,12 @@ async function main() {
|
|
|
186
217
|
},
|
|
187
218
|
],
|
|
188
219
|
});
|
|
189
|
-
|
|
220
|
+
// gRPC always runs over http2. When TLS is enabled (#1373) we switch to
|
|
221
|
+
// `createSecureServer` so the same handler terminates h2 over TLS instead of
|
|
222
|
+
// cleartext h2c. allowHTTP1 is irrelevant here: gRPC clients always speak h2.
|
|
223
|
+
const grpcServer = secureContext
|
|
224
|
+
? http2.createSecureServer({ cert: secureContext.cert, key: secureContext.key }, grpcHandler)
|
|
225
|
+
: http2.createServer(grpcHandler);
|
|
190
226
|
grpcServer.on("error", (err) => {
|
|
191
227
|
if (err.code === "EADDRINUSE") {
|
|
192
228
|
logger.fatal({ port: grpcPort }, "Port %d is already in use. Is another Grackle server running?", grpcPort);
|
|
@@ -200,7 +236,7 @@ async function main() {
|
|
|
200
236
|
});
|
|
201
237
|
});
|
|
202
238
|
grpcServer.listen(grpcPort, bindHost, () => {
|
|
203
|
-
logger.info({ port: grpcPort, host: bindHost }, "gRPC server listening on
|
|
239
|
+
logger.info({ port: grpcPort, host: bindHost, scheme: listenerScheme }, "gRPC server listening on %s://%s:%d", listenerScheme, urlHost, grpcPort);
|
|
204
240
|
});
|
|
205
241
|
// --- Web server (HTTP/1.1) ---
|
|
206
242
|
const webPort = config.webPort;
|
|
@@ -212,19 +248,23 @@ async function main() {
|
|
|
212
248
|
const ingressUrlHost = ingressHost.includes(":") ? `[${ingressHost}]` : ingressHost;
|
|
213
249
|
setChannelConfig({
|
|
214
250
|
signingSecret: apiKey,
|
|
215
|
-
//
|
|
216
|
-
|
|
251
|
+
// External callers reach us at the effective public origin: an explicit
|
|
252
|
+
// GRACKLE_PUBLIC_URL when behind a TLS reverse proxy (#1371), the
|
|
253
|
+
// synthesized https origin when native TLS terminates here (#1373), or the
|
|
254
|
+
// local http origin otherwise.
|
|
255
|
+
ingressBaseUrl: effectivePublicUrl ?? `http://${ingressUrlHost}:${webPort}`,
|
|
217
256
|
});
|
|
218
257
|
const webServer = createWebServer({
|
|
219
258
|
apiKey,
|
|
220
259
|
webPort,
|
|
221
260
|
bindHost,
|
|
261
|
+
...(secureContext ? { secureContext } : {}),
|
|
222
262
|
connectRoutes: routes,
|
|
223
263
|
handleWebhook: ingestChannelMessage,
|
|
224
264
|
pluginNames: loaded.pluginNames,
|
|
225
265
|
sandboxPort: config.sandboxPort,
|
|
226
266
|
...(config.sandboxOrigin !== undefined ? { sandboxOrigin: config.sandboxOrigin } : {}),
|
|
227
|
-
...(
|
|
267
|
+
...(effectivePublicUrl !== undefined ? { publicUrl: effectivePublicUrl } : {}),
|
|
228
268
|
readinessCheck: () => {
|
|
229
269
|
const checks = {};
|
|
230
270
|
try {
|
|
@@ -261,13 +301,16 @@ async function main() {
|
|
|
261
301
|
});
|
|
262
302
|
});
|
|
263
303
|
webServer.listen(webPort, bindHost, () => {
|
|
264
|
-
logger.info({ port: webPort, host: bindHost }, "Web UI on
|
|
304
|
+
logger.info({ port: webPort, host: bindHost, scheme: listenerScheme }, "Web UI on %s://%s:%d", listenerScheme, urlHost, webPort);
|
|
265
305
|
// Generate initial pairing code and print to terminal
|
|
266
306
|
const code = generatePairingCode();
|
|
267
307
|
if (code) {
|
|
268
308
|
const pairingHost = isWildcardAddress(bindHost) ? detectLanIp() || "localhost" : bindHost;
|
|
269
|
-
|
|
270
|
-
|
|
309
|
+
// Prefer the effective public URL (explicit GRACKLE_PUBLIC_URL or the
|
|
310
|
+
// synthesized https origin under native TLS) so the printed URL is the
|
|
311
|
+
// one the browser will actually open. Falls back to cleartext loopback.
|
|
312
|
+
const pairingUrl = effectivePublicUrl
|
|
313
|
+
? `${effectivePublicUrl}/pair?code=${code}`
|
|
271
314
|
: `http://${pairingHost}:${webPort}/pair?code=${code}`;
|
|
272
315
|
process.stdout.write("\n");
|
|
273
316
|
process.stdout.write(" Open in browser:\n");
|
|
@@ -296,14 +339,14 @@ async function main() {
|
|
|
296
339
|
logger.info({ url: pairingUrl }, "Pairing URL generated");
|
|
297
340
|
}
|
|
298
341
|
});
|
|
299
|
-
// --- MCP server (HTTP
|
|
342
|
+
// --- MCP server (Streamable HTTP; h2-over-TLS when secureContext is set) ---
|
|
300
343
|
// The MCP protected-resource metadata points clients at this authorization
|
|
301
|
-
// server.
|
|
302
|
-
//
|
|
303
|
-
// (wildcard → 127.0.0.1).
|
|
344
|
+
// server. Use the effective public URL (explicit GRACKLE_PUBLIC_URL or the
|
|
345
|
+
// synthesized https origin under native TLS) so discovery carries the right
|
|
346
|
+
// scheme/host; otherwise the dialable loopback host (wildcard → 127.0.0.1).
|
|
304
347
|
const dialableHost = isWildcardAddress(bindHost) ? "127.0.0.1" : bindHost;
|
|
305
348
|
const dialableUrlHost = dialableHost.includes(":") ? `[${dialableHost}]` : dialableHost;
|
|
306
|
-
const authServerUrl =
|
|
349
|
+
const authServerUrl = effectivePublicUrl ?? `http://${dialableUrlHost}:${webPort}`;
|
|
307
350
|
// Adapt plugin-contributed tools to the concrete ToolDefinition type expected by MCP.
|
|
308
351
|
// Validates shape at startup so runtime failures surface immediately with a clear message.
|
|
309
352
|
const pluginToolGroups = loaded.mcpTools.length > 0
|
|
@@ -327,6 +370,7 @@ async function main() {
|
|
|
327
370
|
authorizationServerUrl: authServerUrl,
|
|
328
371
|
toolGroups: pluginToolGroups,
|
|
329
372
|
publishWidgetEvent,
|
|
373
|
+
...(secureContext ? { secureContext } : {}),
|
|
330
374
|
// Push tools/list_changed to a workspace's MCP sessions when its promoted
|
|
331
375
|
// component set changes (#1297), via the domain-event bus.
|
|
332
376
|
onComponentChangeSubscribe: (notify) => subscribe((e) => {
|
|
@@ -352,11 +396,15 @@ async function main() {
|
|
|
352
396
|
});
|
|
353
397
|
});
|
|
354
398
|
mcpServer.listen(mcpPort, bindHost, () => {
|
|
355
|
-
logger.info({ port: mcpPort, host: bindHost }, "MCP server on
|
|
399
|
+
logger.info({ port: mcpPort, host: bindHost, scheme: listenerScheme }, "MCP server on %s://%s:%d/mcp", listenerScheme, urlHost, mcpPort);
|
|
356
400
|
});
|
|
357
401
|
// --- MCP Apps widget sandbox server (separate origin) ---
|
|
358
402
|
const sandboxPort = config.sandboxPort;
|
|
359
|
-
const sandboxServer = createSandboxServer({
|
|
403
|
+
const sandboxServer = createSandboxServer({
|
|
404
|
+
bindHost,
|
|
405
|
+
sandboxPort,
|
|
406
|
+
...(secureContext ? { secureContext } : {}),
|
|
407
|
+
});
|
|
360
408
|
sandboxServer.on("error", (err) => {
|
|
361
409
|
if (err.code === "EADDRINUSE") {
|
|
362
410
|
logger.fatal({ port: sandboxPort }, "Port %d is already in use. Is another Grackle server running?", sandboxPort);
|
|
@@ -370,7 +418,7 @@ async function main() {
|
|
|
370
418
|
});
|
|
371
419
|
});
|
|
372
420
|
sandboxServer.listen(sandboxPort, bindHost, () => {
|
|
373
|
-
logger.info({ port: sandboxPort, host: bindHost }, "MCP Apps sandbox on
|
|
421
|
+
logger.info({ port: sandboxPort, host: bindHost, scheme: listenerScheme }, "MCP Apps sandbox on %s://%s:%d/sandbox.html", listenerScheme, urlHost, sandboxPort);
|
|
374
422
|
});
|
|
375
423
|
// --- Graceful shutdown ---
|
|
376
424
|
shutdown = createShutdown({
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/shutdown.d.ts
CHANGED
|
@@ -4,13 +4,13 @@ interface Closeable {
|
|
|
4
4
|
}
|
|
5
5
|
/** Resources that must be cleaned up during graceful shutdown. */
|
|
6
6
|
export interface ShutdownContext {
|
|
7
|
-
/** The HTTP/2 gRPC server. */
|
|
7
|
+
/** The HTTP/2 gRPC server (cleartext, or h2-over-TLS when GRACKLE_TLS_* is set). */
|
|
8
8
|
grpcServer: Closeable;
|
|
9
|
-
/** The HTTP/1.1
|
|
9
|
+
/** The web + WebSocket server (HTTP/1.1 cleartext, or h2-over-TLS via createSecureServer). */
|
|
10
10
|
webServer: Closeable;
|
|
11
|
-
/** The HTTP/1.1
|
|
11
|
+
/** The MCP server (HTTP/1.1 cleartext, or h2-over-TLS via createSecureServer). */
|
|
12
12
|
mcpServer: Closeable;
|
|
13
|
-
/** The
|
|
13
|
+
/** The MCP Apps widget sandbox server (HTTP/1.1 cleartext, or h2-over-TLS). */
|
|
14
14
|
sandboxServer: Closeable;
|
|
15
15
|
/** The reconciliation manager (cron, orphan, lifecycle phases). */
|
|
16
16
|
reconciliationManager: {
|
package/dist/shutdown.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shutdown.d.ts","sourceRoot":"","sources":["../src/shutdown.ts"],"names":[],"mappings":"AAWA,oFAAoF;AACpF,UAAU,SAAS;IACjB,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,KAAK,IAAI,KAAK,IAAI,CAAC;CAC5C;AAED,kEAAkE;AAClE,MAAM,WAAW,eAAe;IAC9B,
|
|
1
|
+
{"version":3,"file":"shutdown.d.ts","sourceRoot":"","sources":["../src/shutdown.ts"],"names":[],"mappings":"AAWA,oFAAoF;AACpF,UAAU,SAAS;IACjB,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,KAAK,IAAI,KAAK,IAAI,CAAC;CAC5C;AAED,kEAAkE;AAClE,MAAM,WAAW,eAAe;IAC9B,oFAAoF;IACpF,UAAU,EAAE,SAAS,CAAC;IACtB,8FAA8F;IAC9F,SAAS,EAAE,SAAS,CAAC;IACrB,kFAAkF;IAClF,SAAS,EAAE,SAAS,CAAC;IACrB,+EAA+E;IAC/E,aAAa,EAAE,SAAS,CAAC;IACzB,mEAAmE;IACnE,qBAAqB,EAAE;QAAE,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;KAAE,CAAC;IACrD,6DAA6D;IAC7D,qBAAqB,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;KAAE,CAAC;IACtD,uFAAuF;IACvF,cAAc,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACtC;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAkF5E"}
|
package/dist/tls.d.ts
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { Logger } from "pino";
|
|
2
|
+
import type { TlsConfig } from "./config.js";
|
|
3
|
+
/**
|
|
4
|
+
* Loaded native-TLS material ready to hand to `http2.createSecureServer`.
|
|
5
|
+
*
|
|
6
|
+
* The `cert` buffer already includes any intermediate-chain content from
|
|
7
|
+
* `GRACKLE_TLS_CHAIN` appended via {@link loadSecureContext}, so callers do not
|
|
8
|
+
* need to set a separate `ca` field on the secure-server options.
|
|
9
|
+
*/
|
|
10
|
+
export interface SecureContext {
|
|
11
|
+
/** PEM cert (possibly concatenated with CA chain). */
|
|
12
|
+
cert: Buffer;
|
|
13
|
+
/** PEM private key. */
|
|
14
|
+
key: Buffer;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Read cert/key (and optional intermediate-CA bundle) from disk and produce a
|
|
18
|
+
* {@link SecureContext} suitable for `http2.createSecureServer`.
|
|
19
|
+
*
|
|
20
|
+
* The intermediate-CA bundle is appended to the leaf certificate so the full
|
|
21
|
+
* chain is served to clients. This is the common deployment pattern (internal
|
|
22
|
+
* PKI / Let's Encrypt with intermediates); operators who need mTLS client
|
|
23
|
+
* verification can re-purpose the variable later behind a feature flag.
|
|
24
|
+
*
|
|
25
|
+
* The cert's subject + expiry are logged at info level so the operator sees
|
|
26
|
+
* which material is in use without parsing the PEM by hand.
|
|
27
|
+
*/
|
|
28
|
+
export declare function loadSecureContext(tls: TlsConfig, logger: Logger): SecureContext;
|
|
29
|
+
//# sourceMappingURL=tls.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tls.d.ts","sourceRoot":"","sources":["../src/tls.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AACnC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C;;;;;;GAMG;AACH,MAAM,WAAW,aAAa;IAC5B,sDAAsD;IACtD,IAAI,EAAE,MAAM,CAAC;IACb,uBAAuB;IACvB,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,aAAa,CAmD/E"}
|
package/dist/tls.js
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
import { X509Certificate } from "node:crypto";
|
|
3
|
+
/**
|
|
4
|
+
* Read cert/key (and optional intermediate-CA bundle) from disk and produce a
|
|
5
|
+
* {@link SecureContext} suitable for `http2.createSecureServer`.
|
|
6
|
+
*
|
|
7
|
+
* The intermediate-CA bundle is appended to the leaf certificate so the full
|
|
8
|
+
* chain is served to clients. This is the common deployment pattern (internal
|
|
9
|
+
* PKI / Let's Encrypt with intermediates); operators who need mTLS client
|
|
10
|
+
* verification can re-purpose the variable later behind a feature flag.
|
|
11
|
+
*
|
|
12
|
+
* The cert's subject + expiry are logged at info level so the operator sees
|
|
13
|
+
* which material is in use without parsing the PEM by hand.
|
|
14
|
+
*/
|
|
15
|
+
export function loadSecureContext(tls, logger) {
|
|
16
|
+
let cert;
|
|
17
|
+
try {
|
|
18
|
+
cert = readFileSync(tls.certPath);
|
|
19
|
+
}
|
|
20
|
+
catch (err) {
|
|
21
|
+
throw new Error(`Failed to read GRACKLE_TLS_CERT at "${tls.certPath}": ${describe(err)}`);
|
|
22
|
+
}
|
|
23
|
+
let key;
|
|
24
|
+
try {
|
|
25
|
+
key = readFileSync(tls.keyPath);
|
|
26
|
+
}
|
|
27
|
+
catch (err) {
|
|
28
|
+
throw new Error(`Failed to read GRACKLE_TLS_KEY at "${tls.keyPath}": ${describe(err)}`);
|
|
29
|
+
}
|
|
30
|
+
if (tls.chainPath) {
|
|
31
|
+
let chain;
|
|
32
|
+
try {
|
|
33
|
+
chain = readFileSync(tls.chainPath);
|
|
34
|
+
}
|
|
35
|
+
catch (err) {
|
|
36
|
+
throw new Error(`Failed to read GRACKLE_TLS_CHAIN at "${tls.chainPath}": ${describe(err)}`);
|
|
37
|
+
}
|
|
38
|
+
// Ensure a newline separator so two PEM blocks don't run together.
|
|
39
|
+
const sep = cert.length > 0 && cert[cert.length - 1] !== 0x0a ? Buffer.from("\n") : Buffer.alloc(0);
|
|
40
|
+
cert = Buffer.concat([cert, sep, chain]);
|
|
41
|
+
}
|
|
42
|
+
// Best-effort: parse the leaf cert for observability. Never let a malformed
|
|
43
|
+
// cert here mask the real downstream TLS error.
|
|
44
|
+
try {
|
|
45
|
+
const x509 = new X509Certificate(cert);
|
|
46
|
+
logger.info({
|
|
47
|
+
subject: x509.subject,
|
|
48
|
+
validFrom: x509.validFrom,
|
|
49
|
+
validTo: x509.validTo,
|
|
50
|
+
certPath: tls.certPath,
|
|
51
|
+
keyPath: tls.keyPath,
|
|
52
|
+
chainPath: tls.chainPath,
|
|
53
|
+
}, "TLS enabled — terminating TLS in-process on all listeners");
|
|
54
|
+
}
|
|
55
|
+
catch (err) {
|
|
56
|
+
logger.warn({ err, certPath: tls.certPath }, "TLS enabled but could not parse leaf certificate for diagnostics");
|
|
57
|
+
}
|
|
58
|
+
return { cert, key };
|
|
59
|
+
}
|
|
60
|
+
function describe(err) {
|
|
61
|
+
return err instanceof Error ? err.message : String(err);
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=tls.js.map
|
package/dist/tls.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tls.js","sourceRoot":"","sources":["../src/tls.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAkB9C;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAc,EAAE,MAAc;IAC9D,IAAI,IAAY,CAAC;IACjB,IAAI,CAAC;QACH,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACpC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,uCAAuC,GAAG,CAAC,QAAQ,MAAM,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC5F,CAAC;IAED,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,sCAAsC,GAAG,CAAC,OAAO,MAAM,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC1F,CAAC;IAED,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;QAClB,IAAI,KAAa,CAAC;QAClB,IAAI,CAAC;YACH,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACtC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,wCAAwC,GAAG,CAAC,SAAS,MAAM,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC9F,CAAC;QACD,mEAAmE;QACnE,MAAM,GAAG,GACP,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC1F,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;IAC3C,CAAC;IAED,4EAA4E;IAC5E,gDAAgD;IAChD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,CAAC,IAAI,CACT;YACE,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,SAAS,EAAE,GAAG,CAAC,SAAS;SACzB,EACD,2DAA2D,CAC5D,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,IAAI,CACT,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,EAC/B,kEAAkE,CACnE,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;AACvB,CAAC;AAED,SAAS,QAAQ,CAAC,GAAY;IAC5B,OAAO,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC1D,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@grackle-ai/server",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.136.1",
|
|
4
4
|
"description": "Grackle server orchestrator — spawns and wires core (gRPC), web-server (HTTP), MCP, and PowerLine",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -31,23 +31,23 @@
|
|
|
31
31
|
"@connectrpc/connect-node": "^2.0.0",
|
|
32
32
|
"pino": "^10.3.1",
|
|
33
33
|
"qrcode": "^1.5.4",
|
|
34
|
-
"@grackle-ai/adapter-codespace": "0.
|
|
35
|
-
"@grackle-ai/adapter-docker": "0.
|
|
36
|
-
"@grackle-ai/adapter-
|
|
37
|
-
"@grackle-ai/adapter-
|
|
38
|
-
"@grackle-ai/
|
|
39
|
-
"@grackle-ai/
|
|
40
|
-
"@grackle-ai/
|
|
41
|
-
"@grackle-ai/plugin-core": "0.
|
|
42
|
-
"@grackle-ai/
|
|
43
|
-
"@grackle-ai/
|
|
44
|
-
"@grackle-ai/
|
|
45
|
-
"@grackle-ai/
|
|
46
|
-
"@grackle-ai/
|
|
47
|
-
"@grackle-ai/plugin-
|
|
48
|
-
"@grackle-ai/
|
|
49
|
-
"@grackle-ai/powerline": "0.
|
|
50
|
-
"@grackle-ai/web-server": "0.
|
|
34
|
+
"@grackle-ai/adapter-codespace": "0.136.1",
|
|
35
|
+
"@grackle-ai/adapter-docker": "0.136.1",
|
|
36
|
+
"@grackle-ai/adapter-local": "0.136.1",
|
|
37
|
+
"@grackle-ai/adapter-sdk": "0.136.1",
|
|
38
|
+
"@grackle-ai/auth": "0.136.1",
|
|
39
|
+
"@grackle-ai/common": "0.136.1",
|
|
40
|
+
"@grackle-ai/adapter-ssh": "0.136.1",
|
|
41
|
+
"@grackle-ai/plugin-core": "0.136.1",
|
|
42
|
+
"@grackle-ai/core": "0.136.1",
|
|
43
|
+
"@grackle-ai/plugin-knowledge": "0.136.1",
|
|
44
|
+
"@grackle-ai/plugin-orchestration": "0.136.1",
|
|
45
|
+
"@grackle-ai/database": "0.136.1",
|
|
46
|
+
"@grackle-ai/plugin-scheduling": "0.136.1",
|
|
47
|
+
"@grackle-ai/plugin-sdk": "0.136.1",
|
|
48
|
+
"@grackle-ai/mcp": "0.136.1",
|
|
49
|
+
"@grackle-ai/powerline": "0.136.1",
|
|
50
|
+
"@grackle-ai/web-server": "0.136.1"
|
|
51
51
|
},
|
|
52
52
|
"devDependencies": {
|
|
53
53
|
"@rushstack/heft": "1.2.7",
|