managed-deepagents 0.6.2-dev.5 → 0.6.2-dev.50

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/README.md +19 -3
  2. package/dist/agent-auth.d.ts +150 -0
  3. package/dist/agent-auth.d.ts.map +1 -0
  4. package/dist/agent-auth.js +441 -0
  5. package/dist/agent-auth.js.map +1 -0
  6. package/dist/channels/manifest.d.ts +4 -0
  7. package/dist/channels/manifest.d.ts.map +1 -1
  8. package/dist/channels/schedule-delivery.d.ts +2 -0
  9. package/dist/channels/schedule-delivery.d.ts.map +1 -1
  10. package/dist/channels/schedule-delivery.js +40 -4
  11. package/dist/channels/schedule-delivery.js.map +1 -1
  12. package/dist/channels/trigger/client.d.ts +1 -0
  13. package/dist/channels/trigger/client.d.ts.map +1 -1
  14. package/dist/channels/trigger/client.js +19 -8
  15. package/dist/channels/trigger/client.js.map +1 -1
  16. package/dist/channels/trigger/http.d.ts +8 -0
  17. package/dist/channels/trigger/http.d.ts.map +1 -1
  18. package/dist/channels/trigger/http.js +56 -6
  19. package/dist/channels/trigger/http.js.map +1 -1
  20. package/dist/channels/trigger/identity-context.d.ts +47 -0
  21. package/dist/channels/trigger/identity-context.d.ts.map +1 -0
  22. package/dist/channels/trigger/identity-context.js +171 -0
  23. package/dist/channels/trigger/identity-context.js.map +1 -0
  24. package/dist/channels/trigger/types.d.ts +11 -1
  25. package/dist/channels/trigger/types.d.ts.map +1 -1
  26. package/dist/channels/trigger/types.js +5 -0
  27. package/dist/channels/trigger/types.js.map +1 -1
  28. package/dist/connections.d.ts +74 -0
  29. package/dist/connections.d.ts.map +1 -0
  30. package/dist/connections.js +277 -0
  31. package/dist/connections.js.map +1 -0
  32. package/dist/connectors/mcp/index.d.ts +29 -89
  33. package/dist/connectors/mcp/index.d.ts.map +1 -1
  34. package/dist/connectors/mcp/index.js +258 -50
  35. package/dist/connectors/mcp/index.js.map +1 -1
  36. package/dist/connectors/mcp/schema.d.ts +12 -0
  37. package/dist/connectors/mcp/schema.d.ts.map +1 -0
  38. package/dist/connectors/mcp/schema.js +57 -0
  39. package/dist/connectors/mcp/schema.js.map +1 -0
  40. package/dist/connectors/mcp/types.d.ts +62 -0
  41. package/dist/connectors/mcp/types.d.ts.map +1 -0
  42. package/dist/connectors/mcp/types.js +2 -0
  43. package/dist/connectors/mcp/types.js.map +1 -0
  44. package/dist/connectors/tool-selection.d.ts +9 -18
  45. package/dist/connectors/tool-selection.d.ts.map +1 -1
  46. package/dist/connectors/tool-selection.js +32 -58
  47. package/dist/connectors/tool-selection.js.map +1 -1
  48. package/dist/credential-gate.d.ts +40 -0
  49. package/dist/credential-gate.d.ts.map +1 -0
  50. package/dist/credential-gate.js +227 -0
  51. package/dist/credential-gate.js.map +1 -0
  52. package/dist/identity/index.d.ts +1 -1
  53. package/dist/identity/index.d.ts.map +1 -1
  54. package/dist/identity/index.js.map +1 -1
  55. package/dist/identity/types.d.ts +79 -5
  56. package/dist/identity/types.d.ts.map +1 -1
  57. package/dist/index.d.ts +11 -6
  58. package/dist/index.d.ts.map +1 -1
  59. package/dist/index.js +1 -0
  60. package/dist/index.js.map +1 -1
  61. package/dist/ingress/index.d.ts +10 -2
  62. package/dist/ingress/index.d.ts.map +1 -1
  63. package/dist/ingress/index.js +17 -9
  64. package/dist/ingress/index.js.map +1 -1
  65. package/dist/runtime/auth.d.ts +49 -5
  66. package/dist/runtime/auth.d.ts.map +1 -1
  67. package/dist/runtime/auth.js +100 -5
  68. package/dist/runtime/auth.js.map +1 -1
  69. package/dist/runtime/http.d.ts +1 -1
  70. package/dist/runtime/http.d.ts.map +1 -1
  71. package/dist/runtime/http.js.map +1 -1
  72. package/dist/runtime/identity-runtime.d.ts +65 -5
  73. package/dist/runtime/identity-runtime.d.ts.map +1 -1
  74. package/dist/runtime/identity-runtime.js +148 -0
  75. package/dist/runtime/identity-runtime.js.map +1 -1
  76. package/dist/runtime/index.d.ts.map +1 -1
  77. package/dist/runtime/index.js +12 -7
  78. package/dist/runtime/index.js.map +1 -1
  79. package/dist/runtime/managed-middleware.d.ts +2 -2
  80. package/dist/runtime/managed-middleware.js +6 -6
  81. package/dist/runtime/managed-tools.d.ts +19 -15
  82. package/dist/runtime/managed-tools.d.ts.map +1 -1
  83. package/dist/runtime/managed-tools.js +14 -13
  84. package/dist/runtime/managed-tools.js.map +1 -1
  85. package/dist/runtime/types.d.ts +2 -2
  86. package/package.json +8 -8
  87. package/dist/connectors/mcp/load.d.ts +0 -12
  88. package/dist/connectors/mcp/load.d.ts.map +0 -1
  89. package/dist/connectors/mcp/load.js +0 -122
  90. package/dist/connectors/mcp/load.js.map +0 -1
@@ -0,0 +1,171 @@
1
+ /**
2
+ * Verify Trigger Server `identity_context` JWTs into Agent Auth principal ids.
3
+ *
4
+ * Agent Auth signs these with the LangSmith EdDSA JWKS published at
5
+ * `{LANGSMITH_ENDPOINT}/.well-known/jwks.json`. MDA verifies the signature
6
+ * (and typ/version/aud/iss/exp/principal UUID) before stamping `x-mda-user-id`.
7
+ * Delivery still requires Trigger's `x-service-key` header; signature verify is
8
+ * what stops a forged principal when that gate is weak.
9
+ */
10
+ import { createRemoteJWKSet, decodeProtectedHeader, jwtVerify, } from "jose";
11
+ import { JWKS_HTTP_TIMEOUT_MS } from "../../runtime/http.js";
12
+ import { normalizeUuid } from "./uuid.js";
13
+ export const IDENTITY_CONTEXT_TOKEN_TYP = "identity-context+jwt";
14
+ export const IDENTITY_CONTEXT_AUDIENCE = "mda";
15
+ export const IDENTITY_CONTEXT_VERSION = "1";
16
+ export const IDENTITY_CONTEXT_ALGORITHMS = ["EdDSA"];
17
+ const DEFAULT_LANGSMITH_ENDPOINT = "https://api.smith.langchain.com";
18
+ /** Remote JWKS key sets, cached per URI for the process lifetime. */
19
+ const jwksCache = new Map();
20
+ export class InvalidIdentityContextError extends Error {
21
+ name = "InvalidIdentityContextError";
22
+ constructor(message) {
23
+ super(message);
24
+ }
25
+ }
26
+ /** JWKS / network failure while verifying identity_context. Callers should 5xx. */
27
+ export class IdentityContextUnavailableError extends Error {
28
+ name = "IdentityContextUnavailableError";
29
+ constructor(message) {
30
+ super(message);
31
+ }
32
+ }
33
+ /** LangSmith API origin used as identity-context `iss` and JWKS host. */
34
+ export function resolveIdentityContextIssuer(env = process.env) {
35
+ const raw = env.LANGSMITH_ENDPOINT?.trim() ||
36
+ env.LANGCHAIN_ENDPOINT?.trim() ||
37
+ DEFAULT_LANGSMITH_ENDPOINT;
38
+ return raw.replace(/\/+$/, "");
39
+ }
40
+ /** Public JWKS URL for Agent Auth identity-context signatures. */
41
+ export function resolveIdentityContextJwksUrl(env = process.env) {
42
+ return `${resolveIdentityContextIssuer(env)}/.well-known/jwks.json`;
43
+ }
44
+ /**
45
+ * Extract the Agent Auth principal UUID from a Trigger `identity_context` JWT.
46
+ *
47
+ * @throws {InvalidIdentityContextError} when the token is missing, malformed,
48
+ * or fails signature / claim checks.
49
+ */
50
+ export async function principalIdFromIdentityContext(token, options = {}) {
51
+ const value = token.trim();
52
+ if (!value) {
53
+ throw new InvalidIdentityContextError("identity_context is blank");
54
+ }
55
+ let header;
56
+ try {
57
+ header = decodeProtectedHeader(value);
58
+ }
59
+ catch {
60
+ throw new InvalidIdentityContextError("identity_context is not a JWT");
61
+ }
62
+ if (header.typ !== IDENTITY_CONTEXT_TOKEN_TYP) {
63
+ throw new InvalidIdentityContextError(`identity_context typ must be ${IDENTITY_CONTEXT_TOKEN_TYP}`);
64
+ }
65
+ if (header.alg !== "EdDSA") {
66
+ throw new InvalidIdentityContextError("identity_context alg must be EdDSA");
67
+ }
68
+ const env = options.env ?? process.env;
69
+ const issuer = options.issuer ?? resolveIdentityContextIssuer(env);
70
+ const getKey = options.getKey ?? remoteJwks(env);
71
+ let claims;
72
+ try {
73
+ const verified = await jwtVerify(value, getKey, {
74
+ issuer,
75
+ audience: IDENTITY_CONTEXT_AUDIENCE,
76
+ algorithms: [...IDENTITY_CONTEXT_ALGORITHMS],
77
+ typ: IDENTITY_CONTEXT_TOKEN_TYP,
78
+ requiredClaims: ["exp"],
79
+ });
80
+ claims = verified.payload;
81
+ }
82
+ catch (error) {
83
+ if (error instanceof InvalidIdentityContextError ||
84
+ error instanceof IdentityContextUnavailableError) {
85
+ throw error;
86
+ }
87
+ if (isIdentityContextUnavailable(error)) {
88
+ throw new IdentityContextUnavailableError("identity_context JWKS verification is unavailable");
89
+ }
90
+ const detail = error instanceof Error ? error.message : String(error);
91
+ const code = error && typeof error === "object" && "code" in error
92
+ ? String(error.code)
93
+ : "";
94
+ if (code === "ERR_JWT_EXPIRED" || /expir|"exp"|claim.*exp/i.test(detail)) {
95
+ throw new InvalidIdentityContextError("identity_context is expired");
96
+ }
97
+ if (code === "ERR_JWT_CLAIM_VALIDATION_FAILED" &&
98
+ /required.*exp|"exp"/i.test(detail)) {
99
+ throw new InvalidIdentityContextError("identity_context is missing exp");
100
+ }
101
+ throw new InvalidIdentityContextError("identity_context signature verification failed");
102
+ }
103
+ if (typeof claims.exp !== "number") {
104
+ throw new InvalidIdentityContextError("identity_context is missing exp");
105
+ }
106
+ if (claims.version !== IDENTITY_CONTEXT_VERSION) {
107
+ throw new InvalidIdentityContextError(`identity_context version must be ${IDENTITY_CONTEXT_VERSION}`);
108
+ }
109
+ const fromPrincipal = principalIdClaim(claims.principal);
110
+ const fromSubject = typeof claims.sub === "string" ? normalizeUuid(claims.sub) : undefined;
111
+ if (fromPrincipal && fromSubject && fromPrincipal !== fromSubject) {
112
+ throw new InvalidIdentityContextError("identity_context principal.id and sub disagree");
113
+ }
114
+ const principalId = fromPrincipal ?? fromSubject;
115
+ if (!principalId) {
116
+ throw new InvalidIdentityContextError("identity_context is missing a principal UUID");
117
+ }
118
+ return principalId;
119
+ }
120
+ /** Resolve a principal id from an optional event field; `undefined` when absent. */
121
+ export async function optionalPrincipalIdFromIdentityContext(token, options = {}) {
122
+ if (token == null) {
123
+ return undefined;
124
+ }
125
+ if (typeof token !== "string") {
126
+ throw new InvalidIdentityContextError("identity_context must be a string");
127
+ }
128
+ if (!token.trim()) {
129
+ return undefined;
130
+ }
131
+ return await principalIdFromIdentityContext(token, options);
132
+ }
133
+ function isIdentityContextUnavailable(error) {
134
+ if (error instanceof TypeError) {
135
+ return true;
136
+ }
137
+ const code = error && typeof error === "object" && "code" in error
138
+ ? String(error.code)
139
+ : "";
140
+ if (code === "ERR_JWKS_TIMEOUT" || code === "ABORT_ERR") {
141
+ return true;
142
+ }
143
+ const name = error && typeof error === "object" && "name" in error
144
+ ? String(error.name)
145
+ : "";
146
+ if (name === "TimeoutError" || name === "JWKSTimeout") {
147
+ return true;
148
+ }
149
+ if (error instanceof Error) {
150
+ return /fetch failed|ECONNREFUSED|ENOTFOUND|network|timed out/i.test(error.message);
151
+ }
152
+ return false;
153
+ }
154
+ function remoteJwks(env) {
155
+ const uri = resolveIdentityContextJwksUrl(env);
156
+ let keySet = jwksCache.get(uri);
157
+ if (!keySet) {
158
+ keySet = createRemoteJWKSet(new URL(uri), {
159
+ timeoutDuration: JWKS_HTTP_TIMEOUT_MS,
160
+ });
161
+ jwksCache.set(uri, keySet);
162
+ }
163
+ return keySet;
164
+ }
165
+ function principalIdClaim(value) {
166
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
167
+ return undefined;
168
+ }
169
+ return normalizeUuid(value.id);
170
+ }
171
+ //# sourceMappingURL=identity-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity-context.js","sourceRoot":"","sources":["../../../src/channels/trigger/identity-context.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,SAAS,GAEV,MAAM,MAAM,CAAC;AAEd,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,CAAC,MAAM,0BAA0B,GAAG,sBAAsB,CAAC;AACjE,MAAM,CAAC,MAAM,yBAAyB,GAAG,KAAK,CAAC;AAC/C,MAAM,CAAC,MAAM,wBAAwB,GAAG,GAAG,CAAC;AAC5C,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,OAAO,CAAU,CAAC;AAE9D,MAAM,0BAA0B,GAAG,iCAAiC,CAAC;AAIrE,qEAAqE;AACrE,MAAM,SAAS,GAAG,IAAI,GAAG,EAAwB,CAAC;AAElD,MAAM,OAAO,2BAA4B,SAAQ,KAAK;IAC3C,IAAI,GAAG,6BAA6B,CAAC;IAE9C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;IACjB,CAAC;CACF;AAED,mFAAmF;AACnF,MAAM,OAAO,+BAAgC,SAAQ,KAAK;IAC/C,IAAI,GAAG,iCAAiC,CAAC;IAElD,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;IACjB,CAAC;CACF;AAaD,yEAAyE;AACzE,MAAM,UAAU,4BAA4B,CAC1C,GAAG,GAAsB,OAAO,CAAC,GAAG;IAEpC,MAAM,GAAG,GACP,GAAG,CAAC,kBAAkB,EAAE,IAAI,EAAE;QAC9B,GAAG,CAAC,kBAAkB,EAAE,IAAI,EAAE;QAC9B,0BAA0B,CAAC;IAC7B,OAAO,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACjC,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,6BAA6B,CAC3C,GAAG,GAAsB,OAAO,CAAC,GAAG;IAEpC,OAAO,GAAG,4BAA4B,CAAC,GAAG,CAAC,wBAAwB,CAAC;AACtE,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAClD,KAAa,EACb,OAAO,GAAiC,EAAE;IAE1C,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC3B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,2BAA2B,CAAC,2BAA2B,CAAC,CAAC;IACrE,CAAC;IAED,IAAI,MAAgD,CAAC;IACrD,IAAI,CAAC;QACH,MAAM,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,2BAA2B,CAAC,+BAA+B,CAAC,CAAC;IACzE,CAAC;IAED,IAAI,MAAM,CAAC,GAAG,KAAK,0BAA0B,EAAE,CAAC;QAC9C,MAAM,IAAI,2BAA2B,CACnC,gCAAgC,0BAA0B,EAAE,CAC7D,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,GAAG,KAAK,OAAO,EAAE,CAAC;QAC3B,MAAM,IAAI,2BAA2B,CAAC,oCAAoC,CAAC,CAAC;IAC9E,CAAC;IAED,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;IACvC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,4BAA4B,CAAC,GAAG,CAAC,CAAC;IACnE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;IAEjD,IAAI,MAA+B,CAAC;IACpC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE;YAC9C,MAAM;YACN,QAAQ,EAAE,yBAAyB;YACnC,UAAU,EAAE,CAAC,GAAG,2BAA2B,CAAC;YAC5C,GAAG,EAAE,0BAA0B;YAC/B,cAAc,EAAE,CAAC,KAAK,CAAC;SACxB,CAAC,CAAC;QACH,MAAM,GAAG,QAAQ,CAAC,OAAkC,CAAC;IACvD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IACE,KAAK,YAAY,2BAA2B;YAC5C,KAAK,YAAY,+BAA+B,EAChD,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;QACD,IAAI,4BAA4B,CAAC,KAAK,CAAC,EAAE,CAAC;YACxC,MAAM,IAAI,+BAA+B,CACvC,mDAAmD,CACpD,CAAC;QACJ,CAAC;QACD,MAAM,MAAM,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACtE,MAAM,IAAI,GACR,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,IAAI,KAAK;YACnD,CAAC,CAAC,MAAM,CAAE,KAA4B,CAAC,IAAI,CAAC;YAC5C,CAAC,CAAC,EAAE,CAAC;QACT,IAAI,IAAI,KAAK,iBAAiB,IAAI,yBAAyB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACzE,MAAM,IAAI,2BAA2B,CAAC,6BAA6B,CAAC,CAAC;QACvE,CAAC;QACD,IACE,IAAI,KAAK,iCAAiC;YAC1C,sBAAsB,CAAC,IAAI,CAAC,MAAM,CAAC,EACnC,CAAC;YACD,MAAM,IAAI,2BAA2B,CAAC,iCAAiC,CAAC,CAAC;QAC3E,CAAC;QACD,MAAM,IAAI,2BAA2B,CACnC,gDAAgD,CACjD,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;QACnC,MAAM,IAAI,2BAA2B,CAAC,iCAAiC,CAAC,CAAC;IAC3E,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,KAAK,wBAAwB,EAAE,CAAC;QAChD,MAAM,IAAI,2BAA2B,CACnC,oCAAoC,wBAAwB,EAAE,CAC/D,CAAC;IACJ,CAAC;IAED,MAAM,aAAa,GAAG,gBAAgB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACzD,MAAM,WAAW,GACf,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACzE,IAAI,aAAa,IAAI,WAAW,IAAI,aAAa,KAAK,WAAW,EAAE,CAAC;QAClE,MAAM,IAAI,2BAA2B,CACnC,gDAAgD,CACjD,CAAC;IACJ,CAAC;IACD,MAAM,WAAW,GAAG,aAAa,IAAI,WAAW,CAAC;IACjD,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,2BAA2B,CACnC,8CAA8C,CAC/C,CAAC;IACJ,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,oFAAoF;AACpF,MAAM,CAAC,KAAK,UAAU,sCAAsC,CAC1D,KAAgC,EAChC,OAAO,GAAiC,EAAE;IAE1C,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;QAClB,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,IAAI,2BAA2B,CAAC,mCAAmC,CAAC,CAAC;IAC7E,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;QAClB,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,MAAM,8BAA8B,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AAC9D,CAAC;AAED,SAAS,4BAA4B,CAAC,KAAc;IAClD,IAAI,KAAK,YAAY,SAAS,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,IAAI,GACR,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,IAAI,KAAK;QACnD,CAAC,CAAC,MAAM,CAAE,KAA4B,CAAC,IAAI,CAAC;QAC5C,CAAC,CAAC,EAAE,CAAC;IACT,IAAI,IAAI,KAAK,kBAAkB,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;QACxD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,IAAI,GACR,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,IAAI,KAAK;QACnD,CAAC,CAAC,MAAM,CAAE,KAA4B,CAAC,IAAI,CAAC;QAC5C,CAAC,CAAC,EAAE,CAAC;IACT,IAAI,IAAI,KAAK,cAAc,IAAI,IAAI,KAAK,aAAa,EAAE,CAAC;QACtD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,wDAAwD,CAAC,IAAI,CAClE,KAAK,CAAC,OAAO,CACd,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,UAAU,CAAC,GAAsB;IACxC,MAAM,GAAG,GAAG,6BAA6B,CAAC,GAAG,CAAC,CAAC;IAC/C,IAAI,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,GAAG,kBAAkB,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE;YACxC,eAAe,EAAE,oBAAoB;SACtC,CAAC,CAAC;QACH,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC7B,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc;IACtC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAChE,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,aAAa,CAAE,KAA0B,CAAC,EAAE,CAAC,CAAC;AACvD,CAAC"}
@@ -10,6 +10,7 @@ declare const messageEventSchema: z.ZodObject<{
10
10
  channel_id: z.ZodString;
11
11
  source_thread_key: z.ZodString;
12
12
  address: z.ZodRecord<z.ZodString, z.ZodUnknown>;
13
+ identity_context: z.ZodOptional<z.ZodNullable<z.ZodString>>;
13
14
  type: z.ZodLiteral<"message">;
14
15
  input: z.ZodObject<{
15
16
  messages: z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
@@ -23,6 +24,7 @@ declare const interruptResumeEventSchema: z.ZodObject<{
23
24
  channel_id: z.ZodString;
24
25
  source_thread_key: z.ZodString;
25
26
  address: z.ZodRecord<z.ZodString, z.ZodUnknown>;
27
+ identity_context: z.ZodOptional<z.ZodNullable<z.ZodString>>;
26
28
  type: z.ZodLiteral<"interrupt_resume">;
27
29
  interaction: z.ZodObject<{
28
30
  type: z.ZodLiteral<"interrupt_resume">;
@@ -37,6 +39,7 @@ declare const eventSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
37
39
  channel_id: z.ZodString;
38
40
  source_thread_key: z.ZodString;
39
41
  address: z.ZodRecord<z.ZodString, z.ZodUnknown>;
42
+ identity_context: z.ZodOptional<z.ZodNullable<z.ZodString>>;
40
43
  type: z.ZodLiteral<"message">;
41
44
  input: z.ZodObject<{
42
45
  messages: z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
@@ -49,6 +52,7 @@ declare const eventSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
49
52
  channel_id: z.ZodString;
50
53
  source_thread_key: z.ZodString;
51
54
  address: z.ZodRecord<z.ZodString, z.ZodUnknown>;
55
+ identity_context: z.ZodOptional<z.ZodNullable<z.ZodString>>;
52
56
  type: z.ZodLiteral<"interrupt_resume">;
53
57
  interaction: z.ZodObject<{
54
58
  type: z.ZodLiteral<"interrupt_resume">;
@@ -66,7 +70,7 @@ export interface TriggerChannelActionRequest {
66
70
  type: "post";
67
71
  action_id: string;
68
72
  address: TriggerChannelAddress;
69
- source_thread_key: string;
73
+ source_thread_key?: string;
70
74
  message: {
71
75
  text: string;
72
76
  };
@@ -93,6 +97,12 @@ export interface TriggerChannelRuntimeEventRequest {
93
97
  address: TriggerChannelAddress;
94
98
  run_thread_id: string;
95
99
  run_id: string;
100
+ /**
101
+ * Safe, user-facing status text. Raw runtime exceptions must never be sent.
102
+ */
103
+ message?: {
104
+ text: string;
105
+ };
96
106
  /**
97
107
  * Present on `run.interrupted`. The Trigger Server cannot read the
98
108
  * deployment's threads, so pending interrupts travel on the event itself.
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/channels/trigger/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,0BAA0B,kBAAkB,CAAC;AAK1D,uDAAuD;AACvD,QAAA,MAAM,YAAY,wCAAoC,CAAC;AAevD,QAAA,MAAM,kBAAkB;;;;;;;;;;;;iBAKtB,CAAC;AACH,QAAA,MAAM,0BAA0B;;;;;;;;;;;;;iBAM9B,CAAC;AACH,QAAA,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;2BAGf,CAAC;AAEH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AACjE,MAAM,MAAM,0BAA0B,GAAG,CAAC,CAAC,KAAK,CAC9C,OAAO,kBAAkB,CAAC,KAAK,CAAC,KAAK,CACtC,CAAC;AACF,MAAM,MAAM,0BAA0B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAC5E,MAAM,MAAM,kCAAkC,GAAG,CAAC,CAAC,KAAK,CACtD,OAAO,0BAA0B,CAClC,CAAC;AACF,6HAA6H;AAC7H,MAAM,MAAM,oBAAoB,GAC9B,kCAAkC,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,CAAC;AAC9D,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAE9D,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,qBAAqB,CAAC;IAC/B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3B;AAED,MAAM,WAAW,4BAA4B;IAC3C,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,MAAM,8BAA8B,GACtC,aAAa,GACb,eAAe,GACf,iBAAiB,GACjB,YAAY,CAAC;AAEjB;;;;;GAKG;AACH,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,iCAAiC;IAChD,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,8BAA8B,CAAC;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,EAAE,qBAAqB,CAAC;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,UAAU,CAAC,EAAE,uBAAuB,EAAE,CAAC;CACxC;AAED,MAAM,WAAW,kCAAkC;IACjD,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,mFAAmF;AACnF,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,mBAAmB,CAG5E"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/channels/trigger/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,0BAA0B,kBAAkB,CAAC;AAK1D,uDAAuD;AACvD,QAAA,MAAM,YAAY,wCAAoC,CAAC;AAoBvD,QAAA,MAAM,kBAAkB;;;;;;;;;;;;;iBAKtB,CAAC;AACH,QAAA,MAAM,0BAA0B;;;;;;;;;;;;;;iBAM9B,CAAC;AACH,QAAA,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;2BAGf,CAAC;AAEH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AACjE,MAAM,MAAM,0BAA0B,GAAG,CAAC,CAAC,KAAK,CAC9C,OAAO,kBAAkB,CAAC,KAAK,CAAC,KAAK,CACtC,CAAC;AACF,MAAM,MAAM,0BAA0B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAC5E,MAAM,MAAM,kCAAkC,GAAG,CAAC,CAAC,KAAK,CACtD,OAAO,0BAA0B,CAClC,CAAC;AACF,6HAA6H;AAC7H,MAAM,MAAM,oBAAoB,GAC9B,kCAAkC,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,CAAC;AAC9D,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAE9D,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,qBAAqB,CAAC;IAC/B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3B;AAED,MAAM,WAAW,4BAA4B;IAC3C,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,MAAM,8BAA8B,GACtC,aAAa,GACb,eAAe,GACf,iBAAiB,GACjB,YAAY,CAAC;AAEjB;;;;;GAKG;AACH,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,iCAAiC;IAChD,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,8BAA8B,CAAC;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,EAAE,qBAAqB,CAAC;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,OAAO,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3B;;;OAGG;IACH,UAAU,CAAC,EAAE,uBAAuB,EAAE,CAAC;CACxC;AAED,MAAM,WAAW,kCAAkC;IACjD,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,mFAAmF;AACnF,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,mBAAmB,CAG5E"}
@@ -19,6 +19,11 @@ const channelEventBase = z.object({
19
19
  channel_id: channelId,
20
20
  source_thread_key: nonblankString,
21
21
  address: opaqueObject,
22
+ /**
23
+ * Short-lived Agent Auth identity-context JWT. When present, ingress stamps
24
+ * its principal UUID as `x-mda-user-id` instead of `mda:channel`.
25
+ */
26
+ identity_context: z.string().nullish(),
22
27
  });
23
28
  const messageEventSchema = channelEventBase.extend({
24
29
  type: z.literal("message"),
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/channels/trigger/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,CAAC,MAAM,0BAA0B,GAAG,eAAe,CAAC;AAE1D,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;IAC3E,OAAO,EAAE,kBAAkB;CAC5B,CAAC,CAAC;AACH,uDAAuD;AACvD,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;AACvD,MAAM,SAAS,GAAG,CAAC;KAChB,MAAM,EAAE;KACR,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,SAAS,EAAE;IACrD,OAAO,EAAE,cAAc;CACxB,CAAC,CAAC;AACL,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;IACvB,QAAQ,EAAE,cAAc;IACxB,WAAW,EAAE,cAAc;IAC3B,UAAU,EAAE,cAAc;IAC1B,UAAU,EAAE,SAAS;IACrB,iBAAiB,EAAE,cAAc;IACjC,OAAO,EAAE,YAAY;CACtB,CAAC,CAAC;AACH,MAAM,kBAAkB,GAAG,gBAAgB,CAAC,MAAM,CAAC;IACjD,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;IAC1B,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC;KAChC,CAAC;CACH,CAAC,CAAC;AACH,MAAM,0BAA0B,GAAG,gBAAgB,CAAC,MAAM,CAAC;IACzD,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC;IACnC,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC;QACnC,MAAM,EAAE,YAAY;KACrB,CAAC;CACH,CAAC,CAAC;AACH,MAAM,WAAW,GAAG,CAAC,CAAC,kBAAkB,CAAC,MAAM,EAAE;IAC/C,kBAAkB;IAClB,0BAA0B;CAC3B,CAAC,CAAC;AA+DH,mFAAmF;AACnF,MAAM,UAAU,wBAAwB,CAAC,KAAc;IACrD,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACzB,OAAO,KAA4B,CAAC;AACtC,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/channels/trigger/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,CAAC,MAAM,0BAA0B,GAAG,eAAe,CAAC;AAE1D,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;IAC3E,OAAO,EAAE,kBAAkB;CAC5B,CAAC,CAAC;AACH,uDAAuD;AACvD,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;AACvD,MAAM,SAAS,GAAG,CAAC;KAChB,MAAM,EAAE;KACR,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,SAAS,EAAE;IACrD,OAAO,EAAE,cAAc;CACxB,CAAC,CAAC;AACL,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;IACvB,QAAQ,EAAE,cAAc;IACxB,WAAW,EAAE,cAAc;IAC3B,UAAU,EAAE,cAAc;IAC1B,UAAU,EAAE,SAAS;IACrB,iBAAiB,EAAE,cAAc;IACjC,OAAO,EAAE,YAAY;IACrB;;;OAGG;IACH,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE;CACvC,CAAC,CAAC;AACH,MAAM,kBAAkB,GAAG,gBAAgB,CAAC,MAAM,CAAC;IACjD,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;IAC1B,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC;KAChC,CAAC;CACH,CAAC,CAAC;AACH,MAAM,0BAA0B,GAAG,gBAAgB,CAAC,MAAM,CAAC;IACzD,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC;IACnC,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC;QACnC,MAAM,EAAE,YAAY;KACrB,CAAC;CACH,CAAC,CAAC;AACH,MAAM,WAAW,GAAG,CAAC,CAAC,kBAAkB,CAAC,MAAM,EAAE;IAC/C,kBAAkB;IAClB,0BAA0B;CAC3B,CAAC,CAAC;AAmEH,mFAAmF;AACnF,MAAM,UAAU,wBAAwB,CAAC,KAAc;IACrD,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACzB,OAAO,KAA4B,CAAC;AACtC,CAAC"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * `connections.get(...)` — read a managed connection from a tool.
3
+ *
4
+ * `{ type: "agent" }` resolves material owned by the current deployment.
5
+ * `{ type: "user" }` resolves per-caller grants (OAuth or opaque). Resolution
6
+ * reads Agent Auth on every await and never caches.
7
+ *
8
+ * `mda dev` substitutes local values for agent opaque secrets via `MDA_DEV_*`.
9
+ * User-owned connections need a deployment; opaque user grants use the same
10
+ * pre-run gate as OAuth.
11
+ */
12
+ import type { RuntimeIdentity } from "./identity/index.js";
13
+ import { CredentialStoreError, type AgentAuthContext } from "./agent-auth.js";
14
+ export { AGENT_AUTH_TIMEOUT_MS, AgentAuthUnknownProviderError, CredentialAuthorizationRequiredError, CredentialStoreError, } from "./agent-auth.js";
15
+ export type { AgentAuthContext, PendingAuthorization } from "./agent-auth.js";
16
+ export type AgentConnectionOwner = {
17
+ type: "agent";
18
+ };
19
+ export type UserConnectionOwner = {
20
+ type: "user";
21
+ id?: string;
22
+ };
23
+ export type ConnectionOwner = AgentConnectionOwner | UserConnectionOwner;
24
+ export interface ConnectionRequest {
25
+ slug: string;
26
+ owner: ConnectionOwner;
27
+ identity?: RuntimeIdentity;
28
+ }
29
+ declare const CONNECTION_REFERENCE: unique symbol;
30
+ export declare class ConnectionNotFoundError extends Error {
31
+ readonly slug: string;
32
+ readonly ownerType: ConnectionOwner["type"];
33
+ constructor(slug: string, ownerType: ConnectionOwner["type"]);
34
+ }
35
+ /** `LANGSMITH_ENDPOINT` is missing a usable Agent Auth origin. */
36
+ export declare class InvalidAgentAuthEndpointError extends CredentialStoreError {
37
+ readonly name = "InvalidAgentAuthEndpointError";
38
+ constructor();
39
+ }
40
+ export declare class ConnectionReference implements PromiseLike<string> {
41
+ readonly slug: string;
42
+ readonly owner: ConnectionOwner;
43
+ private readonly accessor;
44
+ readonly [CONNECTION_REFERENCE] = true;
45
+ constructor(slug: string, owner: ConnectionOwner, accessor: Connections);
46
+ then<TResult1 = string, TResult2 = never>(onfulfilled?: ((value: string) => TResult1 | PromiseLike<TResult1>) | null, onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null): PromiseLike<TResult1 | TResult2>;
47
+ }
48
+ export declare function isConnectionReference(value: unknown): value is ConnectionReference;
49
+ export declare class AgentAuthConnectionStore {
50
+ private readonly env;
51
+ private readonly fetchImpl;
52
+ private readonly timeoutMs;
53
+ constructor(env?: NodeJS.ProcessEnv, fetchImpl?: typeof fetch, timeoutMs?: number);
54
+ fetch(request: ConnectionRequest): Promise<string | undefined>;
55
+ }
56
+ export declare class Connections {
57
+ private readonly store;
58
+ constructor(store?: AgentAuthConnectionStore);
59
+ get(slug: string, owner: ConnectionOwner): ConnectionReference;
60
+ resolve(slug: string, owner: ConnectionOwner): Promise<string>;
61
+ resolveDeploymentSecret(slug: string): Promise<string>;
62
+ }
63
+ export declare function agentConnectionEnvKey(slug: string): string;
64
+ export declare function resolveOwnerId(owner: ConnectionOwner, identity: RuntimeIdentity | undefined, deploymentId: string | undefined): string;
65
+ export declare function resolveAgentAuthContext(identity: RuntimeIdentity | undefined, env?: NodeJS.ProcessEnv): AgentAuthContext;
66
+ /**
67
+ * Origin for Agent Auth HTTP calls from `LANGSMITH_ENDPOINT`.
68
+ *
69
+ * Cloud SaaS revisions omit that reserved name and inject `LANGCHAIN_ENDPOINT`
70
+ * instead; read it as the same setting so we do not default to production.
71
+ */
72
+ export declare function resolveAgentAuthBaseUrl(env?: NodeJS.ProcessEnv): string;
73
+ export declare const connections: Connections;
74
+ //# sourceMappingURL=connections.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connections.d.ts","sourceRoot":"","sources":["../src/connections.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAIL,oBAAoB,EACpB,KAAK,gBAAgB,EACtB,MAAM,iBAAiB,CAAC;AAMzB,OAAO,EACL,qBAAqB,EACrB,6BAA6B,EAC7B,oCAAoC,EACpC,oBAAoB,GACrB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAE9E,MAAM,MAAM,oBAAoB,GAAG;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC;AACrD,MAAM,MAAM,mBAAmB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAChE,MAAM,MAAM,eAAe,GAAG,oBAAoB,GAAG,mBAAmB,CAAC;AAEzE,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,eAAe,CAAC;IACvB,QAAQ,CAAC,EAAE,eAAe,CAAC;CAC5B;AAED,QAAA,MAAM,oBAAoB,eAA0C,CAAC;AAiBrE,qBAAa,uBAAwB,SAAQ,KAAK;IAChD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC;IAE5C,YAAY,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,CAAC,MAAM,CAAC,EAK3D;CACF;AAED,kEAAkE;AAClE,qBAAa,6BAA8B,SAAQ,oBAAoB;IACrE,SAAkB,IAAI,mCAAmC;IAEzD,cAIC;CACF;AAED,qBAAa,mBAAoB,YAAW,WAAW,CAAC,MAAM,CAAC;IAI3D,QAAQ,CAAC,IAAI,EAAE,MAAM;IACrB,QAAQ,CAAC,KAAK,EAAE,eAAe;IAC/B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAL3B,QAAQ,CAAC,CAAC,oBAAoB,CAAC,QAAQ;IAEvC,YACW,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,eAAe,EACd,QAAQ,EAAE,WAAW,EACpC;IAEJ,IAAI,CAAC,QAAQ,GAAG,MAAM,EAAE,QAAQ,GAAG,KAAK,EACtC,WAAW,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,EAC1E,UAAU,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,OAAO,KAAK,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,GAC1E,WAAW,CAAC,QAAQ,GAAG,QAAQ,CAAC,CAIlC;CACF;AAED,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,mBAAmB,CAO9B;AASD,qBAAa,wBAAwB;IAEjC,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAH5B,YACmB,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,SAAS,GAAE,OAAO,KAAa,EAC/B,SAAS,SAAwB,EAChD;IAEE,KAAK,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CA4DnE;CACF;AAED,qBAAa,WAAW;IAEpB,OAAO,CAAC,QAAQ,CAAC,KAAK;IADxB,YACmB,KAAK,GAAE,wBAAyD,EAC/E;IAEJ,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,mBAAmB,CAM7D;IAEK,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAkBnE;IAEK,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAS3D;CACF;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAI1D;AA+CD,wBAAgB,cAAc,CAC5B,KAAK,EAAE,eAAe,EACtB,QAAQ,EAAE,eAAe,GAAG,SAAS,EACrC,YAAY,EAAE,MAAM,GAAG,SAAS,GAC/B,MAAM,CAqBR;AAED,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,eAAe,GAAG,SAAS,EACrC,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,gBAAgB,CAqBlB;AAuBD;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,MAAM,CAuBR;AAED,eAAO,MAAM,WAAW,aAAoB,CAAC"}
@@ -0,0 +1,277 @@
1
+ /**
2
+ * `connections.get(...)` — read a managed connection from a tool.
3
+ *
4
+ * `{ type: "agent" }` resolves material owned by the current deployment.
5
+ * `{ type: "user" }` resolves per-caller grants (OAuth or opaque). Resolution
6
+ * reads Agent Auth on every await and never caches.
7
+ *
8
+ * `mda dev` substitutes local values for agent opaque secrets via `MDA_DEV_*`.
9
+ * User-owned connections need a deployment; opaque user grants use the same
10
+ * pre-run gate as OAuth.
11
+ */
12
+ import { AGENT_AUTH_TIMEOUT_MS, AgentAuth, CredentialAuthorizationRequiredError, CredentialStoreError, } from "./agent-auth.js";
13
+ import { buildRuntimeIdentity, resolveRuntimeConfigurable, } from "./runtime/identity-runtime.js";
14
+ export { AGENT_AUTH_TIMEOUT_MS, AgentAuthUnknownProviderError, CredentialAuthorizationRequiredError, CredentialStoreError, } from "./agent-auth.js";
15
+ const CONNECTION_REFERENCE = Symbol("managed-deepagents.connection");
16
+ const SLUG_PATTERN = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
17
+ const MAX_SLUG_LENGTH = 64;
18
+ const DEFAULT_LANGSMITH_ENDPOINT = "https://api.smith.langchain.com";
19
+ const DEV_CREDENTIAL_PREFIX = "MDA_DEV_";
20
+ function localUserConnectionUnsupported(slug) {
21
+ const localHint = slug
22
+ ? `set ${agentConnectionEnvKey(slug)}`
23
+ : "set the corresponding MDA_DEV_<slug> variable";
24
+ return ("user-owned connections need a deployment, so they do not resolve in `mda dev`: " +
25
+ "deploy with `mda deploy` to exercise this connection, or declare it as " +
26
+ `{ type: "agent" } and ${localHint} for local runs`);
27
+ }
28
+ export class ConnectionNotFoundError extends Error {
29
+ slug;
30
+ ownerType;
31
+ constructor(slug, ownerType) {
32
+ super(`no ${ownerType} connection is set for slug ${JSON.stringify(slug)}`);
33
+ this.name = "ConnectionNotFoundError";
34
+ this.slug = slug;
35
+ this.ownerType = ownerType;
36
+ }
37
+ }
38
+ /** `LANGSMITH_ENDPOINT` is missing a usable Agent Auth origin. */
39
+ export class InvalidAgentAuthEndpointError extends CredentialStoreError {
40
+ name = "InvalidAgentAuthEndpointError";
41
+ constructor() {
42
+ super("LangSmith Agent Auth endpoint is not a valid URL (set LANGSMITH_ENDPOINT)");
43
+ }
44
+ }
45
+ export class ConnectionReference {
46
+ slug;
47
+ owner;
48
+ accessor;
49
+ [CONNECTION_REFERENCE] = true;
50
+ constructor(slug, owner, accessor) {
51
+ this.slug = slug;
52
+ this.owner = owner;
53
+ this.accessor = accessor;
54
+ }
55
+ then(onfulfilled, onrejected) {
56
+ return this.accessor
57
+ .resolve(this.slug, this.owner)
58
+ .then(onfulfilled, onrejected);
59
+ }
60
+ }
61
+ export function isConnectionReference(value) {
62
+ return (value instanceof ConnectionReference ||
63
+ (typeof value === "object" &&
64
+ value !== null &&
65
+ CONNECTION_REFERENCE in value));
66
+ }
67
+ export class AgentAuthConnectionStore {
68
+ env;
69
+ fetchImpl;
70
+ timeoutMs;
71
+ constructor(env = process.env, fetchImpl = fetch, timeoutMs = AGENT_AUTH_TIMEOUT_MS) {
72
+ this.env = env;
73
+ this.fetchImpl = fetchImpl;
74
+ this.timeoutMs = timeoutMs;
75
+ }
76
+ async fetch(request) {
77
+ if (this.env.MDA_LOCAL_DEV === "1") {
78
+ if (request.owner.type === "user") {
79
+ throw new CredentialStoreError(localUserConnectionUnsupported(request.slug));
80
+ }
81
+ const value = this.env[agentConnectionEnvKey(request.slug)];
82
+ if (value !== undefined && value.trim()) {
83
+ return value;
84
+ }
85
+ throw new CredentialStoreError(`local agent connection ${JSON.stringify(request.slug)} is not configured; ` +
86
+ `set ${agentConnectionEnvKey(request.slug)}`);
87
+ }
88
+ const config = resolveAgentAuthConfig(this.env);
89
+ const ownerId = resolveOwnerId(request.owner, request.identity, config.deploymentId);
90
+ const client = new AgentAuth({
91
+ baseUrl: config.baseUrl,
92
+ agentId: config.deploymentId ?? ownerId,
93
+ principalId: ownerId,
94
+ apiKey: config.apiKey,
95
+ workspaceId: config.workspaceId,
96
+ }, this.fetchImpl, this.timeoutMs);
97
+ const row = await client.findWorkspaceConnection(request.slug);
98
+ if (!row) {
99
+ return undefined;
100
+ }
101
+ if (request.owner.type === "user") {
102
+ if (row.kind === "secret") {
103
+ return await client.readUserSecretForConnection(row);
104
+ }
105
+ if (row.kind === "oauth2") {
106
+ return await client.readUserAccessTokenForConnection(row);
107
+ }
108
+ return undefined;
109
+ }
110
+ if (row.kind === "secret") {
111
+ const credentialId = await client.findSecretCredentialId(row, request.slug);
112
+ if (!credentialId) {
113
+ return undefined;
114
+ }
115
+ return await client.readSecret(credentialId);
116
+ }
117
+ if (row.kind === "oauth2") {
118
+ return await client.readConnectionAccessToken(row.connectionId);
119
+ }
120
+ return undefined;
121
+ }
122
+ }
123
+ export class Connections {
124
+ store;
125
+ constructor(store = new AgentAuthConnectionStore()) {
126
+ this.store = store;
127
+ }
128
+ get(slug, owner) {
129
+ return new ConnectionReference(normalizeSlug(slug), normalizeOwner(owner), this);
130
+ }
131
+ async resolve(slug, owner) {
132
+ const configurable = resolveRuntimeConfigurable(undefined);
133
+ if (!configurable) {
134
+ throw new Error("connections.get(...) must be awaited inside a run: resolve a connection in a tool or middleware, not at import time");
135
+ }
136
+ const value = await this.store.fetch({
137
+ slug,
138
+ owner,
139
+ identity: buildRuntimeIdentity(configurable),
140
+ });
141
+ if (value === undefined) {
142
+ throw owner.type === "user"
143
+ ? new CredentialAuthorizationRequiredError([slug])
144
+ : new ConnectionNotFoundError(slug, owner.type);
145
+ }
146
+ return value;
147
+ }
148
+ async resolveDeploymentSecret(slug) {
149
+ const value = await this.store.fetch({
150
+ slug,
151
+ owner: { type: "agent" },
152
+ });
153
+ if (value === undefined) {
154
+ throw new ConnectionNotFoundError(slug, "agent");
155
+ }
156
+ return value;
157
+ }
158
+ }
159
+ export function agentConnectionEnvKey(slug) {
160
+ return `${DEV_CREDENTIAL_PREFIX}${normalizeSlug(slug)
161
+ .toUpperCase()
162
+ .replaceAll("-", "_")}`;
163
+ }
164
+ function normalizeSlug(slug) {
165
+ if (typeof slug !== "string") {
166
+ throw new TypeError("connection slug must be a string");
167
+ }
168
+ const canonical = slug.trim();
169
+ if (!canonical ||
170
+ canonical.length > MAX_SLUG_LENGTH ||
171
+ !SLUG_PATTERN.test(canonical)) {
172
+ throw new TypeError(`connection slug ${JSON.stringify(slug)} is invalid: use lowercase letters, digits, and single hyphens, at most ${MAX_SLUG_LENGTH} characters`);
173
+ }
174
+ return canonical;
175
+ }
176
+ function normalizeOwner(owner) {
177
+ if (!owner || typeof owner !== "object") {
178
+ throw new TypeError('connection owner is required: pass { type: "agent" } or { type: "user" }');
179
+ }
180
+ const keys = Object.keys(owner);
181
+ if (keys.some((key) => key !== "type" && key !== "id")) {
182
+ throw new TypeError("connection owner has an unknown key");
183
+ }
184
+ if (owner.type === "agent") {
185
+ if ("id" in owner) {
186
+ throw new TypeError('connection owner "id" is not accepted for { type: "agent" }');
187
+ }
188
+ return { type: "agent" };
189
+ }
190
+ if (owner.type === "user") {
191
+ if (owner.id === undefined)
192
+ return { type: "user" };
193
+ if (typeof owner.id !== "string" || !owner.id.trim()) {
194
+ throw new TypeError('connection owner "id" must be a non-empty string');
195
+ }
196
+ return { type: "user", id: owner.id.trim() };
197
+ }
198
+ throw new TypeError("connection owner type is not supported");
199
+ }
200
+ export function resolveOwnerId(owner, identity, deploymentId) {
201
+ if (owner.type === "user") {
202
+ const authenticated = identity?.user.id;
203
+ if (!authenticated) {
204
+ throw new CredentialStoreError("user connections require an authenticated user principal");
205
+ }
206
+ if (owner.id !== undefined && owner.id !== authenticated) {
207
+ throw new CredentialStoreError("user connection owner id must match the authenticated principal");
208
+ }
209
+ return authenticated;
210
+ }
211
+ if (!deploymentId) {
212
+ throw new CredentialStoreError("connections are not configured: LANGSMITH_HOST_PROJECT_ID is not set");
213
+ }
214
+ return deploymentId;
215
+ }
216
+ export function resolveAgentAuthContext(identity, env = process.env) {
217
+ if (env.MDA_LOCAL_DEV === "1") {
218
+ throw new CredentialStoreError(localUserConnectionUnsupported());
219
+ }
220
+ const config = resolveAgentAuthConfig(env);
221
+ if (!config.deploymentId) {
222
+ throw new CredentialStoreError("connections are not configured: LANGSMITH_HOST_PROJECT_ID is not set");
223
+ }
224
+ return {
225
+ baseUrl: config.baseUrl,
226
+ agentId: config.deploymentId,
227
+ principalId: resolveOwnerId({ type: "user" }, identity, config.deploymentId),
228
+ apiKey: config.apiKey,
229
+ workspaceId: config.workspaceId,
230
+ };
231
+ }
232
+ function resolveAgentAuthConfig(env) {
233
+ const apiKey = env.LANGSMITH_API_KEY?.trim();
234
+ if (!apiKey) {
235
+ throw new CredentialStoreError("connections are not configured: LANGSMITH_API_KEY is not set");
236
+ }
237
+ const workspaceId = env.LANGSMITH_WORKSPACE_ID?.trim();
238
+ if (!workspaceId) {
239
+ throw new CredentialStoreError("connections are not configured: LANGSMITH_WORKSPACE_ID is not set");
240
+ }
241
+ return {
242
+ baseUrl: resolveAgentAuthBaseUrl(env),
243
+ apiKey,
244
+ deploymentId: env.LANGSMITH_HOST_PROJECT_ID?.trim() || undefined,
245
+ workspaceId,
246
+ };
247
+ }
248
+ /**
249
+ * Origin for Agent Auth HTTP calls from `LANGSMITH_ENDPOINT`.
250
+ *
251
+ * Cloud SaaS revisions omit that reserved name and inject `LANGCHAIN_ENDPOINT`
252
+ * instead; read it as the same setting so we do not default to production.
253
+ */
254
+ export function resolveAgentAuthBaseUrl(env = process.env) {
255
+ const raw = env.LANGSMITH_ENDPOINT?.trim() ||
256
+ env.LANGCHAIN_ENDPOINT?.trim() ||
257
+ DEFAULT_LANGSMITH_ENDPOINT;
258
+ let parsed;
259
+ try {
260
+ parsed = new URL(raw);
261
+ }
262
+ catch {
263
+ throw new InvalidAgentAuthEndpointError();
264
+ }
265
+ if (!["http:", "https:"].includes(parsed.protocol) ||
266
+ !parsed.hostname ||
267
+ parsed.username ||
268
+ parsed.password ||
269
+ (parsed.pathname !== "/" && parsed.pathname !== "") ||
270
+ parsed.search ||
271
+ parsed.hash) {
272
+ throw new InvalidAgentAuthEndpointError();
273
+ }
274
+ return parsed.origin;
275
+ }
276
+ export const connections = new Connections();
277
+ //# sourceMappingURL=connections.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connections.js","sourceRoot":"","sources":["../src/connections.ts"],"names":[],"mappings":"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"}