managed-deepagents 0.10.0-dev.9 → 0.10.1-dev.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.
- package/README.md +864 -143
- package/dist/browser.d.ts +37 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/browser.js +31 -0
- package/dist/browser.js.map +1 -0
- package/dist/channels/actor.d.ts +57 -0
- package/dist/channels/actor.d.ts.map +1 -0
- package/dist/channels/actor.js +24 -0
- package/dist/channels/actor.js.map +1 -0
- package/dist/channels/assistant-text.d.ts +29 -0
- package/dist/channels/assistant-text.d.ts.map +1 -1
- package/dist/channels/assistant-text.js +81 -4
- package/dist/channels/assistant-text.js.map +1 -1
- package/dist/channels/binding.d.ts +20 -1
- package/dist/channels/binding.d.ts.map +1 -1
- package/dist/channels/binding.js +44 -11
- package/dist/channels/binding.js.map +1 -1
- package/dist/channels/delivery.d.ts +51 -0
- package/dist/channels/delivery.d.ts.map +1 -0
- package/dist/channels/delivery.js +424 -0
- package/dist/channels/delivery.js.map +1 -0
- package/dist/channels/github/app-setup.d.ts +32 -0
- package/dist/channels/github/app-setup.d.ts.map +1 -0
- package/dist/channels/github/app-setup.js +146 -0
- package/dist/channels/github/app-setup.js.map +1 -0
- package/dist/channels/github/index.d.ts +5 -1
- package/dist/channels/github/index.d.ts.map +1 -1
- package/dist/channels/github/index.js +38 -46
- package/dist/channels/github/index.js.map +1 -1
- package/dist/channels/github/mentions.d.ts +12 -0
- package/dist/channels/github/mentions.d.ts.map +1 -0
- package/dist/channels/github/mentions.js +185 -0
- package/dist/channels/github/mentions.js.map +1 -0
- package/dist/channels/github/schema.d.ts +271 -0
- package/dist/channels/github/schema.d.ts.map +1 -1
- package/dist/channels/github/schema.js +33 -0
- package/dist/channels/github/schema.js.map +1 -1
- package/dist/channels/github/types.d.ts +50 -26
- package/dist/channels/github/types.d.ts.map +1 -1
- package/dist/channels/http/endpoint.d.ts +137 -0
- package/dist/channels/http/endpoint.d.ts.map +1 -0
- package/dist/channels/http/endpoint.js +286 -0
- package/dist/channels/http/endpoint.js.map +1 -0
- package/dist/channels/http/http.d.ts.map +1 -1
- package/dist/channels/http/http.js +209 -89
- package/dist/channels/http/http.js.map +1 -1
- package/dist/channels/http/index.d.ts +7 -1
- package/dist/channels/http/index.d.ts.map +1 -1
- package/dist/channels/http/index.js +32 -23
- package/dist/channels/http/index.js.map +1 -1
- package/dist/channels/http/ingress.d.ts +30 -24
- package/dist/channels/http/ingress.d.ts.map +1 -1
- package/dist/channels/http/ingress.js +61 -57
- package/dist/channels/http/ingress.js.map +1 -1
- package/dist/channels/http/provider.d.ts +38 -15
- package/dist/channels/http/provider.d.ts.map +1 -1
- package/dist/channels/http/provider.js +54 -24
- package/dist/channels/http/provider.js.map +1 -1
- package/dist/channels/http/studio.d.ts +8 -1
- package/dist/channels/http/studio.d.ts.map +1 -1
- package/dist/channels/http/studio.js +13 -0
- package/dist/channels/http/studio.js.map +1 -1
- package/dist/channels/http/types.d.ts +95 -69
- package/dist/channels/http/types.d.ts.map +1 -1
- package/dist/channels/linear/app-setup.d.ts +29 -0
- package/dist/channels/linear/app-setup.d.ts.map +1 -0
- package/dist/channels/linear/app-setup.js +102 -0
- package/dist/channels/linear/app-setup.js.map +1 -0
- package/dist/channels/linear/index.d.ts +5 -1
- package/dist/channels/linear/index.d.ts.map +1 -1
- package/dist/channels/linear/index.js +65 -94
- package/dist/channels/linear/index.js.map +1 -1
- package/dist/channels/linear/schema.d.ts +11 -25
- package/dist/channels/linear/schema.d.ts.map +1 -1
- package/dist/channels/linear/schema.js +6 -0
- package/dist/channels/linear/schema.js.map +1 -1
- package/dist/channels/linear/types.d.ts +37 -31
- package/dist/channels/linear/types.d.ts.map +1 -1
- package/dist/channels/messaging-registry.d.ts +16 -0
- package/dist/channels/messaging-registry.d.ts.map +1 -1
- package/dist/channels/messaging-registry.js +29 -0
- package/dist/channels/messaging-registry.js.map +1 -1
- package/dist/channels/reserved-connections.d.ts.map +1 -1
- package/dist/channels/reserved-connections.js +10 -0
- package/dist/channels/reserved-connections.js.map +1 -1
- package/dist/channels/resolve-user-endpoint.d.ts +34 -0
- package/dist/channels/resolve-user-endpoint.d.ts.map +1 -0
- package/dist/channels/resolve-user-endpoint.js +51 -0
- package/dist/channels/resolve-user-endpoint.js.map +1 -0
- package/dist/channels/resolve-user.d.ts +95 -0
- package/dist/channels/resolve-user.d.ts.map +1 -0
- package/dist/channels/resolve-user.js +143 -0
- package/dist/channels/resolve-user.js.map +1 -0
- package/dist/channels/run-input.d.ts +46 -4
- package/dist/channels/run-input.d.ts.map +1 -1
- package/dist/channels/run-input.js +94 -30
- package/dist/channels/run-input.js.map +1 -1
- package/dist/channels/runtime.d.ts +5 -2
- package/dist/channels/runtime.d.ts.map +1 -1
- package/dist/channels/runtime.js +19 -10
- package/dist/channels/runtime.js.map +1 -1
- package/dist/channels/schedule-delivery.d.ts +2 -13
- package/dist/channels/schedule-delivery.d.ts.map +1 -1
- package/dist/channels/schedule-delivery.js +9 -76
- package/dist/channels/schedule-delivery.js.map +1 -1
- package/dist/channels/slack/api.d.ts +2 -0
- package/dist/channels/slack/api.d.ts.map +1 -1
- package/dist/channels/slack/api.js +6 -0
- package/dist/channels/slack/api.js.map +1 -1
- package/dist/channels/slack/connections.d.ts +6 -0
- package/dist/channels/slack/connections.d.ts.map +1 -0
- package/dist/channels/slack/connections.js +6 -0
- package/dist/channels/slack/connections.js.map +1 -0
- package/dist/channels/slack/events.d.ts +278 -0
- package/dist/channels/slack/events.d.ts.map +1 -0
- package/dist/channels/slack/events.js +235 -0
- package/dist/channels/slack/events.js.map +1 -0
- package/dist/channels/slack/files.d.ts.map +1 -1
- package/dist/channels/slack/files.js +2 -3
- package/dist/channels/slack/files.js.map +1 -1
- package/dist/channels/slack/index.d.ts +90 -2
- package/dist/channels/slack/index.d.ts.map +1 -1
- package/dist/channels/slack/index.js +188 -6
- package/dist/channels/slack/index.js.map +1 -1
- package/dist/channels/slack/message-content.d.ts.map +1 -1
- package/dist/channels/slack/message-content.js +23 -28
- package/dist/channels/slack/message-content.js.map +1 -1
- package/dist/channels/slack/status.d.ts +76 -0
- package/dist/channels/slack/status.d.ts.map +1 -0
- package/dist/channels/slack/status.js +427 -0
- package/dist/channels/slack/status.js.map +1 -0
- package/dist/channels/trigger/client.d.ts.map +1 -1
- package/dist/channels/trigger/client.js +9 -11
- package/dist/channels/trigger/client.js.map +1 -1
- package/dist/channels/trigger/conversation.d.ts +11 -0
- package/dist/channels/trigger/conversation.d.ts.map +1 -0
- package/dist/channels/trigger/conversation.js +72 -0
- package/dist/channels/trigger/conversation.js.map +1 -0
- package/dist/channels/trigger/http.d.ts +130 -4
- package/dist/channels/trigger/http.d.ts.map +1 -1
- package/dist/channels/trigger/http.js +419 -82
- package/dist/channels/trigger/http.js.map +1 -1
- package/dist/channels/trigger/identity-context.d.ts +1 -1
- package/dist/channels/trigger/identity-context.d.ts.map +1 -1
- package/dist/channels/trigger/identity-context.js +3 -5
- package/dist/channels/trigger/identity-context.js.map +1 -1
- package/dist/channels/trigger/ingress.d.ts +70 -1
- package/dist/channels/trigger/ingress.d.ts.map +1 -1
- package/dist/channels/trigger/ingress.js +141 -9
- package/dist/channels/trigger/ingress.js.map +1 -1
- package/dist/channels/trigger/transport.d.ts +10 -0
- package/dist/channels/trigger/transport.d.ts.map +1 -1
- package/dist/channels/trigger/transport.js +25 -9
- package/dist/channels/trigger/transport.js.map +1 -1
- package/dist/channels/trigger/types.d.ts +92 -3
- package/dist/channels/trigger/types.d.ts.map +1 -1
- package/dist/channels/trigger/types.js +37 -0
- package/dist/channels/trigger/types.js.map +1 -1
- package/dist/channels/types.d.ts +53 -4
- package/dist/channels/types.d.ts.map +1 -1
- package/dist/channels/types.js +2 -0
- package/dist/channels/types.js.map +1 -1
- package/dist/concurrency/batch-processor.d.ts +51 -0
- package/dist/concurrency/batch-processor.d.ts.map +1 -0
- package/dist/concurrency/batch-processor.js +99 -0
- package/dist/concurrency/batch-processor.js.map +1 -0
- package/dist/connections.d.ts +5 -12
- package/dist/connections.d.ts.map +1 -1
- package/dist/connections.js +28 -30
- package/dist/connections.js.map +1 -1
- package/dist/connectors/mcp/langsmith-url.d.ts.map +1 -1
- package/dist/connectors/mcp/langsmith-url.js +0 -1
- package/dist/connectors/mcp/langsmith-url.js.map +1 -1
- package/dist/credential-gate.js +3 -3
- package/dist/credential-gate.js.map +1 -1
- package/dist/define-deep-agent.d.ts +2 -2
- package/dist/define-deep-agent.d.ts.map +1 -1
- package/dist/define-deep-agent.js +53 -2
- package/dist/define-deep-agent.js.map +1 -1
- package/dist/identity/index.d.ts.map +1 -1
- package/dist/identity/index.js +3 -1
- package/dist/identity/index.js.map +1 -1
- package/dist/identity/loopback.d.ts +7 -2
- package/dist/identity/loopback.d.ts.map +1 -1
- package/dist/identity/loopback.js +15 -4
- package/dist/identity/loopback.js.map +1 -1
- package/dist/identity/options.d.ts +9 -0
- package/dist/identity/options.d.ts.map +1 -1
- package/dist/identity/options.js +1 -1
- package/dist/identity/options.js.map +1 -1
- package/dist/identity/slack/links.js +3 -2
- package/dist/identity/slack/links.js.map +1 -1
- package/dist/identity/types.d.ts +3 -0
- package/dist/identity/types.d.ts.map +1 -1
- package/dist/index.d.ts +15 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/ingress/index.d.ts +8 -0
- package/dist/ingress/index.d.ts.map +1 -1
- package/dist/ingress/index.js +32 -2
- package/dist/ingress/index.js.map +1 -1
- package/dist/ingress/loopback.d.ts +1 -0
- package/dist/ingress/loopback.d.ts.map +1 -1
- package/dist/ingress/loopback.js +7 -3
- package/dist/ingress/loopback.js.map +1 -1
- package/dist/ingress/runs.d.ts +27 -1
- package/dist/ingress/runs.d.ts.map +1 -1
- package/dist/ingress/runs.js +69 -6
- package/dist/ingress/runs.js.map +1 -1
- package/dist/managed-composition.d.ts +3 -0
- package/dist/managed-composition.d.ts.map +1 -1
- package/dist/managed-composition.js +29 -13
- package/dist/managed-composition.js.map +1 -1
- package/dist/memory/instructions-middleware.d.ts.map +1 -1
- package/dist/memory/instructions-middleware.js +6 -5
- package/dist/memory/instructions-middleware.js.map +1 -1
- package/dist/namespaces.d.ts +4 -21
- package/dist/namespaces.d.ts.map +1 -1
- package/dist/namespaces.js +0 -29
- package/dist/namespaces.js.map +1 -1
- package/dist/resilience/retry.d.ts +21 -0
- package/dist/resilience/retry.d.ts.map +1 -0
- package/dist/resilience/retry.js +40 -0
- package/dist/resilience/retry.js.map +1 -0
- package/dist/runtime/async-subagents.d.ts +27 -0
- package/dist/runtime/async-subagents.d.ts.map +1 -0
- package/dist/runtime/async-subagents.js +139 -0
- package/dist/runtime/async-subagents.js.map +1 -0
- package/dist/runtime/auth.d.ts +1 -2
- package/dist/runtime/auth.d.ts.map +1 -1
- package/dist/runtime/auth.js +138 -72
- package/dist/runtime/auth.js.map +1 -1
- package/dist/runtime/backend.d.ts +9 -1
- package/dist/runtime/backend.d.ts.map +1 -1
- package/dist/runtime/backend.js +36 -11
- package/dist/runtime/backend.js.map +1 -1
- package/dist/runtime/browser-facade.d.ts +10 -0
- package/dist/runtime/browser-facade.d.ts.map +1 -0
- package/dist/runtime/browser-facade.js +23 -0
- package/dist/runtime/browser-facade.js.map +1 -0
- package/dist/runtime/browser-langsmith.d.ts +143 -0
- package/dist/runtime/browser-langsmith.d.ts.map +1 -0
- package/dist/runtime/browser-langsmith.js +507 -0
- package/dist/runtime/browser-langsmith.js.map +1 -0
- package/dist/runtime/browser-recorder.py +831 -0
- package/dist/runtime/browser-selection.d.ts +10 -0
- package/dist/runtime/browser-selection.d.ts.map +1 -0
- package/dist/runtime/browser-selection.js +21 -0
- package/dist/runtime/browser-selection.js.map +1 -0
- package/dist/runtime/browser.d.ts +138 -0
- package/dist/runtime/browser.d.ts.map +1 -0
- package/dist/runtime/browser.js +802 -0
- package/dist/runtime/browser.js.map +1 -0
- package/dist/runtime/channel-icon.d.ts.map +1 -1
- package/dist/runtime/channel-icon.js +18 -7
- package/dist/runtime/channel-icon.js.map +1 -1
- package/dist/runtime/channel.d.ts +5 -0
- package/dist/runtime/channel.d.ts.map +1 -1
- package/dist/runtime/channel.js.map +1 -1
- package/dist/runtime/graph-build-timing.d.ts +30 -0
- package/dist/runtime/graph-build-timing.d.ts.map +1 -0
- package/dist/runtime/graph-build-timing.js +50 -0
- package/dist/runtime/graph-build-timing.js.map +1 -0
- package/dist/runtime/http.d.ts +15 -0
- package/dist/runtime/http.d.ts.map +1 -1
- package/dist/runtime/http.js +37 -0
- package/dist/runtime/http.js.map +1 -1
- package/dist/runtime/identity-http.d.ts.map +1 -1
- package/dist/runtime/identity-http.js +19 -7
- package/dist/runtime/identity-http.js.map +1 -1
- package/dist/runtime/identity-runtime.d.ts +4 -9
- package/dist/runtime/identity-runtime.d.ts.map +1 -1
- package/dist/runtime/identity-runtime.js +12 -25
- package/dist/runtime/identity-runtime.js.map +1 -1
- package/dist/runtime/index.d.ts +38 -1
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/index.js +104 -52
- package/dist/runtime/index.js.map +1 -1
- package/dist/runtime/langsmith-env.d.ts +19 -0
- package/dist/runtime/langsmith-env.d.ts.map +1 -0
- package/dist/runtime/langsmith-env.js +38 -0
- package/dist/runtime/langsmith-env.js.map +1 -0
- package/dist/runtime/log.d.ts +8 -14
- package/dist/runtime/log.d.ts.map +1 -1
- package/dist/runtime/log.js +16 -7
- package/dist/runtime/log.js.map +1 -1
- package/dist/runtime/managed-middleware.d.ts.map +1 -1
- package/dist/runtime/managed-middleware.js +1 -14
- package/dist/runtime/managed-middleware.js.map +1 -1
- package/dist/runtime/managed-thread.d.ts +61 -0
- package/dist/runtime/managed-thread.d.ts.map +1 -0
- package/dist/runtime/managed-thread.js +76 -0
- package/dist/runtime/managed-thread.js.map +1 -0
- package/dist/runtime/managed-tools.d.ts +18 -2
- package/dist/runtime/managed-tools.d.ts.map +1 -1
- package/dist/runtime/managed-tools.js +26 -22
- package/dist/runtime/managed-tools.js.map +1 -1
- package/dist/runtime/memory/mounts.d.ts +82 -11
- package/dist/runtime/memory/mounts.d.ts.map +1 -1
- package/dist/runtime/memory/mounts.js +173 -34
- package/dist/runtime/memory/mounts.js.map +1 -1
- package/dist/runtime/memory/policy.d.ts.map +1 -1
- package/dist/runtime/memory/policy.js +1 -3
- package/dist/runtime/memory/policy.js.map +1 -1
- package/dist/runtime/parent-run.d.ts +33 -0
- package/dist/runtime/parent-run.d.ts.map +1 -0
- package/dist/runtime/parent-run.js +114 -0
- package/dist/runtime/parent-run.js.map +1 -0
- package/dist/runtime/run-input.d.ts +14 -1
- package/dist/runtime/run-input.d.ts.map +1 -1
- package/dist/runtime/run-input.js +118 -7
- package/dist/runtime/run-input.js.map +1 -1
- package/dist/runtime/sandbox-manager.d.ts +31 -17
- package/dist/runtime/sandbox-manager.d.ts.map +1 -1
- package/dist/runtime/sandbox-manager.js +112 -70
- package/dist/runtime/sandbox-manager.js.map +1 -1
- package/dist/runtime/schedule-auth.d.ts +79 -0
- package/dist/runtime/schedule-auth.d.ts.map +1 -1
- package/dist/runtime/schedule-auth.js +165 -7
- package/dist/runtime/schedule-auth.js.map +1 -1
- package/dist/runtime/selected-skills-backend.d.ts +3 -3
- package/dist/runtime/selected-skills-backend.d.ts.map +1 -1
- package/dist/runtime/selected-skills-backend.js +5 -5
- package/dist/runtime/selected-skills-backend.js.map +1 -1
- package/dist/runtime/static-entry.d.ts.map +1 -1
- package/dist/runtime/static-entry.js +1 -0
- package/dist/runtime/static-entry.js.map +1 -1
- package/dist/runtime/thread-record.d.ts +88 -0
- package/dist/runtime/thread-record.d.ts.map +1 -0
- package/dist/runtime/thread-record.js +213 -0
- package/dist/runtime/thread-record.js.map +1 -0
- package/dist/runtime/types.d.ts +12 -1
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/runtime-schedules.d.ts +15 -0
- package/dist/runtime-schedules.d.ts.map +1 -1
- package/dist/runtime-schedules.js +85 -23
- package/dist/runtime-schedules.js.map +1 -1
- package/dist/sandbox.d.ts +0 -6
- package/dist/sandbox.d.ts.map +1 -1
- package/dist/sandbox.js +3 -7
- package/dist/sandbox.js.map +1 -1
- package/dist/schedule-channel.d.ts +5 -2
- package/dist/schedule-channel.d.ts.map +1 -1
- package/dist/schedule-channel.js +13 -12
- package/dist/schedule-channel.js.map +1 -1
- package/dist/telemetry/lifecycle.d.ts +26 -0
- package/dist/telemetry/lifecycle.d.ts.map +1 -0
- package/dist/telemetry/lifecycle.js +49 -0
- package/dist/telemetry/lifecycle.js.map +1 -0
- package/dist/telemetry/metadata.d.ts.map +1 -1
- package/dist/telemetry/metadata.js +4 -4
- package/dist/telemetry/metadata.js.map +1 -1
- package/dist/telemetry/otel/context.d.ts +57 -0
- package/dist/telemetry/otel/context.d.ts.map +1 -0
- package/dist/telemetry/otel/context.js +122 -0
- package/dist/telemetry/otel/context.js.map +1 -0
- package/dist/telemetry/otel/exporter.d.ts +53 -0
- package/dist/telemetry/otel/exporter.d.ts.map +1 -0
- package/dist/telemetry/otel/exporter.js +190 -0
- package/dist/telemetry/otel/exporter.js.map +1 -0
- package/dist/telemetry/otel/index.d.ts +6 -0
- package/dist/telemetry/otel/index.d.ts.map +1 -0
- package/dist/telemetry/otel/index.js +3 -0
- package/dist/telemetry/otel/index.js.map +1 -0
- package/dist/telemetry/otel/otlp.d.ts +44 -0
- package/dist/telemetry/otel/otlp.d.ts.map +1 -0
- package/dist/telemetry/otel/otlp.js +7 -0
- package/dist/telemetry/otel/otlp.js.map +1 -0
- package/dist/telemetry/otel/truncate.d.ts +10 -0
- package/dist/telemetry/otel/truncate.d.ts.map +1 -0
- package/dist/telemetry/otel/truncate.js +39 -0
- package/dist/telemetry/otel/truncate.js.map +1 -0
- package/dist/telemetry/run-listener.d.ts +1 -1
- package/dist/telemetry/run-listener.d.ts.map +1 -1
- package/dist/telemetry/run-listener.js +32 -2
- package/dist/telemetry/run-listener.js.map +1 -1
- package/dist/telemetry/transport/posthog.d.ts +13 -1
- package/dist/telemetry/transport/posthog.d.ts.map +1 -1
- package/dist/telemetry/transport/posthog.js +68 -30
- package/dist/telemetry/transport/posthog.js.map +1 -1
- package/dist/types.d.ts +19 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/values.d.ts +15 -0
- package/dist/values.d.ts.map +1 -0
- package/dist/values.js +31 -0
- package/dist/values.js.map +1 -0
- package/package.json +26 -12
- package/dist/channels/http/forward.d.ts +0 -13
- package/dist/channels/http/forward.d.ts.map +0 -1
- package/dist/channels/http/forward.js +0 -128
- package/dist/channels/http/forward.js.map +0 -1
- package/dist/channels/http/reply.d.ts +0 -20
- package/dist/channels/http/reply.d.ts.map +0 -1
- package/dist/channels/http/reply.js +0 -116
- package/dist/channels/http/reply.js.map +0 -1
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import type { z } from "zod";
|
|
2
2
|
import type { MultitaskStrategy } from "../../ingress/runs.js";
|
|
3
|
-
import type { githubEventSchema } from "./schema.js";
|
|
3
|
+
import type { ENDPOINT_EVENT_FIELDS, githubEventSchema } from "./schema.js";
|
|
4
4
|
import type { ChannelRunResult } from "../run-input.js";
|
|
5
|
-
import type {
|
|
5
|
+
import type { GitHubActor } from "../actor.js";
|
|
6
|
+
import type { ResolveUser } from "../resolve-user.js";
|
|
7
|
+
import type { EventFinished, EventReceived } from "../http/provider.js";
|
|
8
|
+
import type { EndpointRequest, EventEndpoint } from "../http/endpoint.js";
|
|
6
9
|
/** Handwritten schema subsets; unmodeled provider fields remain unknown. */
|
|
7
10
|
type EventUnion = z.output<typeof githubEventSchema>;
|
|
8
11
|
export type SupportedEventKey = EventUnion["key"];
|
|
@@ -91,6 +94,11 @@ export interface GitHubChannelOptions {
|
|
|
91
94
|
* ```
|
|
92
95
|
*/
|
|
93
96
|
multitaskStrategy?: MultitaskStrategy;
|
|
97
|
+
/**
|
|
98
|
+
* Map the GitHub sender to one of your users, with a function or an endpoint MDA
|
|
99
|
+
* asks; overrides the identity's.
|
|
100
|
+
*/
|
|
101
|
+
resolveUser?: ResolveUser<GitHubActor> | EventEndpoint;
|
|
94
102
|
/**
|
|
95
103
|
* Event handlers that start runs. Return a prompt (string, message, or
|
|
96
104
|
* state), or nothing to skip. While a thread waits on an interrupt, events
|
|
@@ -98,49 +106,65 @@ export interface GitHubChannelOptions {
|
|
|
98
106
|
* decide whether the issue or pull request is told to continue it in
|
|
99
107
|
* LangSmith Studio.
|
|
100
108
|
*
|
|
109
|
+
* A handler may also be an endpoint, a URL or a `Request` carrying headers,
|
|
110
|
+
* to have a service of yours decide: MDA POSTs it the event and its thread,
|
|
111
|
+
* and starts the run it answers with. See the README's "Asking your service
|
|
112
|
+
* what to start".
|
|
113
|
+
*
|
|
101
114
|
* @example
|
|
102
115
|
* ```ts
|
|
103
|
-
* {
|
|
116
|
+
* {
|
|
117
|
+
* "issues.opened": (e) => `Help with #${e.payload.issue.number}`,
|
|
118
|
+
* "issue_comment.created": new Request(`${BACKEND}/github/runs`, {
|
|
119
|
+
* headers: { "x-api-key": process.env.BACKEND_KEY! },
|
|
120
|
+
* }),
|
|
121
|
+
* }
|
|
104
122
|
* ```
|
|
105
123
|
*/
|
|
106
124
|
onEvent?: {
|
|
107
|
-
[K in SupportedEventKey]?: GitHubEventCallback<K
|
|
125
|
+
[K in SupportedEventKey]?: GitHubEventCallback<K> | EventEndpoint;
|
|
108
126
|
};
|
|
109
127
|
/**
|
|
110
|
-
*
|
|
111
|
-
*
|
|
128
|
+
* A delivery of a handled event is done, once, with how, to switch on by
|
|
129
|
+
* `type`: the run it started and how that run ended, as LangGraph names it
|
|
130
|
+
* (`run`), why it started none (`skipped`, such as a handler that returned
|
|
131
|
+
* nothing), or that MDA lost it (`failed`); and the decisions the thread
|
|
132
|
+
* waits on. Called after the App's own notices, such
|
|
133
|
+
* as the comment that a decision is pending, in the background; failures
|
|
134
|
+
* are logged. See `channels.http`'s `onFinish` for its limits.
|
|
112
135
|
*
|
|
113
136
|
* @example
|
|
114
137
|
* ```ts
|
|
115
|
-
*
|
|
138
|
+
* onFinish: async (event, thread, finished) => {
|
|
139
|
+
* if (finished.type === "run" && finished.run.status === "success")
|
|
140
|
+
* await reportRun(thread.id, finished.run.id);
|
|
141
|
+
* }
|
|
116
142
|
* ```
|
|
117
143
|
*/
|
|
118
|
-
|
|
144
|
+
onFinish?: EventFinished<GitHubEvent, GitHubChannelThread>;
|
|
119
145
|
/**
|
|
120
|
-
*
|
|
121
|
-
*
|
|
122
|
-
*
|
|
123
|
-
*
|
|
124
|
-
*
|
|
125
|
-
*
|
|
126
|
-
*/
|
|
127
|
-
forward?: EventForward<GitHubEvent>;
|
|
128
|
-
/**
|
|
129
|
-
* How a delivery of a handled event ended, once: the run it started
|
|
130
|
-
* completed, stopped on interrupts, was cancelled, replaced, or failed, or
|
|
131
|
-
* why it started none, such as `declined` when its handler returned
|
|
132
|
-
* nothing. Called after the App's own notices, such as the comment that a
|
|
133
|
-
* decision is pending, in the background; failures are logged. See
|
|
134
|
-
* `channels.http`'s `onSettled` for its limits.
|
|
146
|
+
* A delivery of a handled event reached its thread, once, with the event
|
|
147
|
+
* and its thread, before MDA reads the thread or asks the handler: the
|
|
148
|
+
* moment to acknowledge it, such as with a 👀 reaction. It fires even when
|
|
149
|
+
* the thread then waits on an interrupt, or the handler declines, so apply
|
|
150
|
+
* your own filters, such as a mention check. In the background, before
|
|
151
|
+
* `onFinish`; failures are logged and don't stop the run.
|
|
135
152
|
*
|
|
136
153
|
* @example
|
|
137
154
|
* ```ts
|
|
138
|
-
*
|
|
139
|
-
* if ("
|
|
155
|
+
* onReceived: async (event) => {
|
|
156
|
+
* if (event.name === "issue_comment") await reactEyes(event);
|
|
140
157
|
* }
|
|
141
158
|
* ```
|
|
142
159
|
*/
|
|
143
|
-
|
|
160
|
+
onReceived?: EventReceived<GitHubEvent, GitHubChannelThread>;
|
|
144
161
|
}
|
|
162
|
+
/**
|
|
163
|
+
* What a GitHub channel POSTs an endpoint, for one event key or any: the
|
|
164
|
+
* event's key, delivery ID and payload, and, as a handler gets them, its
|
|
165
|
+
* `action`, `repository`, `sender` and the handles it `mentions`. Those are
|
|
166
|
+
* optional, so a receiver takes requests from older deployments.
|
|
167
|
+
*/
|
|
168
|
+
export type GitHubEndpointRequest<K extends SupportedEventKey = SupportedEventKey> = EndpointRequest<GitHubEvent<K>, (typeof ENDPOINT_EVENT_FIELDS)[number]>;
|
|
145
169
|
export {};
|
|
146
170
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/channels/github/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/channels/github/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import type { ChannelRunResult } from "../run-input.js";
|
|
3
|
+
/**
|
|
4
|
+
* The deployment's env var holding the secret it shares with your services:
|
|
5
|
+
* every endpoint request is signed with it, as Standard Webhooks does.
|
|
6
|
+
* Several, separated by whitespace or commas, each sign the request, for
|
|
7
|
+
* rotation.
|
|
8
|
+
*/
|
|
9
|
+
export declare const SERVICE_SECRET_ENV = "MDA_SERVICE_SECRET";
|
|
10
|
+
/**
|
|
11
|
+
* Where an `onEvent` key's events go when a service of yours decides what
|
|
12
|
+
* they start: its URL, or a `Request` that also carries headers, such as a
|
|
13
|
+
* credential the service checks. See {@link endpointHandler}.
|
|
14
|
+
*
|
|
15
|
+
* @experimental This may change in a minor release.
|
|
16
|
+
*/
|
|
17
|
+
export type EventEndpoint = string | URL | Request;
|
|
18
|
+
/** The key a Standard Webhooks secret stands for; a malformed one throws. */
|
|
19
|
+
export declare function signingKey(secret: string): Buffer;
|
|
20
|
+
/**
|
|
21
|
+
* The Standard Webhooks headers that sign one request with `keys`: none
|
|
22
|
+
* without a key. Each key signs `<id>.<timestamp>.<body>`.
|
|
23
|
+
*/
|
|
24
|
+
export declare function signatureHeaders(keys: readonly Buffer[], id: string, timestamp: number, body: string): Record<string, string>;
|
|
25
|
+
/** A channel's event, by the fields every endpoint is sent. */
|
|
26
|
+
type ChannelEvent = {
|
|
27
|
+
key: string;
|
|
28
|
+
deliveryId: string;
|
|
29
|
+
payload: unknown;
|
|
30
|
+
};
|
|
31
|
+
/** The fields of an event every endpoint is sent. */
|
|
32
|
+
declare const EVENT_FIELDS: readonly ["key", "deliveryId", "payload"];
|
|
33
|
+
/** A field any of a union of events has, such as a field of one kind only. */
|
|
34
|
+
export type EventField<E> = E extends unknown ? keyof E : never;
|
|
35
|
+
/**
|
|
36
|
+
* The event a channel sends its endpoint: the event key, the provider's
|
|
37
|
+
* delivery ID and its payload, and the channel's own fields `X`, such as
|
|
38
|
+
* GitHub's `repository` and `mentions`. A channel's own fields are optional,
|
|
39
|
+
* so a receiver takes requests from a deployment that sends fewer. For a
|
|
40
|
+
* union of events, each is typed by the key, with the fields of `X` it has.
|
|
41
|
+
*
|
|
42
|
+
* @experimental This may change in a minor release.
|
|
43
|
+
*/
|
|
44
|
+
export type EndpointEvent<E extends ChannelEvent = ChannelEvent, X extends PropertyKey = never> = E extends unknown ? Pick<E, (typeof EVENT_FIELDS)[number]> & Partial<Pick<E, Extract<X, keyof E>>> : never;
|
|
45
|
+
/**
|
|
46
|
+
* The conversation's thread an endpoint request is about.
|
|
47
|
+
*
|
|
48
|
+
* @experimental This may change in a minor release.
|
|
49
|
+
*/
|
|
50
|
+
export interface EndpointThread {
|
|
51
|
+
/** The thread the run starts on, or that waits on an interrupt. */
|
|
52
|
+
id: string;
|
|
53
|
+
channel: {
|
|
54
|
+
name: string;
|
|
55
|
+
};
|
|
56
|
+
/** Set when the thread waits on an interrupt: no run starts, whatever the answer. */
|
|
57
|
+
interrupted?: true;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* What a channel POSTs its endpoint: the event, and the thread it belongs to.
|
|
61
|
+
*
|
|
62
|
+
* @experimental This may change in a minor release.
|
|
63
|
+
*/
|
|
64
|
+
export interface EndpointRequest<E extends ChannelEvent = ChannelEvent, X extends PropertyKey = never> {
|
|
65
|
+
event: EndpointEvent<E, X>;
|
|
66
|
+
thread: EndpointThread;
|
|
67
|
+
}
|
|
68
|
+
declare const answerSchema: z.ZodObject<{
|
|
69
|
+
input: z.ZodUnion<readonly [z.ZodString, z.ZodRecord<z.ZodString, z.ZodCustom<import("../types.js").JsonValue, import("../types.js").JsonValue>>]>;
|
|
70
|
+
context: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodCustom<import("../types.js").JsonValue, import("../types.js").JsonValue>>>;
|
|
71
|
+
metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodCustom<import("../types.js").JsonValue, import("../types.js").JsonValue>>>;
|
|
72
|
+
webhook: z.ZodOptional<z.ZodString>;
|
|
73
|
+
}, z.core.$strict>;
|
|
74
|
+
/**
|
|
75
|
+
* What an endpoint answers: the run's input, as a handler returns it (text,
|
|
76
|
+
* or state such as `{ messages }`), with the run options a handler may set,
|
|
77
|
+
* all JSON. An endpoint answers `null` (or HTTP 204) instead to start nothing.
|
|
78
|
+
* The channel checks an answer against the same schema.
|
|
79
|
+
*
|
|
80
|
+
* @experimental This may change in a minor release.
|
|
81
|
+
*/
|
|
82
|
+
export type EndpointAnswer = z.infer<typeof answerSchema>;
|
|
83
|
+
/** The handler an endpoint stands for; see {@link endpointHandler}. */
|
|
84
|
+
export type EndpointCallback<E extends ChannelEvent = ChannelEvent> = (event: E, thread: EndpointThread) => Promise<ChannelRunResult | null>;
|
|
85
|
+
/** Whether a handler is one an endpoint stands for. */
|
|
86
|
+
export declare function isEndpointCallback(handler: unknown): boolean;
|
|
87
|
+
/** Whether an `onEvent` value is an endpoint rather than a handler function. */
|
|
88
|
+
export declare function isEventEndpoint(value: unknown): value is EventEndpoint;
|
|
89
|
+
/**
|
|
90
|
+
* The handler an endpoint stands for. When the event's thread takes a turn,
|
|
91
|
+
* MDA POSTs `{ event: { key, deliveryId, payload }, thread: { id, channel,
|
|
92
|
+
* interrupted? } }` as JSON to the endpoint's URL, with the event's `fields`,
|
|
93
|
+
* the channel's own, beside the payload, and a `Request`'s headers,
|
|
94
|
+
* signed when the deployment has `MDA_SERVICE_SECRET`, and starts the
|
|
95
|
+
* run the service answers with: `{ input, context?, metadata?, webhook? }`.
|
|
96
|
+
* `null` or HTTP 204 starts nothing. A network error before the answer, HTTP
|
|
97
|
+
* 429 or a 5xx is tried again, up to three attempts. Any other answer, one cut
|
|
98
|
+
* off, a redirect, or no answer within 60 seconds fails the handler, as a
|
|
99
|
+
* handler that throws does.
|
|
100
|
+
* The URL is https, or http to a loopback host for local development, without
|
|
101
|
+
* credentials in it.
|
|
102
|
+
*
|
|
103
|
+
* The webhook ID is `msg_<deliveryId>` for the call that starts the run, and
|
|
104
|
+
* `msg_<deliveryId>_interrupted` for the one that asks whether to tell the
|
|
105
|
+
* conversation its thread waits on a decision.
|
|
106
|
+
*/
|
|
107
|
+
export declare function endpointHandler<E extends ChannelEvent = ChannelEvent, X extends EventField<E> & string = never>(endpoint: EventEndpoint, label: string, fields?: readonly X[]): EndpointCallback<E>;
|
|
108
|
+
/** How long a service of yours may take, and how often MDA asks it. */
|
|
109
|
+
export interface EndpointLimits {
|
|
110
|
+
/**
|
|
111
|
+
* How long the service may take to answer: each attempt, or, with `total`,
|
|
112
|
+
* all of them and the pauses between.
|
|
113
|
+
*/
|
|
114
|
+
timeoutMs: number;
|
|
115
|
+
total?: boolean;
|
|
116
|
+
/**
|
|
117
|
+
* The pauses before trying again after a network error, HTTP 429 or a 5xx,
|
|
118
|
+
* each attempt with the same webhook ID, so a receiver that dedupes on it
|
|
119
|
+
* acts once.
|
|
120
|
+
*/
|
|
121
|
+
retryDelaysMs: readonly number[];
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Ask a service of yours: POST `body` as JSON, signed as webhook `id`, and
|
|
125
|
+
* return the JSON answer, or `null` for HTTP 204.
|
|
126
|
+
*/
|
|
127
|
+
export type AskEndpoint = (id: string, body: string, limits: EndpointLimits) => Promise<unknown>;
|
|
128
|
+
/**
|
|
129
|
+
* The client of a service of yours that `endpoint` names, with a `Request`'s
|
|
130
|
+
* headers, signed when the deployment has `MDA_SERVICE_SECRET`. A bad URL or
|
|
131
|
+
* secret throws here, when the endpoint is declared. Any answer but JSON or
|
|
132
|
+
* HTTP 204, one cut off, a redirect, or a timeout throws; errors call the
|
|
133
|
+
* service `name`, such as `event endpoint`.
|
|
134
|
+
*/
|
|
135
|
+
export declare function endpointClient(endpoint: EventEndpoint, label: string, name: string): AskEndpoint;
|
|
136
|
+
export {};
|
|
137
|
+
//# sourceMappingURL=endpoint.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"endpoint.d.ts","sourceRoot":"","sources":["../../../src/channels/http/endpoint.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Endpoints: an `onEvent` or `resolveUser` value that is a URL or a `Request`
|
|
3
|
+
* rather than a function. MDA asks that service of yours what the event starts,
|
|
4
|
+
* or who a delivery runs as, for logic that lives outside the deployment.
|
|
5
|
+
*/
|
|
6
|
+
import { createHmac } from "node:crypto";
|
|
7
|
+
import { z } from "zod";
|
|
8
|
+
import { jsonValueSchema } from "../message-schema.js";
|
|
9
|
+
/** An event endpoint's limits: three attempts, each of up to a minute. */
|
|
10
|
+
const EVENT_LIMITS = {
|
|
11
|
+
timeoutMs: 60_000,
|
|
12
|
+
retryDelaysMs: [1_000, 5_000],
|
|
13
|
+
};
|
|
14
|
+
/** The largest answer read; run input may carry images. */
|
|
15
|
+
const MAX_RESPONSE_BYTES = 10 * 1024 * 1024;
|
|
16
|
+
const ANSWER_SHAPE = "event endpoint answer must be null or { input, context?, metadata?, webhook? }";
|
|
17
|
+
/**
|
|
18
|
+
* The deployment's env var holding the secret it shares with your services:
|
|
19
|
+
* every endpoint request is signed with it, as Standard Webhooks does.
|
|
20
|
+
* Several, separated by whitespace or commas, each sign the request, for
|
|
21
|
+
* rotation.
|
|
22
|
+
*/
|
|
23
|
+
export const SERVICE_SECRET_ENV = "MDA_SERVICE_SECRET";
|
|
24
|
+
/** Standard Webhooks' optional secret prefix. */
|
|
25
|
+
const SECRET_PREFIX = "whsec_";
|
|
26
|
+
/** The key sizes Standard Webhooks allows, in bytes. */
|
|
27
|
+
const MIN_KEY_BYTES = 24;
|
|
28
|
+
const MAX_KEY_BYTES = 64;
|
|
29
|
+
const SECRET_SHAPE = `${SERVICE_SECRET_ENV} must hold Standard Webhooks secrets: padded base64 of 24 to 64 bytes, optionally prefixed with whsec_`;
|
|
30
|
+
let cachedKeys;
|
|
31
|
+
/** The signing keys `MDA_SERVICE_SECRET` holds; none when it's unset. */
|
|
32
|
+
function signingKeys() {
|
|
33
|
+
const secrets = process.env[SERVICE_SECRET_ENV]?.trim() ?? "";
|
|
34
|
+
if (cachedKeys?.secrets !== secrets)
|
|
35
|
+
cachedKeys = {
|
|
36
|
+
secrets,
|
|
37
|
+
// Stray separators, as rotation leaves behind, name no secret.
|
|
38
|
+
keys: secrets
|
|
39
|
+
.split(/[\s,]+/)
|
|
40
|
+
.filter(Boolean)
|
|
41
|
+
.map(signingKey),
|
|
42
|
+
};
|
|
43
|
+
return cachedKeys.keys;
|
|
44
|
+
}
|
|
45
|
+
/** The key a Standard Webhooks secret stands for; a malformed one throws. */
|
|
46
|
+
export function signingKey(secret) {
|
|
47
|
+
const encoded = secret.startsWith(SECRET_PREFIX)
|
|
48
|
+
? secret.slice(SECRET_PREFIX.length)
|
|
49
|
+
: secret;
|
|
50
|
+
// Buffer.from skips characters that aren't base64 and missing padding; the
|
|
51
|
+
// round trip refuses both, as Standard Webhooks libraries' decoders do.
|
|
52
|
+
const key = Buffer.from(encoded, "base64");
|
|
53
|
+
if (!encoded ||
|
|
54
|
+
key.toString("base64") !== encoded ||
|
|
55
|
+
key.byteLength < MIN_KEY_BYTES ||
|
|
56
|
+
key.byteLength > MAX_KEY_BYTES)
|
|
57
|
+
throw new TypeError(SECRET_SHAPE);
|
|
58
|
+
return key;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* The Standard Webhooks headers that sign one request with `keys`: none
|
|
62
|
+
* without a key. Each key signs `<id>.<timestamp>.<body>`.
|
|
63
|
+
*/
|
|
64
|
+
export function signatureHeaders(keys, id, timestamp, body) {
|
|
65
|
+
if (!keys.length)
|
|
66
|
+
return {};
|
|
67
|
+
const signed = `${id}.${timestamp}.${body}`;
|
|
68
|
+
return {
|
|
69
|
+
"webhook-id": id,
|
|
70
|
+
"webhook-timestamp": String(timestamp),
|
|
71
|
+
"webhook-signature": keys
|
|
72
|
+
.map((key) => `v1,${createHmac("sha256", key).update(signed).digest("base64")}`)
|
|
73
|
+
.join(" "),
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
/** The fields of an event every endpoint is sent. */
|
|
77
|
+
const EVENT_FIELDS = ["key", "deliveryId", "payload"];
|
|
78
|
+
const answerSchema = z.strictObject({
|
|
79
|
+
/**
|
|
80
|
+
* The run's input: text, or state such as `{ messages }`. Never an array,
|
|
81
|
+
* which a handler's `[input, options]` would be read as.
|
|
82
|
+
*/
|
|
83
|
+
input: z.union([z.string(), z.record(z.string(), jsonValueSchema)]),
|
|
84
|
+
/** Run context, as `agent.invoke(input, { context })` takes it. */
|
|
85
|
+
context: z.record(z.string(), jsonValueSchema).optional(),
|
|
86
|
+
/** Metadata for the run; see `ChannelRunOptions`. */
|
|
87
|
+
metadata: z.record(z.string(), jsonValueSchema).optional(),
|
|
88
|
+
/** A URL the Agent Server POSTs the finished run to; see `ChannelRunOptions`. */
|
|
89
|
+
webhook: z.string().optional(),
|
|
90
|
+
});
|
|
91
|
+
/** The handlers endpoints stand for, so a channel knows to answer first. */
|
|
92
|
+
const endpointCallbacks = new WeakSet();
|
|
93
|
+
/** Whether a handler is one an endpoint stands for. */
|
|
94
|
+
export function isEndpointCallback(handler) {
|
|
95
|
+
return typeof handler === "function" && endpointCallbacks.has(handler);
|
|
96
|
+
}
|
|
97
|
+
/** Whether an `onEvent` value is an endpoint rather than a handler function. */
|
|
98
|
+
export function isEventEndpoint(value) {
|
|
99
|
+
return (typeof value === "string" ||
|
|
100
|
+
value instanceof URL ||
|
|
101
|
+
value instanceof Request);
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* The handler an endpoint stands for. When the event's thread takes a turn,
|
|
105
|
+
* MDA POSTs `{ event: { key, deliveryId, payload }, thread: { id, channel,
|
|
106
|
+
* interrupted? } }` as JSON to the endpoint's URL, with the event's `fields`,
|
|
107
|
+
* the channel's own, beside the payload, and a `Request`'s headers,
|
|
108
|
+
* signed when the deployment has `MDA_SERVICE_SECRET`, and starts the
|
|
109
|
+
* run the service answers with: `{ input, context?, metadata?, webhook? }`.
|
|
110
|
+
* `null` or HTTP 204 starts nothing. A network error before the answer, HTTP
|
|
111
|
+
* 429 or a 5xx is tried again, up to three attempts. Any other answer, one cut
|
|
112
|
+
* off, a redirect, or no answer within 60 seconds fails the handler, as a
|
|
113
|
+
* handler that throws does.
|
|
114
|
+
* The URL is https, or http to a loopback host for local development, without
|
|
115
|
+
* credentials in it.
|
|
116
|
+
*
|
|
117
|
+
* The webhook ID is `msg_<deliveryId>` for the call that starts the run, and
|
|
118
|
+
* `msg_<deliveryId>_interrupted` for the one that asks whether to tell the
|
|
119
|
+
* conversation its thread waits on a decision.
|
|
120
|
+
*/
|
|
121
|
+
export function endpointHandler(endpoint, label, fields = []) {
|
|
122
|
+
const ask = endpointClient(endpoint, label, "event endpoint");
|
|
123
|
+
const sent = [...EVENT_FIELDS, ...fields];
|
|
124
|
+
const callback = async (event, thread) => {
|
|
125
|
+
const request = {
|
|
126
|
+
event: pick(event, sent),
|
|
127
|
+
thread: {
|
|
128
|
+
id: thread.id,
|
|
129
|
+
channel: { name: thread.channel.name },
|
|
130
|
+
...(thread.interrupted && { interrupted: true }),
|
|
131
|
+
},
|
|
132
|
+
};
|
|
133
|
+
const id = `msg_${event.deliveryId}${thread.interrupted ? "_interrupted" : ""}`;
|
|
134
|
+
return runResult(await ask(id, JSON.stringify(request), EVENT_LIMITS));
|
|
135
|
+
};
|
|
136
|
+
endpointCallbacks.add(callback);
|
|
137
|
+
return callback;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* The client of a service of yours that `endpoint` names, with a `Request`'s
|
|
141
|
+
* headers, signed when the deployment has `MDA_SERVICE_SECRET`. A bad URL or
|
|
142
|
+
* secret throws here, when the endpoint is declared. Any answer but JSON or
|
|
143
|
+
* HTTP 204, one cut off, a redirect, or a timeout throws; errors call the
|
|
144
|
+
* service `name`, such as `event endpoint`.
|
|
145
|
+
*/
|
|
146
|
+
export function endpointClient(endpoint, label, name) {
|
|
147
|
+
const template = endpoint instanceof Request ? endpoint : undefined;
|
|
148
|
+
const target = endpointUrl(template ? template.url : String(endpoint), label);
|
|
149
|
+
// A malformed secret throws when the endpoint is declared, not on each call.
|
|
150
|
+
signingKeys();
|
|
151
|
+
const baseHeaders = new Headers(template?.headers);
|
|
152
|
+
baseHeaders.set("content-type", "application/json");
|
|
153
|
+
baseHeaders.set("accept", "application/json");
|
|
154
|
+
return async (id, body, { timeoutMs, total, retryDelaysMs }) => {
|
|
155
|
+
const deadline = total ? AbortSignal.timeout(timeoutMs) : undefined;
|
|
156
|
+
for (let attempt = 0;; attempt++) {
|
|
157
|
+
const signal = deadline ?? AbortSignal.timeout(timeoutMs);
|
|
158
|
+
const response = await post(target, baseHeaders, id, body, signal).catch((error) => {
|
|
159
|
+
// A timeout isn't tried again: the service may still be acting on it.
|
|
160
|
+
if (attempt < retryDelaysMs.length && !isTimeout(error))
|
|
161
|
+
return undefined;
|
|
162
|
+
throw error;
|
|
163
|
+
});
|
|
164
|
+
if (response?.status === 204) {
|
|
165
|
+
await response.body?.cancel();
|
|
166
|
+
return null;
|
|
167
|
+
}
|
|
168
|
+
if (response?.ok)
|
|
169
|
+
return boundedJson(response, name);
|
|
170
|
+
await response?.body?.cancel();
|
|
171
|
+
if (response &&
|
|
172
|
+
(attempt >= retryDelaysMs.length || !retried(response.status)))
|
|
173
|
+
throw new Error(`${name} answered HTTP ${response.status}`);
|
|
174
|
+
await sleep(retryDelaysMs[attempt]);
|
|
175
|
+
}
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
/** The event's `fields`; an absent one stays absent. */
|
|
179
|
+
function pick(event, fields) {
|
|
180
|
+
const picked = {};
|
|
181
|
+
for (const field of fields)
|
|
182
|
+
if (event[field] !== undefined)
|
|
183
|
+
picked[field] = event[field];
|
|
184
|
+
// Every field of `EVENT_FIELDS` is one of `fields`.
|
|
185
|
+
return picked;
|
|
186
|
+
}
|
|
187
|
+
/** One attempt, signed afresh: Standard Webhooks timestamps each. */
|
|
188
|
+
function post(target, baseHeaders, id, body, signal) {
|
|
189
|
+
const headers = new Headers(baseHeaders);
|
|
190
|
+
const signature = signatureHeaders(signingKeys(), id, Math.floor(Date.now() / 1000), body);
|
|
191
|
+
for (const [name, value] of Object.entries(signature))
|
|
192
|
+
headers.set(name, value);
|
|
193
|
+
return fetch(target, {
|
|
194
|
+
method: "POST",
|
|
195
|
+
headers,
|
|
196
|
+
body,
|
|
197
|
+
redirect: "manual",
|
|
198
|
+
signal,
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
/** Whether an answer's status is worth trying again. */
|
|
202
|
+
function retried(status) {
|
|
203
|
+
return status === 429 || status >= 500;
|
|
204
|
+
}
|
|
205
|
+
function isTimeout(error) {
|
|
206
|
+
return error instanceof DOMException && error.name === "TimeoutError";
|
|
207
|
+
}
|
|
208
|
+
function sleep(ms) {
|
|
209
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* The endpoint's URL. Plain http only reaches a loopback host: the answer
|
|
213
|
+
* isn't signed, so anyone on the path could write the run's input otherwise.
|
|
214
|
+
*/
|
|
215
|
+
function endpointUrl(url, label) {
|
|
216
|
+
let parsed;
|
|
217
|
+
try {
|
|
218
|
+
parsed = new URL(url);
|
|
219
|
+
}
|
|
220
|
+
catch {
|
|
221
|
+
parsed = undefined;
|
|
222
|
+
}
|
|
223
|
+
if (!parsed ||
|
|
224
|
+
!(parsed.protocol === "https:" ||
|
|
225
|
+
(parsed.protocol === "http:" && isLoopback(parsed.hostname))) ||
|
|
226
|
+
parsed.username ||
|
|
227
|
+
parsed.password)
|
|
228
|
+
throw new TypeError(`${label} must be an absolute https URL, or http to localhost, without credentials in it`);
|
|
229
|
+
return parsed.href;
|
|
230
|
+
}
|
|
231
|
+
/** Whether a URL's hostname is this machine. */
|
|
232
|
+
function isLoopback(hostname) {
|
|
233
|
+
return (hostname === "localhost" ||
|
|
234
|
+
hostname.endsWith(".localhost") ||
|
|
235
|
+
hostname === "[::1]" ||
|
|
236
|
+
/^127\.\d{1,3}\.\d{1,3}\.\d{1,3}$/.test(hostname));
|
|
237
|
+
}
|
|
238
|
+
/** The answer as JSON, read only up to `MAX_RESPONSE_BYTES`. */
|
|
239
|
+
async function boundedJson(response, name) {
|
|
240
|
+
const declared = Number(response.headers.get("content-length"));
|
|
241
|
+
if (declared > MAX_RESPONSE_BYTES) {
|
|
242
|
+
await response.body?.cancel();
|
|
243
|
+
throw new Error(`${name} answer is too large`);
|
|
244
|
+
}
|
|
245
|
+
const reader = response.body?.getReader();
|
|
246
|
+
const chunks = [];
|
|
247
|
+
let size = 0;
|
|
248
|
+
for (;;) {
|
|
249
|
+
const chunk = await reader?.read();
|
|
250
|
+
if (!chunk || chunk.done)
|
|
251
|
+
break;
|
|
252
|
+
size += chunk.value.byteLength;
|
|
253
|
+
if (size > MAX_RESPONSE_BYTES) {
|
|
254
|
+
await reader?.cancel();
|
|
255
|
+
throw new Error(`${name} answer is too large`);
|
|
256
|
+
}
|
|
257
|
+
chunks.push(chunk.value);
|
|
258
|
+
}
|
|
259
|
+
const text = new TextDecoder().decode(chunks.length === 1 ? chunks[0] : concat(chunks, size));
|
|
260
|
+
try {
|
|
261
|
+
return JSON.parse(text);
|
|
262
|
+
}
|
|
263
|
+
catch {
|
|
264
|
+
throw new Error(`${name} answer is not JSON`);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
function concat(chunks, size) {
|
|
268
|
+
const joined = new Uint8Array(size);
|
|
269
|
+
let offset = 0;
|
|
270
|
+
for (const chunk of chunks) {
|
|
271
|
+
joined.set(chunk, offset);
|
|
272
|
+
offset += chunk.byteLength;
|
|
273
|
+
}
|
|
274
|
+
return joined;
|
|
275
|
+
}
|
|
276
|
+
/** The run the answer names; the channel checks the input and options as a handler's. */
|
|
277
|
+
function runResult(body) {
|
|
278
|
+
const parsed = answerSchema.nullable().safeParse(body);
|
|
279
|
+
if (!parsed.success)
|
|
280
|
+
throw new Error(ANSWER_SHAPE);
|
|
281
|
+
if (parsed.data === null)
|
|
282
|
+
return null;
|
|
283
|
+
const { input, ...options } = parsed.data;
|
|
284
|
+
return [input, options];
|
|
285
|
+
}
|
|
286
|
+
//# sourceMappingURL=endpoint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"endpoint.js","sourceRoot":"","sources":["../../../src/channels/http/endpoint.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../../src/channels/http/http.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../../src/channels/http/http.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EACV,kBAAkB,EAOnB,MAAM,YAAY,CAAC;AAmBpB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAyCrE,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,oBAAoB,EACzB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,QAAQ,CAAC,CA2cnB"}
|