@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,110 @@
1
+ import { TranscriptionErrorCode, TranscriptionErrors } from "@copilotkitnext/shared";
2
+
3
+ //#region src/handlers/handle-transcribe.ts
4
+ /**
5
+ * HTTP status codes for transcription error codes
6
+ */
7
+ const ERROR_STATUS_CODES = {
8
+ [TranscriptionErrorCode.SERVICE_NOT_CONFIGURED]: 503,
9
+ [TranscriptionErrorCode.INVALID_AUDIO_FORMAT]: 400,
10
+ [TranscriptionErrorCode.AUDIO_TOO_LONG]: 400,
11
+ [TranscriptionErrorCode.AUDIO_TOO_SHORT]: 400,
12
+ [TranscriptionErrorCode.RATE_LIMITED]: 429,
13
+ [TranscriptionErrorCode.AUTH_FAILED]: 401,
14
+ [TranscriptionErrorCode.PROVIDER_ERROR]: 500,
15
+ [TranscriptionErrorCode.NETWORK_ERROR]: 502,
16
+ [TranscriptionErrorCode.INVALID_REQUEST]: 400
17
+ };
18
+ const VALID_AUDIO_TYPES = [
19
+ "audio/mpeg",
20
+ "audio/mp3",
21
+ "audio/mp4",
22
+ "audio/wav",
23
+ "audio/webm",
24
+ "audio/ogg",
25
+ "audio/flac",
26
+ "audio/aac"
27
+ ];
28
+ function isValidAudioType(type) {
29
+ const baseType = type.split(";")[0]?.trim() ?? "";
30
+ return VALID_AUDIO_TYPES.includes(baseType) || baseType === "" || baseType === "application/octet-stream";
31
+ }
32
+ function createErrorResponse(errorResponse) {
33
+ const status = ERROR_STATUS_CODES[errorResponse.error] ?? 500;
34
+ return new Response(JSON.stringify(errorResponse), {
35
+ status,
36
+ headers: { "Content-Type": "application/json" }
37
+ });
38
+ }
39
+ function base64ToFile(base64, mimeType, filename) {
40
+ const base64Data = base64.includes(",") ? base64.split(",")[1] ?? base64 : base64;
41
+ const binaryString = atob(base64Data);
42
+ const bytes = new Uint8Array(binaryString.length);
43
+ for (let i = 0; i < binaryString.length; i++) bytes[i] = binaryString.charCodeAt(i);
44
+ return new File([bytes], filename, { type: mimeType });
45
+ }
46
+ async function extractAudioFromFormData(request) {
47
+ const audioFile = (await request.formData()).get("audio");
48
+ if (!audioFile || !(audioFile instanceof File)) return { error: createErrorResponse(TranscriptionErrors.invalidRequest("No audio file found in form data. Please include an 'audio' field.")) };
49
+ if (!isValidAudioType(audioFile.type)) return { error: createErrorResponse(TranscriptionErrors.invalidAudioFormat(audioFile.type, VALID_AUDIO_TYPES)) };
50
+ return { file: audioFile };
51
+ }
52
+ async function extractAudioFromJson(request) {
53
+ let body;
54
+ try {
55
+ body = await request.json();
56
+ } catch {
57
+ return { error: createErrorResponse(TranscriptionErrors.invalidRequest("Request body must be valid JSON")) };
58
+ }
59
+ if (!body.audio || typeof body.audio !== "string") return { error: createErrorResponse(TranscriptionErrors.invalidRequest("Request must include 'audio' field with base64-encoded audio data")) };
60
+ if (!body.mimeType || typeof body.mimeType !== "string") return { error: createErrorResponse(TranscriptionErrors.invalidRequest("Request must include 'mimeType' field (e.g., 'audio/webm')")) };
61
+ if (!isValidAudioType(body.mimeType)) return { error: createErrorResponse(TranscriptionErrors.invalidAudioFormat(body.mimeType, VALID_AUDIO_TYPES)) };
62
+ try {
63
+ const filename = body.filename || "recording.webm";
64
+ return { file: base64ToFile(body.audio, body.mimeType, filename) };
65
+ } catch {
66
+ return { error: createErrorResponse(TranscriptionErrors.invalidRequest("Failed to decode base64 audio data")) };
67
+ }
68
+ }
69
+ /**
70
+ * Categorize provider errors into appropriate transcription error responses.
71
+ */
72
+ function categorizeProviderError(error) {
73
+ const message = error instanceof Error ? error.message : "Unknown error occurred";
74
+ const errorStr = String(error).toLowerCase();
75
+ if (errorStr.includes("rate") || errorStr.includes("429") || errorStr.includes("too many")) return TranscriptionErrors.rateLimited();
76
+ if (errorStr.includes("auth") || errorStr.includes("401") || errorStr.includes("api key") || errorStr.includes("unauthorized")) return TranscriptionErrors.authFailed();
77
+ if (errorStr.includes("too long") || errorStr.includes("duration") || errorStr.includes("length")) return TranscriptionErrors.audioTooLong();
78
+ return TranscriptionErrors.providerError(message);
79
+ }
80
+ async function handleTranscribe({ runtime, request }) {
81
+ try {
82
+ if (!runtime.transcriptionService) return createErrorResponse(TranscriptionErrors.serviceNotConfigured());
83
+ const contentType = request.headers.get("content-type") || "";
84
+ let extractResult;
85
+ if (contentType.includes("multipart/form-data")) extractResult = await extractAudioFromFormData(request);
86
+ else if (contentType.includes("application/json")) extractResult = await extractAudioFromJson(request);
87
+ else return createErrorResponse(TranscriptionErrors.invalidRequest("Request must be multipart/form-data or application/json with base64 audio"));
88
+ if ("error" in extractResult) return extractResult.error;
89
+ const audioFile = extractResult.file;
90
+ const transcription = await runtime.transcriptionService.transcribeFile({
91
+ audioFile,
92
+ mimeType: audioFile.type,
93
+ size: audioFile.size
94
+ });
95
+ return new Response(JSON.stringify({
96
+ text: transcription,
97
+ size: audioFile.size,
98
+ type: audioFile.type
99
+ }), {
100
+ status: 200,
101
+ headers: { "Content-Type": "application/json" }
102
+ });
103
+ } catch (error) {
104
+ return createErrorResponse(categorizeProviderError(error));
105
+ }
106
+ }
107
+
108
+ //#endregion
109
+ export { handleTranscribe };
110
+ //# sourceMappingURL=handle-transcribe.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handle-transcribe.mjs","names":[],"sources":["../../src/handlers/handle-transcribe.ts"],"sourcesContent":["import { CopilotRuntime } from \"../runtime\";\nimport {\n TranscriptionErrorCode,\n TranscriptionErrors,\n type TranscriptionErrorResponse,\n} from \"@copilotkitnext/shared\";\n\n/**\n * HTTP status codes for transcription error codes\n */\nconst ERROR_STATUS_CODES: Record<TranscriptionErrorCode, number> = {\n [TranscriptionErrorCode.SERVICE_NOT_CONFIGURED]: 503,\n [TranscriptionErrorCode.INVALID_AUDIO_FORMAT]: 400,\n [TranscriptionErrorCode.AUDIO_TOO_LONG]: 400,\n [TranscriptionErrorCode.AUDIO_TOO_SHORT]: 400,\n [TranscriptionErrorCode.RATE_LIMITED]: 429,\n [TranscriptionErrorCode.AUTH_FAILED]: 401,\n [TranscriptionErrorCode.PROVIDER_ERROR]: 500,\n [TranscriptionErrorCode.NETWORK_ERROR]: 502,\n [TranscriptionErrorCode.INVALID_REQUEST]: 400,\n};\n\ninterface HandleTranscribeParameters {\n runtime: CopilotRuntime;\n request: Request;\n}\n\ninterface Base64AudioInput {\n audio: string; // base64-encoded audio data\n mimeType: string;\n filename?: string;\n}\n\nconst VALID_AUDIO_TYPES = [\n \"audio/mpeg\",\n \"audio/mp3\",\n \"audio/mp4\",\n \"audio/wav\",\n \"audio/webm\",\n \"audio/ogg\",\n \"audio/flac\",\n \"audio/aac\",\n];\n\nfunction isValidAudioType(type: string): boolean {\n // Extract base MIME type (before semicolon) to handle types like \"audio/webm; codecs=opus\"\n const baseType = type.split(\";\")[0]?.trim() ?? \"\";\n return (\n VALID_AUDIO_TYPES.includes(baseType) ||\n baseType === \"\" ||\n baseType === \"application/octet-stream\"\n );\n}\n\nfunction createErrorResponse(\n errorResponse: TranscriptionErrorResponse,\n): Response {\n const status = ERROR_STATUS_CODES[errorResponse.error] ?? 500;\n return new Response(JSON.stringify(errorResponse), {\n status,\n headers: { \"Content-Type\": \"application/json\" },\n });\n}\n\nfunction base64ToFile(\n base64: string,\n mimeType: string,\n filename: string,\n): File {\n // Remove data URL prefix if present (e.g., \"data:audio/webm;base64,\")\n const base64Data = base64.includes(\",\")\n ? (base64.split(\",\")[1] ?? base64)\n : base64;\n\n // Decode base64 to binary\n const binaryString = atob(base64Data);\n const bytes = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n\n // Create File object\n return new File([bytes], filename, { type: mimeType });\n}\n\nasync function extractAudioFromFormData(\n request: Request,\n): Promise<{ file: File } | { error: Response }> {\n const formData = await request.formData();\n const audioFile = formData.get(\"audio\") as File | null;\n\n if (!audioFile || !(audioFile instanceof File)) {\n const err = TranscriptionErrors.invalidRequest(\n \"No audio file found in form data. Please include an 'audio' field.\",\n );\n return { error: createErrorResponse(err) };\n }\n\n if (!isValidAudioType(audioFile.type)) {\n const err = TranscriptionErrors.invalidAudioFormat(\n audioFile.type,\n VALID_AUDIO_TYPES,\n );\n return { error: createErrorResponse(err) };\n }\n\n return { file: audioFile };\n}\n\nasync function extractAudioFromJson(\n request: Request,\n): Promise<{ file: File } | { error: Response }> {\n let body: Base64AudioInput;\n\n try {\n body = await request.json();\n } catch {\n const err = TranscriptionErrors.invalidRequest(\n \"Request body must be valid JSON\",\n );\n return { error: createErrorResponse(err) };\n }\n\n if (!body.audio || typeof body.audio !== \"string\") {\n const err = TranscriptionErrors.invalidRequest(\n \"Request must include 'audio' field with base64-encoded audio data\",\n );\n return { error: createErrorResponse(err) };\n }\n\n if (!body.mimeType || typeof body.mimeType !== \"string\") {\n const err = TranscriptionErrors.invalidRequest(\n \"Request must include 'mimeType' field (e.g., 'audio/webm')\",\n );\n return { error: createErrorResponse(err) };\n }\n\n if (!isValidAudioType(body.mimeType)) {\n const err = TranscriptionErrors.invalidAudioFormat(\n body.mimeType,\n VALID_AUDIO_TYPES,\n );\n return { error: createErrorResponse(err) };\n }\n\n try {\n const filename = body.filename || \"recording.webm\";\n const file = base64ToFile(body.audio, body.mimeType, filename);\n return { file };\n } catch {\n const err = TranscriptionErrors.invalidRequest(\n \"Failed to decode base64 audio data\",\n );\n return { error: createErrorResponse(err) };\n }\n}\n\n/**\n * Categorize provider errors into appropriate transcription error responses.\n */\nfunction categorizeProviderError(error: unknown): TranscriptionErrorResponse {\n const message =\n error instanceof Error ? error.message : \"Unknown error occurred\";\n const errorStr = String(error).toLowerCase();\n\n // Check for rate limiting\n if (\n errorStr.includes(\"rate\") ||\n errorStr.includes(\"429\") ||\n errorStr.includes(\"too many\")\n ) {\n return TranscriptionErrors.rateLimited();\n }\n\n // Check for auth errors\n if (\n errorStr.includes(\"auth\") ||\n errorStr.includes(\"401\") ||\n errorStr.includes(\"api key\") ||\n errorStr.includes(\"unauthorized\")\n ) {\n return TranscriptionErrors.authFailed();\n }\n\n // Check for audio too long\n if (\n errorStr.includes(\"too long\") ||\n errorStr.includes(\"duration\") ||\n errorStr.includes(\"length\")\n ) {\n return TranscriptionErrors.audioTooLong();\n }\n\n // Default to provider error\n return TranscriptionErrors.providerError(message);\n}\n\nexport async function handleTranscribe({\n runtime,\n request,\n}: HandleTranscribeParameters) {\n try {\n // Check if transcription service is configured\n if (!runtime.transcriptionService) {\n const err = TranscriptionErrors.serviceNotConfigured();\n return createErrorResponse(err);\n }\n\n // Determine input type based on content-type header\n const contentType = request.headers.get(\"content-type\") || \"\";\n\n let extractResult: { file: File } | { error: Response };\n\n if (contentType.includes(\"multipart/form-data\")) {\n // Handle multipart/form-data (REST mode)\n extractResult = await extractAudioFromFormData(request);\n } else if (contentType.includes(\"application/json\")) {\n // Handle JSON with base64 audio (single-endpoint mode)\n extractResult = await extractAudioFromJson(request);\n } else {\n const err = TranscriptionErrors.invalidRequest(\n \"Request must be multipart/form-data or application/json with base64 audio\",\n );\n return createErrorResponse(err);\n }\n\n // Check for extraction errors\n if (\"error\" in extractResult) {\n return extractResult.error;\n }\n\n const audioFile = extractResult.file;\n\n // Transcribe the audio file\n const transcription = await runtime.transcriptionService.transcribeFile({\n audioFile,\n mimeType: audioFile.type,\n size: audioFile.size,\n });\n\n return new Response(\n JSON.stringify({\n text: transcription,\n size: audioFile.size,\n type: audioFile.type,\n }),\n {\n status: 200,\n headers: { \"Content-Type\": \"application/json\" },\n },\n );\n } catch (error) {\n // Categorize the error for better client-side handling\n return createErrorResponse(categorizeProviderError(error));\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+
2
+ //#region src/handlers/header-utils.ts
3
+ /**
4
+ * Determines if a header should be forwarded based on the allowlist.
5
+ * Forwards: authorization header and all x-* custom headers.
6
+ */
7
+ function shouldForwardHeader(headerName) {
8
+ const lower = headerName.toLowerCase();
9
+ return lower === "authorization" || lower.startsWith("x-");
10
+ }
11
+ /**
12
+ * Extracts headers that should be forwarded from a Request object.
13
+ * Forwards only authorization and x-* headers.
14
+ */
15
+ function extractForwardableHeaders(request) {
16
+ const forwardableHeaders = {};
17
+ request.headers.forEach((value, key) => {
18
+ if (shouldForwardHeader(key)) forwardableHeaders[key] = value;
19
+ });
20
+ return forwardableHeaders;
21
+ }
22
+
23
+ //#endregion
24
+ exports.extractForwardableHeaders = extractForwardableHeaders;
25
+ //# sourceMappingURL=header-utils.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"header-utils.cjs","names":[],"sources":["../../src/handlers/header-utils.ts"],"sourcesContent":["/**\n * Determines if a header should be forwarded based on the allowlist.\n * Forwards: authorization header and all x-* custom headers.\n */\nexport function shouldForwardHeader(headerName: string): boolean {\n const lower = headerName.toLowerCase();\n return lower === \"authorization\" || lower.startsWith(\"x-\");\n}\n\n/**\n * Extracts headers that should be forwarded from a Request object.\n * Forwards only authorization and x-* headers.\n */\nexport function extractForwardableHeaders(\n request: Request,\n): Record<string, string> {\n const forwardableHeaders: Record<string, string> = {};\n request.headers.forEach((value, key) => {\n if (shouldForwardHeader(key)) {\n forwardableHeaders[key] = value;\n }\n });\n return forwardableHeaders;\n}\n"],"mappings":";;;;;;AAIA,SAAgB,oBAAoB,YAA6B;CAC/D,MAAM,QAAQ,WAAW,aAAa;AACtC,QAAO,UAAU,mBAAmB,MAAM,WAAW,KAAK;;;;;;AAO5D,SAAgB,0BACd,SACwB;CACxB,MAAM,qBAA6C,EAAE;AACrD,SAAQ,QAAQ,SAAS,OAAO,QAAQ;AACtC,MAAI,oBAAoB,IAAI,CAC1B,oBAAmB,OAAO;GAE5B;AACF,QAAO"}
@@ -0,0 +1,24 @@
1
+ //#region src/handlers/header-utils.ts
2
+ /**
3
+ * Determines if a header should be forwarded based on the allowlist.
4
+ * Forwards: authorization header and all x-* custom headers.
5
+ */
6
+ function shouldForwardHeader(headerName) {
7
+ const lower = headerName.toLowerCase();
8
+ return lower === "authorization" || lower.startsWith("x-");
9
+ }
10
+ /**
11
+ * Extracts headers that should be forwarded from a Request object.
12
+ * Forwards only authorization and x-* headers.
13
+ */
14
+ function extractForwardableHeaders(request) {
15
+ const forwardableHeaders = {};
16
+ request.headers.forEach((value, key) => {
17
+ if (shouldForwardHeader(key)) forwardableHeaders[key] = value;
18
+ });
19
+ return forwardableHeaders;
20
+ }
21
+
22
+ //#endregion
23
+ export { extractForwardableHeaders };
24
+ //# sourceMappingURL=header-utils.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"header-utils.mjs","names":[],"sources":["../../src/handlers/header-utils.ts"],"sourcesContent":["/**\n * Determines if a header should be forwarded based on the allowlist.\n * Forwards: authorization header and all x-* custom headers.\n */\nexport function shouldForwardHeader(headerName: string): boolean {\n const lower = headerName.toLowerCase();\n return lower === \"authorization\" || lower.startsWith(\"x-\");\n}\n\n/**\n * Extracts headers that should be forwarded from a Request object.\n * Forwards only authorization and x-* headers.\n */\nexport function extractForwardableHeaders(\n request: Request,\n): Record<string, string> {\n const forwardableHeaders: Record<string, string> = {};\n request.headers.forEach((value, key) => {\n if (shouldForwardHeader(key)) {\n forwardableHeaders[key] = value;\n }\n });\n return forwardableHeaders;\n}\n"],"mappings":";;;;;AAIA,SAAgB,oBAAoB,YAA6B;CAC/D,MAAM,QAAQ,WAAW,aAAa;AACtC,QAAO,UAAU,mBAAmB,MAAM,WAAW,KAAK;;;;;;AAO5D,SAAgB,0BACd,SACwB;CACxB,MAAM,qBAA6C,EAAE;AACrD,SAAQ,QAAQ,SAAS,OAAO,QAAQ;AACtC,MAAI,oBAAoB,IAAI,CAC1B,oBAAmB,OAAO;GAE5B;AACF,QAAO"}
package/dist/index.cjs ADDED
@@ -0,0 +1,25 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
+ const require_runtime = require('./_virtual/_rolldown/runtime.cjs');
3
+ const require_agent_runner = require('./runner/agent-runner.cjs');
4
+ const require_in_memory = require('./runner/in-memory.cjs');
5
+ const require_runtime$1 = require('./runtime.cjs');
6
+ const require_hono = require('./endpoints/hono.cjs');
7
+ const require_hono_single = require('./endpoints/hono-single.cjs');
8
+ require('./endpoints/index.cjs');
9
+ require('./runner/index.cjs');
10
+ const require_transcription_service = require('./transcription-service/transcription-service.cjs');
11
+ let _copilotkitnext_shared = require("@copilotkitnext/shared");
12
+
13
+ exports.AgentRunner = require_agent_runner.AgentRunner;
14
+ exports.CopilotRuntime = require_runtime$1.CopilotRuntime;
15
+ exports.InMemoryAgentRunner = require_in_memory.InMemoryAgentRunner;
16
+ exports.TranscriptionService = require_transcription_service.TranscriptionService;
17
+ exports.VERSION = require_runtime$1.VERSION;
18
+ exports.createCopilotEndpoint = require_hono.createCopilotEndpoint;
19
+ exports.createCopilotEndpointSingleRoute = require_hono_single.createCopilotEndpointSingleRoute;
20
+ Object.defineProperty(exports, 'finalizeRunEvents', {
21
+ enumerable: true,
22
+ get: function () {
23
+ return _copilotkitnext_shared.finalizeRunEvents;
24
+ }
25
+ });
@@ -0,0 +1,8 @@
1
+ import { TranscribeFileOptions, TranscriptionService } from "./transcription-service/transcription-service.cjs";
2
+ import { AgentRunner, AgentRunnerConnectRequest, AgentRunnerIsRunningRequest, AgentRunnerRunRequest, AgentRunnerStopRequest } from "./runner/agent-runner.cjs";
3
+ import { CopilotRuntime, CopilotRuntimeOptions, VERSION } from "./runtime.cjs";
4
+ import { CopilotEndpointCorsConfig, createCopilotEndpoint } from "./endpoints/hono.cjs";
5
+ import { createCopilotEndpointSingleRoute } from "./endpoints/hono-single.cjs";
6
+ import { InMemoryAgentRunner } from "./runner/in-memory.cjs";
7
+ import { finalizeRunEvents } from "./runner/index.cjs";
8
+ export { AgentRunner, AgentRunnerConnectRequest, AgentRunnerIsRunningRequest, AgentRunnerRunRequest, AgentRunnerStopRequest, CopilotEndpointCorsConfig, CopilotRuntime, CopilotRuntimeOptions, InMemoryAgentRunner, TranscribeFileOptions, TranscriptionService, VERSION, createCopilotEndpoint, createCopilotEndpointSingleRoute, finalizeRunEvents };
package/dist/index.d.mts CHANGED
@@ -1,139 +1,9 @@
1
- import { C as CopilotRuntime, A as AgentRunner, a as AgentRunnerRunRequest, b as AgentRunnerConnectRequest, c as AgentRunnerIsRunningRequest, d as AgentRunnerStopRequest } from './runtime-BsuyYT2l.mjs';
2
- export { e as CopilotRuntimeOptions, T as TranscribeFileOptions, f as TranscriptionService, V as VERSION } from './runtime-BsuyYT2l.mjs';
3
- import * as hono_hono_base from 'hono/hono-base';
4
- import * as hono_utils_http_status from 'hono/utils/http-status';
5
- import { Observable } from 'rxjs';
6
- import { BaseEvent } from '@ag-ui/client';
7
- export { finalizeRunEvents } from '@copilotkitnext/shared';
8
-
9
- /**
10
- * CORS configuration for CopilotKit endpoints.
11
- * When using credentials (e.g., HTTP-only cookies), you must specify an explicit origin.
12
- */
13
- interface CopilotEndpointCorsConfig {
14
- /**
15
- * Allowed origin(s) for CORS. Can be:
16
- * - A string: exact origin (e.g., "https://myapp.com")
17
- * - An array: list of allowed origins
18
- * - A function: dynamic origin resolution
19
- *
20
- * Note: When credentials is true, origin cannot be "*"
21
- */
22
- origin: string | string[] | ((origin: string, c: any) => string | undefined | null);
23
- /**
24
- * Whether to allow credentials (cookies, HTTP authentication).
25
- * When true, origin must be explicitly specified (not "*").
26
- */
27
- credentials?: boolean;
28
- }
29
- interface CopilotEndpointParams {
30
- runtime: CopilotRuntime;
31
- basePath: string;
32
- /**
33
- * Optional CORS configuration. When not provided, defaults to allowing all origins without credentials.
34
- * To support HTTP-only cookies, provide cors config with credentials: true and explicit origin.
35
- */
36
- cors?: CopilotEndpointCorsConfig;
37
- }
38
- type CopilotEndpointContext$1 = {
39
- Variables: {
40
- modifiedRequest?: Request;
41
- };
42
- };
43
- declare function createCopilotEndpoint({ runtime, basePath, cors: corsConfig, }: CopilotEndpointParams): hono_hono_base.HonoBase<CopilotEndpointContext$1, {
44
- [x: `${string}/agent/:agentId/run`]: {
45
- $post: {
46
- input: {
47
- param: {
48
- agentId: string;
49
- };
50
- };
51
- output: {};
52
- outputFormat: string;
53
- status: hono_utils_http_status.StatusCode;
54
- };
55
- };
56
- } & {
57
- [x: `${string}/agent/:agentId/connect`]: {
58
- $post: {
59
- input: {
60
- param: {
61
- agentId: string;
62
- };
63
- };
64
- output: {};
65
- outputFormat: string;
66
- status: hono_utils_http_status.StatusCode;
67
- };
68
- };
69
- } & {
70
- [x: `${string}/agent/:agentId/stop/:threadId`]: {
71
- $post: {
72
- input: {
73
- param: {
74
- agentId: string;
75
- } & {
76
- threadId: string;
77
- };
78
- };
79
- output: {};
80
- outputFormat: string;
81
- status: hono_utils_http_status.StatusCode;
82
- };
83
- };
84
- } & {
85
- [x: `${string}/info`]: {
86
- $get: {
87
- input: {};
88
- output: {};
89
- outputFormat: string;
90
- status: hono_utils_http_status.StatusCode;
91
- };
92
- };
93
- } & {
94
- [x: `${string}/transcribe`]: {
95
- $post: {
96
- input: {};
97
- output: {};
98
- outputFormat: string;
99
- status: hono_utils_http_status.StatusCode;
100
- };
101
- };
102
- }, string, `${string}/transcribe`>;
103
-
104
- interface CopilotSingleEndpointParams {
105
- runtime: CopilotRuntime;
106
- /**
107
- * Absolute path at which to mount the single-route endpoint (e.g. "/api/copilotkit").
108
- */
109
- basePath: string;
110
- /**
111
- * Optional CORS configuration. When not provided, defaults to allowing all origins without credentials.
112
- * To support HTTP-only cookies, provide cors config with credentials: true and explicit origin.
113
- */
114
- cors?: CopilotEndpointCorsConfig;
115
- }
116
- type CopilotEndpointContext = {
117
- Variables: {
118
- modifiedRequest?: Request;
119
- };
120
- };
121
- declare function createCopilotEndpointSingleRoute({ runtime, basePath, cors: corsConfig, }: CopilotSingleEndpointParams): hono_hono_base.HonoBase<CopilotEndpointContext, {
122
- [x: string]: {
123
- $post: {
124
- input: {};
125
- output: {};
126
- outputFormat: string;
127
- status: hono_utils_http_status.StatusCode;
128
- };
129
- };
130
- }, string, string>;
131
-
132
- declare class InMemoryAgentRunner extends AgentRunner {
133
- run(request: AgentRunnerRunRequest): Observable<BaseEvent>;
134
- connect(request: AgentRunnerConnectRequest): Observable<BaseEvent>;
135
- isRunning(request: AgentRunnerIsRunningRequest): Promise<boolean>;
136
- stop(request: AgentRunnerStopRequest): Promise<boolean | undefined>;
137
- }
138
-
139
- export { AgentRunner, AgentRunnerConnectRequest, AgentRunnerIsRunningRequest, AgentRunnerRunRequest, AgentRunnerStopRequest, type CopilotEndpointCorsConfig, CopilotRuntime, InMemoryAgentRunner, createCopilotEndpoint, createCopilotEndpointSingleRoute };
1
+ import { TranscribeFileOptions, TranscriptionService } from "./transcription-service/transcription-service.mjs";
2
+ import { AgentRunner, AgentRunnerConnectRequest, AgentRunnerIsRunningRequest, AgentRunnerRunRequest, AgentRunnerStopRequest } from "./runner/agent-runner.mjs";
3
+ import { CopilotRuntime, CopilotRuntimeOptions, VERSION } from "./runtime.mjs";
4
+ import { CopilotEndpointCorsConfig, createCopilotEndpoint } from "./endpoints/hono.mjs";
5
+ import { createCopilotEndpointSingleRoute } from "./endpoints/hono-single.mjs";
6
+ import "./endpoints/index.mjs";
7
+ import { InMemoryAgentRunner } from "./runner/in-memory.mjs";
8
+ import { finalizeRunEvents } from "./runner/index.mjs";
9
+ export { AgentRunner, AgentRunnerConnectRequest, AgentRunnerIsRunningRequest, AgentRunnerRunRequest, AgentRunnerStopRequest, CopilotEndpointCorsConfig, CopilotRuntime, CopilotRuntimeOptions, InMemoryAgentRunner, TranscribeFileOptions, TranscriptionService, VERSION, createCopilotEndpoint, createCopilotEndpointSingleRoute, finalizeRunEvents };