@farm.js/core 0.1.0-beta.97 → 0.1.0-beta.99
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/after.cjs.map +1 -0
- package/dist/agent-runtime.cjs +7 -3
- package/dist/agent-runtime.cjs.map +1 -0
- package/dist/agent-runtime.d.mts +2 -2
- package/dist/agent-runtime.d.ts +2 -2
- package/dist/agent-runtime.mjs +2 -1
- package/dist/agent-runtime.mjs.map +1 -1
- package/dist/api/route-manager.cjs.map +1 -0
- package/dist/api/route-manager.d.mts +2 -2
- package/dist/api/route-manager.d.ts +2 -2
- package/dist/api/runtime.cjs.map +1 -0
- package/dist/api.cjs +26 -1
- package/dist/api.cjs.map +1 -0
- package/dist/api.d.mts +3 -3
- package/dist/api.d.ts +3 -3
- package/dist/api.mjs +2 -2
- package/dist/{app-CIOx3LvY.d.ts → app-CGjrKNoN.d.ts} +4 -4
- package/dist/{app-DBd6437H.d.mts → app-DOcLs_iq.d.mts} +4 -4
- package/dist/app-markdown.cjs +21 -0
- package/dist/app-markdown.cjs.map +1 -0
- package/dist/app-markdown.d.mts +19 -4
- package/dist/app-markdown.d.ts +19 -4
- package/dist/app-markdown.mjs +7 -1
- package/dist/cache.cjs.map +1 -0
- package/dist/{chunk-VMCHLH3Y.mjs → chunk-26BCDVJS.mjs} +19 -1
- package/dist/chunk-26BCDVJS.mjs.map +1 -0
- package/dist/{chunk-FP5Q67FO.mjs → chunk-2HYYZCCI.mjs} +308 -19
- package/dist/chunk-2HYYZCCI.mjs.map +1 -0
- package/dist/{chunk-WKDAA6V2.mjs → chunk-3BTAMIQE.mjs} +100 -41
- package/dist/chunk-3BTAMIQE.mjs.map +1 -0
- package/dist/{chunk-WD2EBM3I.mjs → chunk-3CQJV3NC.mjs} +2 -2
- package/dist/{chunk-I3OOUWO5.mjs → chunk-3GDRV7SG.mjs} +2 -2
- package/dist/{chunk-YIBV77KZ.mjs → chunk-4WLAVHCY.mjs} +2 -2
- package/dist/{chunk-KDP5ZSWP.mjs → chunk-7PS5NKOM.mjs} +26 -11
- package/dist/chunk-7PS5NKOM.mjs.map +1 -0
- package/dist/{chunk-X4SFHKFH.mjs → chunk-BU65A3LZ.mjs} +10 -6
- package/dist/chunk-BU65A3LZ.mjs.map +1 -0
- package/dist/{chunk-WMJGA32P.mjs → chunk-BXVOHG6B.mjs} +27 -2
- package/dist/{chunk-WMJGA32P.mjs.map → chunk-BXVOHG6B.mjs.map} +1 -1
- package/dist/{chunk-BZAIS65C.mjs → chunk-DIHNOVZZ.mjs} +40 -13
- package/dist/chunk-DIHNOVZZ.mjs.map +1 -0
- package/dist/{chunk-ISSFLGJ5.mjs → chunk-FDWECN3W.mjs} +8 -4
- package/dist/chunk-FDWECN3W.mjs.map +1 -0
- package/dist/chunk-FDWXXTWR.mjs +114 -0
- package/dist/chunk-FDWXXTWR.mjs.map +1 -0
- package/dist/{chunk-FSIXEIOB.mjs → chunk-L7FSTPGS.mjs} +2 -2
- package/dist/{chunk-J3MPQ4MQ.mjs → chunk-LG4XB6RN.mjs} +2 -2
- package/dist/{chunk-J3MPQ4MQ.mjs.map → chunk-LG4XB6RN.mjs.map} +1 -1
- package/dist/{chunk-AAC66ILR.mjs → chunk-LXXG3K2Y.mjs} +61 -2
- package/dist/chunk-LXXG3K2Y.mjs.map +1 -0
- package/dist/{chunk-GJ7W6LNK.mjs → chunk-N5RK4LK6.mjs} +3 -3
- package/dist/{chunk-D7F7YZ7L.mjs → chunk-NCVFPT67.mjs} +100 -40
- package/dist/{chunk-D7F7YZ7L.mjs.map → chunk-NCVFPT67.mjs.map} +1 -1
- package/dist/{chunk-UMUWR5XA.mjs → chunk-PURU7FXR.mjs} +2 -2
- package/dist/{chunk-2SKCXYLB.mjs → chunk-QQCCBMTH.mjs} +60 -6
- package/dist/chunk-QQCCBMTH.mjs.map +1 -0
- package/dist/chunk-RKUPOYQV.mjs +28 -0
- package/dist/chunk-RKUPOYQV.mjs.map +1 -0
- package/dist/{chunk-52BR7LTX.mjs → chunk-STSPSJUI.mjs} +3 -3
- package/dist/{chunk-EPDIF432.mjs → chunk-UOGX6UNO.mjs} +37 -17
- package/dist/chunk-UOGX6UNO.mjs.map +1 -0
- package/dist/{chunk-IZBX2TEU.mjs → chunk-VQG3QWWK.mjs} +2 -2
- package/dist/{chunk-35NPLKQJ.mjs → chunk-XWM2C267.mjs} +21 -105
- package/dist/chunk-XWM2C267.mjs.map +1 -0
- package/dist/{chunk-7ZVN3YZI.mjs → chunk-Z5ARESQG.mjs} +43 -1
- package/dist/chunk-Z5ARESQG.mjs.map +1 -0
- package/dist/client/lifecycle.cjs.map +1 -0
- package/dist/client/lifecycle.mjs +2 -2
- package/dist/{client-plugins-B6-07YmP.d.mts → client-plugins-BqtHoJ9C.d.mts} +91 -3
- package/dist/{client-plugins-By6MVUX-.d.ts → client-plugins-DYprkCKN.d.ts} +91 -3
- package/dist/client-plugins.cjs +1 -1
- package/dist/client-plugins.cjs.map +1 -0
- package/dist/client-plugins.d.mts +2 -2
- package/dist/client-plugins.d.ts +2 -2
- package/dist/client-plugins.mjs +2 -2
- package/dist/client.cjs +61 -16
- package/dist/client.cjs.map +1 -0
- package/dist/client.d.mts +5 -5
- package/dist/client.d.ts +5 -5
- package/dist/client.mjs +7 -7
- package/dist/config.cjs.map +1 -0
- package/dist/config.d.mts +2 -2
- package/dist/config.d.ts +2 -2
- package/dist/cron.cjs +48 -12
- package/dist/cron.cjs.map +1 -0
- package/dist/cron.mjs +2 -1
- package/dist/deferred.cjs.map +1 -0
- package/dist/deployment.cjs.map +1 -0
- package/dist/{devtools-XWZX6CCL.mjs → devtools-24N3U5IG.mjs} +9 -7
- package/dist/{devtools-XWZX6CCL.mjs.map → devtools-24N3U5IG.mjs.map} +1 -1
- package/dist/docs.cjs +7 -3
- package/dist/docs.cjs.map +1 -0
- package/dist/docs.mjs +9 -7
- package/dist/env-types.cjs.map +1 -0
- package/dist/env.cjs.map +1 -0
- package/dist/environment/vite.cjs.map +1 -0
- package/dist/environment.cjs.map +1 -0
- package/dist/font.cjs.map +1 -0
- package/dist/headers.cjs.map +1 -0
- package/dist/i18n/client.cjs.map +1 -0
- package/dist/i18n/index.cjs.map +1 -0
- package/dist/i18n/server.cjs.map +1 -0
- package/dist/image/server.cjs +99 -40
- package/dist/image/server.cjs.map +1 -0
- package/dist/image/server.d.mts +6 -0
- package/dist/image/server.d.ts +6 -0
- package/dist/image/server.mjs +1 -1
- package/dist/image/sharp.cjs +1 -0
- package/dist/image/sharp.cjs.map +1 -0
- package/dist/image/sharp.d.mts +1 -1
- package/dist/image/sharp.d.ts +1 -1
- package/dist/image/sharp.mjs +1 -1
- package/dist/image/sharp.mjs.map +1 -1
- package/dist/image.cjs.map +1 -0
- package/dist/index.cjs +943 -231
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.mts +11 -11
- package/dist/index.d.ts +11 -11
- package/dist/index.mjs +38 -24
- package/dist/index.mjs.map +1 -1
- package/dist/instrumentation.cjs.map +1 -0
- package/dist/{integration-orm-LLW6WZNK.mjs → integration-orm-G5BPBT5X.mjs} +3 -3
- package/dist/integrations.cjs +168 -5
- package/dist/integrations.cjs.map +1 -0
- package/dist/integrations.d.mts +2 -2
- package/dist/integrations.d.ts +2 -2
- package/dist/integrations.mjs +10 -3
- package/dist/internal/build-runtime.cjs +745 -139
- package/dist/internal/build-runtime.cjs.map +1 -0
- package/dist/internal/build-runtime.d.mts +4 -4
- package/dist/internal/build-runtime.d.ts +4 -4
- package/dist/internal/build-runtime.mjs +16 -14
- package/dist/internal/client-runtime.cjs +7 -2
- package/dist/internal/client-runtime.cjs.map +1 -0
- package/dist/internal/client-runtime.mjs +8 -3
- package/dist/internal/client-runtime.mjs.map +1 -1
- package/dist/internal/config-runtime.cjs +59 -42
- package/dist/internal/config-runtime.cjs.map +1 -0
- package/dist/internal/config-runtime.d.mts +3 -3
- package/dist/internal/config-runtime.d.ts +3 -3
- package/dist/internal/config-runtime.mjs +8 -6
- package/dist/internal/isolated-boundary.cjs.map +1 -0
- package/dist/internal/metadata-image-runtime.cjs.map +1 -0
- package/dist/internal/product-telemetry-runtime.cjs +52 -5
- package/dist/internal/product-telemetry-runtime.cjs.map +1 -0
- package/dist/internal/product-telemetry-runtime.d.mts +12 -1
- package/dist/internal/product-telemetry-runtime.d.ts +12 -1
- package/dist/internal/product-telemetry-runtime.mjs +50 -5
- package/dist/internal/product-telemetry-runtime.mjs.map +1 -1
- package/dist/internal/production-node-env.cjs.map +1 -0
- package/dist/internal/production-runtime.cjs +56 -10
- package/dist/internal/production-runtime.cjs.map +1 -0
- package/dist/internal/production-runtime.d.mts +8 -8
- package/dist/internal/production-runtime.d.ts +8 -8
- package/dist/internal/production-runtime.mjs +2 -2
- package/dist/markdown.cjs.map +1 -0
- package/dist/{metadata-route-8_V3UonT.d.ts → metadata-route-D2be_0kC.d.ts} +17 -2
- package/dist/{metadata-route-CWP_HjGU.d.mts → metadata-route-Dw5CrDIZ.d.mts} +17 -2
- package/dist/middleware.cjs.map +1 -0
- package/dist/middleware.d.mts +4 -4
- package/dist/middleware.d.ts +4 -4
- package/dist/navigation.cjs.map +1 -0
- package/dist/{nitro-EGRNOB5P.mjs → nitro-YJEP3FWM.mjs} +4 -3
- package/dist/{nitro-EGRNOB5P.mjs.map → nitro-YJEP3FWM.mjs.map} +1 -1
- package/dist/observability.cjs.map +1 -0
- package/dist/plugin.cjs +599 -104
- package/dist/plugin.cjs.map +1 -0
- package/dist/plugin.d.mts +2 -2
- package/dist/plugin.d.ts +2 -2
- package/dist/plugin.mjs +13 -11
- package/dist/{production-runtime-CdmzsDax.d.ts → production-runtime-CTqpD1C8.d.ts} +2 -2
- package/dist/{production-runtime-BGRH1dKG.d.mts → production-runtime-HNqNZd4D.d.mts} +2 -2
- package/dist/query/client.cjs.map +1 -0
- package/dist/query/index.cjs.map +1 -0
- package/dist/query/parsers.cjs.map +1 -0
- package/dist/query/server.cjs.map +1 -0
- package/dist/{render-plan-DLxJYAA5.d.mts → render-plan-COscpW-i.d.mts} +1 -1
- package/dist/{render-plan-0GeHiGVZ.d.ts → render-plan-Z4kSxaT_.d.ts} +1 -1
- package/dist/renderer/react/client.cjs.map +1 -0
- package/dist/renderer/react/server.cjs.map +1 -0
- package/dist/renderer/react/vite.cjs.map +1 -0
- package/dist/renderer-client.cjs +26 -1
- package/dist/renderer-client.cjs.map +1 -0
- package/dist/renderer-client.d.mts +4 -4
- package/dist/renderer-client.d.ts +4 -4
- package/dist/renderer-client.mjs +2 -2
- package/dist/renderer.cjs.map +1 -0
- package/dist/{request-BstWbZ6O.d.ts → request-BEDb2jE9.d.ts} +1 -1
- package/dist/{request-BCNXSXLh.d.mts → request-CbIAqJY9.d.mts} +1 -1
- package/dist/request.cjs.map +1 -0
- package/dist/request.d.mts +3 -3
- package/dist/request.d.ts +3 -3
- package/dist/router.cjs.map +1 -0
- package/dist/routes.cjs.map +1 -0
- package/dist/routes.d.mts +2 -2
- package/dist/routes.d.ts +2 -2
- package/dist/server-action-security.cjs +117 -104
- package/dist/server-action-security.cjs.map +1 -0
- package/dist/server-action-security.mjs +2 -1
- package/dist/server-fn-client.cjs.map +1 -0
- package/dist/server-fn.cjs.map +1 -0
- package/dist/server-fn.mjs +3 -2
- package/dist/server-plugins.cjs.map +1 -0
- package/dist/server-plugins.d.mts +3 -3
- package/dist/server-plugins.d.ts +3 -3
- package/dist/server-query-client.cjs +26 -1
- package/dist/server-query-client.cjs.map +1 -0
- package/dist/server-query-client.mjs +3 -3
- package/dist/server-query.cjs.map +1 -0
- package/dist/server-query.mjs +4 -3
- package/dist/server.cjs +686 -170
- package/dist/server.cjs.map +1 -0
- package/dist/server.d.mts +8 -8
- package/dist/server.d.ts +8 -8
- package/dist/server.mjs +16 -14
- package/dist/server.mjs.map +1 -1
- package/dist/{spa-router-COgu4txb.d.ts → spa-router-CjeQites.d.ts} +1 -1
- package/dist/{spa-router-BeyAVSc6.d.mts → spa-router-FJbNou1a.d.mts} +1 -1
- package/dist/storage.cjs +7 -3
- package/dist/storage.cjs.map +1 -0
- package/dist/storage.mjs +1 -1
- package/dist/testing.cjs.map +1 -0
- package/dist/testing.d.mts +2 -2
- package/dist/testing.d.ts +2 -2
- package/dist/testing.mjs +2 -1
- package/dist/testing.mjs.map +1 -1
- package/dist/theme/client.cjs.map +1 -0
- package/dist/theme/index.cjs.map +1 -0
- package/dist/theme/runtime.cjs.map +1 -0
- package/dist/theme/server.cjs.map +1 -0
- package/dist/{utils-DL2VwDQl.d.mts → utils-BiMJv9Ys.d.mts} +1 -1
- package/dist/{utils-DkU2c_1B.d.ts → utils-BpnKRFv9.d.ts} +1 -1
- package/dist/version.cjs +1 -1
- package/dist/version.cjs.map +1 -0
- package/dist/version.mjs +1 -1
- package/dist/vite.cjs +599 -104
- package/dist/vite.cjs.map +1 -0
- package/dist/vite.d.mts +2 -2
- package/dist/vite.d.ts +2 -2
- package/dist/vite.mjs +13 -11
- package/dist/{workflows-ChyK_oTu.d.mts → workflows-BantWytQ.d.mts} +7 -0
- package/dist/{workflows-ChyK_oTu.d.ts → workflows-BantWytQ.d.ts} +7 -0
- package/dist/workflows.cjs +73 -5
- package/dist/workflows.cjs.map +1 -0
- package/dist/workflows.d.mts +1 -1
- package/dist/workflows.d.ts +1 -1
- package/dist/workflows.mjs +2 -1
- package/package.json +17 -17
- package/dist/chunk-2SKCXYLB.mjs.map +0 -1
- package/dist/chunk-35NPLKQJ.mjs.map +0 -1
- package/dist/chunk-7ZVN3YZI.mjs.map +0 -1
- package/dist/chunk-AAC66ILR.mjs.map +0 -1
- package/dist/chunk-BZAIS65C.mjs.map +0 -1
- package/dist/chunk-EPDIF432.mjs.map +0 -1
- package/dist/chunk-FP5Q67FO.mjs.map +0 -1
- package/dist/chunk-ISSFLGJ5.mjs.map +0 -1
- package/dist/chunk-KDP5ZSWP.mjs.map +0 -1
- package/dist/chunk-VMCHLH3Y.mjs.map +0 -1
- package/dist/chunk-WKDAA6V2.mjs.map +0 -1
- package/dist/chunk-X4SFHKFH.mjs.map +0 -1
- /package/dist/{chunk-WD2EBM3I.mjs.map → chunk-3CQJV3NC.mjs.map} +0 -0
- /package/dist/{chunk-I3OOUWO5.mjs.map → chunk-3GDRV7SG.mjs.map} +0 -0
- /package/dist/{chunk-YIBV77KZ.mjs.map → chunk-4WLAVHCY.mjs.map} +0 -0
- /package/dist/{chunk-FSIXEIOB.mjs.map → chunk-L7FSTPGS.mjs.map} +0 -0
- /package/dist/{chunk-GJ7W6LNK.mjs.map → chunk-N5RK4LK6.mjs.map} +0 -0
- /package/dist/{chunk-UMUWR5XA.mjs.map → chunk-PURU7FXR.mjs.map} +0 -0
- /package/dist/{chunk-52BR7LTX.mjs.map → chunk-STSPSJUI.mjs.map} +0 -0
- /package/dist/{chunk-IZBX2TEU.mjs.map → chunk-VQG3QWWK.mjs.map} +0 -0
- /package/dist/{integration-orm-LLW6WZNK.mjs.map → integration-orm-G5BPBT5X.mjs.map} +0 -0
package/dist/agent-runtime.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ChildProcess } from 'node:child_process';
|
|
2
|
-
import { B as BundleResultPayload, a as FarmPlugin, p as FarmIntegration } from './client-plugins-
|
|
2
|
+
import { B as BundleResultPayload, a as FarmPlugin, p as FarmIntegration } from './client-plugins-BqtHoJ9C.mjs';
|
|
3
3
|
import './lifecycle-De0vQG45.mjs';
|
|
4
4
|
import './route-CvEr4Uc9.mjs';
|
|
5
5
|
import './cache.mjs';
|
|
@@ -17,7 +17,7 @@ import './markdown.mjs';
|
|
|
17
17
|
import './observability.mjs';
|
|
18
18
|
import '@opentelemetry/api';
|
|
19
19
|
import 'vite';
|
|
20
|
-
import './workflows-
|
|
20
|
+
import './workflows-BantWytQ.mjs';
|
|
21
21
|
import './cron.mjs';
|
|
22
22
|
import './env.mjs';
|
|
23
23
|
import './navigation-errors-Dvwpzaer.mjs';
|
package/dist/agent-runtime.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ChildProcess } from 'node:child_process';
|
|
2
|
-
import { B as BundleResultPayload, a as FarmPlugin, p as FarmIntegration } from './client-plugins-
|
|
2
|
+
import { B as BundleResultPayload, a as FarmPlugin, p as FarmIntegration } from './client-plugins-DYprkCKN.js';
|
|
3
3
|
import './lifecycle-De0vQG45.js';
|
|
4
4
|
import './route-4pd-EVtw.js';
|
|
5
5
|
import './cache.js';
|
|
@@ -17,7 +17,7 @@ import './markdown.js';
|
|
|
17
17
|
import './observability.js';
|
|
18
18
|
import '@opentelemetry/api';
|
|
19
19
|
import 'vite';
|
|
20
|
-
import './workflows-
|
|
20
|
+
import './workflows-BantWytQ.js';
|
|
21
21
|
import './cron.js';
|
|
22
22
|
import './env.js';
|
|
23
23
|
import './navigation-errors-Dvwpzaer.js';
|
package/dist/agent-runtime.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/agent-runtime.ts"],"sourcesContent":["import { spawn, type ChildProcess } from \"node:child_process\";\nimport { readFile } from \"node:fs/promises\";\nimport { createRequire } from \"node:module\";\nimport { createServer as createNetServer } from \"node:net\";\nimport { dirname, isAbsolute, join, relative, resolve } from \"node:path\";\nimport { defineIntegration, type FarmIntegration } from \"./integrations\";\nimport type { BundleResultPayload, FarmPlugin } from \"./plugin\";\n\nconst AGENT_RUNTIME_METHODS = [\n \"GET\",\n \"HEAD\",\n \"QUERY\",\n \"POST\",\n \"PUT\",\n \"PATCH\",\n \"DELETE\",\n \"OPTIONS\",\n] as const;\n\nconst HOP_BY_HOP_HEADERS = [\n \"connection\",\n \"keep-alive\",\n \"proxy-authenticate\",\n \"proxy-authorization\",\n \"te\",\n \"trailer\",\n \"transfer-encoding\",\n \"upgrade\",\n] as const;\n\nexport interface FarmAgentRuntimeInstance {\n readonly provider: string;\n readonly routePrefix: string;\n readonly routePrefixes: readonly string[];\n getOrigin(): string | undefined;\n}\n\nexport interface FarmManagedAgentRuntime {\n readonly origin: string;\n readonly process?: ChildProcess;\n stop(): Promise<void>;\n}\n\nexport interface FarmAgentRuntimeStartContext {\n readonly root: string;\n readonly log: {\n info(message: string, meta?: Record<string, unknown>): void;\n warn(message: string, meta?: Record<string, unknown>): void;\n error(message: string, meta?: Record<string, unknown>): void;\n };\n}\n\nexport interface FarmAgentRuntimeBuildContext extends BundleResultPayload {\n readonly provider: string;\n readonly routePrefix: string;\n readonly routePrefixes: readonly string[];\n}\n\nexport interface FarmAgentRuntimeIntegrationOptions {\n provider: string;\n routePrefix: string;\n /** Whether Farm's production server must dispatch this runtime's proxy routes. */\n serverRuntime?: boolean;\n additionalRoutePrefixes?: readonly string[];\n origin?: string;\n originEnv?: string | readonly string[];\n webSockets?: boolean;\n startDev?(context: FarmAgentRuntimeStartContext): Promise<FarmManagedAgentRuntime>;\n afterBuild?(context: FarmAgentRuntimeBuildContext): Promise<void> | void;\n plugins?: readonly FarmPlugin[];\n instance?: Record<string, unknown>;\n}\n\nexport interface FarmManagedProcessOptions {\n command: string;\n args?: readonly string[];\n cwd: string;\n env?: Record<string, string | undefined>;\n label: string;\n origin?: string;\n resolveOrigin?(output: string): string | undefined;\n healthPath?: string;\n timeoutMs?: number;\n stopTimeoutMs?: number;\n onOutput?(line: string, stream: \"stdout\" | \"stderr\"): void;\n}\n\nexport interface FarmAgentProxyOptions {\n fetch?: typeof globalThis.fetch;\n}\n\ninterface RuntimeState {\n origin?: string;\n managed?: FarmManagedAgentRuntime;\n}\n\nexport function createAgentRuntimeIntegration(\n options: FarmAgentRuntimeIntegrationOptions,\n): FarmIntegration {\n const provider = normalizeProviderName(options.provider);\n const routePrefix = normalizeAgentRoutePrefix(options.routePrefix);\n const routePrefixes = [\n routePrefix,\n ...(options.additionalRoutePrefixes || []).map(normalizeAgentRoutePrefix),\n ].filter((prefix, index, values) => values.indexOf(prefix) === index);\n const originEnv = normalizeOriginEnv(options.originEnv);\n const state: RuntimeState = {\n origin: resolveConfiguredOrigin(options.origin, originEnv),\n };\n\n const runtimeInstance: FarmAgentRuntimeInstance & Record<string, unknown> = {\n ...options.instance,\n provider,\n routePrefix,\n routePrefixes,\n getOrigin: () => state.origin ?? resolveConfiguredOrigin(options.origin, originEnv),\n };\n\n const runtimePlugin: FarmPlugin = {\n name: `farm:agent-runtime:${provider}`,\n config(config, context) {\n if (!context.isDev) {\n return config;\n }\n\n const origin = runtimeInstance.getOrigin();\n if (!origin) {\n return config;\n }\n\n for (const prefix of routePrefixes) {\n applyAgentRuntimeViteProxy(config, {\n origin,\n routePrefix: prefix,\n webSockets: options.webSockets,\n });\n }\n return config;\n },\n async afterBundle(result) {\n if (!result.success || !options.afterBuild) {\n return;\n }\n\n await options.afterBuild({\n ...result,\n provider,\n routePrefix,\n routePrefixes,\n });\n },\n };\n\n return defineIntegration({\n category: \"agent\",\n type: provider,\n serverRuntime: options.serverRuntime,\n instance: runtimeInstance,\n async setup(context) {\n if (!context.isDev || state.origin || !options.startDev) {\n return;\n }\n\n state.managed = await options.startDev({\n root: context.appConfig.root || process.cwd(),\n log: context.log,\n });\n state.origin = normalizeAgentOrigin(state.managed.origin);\n context.log.info(`${provider} runtime ready`, {\n origin: state.origin,\n });\n await context.cleanup(async () => {\n await state.managed?.stop();\n state.managed = undefined;\n state.origin = undefined;\n });\n },\n routes: routePrefixes.map((prefix) => ({\n path: `${prefix}/[...farmAgentRuntimePath]`,\n methods: AGENT_RUNTIME_METHODS,\n rawBody: true,\n async handler(request) {\n const origin = runtimeInstance.getOrigin();\n if (!origin) {\n return Response.json(\n {\n error: \"Agent runtime unavailable\",\n provider,\n },\n { status: 503 },\n );\n }\n\n return proxyAgentRuntimeRequest(request, origin);\n },\n })),\n plugins: [runtimePlugin, ...(options.plugins || [])],\n });\n}\n\nexport function applyAgentRuntimeViteProxy(\n config: { vite?: Record<string, any> },\n input: {\n origin: string;\n routePrefix: string;\n webSockets?: boolean;\n },\n): void {\n const origin = normalizeAgentOrigin(input.origin);\n const routePrefix = normalizeAgentRoutePrefix(input.routePrefix);\n const vite = config.vite || {};\n const server = vite.server || {};\n const proxy = server.proxy || {};\n\n if (proxy[routePrefix]) {\n throw new Error(\n `Farm agent runtime cannot own ${routePrefix} because vite.server.proxy already defines it.`,\n );\n }\n\n config.vite = {\n ...vite,\n server: {\n ...server,\n proxy: {\n ...proxy,\n [routePrefix]: {\n target: origin,\n changeOrigin: true,\n ws: input.webSockets === true,\n },\n },\n },\n };\n}\n\nexport async function proxyAgentRuntimeRequest(\n request: Request,\n origin: string,\n options: FarmAgentProxyOptions = {},\n): Promise<Response> {\n const upstreamOrigin = normalizeAgentOrigin(origin);\n const incomingUrl = new URL(request.url);\n const targetUrl = new URL(`${incomingUrl.pathname}${incomingUrl.search}`, upstreamOrigin);\n const headers = createProxyRequestHeaders(request.headers, incomingUrl);\n const method = request.method.toUpperCase();\n const init: RequestInit & { duplex?: \"half\" } = {\n method,\n headers,\n redirect: \"manual\",\n signal: request.signal,\n };\n\n if (method !== \"GET\" && method !== \"HEAD\" && request.body) {\n init.body = request.body;\n init.duplex = \"half\";\n }\n\n try {\n const upstream = await (options.fetch || globalThis.fetch)(targetUrl, init);\n const responseHeaders = new Headers(upstream.headers);\n removeHopByHopHeaders(responseHeaders);\n // Fetch decodes supported content codings before exposing the body while retaining\n // the upstream metadata. Forwarding those headers would make the client\n // try to decode an already-decoded stream and trust a stale byte length.\n const contentCodings = responseHeaders.get(\"content-encoding\")?.toLowerCase().split(\",\");\n if (\n upstream.body &&\n contentCodings?.length &&\n contentCodings.every((coding) => [\"gzip\", \"x-gzip\", \"deflate\", \"br\"].includes(coding.trim()))\n ) {\n responseHeaders.delete(\"content-encoding\");\n responseHeaders.delete(\"content-length\");\n }\n rewriteProxyLocation(responseHeaders, upstreamOrigin, incomingUrl.origin);\n\n return new Response(upstream.body, {\n status: upstream.status,\n statusText: upstream.statusText,\n headers: responseHeaders,\n });\n } catch (error) {\n if (request.signal.aborted || isAbortError(error)) {\n throw error;\n }\n\n return Response.json(\n {\n error: \"Agent runtime request failed\",\n },\n { status: 502 },\n );\n }\n}\n\nexport async function startManagedAgentRuntime(\n options: FarmManagedProcessOptions,\n): Promise<FarmManagedAgentRuntime> {\n const timeoutMs = options.timeoutMs ?? 30_000;\n const stopTimeoutMs = options.stopTimeoutMs ?? 2_000;\n const fixedOrigin = options.origin ? normalizeAgentOrigin(options.origin) : undefined;\n let output = \"\";\n let settled = false;\n let checkingReadiness = false;\n\n const child = spawn(options.command, [...(options.args || [])], {\n cwd: options.cwd,\n env: {\n ...process.env,\n ...options.env,\n },\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n });\n\n const origin = await new Promise<string>((resolveOrigin, reject) => {\n let timer: ReturnType<typeof setTimeout>;\n\n const finish = () => {\n if (settled) return;\n settled = true;\n clearTimeout(timer);\n child.off(\"error\", onError);\n child.off(\"exit\", onExit);\n };\n\n const succeed = async (candidate: string) => {\n if (settled || checkingReadiness) return;\n checkingReadiness = true;\n try {\n const normalized = normalizeAgentOrigin(candidate);\n await waitForAgentRuntime(normalized, options.healthPath, timeoutMs, child);\n finish();\n resolveOrigin(normalized);\n } catch (error) {\n finish();\n terminateChild(child);\n reject(error);\n }\n };\n\n timer = setTimeout(() => {\n finish();\n terminateChild(child);\n reject(new Error(`${options.label} did not become ready within ${timeoutMs}ms.`));\n }, timeoutMs);\n\n const onError = (error: Error) => {\n finish();\n reject(error);\n };\n\n const onExit = (code: number | null, signal: NodeJS.Signals | null) => {\n finish();\n reject(\n new Error(\n `${options.label} exited before it was ready (code ${String(code)}, signal ${String(signal)}).`,\n ),\n );\n };\n\n const onData = (chunk: Buffer, stream: \"stdout\" | \"stderr\") => {\n const text = chunk.toString(\"utf8\");\n output = `${output}${text}`.slice(-16_384);\n emitProcessOutput(text, stream, options.onOutput);\n\n if (!fixedOrigin && options.resolveOrigin) {\n const candidate = options.resolveOrigin(output);\n if (candidate) {\n void succeed(candidate);\n }\n }\n };\n\n child.once(\"error\", onError);\n child.once(\"exit\", onExit);\n child.stdout?.on(\"data\", (chunk: Buffer) => onData(chunk, \"stdout\"));\n child.stderr?.on(\"data\", (chunk: Buffer) => onData(chunk, \"stderr\"));\n\n if (fixedOrigin) {\n void succeed(fixedOrigin);\n }\n });\n\n return {\n origin,\n process: child,\n async stop() {\n if (child.exitCode !== null || child.signalCode !== null) {\n return;\n }\n\n child.kill(\"SIGTERM\");\n const exited = await waitForChildExit(child, stopTimeoutMs);\n if (!exited && child.exitCode === null && child.signalCode === null) {\n child.kill(\"SIGKILL\");\n await waitForChildExit(child, stopTimeoutMs);\n }\n },\n };\n}\n\nexport async function findAvailableAgentRuntimePort(host = \"127.0.0.1\"): Promise<number> {\n return await new Promise<number>((resolvePort, reject) => {\n const server = createNetServer();\n server.unref();\n server.once(\"error\", reject);\n server.listen(0, host, () => {\n const address = server.address();\n if (!address || typeof address === \"string\") {\n server.close();\n reject(new Error(\"Unable to allocate an agent runtime port.\"));\n return;\n }\n\n const port = address.port;\n server.close((error) => {\n if (error) reject(error);\n else resolvePort(port);\n });\n });\n });\n}\n\nexport async function resolveProjectPackageBin(\n projectRoot: string,\n packageName: string,\n binName?: string,\n): Promise<string> {\n const root = resolve(projectRoot);\n const projectRequire = createRequire(join(root, \"package.json\"));\n let packageJsonPath: string;\n\n try {\n packageJsonPath = projectRequire.resolve(`${packageName}/package.json`);\n } catch {\n throw new Error(\n `${packageName} is required by this agent integration. Install it in ${root} and try again.`,\n );\n }\n\n const packageJson = JSON.parse(await readFile(packageJsonPath, \"utf8\")) as {\n bin?: string | Record<string, string>;\n };\n const bin =\n typeof packageJson.bin === \"string\"\n ? packageJson.bin\n : packageJson.bin?.[binName || packageName.split(\"/\").at(-1) || packageName];\n\n if (!bin) {\n throw new Error(\n `${packageName} does not expose the expected ${binName || packageName} binary.`,\n );\n }\n\n const packageRoot = dirname(packageJsonPath);\n const binaryPath = resolve(packageRoot, bin);\n if (\n relative(packageRoot, binaryPath).startsWith(\"..\") ||\n isAbsolute(relative(packageRoot, binaryPath))\n ) {\n throw new Error(`${packageName} exposes a binary outside its package root.`);\n }\n\n return binaryPath;\n}\n\nexport function normalizeAgentOrigin(value: string): string {\n const input = value.trim();\n if (!input) {\n throw new Error(\"Agent runtime origin cannot be empty.\");\n }\n\n const url = new URL(input);\n if (url.protocol !== \"http:\" && url.protocol !== \"https:\") {\n throw new Error(\"Agent runtime origin must use http or https.\");\n }\n if (url.username || url.password) {\n throw new Error(\"Agent runtime origin cannot contain credentials.\");\n }\n if (url.pathname !== \"/\" || url.search || url.hash) {\n throw new Error(\"Agent runtime origin must not contain a path, query, or hash.\");\n }\n\n return url.origin;\n}\n\nexport function normalizeAgentRoutePrefix(value: string): string {\n const normalized = `/${value.trim()}`.replace(/\\/{2,}/g, \"/\");\n if (normalized === \"/\") {\n throw new Error(\"Agent runtime route prefix cannot own the application root.\");\n }\n return normalized.replace(/\\/$/, \"\");\n}\n\nfunction normalizeProviderName(value: string): string {\n const provider = value.trim();\n if (!provider || !/^[a-z0-9][a-z0-9._-]*$/i.test(provider)) {\n throw new Error(\"Agent runtime provider must be a non-empty package-style name.\");\n }\n return provider;\n}\n\nfunction normalizeOriginEnv(value: string | readonly string[] | undefined): readonly string[] {\n if (!value) return [];\n return (Array.isArray(value) ? value : [value]).map((entry) => entry.trim()).filter(Boolean);\n}\n\nfunction resolveConfiguredOrigin(\n configuredOrigin: string | undefined,\n envNames: readonly string[],\n): string | undefined {\n if (configuredOrigin) {\n return normalizeAgentOrigin(configuredOrigin);\n }\n\n for (const envName of envNames) {\n const value = process.env[envName];\n if (value?.trim()) {\n return normalizeAgentOrigin(value);\n }\n }\n\n return undefined;\n}\n\nfunction createProxyRequestHeaders(input: Headers, incomingUrl: URL): Headers {\n const headers = new Headers(input);\n removeHopByHopHeaders(headers);\n headers.delete(\"host\");\n headers.delete(\"content-length\");\n // Node fetch supplies its own compression preference when this header is\n // absent, then exposes a decoded body with the original encoding headers.\n headers.set(\"accept-encoding\", \"identity\");\n if (!headers.has(\"x-forwarded-host\")) headers.set(\"x-forwarded-host\", incomingUrl.host);\n if (!headers.has(\"x-forwarded-proto\")) {\n headers.set(\"x-forwarded-proto\", incomingUrl.protocol.replace(\":\", \"\"));\n }\n return headers;\n}\n\nfunction removeHopByHopHeaders(headers: Headers): void {\n const connectionOptions = headers.get(\"connection\")?.split(\",\") ?? [];\n for (const option of connectionOptions) {\n const header = option.trim();\n if (/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/.test(header)) {\n headers.delete(header);\n }\n }\n\n for (const header of HOP_BY_HOP_HEADERS) {\n headers.delete(header);\n }\n}\n\nfunction rewriteProxyLocation(\n headers: Headers,\n upstreamOrigin: string,\n incomingOrigin: string,\n): void {\n const location = headers.get(\"location\");\n if (!location) return;\n\n try {\n const url = new URL(location, upstreamOrigin);\n if (url.origin === upstreamOrigin) {\n headers.set(\"location\", `${incomingOrigin}${url.pathname}${url.search}${url.hash}`);\n }\n } catch {\n // Preserve non-URL Location values exactly as returned by the runtime.\n }\n}\n\nfunction isAbortError(error: unknown): boolean {\n return error instanceof Error && error.name === \"AbortError\";\n}\n\nasync function waitForAgentRuntime(\n origin: string,\n healthPath: string | undefined,\n timeoutMs: number,\n child: ChildProcess,\n): Promise<void> {\n const deadline = Date.now() + timeoutMs;\n const healthUrl = new URL(healthPath || \"/\", origin);\n\n while (Date.now() < deadline) {\n if (child.exitCode !== null || child.signalCode !== null) {\n throw new Error(\"Agent runtime exited while Farm was waiting for it to become ready.\");\n }\n\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), 750);\n try {\n await fetch(healthUrl, {\n signal: controller.signal,\n redirect: \"manual\",\n });\n return;\n } catch {\n await delay(100);\n } finally {\n clearTimeout(timer);\n }\n }\n\n throw new Error(`Agent runtime at ${origin} did not answer before the startup timeout.`);\n}\n\nfunction emitProcessOutput(\n text: string,\n stream: \"stdout\" | \"stderr\",\n onOutput: FarmManagedProcessOptions[\"onOutput\"],\n): void {\n if (!onOutput) return;\n for (const line of text.split(/\\r?\\n/)) {\n const value = line.trimEnd();\n if (value) onOutput(value, stream);\n }\n}\n\nfunction terminateChild(child: ChildProcess): void {\n if (child.exitCode === null && child.signalCode === null) {\n child.kill(\"SIGTERM\");\n }\n}\n\nasync function waitForChildExit(child: ChildProcess, timeoutMs: number): Promise<boolean> {\n if (child.exitCode !== null || child.signalCode !== null) return true;\n return await new Promise<boolean>((resolveExit) => {\n const timer = setTimeout(() => {\n child.off(\"exit\", onExit);\n resolveExit(false);\n }, timeoutMs);\n const onExit = () => {\n clearTimeout(timer);\n resolveExit(true);\n };\n child.once(\"exit\", onExit);\n });\n}\n\nfunction delay(ms: number): Promise<void> {\n return new Promise((resolveDelay) => setTimeout(resolveDelay, ms));\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/agent-runtime.ts"],"sourcesContent":["import { spawn, type ChildProcess } from \"node:child_process\";\nimport { readFile } from \"node:fs/promises\";\nimport { createRequire } from \"node:module\";\nimport { createServer as createNetServer } from \"node:net\";\nimport { dirname, isAbsolute, join, relative, resolve } from \"node:path\";\nimport { defineIntegration, type FarmIntegration } from \"./integrations\";\nimport type { BundleResultPayload, FarmPlugin } from \"./plugin\";\n\nconst AGENT_RUNTIME_METHODS = [\n \"GET\",\n \"HEAD\",\n \"QUERY\",\n \"POST\",\n \"PUT\",\n \"PATCH\",\n \"DELETE\",\n \"OPTIONS\",\n] as const;\n\nconst HOP_BY_HOP_HEADERS = [\n \"connection\",\n \"keep-alive\",\n \"proxy-authenticate\",\n \"proxy-authorization\",\n \"te\",\n \"trailer\",\n \"transfer-encoding\",\n \"upgrade\",\n] as const;\n\nexport interface FarmAgentRuntimeInstance {\n readonly provider: string;\n readonly routePrefix: string;\n readonly routePrefixes: readonly string[];\n getOrigin(): string | undefined;\n}\n\nexport interface FarmManagedAgentRuntime {\n readonly origin: string;\n readonly process?: ChildProcess;\n stop(): Promise<void>;\n}\n\nexport interface FarmAgentRuntimeStartContext {\n readonly root: string;\n readonly log: {\n info(message: string, meta?: Record<string, unknown>): void;\n warn(message: string, meta?: Record<string, unknown>): void;\n error(message: string, meta?: Record<string, unknown>): void;\n };\n}\n\nexport interface FarmAgentRuntimeBuildContext extends BundleResultPayload {\n readonly provider: string;\n readonly routePrefix: string;\n readonly routePrefixes: readonly string[];\n}\n\nexport interface FarmAgentRuntimeIntegrationOptions {\n provider: string;\n routePrefix: string;\n /** Whether Farm's production server must dispatch this runtime's proxy routes. */\n serverRuntime?: boolean;\n additionalRoutePrefixes?: readonly string[];\n origin?: string;\n originEnv?: string | readonly string[];\n webSockets?: boolean;\n startDev?(context: FarmAgentRuntimeStartContext): Promise<FarmManagedAgentRuntime>;\n afterBuild?(context: FarmAgentRuntimeBuildContext): Promise<void> | void;\n plugins?: readonly FarmPlugin[];\n instance?: Record<string, unknown>;\n}\n\nexport interface FarmManagedProcessOptions {\n command: string;\n args?: readonly string[];\n cwd: string;\n env?: Record<string, string | undefined>;\n label: string;\n origin?: string;\n resolveOrigin?(output: string): string | undefined;\n healthPath?: string;\n timeoutMs?: number;\n stopTimeoutMs?: number;\n onOutput?(line: string, stream: \"stdout\" | \"stderr\"): void;\n}\n\nexport interface FarmAgentProxyOptions {\n fetch?: typeof globalThis.fetch;\n}\n\ninterface RuntimeState {\n origin?: string;\n managed?: FarmManagedAgentRuntime;\n}\n\nexport function createAgentRuntimeIntegration(\n options: FarmAgentRuntimeIntegrationOptions,\n): FarmIntegration {\n const provider = normalizeProviderName(options.provider);\n const routePrefix = normalizeAgentRoutePrefix(options.routePrefix);\n const routePrefixes = [\n routePrefix,\n ...(options.additionalRoutePrefixes || []).map(normalizeAgentRoutePrefix),\n ].filter((prefix, index, values) => values.indexOf(prefix) === index);\n const originEnv = normalizeOriginEnv(options.originEnv);\n const state: RuntimeState = {\n origin: resolveConfiguredOrigin(options.origin, originEnv),\n };\n\n const runtimeInstance: FarmAgentRuntimeInstance & Record<string, unknown> = {\n ...options.instance,\n provider,\n routePrefix,\n routePrefixes,\n getOrigin: () => state.origin ?? resolveConfiguredOrigin(options.origin, originEnv),\n };\n\n const runtimePlugin: FarmPlugin = {\n name: `farm:agent-runtime:${provider}`,\n config(config, context) {\n if (!context.isDev) {\n return config;\n }\n\n const origin = runtimeInstance.getOrigin();\n if (!origin) {\n return config;\n }\n\n for (const prefix of routePrefixes) {\n applyAgentRuntimeViteProxy(config, {\n origin,\n routePrefix: prefix,\n webSockets: options.webSockets,\n });\n }\n return config;\n },\n async afterBundle(result) {\n if (!result.success || !options.afterBuild) {\n return;\n }\n\n await options.afterBuild({\n ...result,\n provider,\n routePrefix,\n routePrefixes,\n });\n },\n };\n\n return defineIntegration({\n category: \"agent\",\n type: provider,\n serverRuntime: options.serverRuntime,\n instance: runtimeInstance,\n async setup(context) {\n if (!context.isDev || state.origin || !options.startDev) {\n return;\n }\n\n state.managed = await options.startDev({\n root: context.appConfig.root || process.cwd(),\n log: context.log,\n });\n state.origin = normalizeAgentOrigin(state.managed.origin);\n context.log.info(`${provider} runtime ready`, {\n origin: state.origin,\n });\n await context.cleanup(async () => {\n await state.managed?.stop();\n state.managed = undefined;\n state.origin = undefined;\n });\n },\n routes: routePrefixes.map((prefix) => ({\n path: `${prefix}/[...farmAgentRuntimePath]`,\n methods: AGENT_RUNTIME_METHODS,\n rawBody: true,\n async handler(request) {\n const origin = runtimeInstance.getOrigin();\n if (!origin) {\n return Response.json(\n {\n error: \"Agent runtime unavailable\",\n provider,\n },\n { status: 503 },\n );\n }\n\n return proxyAgentRuntimeRequest(request, origin);\n },\n })),\n plugins: [runtimePlugin, ...(options.plugins || [])],\n });\n}\n\nexport function applyAgentRuntimeViteProxy(\n config: { vite?: Record<string, any> },\n input: {\n origin: string;\n routePrefix: string;\n webSockets?: boolean;\n },\n): void {\n const origin = normalizeAgentOrigin(input.origin);\n const routePrefix = normalizeAgentRoutePrefix(input.routePrefix);\n const vite = config.vite || {};\n const server = vite.server || {};\n const proxy = server.proxy || {};\n\n if (proxy[routePrefix]) {\n throw new Error(\n `Farm agent runtime cannot own ${routePrefix} because vite.server.proxy already defines it.`,\n );\n }\n\n config.vite = {\n ...vite,\n server: {\n ...server,\n proxy: {\n ...proxy,\n [routePrefix]: {\n target: origin,\n changeOrigin: true,\n ws: input.webSockets === true,\n },\n },\n },\n };\n}\n\nexport async function proxyAgentRuntimeRequest(\n request: Request,\n origin: string,\n options: FarmAgentProxyOptions = {},\n): Promise<Response> {\n const upstreamOrigin = normalizeAgentOrigin(origin);\n const incomingUrl = new URL(request.url);\n const targetUrl = new URL(`${incomingUrl.pathname}${incomingUrl.search}`, upstreamOrigin);\n const headers = createProxyRequestHeaders(request.headers, incomingUrl);\n const method = request.method.toUpperCase();\n const init: RequestInit & { duplex?: \"half\" } = {\n method,\n headers,\n redirect: \"manual\",\n signal: request.signal,\n };\n\n if (method !== \"GET\" && method !== \"HEAD\" && request.body) {\n init.body = request.body;\n init.duplex = \"half\";\n }\n\n try {\n const upstream = await (options.fetch || globalThis.fetch)(targetUrl, init);\n const responseHeaders = new Headers(upstream.headers);\n removeHopByHopHeaders(responseHeaders);\n // Fetch decodes supported content codings before exposing the body while retaining\n // the upstream metadata. Forwarding those headers would make the client\n // try to decode an already-decoded stream and trust a stale byte length.\n const contentCodings = responseHeaders.get(\"content-encoding\")?.toLowerCase().split(\",\");\n if (\n upstream.body &&\n contentCodings?.length &&\n contentCodings.every((coding) => [\"gzip\", \"x-gzip\", \"deflate\", \"br\"].includes(coding.trim()))\n ) {\n responseHeaders.delete(\"content-encoding\");\n responseHeaders.delete(\"content-length\");\n }\n rewriteProxyLocation(responseHeaders, upstreamOrigin, incomingUrl.origin);\n\n return new Response(upstream.body, {\n status: upstream.status,\n statusText: upstream.statusText,\n headers: responseHeaders,\n });\n } catch (error) {\n if (request.signal.aborted || isAbortError(error)) {\n throw error;\n }\n\n return Response.json(\n {\n error: \"Agent runtime request failed\",\n },\n { status: 502 },\n );\n }\n}\n\nexport async function startManagedAgentRuntime(\n options: FarmManagedProcessOptions,\n): Promise<FarmManagedAgentRuntime> {\n const timeoutMs = options.timeoutMs ?? 30_000;\n const stopTimeoutMs = options.stopTimeoutMs ?? 2_000;\n const fixedOrigin = options.origin ? normalizeAgentOrigin(options.origin) : undefined;\n let output = \"\";\n let settled = false;\n let checkingReadiness = false;\n\n const child = spawn(options.command, [...(options.args || [])], {\n cwd: options.cwd,\n env: {\n ...process.env,\n ...options.env,\n },\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n });\n\n const origin = await new Promise<string>((resolveOrigin, reject) => {\n let timer: ReturnType<typeof setTimeout>;\n\n const finish = () => {\n if (settled) return;\n settled = true;\n clearTimeout(timer);\n child.off(\"error\", onError);\n child.off(\"exit\", onExit);\n };\n\n const succeed = async (candidate: string) => {\n if (settled || checkingReadiness) return;\n checkingReadiness = true;\n try {\n const normalized = normalizeAgentOrigin(candidate);\n await waitForAgentRuntime(normalized, options.healthPath, timeoutMs, child);\n finish();\n resolveOrigin(normalized);\n } catch (error) {\n finish();\n terminateChild(child);\n reject(error);\n }\n };\n\n timer = setTimeout(() => {\n finish();\n terminateChild(child);\n reject(new Error(`${options.label} did not become ready within ${timeoutMs}ms.`));\n }, timeoutMs);\n\n const onError = (error: Error) => {\n finish();\n reject(error);\n };\n\n const onExit = (code: number | null, signal: NodeJS.Signals | null) => {\n finish();\n reject(\n new Error(\n `${options.label} exited before it was ready (code ${String(code)}, signal ${String(signal)}).`,\n ),\n );\n };\n\n const onData = (chunk: Buffer, stream: \"stdout\" | \"stderr\") => {\n const text = chunk.toString(\"utf8\");\n output = `${output}${text}`.slice(-16_384);\n emitProcessOutput(text, stream, options.onOutput);\n\n if (!fixedOrigin && options.resolveOrigin) {\n const candidate = options.resolveOrigin(output);\n if (candidate) {\n void succeed(candidate);\n }\n }\n };\n\n child.once(\"error\", onError);\n child.once(\"exit\", onExit);\n child.stdout?.on(\"data\", (chunk: Buffer) => onData(chunk, \"stdout\"));\n child.stderr?.on(\"data\", (chunk: Buffer) => onData(chunk, \"stderr\"));\n\n if (fixedOrigin) {\n void succeed(fixedOrigin);\n }\n });\n\n return {\n origin,\n process: child,\n async stop() {\n if (child.exitCode !== null || child.signalCode !== null) {\n return;\n }\n\n child.kill(\"SIGTERM\");\n const exited = await waitForChildExit(child, stopTimeoutMs);\n if (!exited && child.exitCode === null && child.signalCode === null) {\n child.kill(\"SIGKILL\");\n await waitForChildExit(child, stopTimeoutMs);\n }\n },\n };\n}\n\nexport async function findAvailableAgentRuntimePort(host = \"127.0.0.1\"): Promise<number> {\n return await new Promise<number>((resolvePort, reject) => {\n const server = createNetServer();\n server.unref();\n server.once(\"error\", reject);\n server.listen(0, host, () => {\n const address = server.address();\n if (!address || typeof address === \"string\") {\n server.close();\n reject(new Error(\"Unable to allocate an agent runtime port.\"));\n return;\n }\n\n const port = address.port;\n server.close((error) => {\n if (error) reject(error);\n else resolvePort(port);\n });\n });\n });\n}\n\nexport async function resolveProjectPackageBin(\n projectRoot: string,\n packageName: string,\n binName?: string,\n): Promise<string> {\n const root = resolve(projectRoot);\n const projectRequire = createRequire(join(root, \"package.json\"));\n let packageJsonPath: string;\n\n try {\n packageJsonPath = projectRequire.resolve(`${packageName}/package.json`);\n } catch {\n throw new Error(\n `${packageName} is required by this agent integration. Install it in ${root} and try again.`,\n );\n }\n\n const packageJson = JSON.parse(await readFile(packageJsonPath, \"utf8\")) as {\n bin?: string | Record<string, string>;\n };\n const bin =\n typeof packageJson.bin === \"string\"\n ? packageJson.bin\n : packageJson.bin?.[binName || packageName.split(\"/\").at(-1) || packageName];\n\n if (!bin) {\n throw new Error(\n `${packageName} does not expose the expected ${binName || packageName} binary.`,\n );\n }\n\n const packageRoot = dirname(packageJsonPath);\n const binaryPath = resolve(packageRoot, bin);\n if (\n relative(packageRoot, binaryPath).startsWith(\"..\") ||\n isAbsolute(relative(packageRoot, binaryPath))\n ) {\n throw new Error(`${packageName} exposes a binary outside its package root.`);\n }\n\n return binaryPath;\n}\n\nexport function normalizeAgentOrigin(value: string): string {\n const input = value.trim();\n if (!input) {\n throw new Error(\"Agent runtime origin cannot be empty.\");\n }\n\n const url = new URL(input);\n if (url.protocol !== \"http:\" && url.protocol !== \"https:\") {\n throw new Error(\"Agent runtime origin must use http or https.\");\n }\n if (url.username || url.password) {\n throw new Error(\"Agent runtime origin cannot contain credentials.\");\n }\n if (url.pathname !== \"/\" || url.search || url.hash) {\n throw new Error(\"Agent runtime origin must not contain a path, query, or hash.\");\n }\n\n return url.origin;\n}\n\nexport function normalizeAgentRoutePrefix(value: string): string {\n const normalized = `/${value.trim()}`.replace(/\\/{2,}/g, \"/\");\n if (normalized === \"/\") {\n throw new Error(\"Agent runtime route prefix cannot own the application root.\");\n }\n return normalized.replace(/\\/$/, \"\");\n}\n\nfunction normalizeProviderName(value: string): string {\n const provider = value.trim();\n if (!provider || !/^[a-z0-9][a-z0-9._-]*$/i.test(provider)) {\n throw new Error(\"Agent runtime provider must be a non-empty package-style name.\");\n }\n return provider;\n}\n\nfunction normalizeOriginEnv(value: string | readonly string[] | undefined): readonly string[] {\n if (!value) return [];\n return (Array.isArray(value) ? value : [value]).map((entry) => entry.trim()).filter(Boolean);\n}\n\nfunction resolveConfiguredOrigin(\n configuredOrigin: string | undefined,\n envNames: readonly string[],\n): string | undefined {\n if (configuredOrigin) {\n return normalizeAgentOrigin(configuredOrigin);\n }\n\n for (const envName of envNames) {\n const value = process.env[envName];\n if (value?.trim()) {\n return normalizeAgentOrigin(value);\n }\n }\n\n return undefined;\n}\n\nfunction createProxyRequestHeaders(input: Headers, incomingUrl: URL): Headers {\n const headers = new Headers(input);\n removeHopByHopHeaders(headers);\n headers.delete(\"host\");\n headers.delete(\"content-length\");\n // Node fetch supplies its own compression preference when this header is\n // absent, then exposes a decoded body with the original encoding headers.\n headers.set(\"accept-encoding\", \"identity\");\n if (!headers.has(\"x-forwarded-host\")) headers.set(\"x-forwarded-host\", incomingUrl.host);\n if (!headers.has(\"x-forwarded-proto\")) {\n headers.set(\"x-forwarded-proto\", incomingUrl.protocol.replace(\":\", \"\"));\n }\n return headers;\n}\n\nfunction removeHopByHopHeaders(headers: Headers): void {\n const connectionOptions = headers.get(\"connection\")?.split(\",\") ?? [];\n for (const option of connectionOptions) {\n const header = option.trim();\n if (/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/.test(header)) {\n headers.delete(header);\n }\n }\n\n for (const header of HOP_BY_HOP_HEADERS) {\n headers.delete(header);\n }\n}\n\nfunction rewriteProxyLocation(\n headers: Headers,\n upstreamOrigin: string,\n incomingOrigin: string,\n): void {\n const location = headers.get(\"location\");\n if (!location) return;\n\n try {\n const url = new URL(location, upstreamOrigin);\n if (url.origin === upstreamOrigin) {\n headers.set(\"location\", `${incomingOrigin}${url.pathname}${url.search}${url.hash}`);\n }\n } catch {\n // Preserve non-URL Location values exactly as returned by the runtime.\n }\n}\n\nfunction isAbortError(error: unknown): boolean {\n return error instanceof Error && error.name === \"AbortError\";\n}\n\nasync function waitForAgentRuntime(\n origin: string,\n healthPath: string | undefined,\n timeoutMs: number,\n child: ChildProcess,\n): Promise<void> {\n const deadline = Date.now() + timeoutMs;\n const healthUrl = new URL(healthPath || \"/\", origin);\n\n while (Date.now() < deadline) {\n if (child.exitCode !== null || child.signalCode !== null) {\n throw new Error(\"Agent runtime exited while Farm was waiting for it to become ready.\");\n }\n\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), 750);\n try {\n await fetch(healthUrl, {\n signal: controller.signal,\n redirect: \"manual\",\n });\n return;\n } catch {\n await delay(100);\n } finally {\n clearTimeout(timer);\n }\n }\n\n throw new Error(`Agent runtime at ${origin} did not answer before the startup timeout.`);\n}\n\nfunction emitProcessOutput(\n text: string,\n stream: \"stdout\" | \"stderr\",\n onOutput: FarmManagedProcessOptions[\"onOutput\"],\n): void {\n if (!onOutput) return;\n for (const line of text.split(/\\r?\\n/)) {\n const value = line.trimEnd();\n if (value) onOutput(value, stream);\n }\n}\n\nfunction terminateChild(child: ChildProcess): void {\n if (child.exitCode === null && child.signalCode === null) {\n child.kill(\"SIGTERM\");\n }\n}\n\nasync function waitForChildExit(child: ChildProcess, timeoutMs: number): Promise<boolean> {\n if (child.exitCode !== null || child.signalCode !== null) return true;\n return await new Promise<boolean>((resolveExit) => {\n const timer = setTimeout(() => {\n child.off(\"exit\", onExit);\n resolveExit(false);\n }, timeoutMs);\n const onExit = () => {\n clearTimeout(timer);\n resolveExit(true);\n };\n child.once(\"exit\", onExit);\n });\n}\n\nfunction delay(ms: number): Promise<void> {\n return new Promise((resolveDelay) => setTimeout(resolveDelay, ms));\n}\n"],"mappings":"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","names":[]}
|