@copilotkitnext/runtime 1.51.5-next.0 → 1.51.5-next.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. package/dist/_virtual/_rolldown/runtime.cjs +29 -0
  2. package/dist/endpoints/express-single.cjs +187 -0
  3. package/dist/endpoints/express-single.cjs.map +1 -0
  4. package/dist/endpoints/express-single.d.cts +15 -0
  5. package/dist/endpoints/express-single.d.cts.map +1 -0
  6. package/dist/endpoints/express-single.d.mts +15 -0
  7. package/dist/endpoints/express-single.d.mts.map +1 -0
  8. package/dist/endpoints/express-single.mjs +184 -0
  9. package/dist/endpoints/express-single.mjs.map +1 -0
  10. package/dist/endpoints/express-utils.cjs +118 -0
  11. package/dist/endpoints/express-utils.cjs.map +1 -0
  12. package/dist/endpoints/express-utils.mjs +116 -0
  13. package/dist/endpoints/express-utils.mjs.map +1 -0
  14. package/dist/endpoints/express.cjs +165 -0
  15. package/dist/endpoints/express.cjs.map +1 -0
  16. package/dist/endpoints/express.d.cts +15 -0
  17. package/dist/endpoints/express.d.cts.map +1 -0
  18. package/dist/endpoints/express.d.mts +15 -0
  19. package/dist/endpoints/express.d.mts.map +1 -0
  20. package/dist/endpoints/express.mjs +162 -0
  21. package/dist/endpoints/express.mjs.map +1 -0
  22. package/dist/endpoints/hono-single.cjs +140 -0
  23. package/dist/endpoints/hono-single.cjs.map +1 -0
  24. package/dist/endpoints/hono-single.d.cts +31 -0
  25. package/dist/endpoints/hono-single.d.cts.map +1 -0
  26. package/dist/endpoints/hono-single.d.mts +31 -0
  27. package/dist/endpoints/hono-single.d.mts.map +1 -0
  28. package/dist/endpoints/hono-single.mjs +139 -0
  29. package/dist/endpoints/hono-single.mjs.map +1 -0
  30. package/dist/endpoints/hono.cjs +152 -0
  31. package/dist/endpoints/hono.cjs.map +1 -0
  32. package/dist/endpoints/hono.d.cts +47 -0
  33. package/dist/endpoints/hono.d.cts.map +1 -0
  34. package/dist/endpoints/hono.d.mts +47 -0
  35. package/dist/endpoints/hono.d.mts.map +1 -0
  36. package/dist/endpoints/hono.mjs +151 -0
  37. package/dist/endpoints/hono.mjs.map +1 -0
  38. package/dist/endpoints/index.cjs +2 -0
  39. package/dist/endpoints/index.d.mts +2 -0
  40. package/dist/endpoints/index.mjs +4 -0
  41. package/dist/endpoints/single-route-helpers.cjs +67 -0
  42. package/dist/endpoints/single-route-helpers.cjs.map +1 -0
  43. package/dist/endpoints/single-route-helpers.mjs +64 -0
  44. package/dist/endpoints/single-route-helpers.mjs.map +1 -0
  45. package/dist/express.cjs +6 -0
  46. package/dist/express.d.cts +3 -0
  47. package/dist/express.d.mts +3 -19
  48. package/dist/express.mjs +3 -477
  49. package/dist/handlers/get-runtime-info.cjs +36 -0
  50. package/dist/handlers/get-runtime-info.cjs.map +1 -0
  51. package/dist/handlers/get-runtime-info.mjs +36 -0
  52. package/dist/handlers/get-runtime-info.mjs.map +1 -0
  53. package/dist/handlers/handle-connect.cjs +102 -0
  54. package/dist/handlers/handle-connect.cjs.map +1 -0
  55. package/dist/handlers/handle-connect.mjs +101 -0
  56. package/dist/handlers/handle-connect.mjs.map +1 -0
  57. package/dist/handlers/handle-run.cjs +114 -0
  58. package/dist/handlers/handle-run.cjs.map +1 -0
  59. package/dist/handlers/handle-run.mjs +113 -0
  60. package/dist/handlers/handle-run.mjs.map +1 -0
  61. package/dist/handlers/handle-stop.cjs +46 -0
  62. package/dist/handlers/handle-stop.cjs.map +1 -0
  63. package/dist/handlers/handle-stop.mjs +45 -0
  64. package/dist/handlers/handle-stop.mjs.map +1 -0
  65. package/dist/handlers/handle-transcribe.cjs +111 -0
  66. package/dist/handlers/handle-transcribe.cjs.map +1 -0
  67. package/dist/handlers/handle-transcribe.mjs +110 -0
  68. package/dist/handlers/handle-transcribe.mjs.map +1 -0
  69. package/dist/handlers/header-utils.cjs +25 -0
  70. package/dist/handlers/header-utils.cjs.map +1 -0
  71. package/dist/handlers/header-utils.mjs +24 -0
  72. package/dist/handlers/header-utils.mjs.map +1 -0
  73. package/dist/index.cjs +25 -0
  74. package/dist/index.d.cts +8 -0
  75. package/dist/index.d.mts +9 -139
  76. package/dist/index.mjs +10 -335
  77. package/dist/middleware.cjs +29 -0
  78. package/dist/middleware.cjs.map +1 -0
  79. package/dist/middleware.d.cts +24 -0
  80. package/dist/middleware.d.cts.map +1 -0
  81. package/dist/middleware.d.mts +24 -0
  82. package/dist/middleware.d.mts.map +1 -0
  83. package/dist/middleware.mjs +27 -0
  84. package/dist/middleware.mjs.map +1 -0
  85. package/dist/package.cjs +12 -0
  86. package/dist/package.cjs.map +1 -0
  87. package/dist/package.mjs +6 -0
  88. package/dist/package.mjs.map +1 -0
  89. package/dist/runner/agent-runner.cjs +7 -0
  90. package/dist/runner/agent-runner.cjs.map +1 -0
  91. package/dist/runner/agent-runner.d.cts +28 -0
  92. package/dist/runner/agent-runner.d.cts.map +1 -0
  93. package/dist/runner/agent-runner.d.mts +28 -0
  94. package/dist/runner/agent-runner.d.mts.map +1 -0
  95. package/dist/runner/agent-runner.mjs +6 -0
  96. package/dist/runner/agent-runner.mjs.map +1 -0
  97. package/dist/runner/in-memory.cjs +230 -0
  98. package/dist/runner/in-memory.cjs.map +1 -0
  99. package/dist/runner/in-memory.d.cts +14 -0
  100. package/dist/runner/in-memory.d.cts.map +1 -0
  101. package/dist/runner/in-memory.d.mts +14 -0
  102. package/dist/runner/in-memory.d.mts.map +1 -0
  103. package/dist/runner/in-memory.mjs +229 -0
  104. package/dist/runner/in-memory.mjs.map +1 -0
  105. package/dist/runner/index.cjs +4 -0
  106. package/dist/runner/index.d.cts +4 -0
  107. package/dist/runner/index.d.mts +4 -0
  108. package/dist/runner/index.mjs +5 -0
  109. package/dist/runtime.cjs +27 -0
  110. package/dist/runtime.cjs.map +1 -0
  111. package/dist/runtime.d.cts +43 -0
  112. package/dist/runtime.d.cts.map +1 -0
  113. package/dist/runtime.d.mts +43 -0
  114. package/dist/runtime.d.mts.map +1 -0
  115. package/dist/runtime.mjs +26 -0
  116. package/dist/runtime.mjs.map +1 -0
  117. package/dist/transcription-service/transcription-service.cjs +7 -0
  118. package/dist/transcription-service/transcription-service.cjs.map +1 -0
  119. package/dist/transcription-service/transcription-service.d.cts +14 -0
  120. package/dist/transcription-service/transcription-service.d.cts.map +1 -0
  121. package/dist/transcription-service/transcription-service.d.mts +14 -0
  122. package/dist/transcription-service/transcription-service.d.mts.map +1 -0
  123. package/dist/transcription-service/transcription-service.mjs +6 -0
  124. package/dist/transcription-service/transcription-service.mjs.map +1 -0
  125. package/package.json +19 -16
  126. package/tsdown.config.ts +16 -0
  127. package/dist/chunk-A22ZUI3P.mjs +0 -1054
  128. package/dist/chunk-A22ZUI3P.mjs.map +0 -1
  129. package/dist/express.d.ts +0 -19
  130. package/dist/express.js +0 -1292
  131. package/dist/express.js.map +0 -1
  132. package/dist/express.mjs.map +0 -1
  133. package/dist/index.d.ts +0 -139
  134. package/dist/index.js +0 -1387
  135. package/dist/index.js.map +0 -1
  136. package/dist/index.mjs.map +0 -1
  137. package/dist/runtime-BsuyYT2l.d.mts +0 -98
  138. package/dist/runtime-BsuyYT2l.d.ts +0 -98
@@ -0,0 +1,29 @@
1
+ //#region \0rolldown/runtime.js
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __copyProps = (to, from, except, desc) => {
9
+ if (from && typeof from === "object" || typeof from === "function") {
10
+ for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
11
+ key = keys[i];
12
+ if (!__hasOwnProp.call(to, key) && key !== except) {
13
+ __defProp(to, key, {
14
+ get: ((k) => from[k]).bind(null, key),
15
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
16
+ });
17
+ }
18
+ }
19
+ }
20
+ return to;
21
+ };
22
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
23
+ value: mod,
24
+ enumerable: true
25
+ }) : target, mod));
26
+
27
+ //#endregion
28
+
29
+ exports.__toESM = __toESM;
@@ -0,0 +1,187 @@
1
+ const require_runtime = require('../_virtual/_rolldown/runtime.cjs');
2
+ const require_handle_run = require('../handlers/handle-run.cjs');
3
+ const require_get_runtime_info = require('../handlers/get-runtime-info.cjs');
4
+ const require_handle_transcribe = require('../handlers/handle-transcribe.cjs');
5
+ const require_middleware = require('../middleware.cjs');
6
+ const require_handle_connect = require('../handlers/handle-connect.cjs');
7
+ const require_handle_stop = require('../handlers/handle-stop.cjs');
8
+ const require_single_route_helpers = require('./single-route-helpers.cjs');
9
+ const require_express_utils = require('./express-utils.cjs');
10
+ let _copilotkitnext_shared = require("@copilotkitnext/shared");
11
+ let express = require("express");
12
+ express = require_runtime.__toESM(express);
13
+ let cors = require("cors");
14
+ cors = require_runtime.__toESM(cors);
15
+
16
+ //#region src/endpoints/express-single.ts
17
+ function createCopilotEndpointSingleRouteExpress({ runtime, basePath }) {
18
+ const router = express.default.Router();
19
+ const routePath = normalizeSingleRoutePath(basePath);
20
+ router.use((0, cors.default)({
21
+ origin: "*",
22
+ methods: [
23
+ "GET",
24
+ "HEAD",
25
+ "PUT",
26
+ "POST",
27
+ "DELETE",
28
+ "PATCH",
29
+ "OPTIONS"
30
+ ],
31
+ allowedHeaders: ["*"]
32
+ }));
33
+ router.post(routePath, createSingleRouteHandler(runtime));
34
+ router.use((req, res) => {
35
+ res.status(404).json({ error: "Not found" });
36
+ });
37
+ return router;
38
+ }
39
+ function createSingleRouteHandler(runtime) {
40
+ return async (req, res, next) => {
41
+ const path = req.originalUrl ?? req.path;
42
+ let request = require_express_utils.createFetchRequestFromExpress(req);
43
+ try {
44
+ const maybeModifiedRequest = await require_middleware.callBeforeRequestMiddleware({
45
+ runtime,
46
+ request,
47
+ path
48
+ });
49
+ if (maybeModifiedRequest) request = maybeModifiedRequest;
50
+ } catch (error) {
51
+ _copilotkitnext_shared.logger.error({
52
+ err: error,
53
+ url: request.url,
54
+ path
55
+ }, "Error running before request middleware");
56
+ if (error instanceof Response) {
57
+ try {
58
+ await require_express_utils.sendFetchResponse(res, error);
59
+ } catch (streamError) {
60
+ next(streamError);
61
+ }
62
+ return;
63
+ }
64
+ next(error);
65
+ return;
66
+ }
67
+ let methodCall;
68
+ try {
69
+ methodCall = await require_single_route_helpers.parseMethodCall(request);
70
+ } catch (error) {
71
+ if (error instanceof Response) {
72
+ _copilotkitnext_shared.logger.warn({ url: request.url }, "Invalid single-route payload");
73
+ try {
74
+ await require_express_utils.sendFetchResponse(res, error);
75
+ } catch (streamError) {
76
+ next(streamError);
77
+ }
78
+ return;
79
+ }
80
+ _copilotkitnext_shared.logger.warn({
81
+ err: error,
82
+ url: request.url
83
+ }, "Invalid single-route payload");
84
+ res.status(400).json({
85
+ error: "invalid_request",
86
+ message: error instanceof Error ? error.message : "Invalid request payload"
87
+ });
88
+ return;
89
+ }
90
+ try {
91
+ let response;
92
+ switch (methodCall.method) {
93
+ case "agent/run": {
94
+ const agentId = require_single_route_helpers.expectString(methodCall.params, "agentId");
95
+ response = await require_handle_run.handleRunAgent({
96
+ runtime,
97
+ request: require_single_route_helpers.createJsonRequest(request, methodCall.body),
98
+ agentId
99
+ });
100
+ break;
101
+ }
102
+ case "agent/connect": {
103
+ const agentId = require_single_route_helpers.expectString(methodCall.params, "agentId");
104
+ response = await require_handle_connect.handleConnectAgent({
105
+ runtime,
106
+ request: require_single_route_helpers.createJsonRequest(request, methodCall.body),
107
+ agentId
108
+ });
109
+ break;
110
+ }
111
+ case "agent/stop": {
112
+ const agentId = require_single_route_helpers.expectString(methodCall.params, "agentId");
113
+ const threadId = require_single_route_helpers.expectString(methodCall.params, "threadId");
114
+ response = await require_handle_stop.handleStopAgent({
115
+ runtime,
116
+ request,
117
+ agentId,
118
+ threadId
119
+ });
120
+ break;
121
+ }
122
+ case "info":
123
+ response = await require_get_runtime_info.handleGetRuntimeInfo({
124
+ runtime,
125
+ request
126
+ });
127
+ break;
128
+ case "transcribe":
129
+ response = await require_handle_transcribe.handleTranscribe({
130
+ runtime,
131
+ request: require_single_route_helpers.createJsonRequest(request, methodCall.body)
132
+ });
133
+ break;
134
+ default: return methodCall.method;
135
+ }
136
+ await require_express_utils.sendFetchResponse(res, response);
137
+ require_middleware.callAfterRequestMiddleware({
138
+ runtime,
139
+ response,
140
+ path
141
+ }).catch((error) => {
142
+ _copilotkitnext_shared.logger.error({
143
+ err: error,
144
+ url: req.originalUrl ?? req.url,
145
+ path
146
+ }, "Error running after request middleware");
147
+ });
148
+ } catch (error) {
149
+ if (error instanceof Response) {
150
+ try {
151
+ await require_express_utils.sendFetchResponse(res, error);
152
+ } catch (streamError) {
153
+ next(streamError);
154
+ return;
155
+ }
156
+ require_middleware.callAfterRequestMiddleware({
157
+ runtime,
158
+ response: error,
159
+ path
160
+ }).catch((mwError) => {
161
+ _copilotkitnext_shared.logger.error({
162
+ err: mwError,
163
+ url: req.originalUrl ?? req.url,
164
+ path
165
+ }, "Error running after request middleware");
166
+ });
167
+ return;
168
+ }
169
+ _copilotkitnext_shared.logger.error({
170
+ err: error,
171
+ url: request.url,
172
+ path
173
+ }, "Error running single-route handler");
174
+ next(error);
175
+ }
176
+ };
177
+ }
178
+ function normalizeSingleRoutePath(path) {
179
+ if (!path) throw new Error("basePath must be provided for Express single-route endpoint");
180
+ if (!path.startsWith("/")) return `/${path}`;
181
+ if (path.length > 1 && path.endsWith("/")) return path.slice(0, -1);
182
+ return path;
183
+ }
184
+
185
+ //#endregion
186
+ exports.createCopilotEndpointSingleRouteExpress = createCopilotEndpointSingleRouteExpress;
187
+ //# sourceMappingURL=express-single.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"express-single.cjs","names":["createFetchRequestFromExpress","callBeforeRequestMiddleware","sendFetchResponse","parseMethodCall","expectString","handleRunAgent","createJsonRequest","handleConnectAgent","handleStopAgent","handleGetRuntimeInfo","handleTranscribe"],"sources":["../../src/endpoints/express-single.ts"],"sourcesContent":["import express from \"express\";\nimport type {\n Request as ExpressRequest,\n Response as ExpressResponse,\n NextFunction,\n Router,\n} from \"express\";\nimport cors from \"cors\";\n\nimport { CopilotRuntime } from \"../runtime\";\nimport { handleRunAgent } from \"../handlers/handle-run\";\nimport { handleConnectAgent } from \"../handlers/handle-connect\";\nimport { handleStopAgent } from \"../handlers/handle-stop\";\nimport { handleGetRuntimeInfo } from \"../handlers/get-runtime-info\";\nimport { handleTranscribe } from \"../handlers/handle-transcribe\";\nimport { logger } from \"@copilotkitnext/shared\";\nimport {\n callBeforeRequestMiddleware,\n callAfterRequestMiddleware,\n} from \"../middleware\";\nimport {\n createFetchRequestFromExpress,\n sendFetchResponse,\n} from \"./express-utils\";\nimport {\n createJsonRequest,\n expectString,\n MethodCall,\n parseMethodCall,\n} from \"./single-route-helpers\";\n\ninterface CopilotSingleRouteExpressParams {\n runtime: CopilotRuntime;\n basePath: string;\n}\n\nexport function createCopilotEndpointSingleRouteExpress({\n runtime,\n basePath,\n}: CopilotSingleRouteExpressParams): Router {\n const router = express.Router();\n const routePath = normalizeSingleRoutePath(basePath);\n\n router.use(\n cors({\n origin: \"*\",\n methods: [\"GET\", \"HEAD\", \"PUT\", \"POST\", \"DELETE\", \"PATCH\", \"OPTIONS\"],\n allowedHeaders: [\"*\"],\n }),\n );\n\n router.post(routePath, createSingleRouteHandler(runtime));\n\n router.use((req, res) => {\n res.status(404).json({ error: \"Not found\" });\n });\n\n return router;\n}\n\nfunction createSingleRouteHandler(runtime: CopilotRuntime) {\n return async (\n req: ExpressRequest,\n res: ExpressResponse,\n next: NextFunction,\n ) => {\n const path = req.originalUrl ?? req.path;\n let request = createFetchRequestFromExpress(req);\n\n try {\n const maybeModifiedRequest = await callBeforeRequestMiddleware({\n runtime,\n request,\n path,\n });\n if (maybeModifiedRequest) {\n request = maybeModifiedRequest;\n }\n } catch (error) {\n logger.error(\n { err: error, url: request.url, path },\n \"Error running before request middleware\",\n );\n if (error instanceof Response) {\n try {\n await sendFetchResponse(res, error);\n } catch (streamError) {\n next(streamError);\n }\n return;\n }\n next(error);\n return;\n }\n\n let methodCall: MethodCall;\n try {\n methodCall = await parseMethodCall(request);\n } catch (error) {\n if (error instanceof Response) {\n logger.warn({ url: request.url }, \"Invalid single-route payload\");\n try {\n await sendFetchResponse(res, error);\n } catch (streamError) {\n next(streamError);\n }\n return;\n }\n logger.warn(\n { err: error, url: request.url },\n \"Invalid single-route payload\",\n );\n res.status(400).json({\n error: \"invalid_request\",\n message:\n error instanceof Error ? error.message : \"Invalid request payload\",\n });\n return;\n }\n\n try {\n let response: Response;\n switch (methodCall.method) {\n case \"agent/run\": {\n const agentId = expectString(methodCall.params, \"agentId\");\n const handlerRequest = createJsonRequest(request, methodCall.body);\n response = await handleRunAgent({\n runtime,\n request: handlerRequest,\n agentId,\n });\n break;\n }\n case \"agent/connect\": {\n const agentId = expectString(methodCall.params, \"agentId\");\n const handlerRequest = createJsonRequest(request, methodCall.body);\n response = await handleConnectAgent({\n runtime,\n request: handlerRequest,\n agentId,\n });\n break;\n }\n case \"agent/stop\": {\n const agentId = expectString(methodCall.params, \"agentId\");\n const threadId = expectString(methodCall.params, \"threadId\");\n response = await handleStopAgent({\n runtime,\n request,\n agentId,\n threadId,\n });\n break;\n }\n case \"info\": {\n response = await handleGetRuntimeInfo({ runtime, request });\n break;\n }\n case \"transcribe\": {\n const handlerRequest = createJsonRequest(request, methodCall.body);\n response = await handleTranscribe({\n runtime,\n request: handlerRequest,\n });\n break;\n }\n default: {\n const exhaustive: never = methodCall.method;\n return exhaustive;\n }\n }\n\n await sendFetchResponse(res, response);\n callAfterRequestMiddleware({ runtime, response, path }).catch((error) => {\n logger.error(\n { err: error, url: req.originalUrl ?? req.url, path },\n \"Error running after request middleware\",\n );\n });\n } catch (error) {\n if (error instanceof Response) {\n try {\n await sendFetchResponse(res, error);\n } catch (streamError) {\n next(streamError);\n return;\n }\n callAfterRequestMiddleware({ runtime, response: error, path }).catch(\n (mwError) => {\n logger.error(\n { err: mwError, url: req.originalUrl ?? req.url, path },\n \"Error running after request middleware\",\n );\n },\n );\n return;\n }\n logger.error(\n { err: error, url: request.url, path },\n \"Error running single-route handler\",\n );\n next(error);\n }\n };\n}\n\nfunction normalizeSingleRoutePath(path: string): string {\n if (!path) {\n throw new Error(\n \"basePath must be provided for Express single-route endpoint\",\n );\n }\n\n if (!path.startsWith(\"/\")) {\n return `/${path}`;\n }\n\n if (path.length > 1 && path.endsWith(\"/\")) {\n return path.slice(0, -1);\n }\n\n return path;\n}\n"],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { CopilotRuntime } from "../runtime.cjs";
2
+ import { Router } from "express";
3
+
4
+ //#region src/endpoints/express-single.d.ts
5
+ interface CopilotSingleRouteExpressParams {
6
+ runtime: CopilotRuntime;
7
+ basePath: string;
8
+ }
9
+ declare function createCopilotEndpointSingleRouteExpress({
10
+ runtime,
11
+ basePath
12
+ }: CopilotSingleRouteExpressParams): Router;
13
+ //#endregion
14
+ export { createCopilotEndpointSingleRouteExpress };
15
+ //# sourceMappingURL=express-single.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"express-single.d.cts","names":[],"sources":["../../src/endpoints/express-single.ts"],"mappings":";;;;UA+BU,+BAAA;EACR,OAAA,EAAS,cAAA;EACT,QAAA;AAAA;AAAA,iBAGc,uCAAA,CAAA;EACd,OAAA;EACA;AAAA,GACC,+BAAA,GAAkC,MAAA"}
@@ -0,0 +1,15 @@
1
+ import { CopilotRuntime } from "../runtime.mjs";
2
+ import { Router } from "express";
3
+
4
+ //#region src/endpoints/express-single.d.ts
5
+ interface CopilotSingleRouteExpressParams {
6
+ runtime: CopilotRuntime;
7
+ basePath: string;
8
+ }
9
+ declare function createCopilotEndpointSingleRouteExpress({
10
+ runtime,
11
+ basePath
12
+ }: CopilotSingleRouteExpressParams): Router;
13
+ //#endregion
14
+ export { createCopilotEndpointSingleRouteExpress };
15
+ //# sourceMappingURL=express-single.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"express-single.d.mts","names":[],"sources":["../../src/endpoints/express-single.ts"],"mappings":";;;;UA+BU,+BAAA;EACR,OAAA,EAAS,cAAA;EACT,QAAA;AAAA;AAAA,iBAGc,uCAAA,CAAA;EACd,OAAA;EACA;AAAA,GACC,+BAAA,GAAkC,MAAA"}
@@ -0,0 +1,184 @@
1
+ import { handleRunAgent } from "../handlers/handle-run.mjs";
2
+ import { handleGetRuntimeInfo } from "../handlers/get-runtime-info.mjs";
3
+ import { handleTranscribe } from "../handlers/handle-transcribe.mjs";
4
+ import { callAfterRequestMiddleware, callBeforeRequestMiddleware } from "../middleware.mjs";
5
+ import { handleConnectAgent } from "../handlers/handle-connect.mjs";
6
+ import { handleStopAgent } from "../handlers/handle-stop.mjs";
7
+ import { createJsonRequest, expectString, parseMethodCall } from "./single-route-helpers.mjs";
8
+ import { createFetchRequestFromExpress, sendFetchResponse } from "./express-utils.mjs";
9
+ import { logger } from "@copilotkitnext/shared";
10
+ import express from "express";
11
+ import cors from "cors";
12
+
13
+ //#region src/endpoints/express-single.ts
14
+ function createCopilotEndpointSingleRouteExpress({ runtime, basePath }) {
15
+ const router = express.Router();
16
+ const routePath = normalizeSingleRoutePath(basePath);
17
+ router.use(cors({
18
+ origin: "*",
19
+ methods: [
20
+ "GET",
21
+ "HEAD",
22
+ "PUT",
23
+ "POST",
24
+ "DELETE",
25
+ "PATCH",
26
+ "OPTIONS"
27
+ ],
28
+ allowedHeaders: ["*"]
29
+ }));
30
+ router.post(routePath, createSingleRouteHandler(runtime));
31
+ router.use((req, res) => {
32
+ res.status(404).json({ error: "Not found" });
33
+ });
34
+ return router;
35
+ }
36
+ function createSingleRouteHandler(runtime) {
37
+ return async (req, res, next) => {
38
+ const path = req.originalUrl ?? req.path;
39
+ let request = createFetchRequestFromExpress(req);
40
+ try {
41
+ const maybeModifiedRequest = await callBeforeRequestMiddleware({
42
+ runtime,
43
+ request,
44
+ path
45
+ });
46
+ if (maybeModifiedRequest) request = maybeModifiedRequest;
47
+ } catch (error) {
48
+ logger.error({
49
+ err: error,
50
+ url: request.url,
51
+ path
52
+ }, "Error running before request middleware");
53
+ if (error instanceof Response) {
54
+ try {
55
+ await sendFetchResponse(res, error);
56
+ } catch (streamError) {
57
+ next(streamError);
58
+ }
59
+ return;
60
+ }
61
+ next(error);
62
+ return;
63
+ }
64
+ let methodCall;
65
+ try {
66
+ methodCall = await parseMethodCall(request);
67
+ } catch (error) {
68
+ if (error instanceof Response) {
69
+ logger.warn({ url: request.url }, "Invalid single-route payload");
70
+ try {
71
+ await sendFetchResponse(res, error);
72
+ } catch (streamError) {
73
+ next(streamError);
74
+ }
75
+ return;
76
+ }
77
+ logger.warn({
78
+ err: error,
79
+ url: request.url
80
+ }, "Invalid single-route payload");
81
+ res.status(400).json({
82
+ error: "invalid_request",
83
+ message: error instanceof Error ? error.message : "Invalid request payload"
84
+ });
85
+ return;
86
+ }
87
+ try {
88
+ let response;
89
+ switch (methodCall.method) {
90
+ case "agent/run": {
91
+ const agentId = expectString(methodCall.params, "agentId");
92
+ response = await handleRunAgent({
93
+ runtime,
94
+ request: createJsonRequest(request, methodCall.body),
95
+ agentId
96
+ });
97
+ break;
98
+ }
99
+ case "agent/connect": {
100
+ const agentId = expectString(methodCall.params, "agentId");
101
+ response = await handleConnectAgent({
102
+ runtime,
103
+ request: createJsonRequest(request, methodCall.body),
104
+ agentId
105
+ });
106
+ break;
107
+ }
108
+ case "agent/stop": {
109
+ const agentId = expectString(methodCall.params, "agentId");
110
+ const threadId = expectString(methodCall.params, "threadId");
111
+ response = await handleStopAgent({
112
+ runtime,
113
+ request,
114
+ agentId,
115
+ threadId
116
+ });
117
+ break;
118
+ }
119
+ case "info":
120
+ response = await handleGetRuntimeInfo({
121
+ runtime,
122
+ request
123
+ });
124
+ break;
125
+ case "transcribe":
126
+ response = await handleTranscribe({
127
+ runtime,
128
+ request: createJsonRequest(request, methodCall.body)
129
+ });
130
+ break;
131
+ default: return methodCall.method;
132
+ }
133
+ await sendFetchResponse(res, response);
134
+ callAfterRequestMiddleware({
135
+ runtime,
136
+ response,
137
+ path
138
+ }).catch((error) => {
139
+ logger.error({
140
+ err: error,
141
+ url: req.originalUrl ?? req.url,
142
+ path
143
+ }, "Error running after request middleware");
144
+ });
145
+ } catch (error) {
146
+ if (error instanceof Response) {
147
+ try {
148
+ await sendFetchResponse(res, error);
149
+ } catch (streamError) {
150
+ next(streamError);
151
+ return;
152
+ }
153
+ callAfterRequestMiddleware({
154
+ runtime,
155
+ response: error,
156
+ path
157
+ }).catch((mwError) => {
158
+ logger.error({
159
+ err: mwError,
160
+ url: req.originalUrl ?? req.url,
161
+ path
162
+ }, "Error running after request middleware");
163
+ });
164
+ return;
165
+ }
166
+ logger.error({
167
+ err: error,
168
+ url: request.url,
169
+ path
170
+ }, "Error running single-route handler");
171
+ next(error);
172
+ }
173
+ };
174
+ }
175
+ function normalizeSingleRoutePath(path) {
176
+ if (!path) throw new Error("basePath must be provided for Express single-route endpoint");
177
+ if (!path.startsWith("/")) return `/${path}`;
178
+ if (path.length > 1 && path.endsWith("/")) return path.slice(0, -1);
179
+ return path;
180
+ }
181
+
182
+ //#endregion
183
+ export { createCopilotEndpointSingleRouteExpress };
184
+ //# sourceMappingURL=express-single.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"express-single.mjs","names":[],"sources":["../../src/endpoints/express-single.ts"],"sourcesContent":["import express from \"express\";\nimport type {\n Request as ExpressRequest,\n Response as ExpressResponse,\n NextFunction,\n Router,\n} from \"express\";\nimport cors from \"cors\";\n\nimport { CopilotRuntime } from \"../runtime\";\nimport { handleRunAgent } from \"../handlers/handle-run\";\nimport { handleConnectAgent } from \"../handlers/handle-connect\";\nimport { handleStopAgent } from \"../handlers/handle-stop\";\nimport { handleGetRuntimeInfo } from \"../handlers/get-runtime-info\";\nimport { handleTranscribe } from \"../handlers/handle-transcribe\";\nimport { logger } from \"@copilotkitnext/shared\";\nimport {\n callBeforeRequestMiddleware,\n callAfterRequestMiddleware,\n} from \"../middleware\";\nimport {\n createFetchRequestFromExpress,\n sendFetchResponse,\n} from \"./express-utils\";\nimport {\n createJsonRequest,\n expectString,\n MethodCall,\n parseMethodCall,\n} from \"./single-route-helpers\";\n\ninterface CopilotSingleRouteExpressParams {\n runtime: CopilotRuntime;\n basePath: string;\n}\n\nexport function createCopilotEndpointSingleRouteExpress({\n runtime,\n basePath,\n}: CopilotSingleRouteExpressParams): Router {\n const router = express.Router();\n const routePath = normalizeSingleRoutePath(basePath);\n\n router.use(\n cors({\n origin: \"*\",\n methods: [\"GET\", \"HEAD\", \"PUT\", \"POST\", \"DELETE\", \"PATCH\", \"OPTIONS\"],\n allowedHeaders: [\"*\"],\n }),\n );\n\n router.post(routePath, createSingleRouteHandler(runtime));\n\n router.use((req, res) => {\n res.status(404).json({ error: \"Not found\" });\n });\n\n return router;\n}\n\nfunction createSingleRouteHandler(runtime: CopilotRuntime) {\n return async (\n req: ExpressRequest,\n res: ExpressResponse,\n next: NextFunction,\n ) => {\n const path = req.originalUrl ?? req.path;\n let request = createFetchRequestFromExpress(req);\n\n try {\n const maybeModifiedRequest = await callBeforeRequestMiddleware({\n runtime,\n request,\n path,\n });\n if (maybeModifiedRequest) {\n request = maybeModifiedRequest;\n }\n } catch (error) {\n logger.error(\n { err: error, url: request.url, path },\n \"Error running before request middleware\",\n );\n if (error instanceof Response) {\n try {\n await sendFetchResponse(res, error);\n } catch (streamError) {\n next(streamError);\n }\n return;\n }\n next(error);\n return;\n }\n\n let methodCall: MethodCall;\n try {\n methodCall = await parseMethodCall(request);\n } catch (error) {\n if (error instanceof Response) {\n logger.warn({ url: request.url }, \"Invalid single-route payload\");\n try {\n await sendFetchResponse(res, error);\n } catch (streamError) {\n next(streamError);\n }\n return;\n }\n logger.warn(\n { err: error, url: request.url },\n \"Invalid single-route payload\",\n );\n res.status(400).json({\n error: \"invalid_request\",\n message:\n error instanceof Error ? error.message : \"Invalid request payload\",\n });\n return;\n }\n\n try {\n let response: Response;\n switch (methodCall.method) {\n case \"agent/run\": {\n const agentId = expectString(methodCall.params, \"agentId\");\n const handlerRequest = createJsonRequest(request, methodCall.body);\n response = await handleRunAgent({\n runtime,\n request: handlerRequest,\n agentId,\n });\n break;\n }\n case \"agent/connect\": {\n const agentId = expectString(methodCall.params, \"agentId\");\n const handlerRequest = createJsonRequest(request, methodCall.body);\n response = await handleConnectAgent({\n runtime,\n request: handlerRequest,\n agentId,\n });\n break;\n }\n case \"agent/stop\": {\n const agentId = expectString(methodCall.params, \"agentId\");\n const threadId = expectString(methodCall.params, \"threadId\");\n response = await handleStopAgent({\n runtime,\n request,\n agentId,\n threadId,\n });\n break;\n }\n case \"info\": {\n response = await handleGetRuntimeInfo({ runtime, request });\n break;\n }\n case \"transcribe\": {\n const handlerRequest = createJsonRequest(request, methodCall.body);\n response = await handleTranscribe({\n runtime,\n request: handlerRequest,\n });\n break;\n }\n default: {\n const exhaustive: never = methodCall.method;\n return exhaustive;\n }\n }\n\n await sendFetchResponse(res, response);\n callAfterRequestMiddleware({ runtime, response, path }).catch((error) => {\n logger.error(\n { err: error, url: req.originalUrl ?? req.url, path },\n \"Error running after request middleware\",\n );\n });\n } catch (error) {\n if (error instanceof Response) {\n try {\n await sendFetchResponse(res, error);\n } catch (streamError) {\n next(streamError);\n return;\n }\n callAfterRequestMiddleware({ runtime, response: error, path }).catch(\n (mwError) => {\n logger.error(\n { err: mwError, url: req.originalUrl ?? req.url, path },\n \"Error running after request middleware\",\n );\n },\n );\n return;\n }\n logger.error(\n { err: error, url: request.url, path },\n \"Error running single-route handler\",\n );\n next(error);\n }\n };\n}\n\nfunction normalizeSingleRoutePath(path: string): string {\n if (!path) {\n throw new Error(\n \"basePath must be provided for Express single-route endpoint\",\n );\n }\n\n if (!path.startsWith(\"/\")) {\n return `/${path}`;\n }\n\n if (path.length > 1 && path.endsWith(\"/\")) {\n return path.slice(0, -1);\n }\n\n return path;\n}\n"],"mappings":";;;;;;;;;;;;;AAoCA,SAAgB,wCAAwC,EACtD,SACA,YAC0C;CAC1C,MAAM,SAAS,QAAQ,QAAQ;CAC/B,MAAM,YAAY,yBAAyB,SAAS;AAEpD,QAAO,IACL,KAAK;EACH,QAAQ;EACR,SAAS;GAAC;GAAO;GAAQ;GAAO;GAAQ;GAAU;GAAS;GAAU;EACrE,gBAAgB,CAAC,IAAI;EACtB,CAAC,CACH;AAED,QAAO,KAAK,WAAW,yBAAyB,QAAQ,CAAC;AAEzD,QAAO,KAAK,KAAK,QAAQ;AACvB,MAAI,OAAO,IAAI,CAAC,KAAK,EAAE,OAAO,aAAa,CAAC;GAC5C;AAEF,QAAO;;AAGT,SAAS,yBAAyB,SAAyB;AACzD,QAAO,OACL,KACA,KACA,SACG;EACH,MAAM,OAAO,IAAI,eAAe,IAAI;EACpC,IAAI,UAAU,8BAA8B,IAAI;AAEhD,MAAI;GACF,MAAM,uBAAuB,MAAM,4BAA4B;IAC7D;IACA;IACA;IACD,CAAC;AACF,OAAI,qBACF,WAAU;WAEL,OAAO;AACd,UAAO,MACL;IAAE,KAAK;IAAO,KAAK,QAAQ;IAAK;IAAM,EACtC,0CACD;AACD,OAAI,iBAAiB,UAAU;AAC7B,QAAI;AACF,WAAM,kBAAkB,KAAK,MAAM;aAC5B,aAAa;AACpB,UAAK,YAAY;;AAEnB;;AAEF,QAAK,MAAM;AACX;;EAGF,IAAI;AACJ,MAAI;AACF,gBAAa,MAAM,gBAAgB,QAAQ;WACpC,OAAO;AACd,OAAI,iBAAiB,UAAU;AAC7B,WAAO,KAAK,EAAE,KAAK,QAAQ,KAAK,EAAE,+BAA+B;AACjE,QAAI;AACF,WAAM,kBAAkB,KAAK,MAAM;aAC5B,aAAa;AACpB,UAAK,YAAY;;AAEnB;;AAEF,UAAO,KACL;IAAE,KAAK;IAAO,KAAK,QAAQ;IAAK,EAChC,+BACD;AACD,OAAI,OAAO,IAAI,CAAC,KAAK;IACnB,OAAO;IACP,SACE,iBAAiB,QAAQ,MAAM,UAAU;IAC5C,CAAC;AACF;;AAGF,MAAI;GACF,IAAI;AACJ,WAAQ,WAAW,QAAnB;IACE,KAAK,aAAa;KAChB,MAAM,UAAU,aAAa,WAAW,QAAQ,UAAU;AAE1D,gBAAW,MAAM,eAAe;MAC9B;MACA,SAHqB,kBAAkB,SAAS,WAAW,KAAK;MAIhE;MACD,CAAC;AACF;;IAEF,KAAK,iBAAiB;KACpB,MAAM,UAAU,aAAa,WAAW,QAAQ,UAAU;AAE1D,gBAAW,MAAM,mBAAmB;MAClC;MACA,SAHqB,kBAAkB,SAAS,WAAW,KAAK;MAIhE;MACD,CAAC;AACF;;IAEF,KAAK,cAAc;KACjB,MAAM,UAAU,aAAa,WAAW,QAAQ,UAAU;KAC1D,MAAM,WAAW,aAAa,WAAW,QAAQ,WAAW;AAC5D,gBAAW,MAAM,gBAAgB;MAC/B;MACA;MACA;MACA;MACD,CAAC;AACF;;IAEF,KAAK;AACH,gBAAW,MAAM,qBAAqB;MAAE;MAAS;MAAS,CAAC;AAC3D;IAEF,KAAK;AAEH,gBAAW,MAAM,iBAAiB;MAChC;MACA,SAHqB,kBAAkB,SAAS,WAAW,KAAK;MAIjE,CAAC;AACF;IAEF,QAEE,QAD0B,WAAW;;AAKzC,SAAM,kBAAkB,KAAK,SAAS;AACtC,8BAA2B;IAAE;IAAS;IAAU;IAAM,CAAC,CAAC,OAAO,UAAU;AACvE,WAAO,MACL;KAAE,KAAK;KAAO,KAAK,IAAI,eAAe,IAAI;KAAK;KAAM,EACrD,yCACD;KACD;WACK,OAAO;AACd,OAAI,iBAAiB,UAAU;AAC7B,QAAI;AACF,WAAM,kBAAkB,KAAK,MAAM;aAC5B,aAAa;AACpB,UAAK,YAAY;AACjB;;AAEF,+BAA2B;KAAE;KAAS,UAAU;KAAO;KAAM,CAAC,CAAC,OAC5D,YAAY;AACX,YAAO,MACL;MAAE,KAAK;MAAS,KAAK,IAAI,eAAe,IAAI;MAAK;MAAM,EACvD,yCACD;MAEJ;AACD;;AAEF,UAAO,MACL;IAAE,KAAK;IAAO,KAAK,QAAQ;IAAK;IAAM,EACtC,qCACD;AACD,QAAK,MAAM;;;;AAKjB,SAAS,yBAAyB,MAAsB;AACtD,KAAI,CAAC,KACH,OAAM,IAAI,MACR,8DACD;AAGH,KAAI,CAAC,KAAK,WAAW,IAAI,CACvB,QAAO,IAAI;AAGb,KAAI,KAAK,SAAS,KAAK,KAAK,SAAS,IAAI,CACvC,QAAO,KAAK,MAAM,GAAG,GAAG;AAG1B,QAAO"}
@@ -0,0 +1,118 @@
1
+ const require_runtime = require('../_virtual/_rolldown/runtime.cjs');
2
+ let _copilotkitnext_shared = require("@copilotkitnext/shared");
3
+ let node_stream = require("node:stream");
4
+ let node_util = require("node:util");
5
+
6
+ //#region src/endpoints/express-utils.ts
7
+ const streamPipeline = (0, node_util.promisify)(node_stream.pipeline);
8
+ const METHODS_WITHOUT_BODY = new Set(["GET", "HEAD"]);
9
+ function createFetchRequestFromExpress(req) {
10
+ const method = req.method?.toUpperCase() ?? "GET";
11
+ const url = `${buildOrigin(req)}${req.originalUrl ?? req.url ?? ""}`;
12
+ const headers = new Headers();
13
+ for (const [key, value] of Object.entries(req.headers)) {
14
+ if (value === void 0) continue;
15
+ if (Array.isArray(value)) value.forEach((v) => headers.append(key, v));
16
+ else headers.set(key, value);
17
+ }
18
+ const init = {
19
+ method,
20
+ headers
21
+ };
22
+ const hasParsedBody = req.body !== void 0 && req.body !== null;
23
+ const streamConsumed = isStreamConsumed(req, hasParsedBody);
24
+ if (!METHODS_WITHOUT_BODY.has(method)) if (req.readable !== false && !streamConsumed) {
25
+ init.body = node_stream.Readable.toWeb(req);
26
+ init.duplex = "half";
27
+ } else if (hasParsedBody) {
28
+ const { body, contentType } = synthesizeBody(req.body);
29
+ if (contentType) headers.set("content-type", contentType);
30
+ headers.delete("content-length");
31
+ if (body !== void 0) init.body = body;
32
+ _copilotkitnext_shared.logger.info({
33
+ url,
34
+ method,
35
+ readable: req.readable,
36
+ readableEnded: req.readableEnded,
37
+ complete: req.complete
38
+ }, "Express request stream already consumed; synthesized body from parsed content");
39
+ } else {
40
+ headers.delete("content-length");
41
+ _copilotkitnext_shared.logger.warn({
42
+ url,
43
+ method
44
+ }, "Request stream already consumed but no body was available; sending empty body");
45
+ }
46
+ const controller = new AbortController();
47
+ const abort = () => controller.abort();
48
+ req.on("aborted", abort);
49
+ req.on("error", abort);
50
+ req.on("close", () => {
51
+ if (req.aborted) abort();
52
+ });
53
+ init.signal = controller.signal;
54
+ try {
55
+ return new Request(url, init);
56
+ } catch (error) {
57
+ if (error instanceof TypeError && /disturbed|locked/i.test(error.message)) {
58
+ headers.delete("content-length");
59
+ delete init.duplex;
60
+ if (hasParsedBody) {
61
+ const { body, contentType } = synthesizeBody(req.body);
62
+ if (contentType) headers.set("content-type", contentType);
63
+ init.body = body;
64
+ _copilotkitnext_shared.logger.info({
65
+ url,
66
+ method
67
+ }, "Request stream disturbed while constructing Request; reused parsed body");
68
+ } else {
69
+ init.body = void 0;
70
+ _copilotkitnext_shared.logger.warn({
71
+ url,
72
+ method
73
+ }, "Request stream was disturbed; falling back to empty body");
74
+ }
75
+ return new Request(url, init);
76
+ }
77
+ throw error;
78
+ }
79
+ }
80
+ async function sendFetchResponse(res, response) {
81
+ res.status(response.status);
82
+ response.headers.forEach((value, key) => {
83
+ if (key.toLowerCase() === "content-length" && response.body !== null) return;
84
+ res.setHeader(key, value);
85
+ });
86
+ if (!response.body) {
87
+ res.end();
88
+ return;
89
+ }
90
+ const nodeStream = node_stream.Readable.fromWeb(response.body);
91
+ try {
92
+ await streamPipeline(nodeStream, res);
93
+ } catch (error) {
94
+ res.destroy(error);
95
+ throw error;
96
+ }
97
+ }
98
+ function buildOrigin(req) {
99
+ return `${req.protocol || (req.secure ? "https" : "http")}://${req.get("host") ?? "localhost"}`;
100
+ }
101
+ function isStreamConsumed(req, hasParsedBody) {
102
+ const state = req._readableState;
103
+ return Boolean(hasParsedBody || req.readableEnded || req.complete || state?.ended || state?.endEmitted);
104
+ }
105
+ function synthesizeBody(body) {
106
+ if (Buffer.isBuffer(body) || body instanceof Uint8Array) return { body };
107
+ if (typeof body === "string") return { body };
108
+ if (typeof body === "object" && body !== void 0) return {
109
+ body: JSON.stringify(body),
110
+ contentType: "application/json"
111
+ };
112
+ return {};
113
+ }
114
+
115
+ //#endregion
116
+ exports.createFetchRequestFromExpress = createFetchRequestFromExpress;
117
+ exports.sendFetchResponse = sendFetchResponse;
118
+ //# sourceMappingURL=express-utils.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"express-utils.cjs","names":["pipeline","Readable"],"sources":["../../src/endpoints/express-utils.ts"],"sourcesContent":["import type {\n Request as ExpressRequest,\n Response as ExpressResponse,\n} from \"express\";\nimport { Readable } from \"node:stream\";\nimport { pipeline } from \"node:stream\";\nimport { promisify } from \"node:util\";\nimport { logger } from \"@copilotkitnext/shared\";\n\nconst streamPipeline = promisify(pipeline);\n\nconst METHODS_WITHOUT_BODY = new Set([\"GET\", \"HEAD\"]);\n\nexport function createFetchRequestFromExpress(req: ExpressRequest): Request {\n const method = req.method?.toUpperCase() ?? \"GET\";\n const origin = buildOrigin(req);\n const url = `${origin}${req.originalUrl ?? req.url ?? \"\"}`;\n\n const headers = new Headers();\n for (const [key, value] of Object.entries(req.headers)) {\n if (value === undefined) continue;\n if (Array.isArray(value)) {\n value.forEach((v) => headers.append(key, v));\n } else {\n headers.set(key, value);\n }\n }\n\n const init: RequestInit & { duplex?: \"half\" } = {\n method,\n headers,\n };\n\n const hasParsedBody = req.body !== undefined && req.body !== null;\n const streamConsumed = isStreamConsumed(req, hasParsedBody);\n\n if (!METHODS_WITHOUT_BODY.has(method)) {\n const canStreamBody = req.readable !== false && !streamConsumed;\n\n if (canStreamBody) {\n init.body = Readable.toWeb(req) as unknown as BodyInit;\n init.duplex = \"half\";\n } else if (hasParsedBody) {\n const { body, contentType } = synthesizeBody(req.body);\n if (contentType) {\n headers.set(\"content-type\", contentType);\n }\n headers.delete(\"content-length\");\n if (body !== undefined) {\n init.body = body;\n }\n logger.info(\n {\n url,\n method,\n readable: req.readable,\n readableEnded: req.readableEnded,\n complete: req.complete,\n },\n \"Express request stream already consumed; synthesized body from parsed content\",\n );\n } else {\n headers.delete(\"content-length\");\n logger.warn(\n { url, method },\n \"Request stream already consumed but no body was available; sending empty body\",\n );\n }\n }\n\n const controller = new AbortController();\n const abort = () => controller.abort();\n req.on(\"aborted\", abort);\n req.on(\"error\", abort);\n req.on(\"close\", () => {\n if (req.aborted) {\n abort();\n }\n });\n init.signal = controller.signal;\n\n try {\n return new Request(url, init);\n } catch (error) {\n if (error instanceof TypeError && /disturbed|locked/i.test(error.message)) {\n // Fallback to synthesized/empty body when the stream was already consumed.\n headers.delete(\"content-length\");\n delete init.duplex;\n\n if (hasParsedBody) {\n const { body, contentType } = synthesizeBody(req.body);\n if (contentType) {\n headers.set(\"content-type\", contentType);\n }\n init.body = body;\n logger.info(\n { url, method },\n \"Request stream disturbed while constructing Request; reused parsed body\",\n );\n } else {\n init.body = undefined;\n logger.warn(\n { url, method },\n \"Request stream was disturbed; falling back to empty body\",\n );\n }\n\n return new Request(url, init);\n }\n throw error;\n }\n}\n\nexport async function sendFetchResponse(\n res: ExpressResponse,\n response: Response,\n): Promise<void> {\n res.status(response.status);\n\n response.headers.forEach((value, key) => {\n if (key.toLowerCase() === \"content-length\" && response.body !== null) {\n return;\n }\n res.setHeader(key, value);\n });\n\n if (!response.body) {\n res.end();\n return;\n }\n\n const nodeStream = Readable.fromWeb(response.body as any);\n try {\n await streamPipeline(nodeStream, res);\n } catch (error) {\n res.destroy(error as Error);\n throw error;\n }\n}\n\nfunction buildOrigin(req: ExpressRequest): string {\n const protocol = req.protocol || (req.secure ? \"https\" : \"http\");\n const host = req.get(\"host\") ?? \"localhost\";\n return `${protocol}://${host}`;\n}\n\nfunction isStreamConsumed(\n req: ExpressRequest,\n hasParsedBody: boolean,\n): boolean {\n const state = (\n req as unknown as {\n _readableState?: { ended?: boolean; endEmitted?: boolean };\n }\n )._readableState;\n return Boolean(\n hasParsedBody ||\n req.readableEnded ||\n req.complete ||\n state?.ended ||\n state?.endEmitted,\n );\n}\n\nfunction synthesizeBody(body: unknown): {\n body?: BodyInit;\n contentType?: string;\n} {\n if (Buffer.isBuffer(body) || body instanceof Uint8Array) {\n return { body };\n }\n\n if (typeof body === \"string\") {\n return { body };\n }\n\n if (typeof body === \"object\" && body !== undefined) {\n return { body: JSON.stringify(body), contentType: \"application/json\" };\n }\n\n return {};\n}\n"],"mappings":"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"}