@copilotkit/runtime 1.57.3 → 1.58.0-canary.thread-id-propagation
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/observability.d.cts +1 -1
- package/dist/lib/observability.d.cts.map +1 -1
- package/dist/lib/observability.d.mts +1 -1
- package/dist/lib/observability.d.mts.map +1 -1
- package/dist/lib/runtime/copilot-runtime.cjs +2 -0
- package/dist/lib/runtime/copilot-runtime.cjs.map +1 -1
- package/dist/lib/runtime/copilot-runtime.d.cts.map +1 -1
- package/dist/lib/runtime/copilot-runtime.d.mts.map +1 -1
- package/dist/lib/runtime/copilot-runtime.mjs +2 -0
- package/dist/lib/runtime/copilot-runtime.mjs.map +1 -1
- package/dist/package.cjs +5 -8
- package/dist/package.mjs +5 -8
- package/dist/v2/runtime/core/runtime.cjs +4 -1
- package/dist/v2/runtime/core/runtime.cjs.map +1 -1
- package/dist/v2/runtime/core/runtime.d.cts.map +1 -1
- package/dist/v2/runtime/core/runtime.d.mts.map +1 -1
- package/dist/v2/runtime/core/runtime.mjs +4 -1
- package/dist/v2/runtime/core/runtime.mjs.map +1 -1
- package/dist/v2/runtime/handlers/get-runtime-info.cjs +1 -1
- package/dist/v2/runtime/handlers/get-runtime-info.mjs +1 -1
- package/dist/v2/runtime/handlers/handle-connect.cjs +1 -1
- package/dist/v2/runtime/handlers/handle-connect.mjs +1 -1
- package/dist/v2/runtime/handlers/handle-run.cjs +1 -1
- package/dist/v2/runtime/handlers/handle-run.mjs +1 -1
- package/dist/v2/runtime/handlers/shared/agent-utils.cjs +1 -1
- package/dist/v2/runtime/handlers/shared/agent-utils.cjs.map +1 -1
- package/dist/v2/runtime/handlers/shared/agent-utils.mjs +1 -1
- package/dist/v2/runtime/handlers/shared/agent-utils.mjs.map +1 -1
- package/dist/v2/runtime/telemetry/telemetry-client.cjs +22 -6
- package/dist/v2/runtime/telemetry/telemetry-client.cjs.map +1 -1
- package/dist/v2/runtime/telemetry/telemetry-client.mjs +27 -11
- package/dist/v2/runtime/telemetry/telemetry-client.mjs.map +1 -1
- package/package.json +9 -19
- package/skills/runtime/SKILL.md +98 -0
- package/skills/runtime/references/agent-runners-custom.md +161 -0
- package/skills/runtime/references/agent-runners-in-memory.md +64 -0
- package/skills/runtime/references/agent-runners-sqlite.md +90 -0
- package/skills/runtime/references/agent-runners.md +304 -0
- package/skills/runtime/references/built-in-agent-factory-modes.md +232 -0
- package/skills/runtime/references/built-in-agent-helper-utilities.md +123 -0
- package/skills/runtime/references/built-in-agent-model-identifiers.md +59 -0
- package/skills/runtime/references/built-in-agent.md +523 -0
- package/skills/runtime/references/intelligence-mode.md +336 -0
- package/skills/runtime/references/middleware.md +376 -0
- package/skills/runtime/references/server-side-tools.md +414 -0
- package/skills/runtime/references/setup-endpoint.md +503 -0
- package/skills/runtime/references/transcription.md +287 -0
- package/skills/runtime/references/wiring-a2a.md +40 -0
- package/skills/runtime/references/wiring-adk.md +45 -0
- package/skills/runtime/references/wiring-ag2.md +41 -0
- package/skills/runtime/references/wiring-agno.md +39 -0
- package/skills/runtime/references/wiring-aws-strands.md +59 -0
- package/skills/runtime/references/wiring-crewai-crews.md +51 -0
- package/skills/runtime/references/wiring-crewai-flows.md +45 -0
- package/skills/runtime/references/wiring-external-agents.md +348 -0
- package/skills/runtime/references/wiring-langgraph.md +50 -0
- package/skills/runtime/references/wiring-llamaindex.md +39 -0
- package/skills/runtime/references/wiring-mastra.md +70 -0
- package/skills/runtime/references/wiring-mcp-apps-middleware.md +68 -0
- package/skills/runtime/references/wiring-ms-agent-framework.md +41 -0
- package/skills/runtime/references/wiring-pydantic-ai.md +45 -0
- package/CHANGELOG.md +0 -3624
- package/__snapshots__/schema/schema.graphql +0 -371
- package/dist/v2/runtime/telemetry/scarf-client.cjs +0 -32
- package/dist/v2/runtime/telemetry/scarf-client.cjs.map +0 -1
- package/dist/v2/runtime/telemetry/scarf-client.mjs +0 -32
- package/dist/v2/runtime/telemetry/scarf-client.mjs.map +0 -1
- package/scripts/generate-gql-schema.ts +0 -16
- package/src/agent/__tests__/agent-test-helpers.ts +0 -476
- package/src/agent/__tests__/agent.test.ts +0 -593
- package/src/agent/__tests__/ai-sdk-v6-compat.test.ts +0 -116
- package/src/agent/__tests__/basic-agent.test.ts +0 -1698
- package/src/agent/__tests__/capabilities.test.ts +0 -81
- package/src/agent/__tests__/config-tools-execution.test.ts +0 -516
- package/src/agent/__tests__/converter-aisdk.test.ts +0 -692
- package/src/agent/__tests__/converter-custom.test.ts +0 -319
- package/src/agent/__tests__/converter-tanstack-input.test.ts +0 -211
- package/src/agent/__tests__/converter-tanstack.test.ts +0 -594
- package/src/agent/__tests__/mcp-clients.test.ts +0 -246
- package/src/agent/__tests__/mcp-servers-integration.test.ts +0 -373
- package/src/agent/__tests__/multimodal-tanstack.test.ts +0 -284
- package/src/agent/__tests__/multimodal.test.ts +0 -176
- package/src/agent/__tests__/property-overrides.test.ts +0 -598
- package/src/agent/__tests__/provider-id-collision.test.ts +0 -195
- package/src/agent/__tests__/standard-schema-tools.test.ts +0 -313
- package/src/agent/__tests__/standard-schema-types.test.ts +0 -158
- package/src/agent/__tests__/state-tools.test.ts +0 -436
- package/src/agent/__tests__/test-helpers.ts +0 -197
- package/src/agent/__tests__/utils.test.ts +0 -536
- package/src/agent/__tests__/zod-regression.test.ts +0 -350
- package/src/agent/converters/aisdk.ts +0 -326
- package/src/agent/converters/index.ts +0 -7
- package/src/agent/converters/tanstack.ts +0 -451
- package/src/agent/index.ts +0 -1743
- package/src/agents/langgraph/__tests__/event-source.test.ts +0 -256
- package/src/agents/langgraph/event-source.ts +0 -365
- package/src/agents/langgraph/events.ts +0 -394
- package/src/graphql/inputs/action.input.ts +0 -16
- package/src/graphql/inputs/agent-session.input.ts +0 -13
- package/src/graphql/inputs/agent-state.input.ts +0 -13
- package/src/graphql/inputs/cloud-guardrails.input.ts +0 -16
- package/src/graphql/inputs/cloud.input.ts +0 -8
- package/src/graphql/inputs/context-property.input.ts +0 -10
- package/src/graphql/inputs/copilot-context.input.ts +0 -10
- package/src/graphql/inputs/custom-property.input.ts +0 -15
- package/src/graphql/inputs/extensions.input.ts +0 -21
- package/src/graphql/inputs/forwarded-parameters.input.ts +0 -22
- package/src/graphql/inputs/frontend.input.ts +0 -14
- package/src/graphql/inputs/generate-copilot-response.input.ts +0 -59
- package/src/graphql/inputs/load-agent-state.input.ts +0 -10
- package/src/graphql/inputs/message.input.ts +0 -110
- package/src/graphql/inputs/meta-event.input.ts +0 -18
- package/src/graphql/message-conversion/agui-to-gql.test.ts +0 -1384
- package/src/graphql/message-conversion/agui-to-gql.ts +0 -384
- package/src/graphql/message-conversion/gql-to-agui.test.ts +0 -1653
- package/src/graphql/message-conversion/gql-to-agui.ts +0 -297
- package/src/graphql/message-conversion/index.ts +0 -2
- package/src/graphql/message-conversion/roundtrip-conversion.test.ts +0 -561
- package/src/graphql/resolvers/__tests__/resolve-message-id.test.ts +0 -25
- package/src/graphql/resolvers/copilot.resolver.ts +0 -785
- package/src/graphql/resolvers/resolve-message-id.ts +0 -14
- package/src/graphql/resolvers/state.resolver.ts +0 -30
- package/src/graphql/types/agents-response.type.ts +0 -19
- package/src/graphql/types/base/index.ts +0 -10
- package/src/graphql/types/converted/index.ts +0 -183
- package/src/graphql/types/copilot-response.type.ts +0 -141
- package/src/graphql/types/enums.ts +0 -38
- package/src/graphql/types/extensions-response.type.ts +0 -23
- package/src/graphql/types/guardrails-result.type.ts +0 -20
- package/src/graphql/types/load-agent-state-response.type.ts +0 -17
- package/src/graphql/types/message-status.type.ts +0 -48
- package/src/graphql/types/meta-events.type.ts +0 -78
- package/src/graphql/types/response-status.type.ts +0 -77
- package/src/index.ts +0 -3
- package/src/langgraph.ts +0 -1
- package/src/lib/__tests__/telemetry-disclosure.test.ts +0 -55
- package/src/lib/cloud/index.ts +0 -4
- package/src/lib/error-messages.ts +0 -211
- package/src/lib/index.ts +0 -52
- package/src/lib/integrations/index.ts +0 -6
- package/src/lib/integrations/nest/index.ts +0 -21
- package/src/lib/integrations/nextjs/app-router.ts +0 -47
- package/src/lib/integrations/nextjs/pages-router.ts +0 -45
- package/src/lib/integrations/node-express/index.ts +0 -21
- package/src/lib/integrations/node-http/__tests__/request-duck-type.test.ts +0 -66
- package/src/lib/integrations/node-http/index.ts +0 -187
- package/src/lib/integrations/node-http/request-handler.ts +0 -128
- package/src/lib/integrations/shared.ts +0 -112
- package/src/lib/logger.ts +0 -31
- package/src/lib/observability.ts +0 -167
- package/src/lib/runtime/__tests__/copilot-runtime-error.test.ts +0 -183
- package/src/lib/runtime/__tests__/handle-service-adapter.test.ts +0 -108
- package/src/lib/runtime/__tests__/mcp-tools-utils.test.ts +0 -499
- package/src/lib/runtime/__tests__/on-after-request.test.ts +0 -122
- package/src/lib/runtime/__tests__/retry-utils.test.ts +0 -137
- package/src/lib/runtime/__tests__/v1-agent-factory.test.ts +0 -109
- package/src/lib/runtime/agent-integrations/langgraph/__tests__/dispatch-event-filtering.test.ts +0 -345
- package/src/lib/runtime/agent-integrations/langgraph/__tests__/run-message-filtering.test.ts +0 -156
- package/src/lib/runtime/agent-integrations/langgraph/agent.ts +0 -263
- package/src/lib/runtime/agent-integrations/langgraph/consts.ts +0 -37
- package/src/lib/runtime/agent-integrations/langgraph/index.ts +0 -2
- package/src/lib/runtime/copilot-runtime.ts +0 -863
- package/src/lib/runtime/mcp-tools-utils.ts +0 -313
- package/src/lib/runtime/retry-utils.ts +0 -141
- package/src/lib/runtime/telemetry-agent-runner.ts +0 -151
- package/src/lib/runtime/types.ts +0 -48
- package/src/lib/runtime/utils.ts +0 -93
- package/src/lib/streaming.ts +0 -220
- package/src/lib/telemetry-client.ts +0 -66
- package/src/lib/telemetry-disclosure.ts +0 -53
- package/src/service-adapters/anthropic/anthropic-adapter.ts +0 -532
- package/src/service-adapters/anthropic/utils.ts +0 -219
- package/src/service-adapters/bedrock/bedrock-adapter.ts +0 -73
- package/src/service-adapters/conversion.test.ts +0 -56
- package/src/service-adapters/conversion.ts +0 -69
- package/src/service-adapters/empty/empty-adapter.ts +0 -38
- package/src/service-adapters/events.ts +0 -337
- package/src/service-adapters/experimental/ollama/ollama-adapter.ts +0 -84
- package/src/service-adapters/google/google-genai-adapter.test.ts +0 -151
- package/src/service-adapters/google/google-genai-adapter.ts +0 -95
- package/src/service-adapters/groq/groq-adapter.ts +0 -229
- package/src/service-adapters/index.ts +0 -18
- package/src/service-adapters/langchain/langchain-adapter.ts +0 -113
- package/src/service-adapters/langchain/langserve.ts +0 -88
- package/src/service-adapters/langchain/types.ts +0 -20
- package/src/service-adapters/langchain/utils.ts +0 -330
- package/src/service-adapters/openai/__tests__/openai-v5-compat.test.ts +0 -177
- package/src/service-adapters/openai/openai-adapter.ts +0 -324
- package/src/service-adapters/openai/openai-assistant-adapter.ts +0 -385
- package/src/service-adapters/openai/utils.ts +0 -305
- package/src/service-adapters/service-adapter.ts +0 -50
- package/src/service-adapters/shared/error-utils.ts +0 -64
- package/src/service-adapters/shared/index.ts +0 -2
- package/src/service-adapters/shared/sdk-client-utils.ts +0 -19
- package/src/service-adapters/unify/unify-adapter.ts +0 -165
- package/src/utils/failed-response-status-reasons.ts +0 -70
- package/src/utils/index.ts +0 -1
- package/src/v2/express.ts +0 -1
- package/src/v2/hono.ts +0 -1
- package/src/v2/index.ts +0 -5
- package/src/v2/node.ts +0 -1
- package/src/v2/runtime/__tests__/agents-factory.test.ts +0 -136
- package/src/v2/runtime/__tests__/backward-compat.test.ts +0 -261
- package/src/v2/runtime/__tests__/code-review-fixes.test.ts +0 -500
- package/src/v2/runtime/__tests__/cors-credentials.test.ts +0 -320
- package/src/v2/runtime/__tests__/debug-sse-response.test.ts +0 -302
- package/src/v2/runtime/__tests__/express-adapter.test.ts +0 -188
- package/src/v2/runtime/__tests__/express-body-order.test.ts +0 -76
- package/src/v2/runtime/__tests__/express-fetch-bridge.test.ts +0 -344
- package/src/v2/runtime/__tests__/express-single-sse.test.ts +0 -122
- package/src/v2/runtime/__tests__/express-single-telemetry.integration.test.ts +0 -65
- package/src/v2/runtime/__tests__/express-telemetry.integration.test.ts +0 -101
- package/src/v2/runtime/__tests__/fetch-cors.test.ts +0 -205
- package/src/v2/runtime/__tests__/fetch-handler-validation.test.ts +0 -440
- package/src/v2/runtime/__tests__/fetch-handler.test.ts +0 -456
- package/src/v2/runtime/__tests__/fetch-router.test.ts +0 -276
- package/src/v2/runtime/__tests__/get-runtime-info.test.ts +0 -335
- package/src/v2/runtime/__tests__/handle-connect.test.ts +0 -585
- package/src/v2/runtime/__tests__/handle-run.test.ts +0 -1388
- package/src/v2/runtime/__tests__/handle-threads.test.ts +0 -930
- package/src/v2/runtime/__tests__/handle-transcribe.test.ts +0 -301
- package/src/v2/runtime/__tests__/header-utils.test.ts +0 -88
- package/src/v2/runtime/__tests__/hono-adapter.test.ts +0 -150
- package/src/v2/runtime/__tests__/hono-single-telemetry.integration.test.ts +0 -46
- package/src/v2/runtime/__tests__/hono-telemetry.integration.test.ts +0 -99
- package/src/v2/runtime/__tests__/hooks-edge-cases.test.ts +0 -457
- package/src/v2/runtime/__tests__/hooks.test.ts +0 -557
- package/src/v2/runtime/__tests__/in-process-agent-runner-messages.test.ts +0 -230
- package/src/v2/runtime/__tests__/in-process-agent-runner.test.ts +0 -1030
- package/src/v2/runtime/__tests__/integration/bun/bun-servers.integration.test.ts +0 -27
- package/src/v2/runtime/__tests__/integration/bun/elysia-multi.ts +0 -32
- package/src/v2/runtime/__tests__/integration/bun/elysia-single.ts +0 -33
- package/src/v2/runtime/__tests__/integration/bun/hono-bun-multi.ts +0 -25
- package/src/v2/runtime/__tests__/integration/bun/hono-bun-single.ts +0 -32
- package/src/v2/runtime/__tests__/integration/helpers/create-test-runtime.ts +0 -15
- package/src/v2/runtime/__tests__/integration/helpers/sse-reader.ts +0 -45
- package/src/v2/runtime/__tests__/integration/helpers/test-agent.ts +0 -58
- package/src/v2/runtime/__tests__/integration/node-servers.integration.test.ts +0 -58
- package/src/v2/runtime/__tests__/integration/servers/express-multi.ts +0 -35
- package/src/v2/runtime/__tests__/integration/servers/express-single.ts +0 -36
- package/src/v2/runtime/__tests__/integration/servers/fetch-direct.ts +0 -39
- package/src/v2/runtime/__tests__/integration/servers/hono-multi.ts +0 -30
- package/src/v2/runtime/__tests__/integration/servers/hono-single.ts +0 -37
- package/src/v2/runtime/__tests__/integration/servers/node-multi.ts +0 -45
- package/src/v2/runtime/__tests__/integration/servers/node-single.ts +0 -46
- package/src/v2/runtime/__tests__/integration/servers/types.ts +0 -18
- package/src/v2/runtime/__tests__/integration/suites/debug-events.suite.ts +0 -253
- package/src/v2/runtime/__tests__/integration/suites/multi-endpoint.suite.ts +0 -358
- package/src/v2/runtime/__tests__/integration/suites/single-endpoint.suite.ts +0 -363
- package/src/v2/runtime/__tests__/intelligence-run-telemetry.test.ts +0 -194
- package/src/v2/runtime/__tests__/mcp-apps-middleware-integration.test.ts +0 -275
- package/src/v2/runtime/__tests__/middleware-express.test.ts +0 -208
- package/src/v2/runtime/__tests__/middleware-single-express.test.ts +0 -213
- package/src/v2/runtime/__tests__/middleware-single.test.ts +0 -225
- package/src/v2/runtime/__tests__/middleware-sse-parser.test.ts +0 -237
- package/src/v2/runtime/__tests__/middleware.test.ts +0 -250
- package/src/v2/runtime/__tests__/node-fetch-handler.test.ts +0 -157
- package/src/v2/runtime/__tests__/open-generative-ui-middleware.e2e.test.ts +0 -728
- package/src/v2/runtime/__tests__/router-edge-cases.test.ts +0 -217
- package/src/v2/runtime/__tests__/routing-express.test.ts +0 -174
- package/src/v2/runtime/__tests__/routing-single-express.test.ts +0 -168
- package/src/v2/runtime/__tests__/routing-single.test.ts +0 -193
- package/src/v2/runtime/__tests__/routing.test.ts +0 -257
- package/src/v2/runtime/__tests__/runtime.test.ts +0 -234
- package/src/v2/runtime/__tests__/sse-response-telemetry.test.ts +0 -108
- package/src/v2/runtime/__tests__/telemetry.test.ts +0 -167
- package/src/v2/runtime/__tests__/thread-names.test.ts +0 -188
- package/src/v2/runtime/core/__tests__/debug-event-bus.test.ts +0 -156
- package/src/v2/runtime/core/debug-event-bus.ts +0 -45
- package/src/v2/runtime/core/fetch-cors.ts +0 -136
- package/src/v2/runtime/core/fetch-handler.ts +0 -492
- package/src/v2/runtime/core/fetch-router.ts +0 -203
- package/src/v2/runtime/core/hooks.ts +0 -160
- package/src/v2/runtime/core/middleware-sse-parser.ts +0 -210
- package/src/v2/runtime/core/middleware.ts +0 -115
- package/src/v2/runtime/core/runtime.ts +0 -432
- package/src/v2/runtime/endpoints/express-fetch-bridge.ts +0 -137
- package/src/v2/runtime/endpoints/express-single.ts +0 -54
- package/src/v2/runtime/endpoints/express.ts +0 -179
- package/src/v2/runtime/endpoints/hono-single.ts +0 -60
- package/src/v2/runtime/endpoints/hono.ts +0 -89
- package/src/v2/runtime/endpoints/index.ts +0 -4
- package/src/v2/runtime/endpoints/node-fetch-handler.ts +0 -48
- package/src/v2/runtime/endpoints/node.ts +0 -28
- package/src/v2/runtime/endpoints/single-route-helpers.ts +0 -125
- package/src/v2/runtime/express.ts +0 -2
- package/src/v2/runtime/handlers/__tests__/handle-debug-events.test.ts +0 -176
- package/src/v2/runtime/handlers/get-runtime-info.ts +0 -101
- package/src/v2/runtime/handlers/handle-connect.ts +0 -80
- package/src/v2/runtime/handlers/handle-debug-events.ts +0 -52
- package/src/v2/runtime/handlers/handle-run.ts +0 -111
- package/src/v2/runtime/handlers/handle-stop.ts +0 -77
- package/src/v2/runtime/handlers/handle-threads.ts +0 -11
- package/src/v2/runtime/handlers/handle-transcribe.ts +0 -269
- package/src/v2/runtime/handlers/header-utils.ts +0 -24
- package/src/v2/runtime/handlers/intelligence/connect.ts +0 -102
- package/src/v2/runtime/handlers/intelligence/run.ts +0 -351
- package/src/v2/runtime/handlers/intelligence/thread-names.ts +0 -246
- package/src/v2/runtime/handlers/intelligence/threads.ts +0 -420
- package/src/v2/runtime/handlers/shared/agent-utils.ts +0 -154
- package/src/v2/runtime/handlers/shared/intelligence-utils.ts +0 -41
- package/src/v2/runtime/handlers/shared/json-response.ts +0 -9
- package/src/v2/runtime/handlers/shared/resolve-intelligence-user.ts +0 -28
- package/src/v2/runtime/handlers/shared/sse-response.ts +0 -215
- package/src/v2/runtime/handlers/sse/__tests__/sse-connect-agent-id.test.ts +0 -71
- package/src/v2/runtime/handlers/sse/connect.ts +0 -30
- package/src/v2/runtime/handlers/sse/run.ts +0 -40
- package/src/v2/runtime/hono.ts +0 -2
- package/src/v2/runtime/index.ts +0 -51
- package/src/v2/runtime/intelligence-platform/__tests__/client.test.ts +0 -601
- package/src/v2/runtime/intelligence-platform/__tests__/intelligence-mcp-helper.test.ts +0 -246
- package/src/v2/runtime/intelligence-platform/client.ts +0 -818
- package/src/v2/runtime/intelligence-platform/index.ts +0 -10
- package/src/v2/runtime/node.ts +0 -6
- package/src/v2/runtime/open-generative-ui-middleware.ts +0 -373
- package/src/v2/runtime/runner/__tests__/finalize-events.test.ts +0 -109
- package/src/v2/runtime/runner/__tests__/in-memory-runner.e2e.test.ts +0 -775
- package/src/v2/runtime/runner/__tests__/in-memory-runner.test.ts +0 -777
- package/src/v2/runtime/runner/__tests__/intelligence-runner.test.ts +0 -1039
- package/src/v2/runtime/runner/agent-runner.ts +0 -35
- package/src/v2/runtime/runner/in-memory.ts +0 -467
- package/src/v2/runtime/runner/index.ts +0 -4
- package/src/v2/runtime/runner/intelligence.ts +0 -498
- package/src/v2/runtime/telemetry/__tests__/instance-created.test.ts +0 -96
- package/src/v2/runtime/telemetry/events.ts +0 -35
- package/src/v2/runtime/telemetry/index.ts +0 -7
- package/src/v2/runtime/telemetry/instance-created.ts +0 -44
- package/src/v2/runtime/telemetry/scarf-client.ts +0 -39
- package/src/v2/runtime/telemetry/telemetry-client.ts +0 -70
- package/src/v2/runtime/transcription-service/transcription-service.ts +0 -11
- package/tests/global.d.ts +0 -1
- package/tests/service-adapters/anthropic/allowlist-approach.test.ts +0 -259
- package/tests/service-adapters/anthropic/anthropic-adapter-language-model.test.ts +0 -101
- package/tests/service-adapters/anthropic/anthropic-adapter.test.ts +0 -645
- package/tests/service-adapters/anthropic/utils-token-trimming.test.ts +0 -301
- package/tests/service-adapters/groq/groq-adapter-language-model.test.ts +0 -102
- package/tests/service-adapters/openai/allowlist-approach.test.ts +0 -294
- package/tests/service-adapters/openai/openai-adapter-language-model.test.ts +0 -122
- package/tests/service-adapters/openai/openai-adapter.test.ts +0 -291
- package/tests/service-adapters/shared/sdk-client-utils.test.ts +0 -36
- package/tests/setup.vitest.ts +0 -8
- package/tests/tsconfig.json +0 -10
- package/tsconfig.json +0 -20
- package/tsdown.config.ts +0 -45
- package/typedoc.json +0 -4
- package/vitest.config.mjs +0 -13
|
@@ -1,179 +0,0 @@
|
|
|
1
|
-
import express from "express";
|
|
2
|
-
import type {
|
|
3
|
-
Request as ExpressRequest,
|
|
4
|
-
Response as ExpressResponse,
|
|
5
|
-
NextFunction,
|
|
6
|
-
Router,
|
|
7
|
-
} from "express";
|
|
8
|
-
import cors from "cors";
|
|
9
|
-
import type { CorsOptions } from "cors";
|
|
10
|
-
import type { CopilotRuntimeLike } from "../core/runtime";
|
|
11
|
-
import { createCopilotRuntimeHandler } from "../core/fetch-handler";
|
|
12
|
-
import { createExpressNodeHandler } from "./express-fetch-bridge";
|
|
13
|
-
import type { CopilotRuntimeHooks } from "../core/hooks";
|
|
14
|
-
|
|
15
|
-
export interface CopilotExpressEndpointParams {
|
|
16
|
-
runtime: CopilotRuntimeLike;
|
|
17
|
-
basePath: string;
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Endpoint mode.
|
|
21
|
-
* - `"multi-route"` (default): separate routes for each operation
|
|
22
|
-
* - `"single-route"`: single POST endpoint with JSON envelope dispatch
|
|
23
|
-
*/
|
|
24
|
-
mode?: "multi-route" | "single-route";
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* CORS configuration for the Express router.
|
|
28
|
-
* - `true` (default): permissive CORS (`origin: "*"`, all methods, all headers).
|
|
29
|
-
* - `false`: no CORS middleware is applied — handle it yourself.
|
|
30
|
-
* - object: passed directly to the Express `cors()` middleware.
|
|
31
|
-
*/
|
|
32
|
-
cors?: boolean | CorsOptions;
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* Lifecycle hooks for request processing.
|
|
36
|
-
*/
|
|
37
|
-
hooks?: CopilotRuntimeHooks;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
* Creates an Express router that serves the CopilotKit runtime.
|
|
42
|
-
*
|
|
43
|
-
* In **multi-route** mode (default) the router exposes:
|
|
44
|
-
* - `GET {basePath}/info` — runtime info
|
|
45
|
-
* - `POST {basePath}/agent/:agentId/run` — start an agent run
|
|
46
|
-
* - `POST {basePath}/agent/:agentId/connect` — connect to an agent run
|
|
47
|
-
* - `POST {basePath}/agent/:agentId/stop/:threadId` — stop an agent run
|
|
48
|
-
* - `POST {basePath}/transcribe` — transcribe audio
|
|
49
|
-
*
|
|
50
|
-
* In **single-route** mode a single `POST {basePath}` endpoint accepts a JSON
|
|
51
|
-
* envelope `{ method, params, body }` and dispatches to the appropriate handler.
|
|
52
|
-
*
|
|
53
|
-
* @example
|
|
54
|
-
* ```typescript
|
|
55
|
-
* import express from "express";
|
|
56
|
-
* import { CopilotRuntime } from "@copilotkit/runtime/v2";
|
|
57
|
-
* import { createCopilotExpressHandler } from "@copilotkit/runtime/v2/express";
|
|
58
|
-
*
|
|
59
|
-
* const runtime = new CopilotRuntime({
|
|
60
|
-
* agents: { default: new BuiltInAgent({ model: "openai/gpt-4o-mini" }) },
|
|
61
|
-
* });
|
|
62
|
-
*
|
|
63
|
-
* const app = express();
|
|
64
|
-
* app.use(createCopilotExpressHandler({
|
|
65
|
-
* runtime,
|
|
66
|
-
* basePath: "/api/copilotkit",
|
|
67
|
-
* cors: true,
|
|
68
|
-
* }));
|
|
69
|
-
* app.listen(4000);
|
|
70
|
-
* ```
|
|
71
|
-
*
|
|
72
|
-
* @example Single-route mode with lifecycle hooks
|
|
73
|
-
* ```typescript
|
|
74
|
-
* app.use(createCopilotExpressHandler({
|
|
75
|
-
* runtime,
|
|
76
|
-
* basePath: "/api/copilotkit",
|
|
77
|
-
* mode: "single-route",
|
|
78
|
-
* hooks: {
|
|
79
|
-
* onRequest: ({ request }) => {
|
|
80
|
-
* if (!request.headers.get("authorization")) {
|
|
81
|
-
* throw new Response("Unauthorized", { status: 401 });
|
|
82
|
-
* }
|
|
83
|
-
* },
|
|
84
|
-
* },
|
|
85
|
-
* }));
|
|
86
|
-
* ```
|
|
87
|
-
*/
|
|
88
|
-
/** @deprecated Use `createCopilotExpressHandler` instead. */
|
|
89
|
-
export { createCopilotExpressHandler as createCopilotEndpointExpress };
|
|
90
|
-
|
|
91
|
-
export function createCopilotExpressHandler({
|
|
92
|
-
runtime,
|
|
93
|
-
basePath,
|
|
94
|
-
mode = "multi-route",
|
|
95
|
-
cors: corsOption = true,
|
|
96
|
-
hooks,
|
|
97
|
-
}: CopilotExpressEndpointParams): Router {
|
|
98
|
-
const normalizedBase = normalizeBasePath(basePath);
|
|
99
|
-
|
|
100
|
-
const handler = createCopilotRuntimeHandler({
|
|
101
|
-
runtime,
|
|
102
|
-
basePath: normalizedBase,
|
|
103
|
-
mode,
|
|
104
|
-
cors: false, // CORS is handled at the Express middleware layer
|
|
105
|
-
hooks,
|
|
106
|
-
});
|
|
107
|
-
|
|
108
|
-
const nodeHandler = createExpressNodeHandler(handler);
|
|
109
|
-
|
|
110
|
-
const expressHandler = async (
|
|
111
|
-
req: ExpressRequest,
|
|
112
|
-
res: ExpressResponse,
|
|
113
|
-
next: NextFunction,
|
|
114
|
-
) => {
|
|
115
|
-
try {
|
|
116
|
-
await nodeHandler(req, res);
|
|
117
|
-
} catch (err) {
|
|
118
|
-
next(err);
|
|
119
|
-
}
|
|
120
|
-
};
|
|
121
|
-
|
|
122
|
-
const router = express.Router();
|
|
123
|
-
|
|
124
|
-
// CORS middleware
|
|
125
|
-
if (corsOption) {
|
|
126
|
-
const corsConfig: CorsOptions =
|
|
127
|
-
corsOption === true
|
|
128
|
-
? {
|
|
129
|
-
origin: "*",
|
|
130
|
-
methods: [
|
|
131
|
-
"GET",
|
|
132
|
-
"HEAD",
|
|
133
|
-
"PUT",
|
|
134
|
-
"POST",
|
|
135
|
-
"DELETE",
|
|
136
|
-
"PATCH",
|
|
137
|
-
"OPTIONS",
|
|
138
|
-
],
|
|
139
|
-
allowedHeaders: ["*"],
|
|
140
|
-
}
|
|
141
|
-
: corsOption;
|
|
142
|
-
router.use(cors(corsConfig));
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
// Route mounting
|
|
146
|
-
if (mode === "single-route") {
|
|
147
|
-
router.post(normalizedBase, expressHandler);
|
|
148
|
-
router.options(normalizedBase, expressHandler);
|
|
149
|
-
} else if (normalizedBase === "/") {
|
|
150
|
-
router.all(/.*/, expressHandler);
|
|
151
|
-
} else {
|
|
152
|
-
router.all(
|
|
153
|
-
new RegExp(`^${escapeRegExp(normalizedBase)}(\\/.*)?$`),
|
|
154
|
-
expressHandler,
|
|
155
|
-
);
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
return router;
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
function escapeRegExp(s: string): string {
|
|
162
|
-
return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
function normalizeBasePath(path: string): string {
|
|
166
|
-
if (!path) {
|
|
167
|
-
throw new Error("basePath must be provided for Express endpoint");
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
if (!path.startsWith("/")) {
|
|
171
|
-
return `/${path}`;
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
if (path.length > 1 && path.endsWith("/")) {
|
|
175
|
-
return path.slice(0, -1);
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
return path;
|
|
179
|
-
}
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
import { Hono } from "hono";
|
|
2
|
-
import type { CopilotRuntimeLike } from "../core/runtime";
|
|
3
|
-
import { createCopilotRuntimeHandler } from "../core/fetch-handler";
|
|
4
|
-
import type { CopilotRuntimeHooks } from "../core/hooks";
|
|
5
|
-
import { CopilotEndpointCorsConfig, toFetchCorsConfig } from "./hono";
|
|
6
|
-
|
|
7
|
-
interface CopilotSingleEndpointParams {
|
|
8
|
-
runtime: CopilotRuntimeLike;
|
|
9
|
-
/**
|
|
10
|
-
* Absolute path at which to mount the single-route endpoint (e.g. "/api/copilotkit").
|
|
11
|
-
*/
|
|
12
|
-
basePath: string;
|
|
13
|
-
/**
|
|
14
|
-
* Optional CORS configuration. When not provided, defaults to allowing all origins without credentials.
|
|
15
|
-
* To support HTTP-only cookies, provide cors config with credentials: true and explicit origin.
|
|
16
|
-
*/
|
|
17
|
-
cors?: CopilotEndpointCorsConfig;
|
|
18
|
-
/**
|
|
19
|
-
* Lifecycle hooks for request processing.
|
|
20
|
-
*/
|
|
21
|
-
hooks?: CopilotRuntimeHooks;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
/** @deprecated Use `createCopilotHonoHandler` with `mode: "single-route"` instead. */
|
|
25
|
-
export function createCopilotEndpointSingleRoute({
|
|
26
|
-
runtime,
|
|
27
|
-
basePath,
|
|
28
|
-
cors: corsConfig,
|
|
29
|
-
hooks,
|
|
30
|
-
}: CopilotSingleEndpointParams) {
|
|
31
|
-
const routePath = normalizePath(basePath);
|
|
32
|
-
|
|
33
|
-
const handler = createCopilotRuntimeHandler({
|
|
34
|
-
runtime,
|
|
35
|
-
basePath: routePath,
|
|
36
|
-
mode: "single-route",
|
|
37
|
-
cors: corsConfig ? toFetchCorsConfig(corsConfig) : true,
|
|
38
|
-
hooks,
|
|
39
|
-
});
|
|
40
|
-
|
|
41
|
-
const app = new Hono();
|
|
42
|
-
|
|
43
|
-
return app.basePath(routePath).all("*", async (c) => handler(c.req.raw));
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
function normalizePath(path: string): string {
|
|
47
|
-
if (!path) {
|
|
48
|
-
throw new Error("basePath must be provided for single-route endpoint");
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
if (!path.startsWith("/")) {
|
|
52
|
-
return `/${path}`;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
if (path.length > 1 && path.endsWith("/")) {
|
|
56
|
-
return path.slice(0, -1);
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
return path;
|
|
60
|
-
}
|
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
import { Hono } from "hono";
|
|
2
|
-
import type { CopilotRuntimeLike } from "../core/runtime";
|
|
3
|
-
import { createCopilotRuntimeHandler } from "../core/fetch-handler";
|
|
4
|
-
import type { CopilotCorsConfig } from "../core/fetch-cors";
|
|
5
|
-
import type { CopilotRuntimeHooks } from "../core/hooks";
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* CORS configuration for CopilotKit endpoints.
|
|
9
|
-
* When using credentials (e.g., HTTP-only cookies), you must specify an explicit origin.
|
|
10
|
-
*/
|
|
11
|
-
export interface CopilotEndpointCorsConfig {
|
|
12
|
-
/**
|
|
13
|
-
* Allowed origin(s) for CORS. Can be:
|
|
14
|
-
* - A string: exact origin (e.g., "https://myapp.com")
|
|
15
|
-
* - An array: list of allowed origins
|
|
16
|
-
* - A function: dynamic origin resolution
|
|
17
|
-
*
|
|
18
|
-
* Note: When credentials is true, origin cannot be "*"
|
|
19
|
-
*/
|
|
20
|
-
origin:
|
|
21
|
-
| string
|
|
22
|
-
| string[]
|
|
23
|
-
| ((origin: string, c: any) => string | undefined | null);
|
|
24
|
-
/**
|
|
25
|
-
* Whether to allow credentials (cookies, HTTP authentication).
|
|
26
|
-
* When true, origin must be explicitly specified (not "*").
|
|
27
|
-
*/
|
|
28
|
-
credentials?: boolean;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
interface CopilotEndpointParams {
|
|
32
|
-
runtime: CopilotRuntimeLike;
|
|
33
|
-
basePath: string;
|
|
34
|
-
|
|
35
|
-
/**
|
|
36
|
-
* Endpoint mode.
|
|
37
|
-
* - `"multi-route"` (default): separate routes for each operation
|
|
38
|
-
* - `"single-route"`: single POST endpoint with JSON envelope dispatch
|
|
39
|
-
*/
|
|
40
|
-
mode?: "multi-route" | "single-route";
|
|
41
|
-
|
|
42
|
-
/**
|
|
43
|
-
* Optional CORS configuration. When not provided, defaults to allowing all origins without credentials.
|
|
44
|
-
* To support HTTP-only cookies, provide cors config with credentials: true and explicit origin.
|
|
45
|
-
*/
|
|
46
|
-
cors?: CopilotEndpointCorsConfig;
|
|
47
|
-
/**
|
|
48
|
-
* Lifecycle hooks for request processing.
|
|
49
|
-
*/
|
|
50
|
-
hooks?: CopilotRuntimeHooks;
|
|
51
|
-
}
|
|
52
|
-
/** @deprecated Use `createCopilotHonoHandler` instead. */
|
|
53
|
-
export const createCopilotEndpoint = createCopilotHonoHandler;
|
|
54
|
-
|
|
55
|
-
export function createCopilotHonoHandler({
|
|
56
|
-
runtime,
|
|
57
|
-
basePath,
|
|
58
|
-
mode = "multi-route",
|
|
59
|
-
cors: corsConfig,
|
|
60
|
-
hooks,
|
|
61
|
-
}: CopilotEndpointParams) {
|
|
62
|
-
const handler = createCopilotRuntimeHandler({
|
|
63
|
-
runtime,
|
|
64
|
-
basePath,
|
|
65
|
-
mode,
|
|
66
|
-
cors: corsConfig ? toFetchCorsConfig(corsConfig) : true,
|
|
67
|
-
hooks,
|
|
68
|
-
});
|
|
69
|
-
|
|
70
|
-
const app = new Hono();
|
|
71
|
-
|
|
72
|
-
return app.basePath(basePath).all("*", async (c) => handler(c.req.raw));
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
/**
|
|
76
|
-
* Convert Hono-specific CORS config to the fetch handler's CopilotCorsConfig.
|
|
77
|
-
*/
|
|
78
|
-
export function toFetchCorsConfig(
|
|
79
|
-
config: CopilotEndpointCorsConfig,
|
|
80
|
-
): CopilotCorsConfig {
|
|
81
|
-
const origin = config.origin;
|
|
82
|
-
return {
|
|
83
|
-
origin:
|
|
84
|
-
typeof origin === "function"
|
|
85
|
-
? (reqOrigin: string) => origin(reqOrigin, undefined) ?? null
|
|
86
|
-
: origin,
|
|
87
|
-
credentials: config.credentials,
|
|
88
|
-
};
|
|
89
|
-
}
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Generic Node ↔ Fetch bridge for CopilotKit runtime.
|
|
3
|
-
*
|
|
4
|
-
* Wraps a `CopilotRuntimeFetchHandler` as a Node HTTP handler using
|
|
5
|
-
* `@remix-run/node-fetch-server` for reliable streaming and conversion.
|
|
6
|
-
*
|
|
7
|
-
* @example
|
|
8
|
-
* ```typescript
|
|
9
|
-
* import { createServer } from "node:http";
|
|
10
|
-
* import { createCopilotRuntimeHandler } from "@copilotkit/runtime/v2";
|
|
11
|
-
* import { createCopilotNodeHandler } from "@copilotkit/runtime/v2/node";
|
|
12
|
-
*
|
|
13
|
-
* const handler = createCopilotRuntimeHandler({ runtime, basePath: "/api/copilotkit", cors: true });
|
|
14
|
-
* const nodeHandler = createCopilotNodeHandler(handler);
|
|
15
|
-
* createServer(nodeHandler).listen(3000);
|
|
16
|
-
* ```
|
|
17
|
-
*/
|
|
18
|
-
|
|
19
|
-
import type { IncomingMessage, ServerResponse } from "node:http";
|
|
20
|
-
import { createRequest, sendResponse } from "@remix-run/node-fetch-server";
|
|
21
|
-
import type { CopilotRuntimeFetchHandler } from "../core/fetch-handler";
|
|
22
|
-
import { logger } from "@copilotkit/shared";
|
|
23
|
-
|
|
24
|
-
export type NodeFetchHandler = (
|
|
25
|
-
req: IncomingMessage,
|
|
26
|
-
res: ServerResponse,
|
|
27
|
-
) => Promise<void>;
|
|
28
|
-
|
|
29
|
-
export function createCopilotNodeHandler(
|
|
30
|
-
handler: CopilotRuntimeFetchHandler,
|
|
31
|
-
): NodeFetchHandler {
|
|
32
|
-
return async (req: IncomingMessage, res: ServerResponse) => {
|
|
33
|
-
try {
|
|
34
|
-
const fetchReq = createRequest(req, res);
|
|
35
|
-
const fetchRes = await handler(fetchReq);
|
|
36
|
-
await sendResponse(res, fetchRes);
|
|
37
|
-
} catch (err: unknown) {
|
|
38
|
-
logger.error({ err }, "Error in Node fetch handler");
|
|
39
|
-
if (!res.headersSent) {
|
|
40
|
-
res.statusCode = 500;
|
|
41
|
-
res.end("Internal Server Error");
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
};
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
/** @deprecated Use `createCopilotNodeHandler` instead. */
|
|
48
|
-
export const createNodeFetchHandler = createCopilotNodeHandler;
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { createCopilotRuntimeHandler } from "../core/fetch-handler";
|
|
2
|
-
import type { CopilotRuntimeHandlerOptions } from "../core/fetch-handler";
|
|
3
|
-
import { createCopilotNodeHandler } from "./node-fetch-handler";
|
|
4
|
-
import type { NodeFetchHandler } from "./node-fetch-handler";
|
|
5
|
-
/**
|
|
6
|
-
* Convenience wrapper for creating a Node.js HTTP request listener
|
|
7
|
-
* from CopilotKit runtime handler options.
|
|
8
|
-
*
|
|
9
|
-
* @example
|
|
10
|
-
* ```typescript
|
|
11
|
-
* import { createServer } from "node:http";
|
|
12
|
-
* import { CopilotRuntime } from "@copilotkit/runtime/v2";
|
|
13
|
-
* import { createCopilotNodeListener } from "@copilotkit/runtime/v2/node";
|
|
14
|
-
*
|
|
15
|
-
* const listener = createCopilotNodeListener({
|
|
16
|
-
* runtime: new CopilotRuntime({ agents: { ... } }),
|
|
17
|
-
* basePath: "/api/copilotkit",
|
|
18
|
-
* cors: true,
|
|
19
|
-
* });
|
|
20
|
-
* createServer(listener).listen(3000);
|
|
21
|
-
* ```
|
|
22
|
-
*/
|
|
23
|
-
export function createCopilotNodeListener(
|
|
24
|
-
options: CopilotRuntimeHandlerOptions,
|
|
25
|
-
): NodeFetchHandler {
|
|
26
|
-
const handler = createCopilotRuntimeHandler(options);
|
|
27
|
-
return createCopilotNodeHandler(handler);
|
|
28
|
-
}
|
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
const METHOD_NAMES = [
|
|
2
|
-
"agent/run",
|
|
3
|
-
"agent/connect",
|
|
4
|
-
"agent/stop",
|
|
5
|
-
"info",
|
|
6
|
-
"transcribe",
|
|
7
|
-
] as const;
|
|
8
|
-
|
|
9
|
-
export type EndpointMethod = (typeof METHOD_NAMES)[number];
|
|
10
|
-
|
|
11
|
-
interface JsonEnvelope {
|
|
12
|
-
method?: string;
|
|
13
|
-
params?: Record<string, unknown>;
|
|
14
|
-
body?: unknown;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export interface MethodCall {
|
|
18
|
-
method: EndpointMethod;
|
|
19
|
-
params?: Record<string, unknown>;
|
|
20
|
-
body?: unknown;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
export async function parseMethodCall(request: Request): Promise<MethodCall> {
|
|
24
|
-
const contentType = request.headers.get("content-type") || "";
|
|
25
|
-
|
|
26
|
-
if (!contentType.includes("application/json")) {
|
|
27
|
-
throw createResponseError(
|
|
28
|
-
"Single-route endpoint expects JSON payloads",
|
|
29
|
-
415,
|
|
30
|
-
);
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
let jsonEnvelope: JsonEnvelope;
|
|
34
|
-
try {
|
|
35
|
-
jsonEnvelope = (await request.clone().json()) as JsonEnvelope;
|
|
36
|
-
} catch (error) {
|
|
37
|
-
throw createResponseError("Invalid JSON payload", 400);
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
const method = validateMethod(jsonEnvelope.method);
|
|
41
|
-
|
|
42
|
-
return {
|
|
43
|
-
method,
|
|
44
|
-
params: jsonEnvelope.params,
|
|
45
|
-
body: jsonEnvelope.body,
|
|
46
|
-
};
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
export function expectString(
|
|
50
|
-
params: Record<string, unknown> | undefined,
|
|
51
|
-
key: string,
|
|
52
|
-
): string {
|
|
53
|
-
const value = params?.[key];
|
|
54
|
-
if (typeof value === "string" && value.trim().length > 0) {
|
|
55
|
-
return value;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
throw createResponseError(`Missing or invalid parameter '${key}'`, 400);
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
export function createJsonRequest(base: Request, body: unknown): Request {
|
|
62
|
-
if (body === undefined || body === null) {
|
|
63
|
-
throw createResponseError("Missing request body for JSON handler", 400);
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
const headers = new Headers(base.headers);
|
|
67
|
-
headers.set("content-type", "application/json");
|
|
68
|
-
headers.delete("content-length");
|
|
69
|
-
|
|
70
|
-
const serializedBody = serializeJsonBody(body);
|
|
71
|
-
|
|
72
|
-
return new Request(base.url, {
|
|
73
|
-
method: "POST",
|
|
74
|
-
headers,
|
|
75
|
-
body: serializedBody,
|
|
76
|
-
signal: base.signal,
|
|
77
|
-
});
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
export function createResponseError(message: string, status: number): Response {
|
|
81
|
-
return new Response(
|
|
82
|
-
JSON.stringify({
|
|
83
|
-
error: "invalid_request",
|
|
84
|
-
message,
|
|
85
|
-
}),
|
|
86
|
-
{
|
|
87
|
-
status,
|
|
88
|
-
headers: {
|
|
89
|
-
"Content-Type": "application/json",
|
|
90
|
-
},
|
|
91
|
-
},
|
|
92
|
-
);
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
function validateMethod(method: string | undefined): EndpointMethod {
|
|
96
|
-
if (!method) {
|
|
97
|
-
throw createResponseError("Missing method field", 400);
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
if ((METHOD_NAMES as readonly string[]).includes(method)) {
|
|
101
|
-
return method as EndpointMethod;
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
throw createResponseError(`Unsupported method '${method}'`, 400);
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
function serializeJsonBody(body: unknown): BodyInit {
|
|
108
|
-
if (typeof body === "string") {
|
|
109
|
-
return body;
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
if (
|
|
113
|
-
body instanceof Blob ||
|
|
114
|
-
body instanceof ArrayBuffer ||
|
|
115
|
-
body instanceof Uint8Array
|
|
116
|
-
) {
|
|
117
|
-
return body;
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
if (body instanceof FormData || body instanceof URLSearchParams) {
|
|
121
|
-
return body;
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
return JSON.stringify(body);
|
|
125
|
-
}
|