@copilotkitnext/runtime 1.51.4 → 1.51.5-next.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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 +25 -22
  126. package/tsdown.config.ts +16 -0
  127. package/dist/chunk-5GKH3W25.mjs +0 -1054
  128. package/dist/chunk-5GKH3W25.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,116 @@
1
+ import { logger } from "@copilotkitnext/shared";
2
+ import { Readable, pipeline } from "node:stream";
3
+ import { promisify } from "node:util";
4
+
5
+ //#region src/endpoints/express-utils.ts
6
+ const streamPipeline = promisify(pipeline);
7
+ const METHODS_WITHOUT_BODY = new Set(["GET", "HEAD"]);
8
+ function createFetchRequestFromExpress(req) {
9
+ const method = req.method?.toUpperCase() ?? "GET";
10
+ const url = `${buildOrigin(req)}${req.originalUrl ?? req.url ?? ""}`;
11
+ const headers = new Headers();
12
+ for (const [key, value] of Object.entries(req.headers)) {
13
+ if (value === void 0) continue;
14
+ if (Array.isArray(value)) value.forEach((v) => headers.append(key, v));
15
+ else headers.set(key, value);
16
+ }
17
+ const init = {
18
+ method,
19
+ headers
20
+ };
21
+ const hasParsedBody = req.body !== void 0 && req.body !== null;
22
+ const streamConsumed = isStreamConsumed(req, hasParsedBody);
23
+ if (!METHODS_WITHOUT_BODY.has(method)) if (req.readable !== false && !streamConsumed) {
24
+ init.body = Readable.toWeb(req);
25
+ init.duplex = "half";
26
+ } else if (hasParsedBody) {
27
+ const { body, contentType } = synthesizeBody(req.body);
28
+ if (contentType) headers.set("content-type", contentType);
29
+ headers.delete("content-length");
30
+ if (body !== void 0) init.body = body;
31
+ logger.info({
32
+ url,
33
+ method,
34
+ readable: req.readable,
35
+ readableEnded: req.readableEnded,
36
+ complete: req.complete
37
+ }, "Express request stream already consumed; synthesized body from parsed content");
38
+ } else {
39
+ headers.delete("content-length");
40
+ logger.warn({
41
+ url,
42
+ method
43
+ }, "Request stream already consumed but no body was available; sending empty body");
44
+ }
45
+ const controller = new AbortController();
46
+ const abort = () => controller.abort();
47
+ req.on("aborted", abort);
48
+ req.on("error", abort);
49
+ req.on("close", () => {
50
+ if (req.aborted) abort();
51
+ });
52
+ init.signal = controller.signal;
53
+ try {
54
+ return new Request(url, init);
55
+ } catch (error) {
56
+ if (error instanceof TypeError && /disturbed|locked/i.test(error.message)) {
57
+ headers.delete("content-length");
58
+ delete init.duplex;
59
+ if (hasParsedBody) {
60
+ const { body, contentType } = synthesizeBody(req.body);
61
+ if (contentType) headers.set("content-type", contentType);
62
+ init.body = body;
63
+ logger.info({
64
+ url,
65
+ method
66
+ }, "Request stream disturbed while constructing Request; reused parsed body");
67
+ } else {
68
+ init.body = void 0;
69
+ logger.warn({
70
+ url,
71
+ method
72
+ }, "Request stream was disturbed; falling back to empty body");
73
+ }
74
+ return new Request(url, init);
75
+ }
76
+ throw error;
77
+ }
78
+ }
79
+ async function sendFetchResponse(res, response) {
80
+ res.status(response.status);
81
+ response.headers.forEach((value, key) => {
82
+ if (key.toLowerCase() === "content-length" && response.body !== null) return;
83
+ res.setHeader(key, value);
84
+ });
85
+ if (!response.body) {
86
+ res.end();
87
+ return;
88
+ }
89
+ const nodeStream = Readable.fromWeb(response.body);
90
+ try {
91
+ await streamPipeline(nodeStream, res);
92
+ } catch (error) {
93
+ res.destroy(error);
94
+ throw error;
95
+ }
96
+ }
97
+ function buildOrigin(req) {
98
+ return `${req.protocol || (req.secure ? "https" : "http")}://${req.get("host") ?? "localhost"}`;
99
+ }
100
+ function isStreamConsumed(req, hasParsedBody) {
101
+ const state = req._readableState;
102
+ return Boolean(hasParsedBody || req.readableEnded || req.complete || state?.ended || state?.endEmitted);
103
+ }
104
+ function synthesizeBody(body) {
105
+ if (Buffer.isBuffer(body) || body instanceof Uint8Array) return { body };
106
+ if (typeof body === "string") return { body };
107
+ if (typeof body === "object" && body !== void 0) return {
108
+ body: JSON.stringify(body),
109
+ contentType: "application/json"
110
+ };
111
+ return {};
112
+ }
113
+
114
+ //#endregion
115
+ export { createFetchRequestFromExpress, sendFetchResponse };
116
+ //# sourceMappingURL=express-utils.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"express-utils.mjs","names":[],"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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"}
@@ -0,0 +1,165 @@
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_express_utils = require('./express-utils.cjs');
9
+ let _copilotkitnext_shared = require("@copilotkitnext/shared");
10
+ let express = require("express");
11
+ express = require_runtime.__toESM(express);
12
+ let cors = require("cors");
13
+ cors = require_runtime.__toESM(cors);
14
+
15
+ //#region src/endpoints/express.ts
16
+ function createCopilotEndpointExpress({ runtime, basePath }) {
17
+ const router = express.default.Router();
18
+ const normalizedBase = normalizeBasePath(basePath);
19
+ router.use((0, cors.default)({
20
+ origin: "*",
21
+ methods: [
22
+ "GET",
23
+ "HEAD",
24
+ "PUT",
25
+ "POST",
26
+ "DELETE",
27
+ "PATCH",
28
+ "OPTIONS"
29
+ ],
30
+ allowedHeaders: ["*"]
31
+ }));
32
+ router.post(joinPath(normalizedBase, "/agent/:agentId/run"), createRouteHandler(runtime, async ({ request, req }) => {
33
+ const agentId = req.params.agentId;
34
+ return require_handle_run.handleRunAgent({
35
+ runtime,
36
+ request,
37
+ agentId
38
+ });
39
+ }));
40
+ router.post(joinPath(normalizedBase, "/agent/:agentId/connect"), createRouteHandler(runtime, async ({ request, req }) => {
41
+ const agentId = req.params.agentId;
42
+ return require_handle_connect.handleConnectAgent({
43
+ runtime,
44
+ request,
45
+ agentId
46
+ });
47
+ }));
48
+ router.post(joinPath(normalizedBase, "/agent/:agentId/stop/:threadId"), createRouteHandler(runtime, async ({ request, req }) => {
49
+ const agentId = req.params.agentId;
50
+ const threadId = req.params.threadId;
51
+ return require_handle_stop.handleStopAgent({
52
+ runtime,
53
+ request,
54
+ agentId,
55
+ threadId
56
+ });
57
+ }));
58
+ router.get(joinPath(normalizedBase, "/info"), createRouteHandler(runtime, async ({ request }) => {
59
+ return require_get_runtime_info.handleGetRuntimeInfo({
60
+ runtime,
61
+ request
62
+ });
63
+ }));
64
+ router.post(joinPath(normalizedBase, "/transcribe"), createRouteHandler(runtime, async ({ request }) => {
65
+ return require_handle_transcribe.handleTranscribe({
66
+ runtime,
67
+ request
68
+ });
69
+ }));
70
+ router.use(joinPath(normalizedBase, "*"), (req, res) => {
71
+ res.status(404).json({ error: "Not found" });
72
+ });
73
+ return router;
74
+ }
75
+ function createRouteHandler(runtime, factory) {
76
+ return async (req, res, next) => {
77
+ const path = req.originalUrl ?? req.path;
78
+ let request = require_express_utils.createFetchRequestFromExpress(req);
79
+ try {
80
+ const maybeModifiedRequest = await require_middleware.callBeforeRequestMiddleware({
81
+ runtime,
82
+ request,
83
+ path
84
+ });
85
+ if (maybeModifiedRequest) request = maybeModifiedRequest;
86
+ } catch (error) {
87
+ _copilotkitnext_shared.logger.error({
88
+ err: error,
89
+ url: request.url,
90
+ path
91
+ }, "Error running before request middleware");
92
+ if (error instanceof Response) {
93
+ try {
94
+ await require_express_utils.sendFetchResponse(res, error);
95
+ } catch (streamError) {
96
+ next(streamError);
97
+ }
98
+ return;
99
+ }
100
+ next(error);
101
+ return;
102
+ }
103
+ try {
104
+ const response = await factory({
105
+ request,
106
+ req
107
+ });
108
+ await require_express_utils.sendFetchResponse(res, response);
109
+ require_middleware.callAfterRequestMiddleware({
110
+ runtime,
111
+ response,
112
+ path
113
+ }).catch((error) => {
114
+ _copilotkitnext_shared.logger.error({
115
+ err: error,
116
+ url: req.originalUrl ?? req.url,
117
+ path
118
+ }, "Error running after request middleware");
119
+ });
120
+ } catch (error) {
121
+ if (error instanceof Response) {
122
+ try {
123
+ await require_express_utils.sendFetchResponse(res, error);
124
+ } catch (streamError) {
125
+ next(streamError);
126
+ return;
127
+ }
128
+ require_middleware.callAfterRequestMiddleware({
129
+ runtime,
130
+ response: error,
131
+ path
132
+ }).catch((mwError) => {
133
+ _copilotkitnext_shared.logger.error({
134
+ err: mwError,
135
+ url: req.originalUrl ?? req.url,
136
+ path
137
+ }, "Error running after request middleware");
138
+ });
139
+ return;
140
+ }
141
+ _copilotkitnext_shared.logger.error({
142
+ err: error,
143
+ url: request.url,
144
+ path
145
+ }, "Error running request handler");
146
+ next(error);
147
+ }
148
+ };
149
+ }
150
+ function normalizeBasePath(path) {
151
+ if (!path) throw new Error("basePath must be provided for Express endpoint");
152
+ if (!path.startsWith("/")) return `/${path}`;
153
+ if (path.length > 1 && path.endsWith("/")) return path.slice(0, -1);
154
+ return path;
155
+ }
156
+ function joinPath(basePath, suffix) {
157
+ if (basePath === "/") return suffix.startsWith("/") ? suffix : `/${suffix}`;
158
+ if (!suffix) return basePath;
159
+ if (suffix === "*") return `${basePath}/*`;
160
+ return `${basePath}${suffix.startsWith("/") ? suffix : `/${suffix}`}`;
161
+ }
162
+
163
+ //#endregion
164
+ exports.createCopilotEndpointExpress = createCopilotEndpointExpress;
165
+ //# sourceMappingURL=express.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"express.cjs","names":["handleRunAgent","handleConnectAgent","handleStopAgent","handleGetRuntimeInfo","handleTranscribe","createFetchRequestFromExpress","callBeforeRequestMiddleware","sendFetchResponse"],"sources":["../../src/endpoints/express.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\";\n\ninterface CopilotExpressEndpointParams {\n runtime: CopilotRuntime;\n basePath: string;\n}\n\nexport function createCopilotEndpointExpress({\n runtime,\n basePath,\n}: CopilotExpressEndpointParams): Router {\n const router = express.Router();\n const normalizedBase = normalizeBasePath(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(\n joinPath(normalizedBase, \"/agent/:agentId/run\"),\n createRouteHandler(runtime, async ({ request, req }) => {\n const agentId = req.params.agentId as string;\n return handleRunAgent({ runtime, request, agentId });\n }),\n );\n\n router.post(\n joinPath(normalizedBase, \"/agent/:agentId/connect\"),\n createRouteHandler(runtime, async ({ request, req }) => {\n const agentId = req.params.agentId as string;\n return handleConnectAgent({ runtime, request, agentId });\n }),\n );\n\n router.post(\n joinPath(normalizedBase, \"/agent/:agentId/stop/:threadId\"),\n createRouteHandler(runtime, async ({ request, req }) => {\n const agentId = req.params.agentId as string;\n const threadId = req.params.threadId as string;\n return handleStopAgent({ runtime, request, agentId, threadId });\n }),\n );\n\n router.get(\n joinPath(normalizedBase, \"/info\"),\n createRouteHandler(runtime, async ({ request }) => {\n return handleGetRuntimeInfo({ runtime, request });\n }),\n );\n\n router.post(\n joinPath(normalizedBase, \"/transcribe\"),\n createRouteHandler(runtime, async ({ request }) => {\n return handleTranscribe({ runtime, request });\n }),\n );\n\n router.use(joinPath(normalizedBase, \"*\"), (req, res) => {\n res.status(404).json({ error: \"Not found\" });\n });\n\n return router;\n}\n\ntype RouteHandlerContext = {\n request: Request;\n req: ExpressRequest;\n};\n\ntype RouteHandlerFactory = (ctx: RouteHandlerContext) => Promise<Response>;\n\nfunction createRouteHandler(\n runtime: CopilotRuntime,\n factory: RouteHandlerFactory,\n) {\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 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 try {\n const response = await factory({ request, req });\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 request handler\",\n );\n next(error);\n }\n };\n}\n\nfunction normalizeBasePath(path: string): string {\n if (!path) {\n throw new Error(\"basePath must be provided for Express endpoint\");\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\nfunction joinPath(basePath: string, suffix: string): string {\n if (basePath === \"/\") {\n return suffix.startsWith(\"/\") ? suffix : `/${suffix}`;\n }\n\n if (!suffix) {\n return basePath;\n }\n\n if (suffix === \"*\") {\n return `${basePath}/*`;\n }\n\n return `${basePath}${suffix.startsWith(\"/\") ? suffix : `/${suffix}`}`;\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.d.ts
5
+ interface CopilotExpressEndpointParams {
6
+ runtime: CopilotRuntime;
7
+ basePath: string;
8
+ }
9
+ declare function createCopilotEndpointExpress({
10
+ runtime,
11
+ basePath
12
+ }: CopilotExpressEndpointParams): Router;
13
+ //#endregion
14
+ export { createCopilotEndpointExpress };
15
+ //# sourceMappingURL=express.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"express.d.cts","names":[],"sources":["../../src/endpoints/express.ts"],"mappings":";;;;UAyBU,4BAAA;EACR,OAAA,EAAS,cAAA;EACT,QAAA;AAAA;AAAA,iBAGc,4BAAA,CAAA;EACd,OAAA;EACA;AAAA,GACC,4BAAA,GAA+B,MAAA"}
@@ -0,0 +1,15 @@
1
+ import { CopilotRuntime } from "../runtime.mjs";
2
+ import { Router } from "express";
3
+
4
+ //#region src/endpoints/express.d.ts
5
+ interface CopilotExpressEndpointParams {
6
+ runtime: CopilotRuntime;
7
+ basePath: string;
8
+ }
9
+ declare function createCopilotEndpointExpress({
10
+ runtime,
11
+ basePath
12
+ }: CopilotExpressEndpointParams): Router;
13
+ //#endregion
14
+ export { createCopilotEndpointExpress };
15
+ //# sourceMappingURL=express.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"express.d.mts","names":[],"sources":["../../src/endpoints/express.ts"],"mappings":";;;;UAyBU,4BAAA;EACR,OAAA,EAAS,cAAA;EACT,QAAA;AAAA;AAAA,iBAGc,4BAAA,CAAA;EACd,OAAA;EACA;AAAA,GACC,4BAAA,GAA+B,MAAA"}
@@ -0,0 +1,162 @@
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 { createFetchRequestFromExpress, sendFetchResponse } from "./express-utils.mjs";
8
+ import { logger } from "@copilotkitnext/shared";
9
+ import express from "express";
10
+ import cors from "cors";
11
+
12
+ //#region src/endpoints/express.ts
13
+ function createCopilotEndpointExpress({ runtime, basePath }) {
14
+ const router = express.Router();
15
+ const normalizedBase = normalizeBasePath(basePath);
16
+ router.use(cors({
17
+ origin: "*",
18
+ methods: [
19
+ "GET",
20
+ "HEAD",
21
+ "PUT",
22
+ "POST",
23
+ "DELETE",
24
+ "PATCH",
25
+ "OPTIONS"
26
+ ],
27
+ allowedHeaders: ["*"]
28
+ }));
29
+ router.post(joinPath(normalizedBase, "/agent/:agentId/run"), createRouteHandler(runtime, async ({ request, req }) => {
30
+ const agentId = req.params.agentId;
31
+ return handleRunAgent({
32
+ runtime,
33
+ request,
34
+ agentId
35
+ });
36
+ }));
37
+ router.post(joinPath(normalizedBase, "/agent/:agentId/connect"), createRouteHandler(runtime, async ({ request, req }) => {
38
+ const agentId = req.params.agentId;
39
+ return handleConnectAgent({
40
+ runtime,
41
+ request,
42
+ agentId
43
+ });
44
+ }));
45
+ router.post(joinPath(normalizedBase, "/agent/:agentId/stop/:threadId"), createRouteHandler(runtime, async ({ request, req }) => {
46
+ const agentId = req.params.agentId;
47
+ const threadId = req.params.threadId;
48
+ return handleStopAgent({
49
+ runtime,
50
+ request,
51
+ agentId,
52
+ threadId
53
+ });
54
+ }));
55
+ router.get(joinPath(normalizedBase, "/info"), createRouteHandler(runtime, async ({ request }) => {
56
+ return handleGetRuntimeInfo({
57
+ runtime,
58
+ request
59
+ });
60
+ }));
61
+ router.post(joinPath(normalizedBase, "/transcribe"), createRouteHandler(runtime, async ({ request }) => {
62
+ return handleTranscribe({
63
+ runtime,
64
+ request
65
+ });
66
+ }));
67
+ router.use(joinPath(normalizedBase, "*"), (req, res) => {
68
+ res.status(404).json({ error: "Not found" });
69
+ });
70
+ return router;
71
+ }
72
+ function createRouteHandler(runtime, factory) {
73
+ return async (req, res, next) => {
74
+ const path = req.originalUrl ?? req.path;
75
+ let request = createFetchRequestFromExpress(req);
76
+ try {
77
+ const maybeModifiedRequest = await callBeforeRequestMiddleware({
78
+ runtime,
79
+ request,
80
+ path
81
+ });
82
+ if (maybeModifiedRequest) request = maybeModifiedRequest;
83
+ } catch (error) {
84
+ logger.error({
85
+ err: error,
86
+ url: request.url,
87
+ path
88
+ }, "Error running before request middleware");
89
+ if (error instanceof Response) {
90
+ try {
91
+ await sendFetchResponse(res, error);
92
+ } catch (streamError) {
93
+ next(streamError);
94
+ }
95
+ return;
96
+ }
97
+ next(error);
98
+ return;
99
+ }
100
+ try {
101
+ const response = await factory({
102
+ request,
103
+ req
104
+ });
105
+ await sendFetchResponse(res, response);
106
+ callAfterRequestMiddleware({
107
+ runtime,
108
+ response,
109
+ path
110
+ }).catch((error) => {
111
+ logger.error({
112
+ err: error,
113
+ url: req.originalUrl ?? req.url,
114
+ path
115
+ }, "Error running after request middleware");
116
+ });
117
+ } catch (error) {
118
+ if (error instanceof Response) {
119
+ try {
120
+ await sendFetchResponse(res, error);
121
+ } catch (streamError) {
122
+ next(streamError);
123
+ return;
124
+ }
125
+ callAfterRequestMiddleware({
126
+ runtime,
127
+ response: error,
128
+ path
129
+ }).catch((mwError) => {
130
+ logger.error({
131
+ err: mwError,
132
+ url: req.originalUrl ?? req.url,
133
+ path
134
+ }, "Error running after request middleware");
135
+ });
136
+ return;
137
+ }
138
+ logger.error({
139
+ err: error,
140
+ url: request.url,
141
+ path
142
+ }, "Error running request handler");
143
+ next(error);
144
+ }
145
+ };
146
+ }
147
+ function normalizeBasePath(path) {
148
+ if (!path) throw new Error("basePath must be provided for Express endpoint");
149
+ if (!path.startsWith("/")) return `/${path}`;
150
+ if (path.length > 1 && path.endsWith("/")) return path.slice(0, -1);
151
+ return path;
152
+ }
153
+ function joinPath(basePath, suffix) {
154
+ if (basePath === "/") return suffix.startsWith("/") ? suffix : `/${suffix}`;
155
+ if (!suffix) return basePath;
156
+ if (suffix === "*") return `${basePath}/*`;
157
+ return `${basePath}${suffix.startsWith("/") ? suffix : `/${suffix}`}`;
158
+ }
159
+
160
+ //#endregion
161
+ export { createCopilotEndpointExpress };
162
+ //# sourceMappingURL=express.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"express.mjs","names":[],"sources":["../../src/endpoints/express.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\";\n\ninterface CopilotExpressEndpointParams {\n runtime: CopilotRuntime;\n basePath: string;\n}\n\nexport function createCopilotEndpointExpress({\n runtime,\n basePath,\n}: CopilotExpressEndpointParams): Router {\n const router = express.Router();\n const normalizedBase = normalizeBasePath(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(\n joinPath(normalizedBase, \"/agent/:agentId/run\"),\n createRouteHandler(runtime, async ({ request, req }) => {\n const agentId = req.params.agentId as string;\n return handleRunAgent({ runtime, request, agentId });\n }),\n );\n\n router.post(\n joinPath(normalizedBase, \"/agent/:agentId/connect\"),\n createRouteHandler(runtime, async ({ request, req }) => {\n const agentId = req.params.agentId as string;\n return handleConnectAgent({ runtime, request, agentId });\n }),\n );\n\n router.post(\n joinPath(normalizedBase, \"/agent/:agentId/stop/:threadId\"),\n createRouteHandler(runtime, async ({ request, req }) => {\n const agentId = req.params.agentId as string;\n const threadId = req.params.threadId as string;\n return handleStopAgent({ runtime, request, agentId, threadId });\n }),\n );\n\n router.get(\n joinPath(normalizedBase, \"/info\"),\n createRouteHandler(runtime, async ({ request }) => {\n return handleGetRuntimeInfo({ runtime, request });\n }),\n );\n\n router.post(\n joinPath(normalizedBase, \"/transcribe\"),\n createRouteHandler(runtime, async ({ request }) => {\n return handleTranscribe({ runtime, request });\n }),\n );\n\n router.use(joinPath(normalizedBase, \"*\"), (req, res) => {\n res.status(404).json({ error: \"Not found\" });\n });\n\n return router;\n}\n\ntype RouteHandlerContext = {\n request: Request;\n req: ExpressRequest;\n};\n\ntype RouteHandlerFactory = (ctx: RouteHandlerContext) => Promise<Response>;\n\nfunction createRouteHandler(\n runtime: CopilotRuntime,\n factory: RouteHandlerFactory,\n) {\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 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 try {\n const response = await factory({ request, req });\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 request handler\",\n );\n next(error);\n }\n };\n}\n\nfunction normalizeBasePath(path: string): string {\n if (!path) {\n throw new Error(\"basePath must be provided for Express endpoint\");\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\nfunction joinPath(basePath: string, suffix: string): string {\n if (basePath === \"/\") {\n return suffix.startsWith(\"/\") ? suffix : `/${suffix}`;\n }\n\n if (!suffix) {\n return basePath;\n }\n\n if (suffix === \"*\") {\n return `${basePath}/*`;\n }\n\n return `${basePath}${suffix.startsWith(\"/\") ? suffix : `/${suffix}`}`;\n}\n"],"mappings":"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"}
@@ -0,0 +1,140 @@
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
+ let _copilotkitnext_shared = require("@copilotkitnext/shared");
10
+ let hono = require("hono");
11
+ let hono_cors = require("hono/cors");
12
+
13
+ //#region src/endpoints/hono-single.ts
14
+ function createCopilotEndpointSingleRoute({ runtime, basePath, cors: corsConfig }) {
15
+ const app = new hono.Hono();
16
+ const routePath = normalizePath(basePath);
17
+ return app.basePath(routePath).use("*", (0, hono_cors.cors)({
18
+ origin: corsConfig?.origin ?? "*",
19
+ allowMethods: [
20
+ "GET",
21
+ "HEAD",
22
+ "PUT",
23
+ "POST",
24
+ "DELETE",
25
+ "PATCH",
26
+ "OPTIONS"
27
+ ],
28
+ allowHeaders: ["*"],
29
+ credentials: corsConfig?.credentials ?? false
30
+ })).use("*", async (c, next) => {
31
+ const request = c.req.raw;
32
+ const path = c.req.path;
33
+ try {
34
+ const maybeModifiedRequest = await require_middleware.callBeforeRequestMiddleware({
35
+ runtime,
36
+ request,
37
+ path
38
+ });
39
+ if (maybeModifiedRequest) c.set("modifiedRequest", maybeModifiedRequest);
40
+ } catch (error) {
41
+ _copilotkitnext_shared.logger.error({
42
+ err: error,
43
+ url: request.url,
44
+ path
45
+ }, "Error running before request middleware");
46
+ if (error instanceof Response) return error;
47
+ throw error;
48
+ }
49
+ await next();
50
+ }).use("*", async (c, next) => {
51
+ await next();
52
+ const response = c.res;
53
+ const path = c.req.path;
54
+ require_middleware.callAfterRequestMiddleware({
55
+ runtime,
56
+ response,
57
+ path
58
+ }).catch((error) => {
59
+ _copilotkitnext_shared.logger.error({
60
+ err: error,
61
+ url: c.req.url,
62
+ path
63
+ }, "Error running after request middleware");
64
+ });
65
+ }).post("/", async (c) => {
66
+ const request = c.get("modifiedRequest") || c.req.raw;
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
+ return error;
74
+ }
75
+ _copilotkitnext_shared.logger.warn({
76
+ err: error,
77
+ url: request.url
78
+ }, "Invalid single-route payload");
79
+ return c.json({
80
+ error: "invalid_request",
81
+ message: error instanceof Error ? error.message : "Invalid request payload"
82
+ }, 400);
83
+ }
84
+ try {
85
+ switch (methodCall.method) {
86
+ case "agent/run": {
87
+ const agentId = require_single_route_helpers.expectString(methodCall.params, "agentId");
88
+ return await require_handle_run.handleRunAgent({
89
+ runtime,
90
+ request: require_single_route_helpers.createJsonRequest(request, methodCall.body),
91
+ agentId
92
+ });
93
+ }
94
+ case "agent/connect": {
95
+ const agentId = require_single_route_helpers.expectString(methodCall.params, "agentId");
96
+ return await require_handle_connect.handleConnectAgent({
97
+ runtime,
98
+ request: require_single_route_helpers.createJsonRequest(request, methodCall.body),
99
+ agentId
100
+ });
101
+ }
102
+ case "agent/stop": return await require_handle_stop.handleStopAgent({
103
+ runtime,
104
+ request,
105
+ agentId: require_single_route_helpers.expectString(methodCall.params, "agentId"),
106
+ threadId: require_single_route_helpers.expectString(methodCall.params, "threadId")
107
+ });
108
+ case "info": return await require_get_runtime_info.handleGetRuntimeInfo({
109
+ runtime,
110
+ request
111
+ });
112
+ case "transcribe": return await require_handle_transcribe.handleTranscribe({
113
+ runtime,
114
+ request: require_single_route_helpers.createJsonRequest(request, methodCall.body)
115
+ });
116
+ default: return methodCall.method;
117
+ }
118
+ } catch (error) {
119
+ if (error instanceof Response) return error;
120
+ _copilotkitnext_shared.logger.error({
121
+ err: error,
122
+ url: request.url,
123
+ method: methodCall.method
124
+ }, "Error running single-route handler");
125
+ throw error;
126
+ }
127
+ }).notFound((c) => {
128
+ return c.json({ error: "Not found" }, 404);
129
+ });
130
+ }
131
+ function normalizePath(path) {
132
+ if (!path) throw new Error("basePath must be provided for single-route endpoint");
133
+ if (!path.startsWith("/")) return `/${path}`;
134
+ if (path.length > 1 && path.endsWith("/")) return path.slice(0, -1);
135
+ return path;
136
+ }
137
+
138
+ //#endregion
139
+ exports.createCopilotEndpointSingleRoute = createCopilotEndpointSingleRoute;
140
+ //# sourceMappingURL=hono-single.cjs.map