managed-deepagents 0.0.3-dev.32 → 0.0.3-dev.34

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 (61) hide show
  1. package/dist/connectors.d.ts +2 -7
  2. package/dist/connectors.d.ts.map +1 -1
  3. package/dist/connectors.js +1 -18
  4. package/dist/connectors.js.map +1 -1
  5. package/dist/index.d.ts +0 -5
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +0 -2
  8. package/dist/index.js.map +1 -1
  9. package/dist/runtime/index.d.ts +0 -13
  10. package/dist/runtime/index.d.ts.map +1 -1
  11. package/dist/runtime/index.js +12 -39
  12. package/dist/runtime/index.js.map +1 -1
  13. package/dist/runtime/types.d.ts +7 -23
  14. package/dist/runtime/types.d.ts.map +1 -1
  15. package/dist/types.d.ts +0 -9
  16. package/dist/types.d.ts.map +1 -1
  17. package/package.json +8 -12
  18. package/dist/connectors/langsmith.d.ts +0 -133
  19. package/dist/connectors/langsmith.d.ts.map +0 -1
  20. package/dist/connectors/langsmith.js +0 -262
  21. package/dist/connectors/langsmith.js.map +0 -1
  22. package/dist/identity.d.ts +0 -273
  23. package/dist/identity.d.ts.map +0 -1
  24. package/dist/identity.js +0 -358
  25. package/dist/identity.js.map +0 -1
  26. package/dist/runtime/auth.d.ts +0 -54
  27. package/dist/runtime/auth.d.ts.map +0 -1
  28. package/dist/runtime/auth.js +0 -191
  29. package/dist/runtime/auth.js.map +0 -1
  30. package/dist/runtime/connector.d.ts +0 -138
  31. package/dist/runtime/connector.d.ts.map +0 -1
  32. package/dist/runtime/connector.js +0 -82
  33. package/dist/runtime/connector.js.map +0 -1
  34. package/dist/runtime/credentials.d.ts +0 -60
  35. package/dist/runtime/credentials.d.ts.map +0 -1
  36. package/dist/runtime/credentials.js +0 -189
  37. package/dist/runtime/credentials.js.map +0 -1
  38. package/dist/runtime/identity-http.d.ts +0 -27
  39. package/dist/runtime/identity-http.d.ts.map +0 -1
  40. package/dist/runtime/identity-http.js +0 -150
  41. package/dist/runtime/identity-http.js.map +0 -1
  42. package/dist/runtime/identity-runtime.d.ts +0 -54
  43. package/dist/runtime/identity-runtime.d.ts.map +0 -1
  44. package/dist/runtime/identity-runtime.js +0 -151
  45. package/dist/runtime/identity-runtime.js.map +0 -1
  46. package/dist/runtime/langsmith-connector.d.ts +0 -113
  47. package/dist/runtime/langsmith-connector.d.ts.map +0 -1
  48. package/dist/runtime/langsmith-connector.js +0 -410
  49. package/dist/runtime/langsmith-connector.js.map +0 -1
  50. package/dist/runtime/managed-middleware.d.ts +0 -25
  51. package/dist/runtime/managed-middleware.d.ts.map +0 -1
  52. package/dist/runtime/managed-middleware.js +0 -76
  53. package/dist/runtime/managed-middleware.js.map +0 -1
  54. package/dist/runtime/managed-tools.d.ts +0 -61
  55. package/dist/runtime/managed-tools.d.ts.map +0 -1
  56. package/dist/runtime/managed-tools.js +0 -102
  57. package/dist/runtime/managed-tools.js.map +0 -1
  58. package/dist/runtime/validated-token.d.ts +0 -25
  59. package/dist/runtime/validated-token.d.ts.map +0 -1
  60. package/dist/runtime/validated-token.js +0 -260
  61. package/dist/runtime/validated-token.js.map +0 -1
package/dist/identity.js DELETED
@@ -1,358 +0,0 @@
1
- /**
2
- * The managed `identity.ts` declaration primitive.
3
- *
4
- * A project's root `identity.ts` exports a named `identity` created with
5
- * `defineIdentity(...)` (or `defineIdentity.preset(...)`). The compiler
6
- * discovers it, generates the custom-auth handler, and wires thread/memory
7
- * scoping and downstream credentials. See `specification/identity-final.md`.
8
- *
9
- * This module is pure authoring-time config construction plus eager validation —
10
- * it has no runtime dependency (the `providers.*` helpers return plain data).
11
- */
12
- const PRESETS = {
13
- "private-assistant": {
14
- ingress: { http: "trusted_backend" },
15
- tenancy: "single",
16
- scoping: { threads: "actor", memory: "actor", credentials: "actor" },
17
- },
18
- "multi-tenant-saas": {
19
- ingress: { http: "trusted_backend" },
20
- tenancy: "multi",
21
- scoping: { threads: "actor", memory: "tenant", credentials: "agent" },
22
- },
23
- "shared-bot": {
24
- ingress: { http: "trusted_backend" },
25
- tenancy: "single",
26
- scoping: { threads: "channel", memory: "actor", credentials: "agent" },
27
- },
28
- "internal-tool": {
29
- ingress: { http: "trusted_backend" },
30
- tenancy: "single",
31
- scoping: { threads: "actor", memory: "actor", credentials: "agent" },
32
- },
33
- service: {
34
- ingress: { http: "trusted_backend" },
35
- tenancy: "single",
36
- scoping: { memory: "agent", credentials: "agent" },
37
- },
38
- };
39
- /**
40
- * Declare the identity contract for the deployment.
41
- *
42
- * Most developers call {@link defineIdentity.preset} instead. The three scoping
43
- * axes are the power-user layer underneath.
44
- */
45
- export const defineIdentity = Object.assign(function defineIdentity(config) {
46
- validateIdentity(config);
47
- return { kind: "identity", config };
48
- }, {
49
- preset(name, overrides) {
50
- const base = PRESETS[name];
51
- if (base === undefined) {
52
- throw new Error(`defineIdentity.preset(...) unknown preset "${String(name)}". ` +
53
- `Valid presets: ${Object.keys(PRESETS).join(", ")}.`);
54
- }
55
- return defineIdentity(deepMerge(base, overrides));
56
- },
57
- });
58
- function supabaseBase(projectRef) {
59
- return `https://${projectRef}.supabase.co/auth/v1`;
60
- }
61
- /**
62
- * Normalize authoring-time Supabase regions into the runtime `regions` shape. A
63
- * bare string stays a URL (using the shared base `apikey`); an object resolves
64
- * its `url` from `url`/`projectRef` and, when given, carries region-specific
65
- * `headers`/`anonKey` that override the shared `apikey` at introspection time.
66
- */
67
- function normalizeSupabaseRegions(regions) {
68
- const out = {};
69
- for (const [region, entry] of Object.entries(regions)) {
70
- if (typeof entry === "string") {
71
- out[region] = entry;
72
- continue;
73
- }
74
- const url = entry.url ??
75
- (entry.projectRef ? `${supabaseBase(entry.projectRef)}/user` : undefined);
76
- if (!url) {
77
- throw new Error(`providers.supabase(...) region "${region}" needs a \`projectRef\` or \`url\`.`);
78
- }
79
- const headers = entry.headers ?? (entry.anonKey ? { apikey: entry.anonKey } : undefined);
80
- out[region] = headers ? { url, headers } : { url };
81
- }
82
- return out;
83
- }
84
- /**
85
- * Provider integrations — authoring-time sugar over {@link ValidatedTokenProvider}
86
- * (§6.2). Each returns a plain provider object you can spread-and-override, so
87
- * there is no new runtime surface.
88
- */
89
- export const providers = {
90
- auth0({ domain, audience, }) {
91
- return {
92
- issuer: `https://${domain}/`,
93
- jwks: `https://${domain}/.well-known/jwks.json`,
94
- ...(audience ? { audience } : {}),
95
- algorithms: ["RS256"],
96
- claims: { actor: "sub", tenant: "org_id" },
97
- };
98
- },
99
- clerk({ domain }) {
100
- return {
101
- issuer: `https://${domain}`,
102
- jwks: `https://${domain}/.well-known/jwks.json`,
103
- algorithms: ["RS256"],
104
- claims: { actor: "sub" },
105
- };
106
- },
107
- okta({ domain, audience, }) {
108
- return {
109
- issuer: `https://${domain}`,
110
- jwks: `https://${domain}/oauth2/v1/keys`,
111
- ...(audience ? { audience } : {}),
112
- algorithms: ["RS256"],
113
- claims: { actor: "sub" },
114
- };
115
- },
116
- cognito({ userPoolId, region, }) {
117
- const issuer = `https://cognito-idp.${region}.amazonaws.com/${userPoolId}`;
118
- return {
119
- issuer,
120
- jwks: `${issuer}/.well-known/jwks.json`,
121
- algorithms: ["RS256"],
122
- claims: { actor: "sub" },
123
- };
124
- },
125
- entra({ tenantId, audience, }) {
126
- return {
127
- issuer: `https://login.microsoftonline.com/${tenantId}/v2.0`,
128
- jwks: `https://login.microsoftonline.com/${tenantId}/discovery/v2.0/keys`,
129
- ...(audience ? { audience } : {}),
130
- algorithms: ["RS256"],
131
- claims: { actor: "oid" },
132
- };
133
- },
134
- google({ audience } = {}) {
135
- return {
136
- issuer: "https://accounts.google.com",
137
- jwks: "https://www.googleapis.com/oauth2/v3/certs",
138
- ...(audience ? { audience } : {}),
139
- algorithms: ["RS256"],
140
- claims: { actor: "sub", email: "email" },
141
- };
142
- },
143
- supabase({ projectRef, introspect, regions, regionHeader = "x-supabase-region", }) {
144
- if (introspect) {
145
- if (regions) {
146
- return {
147
- id: "supabase",
148
- introspect: {
149
- regionHeader,
150
- regions: normalizeSupabaseRegions(regions),
151
- headers: { apikey: "${SUPABASE_ANON_KEY}" },
152
- },
153
- claims: { actor: "email" },
154
- };
155
- }
156
- if (!projectRef) {
157
- throw new Error("providers.supabase(...) requires `projectRef` (single region) or `regions`.");
158
- }
159
- return {
160
- id: "supabase",
161
- introspect: {
162
- url: `${supabaseBase(projectRef)}/user`,
163
- headers: { apikey: "${SUPABASE_ANON_KEY}" },
164
- },
165
- claims: { actor: "email" },
166
- };
167
- }
168
- if (!projectRef) {
169
- throw new Error("providers.supabase(...) without `introspect` requires `projectRef`.");
170
- }
171
- const base = supabaseBase(projectRef);
172
- return {
173
- id: "supabase",
174
- issuer: base,
175
- jwks: `${base}/.well-known/jwks.json`,
176
- algorithms: ["ES256", "RS256"],
177
- claims: { actor: "email" },
178
- };
179
- },
180
- /** Universal fallback for any OIDC-compliant IdP via discovery. */
181
- oidc({ issuer, audience, }) {
182
- return {
183
- issuer,
184
- discover: true,
185
- ...(audience ? { audience } : {}),
186
- claims: { actor: "sub" },
187
- };
188
- },
189
- /**
190
- * GitHub OAuth access tokens (opaque bearer tokens, not JWTs). MDA verifies
191
- * each request by calling `GET https://api.github.com/user` with the token.
192
- */
193
- github() {
194
- return {
195
- id: "github",
196
- introspect: {
197
- url: "https://api.github.com/user",
198
- headers: {
199
- Accept: "application/vnd.github+json",
200
- "X-GitHub-Api-Version": "2022-11-28",
201
- "User-Agent": "managed-deepagents-github-example",
202
- },
203
- },
204
- claims: { actor: "login", email: "email" },
205
- };
206
- },
207
- /** MDA-issued anonymous/guest tokens. */
208
- guest({ ttl, actorPrefix, } = {}) {
209
- return {
210
- id: "guest",
211
- guest: {
212
- issue: true,
213
- ...(ttl ? { ttl } : {}),
214
- ...(actorPrefix ? { actorPrefix } : {}),
215
- },
216
- claims: { actor: "sub" },
217
- };
218
- },
219
- };
220
- const MANAGED_CREDENTIAL_MODES = ["agent", "actor", "none"];
221
- /**
222
- * Eagerly reject illegal identity configs at authoring time so misconfig never
223
- * reaches the compiler or runtime (§4.4).
224
- */
225
- export function validateIdentity(config) {
226
- const provided = config;
227
- const ingress = provided.ingress;
228
- if (ingress === null || typeof ingress !== "object" || !("http" in ingress)) {
229
- throw new Error("defineIdentity(...) requires an `ingress.http` value ('trusted_backend' or a validated_token config).");
230
- }
231
- const tenancy = provided.tenancy;
232
- if (tenancy !== "single" && tenancy !== "multi") {
233
- throw new Error('defineIdentity(...) requires `tenancy` to be "single" or "multi".');
234
- }
235
- const scoping = provided.scoping;
236
- if (scoping === null || typeof scoping !== "object") {
237
- throw new Error("defineIdentity(...) requires a `scoping` object.");
238
- }
239
- if (typeof scoping.memory !== "string") {
240
- throw new Error('defineIdentity(...) requires `scoping.memory` (one of "actor" | "tenant" | "agent" | "none").');
241
- }
242
- // tenancy: "single" cannot use any tenant-scoped axis.
243
- if (tenancy === "single") {
244
- const tenantAxes = ["threads", "memory", "credentials"].filter((axis) => scoping[axis] === "tenant");
245
- if (tenantAxes.length > 0) {
246
- throw new Error(`defineIdentity(...) cannot use "tenant" scope (${tenantAxes.join(", ")}) with tenancy: "single". Set tenancy: "multi".`);
247
- }
248
- }
249
- // Credentials axis must agree with the presence of a resolver/endpoint.
250
- const hasResolver = provided.credentials !== undefined;
251
- const credentialsMode = scoping.credentials;
252
- if (credentialsMode === "custom" && !hasResolver) {
253
- throw new Error('defineIdentity(...) with scoping.credentials: "custom" requires a `credentials` resolver or endpoint.');
254
- }
255
- if (hasResolver &&
256
- typeof credentialsMode === "string" &&
257
- MANAGED_CREDENTIAL_MODES.includes(credentialsMode)) {
258
- throw new Error(`defineIdentity(...) provides a \`credentials\` resolver but scoping.credentials is "${credentialsMode}". ` +
259
- 'Set scoping.credentials: "custom" (or remove the resolver).');
260
- }
261
- if (hasResolver) {
262
- validateCredentialResolver(provided.credentials);
263
- }
264
- // validated_token ingress needs at least one provider, each with claims.actor.
265
- const http = ingress.http;
266
- if (isValidatedToken(http)) {
267
- validateValidatedToken(http);
268
- }
269
- else if (http !== "trusted_backend") {
270
- throw new Error('defineIdentity(...) `ingress.http` must be "trusted_backend" or a { mode: "validated_token", providers: [...] } config.');
271
- }
272
- }
273
- function isValidatedToken(http) {
274
- return (typeof http === "object" &&
275
- http !== null &&
276
- http.mode === "validated_token");
277
- }
278
- function validateValidatedToken(http) {
279
- const list = http.providers;
280
- if (!Array.isArray(list) || list.length === 0) {
281
- throw new Error("defineIdentity(...) validated_token ingress requires a non-empty `providers` list.");
282
- }
283
- const multiple = list.length > 1;
284
- for (const [index, entry] of list.entries()) {
285
- const provider = entry;
286
- const label = provider?.id ?? `#${index}`;
287
- if (provider === null || typeof provider !== "object") {
288
- throw new Error(`defineIdentity(...) validated_token provider ${label} must be an object.`);
289
- }
290
- if (typeof provider.claims !== "object" ||
291
- provider.claims === null ||
292
- typeof provider.claims.actor !== "string" ||
293
- provider.claims.actor.length === 0) {
294
- throw new Error(`defineIdentity(...) validated_token provider ${label} requires \`claims.actor\`.`);
295
- }
296
- if (multiple && typeof provider.id !== "string") {
297
- throw new Error("defineIdentity(...) each validated_token provider requires an `id` when more than one is configured.");
298
- }
299
- const hasVerifier = typeof provider.jwks === "string" ||
300
- provider.discover === true ||
301
- provider.introspect !== undefined ||
302
- provider.guest !== undefined;
303
- if (!hasVerifier) {
304
- throw new Error(`defineIdentity(...) validated_token provider ${label} must declare one of \`jwks\`, \`discover\`, \`introspect\`, or \`guest\`.`);
305
- }
306
- }
307
- }
308
- function validateCredentialResolver(credentials) {
309
- if (credentials === null || typeof credentials !== "object") {
310
- throw new Error("defineIdentity(...) `credentials` must be a resolver ({ resolve }) or endpoint ({ endpoint }) config.");
311
- }
312
- const cfg = credentials;
313
- const hasResolveFn = typeof cfg.resolve === "function";
314
- const hasEndpoint = typeof cfg.endpoint === "object" &&
315
- cfg.endpoint !== null &&
316
- typeof cfg.endpoint.url === "string";
317
- if (hasResolveFn === hasEndpoint) {
318
- throw new Error("defineIdentity(...) `credentials` requires exactly one of `resolve` (function) or `endpoint` ({ url }).");
319
- }
320
- }
321
- function isPlainObject(value) {
322
- return (typeof value === "object" &&
323
- value !== null &&
324
- !Array.isArray(value) &&
325
- typeof value !== "function");
326
- }
327
- function deepMerge(base, patch) {
328
- if (patch === undefined)
329
- return structuredCloneConfig(base);
330
- if (!isPlainObject(base) || !isPlainObject(patch)) {
331
- return patch;
332
- }
333
- const out = { ...base };
334
- for (const [key, value] of Object.entries(patch)) {
335
- if (value === undefined)
336
- continue;
337
- const current = out[key];
338
- out[key] =
339
- isPlainObject(current) && isPlainObject(value)
340
- ? deepMerge(current, value)
341
- : value;
342
- }
343
- return out;
344
- }
345
- function structuredCloneConfig(value) {
346
- if (Array.isArray(value)) {
347
- return value.map((item) => structuredCloneConfig(item));
348
- }
349
- if (isPlainObject(value)) {
350
- const out = {};
351
- for (const [key, inner] of Object.entries(value)) {
352
- out[key] = structuredCloneConfig(inner);
353
- }
354
- return out;
355
- }
356
- return value;
357
- }
358
- //# sourceMappingURL=identity.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"identity.js","sourceRoot":"","sources":["../src/identity.ts"],"names":[],"mappings":"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"}
@@ -1,54 +0,0 @@
1
- import { Auth } from "@langchain/langgraph-sdk/auth";
2
- import type { IdentityConfig, IdentityDefinition, RuntimeIdentity } from "../identity.js";
3
- /**
4
- * The user object `@auth.authenticate` returns. `identity`/`permissions` satisfy
5
- * the LangGraph base shape; the `mda_*` fields carry the identity envelope into
6
- * `config.configurable.langgraph_auth_user` for the runtime seam.
7
- */
8
- export interface ManagedUser {
9
- identity: string;
10
- permissions: string[];
11
- mda_actor_id: string;
12
- mda_tenant_id?: string;
13
- mda_actor_email?: string;
14
- mda_claims?: Record<string, unknown>;
15
- [key: string]: unknown;
16
- }
17
- /**
18
- * Build the managed LangGraph custom-auth handler from a declared identity.
19
- *
20
- * Handles both ingress modes: `trusted_backend` (reserved headers behind a
21
- * shared ingress secret) and `validated_token` (browser-direct IdP tokens
22
- * verified via JWKS / introspection / MDA-signed guest). Also registers thread
23
- * and store scoping with a studio bypass.
24
- */
25
- export declare function buildManagedAuth(identity: IdentityDefinition): Auth;
26
- /**
27
- * Resolve the caller's frozen {@link RuntimeIdentity} from a raw HTTP request,
28
- * using the same ingress logic (`trusted_backend` headers / `validated_token`
29
- * verification) as the managed auth handler. Throws an {@link HTTPException}
30
- * (401) when the caller is unauthenticated or unresolvable.
31
- *
32
- * This is the resolver that backs default-secure connector HTTP routes: a
33
- * connector route runs behind identity by default, and this is what enforces it.
34
- */
35
- export declare function resolveRequestIdentity(cfg: IdentityConfig, request: Request): Promise<RuntimeIdentity>;
36
- /**
37
- * Fail-closed (403) unless every identity segment the memory scope requires is
38
- * present in the store `namespace`. `agent`/`none` scopes carry no per-identity
39
- * restriction (shared or absent memory), so any namespace is allowed.
40
- */
41
- export declare function assertStoreAccess(cfg: IdentityConfig, user: ManagedUser, value: unknown): void;
42
- /**
43
- * Resolve the caller identity for `trusted_backend`: validate the shared ingress
44
- * secret, then trust the reserved actor/tenant headers. Fail-closed (401) on a
45
- * missing/invalid secret, a missing actor, or a missing tenant under multi.
46
- */
47
- export declare function resolveTrustedBackendUser(cfg: IdentityConfig, request: Request): ManagedUser;
48
- /** Derive the owner value `@auth.on.threads` filters on, per the `threads` axis. */
49
- export declare function threadOwnerKey(cfg: IdentityConfig, user: ManagedUser): string;
50
- /** True when this deployment exposes guest issuance and the request targets it. */
51
- export declare function isGuestIssuanceRequest(request: Request, cfg: IdentityConfig): boolean;
52
- /** Placeholder identity so LangGraph auth middleware allows tokenless issuance. */
53
- export declare function guestIssuanceBypassUser(): ManagedUser;
54
- //# sourceMappingURL=auth.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/runtime/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,IAAI,EAGL,MAAM,+BAA+B,CAAC;AAEvC,OAAO,KAAK,EACV,cAAc,EACd,kBAAkB,EAClB,eAAe,EAChB,MAAM,gBAAgB,CAAC;AA0BxB;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,IAAI,CAsCnE;AAED;;;;;;;;GAQG;AACH,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,cAAc,EACnB,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,eAAe,CAAC,CAc1B;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,cAAc,EACnB,IAAI,EAAE,WAAW,EACjB,KAAK,EAAE,OAAO,GACb,IAAI,CAuBN;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CACvC,GAAG,EAAE,cAAc,EACnB,OAAO,EAAE,OAAO,GACf,WAAW,CAgBb;AAED,oFAAoF;AACpF,wBAAgB,cAAc,CAAC,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,WAAW,GAAG,MAAM,CAY7E;AAuBD,mFAAmF;AACnF,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,OAAO,EAChB,GAAG,EAAE,cAAc,GAClB,OAAO,CAaT;AAED,mFAAmF;AACnF,wBAAgB,uBAAuB,IAAI,WAAW,CAMrD"}
@@ -1,191 +0,0 @@
1
- import { Auth, HTTPException, isStudioUser, } from "@langchain/langgraph-sdk/auth";
2
- import { buildRuntimeIdentity, memoryIdentitySegments, } from "./identity-runtime.js";
3
- import { resolveValidatedTokenUser } from "./validated-token.js";
4
- /**
5
- * Reserved transport for the trusted-backend ingress mode. Actor/tenant travel
6
- * as reserved headers (mapped into `config.configurable` by the generated
7
- * `langgraph.json` allowlist); the ingress secret is validated here and is
8
- * deliberately **not** allowlisted, so it never reaches `config.configurable`.
9
- */
10
- const ACTOR_HEADER = "x-mda-actor-id";
11
- const TENANT_HEADER = "x-mda-tenant-id";
12
- const INGRESS_SECRET_HEADER = "x-mda-ingress-secret";
13
- /** Deployment env var carrying the shared secret the trusted backend presents. */
14
- const INGRESS_SECRET_ENV = "MDA_INGRESS_SECRET";
15
- /** Path MDA exposes for anonymous guest token issuance (must stay public). */
16
- const GUEST_ISSUANCE_PATH = "/identity/guest";
17
- /** Synthetic actor used only to satisfy auth middleware on the issuance route. */
18
- const GUEST_ISSUER_ACTOR = "mda:guest-issuer";
19
- /**
20
- * Build the managed LangGraph custom-auth handler from a declared identity.
21
- *
22
- * Handles both ingress modes: `trusted_backend` (reserved headers behind a
23
- * shared ingress secret) and `validated_token` (browser-direct IdP tokens
24
- * verified via JWKS / introspection / MDA-signed guest). Also registers thread
25
- * and store scoping with a studio bypass.
26
- */
27
- export function buildManagedAuth(identity) {
28
- const cfg = identity.config;
29
- const http = cfg.ingress.http;
30
- const auth = new Auth();
31
- auth.authenticate(async (request) => {
32
- if (isGuestIssuanceRequest(request, cfg)) {
33
- return guestIssuanceBypassUser();
34
- }
35
- if (http === "trusted_backend") {
36
- return resolveTrustedBackendUser(cfg, request);
37
- }
38
- return resolveValidatedTokenUser(cfg, http, request);
39
- });
40
- auth.on("threads", ({ user, value }) => {
41
- if (isStudioUser(user)) {
42
- return true;
43
- }
44
- const key = threadOwnerKey(cfg, user);
45
- if (value && typeof value === "object") {
46
- const container = value;
47
- container.metadata = { ...(container.metadata ?? {}), owner: key };
48
- }
49
- return { owner: key };
50
- });
51
- // Mirror the memory namespace so raw store ops can't cross the identity
52
- // boundary a run is scoped to (§5, §6.2).
53
- auth.on("store", ({ user, value }) => {
54
- if (isStudioUser(user)) {
55
- return true;
56
- }
57
- assertStoreAccess(cfg, user, value);
58
- return true;
59
- });
60
- return auth;
61
- }
62
- /**
63
- * Resolve the caller's frozen {@link RuntimeIdentity} from a raw HTTP request,
64
- * using the same ingress logic (`trusted_backend` headers / `validated_token`
65
- * verification) as the managed auth handler. Throws an {@link HTTPException}
66
- * (401) when the caller is unauthenticated or unresolvable.
67
- *
68
- * This is the resolver that backs default-secure connector HTTP routes: a
69
- * connector route runs behind identity by default, and this is what enforces it.
70
- */
71
- export async function resolveRequestIdentity(cfg, request) {
72
- const http = cfg.ingress.http;
73
- const user = http === "trusted_backend"
74
- ? resolveTrustedBackendUser(cfg, request)
75
- : await resolveValidatedTokenUser(cfg, http, request);
76
- const identity = buildRuntimeIdentity({
77
- langgraph_auth_user: user,
78
- mda_source_provider: "http",
79
- });
80
- if (!identity) {
81
- throw new HTTPException(401, { message: "unauthenticated" });
82
- }
83
- return identity;
84
- }
85
- /**
86
- * Fail-closed (403) unless every identity segment the memory scope requires is
87
- * present in the store `namespace`. `agent`/`none` scopes carry no per-identity
88
- * restriction (shared or absent memory), so any namespace is allowed.
89
- */
90
- export function assertStoreAccess(cfg, user, value) {
91
- const required = memoryIdentitySegments(cfg.scoping.memory, cfg.tenancy, user.mda_actor_id ? String(user.mda_actor_id) : undefined, user.mda_tenant_id ? String(user.mda_tenant_id) : undefined);
92
- if (required.length === 0) {
93
- return;
94
- }
95
- const namespace = value &&
96
- typeof value === "object" &&
97
- Array.isArray(value.namespace)
98
- ? value.namespace.map(String)
99
- : [];
100
- for (const segment of required) {
101
- if (!namespace.includes(segment)) {
102
- throw new HTTPException(403, {
103
- message: "store namespace is outside the caller's identity boundary",
104
- });
105
- }
106
- }
107
- }
108
- /**
109
- * Resolve the caller identity for `trusted_backend`: validate the shared ingress
110
- * secret, then trust the reserved actor/tenant headers. Fail-closed (401) on a
111
- * missing/invalid secret, a missing actor, or a missing tenant under multi.
112
- */
113
- export function resolveTrustedBackendUser(cfg, request) {
114
- requireIngressSecret(request);
115
- const actor = request.headers.get(ACTOR_HEADER);
116
- if (!actor) {
117
- throw new HTTPException(401, { message: `missing ${ACTOR_HEADER}` });
118
- }
119
- const tenant = request.headers.get(TENANT_HEADER) ?? undefined;
120
- assertTenantPresentIfMulti(cfg, tenant);
121
- return {
122
- identity: actor,
123
- permissions: [],
124
- mda_actor_id: actor,
125
- ...(tenant ? { mda_tenant_id: tenant } : {}),
126
- };
127
- }
128
- /** Derive the owner value `@auth.on.threads` filters on, per the `threads` axis. */
129
- export function threadOwnerKey(cfg, user) {
130
- const scope = cfg.scoping.threads ?? "actor";
131
- const actor = String(user.mda_actor_id ?? "");
132
- const tenant = user.mda_tenant_id ? String(user.mda_tenant_id) : undefined;
133
- if (scope === "tenant") {
134
- return tenant ?? actor;
135
- }
136
- if (scope === "channel") {
137
- const channel = user.mda_source_thread_id;
138
- return channel ? String(channel) : actor;
139
- }
140
- return actor;
141
- }
142
- function requireIngressSecret(request) {
143
- const expected = process.env[INGRESS_SECRET_ENV];
144
- const provided = request.headers.get(INGRESS_SECRET_HEADER);
145
- if (!expected || !provided || !constantTimeEquals(expected, provided)) {
146
- throw new HTTPException(401, {
147
- message: "invalid or missing ingress secret",
148
- });
149
- }
150
- }
151
- function assertTenantPresentIfMulti(cfg, tenant) {
152
- if (cfg.tenancy === "multi" && !tenant) {
153
- throw new HTTPException(401, {
154
- message: "missing tenant for multi-tenant deployment",
155
- });
156
- }
157
- }
158
- /** True when this deployment exposes guest issuance and the request targets it. */
159
- export function isGuestIssuanceRequest(request, cfg) {
160
- if (request.method !== "POST") {
161
- return false;
162
- }
163
- const { pathname } = new URL(request.url);
164
- if (pathname !== GUEST_ISSUANCE_PATH) {
165
- return false;
166
- }
167
- const http = cfg.ingress.http;
168
- if (http === "trusted_backend") {
169
- return false;
170
- }
171
- return http.providers.some((provider) => provider.guest?.issue);
172
- }
173
- /** Placeholder identity so LangGraph auth middleware allows tokenless issuance. */
174
- export function guestIssuanceBypassUser() {
175
- return {
176
- identity: GUEST_ISSUER_ACTOR,
177
- permissions: [],
178
- mda_actor_id: GUEST_ISSUER_ACTOR,
179
- };
180
- }
181
- function constantTimeEquals(a, b) {
182
- if (a.length !== b.length) {
183
- return false;
184
- }
185
- let mismatch = 0;
186
- for (let i = 0; i < a.length; i += 1) {
187
- mismatch |= a.charCodeAt(i) ^ b.charCodeAt(i);
188
- }
189
- return mismatch === 0;
190
- }
191
- //# sourceMappingURL=auth.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/runtime/auth.ts"],"names":[],"mappings":"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"}