managed-deepagents 0.4.2 → 0.4.3-dev.95
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 +78 -35
- package/dist/channels/assistant-text.js +1 -1
- package/dist/channels/assistant-text.js.map +1 -1
- package/dist/channels/binding.d.ts.map +1 -1
- package/dist/channels/binding.js +3 -1
- package/dist/channels/binding.js.map +1 -1
- package/dist/channels/index.d.ts +7 -8
- package/dist/channels/index.d.ts.map +1 -1
- package/dist/channels/index.js +6 -5
- package/dist/channels/index.js.map +1 -1
- package/dist/channels/manifest.d.ts +7 -4
- package/dist/channels/manifest.d.ts.map +1 -1
- package/dist/channels/messaging-registry.d.ts +21 -0
- package/dist/channels/messaging-registry.d.ts.map +1 -0
- package/dist/channels/messaging-registry.js +50 -0
- package/dist/channels/messaging-registry.js.map +1 -0
- package/dist/channels/registry-types.d.ts +1 -1
- package/dist/channels/registry.d.ts +4 -3
- package/dist/channels/registry.d.ts.map +1 -1
- package/dist/channels/registry.js +5 -6
- package/dist/channels/registry.js.map +1 -1
- package/dist/channels/schedule-delivery.d.ts +4 -1
- package/dist/channels/schedule-delivery.d.ts.map +1 -1
- package/dist/channels/schedule-delivery.js +3 -1
- package/dist/channels/schedule-delivery.js.map +1 -1
- package/dist/channels/slack/adapter.d.ts +1 -2
- package/dist/channels/slack/adapter.d.ts.map +1 -1
- package/dist/channels/slack/adapter.js +0 -2
- package/dist/channels/slack/adapter.js.map +1 -1
- package/dist/channels/slack/http.d.ts +7 -39
- package/dist/channels/slack/http.d.ts.map +1 -1
- package/dist/channels/slack/http.js +64 -122
- package/dist/channels/slack/http.js.map +1 -1
- package/dist/channels/slack/index.d.ts +94 -8
- package/dist/channels/slack/index.d.ts.map +1 -1
- package/dist/channels/slack/index.js +144 -6
- package/dist/channels/slack/index.js.map +1 -1
- package/dist/channels/slack/normalize.d.ts +6 -4
- package/dist/channels/slack/normalize.d.ts.map +1 -1
- package/dist/channels/slack/normalize.js +61 -28
- package/dist/channels/slack/normalize.js.map +1 -1
- package/dist/channels/slack/transport.d.ts.map +1 -1
- package/dist/channels/slack/transport.js +3 -2
- package/dist/channels/slack/transport.js.map +1 -1
- package/dist/channels/store.d.ts +14 -0
- package/dist/channels/store.d.ts.map +1 -1
- package/dist/channels/store.js +41 -27
- package/dist/channels/store.js.map +1 -1
- package/dist/connectors/marketplace/catalog.d.ts +96 -0
- package/dist/connectors/marketplace/catalog.d.ts.map +1 -0
- package/dist/connectors/marketplace/catalog.js +213 -0
- package/dist/connectors/marketplace/catalog.js.map +1 -0
- package/dist/connectors/marketplace/fleet-mcp.d.ts +62 -0
- package/dist/connectors/marketplace/fleet-mcp.d.ts.map +1 -0
- package/dist/connectors/marketplace/fleet-mcp.js +215 -0
- package/dist/connectors/marketplace/fleet-mcp.js.map +1 -0
- package/dist/connectors/marketplace/index.d.ts +31 -0
- package/dist/connectors/marketplace/index.d.ts.map +1 -0
- package/dist/connectors/marketplace/index.js +39 -0
- package/dist/connectors/marketplace/index.js.map +1 -0
- package/dist/connectors/marketplace/load.d.ts +14 -0
- package/dist/connectors/marketplace/load.d.ts.map +1 -0
- package/dist/connectors/marketplace/load.js +206 -0
- package/dist/connectors/marketplace/load.js.map +1 -0
- package/dist/connectors/mcp/index.d.ts +13 -20
- package/dist/connectors/mcp/index.d.ts.map +1 -1
- package/dist/connectors/mcp/index.js +92 -112
- package/dist/connectors/mcp/index.js.map +1 -1
- package/dist/connectors/mcp/load.d.ts.map +1 -1
- package/dist/connectors/mcp/load.js +16 -40
- package/dist/connectors/mcp/load.js.map +1 -1
- package/dist/connectors/slack/index.d.ts +24 -0
- package/dist/connectors/slack/index.d.ts.map +1 -0
- package/dist/connectors/slack/index.js +64 -0
- package/dist/connectors/slack/index.js.map +1 -0
- package/dist/connectors/tool-selection.d.ts +55 -0
- package/dist/connectors/tool-selection.d.ts.map +1 -0
- package/dist/connectors/tool-selection.js +112 -0
- package/dist/connectors/tool-selection.js.map +1 -0
- package/dist/connectors/toolserver/catalog.d.ts +326 -0
- package/dist/connectors/toolserver/catalog.d.ts.map +1 -0
- package/dist/connectors/toolserver/catalog.js +415 -0
- package/dist/connectors/toolserver/catalog.js.map +1 -0
- package/dist/connectors/toolserver/connectors.d.ts +698 -0
- package/dist/connectors/toolserver/connectors.d.ts.map +1 -0
- package/dist/connectors/toolserver/connectors.js +13 -0
- package/dist/connectors/toolserver/connectors.js.map +1 -0
- package/dist/connectors/toolserver/index.d.ts +142 -0
- package/dist/connectors/toolserver/index.d.ts.map +1 -0
- package/dist/connectors/toolserver/index.js +105 -0
- package/dist/connectors/toolserver/index.js.map +1 -0
- package/dist/connectors/toolserver/integrations.d.ts +103 -0
- package/dist/connectors/toolserver/integrations.d.ts.map +1 -0
- package/dist/connectors/toolserver/integrations.js +288 -0
- package/dist/connectors/toolserver/integrations.js.map +1 -0
- package/dist/connectors/toolserver/load.d.ts +55 -0
- package/dist/connectors/toolserver/load.d.ts.map +1 -0
- package/dist/connectors/toolserver/load.js +289 -0
- package/dist/connectors/toolserver/load.js.map +1 -0
- package/dist/define-deep-agent.d.ts.map +1 -1
- package/dist/define-deep-agent.js +9 -3
- package/dist/define-deep-agent.js.map +1 -1
- package/dist/extension.d.ts +69 -0
- package/dist/extension.d.ts.map +1 -0
- package/dist/extension.js +108 -0
- package/dist/extension.js.map +1 -0
- package/dist/identity/actor-subject.d.ts +60 -0
- package/dist/identity/actor-subject.d.ts.map +1 -0
- package/dist/identity/actor-subject.js +107 -0
- package/dist/identity/actor-subject.js.map +1 -0
- package/dist/identity/byo-oauth.d.ts +105 -0
- package/dist/identity/byo-oauth.d.ts.map +1 -0
- package/dist/identity/byo-oauth.js +190 -0
- package/dist/identity/byo-oauth.js.map +1 -0
- package/dist/identity/claims.d.ts +16 -0
- package/dist/identity/claims.d.ts.map +1 -0
- package/dist/identity/claims.js +33 -0
- package/dist/identity/claims.js.map +1 -0
- package/dist/identity/connect-inference.d.ts +37 -0
- package/dist/identity/connect-inference.d.ts.map +1 -0
- package/dist/identity/connect-inference.js +53 -0
- package/dist/identity/connect-inference.js.map +1 -0
- package/dist/identity/connect-provider-types.d.ts +35 -6
- package/dist/identity/connect-provider-types.d.ts.map +1 -1
- package/dist/identity/connect-provider-types.js +3 -1
- package/dist/identity/connect-provider-types.js.map +1 -1
- package/dist/identity/connect-provider.d.ts +9 -4
- package/dist/identity/connect-provider.d.ts.map +1 -1
- package/dist/identity/connect-provider.js +39 -13
- package/dist/identity/connect-provider.js.map +1 -1
- package/dist/identity/credential-resolvers.d.ts +33 -0
- package/dist/identity/credential-resolvers.d.ts.map +1 -0
- package/dist/identity/credential-resolvers.js +62 -0
- package/dist/identity/credential-resolvers.js.map +1 -0
- package/dist/identity/define-fleet-connect.d.ts +53 -0
- package/dist/identity/define-fleet-connect.d.ts.map +1 -0
- package/dist/identity/define-fleet-connect.js +76 -0
- package/dist/identity/define-fleet-connect.js.map +1 -0
- package/dist/identity/fleet-connect-hint.d.ts +41 -0
- package/dist/identity/fleet-connect-hint.d.ts.map +1 -0
- package/dist/identity/fleet-connect-hint.js +190 -0
- package/dist/identity/fleet-connect-hint.js.map +1 -0
- package/dist/identity/fleet-connect.d.ts +93 -0
- package/dist/identity/fleet-connect.d.ts.map +1 -0
- package/dist/identity/fleet-connect.js +256 -0
- package/dist/identity/fleet-connect.js.map +1 -0
- package/dist/identity/fleet-integration-connect.d.ts +32 -0
- package/dist/identity/fleet-integration-connect.d.ts.map +1 -0
- package/dist/identity/fleet-integration-connect.js +35 -0
- package/dist/identity/fleet-integration-connect.js.map +1 -0
- package/dist/identity/fleet.d.ts +56 -0
- package/dist/identity/fleet.d.ts.map +1 -0
- package/dist/identity/fleet.js +131 -0
- package/dist/identity/fleet.js.map +1 -0
- package/dist/identity/github/connect-http.d.ts +8 -4
- package/dist/identity/github/connect-http.d.ts.map +1 -1
- package/dist/identity/github/connect-http.js +32 -15
- package/dist/identity/github/connect-http.js.map +1 -1
- package/dist/identity/github/credentials-store.d.ts +10 -10
- package/dist/identity/github/credentials-store.d.ts.map +1 -1
- package/dist/identity/github/credentials-store.js +62 -49
- package/dist/identity/github/credentials-store.js.map +1 -1
- package/dist/identity/github/credentials.d.ts +16 -13
- package/dist/identity/github/credentials.d.ts.map +1 -1
- package/dist/identity/github/credentials.js +43 -23
- package/dist/identity/github/credentials.js.map +1 -1
- package/dist/identity/github/index.d.ts +1 -4
- package/dist/identity/github/index.d.ts.map +1 -1
- package/dist/identity/github/index.js +0 -3
- package/dist/identity/github/index.js.map +1 -1
- package/dist/identity/github/oauth.d.ts +18 -20
- package/dist/identity/github/oauth.d.ts.map +1 -1
- package/dist/identity/github/oauth.js +90 -109
- package/dist/identity/github/oauth.js.map +1 -1
- package/dist/identity/google/connect-http.d.ts +37 -0
- package/dist/identity/google/connect-http.d.ts.map +1 -0
- package/dist/identity/google/connect-http.js +42 -0
- package/dist/identity/google/connect-http.js.map +1 -0
- package/dist/identity/google/index.d.ts +7 -0
- package/dist/identity/google/index.d.ts.map +1 -0
- package/dist/identity/google/index.js +6 -0
- package/dist/identity/google/index.js.map +1 -0
- package/dist/identity/google/oauth.d.ts +22 -0
- package/dist/identity/google/oauth.d.ts.map +1 -0
- package/dist/identity/google/oauth.js +48 -0
- package/dist/identity/google/oauth.js.map +1 -0
- package/dist/identity/index.d.ts +40 -64
- package/dist/identity/index.d.ts.map +1 -1
- package/dist/identity/index.js +104 -243
- package/dist/identity/index.js.map +1 -1
- package/dist/identity/linkedin/connect-http.d.ts +37 -0
- package/dist/identity/linkedin/connect-http.d.ts.map +1 -0
- package/dist/identity/linkedin/connect-http.js +41 -0
- package/dist/identity/linkedin/connect-http.js.map +1 -0
- package/dist/identity/linkedin/index.d.ts +7 -0
- package/dist/identity/linkedin/index.d.ts.map +1 -0
- package/dist/identity/linkedin/index.js +6 -0
- package/dist/identity/linkedin/index.js.map +1 -0
- package/dist/identity/linkedin/oauth.d.ts +22 -0
- package/dist/identity/linkedin/oauth.d.ts.map +1 -0
- package/dist/identity/linkedin/oauth.js +47 -0
- package/dist/identity/linkedin/oauth.js.map +1 -0
- package/dist/identity/loopback.d.ts +27 -2
- package/dist/identity/loopback.d.ts.map +1 -1
- package/dist/identity/loopback.js +61 -8
- package/dist/identity/loopback.js.map +1 -1
- package/dist/identity/marketplace/connect-hint.d.ts +31 -0
- package/dist/identity/marketplace/connect-hint.d.ts.map +1 -0
- package/dist/identity/marketplace/connect-hint.js +59 -0
- package/dist/identity/marketplace/connect-hint.js.map +1 -0
- package/dist/identity/marketplace/connect.d.ts +51 -0
- package/dist/identity/marketplace/connect.d.ts.map +1 -0
- package/dist/identity/marketplace/connect.js +88 -0
- package/dist/identity/marketplace/connect.js.map +1 -0
- package/dist/identity/marketplace/index.d.ts +9 -0
- package/dist/identity/marketplace/index.d.ts.map +1 -0
- package/dist/identity/marketplace/index.js +9 -0
- package/dist/identity/marketplace/index.js.map +1 -0
- package/dist/identity/microsoft/connect-http.d.ts +38 -0
- package/dist/identity/microsoft/connect-http.d.ts.map +1 -0
- package/dist/identity/microsoft/connect-http.js +42 -0
- package/dist/identity/microsoft/connect-http.js.map +1 -0
- package/dist/identity/microsoft/index.d.ts +7 -0
- package/dist/identity/microsoft/index.d.ts.map +1 -0
- package/dist/identity/microsoft/index.js +6 -0
- package/dist/identity/microsoft/index.js.map +1 -0
- package/dist/identity/microsoft/oauth.d.ts +24 -0
- package/dist/identity/microsoft/oauth.d.ts.map +1 -0
- package/dist/identity/microsoft/oauth.js +65 -0
- package/dist/identity/microsoft/oauth.js.map +1 -0
- package/dist/identity/oauth-env.d.ts +43 -0
- package/dist/identity/oauth-env.d.ts.map +1 -0
- package/dist/identity/oauth-env.js +66 -0
- package/dist/identity/oauth-env.js.map +1 -0
- package/dist/identity/oauth-tickets.d.ts +37 -0
- package/dist/identity/oauth-tickets.d.ts.map +1 -0
- package/dist/identity/oauth-tickets.js +114 -0
- package/dist/identity/oauth-tickets.js.map +1 -0
- package/dist/identity/options.d.ts +35 -0
- package/dist/identity/options.d.ts.map +1 -0
- package/dist/identity/options.js +80 -0
- package/dist/identity/options.js.map +1 -0
- package/dist/identity/slack/connect-http.d.ts +6 -4
- package/dist/identity/slack/connect-http.d.ts.map +1 -1
- package/dist/identity/slack/connect-http.js +27 -17
- package/dist/identity/slack/connect-http.js.map +1 -1
- package/dist/identity/slack/index.d.ts +1 -2
- package/dist/identity/slack/index.d.ts.map +1 -1
- package/dist/identity/slack/index.js +1 -2
- package/dist/identity/slack/index.js.map +1 -1
- package/dist/identity/slack/links.d.ts +18 -17
- package/dist/identity/slack/links.d.ts.map +1 -1
- package/dist/identity/slack/links.js +75 -61
- package/dist/identity/slack/links.js.map +1 -1
- package/dist/identity/slack/oauth.d.ts +3 -35
- package/dist/identity/slack/oauth.d.ts.map +1 -1
- package/dist/identity/slack/oauth.js +9 -115
- package/dist/identity/slack/oauth.js.map +1 -1
- package/dist/identity/supabase.js +9 -9
- package/dist/identity/supabase.js.map +1 -1
- package/dist/identity/types.d.ts +91 -54
- package/dist/identity/types.d.ts.map +1 -1
- package/dist/identity/x/connect-http.d.ts +38 -0
- package/dist/identity/x/connect-http.d.ts.map +1 -0
- package/dist/identity/x/connect-http.js +41 -0
- package/dist/identity/x/connect-http.js.map +1 -0
- package/dist/identity/x/index.d.ts +6 -0
- package/dist/identity/x/index.d.ts.map +1 -0
- package/dist/identity/x/index.js +5 -0
- package/dist/identity/x/index.js.map +1 -0
- package/dist/index.d.ts +9 -20
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -11
- package/dist/index.js.map +1 -1
- package/dist/ingress/index.d.ts +52 -0
- package/dist/ingress/index.d.ts.map +1 -0
- package/dist/ingress/index.js +139 -0
- package/dist/ingress/index.js.map +1 -0
- package/dist/memory/define-memory.d.ts +39 -0
- package/dist/memory/define-memory.d.ts.map +1 -0
- package/dist/memory/define-memory.js +78 -0
- package/dist/memory/define-memory.js.map +1 -0
- package/dist/memory/index.d.ts +9 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +8 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/memory/instructions-middleware.d.ts +74 -0
- package/dist/memory/instructions-middleware.d.ts.map +1 -0
- package/dist/memory/instructions-middleware.js +115 -0
- package/dist/memory/instructions-middleware.js.map +1 -0
- package/dist/memory/slices.d.ts +21 -0
- package/dist/memory/slices.d.ts.map +1 -0
- package/dist/memory/slices.js +61 -0
- package/dist/memory/slices.js.map +1 -0
- package/dist/memory/types.d.ts +71 -0
- package/dist/memory/types.d.ts.map +1 -0
- package/dist/memory/types.js +10 -0
- package/dist/memory/types.js.map +1 -0
- package/dist/namespaces.d.ts +262 -0
- package/dist/namespaces.d.ts.map +1 -0
- package/dist/namespaces.js +101 -0
- package/dist/namespaces.js.map +1 -0
- package/dist/runtime/auth.d.ts +46 -32
- package/dist/runtime/auth.d.ts.map +1 -1
- package/dist/runtime/auth.js +234 -125
- package/dist/runtime/auth.js.map +1 -1
- package/dist/runtime/backend.d.ts +1 -1
- package/dist/runtime/backend.d.ts.map +1 -1
- package/dist/runtime/backend.js +26 -5
- package/dist/runtime/backend.js.map +1 -1
- package/dist/runtime/channel.d.ts +91 -0
- package/dist/runtime/channel.d.ts.map +1 -0
- package/dist/runtime/channel.js +98 -0
- package/dist/runtime/channel.js.map +1 -0
- package/dist/runtime/connector.d.ts +66 -23
- package/dist/runtime/connector.d.ts.map +1 -1
- package/dist/runtime/connector.js +67 -27
- package/dist/runtime/connector.js.map +1 -1
- package/dist/runtime/cors.d.ts +12 -3
- package/dist/runtime/cors.d.ts.map +1 -1
- package/dist/runtime/cors.js +23 -5
- package/dist/runtime/cors.js.map +1 -1
- package/dist/runtime/credentials.d.ts +8 -8
- package/dist/runtime/credentials.d.ts.map +1 -1
- package/dist/runtime/credentials.js +46 -23
- package/dist/runtime/credentials.js.map +1 -1
- package/dist/runtime/http.d.ts +46 -0
- package/dist/runtime/http.d.ts.map +1 -0
- package/dist/runtime/http.js +53 -0
- package/dist/runtime/http.js.map +1 -0
- package/dist/runtime/identity-http.d.ts +13 -20
- package/dist/runtime/identity-http.d.ts.map +1 -1
- package/dist/runtime/identity-http.js +158 -75
- package/dist/runtime/identity-http.js.map +1 -1
- package/dist/runtime/identity-runtime.d.ts +12 -28
- package/dist/runtime/identity-runtime.d.ts.map +1 -1
- package/dist/runtime/identity-runtime.js +35 -72
- package/dist/runtime/identity-runtime.js.map +1 -1
- package/dist/runtime/index.d.ts +89 -225
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/index.js +92 -61
- package/dist/runtime/index.js.map +1 -1
- package/dist/runtime/memory/index.d.ts +0 -2
- package/dist/runtime/memory/index.d.ts.map +1 -1
- package/dist/runtime/memory/index.js +0 -2
- package/dist/runtime/memory/index.js.map +1 -1
- package/dist/runtime/memory/mounts.d.ts +4 -12
- package/dist/runtime/memory/mounts.d.ts.map +1 -1
- package/dist/runtime/memory/mounts.js +9 -20
- package/dist/runtime/memory/mounts.js.map +1 -1
- package/dist/runtime/recursion-limit.d.ts +22 -0
- package/dist/runtime/recursion-limit.d.ts.map +1 -0
- package/dist/runtime/recursion-limit.js +46 -0
- package/dist/runtime/recursion-limit.js.map +1 -0
- package/dist/runtime/sandbox-manager.d.ts +60 -3
- package/dist/runtime/sandbox-manager.d.ts.map +1 -1
- package/dist/runtime/sandbox-manager.js +326 -26
- package/dist/runtime/sandbox-manager.js.map +1 -1
- package/dist/runtime/sandbox-stream-retry.d.ts +18 -0
- package/dist/runtime/sandbox-stream-retry.d.ts.map +1 -0
- package/dist/runtime/sandbox-stream-retry.js +90 -0
- package/dist/runtime/sandbox-stream-retry.js.map +1 -0
- package/dist/runtime/setup-script.d.ts.map +1 -1
- package/dist/runtime/setup-script.js +16 -2
- package/dist/runtime/setup-script.js.map +1 -1
- package/dist/runtime/types.d.ts +16 -0
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/runtime/validated-token.d.ts +9 -14
- package/dist/runtime/validated-token.d.ts.map +1 -1
- package/dist/runtime/validated-token.js +79 -106
- package/dist/runtime/validated-token.js.map +1 -1
- package/dist/sandbox.d.ts +17 -42
- package/dist/sandbox.d.ts.map +1 -1
- package/dist/sandbox.js +11 -32
- package/dist/sandbox.js.map +1 -1
- package/dist/schedules.js +8 -9
- package/dist/schedules.js.map +1 -1
- package/dist/types.d.ts +4 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +22 -29
- package/dist/channels/collect.d.ts +0 -26
- package/dist/channels/collect.d.ts.map +0 -1
- package/dist/channels/collect.js +0 -42
- package/dist/channels/collect.js.map +0 -1
- package/dist/channels/github/adapter-core.d.ts +0 -6
- package/dist/channels/github/adapter-core.d.ts.map +0 -1
- package/dist/channels/github/adapter-core.js +0 -27
- package/dist/channels/github/adapter-core.js.map +0 -1
- package/dist/channels/github/adapter.d.ts +0 -16
- package/dist/channels/github/adapter.d.ts.map +0 -1
- package/dist/channels/github/adapter.js +0 -52
- package/dist/channels/github/adapter.js.map +0 -1
- package/dist/channels/github/define.d.ts +0 -198
- package/dist/channels/github/define.d.ts.map +0 -1
- package/dist/channels/github/define.js +0 -166
- package/dist/channels/github/define.js.map +0 -1
- package/dist/channels/github/http.d.ts +0 -25
- package/dist/channels/github/http.d.ts.map +0 -1
- package/dist/channels/github/http.js +0 -147
- package/dist/channels/github/http.js.map +0 -1
- package/dist/channels/github/index.d.ts +0 -12
- package/dist/channels/github/index.d.ts.map +0 -1
- package/dist/channels/github/index.js +0 -10
- package/dist/channels/github/index.js.map +0 -1
- package/dist/channels/github/normalize.d.ts +0 -32
- package/dist/channels/github/normalize.d.ts.map +0 -1
- package/dist/channels/github/normalize.js +0 -152
- package/dist/channels/github/normalize.js.map +0 -1
- package/dist/channels/github/source-thread.d.ts +0 -24
- package/dist/channels/github/source-thread.d.ts.map +0 -1
- package/dist/channels/github/source-thread.js +0 -54
- package/dist/channels/github/source-thread.js.map +0 -1
- package/dist/channels/github/transport.d.ts +0 -19
- package/dist/channels/github/transport.d.ts.map +0 -1
- package/dist/channels/github/transport.js +0 -92
- package/dist/channels/github/transport.js.map +0 -1
- package/dist/channels/plugin.d.ts +0 -61
- package/dist/channels/plugin.d.ts.map +0 -1
- package/dist/channels/plugin.js +0 -80
- package/dist/channels/plugin.js.map +0 -1
- package/dist/channels/slack/define.d.ts +0 -74
- package/dist/channels/slack/define.d.ts.map +0 -1
- package/dist/channels/slack/define.js +0 -160
- package/dist/channels/slack/define.js.map +0 -1
- package/dist/connectors/github/index.d.ts +0 -78
- package/dist/connectors/github/index.d.ts.map +0 -1
- package/dist/connectors/github/index.js +0 -106
- package/dist/connectors/github/index.js.map +0 -1
- package/dist/connectors/github/sandbox.d.ts +0 -54
- package/dist/connectors/github/sandbox.d.ts.map +0 -1
- package/dist/connectors/github/sandbox.js +0 -515
- package/dist/connectors/github/sandbox.js.map +0 -1
- package/dist/connectors/langsmith/index.d.ts +0 -385
- package/dist/connectors/langsmith/index.d.ts.map +0 -1
- package/dist/connectors/langsmith/index.js +0 -431
- package/dist/connectors/langsmith/index.js.map +0 -1
- package/dist/connectors/langsmith/routes.d.ts +0 -247
- package/dist/connectors/langsmith/routes.d.ts.map +0 -1
- package/dist/connectors/langsmith/routes.js +0 -1182
- package/dist/connectors/langsmith/routes.js.map +0 -1
- package/dist/runtime/memory/seed.d.ts +0 -21
- package/dist/runtime/memory/seed.d.ts.map +0 -1
- package/dist/runtime/memory/seed.js +0 -160
- package/dist/runtime/memory/seed.js.map +0 -1
- package/dist/runtime/memory/user-repo.d.ts +0 -19
- package/dist/runtime/memory/user-repo.d.ts.map +0 -1
- package/dist/runtime/memory/user-repo.js +0 -57
- package/dist/runtime/memory/user-repo.js.map +0 -1
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Slack identity helpers — Connect-with-Slack opt-in for `defineIdentity`.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
* (`defineSlackChannel`).
|
|
4
|
+
* Slack Events / messaging authoring lives on `connectors.slack`.
|
|
6
5
|
*/
|
|
7
6
|
export { connect, createSlackIdentityConnectProvider, slackIdentityConnectProvider, SLACK_CONNECT_CALLBACK_PATH, SLACK_CONNECT_LINK_PATH, SLACK_CONNECT_START_PATH, SLACK_CONNECT_STATUS_PATH, } from "./connect-http.js";
|
|
8
7
|
export type { SlackIdentityConnectProviderOptions } from "./connect-http.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/identity/slack/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/identity/slack/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,OAAO,EACP,kCAAkC,EAClC,4BAA4B,EAC5B,2BAA2B,EAC3B,uBAAuB,EACvB,wBAAwB,EACxB,yBAAyB,GAC1B,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,mCAAmC,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Slack identity helpers — Connect-with-Slack opt-in for `defineIdentity`.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
* (`defineSlackChannel`).
|
|
4
|
+
* Slack Events / messaging authoring lives on `connectors.slack`.
|
|
6
5
|
*/
|
|
7
6
|
export { connect, createSlackIdentityConnectProvider, slackIdentityConnectProvider, SLACK_CONNECT_CALLBACK_PATH, SLACK_CONNECT_LINK_PATH, SLACK_CONNECT_START_PATH, SLACK_CONNECT_STATUS_PATH, } from "./connect-http.js";
|
|
8
7
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/identity/slack/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/identity/slack/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,OAAO,EACP,kCAAkC,EAClC,4BAA4B,EAC5B,2BAA2B,EAC3B,uBAAuB,EACvB,wBAAwB,EACxB,yBAAyB,GAC1B,MAAM,mBAAmB,CAAC"}
|
|
@@ -3,58 +3,59 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Stored in the LangGraph Store under `["mda_identity_links"]`, with an
|
|
5
5
|
* in-memory backend for unit tests. Slack Events look up `slack:T:U` before
|
|
6
|
-
* invoke; the web Connect-with-Slack flow
|
|
6
|
+
* invoke when Connect OIDC is configured; the web Connect-with-Slack flow
|
|
7
|
+
* upserts after OIDC.
|
|
7
8
|
*/
|
|
8
9
|
import { Client } from "@langchain/langgraph-sdk";
|
|
9
10
|
export declare const IDENTITY_LINKS_NAMESPACE: readonly ["mda_identity_links"];
|
|
10
11
|
export interface IdentityLinkRecord {
|
|
11
|
-
|
|
12
|
+
userId: string;
|
|
12
13
|
slackUserId: string;
|
|
13
14
|
slackTeamId?: string;
|
|
14
|
-
/** Fully-qualified Slack
|
|
15
|
-
|
|
15
|
+
/** Fully-qualified Slack user key, e.g. `slack:T123:U456`. */
|
|
16
|
+
slackKey: string;
|
|
16
17
|
email?: string;
|
|
17
18
|
linkedAt: string;
|
|
18
19
|
source: "slack_oauth";
|
|
19
20
|
}
|
|
20
21
|
export interface IdentityLinkStore {
|
|
21
|
-
|
|
22
|
-
|
|
22
|
+
getBySlackKey(slackKey: string): Promise<IdentityLinkRecord | null>;
|
|
23
|
+
getByUserId(userId: string): Promise<IdentityLinkRecord | null>;
|
|
23
24
|
upsert(record: IdentityLinkRecord): Promise<void>;
|
|
24
|
-
|
|
25
|
+
removeByUserId(userId: string): Promise<void>;
|
|
25
26
|
}
|
|
26
27
|
/** In-memory store for tests (and as a process-local cache layer). */
|
|
27
28
|
export declare class InMemoryIdentityLinkStore implements IdentityLinkStore {
|
|
28
29
|
private readonly bySlack;
|
|
29
|
-
private readonly
|
|
30
|
-
|
|
31
|
-
|
|
30
|
+
private readonly byUser;
|
|
31
|
+
getBySlackKey(slackKey: string): Promise<IdentityLinkRecord | null>;
|
|
32
|
+
getByUserId(userId: string): Promise<IdentityLinkRecord | null>;
|
|
32
33
|
upsert(record: IdentityLinkRecord): Promise<void>;
|
|
33
|
-
|
|
34
|
+
removeByUserId(userId: string): Promise<void>;
|
|
34
35
|
}
|
|
35
36
|
/** LangGraph Store–backed identity links. */
|
|
36
37
|
export declare class LangGraphIdentityLinkStore implements IdentityLinkStore {
|
|
37
38
|
private readonly client;
|
|
38
39
|
constructor(client: Client);
|
|
39
|
-
|
|
40
|
-
|
|
40
|
+
getBySlackKey(slackKey: string): Promise<IdentityLinkRecord | null>;
|
|
41
|
+
getByUserId(userId: string): Promise<IdentityLinkRecord | null>;
|
|
41
42
|
upsert(record: IdentityLinkRecord): Promise<void>;
|
|
42
|
-
|
|
43
|
+
removeByUserId(userId: string): Promise<void>;
|
|
43
44
|
private getItem;
|
|
44
45
|
}
|
|
45
46
|
/** Override the process-default link store (tests). */
|
|
46
47
|
export declare function setIdentityLinkStore(store: IdentityLinkStore | null): void;
|
|
47
48
|
/** Resolve the process-default link store (in-memory until a Client is wired). */
|
|
48
49
|
export declare function getIdentityLinkStore(): IdentityLinkStore;
|
|
49
|
-
/** Build a Store-backed client when
|
|
50
|
+
/** Build a Store-backed client when a trusted loopback credential is available. */
|
|
50
51
|
export declare function createLangGraphIdentityLinkStore(options?: {
|
|
51
52
|
apiUrl?: string;
|
|
52
53
|
apiKey?: string;
|
|
53
54
|
ingressSecret?: string;
|
|
54
55
|
}): LangGraphIdentityLinkStore | null;
|
|
55
|
-
export declare function
|
|
56
|
+
export declare function slackKeyFromParts(teamId: string, userId: string): string;
|
|
56
57
|
export declare function buildIdentityLinkRecord(input: {
|
|
57
|
-
|
|
58
|
+
userId: string;
|
|
58
59
|
slackUserId: string;
|
|
59
60
|
slackTeamId?: string;
|
|
60
61
|
email?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"links.d.ts","sourceRoot":"","sources":["../../../src/identity/slack/links.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"links.d.ts","sourceRoot":"","sources":["../../../src/identity/slack/links.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAkBlD,eAAO,MAAM,wBAAwB,iCAAyC,CAAC;AAE/E,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8DAA8D;IAC9D,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,aAAa,CAAC;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC;IACpE,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC;IAChE,MAAM,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/C;AAED,sEAAsE;AACtE,qBAAa,yBAA0B,YAAW,iBAAiB;IACjE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyC;IACjE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAyC;IAE1D,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAExE;IAEK,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAEpE;IAEK,MAAM,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAWtD;IAEK,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAOlD;CACF;AAED,6CAA6C;AAC7C,qBAAa,0BAA2B,YAAW,iBAAiB;IACtD,OAAO,CAAC,QAAQ,CAAC,MAAM;IAAnC,YAA6B,MAAM,EAAE,MAAM,EAAI;IAEzC,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAExE;IAEK,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAEpE;IAEK,MAAM,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CA0BtD;IAEK,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAalD;YAEa,OAAO;CAUtB;AAID,uDAAuD;AACvD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,GAAG,IAAI,CAE1E;AAED,kFAAkF;AAClF,wBAAgB,oBAAoB,IAAI,iBAAiB,CAOxD;AAED,mFAAmF;AACnF,wBAAgB,gCAAgC,CAC9C,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAO,GACzE,0BAA0B,GAAG,IAAI,CA+BnC;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAExE;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE;IAC7C,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,kBAAkB,CAWrB"}
|
|
@@ -3,41 +3,42 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Stored in the LangGraph Store under `["mda_identity_links"]`, with an
|
|
5
5
|
* in-memory backend for unit tests. Slack Events look up `slack:T:U` before
|
|
6
|
-
* invoke; the web Connect-with-Slack flow
|
|
6
|
+
* invoke when Connect OIDC is configured; the web Connect-with-Slack flow
|
|
7
|
+
* upserts after OIDC.
|
|
7
8
|
*/
|
|
8
9
|
import { Client } from "@langchain/langgraph-sdk";
|
|
9
|
-
import {
|
|
10
|
-
import { resolveLoopbackApiUrl } from "../loopback.js";
|
|
10
|
+
import { HANDOFF_SECRET_ENV, HANDOFF_SECRET_HEADER, USER_HEADER, IDENTITY_LINKS_SERVICE_USER, IDENTITY_LINKS_STORE_PREFIX, INGRESS_SECRET_ENV, INGRESS_SECRET_HEADER, LANGSMITH_API_KEY_ENV, } from "../../runtime/auth.js";
|
|
11
|
+
import { isLoopbackUrl, resolveLoopbackApiKey, resolveLoopbackApiUrl, } from "../loopback.js";
|
|
11
12
|
export const IDENTITY_LINKS_NAMESPACE = [IDENTITY_LINKS_STORE_PREFIX];
|
|
12
13
|
/** In-memory store for tests (and as a process-local cache layer). */
|
|
13
14
|
export class InMemoryIdentityLinkStore {
|
|
14
15
|
bySlack = new Map();
|
|
15
|
-
|
|
16
|
-
async
|
|
17
|
-
return this.bySlack.get(
|
|
16
|
+
byUser = new Map();
|
|
17
|
+
async getBySlackKey(slackKey) {
|
|
18
|
+
return this.bySlack.get(slackKey) ?? null;
|
|
18
19
|
}
|
|
19
|
-
async
|
|
20
|
-
return this.
|
|
20
|
+
async getByUserId(userId) {
|
|
21
|
+
return this.byUser.get(userId) ?? null;
|
|
21
22
|
}
|
|
22
23
|
async upsert(record) {
|
|
23
|
-
const previous = this.
|
|
24
|
-
if (previous && previous.
|
|
25
|
-
this.bySlack.delete(previous.
|
|
24
|
+
const previous = this.byUser.get(record.userId);
|
|
25
|
+
if (previous && previous.slackKey !== record.slackKey) {
|
|
26
|
+
this.bySlack.delete(previous.slackKey);
|
|
26
27
|
}
|
|
27
|
-
const existingSlack = this.bySlack.get(record.
|
|
28
|
-
if (existingSlack && existingSlack.
|
|
29
|
-
this.
|
|
28
|
+
const existingSlack = this.bySlack.get(record.slackKey);
|
|
29
|
+
if (existingSlack && existingSlack.userId !== record.userId) {
|
|
30
|
+
this.byUser.delete(existingSlack.userId);
|
|
30
31
|
}
|
|
31
|
-
this.bySlack.set(record.
|
|
32
|
-
this.
|
|
32
|
+
this.bySlack.set(record.slackKey, record);
|
|
33
|
+
this.byUser.set(record.userId, record);
|
|
33
34
|
}
|
|
34
|
-
async
|
|
35
|
-
const existing = this.
|
|
35
|
+
async removeByUserId(userId) {
|
|
36
|
+
const existing = this.byUser.get(userId);
|
|
36
37
|
if (!existing) {
|
|
37
38
|
return;
|
|
38
39
|
}
|
|
39
|
-
this.
|
|
40
|
-
this.bySlack.delete(existing.
|
|
40
|
+
this.byUser.delete(userId);
|
|
41
|
+
this.bySlack.delete(existing.slackKey);
|
|
41
42
|
}
|
|
42
43
|
}
|
|
43
44
|
/** LangGraph Store–backed identity links. */
|
|
@@ -46,32 +47,32 @@ export class LangGraphIdentityLinkStore {
|
|
|
46
47
|
constructor(client) {
|
|
47
48
|
this.client = client;
|
|
48
49
|
}
|
|
49
|
-
async
|
|
50
|
-
return this.getItem(slackKey
|
|
50
|
+
async getBySlackKey(slackKey) {
|
|
51
|
+
return this.getItem(slackStoreKey(slackKey));
|
|
51
52
|
}
|
|
52
|
-
async
|
|
53
|
-
return this.getItem(
|
|
53
|
+
async getByUserId(userId) {
|
|
54
|
+
return this.getItem(userStoreKey(userId));
|
|
54
55
|
}
|
|
55
56
|
async upsert(record) {
|
|
56
|
-
const previous = await this.
|
|
57
|
-
if (previous && previous.
|
|
58
|
-
await this.client.store.deleteItem([...IDENTITY_LINKS_NAMESPACE],
|
|
57
|
+
const previous = await this.getByUserId(record.userId);
|
|
58
|
+
if (previous && previous.slackKey !== record.slackKey) {
|
|
59
|
+
await this.client.store.deleteItem([...IDENTITY_LINKS_NAMESPACE], slackStoreKey(previous.slackKey));
|
|
59
60
|
}
|
|
60
|
-
const existingSlack = await this.
|
|
61
|
-
if (existingSlack && existingSlack.
|
|
62
|
-
await this.client.store.deleteItem([...IDENTITY_LINKS_NAMESPACE],
|
|
61
|
+
const existingSlack = await this.getBySlackKey(record.slackKey);
|
|
62
|
+
if (existingSlack && existingSlack.userId !== record.userId) {
|
|
63
|
+
await this.client.store.deleteItem([...IDENTITY_LINKS_NAMESPACE], userStoreKey(existingSlack.userId));
|
|
63
64
|
}
|
|
64
65
|
const value = recordToValue(record);
|
|
65
|
-
await this.client.store.putItem([...IDENTITY_LINKS_NAMESPACE],
|
|
66
|
-
await this.client.store.putItem([...IDENTITY_LINKS_NAMESPACE],
|
|
66
|
+
await this.client.store.putItem([...IDENTITY_LINKS_NAMESPACE], slackStoreKey(record.slackKey), value);
|
|
67
|
+
await this.client.store.putItem([...IDENTITY_LINKS_NAMESPACE], userStoreKey(record.userId), value);
|
|
67
68
|
}
|
|
68
|
-
async
|
|
69
|
-
const existing = await this.
|
|
69
|
+
async removeByUserId(userId) {
|
|
70
|
+
const existing = await this.getByUserId(userId);
|
|
70
71
|
if (!existing) {
|
|
71
72
|
return;
|
|
72
73
|
}
|
|
73
|
-
await this.client.store.deleteItem([...IDENTITY_LINKS_NAMESPACE],
|
|
74
|
-
await this.client.store.deleteItem([...IDENTITY_LINKS_NAMESPACE],
|
|
74
|
+
await this.client.store.deleteItem([...IDENTITY_LINKS_NAMESPACE], userStoreKey(userId));
|
|
75
|
+
await this.client.store.deleteItem([...IDENTITY_LINKS_NAMESPACE], slackStoreKey(existing.slackKey));
|
|
75
76
|
}
|
|
76
77
|
async getItem(key) {
|
|
77
78
|
const item = await this.client.store.getItem([...IDENTITY_LINKS_NAMESPACE], key);
|
|
@@ -95,64 +96,77 @@ export function getIdentityLinkStore() {
|
|
|
95
96
|
createLangGraphIdentityLinkStore() ?? new InMemoryIdentityLinkStore();
|
|
96
97
|
return defaultStore;
|
|
97
98
|
}
|
|
98
|
-
/** Build a Store-backed client when
|
|
99
|
+
/** Build a Store-backed client when a trusted loopback credential is available. */
|
|
99
100
|
export function createLangGraphIdentityLinkStore(options = {}) {
|
|
100
|
-
const
|
|
101
|
-
|
|
101
|
+
const serverApiKey = process.env[LANGSMITH_API_KEY_ENV]?.trim();
|
|
102
|
+
const configuredHandoffSecret = process.env[HANDOFF_SECRET_ENV]?.trim();
|
|
103
|
+
const explicitIngressSecret = options.ingressSecret?.trim();
|
|
104
|
+
const configuredIngressSecret = explicitIngressSecret || process.env[INGRESS_SECRET_ENV]?.trim();
|
|
105
|
+
const apiUrl = resolveLoopbackApiUrl(options.apiUrl);
|
|
106
|
+
const apiKey = resolveLoopbackApiKey(options.apiKey);
|
|
107
|
+
const isLocal = isLoopbackUrl(apiUrl);
|
|
108
|
+
const handoffSecret = isLocal ? configuredHandoffSecret : undefined;
|
|
109
|
+
const ingressSecret = isLocal ? configuredIngressSecret : undefined;
|
|
110
|
+
const usesServerApiKey = Boolean(serverApiKey && apiKey === serverApiKey);
|
|
111
|
+
if (!usesServerApiKey && !handoffSecret && !ingressSecret) {
|
|
102
112
|
return null;
|
|
103
113
|
}
|
|
104
|
-
const
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
114
|
+
const defaultHeaders = {
|
|
115
|
+
[USER_HEADER]: IDENTITY_LINKS_SERVICE_USER,
|
|
116
|
+
};
|
|
117
|
+
if (!usesServerApiKey && explicitIngressSecret && ingressSecret) {
|
|
118
|
+
defaultHeaders[INGRESS_SECRET_HEADER] = ingressSecret;
|
|
119
|
+
}
|
|
120
|
+
else if (handoffSecret) {
|
|
121
|
+
defaultHeaders[HANDOFF_SECRET_HEADER] = handoffSecret;
|
|
122
|
+
}
|
|
123
|
+
else if (!usesServerApiKey && ingressSecret) {
|
|
124
|
+
defaultHeaders[INGRESS_SECRET_HEADER] = ingressSecret;
|
|
125
|
+
}
|
|
109
126
|
const client = new Client({
|
|
110
127
|
apiUrl,
|
|
111
128
|
apiKey,
|
|
112
|
-
defaultHeaders
|
|
113
|
-
[INGRESS_SECRET_HEADER]: ingressSecret,
|
|
114
|
-
[ACTOR_HEADER]: IDENTITY_LINKS_SERVICE_ACTOR,
|
|
115
|
-
},
|
|
129
|
+
defaultHeaders,
|
|
116
130
|
});
|
|
117
131
|
return new LangGraphIdentityLinkStore(client);
|
|
118
132
|
}
|
|
119
|
-
export function
|
|
133
|
+
export function slackKeyFromParts(teamId, userId) {
|
|
120
134
|
return `slack:${teamId}:${userId}`;
|
|
121
135
|
}
|
|
122
136
|
export function buildIdentityLinkRecord(input) {
|
|
123
137
|
const team = input.slackTeamId?.trim() || "unknown";
|
|
124
138
|
return {
|
|
125
|
-
|
|
139
|
+
userId: input.userId,
|
|
126
140
|
slackUserId: input.slackUserId,
|
|
127
141
|
...(input.slackTeamId ? { slackTeamId: input.slackTeamId } : {}),
|
|
128
|
-
|
|
142
|
+
slackKey: slackKeyFromParts(team, input.slackUserId),
|
|
129
143
|
...(input.email ? { email: input.email } : {}),
|
|
130
144
|
linkedAt: new Date().toISOString(),
|
|
131
145
|
source: "slack_oauth",
|
|
132
146
|
};
|
|
133
147
|
}
|
|
134
|
-
function slackKey
|
|
135
|
-
return `slack:${
|
|
148
|
+
function slackStoreKey(slackKey) {
|
|
149
|
+
return `slack:${slackKey.replace(/^slack:/, "")}`;
|
|
136
150
|
}
|
|
137
|
-
function
|
|
138
|
-
return `actor:${
|
|
151
|
+
function userStoreKey(userId) {
|
|
152
|
+
return `actor:${userId}`;
|
|
139
153
|
}
|
|
140
154
|
function recordToValue(record) {
|
|
141
155
|
return { ...record };
|
|
142
156
|
}
|
|
143
157
|
function valueToRecord(value) {
|
|
144
|
-
const
|
|
158
|
+
const userId = value.userId;
|
|
145
159
|
const slackUserId = value.slackUserId;
|
|
146
|
-
const
|
|
147
|
-
if (typeof
|
|
160
|
+
const slackKey = value.slackKey;
|
|
161
|
+
if (typeof userId !== "string" ||
|
|
148
162
|
typeof slackUserId !== "string" ||
|
|
149
|
-
typeof
|
|
163
|
+
typeof slackKey !== "string") {
|
|
150
164
|
return null;
|
|
151
165
|
}
|
|
152
166
|
return {
|
|
153
|
-
|
|
167
|
+
userId,
|
|
154
168
|
slackUserId,
|
|
155
|
-
|
|
169
|
+
slackKey,
|
|
156
170
|
...(typeof value.slackTeamId === "string"
|
|
157
171
|
? { slackTeamId: value.slackTeamId }
|
|
158
172
|
: {}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"links.js","sourceRoot":"","sources":["../../../src/identity/slack/links.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"links.js","sourceRoot":"","sources":["../../../src/identity/slack/links.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,24 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Slack OpenID Connect helpers for Connect-with-Slack account linking.
|
|
3
3
|
*/
|
|
4
|
+
export { MDA_PUBLIC_API_URL_ENV, MDA_PUBLIC_APP_URL_ENV, OAUTH_STATE_SIGNING_KEY_ENV, readOauthStateSigningKey, resolveOauthRedirectBase, resolveSlackOauthRedirectBase, } from "../oauth-env.js";
|
|
4
5
|
export declare const SLACK_CLIENT_ID_ENV = "SLACK_CLIENT_ID";
|
|
5
6
|
export declare const SLACK_CLIENT_SECRET_ENV = "SLACK_CLIENT_SECRET";
|
|
6
7
|
export declare const SLACK_TEAM_ID_ENV = "SLACK_TEAM_ID";
|
|
7
|
-
export declare const MDA_PUBLIC_APP_URL_ENV = "MDA_PUBLIC_APP_URL";
|
|
8
|
-
/**
|
|
9
|
-
* Public Agent Server base URL used for Slack OAuth `redirect_uri`.
|
|
10
|
-
* Required on LangGraph Host where the ASGI request origin is an internal
|
|
11
|
-
* loopback (e.g. `http://localhost:5557`) rather than `*.langgraph.app`.
|
|
12
|
-
*/
|
|
13
|
-
export declare const MDA_PUBLIC_API_URL_ENV = "MDA_PUBLIC_API_URL";
|
|
14
|
-
/**
|
|
15
|
-
* Signing key for OAuth `state` JWTs (Connect-with-Slack). Reuses the guest
|
|
16
|
-
* token key so deployments do not need a third secret; never the Slack
|
|
17
|
-
* client secret (that value is an OAuth credential, not a signing key).
|
|
18
|
-
*/
|
|
19
|
-
export declare const OAUTH_STATE_SIGNING_KEY_ENV = "MDA_GUEST_SIGNING_KEY";
|
|
20
8
|
/** Override Slack OIDC base (tests). */
|
|
21
9
|
export declare const SLACK_OIDC_BASE_ENV = "SLACK_OIDC_BASE";
|
|
10
|
+
/** Slack-bound OAuth state / connect-ticket helpers. */
|
|
11
|
+
export declare const slackOauthTickets: import("../oauth-tickets.js").OauthTickets;
|
|
22
12
|
export interface SlackOidcConfig {
|
|
23
13
|
clientId: string;
|
|
24
14
|
clientSecret: string;
|
|
@@ -33,28 +23,6 @@ export interface SlackOidcIdentity {
|
|
|
33
23
|
}
|
|
34
24
|
export declare function readSlackOidcConfig(env?: NodeJS.ProcessEnv): SlackOidcConfig | null;
|
|
35
25
|
export declare function slackConnectUrl(publicAppUrl: string): string;
|
|
36
|
-
/**
|
|
37
|
-
* Public base URL for Slack OAuth `redirect_uri` (`…/identity/slack/callback`).
|
|
38
|
-
*
|
|
39
|
-
* Prefer an explicit public Agent Server URL over the ASGI request origin:
|
|
40
|
-
* LangGraph Host rewrites requests to an internal loopback that Slack cannot
|
|
41
|
-
* use as a redirect.
|
|
42
|
-
*/
|
|
43
|
-
export declare function resolveSlackOauthRedirectBase(options: {
|
|
44
|
-
requestUrl: string;
|
|
45
|
-
headers?: Headers | {
|
|
46
|
-
get(name: string): string | null | undefined;
|
|
47
|
-
};
|
|
48
|
-
deploymentBaseUrl?: string;
|
|
49
|
-
env?: NodeJS.ProcessEnv;
|
|
50
|
-
}): string;
|
|
51
|
-
/** Server-side key for OAuth state JWTs; null when Connect cannot bind actors. */
|
|
52
|
-
export declare function readOauthStateSigningKey(env?: NodeJS.ProcessEnv): string | null;
|
|
53
26
|
export declare function buildSlackAuthorizeUrl(config: SlackOidcConfig, state: string, redirectUri: string): string;
|
|
54
|
-
/** Signed state binding the authenticated actor to the OAuth round-trip. */
|
|
55
|
-
export declare function createSlackOauthState(actorId: string, signingKey: string, nowMs?: number): Promise<string>;
|
|
56
|
-
export declare function verifySlackOauthState(state: string, signingKey: string, nowMs?: number): Promise<{
|
|
57
|
-
actorId: string;
|
|
58
|
-
}>;
|
|
59
27
|
export declare function exchangeSlackOidcCode(config: SlackOidcConfig, code: string, redirectUri: string): Promise<SlackOidcIdentity>;
|
|
60
28
|
//# sourceMappingURL=oauth.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../../../src/identity/slack/oauth.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../../../src/identity/slack/oauth.ts"],"names":[],"mappings":"AAAA;;GAEG;AASH,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,2BAA2B,EAC3B,wBAAwB,EACxB,wBAAwB,EACxB,6BAA6B,GAC9B,MAAM,iBAAiB,CAAC;AAEzB,eAAO,MAAM,mBAAmB,oBAAoB,CAAC;AACrD,eAAO,MAAM,uBAAuB,wBAAwB,CAAC;AAC7D,eAAO,MAAM,iBAAiB,kBAAkB,CAAC;AAEjD,wCAAwC;AACxC,eAAO,MAAM,mBAAmB,oBAAoB,CAAC;AAIrD,wDAAwD;AACxD,eAAO,MAAM,iBAAiB,4CAA2B,CAAC;AAE1D,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,mBAAmB,CACjC,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,eAAe,GAAG,IAAI,CAmBxB;AAED,wBAAgB,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,eAAe,EACvB,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,GAClB,MAAM,CAWR;AAED,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,eAAe,EACvB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,iBAAiB,CAAC,CA4D5B"}
|
|
@@ -1,29 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Slack OpenID Connect helpers for Connect-with-Slack account linking.
|
|
3
3
|
*/
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
4
|
+
import { fetchWithTimeout, PROVIDER_HTTP_TIMEOUT_MS, } from "../../runtime/http.js";
|
|
5
|
+
import { oauthTicketsFor } from "../oauth-tickets.js";
|
|
6
|
+
import { MDA_PUBLIC_APP_URL_ENV } from "../oauth-env.js";
|
|
7
|
+
export { MDA_PUBLIC_API_URL_ENV, MDA_PUBLIC_APP_URL_ENV, OAUTH_STATE_SIGNING_KEY_ENV, readOauthStateSigningKey, resolveOauthRedirectBase, resolveSlackOauthRedirectBase, } from "../oauth-env.js";
|
|
6
8
|
export const SLACK_CLIENT_ID_ENV = "SLACK_CLIENT_ID";
|
|
7
9
|
export const SLACK_CLIENT_SECRET_ENV = "SLACK_CLIENT_SECRET";
|
|
8
10
|
export const SLACK_TEAM_ID_ENV = "SLACK_TEAM_ID";
|
|
9
|
-
export const MDA_PUBLIC_APP_URL_ENV = "MDA_PUBLIC_APP_URL";
|
|
10
|
-
/**
|
|
11
|
-
* Public Agent Server base URL used for Slack OAuth `redirect_uri`.
|
|
12
|
-
* Required on LangGraph Host where the ASGI request origin is an internal
|
|
13
|
-
* loopback (e.g. `http://localhost:5557`) rather than `*.langgraph.app`.
|
|
14
|
-
*/
|
|
15
|
-
export const MDA_PUBLIC_API_URL_ENV = "MDA_PUBLIC_API_URL";
|
|
16
|
-
/**
|
|
17
|
-
* Signing key for OAuth `state` JWTs (Connect-with-Slack). Reuses the guest
|
|
18
|
-
* token key so deployments do not need a third secret; never the Slack
|
|
19
|
-
* client secret (that value is an OAuth credential, not a signing key).
|
|
20
|
-
*/
|
|
21
|
-
export const OAUTH_STATE_SIGNING_KEY_ENV = "MDA_GUEST_SIGNING_KEY";
|
|
22
11
|
/** Override Slack OIDC base (tests). */
|
|
23
12
|
export const SLACK_OIDC_BASE_ENV = "SLACK_OIDC_BASE";
|
|
24
13
|
const DEFAULT_OIDC_BASE = "https://slack.com";
|
|
25
|
-
|
|
26
|
-
const
|
|
14
|
+
/** Slack-bound OAuth state / connect-ticket helpers. */
|
|
15
|
+
export const slackOauthTickets = oauthTicketsFor("slack");
|
|
27
16
|
export function readSlackOidcConfig(env = process.env) {
|
|
28
17
|
const clientId = env[SLACK_CLIENT_ID_ENV]?.trim();
|
|
29
18
|
const clientSecret = env[SLACK_CLIENT_SECRET_ENV]?.trim();
|
|
@@ -44,60 +33,6 @@ export function readSlackOidcConfig(env = process.env) {
|
|
|
44
33
|
export function slackConnectUrl(publicAppUrl) {
|
|
45
34
|
return `${publicAppUrl.replace(/\/$/, "")}/settings`;
|
|
46
35
|
}
|
|
47
|
-
/**
|
|
48
|
-
* Public base URL for Slack OAuth `redirect_uri` (`…/identity/slack/callback`).
|
|
49
|
-
*
|
|
50
|
-
* Prefer an explicit public Agent Server URL over the ASGI request origin:
|
|
51
|
-
* LangGraph Host rewrites requests to an internal loopback that Slack cannot
|
|
52
|
-
* use as a redirect.
|
|
53
|
-
*/
|
|
54
|
-
export function resolveSlackOauthRedirectBase(options) {
|
|
55
|
-
const env = options.env ?? process.env;
|
|
56
|
-
if (options.deploymentBaseUrl?.trim()) {
|
|
57
|
-
return options.deploymentBaseUrl.trim().replace(/\/$/, "");
|
|
58
|
-
}
|
|
59
|
-
const fromEnv = env[MDA_PUBLIC_API_URL_ENV]?.trim().replace(/\/$/, "");
|
|
60
|
-
if (fromEnv && !isLoopbackUrl(fromEnv)) {
|
|
61
|
-
return fromEnv;
|
|
62
|
-
}
|
|
63
|
-
const forwarded = publicOriginFromForwardedHeaders(options.headers);
|
|
64
|
-
if (forwarded) {
|
|
65
|
-
return forwarded;
|
|
66
|
-
}
|
|
67
|
-
return new URL(options.requestUrl).origin;
|
|
68
|
-
}
|
|
69
|
-
function publicOriginFromForwardedHeaders(headers) {
|
|
70
|
-
if (!headers) {
|
|
71
|
-
return undefined;
|
|
72
|
-
}
|
|
73
|
-
const host = headers.get("x-forwarded-host")?.split(",")[0]?.trim();
|
|
74
|
-
if (!host || isLoopbackHost(host)) {
|
|
75
|
-
return undefined;
|
|
76
|
-
}
|
|
77
|
-
const proto = headers.get("x-forwarded-proto")?.split(",")[0]?.trim() ||
|
|
78
|
-
(host.includes("localhost") || host.startsWith("127.") ? "http" : "https");
|
|
79
|
-
return `${proto}://${host}`;
|
|
80
|
-
}
|
|
81
|
-
function isLoopbackUrl(value) {
|
|
82
|
-
try {
|
|
83
|
-
return isLoopbackHost(new URL(value).hostname);
|
|
84
|
-
}
|
|
85
|
-
catch {
|
|
86
|
-
return false;
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
function isLoopbackHost(host) {
|
|
90
|
-
const hostname = host
|
|
91
|
-
.replace(/^\[|\]$/g, "")
|
|
92
|
-
.split(":")[0]
|
|
93
|
-
?.toLowerCase() ?? "";
|
|
94
|
-
return (hostname === "localhost" || hostname === "127.0.0.1" || hostname === "::1");
|
|
95
|
-
}
|
|
96
|
-
/** Server-side key for OAuth state JWTs; null when Connect cannot bind actors. */
|
|
97
|
-
export function readOauthStateSigningKey(env = process.env) {
|
|
98
|
-
const key = env[OAUTH_STATE_SIGNING_KEY_ENV]?.trim();
|
|
99
|
-
return key || null;
|
|
100
|
-
}
|
|
101
36
|
export function buildSlackAuthorizeUrl(config, state, redirectUri) {
|
|
102
37
|
const url = new URL(`${config.oidcBase}/openid/connect/authorize`);
|
|
103
38
|
url.searchParams.set("response_type", "code");
|
|
@@ -110,42 +45,6 @@ export function buildSlackAuthorizeUrl(config, state, redirectUri) {
|
|
|
110
45
|
}
|
|
111
46
|
return url.toString();
|
|
112
47
|
}
|
|
113
|
-
/** Signed state binding the authenticated actor to the OAuth round-trip. */
|
|
114
|
-
export async function createSlackOauthState(actorId, signingKey, nowMs = Date.now()) {
|
|
115
|
-
const iat = Math.floor(nowMs / 1000);
|
|
116
|
-
const exp = Math.floor((nowMs + STATE_TTL_MS) / 1000);
|
|
117
|
-
return new SignJWT({
|
|
118
|
-
actorId,
|
|
119
|
-
nonce: randomBytes(16).toString("hex"),
|
|
120
|
-
})
|
|
121
|
-
.setProtectedHeader({ alg: "HS256", typ: STATE_JWT_TYP })
|
|
122
|
-
.setIssuedAt(iat)
|
|
123
|
-
.setExpirationTime(exp)
|
|
124
|
-
.sign(stateSigningKey(signingKey));
|
|
125
|
-
}
|
|
126
|
-
export async function verifySlackOauthState(state, signingKey, nowMs = Date.now()) {
|
|
127
|
-
try {
|
|
128
|
-
const { payload } = await jwtVerify(state, stateSigningKey(signingKey), {
|
|
129
|
-
algorithms: ["HS256"],
|
|
130
|
-
typ: STATE_JWT_TYP,
|
|
131
|
-
currentDate: new Date(nowMs),
|
|
132
|
-
});
|
|
133
|
-
if (typeof payload.actorId !== "string" || !payload.actorId) {
|
|
134
|
-
throw new Error("invalid OAuth state actor");
|
|
135
|
-
}
|
|
136
|
-
return { actorId: payload.actorId };
|
|
137
|
-
}
|
|
138
|
-
catch (err) {
|
|
139
|
-
if (err instanceof Error && err.message.startsWith("invalid OAuth state")) {
|
|
140
|
-
throw err;
|
|
141
|
-
}
|
|
142
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
143
|
-
if (/exp|expir/i.test(message)) {
|
|
144
|
-
throw new Error("OAuth state expired");
|
|
145
|
-
}
|
|
146
|
-
throw new Error("invalid OAuth state signature");
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
48
|
export async function exchangeSlackOidcCode(config, code, redirectUri) {
|
|
150
49
|
const tokenUrl = `${config.oidcBase}/api/openid.connect.token`;
|
|
151
50
|
const body = new URLSearchParams({
|
|
@@ -155,19 +54,17 @@ export async function exchangeSlackOidcCode(config, code, redirectUri) {
|
|
|
155
54
|
redirect_uri: redirectUri,
|
|
156
55
|
grant_type: "authorization_code",
|
|
157
56
|
});
|
|
158
|
-
const tokenResponse = await
|
|
57
|
+
const tokenResponse = await fetchWithTimeout(tokenUrl, {
|
|
159
58
|
method: "POST",
|
|
160
59
|
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
|
161
60
|
body,
|
|
162
|
-
});
|
|
61
|
+
}, PROVIDER_HTTP_TIMEOUT_MS);
|
|
163
62
|
const tokenJson = (await tokenResponse.json());
|
|
164
63
|
if (!tokenResponse.ok || tokenJson.ok === false || !tokenJson.access_token) {
|
|
165
64
|
throw new Error(tokenJson.error ?? "Slack OIDC token exchange failed");
|
|
166
65
|
}
|
|
167
66
|
const userInfoUrl = `${config.oidcBase}/api/openid.connect.userInfo`;
|
|
168
|
-
const userResponse = await
|
|
169
|
-
headers: { Authorization: `Bearer ${tokenJson.access_token}` },
|
|
170
|
-
});
|
|
67
|
+
const userResponse = await fetchWithTimeout(userInfoUrl, { headers: { Authorization: `Bearer ${tokenJson.access_token}` } }, PROVIDER_HTTP_TIMEOUT_MS);
|
|
171
68
|
const userJson = (await userResponse.json());
|
|
172
69
|
if (!userResponse.ok || userJson.ok === false) {
|
|
173
70
|
throw new Error(userJson.error ?? "Slack OIDC userInfo failed");
|
|
@@ -187,7 +84,4 @@ export async function exchangeSlackOidcCode(config, code, redirectUri) {
|
|
|
187
84
|
...(typeof userJson.email === "string" ? { email: userJson.email } : {}),
|
|
188
85
|
};
|
|
189
86
|
}
|
|
190
|
-
function stateSigningKey(signingKey) {
|
|
191
|
-
return new TextEncoder().encode(signingKey);
|
|
192
|
-
}
|
|
193
87
|
//# sourceMappingURL=oauth.js.map
|