@keystrokehq/platform 0.0.116 → 0.0.117
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.cjs +1 -1
- package/dist/config.mjs +1 -1
- package/dist/{dist-BhzHC6fA.mjs → dist-CkPv4pkS.mjs} +2 -2
- package/dist/dist-CkPv4pkS.mjs.map +1 -0
- package/dist/{dist-BcsqJD9V.cjs → dist-DORNYvce.cjs} +2 -2
- package/dist/dist-DORNYvce.cjs.map +1 -0
- package/dist/run.cjs +1 -1
- package/dist/run.mjs +1 -1
- package/dist/{start-BnTz6Vci.mjs → start-3cyJAXfs.mjs} +2 -2
- package/dist/{start-BnTz6Vci.mjs.map → start-3cyJAXfs.mjs.map} +1 -1
- package/dist/{start-CsYcmcjc.cjs → start-DDACC7ww.cjs} +2 -2
- package/dist/{start-CsYcmcjc.cjs.map → start-DDACC7ww.cjs.map} +1 -1
- package/dist/start.cjs +1 -1
- package/dist/start.mjs +1 -1
- package/package.json +1 -1
- package/dist/dist-BcsqJD9V.cjs.map +0 -1
- package/dist/dist-BhzHC6fA.mjs.map +0 -1
package/dist/config.cjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
const require_dist = require("./dist-DYZzWRyP.cjs");
|
|
3
|
-
const require_dist$1 = require("./dist-
|
|
3
|
+
const require_dist$1 = require("./dist-DORNYvce.cjs");
|
|
4
4
|
//#region src/config.ts
|
|
5
5
|
function definePlatformConfig(config = {}) {
|
|
6
6
|
return {
|
package/dist/config.mjs
CHANGED
|
@@ -70,7 +70,7 @@ function buildRuntimeEnv(source, artifactUrl, database, extraEnv) {
|
|
|
70
70
|
}
|
|
71
71
|
entries.set(key, value);
|
|
72
72
|
}
|
|
73
|
-
for (const key of PROVIDER_ENV_KEYS) {
|
|
73
|
+
if (!extraEnv) for (const key of PROVIDER_ENV_KEYS) {
|
|
74
74
|
const value = source[key]?.trim();
|
|
75
75
|
if (value) entries.set(key, value);
|
|
76
76
|
}
|
|
@@ -276,4 +276,4 @@ async function pingProjectTarget(target, options = {}) {
|
|
|
276
276
|
//#endregion
|
|
277
277
|
export { pingProjectTarget as n, defaultHostingPlugin as t };
|
|
278
278
|
|
|
279
|
-
//# sourceMappingURL=dist-
|
|
279
|
+
//# sourceMappingURL=dist-CkPv4pkS.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dist-CkPv4pkS.mjs","names":[],"sources":["../../../packages/hosting/dist/index.mjs"],"sourcesContent":["import Docker from \"dockerode\";\n//#region src/constants.ts\nconst PROJECT_SERVER_IMAGE = \"keystroke/project-server:local\";\nconst PROJECT_SERVER_PORT = 3e3;\nconst PROJECT_SERVER_ROOT = \"/app\";\nconst PROJECT_SERVER_FRAMEWORK_ROOT = \"/opt/keystroke\";\nconst PROJECT_SERVER_FRAMEWORK_NODE_MODULES = `${PROJECT_SERVER_FRAMEWORK_ROOT}/node_modules`;\nconst PROJECT_SERVER_HEALTH = {\n\tpath: \"/health\",\n\tport: PROJECT_SERVER_PORT\n};\n//#endregion\n//#region src/runtime-env.ts\nconst RUNTIME_ENV_KEYS = [\n\t\"BETTER_AUTH_SECRET\",\n\t\"PUBLIC_SERVER_URL\",\n\t\"PUBLIC_WEB_URL\",\n\t\"POSTGRES_SSL\",\n\t\"KEYSTROKE_SCHEDULER_MODULE\"\n];\n/** Provider and gateway env forwarded from the platform into project servers. */\nconst PROVIDER_ENV_KEYS = [\n\t\"ANTHROPIC_API_KEY\",\n\t\"OPENAI_API_KEY\",\n\t\"AI_GATEWAY_API_KEY\",\n\t\"AI_GATEWAY_BASE_URL\"\n];\n/** Shared dev token when `PLATFORM_WORKER_TOKEN` is unset (non-production only). */\nconst DEV_PLATFORM_WORKER_TOKEN = \"dev-platform-worker-token\";\nconst PROJECT_DATABASE_ENV_KEYS = [\n\t\"POSTGRES_HOST\",\n\t\"POSTGRES_PORT\",\n\t\"POSTGRES_DB\",\n\t\"POSTGRES_USER\",\n\t\"POSTGRES_PASSWORD\",\n\t\"DATABASE_SEARCH_PATH\"\n];\n/** Per-project postgres env injected into every project server container/machine. */\nfunction projectDatabaseRuntimeEnv(database) {\n\treturn {\n\t\tPOSTGRES_HOST: rewriteLoopbackHost(database.host),\n\t\tPOSTGRES_PORT: String(database.port),\n\t\tPOSTGRES_DB: database.database,\n\t\tPOSTGRES_USER: database.user,\n\t\tPOSTGRES_PASSWORD: database.password,\n\t\tDATABASE_SEARCH_PATH: database.searchPath\n\t};\n}\n/**\n* Builds the launch spec for a single project server. `artifactUrl` is the\n* per-project presigned URL to that deploy's built `dist` — there is no base\n* image, so it is required.\n*/\nfunction resolveRuntimeLaunch(options, artifactUrl, database, extraEnv) {\n\tif (!artifactUrl) throw new Error(\"Cannot start a project server without an artifact URL\");\n\tconst env = options.env ?? process.env;\n\treturn {\n\t\timage: resolveProjectServerImage(env, options.image),\n\t\tenv: buildRuntimeEnv(env, artifactUrl, database, extraEnv),\n\t\tport: PROJECT_SERVER_PORT,\n\t\thealth: PROJECT_SERVER_HEALTH\n\t};\n}\n/** Env vars passed into the project server container/machine. */\nfunction buildRuntimeEnv(source, artifactUrl, database, extraEnv) {\n\tconst mode = source.KEYSTROKE_MODE ?? \"worker\";\n\tconst entries = new Map([\n\t\t[\"PORT\", String(PROJECT_SERVER_PORT)],\n\t\t[\"KEYSTROKE_ROOT\", PROJECT_SERVER_ROOT],\n\t\t[\"KEYSTROKE_RUNTIME_NODE_MODULES\", PROJECT_SERVER_FRAMEWORK_NODE_MODULES],\n\t\t[\"ARTIFACT_URL\", artifactUrl],\n\t\t[\"KEYSTROKE_MODE\", mode],\n\t\t[\"PROJECT_ID\", database.projectId],\n\t\t[\"ORGANIZATION_ID\", database.organizationId],\n\t\t[\"TENANT_ID\", database.organizationId]\n\t]);\n\tfor (const key of RUNTIME_ENV_KEYS) {\n\t\tconst value = source[key]?.trim();\n\t\tif (!value) {\n\t\t\tif (key === \"POSTGRES_SSL\") throw new Error(\"POSTGRES_SSL is required\");\n\t\t\tcontinue;\n\t\t}\n\t\tentries.set(key, value);\n\t}\n\tif (!extraEnv) for (const key of PROVIDER_ENV_KEYS) {\n\t\tconst value = source[key]?.trim();\n\t\tif (value) entries.set(key, value);\n\t}\n\tif (mode !== \"worker\") {\n\t\tconst credentialsKey = source.CREDENTIALS_ENCRYPTION_KEY;\n\t\tif (credentialsKey) entries.set(\"CREDENTIALS_ENCRYPTION_KEY\", credentialsKey);\n\t}\n\tif (mode === \"worker\") {\n\t\tconst worker = resolveWorkerRuntimeConfig(source);\n\t\tentries.set(\"PLATFORM_URL\", worker.platformUrl);\n\t\tentries.set(\"WORKER_INTERNAL_TOKEN\", worker.workerToken);\n\t}\n\tfor (const [key, value] of Object.entries(projectDatabaseRuntimeEnv(database))) entries.set(key, value);\n\tif (extraEnv) for (const [key, value] of Object.entries(extraEnv)) entries.set(key, value);\n\treturn Object.fromEntries(entries);\n}\nfunction resolvePlatformWorkerToken(source = process.env) {\n\tconst explicit = source.PLATFORM_WORKER_TOKEN?.trim() ?? source.WORKER_INTERNAL_TOKEN?.trim();\n\tif (explicit) return explicit;\n\tif (source.NODE_ENV === \"production\") return;\n\treturn DEV_PLATFORM_WORKER_TOKEN;\n}\n/** Platform API URL reachable from a project-server container. */\nconst DEV_PLATFORM_URL = \"http://localhost:3002\";\nfunction resolveWorkerPlatformUrl(source = process.env) {\n\tconst raw = source.PLATFORM_URL?.trim() ?? source.PUBLIC_PLATFORM_URL?.trim() ?? (source.NODE_ENV === \"production\" ? void 0 : DEV_PLATFORM_URL);\n\tif (!raw) return;\n\treturn rewriteLoopbackUrl(raw);\n}\n/** Rewrite loopback hosts so containers can reach Postgres and other host services. */\nfunction rewriteLoopbackHost(host) {\n\tif (host === \"localhost\" || host === \"127.0.0.1\") return \"host.docker.internal\";\n\treturn host;\n}\nfunction rewriteLoopbackUrl(url) {\n\ttry {\n\t\tconst parsed = new URL(url);\n\t\tparsed.hostname = rewriteLoopbackHost(parsed.hostname);\n\t\treturn parsed.toString().replace(/\\/$/, \"\");\n\t} catch {\n\t\treturn url;\n\t}\n}\n/** dockerode expects `KEY=value` strings. */\nfunction formatDockerEnv(env) {\n\treturn Object.entries(env).map(([key, value]) => `${key}=${value}`);\n}\nfunction resolveProjectServerImage(env = process.env, override) {\n\treturn override ?? env.PROJECT_DOCKER_IMAGE ?? env.TENANT_DOCKER_IMAGE ?? \"keystroke/project-server:local\";\n}\n//#endregion\n//#region src/worker-runtime-config.ts\nvar WorkerRuntimeConfigError = class extends Error {\n\tmissing;\n\tconstructor(missing) {\n\t\tsuper(`Worker runtime config incomplete (missing: ${missing.join(\", \")}). In production set PLATFORM_WORKER_TOKEN and PUBLIC_PLATFORM_URL (or PLATFORM_URL).`);\n\t\tthis.name = \"WorkerRuntimeConfigError\";\n\t\tthis.missing = missing;\n\t}\n};\n/** Fail fast when the platform cannot start worker-mode project servers. */\nfunction resolveWorkerRuntimeConfig(source = process.env) {\n\tconst platformUrl = resolveWorkerPlatformUrl(source);\n\tconst workerToken = resolvePlatformWorkerToken(source);\n\tconst missing = [];\n\tif (!platformUrl) missing.push(\"PUBLIC_PLATFORM_URL or PLATFORM_URL\");\n\tif (!workerToken) missing.push(\"PLATFORM_WORKER_TOKEN\");\n\tif (missing.length > 0) throw new WorkerRuntimeConfigError(missing);\n\treturn {\n\t\tplatformUrl,\n\t\tworkerToken\n\t};\n}\n//#endregion\n//#region src/wait-for-health.ts\nconst DEFAULT_TIMEOUT_MS = 12e4;\nconst DEFAULT_INTERVAL_MS = 500;\nasync function waitForHealth(baseUrl, options = {}) {\n\tconst fetchImpl = options.fetchImpl ?? fetch;\n\tconst timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;\n\tconst intervalMs = options.intervalMs ?? DEFAULT_INTERVAL_MS;\n\tconst deadline = Date.now() + timeoutMs;\n\tconst url = new URL(PROJECT_SERVER_HEALTH.path, baseUrl);\n\twhile (Date.now() < deadline) {\n\t\ttry {\n\t\t\tif ((await fetchImpl(url, { signal: AbortSignal.timeout(2e3) })).ok) return;\n\t\t} catch {}\n\t\tawait sleep(intervalMs);\n\t}\n\tthrow new Error(`Project server health check timed out after ${timeoutMs}ms (${url})`);\n}\nfunction sleep(ms) {\n\treturn new Promise((resolve) => {\n\t\tsetTimeout(resolve, ms);\n\t});\n}\n//#endregion\n//#region src/docker/create-docker-runtime.ts\nconst MINIO_DOCKER_NETWORK = process.env.MINIO_DOCKER_NETWORK ?? \"keystroke\";\nfunction createDockerRuntime(options = {}) {\n\tconst docker = options.docker ?? new Docker();\n\treturn { async start(input) {\n\t\tconst launch = resolveRuntimeLaunch(options, input.artifactUrl, input.database, input.env);\n\t\tawait ensureImage(docker, launch.image);\n\t\tawait removeExistingContainer(docker, input.projectId);\n\t\tconst container = await docker.createContainer({\n\t\t\tImage: launch.image,\n\t\t\tname: containerName(input.projectId),\n\t\t\tLabels: {\n\t\t\t\t\"keystroke.project.id\": input.projectId,\n\t\t\t\t\"keystroke.project.name\": input.name\n\t\t\t},\n\t\t\tExposedPorts: { [`${launch.port}/tcp`]: {} },\n\t\t\tHostConfig: {\n\t\t\t\tExtraHosts: [\"host.docker.internal:host-gateway\"],\n\t\t\t\tPortBindings: { [`${launch.port}/tcp`]: [{ HostPort: \"0\" }] }\n\t\t\t},\n\t\t\tNetworkingConfig: { EndpointsConfig: { [MINIO_DOCKER_NETWORK]: {} } },\n\t\t\tEnv: formatDockerEnv(launch.env)\n\t\t});\n\t\tawait container.start();\n\t\tconst inspect = await container.inspect();\n\t\tconst binding = inspect.NetworkSettings.Ports?.[`${launch.port}/tcp`]?.[0];\n\t\tif (!binding?.HostPort) throw new Error(\"Failed to resolve project container host port\");\n\t\tconst baseUrl = `http://127.0.0.1:${binding.HostPort}`;\n\t\tawait waitForHealth(baseUrl, {\n\t\t\tfetchImpl: options.fetchImpl,\n\t\t\ttimeoutMs: options.healthTimeoutMs\n\t\t});\n\t\treturn {\n\t\t\truntimeId: inspect.Id,\n\t\t\tbaseUrl\n\t\t};\n\t} };\n}\nfunction containerName(projectId) {\n\treturn `keystroke-project-${projectId}`;\n}\nasync function removeExistingContainer(docker, projectId) {\n\ttry {\n\t\tconst existing = docker.getContainer(containerName(projectId));\n\t\tawait existing.stop({ t: 5 }).catch(() => void 0);\n\t\tawait existing.remove({ force: true });\n\t} catch {}\n}\nasync function ensureImage(docker, image) {\n\ttry {\n\t\tawait docker.getImage(image).inspect();\n\t\treturn;\n\t} catch {}\n\tawait new Promise((resolvePromise, reject) => {\n\t\tdocker.pull(image, (error, stream) => {\n\t\t\tif (error) {\n\t\t\t\treject(error);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!stream) {\n\t\t\t\treject(/* @__PURE__ */ new Error(`Failed to pull image ${image}`));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tdocker.modem.followProgress(stream, (progressError) => {\n\t\t\t\tif (progressError) {\n\t\t\t\t\treject(progressError);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tresolvePromise();\n\t\t\t});\n\t\t});\n\t});\n}\n//#endregion\n//#region src/docker/plugin.ts\nfunction dockerPlugin(options = {}) {\n\tconst env = options.env ?? process.env;\n\treturn {\n\t\tname: \"docker\",\n\t\tworkerRuntime: resolveWorkerRuntimeConfig(env),\n\t\tcreateRuntime: () => createDockerRuntime({\n\t\t\t...options,\n\t\t\tenv\n\t\t})\n\t};\n}\n//#endregion\n//#region src/default-plugin.ts\n/** Local Docker hosting — default for platform and dev. */\nfunction defaultHostingPlugin(options = {}) {\n\treturn dockerPlugin(options);\n}\n//#endregion\n//#region src/runtime-constants.ts\n/** Timeout for a single project runtime `/health` probe. */\nconst RUNTIME_PING_TIMEOUT_MS = 15e3;\n//#endregion\n//#region src/ping-project.ts\nasync function pingProject(baseUrl, options = {}) {\n\tconst timeoutMs = options.timeoutMs ?? 15e3;\n\tconst headers = options.plugin?.pingRequestHeaders?.(options.runtimeId ?? null) ?? {};\n\ttry {\n\t\treturn (await (options.fetchImpl ?? fetch)(new URL(PROJECT_SERVER_HEALTH.path, baseUrl), {\n\t\t\tsignal: AbortSignal.timeout(timeoutMs),\n\t\t\theaders\n\t\t})).ok;\n\t} catch {\n\t\treturn false;\n\t}\n}\n//#endregion\n//#region src/ping-project-target.ts\nfunction canPingProjectTarget(target, plugin) {\n\tif (plugin?.canPingTarget) return plugin.canPingTarget(target);\n\treturn !!target.baseUrl;\n}\nasync function pingProjectTarget(target, options = {}) {\n\tif (!canPingProjectTarget(target, options.plugin)) return false;\n\treturn pingProject(target.baseUrl, {\n\t\t...options,\n\t\truntimeId: target.runtimeId\n\t});\n}\n//#endregion\nexport { DEV_PLATFORM_WORKER_TOKEN, PROJECT_DATABASE_ENV_KEYS, PROJECT_SERVER_FRAMEWORK_NODE_MODULES, PROJECT_SERVER_FRAMEWORK_ROOT, PROJECT_SERVER_HEALTH, PROJECT_SERVER_IMAGE, PROJECT_SERVER_PORT, PROJECT_SERVER_ROOT, RUNTIME_PING_TIMEOUT_MS, WorkerRuntimeConfigError, buildRuntimeEnv, canPingProjectTarget, defaultHostingPlugin, dockerPlugin, formatDockerEnv, pingProject, pingProjectTarget, projectDatabaseRuntimeEnv, resolvePlatformWorkerToken, resolveProjectServerImage, resolveRuntimeLaunch, resolveWorkerPlatformUrl, resolveWorkerRuntimeConfig, rewriteLoopbackHost, rewriteLoopbackUrl, waitForHealth };\n\n//# sourceMappingURL=index.mjs.map"],"mappings":"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"}
|
|
@@ -72,7 +72,7 @@ function buildRuntimeEnv(source, artifactUrl, database, extraEnv) {
|
|
|
72
72
|
}
|
|
73
73
|
entries.set(key, value);
|
|
74
74
|
}
|
|
75
|
-
for (const key of PROVIDER_ENV_KEYS) {
|
|
75
|
+
if (!extraEnv) for (const key of PROVIDER_ENV_KEYS) {
|
|
76
76
|
const value = source[key]?.trim();
|
|
77
77
|
if (value) entries.set(key, value);
|
|
78
78
|
}
|
|
@@ -289,4 +289,4 @@ Object.defineProperty(exports, "pingProjectTarget", {
|
|
|
289
289
|
}
|
|
290
290
|
});
|
|
291
291
|
|
|
292
|
-
//# sourceMappingURL=dist-
|
|
292
|
+
//# sourceMappingURL=dist-DORNYvce.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dist-DORNYvce.cjs","names":["Docker"],"sources":["../../../packages/hosting/dist/index.mjs"],"sourcesContent":["import Docker from \"dockerode\";\n//#region src/constants.ts\nconst PROJECT_SERVER_IMAGE = \"keystroke/project-server:local\";\nconst PROJECT_SERVER_PORT = 3e3;\nconst PROJECT_SERVER_ROOT = \"/app\";\nconst PROJECT_SERVER_FRAMEWORK_ROOT = \"/opt/keystroke\";\nconst PROJECT_SERVER_FRAMEWORK_NODE_MODULES = `${PROJECT_SERVER_FRAMEWORK_ROOT}/node_modules`;\nconst PROJECT_SERVER_HEALTH = {\n\tpath: \"/health\",\n\tport: PROJECT_SERVER_PORT\n};\n//#endregion\n//#region src/runtime-env.ts\nconst RUNTIME_ENV_KEYS = [\n\t\"BETTER_AUTH_SECRET\",\n\t\"PUBLIC_SERVER_URL\",\n\t\"PUBLIC_WEB_URL\",\n\t\"POSTGRES_SSL\",\n\t\"KEYSTROKE_SCHEDULER_MODULE\"\n];\n/** Provider and gateway env forwarded from the platform into project servers. */\nconst PROVIDER_ENV_KEYS = [\n\t\"ANTHROPIC_API_KEY\",\n\t\"OPENAI_API_KEY\",\n\t\"AI_GATEWAY_API_KEY\",\n\t\"AI_GATEWAY_BASE_URL\"\n];\n/** Shared dev token when `PLATFORM_WORKER_TOKEN` is unset (non-production only). */\nconst DEV_PLATFORM_WORKER_TOKEN = \"dev-platform-worker-token\";\nconst PROJECT_DATABASE_ENV_KEYS = [\n\t\"POSTGRES_HOST\",\n\t\"POSTGRES_PORT\",\n\t\"POSTGRES_DB\",\n\t\"POSTGRES_USER\",\n\t\"POSTGRES_PASSWORD\",\n\t\"DATABASE_SEARCH_PATH\"\n];\n/** Per-project postgres env injected into every project server container/machine. */\nfunction projectDatabaseRuntimeEnv(database) {\n\treturn {\n\t\tPOSTGRES_HOST: rewriteLoopbackHost(database.host),\n\t\tPOSTGRES_PORT: String(database.port),\n\t\tPOSTGRES_DB: database.database,\n\t\tPOSTGRES_USER: database.user,\n\t\tPOSTGRES_PASSWORD: database.password,\n\t\tDATABASE_SEARCH_PATH: database.searchPath\n\t};\n}\n/**\n* Builds the launch spec for a single project server. `artifactUrl` is the\n* per-project presigned URL to that deploy's built `dist` — there is no base\n* image, so it is required.\n*/\nfunction resolveRuntimeLaunch(options, artifactUrl, database, extraEnv) {\n\tif (!artifactUrl) throw new Error(\"Cannot start a project server without an artifact URL\");\n\tconst env = options.env ?? process.env;\n\treturn {\n\t\timage: resolveProjectServerImage(env, options.image),\n\t\tenv: buildRuntimeEnv(env, artifactUrl, database, extraEnv),\n\t\tport: PROJECT_SERVER_PORT,\n\t\thealth: PROJECT_SERVER_HEALTH\n\t};\n}\n/** Env vars passed into the project server container/machine. */\nfunction buildRuntimeEnv(source, artifactUrl, database, extraEnv) {\n\tconst mode = source.KEYSTROKE_MODE ?? \"worker\";\n\tconst entries = new Map([\n\t\t[\"PORT\", String(PROJECT_SERVER_PORT)],\n\t\t[\"KEYSTROKE_ROOT\", PROJECT_SERVER_ROOT],\n\t\t[\"KEYSTROKE_RUNTIME_NODE_MODULES\", PROJECT_SERVER_FRAMEWORK_NODE_MODULES],\n\t\t[\"ARTIFACT_URL\", artifactUrl],\n\t\t[\"KEYSTROKE_MODE\", mode],\n\t\t[\"PROJECT_ID\", database.projectId],\n\t\t[\"ORGANIZATION_ID\", database.organizationId],\n\t\t[\"TENANT_ID\", database.organizationId]\n\t]);\n\tfor (const key of RUNTIME_ENV_KEYS) {\n\t\tconst value = source[key]?.trim();\n\t\tif (!value) {\n\t\t\tif (key === \"POSTGRES_SSL\") throw new Error(\"POSTGRES_SSL is required\");\n\t\t\tcontinue;\n\t\t}\n\t\tentries.set(key, value);\n\t}\n\tif (!extraEnv) for (const key of PROVIDER_ENV_KEYS) {\n\t\tconst value = source[key]?.trim();\n\t\tif (value) entries.set(key, value);\n\t}\n\tif (mode !== \"worker\") {\n\t\tconst credentialsKey = source.CREDENTIALS_ENCRYPTION_KEY;\n\t\tif (credentialsKey) entries.set(\"CREDENTIALS_ENCRYPTION_KEY\", credentialsKey);\n\t}\n\tif (mode === \"worker\") {\n\t\tconst worker = resolveWorkerRuntimeConfig(source);\n\t\tentries.set(\"PLATFORM_URL\", worker.platformUrl);\n\t\tentries.set(\"WORKER_INTERNAL_TOKEN\", worker.workerToken);\n\t}\n\tfor (const [key, value] of Object.entries(projectDatabaseRuntimeEnv(database))) entries.set(key, value);\n\tif (extraEnv) for (const [key, value] of Object.entries(extraEnv)) entries.set(key, value);\n\treturn Object.fromEntries(entries);\n}\nfunction resolvePlatformWorkerToken(source = process.env) {\n\tconst explicit = source.PLATFORM_WORKER_TOKEN?.trim() ?? source.WORKER_INTERNAL_TOKEN?.trim();\n\tif (explicit) return explicit;\n\tif (source.NODE_ENV === \"production\") return;\n\treturn DEV_PLATFORM_WORKER_TOKEN;\n}\n/** Platform API URL reachable from a project-server container. */\nconst DEV_PLATFORM_URL = \"http://localhost:3002\";\nfunction resolveWorkerPlatformUrl(source = process.env) {\n\tconst raw = source.PLATFORM_URL?.trim() ?? source.PUBLIC_PLATFORM_URL?.trim() ?? (source.NODE_ENV === \"production\" ? void 0 : DEV_PLATFORM_URL);\n\tif (!raw) return;\n\treturn rewriteLoopbackUrl(raw);\n}\n/** Rewrite loopback hosts so containers can reach Postgres and other host services. */\nfunction rewriteLoopbackHost(host) {\n\tif (host === \"localhost\" || host === \"127.0.0.1\") return \"host.docker.internal\";\n\treturn host;\n}\nfunction rewriteLoopbackUrl(url) {\n\ttry {\n\t\tconst parsed = new URL(url);\n\t\tparsed.hostname = rewriteLoopbackHost(parsed.hostname);\n\t\treturn parsed.toString().replace(/\\/$/, \"\");\n\t} catch {\n\t\treturn url;\n\t}\n}\n/** dockerode expects `KEY=value` strings. */\nfunction formatDockerEnv(env) {\n\treturn Object.entries(env).map(([key, value]) => `${key}=${value}`);\n}\nfunction resolveProjectServerImage(env = process.env, override) {\n\treturn override ?? env.PROJECT_DOCKER_IMAGE ?? env.TENANT_DOCKER_IMAGE ?? \"keystroke/project-server:local\";\n}\n//#endregion\n//#region src/worker-runtime-config.ts\nvar WorkerRuntimeConfigError = class extends Error {\n\tmissing;\n\tconstructor(missing) {\n\t\tsuper(`Worker runtime config incomplete (missing: ${missing.join(\", \")}). In production set PLATFORM_WORKER_TOKEN and PUBLIC_PLATFORM_URL (or PLATFORM_URL).`);\n\t\tthis.name = \"WorkerRuntimeConfigError\";\n\t\tthis.missing = missing;\n\t}\n};\n/** Fail fast when the platform cannot start worker-mode project servers. */\nfunction resolveWorkerRuntimeConfig(source = process.env) {\n\tconst platformUrl = resolveWorkerPlatformUrl(source);\n\tconst workerToken = resolvePlatformWorkerToken(source);\n\tconst missing = [];\n\tif (!platformUrl) missing.push(\"PUBLIC_PLATFORM_URL or PLATFORM_URL\");\n\tif (!workerToken) missing.push(\"PLATFORM_WORKER_TOKEN\");\n\tif (missing.length > 0) throw new WorkerRuntimeConfigError(missing);\n\treturn {\n\t\tplatformUrl,\n\t\tworkerToken\n\t};\n}\n//#endregion\n//#region src/wait-for-health.ts\nconst DEFAULT_TIMEOUT_MS = 12e4;\nconst DEFAULT_INTERVAL_MS = 500;\nasync function waitForHealth(baseUrl, options = {}) {\n\tconst fetchImpl = options.fetchImpl ?? fetch;\n\tconst timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;\n\tconst intervalMs = options.intervalMs ?? DEFAULT_INTERVAL_MS;\n\tconst deadline = Date.now() + timeoutMs;\n\tconst url = new URL(PROJECT_SERVER_HEALTH.path, baseUrl);\n\twhile (Date.now() < deadline) {\n\t\ttry {\n\t\t\tif ((await fetchImpl(url, { signal: AbortSignal.timeout(2e3) })).ok) return;\n\t\t} catch {}\n\t\tawait sleep(intervalMs);\n\t}\n\tthrow new Error(`Project server health check timed out after ${timeoutMs}ms (${url})`);\n}\nfunction sleep(ms) {\n\treturn new Promise((resolve) => {\n\t\tsetTimeout(resolve, ms);\n\t});\n}\n//#endregion\n//#region src/docker/create-docker-runtime.ts\nconst MINIO_DOCKER_NETWORK = process.env.MINIO_DOCKER_NETWORK ?? \"keystroke\";\nfunction createDockerRuntime(options = {}) {\n\tconst docker = options.docker ?? new Docker();\n\treturn { async start(input) {\n\t\tconst launch = resolveRuntimeLaunch(options, input.artifactUrl, input.database, input.env);\n\t\tawait ensureImage(docker, launch.image);\n\t\tawait removeExistingContainer(docker, input.projectId);\n\t\tconst container = await docker.createContainer({\n\t\t\tImage: launch.image,\n\t\t\tname: containerName(input.projectId),\n\t\t\tLabels: {\n\t\t\t\t\"keystroke.project.id\": input.projectId,\n\t\t\t\t\"keystroke.project.name\": input.name\n\t\t\t},\n\t\t\tExposedPorts: { [`${launch.port}/tcp`]: {} },\n\t\t\tHostConfig: {\n\t\t\t\tExtraHosts: [\"host.docker.internal:host-gateway\"],\n\t\t\t\tPortBindings: { [`${launch.port}/tcp`]: [{ HostPort: \"0\" }] }\n\t\t\t},\n\t\t\tNetworkingConfig: { EndpointsConfig: { [MINIO_DOCKER_NETWORK]: {} } },\n\t\t\tEnv: formatDockerEnv(launch.env)\n\t\t});\n\t\tawait container.start();\n\t\tconst inspect = await container.inspect();\n\t\tconst binding = inspect.NetworkSettings.Ports?.[`${launch.port}/tcp`]?.[0];\n\t\tif (!binding?.HostPort) throw new Error(\"Failed to resolve project container host port\");\n\t\tconst baseUrl = `http://127.0.0.1:${binding.HostPort}`;\n\t\tawait waitForHealth(baseUrl, {\n\t\t\tfetchImpl: options.fetchImpl,\n\t\t\ttimeoutMs: options.healthTimeoutMs\n\t\t});\n\t\treturn {\n\t\t\truntimeId: inspect.Id,\n\t\t\tbaseUrl\n\t\t};\n\t} };\n}\nfunction containerName(projectId) {\n\treturn `keystroke-project-${projectId}`;\n}\nasync function removeExistingContainer(docker, projectId) {\n\ttry {\n\t\tconst existing = docker.getContainer(containerName(projectId));\n\t\tawait existing.stop({ t: 5 }).catch(() => void 0);\n\t\tawait existing.remove({ force: true });\n\t} catch {}\n}\nasync function ensureImage(docker, image) {\n\ttry {\n\t\tawait docker.getImage(image).inspect();\n\t\treturn;\n\t} catch {}\n\tawait new Promise((resolvePromise, reject) => {\n\t\tdocker.pull(image, (error, stream) => {\n\t\t\tif (error) {\n\t\t\t\treject(error);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!stream) {\n\t\t\t\treject(/* @__PURE__ */ new Error(`Failed to pull image ${image}`));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tdocker.modem.followProgress(stream, (progressError) => {\n\t\t\t\tif (progressError) {\n\t\t\t\t\treject(progressError);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tresolvePromise();\n\t\t\t});\n\t\t});\n\t});\n}\n//#endregion\n//#region src/docker/plugin.ts\nfunction dockerPlugin(options = {}) {\n\tconst env = options.env ?? process.env;\n\treturn {\n\t\tname: \"docker\",\n\t\tworkerRuntime: resolveWorkerRuntimeConfig(env),\n\t\tcreateRuntime: () => createDockerRuntime({\n\t\t\t...options,\n\t\t\tenv\n\t\t})\n\t};\n}\n//#endregion\n//#region src/default-plugin.ts\n/** Local Docker hosting — default for platform and dev. */\nfunction defaultHostingPlugin(options = {}) {\n\treturn dockerPlugin(options);\n}\n//#endregion\n//#region src/runtime-constants.ts\n/** Timeout for a single project runtime `/health` probe. */\nconst RUNTIME_PING_TIMEOUT_MS = 15e3;\n//#endregion\n//#region src/ping-project.ts\nasync function pingProject(baseUrl, options = {}) {\n\tconst timeoutMs = options.timeoutMs ?? 15e3;\n\tconst headers = options.plugin?.pingRequestHeaders?.(options.runtimeId ?? null) ?? {};\n\ttry {\n\t\treturn (await (options.fetchImpl ?? fetch)(new URL(PROJECT_SERVER_HEALTH.path, baseUrl), {\n\t\t\tsignal: AbortSignal.timeout(timeoutMs),\n\t\t\theaders\n\t\t})).ok;\n\t} catch {\n\t\treturn false;\n\t}\n}\n//#endregion\n//#region src/ping-project-target.ts\nfunction canPingProjectTarget(target, plugin) {\n\tif (plugin?.canPingTarget) return plugin.canPingTarget(target);\n\treturn !!target.baseUrl;\n}\nasync function pingProjectTarget(target, options = {}) {\n\tif (!canPingProjectTarget(target, options.plugin)) return false;\n\treturn pingProject(target.baseUrl, {\n\t\t...options,\n\t\truntimeId: target.runtimeId\n\t});\n}\n//#endregion\nexport { DEV_PLATFORM_WORKER_TOKEN, PROJECT_DATABASE_ENV_KEYS, PROJECT_SERVER_FRAMEWORK_NODE_MODULES, PROJECT_SERVER_FRAMEWORK_ROOT, PROJECT_SERVER_HEALTH, PROJECT_SERVER_IMAGE, PROJECT_SERVER_PORT, PROJECT_SERVER_ROOT, RUNTIME_PING_TIMEOUT_MS, WorkerRuntimeConfigError, buildRuntimeEnv, canPingProjectTarget, defaultHostingPlugin, dockerPlugin, formatDockerEnv, pingProject, pingProjectTarget, projectDatabaseRuntimeEnv, resolvePlatformWorkerToken, resolveProjectServerImage, resolveRuntimeLaunch, resolveWorkerPlatformUrl, resolveWorkerRuntimeConfig, rewriteLoopbackHost, rewriteLoopbackUrl, waitForHealth };\n\n//# sourceMappingURL=index.mjs.map"],"mappings":"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"}
|
package/dist/run.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
const require_config = require("./config.cjs");
|
|
2
|
-
const require_start = require("./start-
|
|
2
|
+
const require_start = require("./start-DDACC7ww.cjs");
|
|
3
3
|
//#region src/run.ts
|
|
4
4
|
async function main() {
|
|
5
5
|
await require_start.startPlatformServer(require_config.definePlatformConfig());
|
package/dist/run.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { definePlatformConfig } from "./config.mjs";
|
|
2
|
-
import { t as startPlatformServer } from "./start-
|
|
2
|
+
import { t as startPlatformServer } from "./start-3cyJAXfs.mjs";
|
|
3
3
|
//#region src/run.ts
|
|
4
4
|
async function main() {
|
|
5
5
|
await startPlatformServer(definePlatformConfig());
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { n as pingProjectTarget } from "./dist-
|
|
1
|
+
import { n as pingProjectTarget } from "./dist-CkPv4pkS.mjs";
|
|
2
2
|
import { $ as SlugAvailabilityQuerySchema, B as PLATFORM_RESOURCE_UNSUPPORTED_TEXT, C as CreateProjectRequestSchema, D as DeclineOrganizationInvitationResponseSchema, Dt as mapProject, Et as mapOrganizationMember, F as ListOrganizationsResponseSchema, G as ProjectResponseSchema, H as PresignProjectSourceRequestSchema, I as ListProjectFilesResponseSchema, K as PromptInputSchema, L as ListProjectsResponseSchema, Lt as projectFileId, M as InviteOrganizationMembersResponseSchema, Mt as organizationSlugErrorCodeFromMessage, N as ListOrganizationInvitationsResponseSchema, O as ErrorResponseSchema, Ot as mapProjectArtifact, P as ListOrganizationMembersResponseSchema, Pt as parseStoredRouteManifest, Q as SkillSummarySchema, S as CreateProjectArtifactResponseSchema, Tt as mapOrganizationInvitation, U as PresignProjectSourceResponseSchema, V as PLATFORM_RESOURCE_UNSUPPORTED_TIMESTAMP, W as ProjectReachabilityResponseSchema, X as SkillSummaryDetailResponseSchema, Y as SetActiveOrganizationRequestSchema, Z as SkillSummaryListResponseSchema, a as projectSourceBlobKey, b as CreateOrganizationRequestSchema, bt as WorkflowSummaryListResponseSchema, c as AcceptOrganizationInvitationResponseSchema, ct as UpdateOrganizationMemberRequestSchema, dt as UploadProjectSourceManifestRequestSchema, et as SlugAvailabilityResponseSchema, ft as UploadProjectSourceResponseSchema, h as AgentSummarySchema, i as projectArtifactKey, j as InviteOrganizationMembersRequestSchema, jt as organizationInvitationAcceptPath, kt as mapUserOrganization, l as ActiveOrganizationResponseSchema, lt as UpdateOrganizationMemberResponseSchema, m as AgentSummaryListResponseSchema, nt as StoredRouteManifestSchema, o as ACTIVE_ORG_COOKIE, p as AgentSummaryDetailResponseSchema, s as ACTIVE_ORG_HEADER, tt as StoredProjectSourceManifestSchema, ut as UpdateOrganizationRequestSchema, v as CompleteProjectArtifactResponseSchema, w as CreateProjectResponseSchema, wt as listenPortFromPublicUrl, x as CreateOrganizationResponseSchema, xt as WorkflowSummarySchema, yt as WorkflowSummaryDetailResponseSchema, zt as validationErrorResponse } from "./dist-CCH-WLnH.mjs";
|
|
3
3
|
import { $ as createScheduler, $n as authSessions, $t as createProjectForOrganization, A as webhookRouteFromEndpoint, An as selectProjectsByOrganizationId, Bn as updateProjectFailed, Bt as AmbiguousOAuthInstallationError, Cn as selectOrganizationById, D as syncRegistryFromStoredManifest, Dn as selectProjectArtifactForProject, E as seedOAuthAppsFromEnvForOrganization, En as selectProjectArtifactById, Fn as updateOrganizationMemberRole, Gn as runWithProjectDatabase, Gt as OrganizationMemberNotFoundError, Hn as createPgConnection, Ht as OrganizationInvitationExpiredError, In as updateOrganizationSlug, Jn as selectActiveWorkflowByKey, Jt as checkOrganizationSlugAvailability, Kn as runWithProjectScope, Kt as OrganizationSlugTakenError, Ln as updateProjectActive, M as workflowRunsListHandler, Mn as selectUserByNormalizedEmail, N as createSlackGatewayIngress, Nn as selectUserOrganizationMembership, O as triggerRunDetailHandler, On as selectProjectById, Pn as selectUserOrganizations, Q as configureSharedScheduler, Qn as authDeviceCodes, Qt as createOrganizationForUser, Rn as updateProjectArtifactManifest, S as mountWorkflowCredentialRoutes, Sn as selectActiveArtifactSourceManifestForProject, T as seedOAuthAppsFromEnvForAllOrganizations, Tn as selectPendingInvitationsForUser, Un as getOrCreateGatewayThreadSession, Ut as OrganizationInvitationForbiddenError, Vn as verifyWebhookApiKeyForRoute, Vt as CannotModifyOwnerError, Wn as getProjectScopeId, Wt as OrganizationInvitationNotFoundError, Xn as selectEphemeralTriggerAttachments, Xt as createOrgContainerPresign, Yn as selectAgentByKey, Yt as completeProjectArtifact, Zn as authAccounts, Zt as createOrgStorageClient, _n as resolveProjectRuntimeDatabase, _t as createOAuthTokenRefreshRegistry, a as createAgentsListHandler, an as getOAuthAppSigningSecretByKeyGlobal, b as mountCredentialInstanceRoutes, bn as selectActiveArtifactManifestForProject, c as createTriggerGetHandler, cn as inviteOrganizationMembers, d as enqueueWebhookIngress, dn as normalizeUserEmail, en as declineInvitation, er as authVerifications, et as getPgBoss, f as enqueueWorkflowRunByKey, fn as promoteProjectArtifact, gn as resolveOrgDatabaseUrl, gt as createOAuthTokenAdapterFromBackend, h as findWorkflowManifestEntry, hn as resolveOAuthInstallationByAppKeyAndExternalId, ht as createLocalCredentialBackend, i as connectProvidersFromManifest, in as ensureWebhookApiKeys, it as prepareAgentSession, j as workflowRunDetailHandler, jn as selectUserById, k as triggerRunsListHandler, kn as selectProjectForOrganization, l as createTriggersListHandler, ln as isOrganizationStorageBucketInUse, m as fetchStoredRouteManifest, mn as resolveNewOrganizationIdentity, n as agentSessionsListHandler, nn as ensureProjectPgBossGrants, nr as users, nt as startPgBoss, o as createCredentialMaterializeHandler, on as initDatabase, p as extractWebhookRoutesFromManifest, pn as removeOrganizationMember, qn as runWithTenantScope, qt as acceptInvitation, r as buildWebhookUrl, rn as ensureWebhookApiKeyForRoute, rt as matchWebhookPayload, s as createGatewayAttachmentHandlers, sn as insertProjectArtifact, t as agentSessionDetailHandler, tn as encryptCredentialPayload, tr as getDatabaseHandle, tt as resolveSchedulerPluginFromEnv, u as enqueueAgentPrompt, un as listWebhookApiKeysForProject, v as listKnownIntegrationKeys, vn as runWithOrganizationScope, w as resumeWorkflowHook, wn as selectOrganizationMembers, x as mountProjectIntegrations, xn as selectActiveArtifactManifestsByOrganizationId, y as loadWebhookAttachmentSchemasForRoute, yn as runWithWorkspaceContext, zn as updateProjectArtifactSourceManifest } from "./dist-CPTy7F9l.mjs";
|
|
4
4
|
import { ZodError, z } from "zod";
|
|
@@ -1993,4 +1993,4 @@ async function startPlatformServer(platformConfig, hooks = {}) {
|
|
|
1993
1993
|
//#endregion
|
|
1994
1994
|
export { startPlatformServer as t };
|
|
1995
1995
|
|
|
1996
|
-
//# sourceMappingURL=start-
|
|
1996
|
+
//# sourceMappingURL=start-3cyJAXfs.mjs.map
|