managed-deepagents 0.5.3-dev.111 → 0.5.3-dev.113
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 +20 -17
- package/dist/channels/manifest.d.ts +0 -2
- package/dist/channels/manifest.d.ts.map +1 -1
- package/dist/channels/slack/http.d.ts.map +1 -1
- package/dist/channels/slack/http.js +3 -48
- package/dist/channels/slack/http.js.map +1 -1
- package/dist/channels/slack/index.d.ts +2 -3
- package/dist/channels/slack/index.d.ts.map +1 -1
- package/dist/channels/slack/index.js +2 -3
- package/dist/channels/slack/index.js.map +1 -1
- package/dist/connectors/mcp/index.d.ts.map +1 -1
- package/dist/connectors/mcp/index.js +5 -1
- package/dist/connectors/mcp/index.js.map +1 -1
- package/dist/connectors/mcp/load.js +3 -0
- package/dist/connectors/mcp/load.js.map +1 -1
- package/dist/connectors/tool-selection.d.ts +13 -18
- package/dist/connectors/tool-selection.d.ts.map +1 -1
- package/dist/connectors/tool-selection.js +10 -13
- package/dist/connectors/tool-selection.js.map +1 -1
- package/dist/extension.d.ts +5 -5
- package/dist/extension.js +5 -5
- package/dist/identity/index.d.ts +2 -11
- package/dist/identity/index.d.ts.map +1 -1
- package/dist/identity/index.js +8 -66
- package/dist/identity/index.js.map +1 -1
- package/dist/identity/options.d.ts +3 -3
- package/dist/identity/options.js +7 -8
- package/dist/identity/options.js.map +1 -1
- package/dist/identity/slack/links.d.ts +1 -2
- package/dist/identity/slack/links.d.ts.map +1 -1
- package/dist/identity/slack/links.js +1 -2
- package/dist/identity/slack/links.js.map +1 -1
- package/dist/identity/supabase.d.ts.map +1 -1
- package/dist/identity/supabase.js +2 -0
- package/dist/identity/supabase.js.map +1 -1
- package/dist/identity/types.d.ts +8 -81
- package/dist/identity/types.d.ts.map +1 -1
- package/dist/index.d.ts +2 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/namespaces.d.ts +5 -183
- package/dist/namespaces.d.ts.map +1 -1
- package/dist/namespaces.js +1 -63
- package/dist/namespaces.js.map +1 -1
- package/dist/runtime/auth.d.ts +11 -14
- package/dist/runtime/auth.d.ts.map +1 -1
- package/dist/runtime/auth.js +15 -54
- package/dist/runtime/auth.js.map +1 -1
- package/dist/runtime/cors.d.ts +5 -4
- package/dist/runtime/cors.d.ts.map +1 -1
- package/dist/runtime/cors.js +5 -9
- package/dist/runtime/cors.js.map +1 -1
- package/dist/runtime/identity-http.d.ts.map +1 -1
- package/dist/runtime/identity-http.js +0 -69
- package/dist/runtime/identity-http.js.map +1 -1
- package/dist/runtime/identity-runtime.d.ts +2 -10
- package/dist/runtime/identity-runtime.d.ts.map +1 -1
- package/dist/runtime/identity-runtime.js +2 -38
- package/dist/runtime/identity-runtime.js.map +1 -1
- package/dist/runtime/index.d.ts +15 -11
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/index.js +8 -44
- package/dist/runtime/index.js.map +1 -1
- package/dist/runtime/managed-middleware.d.ts +2 -3
- package/dist/runtime/managed-middleware.d.ts.map +1 -1
- package/dist/runtime/managed-middleware.js +12 -12
- package/dist/runtime/managed-middleware.js.map +1 -1
- package/dist/runtime/managed-tools.d.ts +4 -11
- package/dist/runtime/managed-tools.d.ts.map +1 -1
- package/dist/runtime/managed-tools.js +11 -18
- package/dist/runtime/managed-tools.js.map +1 -1
- package/dist/runtime/memory/context-io.d.ts +0 -1
- package/dist/runtime/memory/context-io.d.ts.map +1 -1
- package/dist/runtime/memory/context-io.js +0 -10
- package/dist/runtime/memory/context-io.js.map +1 -1
- package/dist/runtime/memory/mounts.d.ts.map +1 -1
- package/dist/runtime/memory/mounts.js +0 -10
- package/dist/runtime/memory/mounts.js.map +1 -1
- package/dist/runtime/validated-token.d.ts.map +1 -1
- package/dist/runtime/validated-token.js +7 -1
- package/dist/runtime/validated-token.js.map +1 -1
- package/package.json +10 -11
- package/dist/channels/index.d.ts +0 -25
- package/dist/channels/index.d.ts.map +0 -1
- package/dist/channels/index.js +0 -18
- package/dist/channels/index.js.map +0 -1
- package/dist/connectors/marketplace/catalog.d.ts +0 -96
- package/dist/connectors/marketplace/catalog.d.ts.map +0 -1
- package/dist/connectors/marketplace/catalog.js +0 -213
- package/dist/connectors/marketplace/catalog.js.map +0 -1
- package/dist/connectors/marketplace/fleet-mcp.d.ts +0 -62
- package/dist/connectors/marketplace/fleet-mcp.d.ts.map +0 -1
- package/dist/connectors/marketplace/fleet-mcp.js +0 -215
- package/dist/connectors/marketplace/fleet-mcp.js.map +0 -1
- package/dist/connectors/marketplace/index.d.ts +0 -31
- package/dist/connectors/marketplace/index.d.ts.map +0 -1
- package/dist/connectors/marketplace/index.js +0 -39
- package/dist/connectors/marketplace/index.js.map +0 -1
- package/dist/connectors/marketplace/load.d.ts +0 -14
- package/dist/connectors/marketplace/load.d.ts.map +0 -1
- package/dist/connectors/marketplace/load.js +0 -206
- package/dist/connectors/marketplace/load.js.map +0 -1
- package/dist/connectors/slack/index.d.ts +0 -24
- package/dist/connectors/slack/index.d.ts.map +0 -1
- package/dist/connectors/slack/index.js +0 -64
- package/dist/connectors/slack/index.js.map +0 -1
- package/dist/connectors/toolserver/catalog.d.ts +0 -326
- package/dist/connectors/toolserver/catalog.d.ts.map +0 -1
- package/dist/connectors/toolserver/catalog.js +0 -415
- package/dist/connectors/toolserver/catalog.js.map +0 -1
- package/dist/connectors/toolserver/connectors.d.ts +0 -698
- package/dist/connectors/toolserver/connectors.d.ts.map +0 -1
- package/dist/connectors/toolserver/connectors.js +0 -13
- package/dist/connectors/toolserver/connectors.js.map +0 -1
- package/dist/connectors/toolserver/index.d.ts +0 -142
- package/dist/connectors/toolserver/index.d.ts.map +0 -1
- package/dist/connectors/toolserver/index.js +0 -105
- package/dist/connectors/toolserver/index.js.map +0 -1
- package/dist/connectors/toolserver/integrations.d.ts +0 -103
- package/dist/connectors/toolserver/integrations.d.ts.map +0 -1
- package/dist/connectors/toolserver/integrations.js +0 -288
- package/dist/connectors/toolserver/integrations.js.map +0 -1
- package/dist/connectors/toolserver/load.d.ts +0 -55
- package/dist/connectors/toolserver/load.d.ts.map +0 -1
- package/dist/connectors/toolserver/load.js +0 -289
- package/dist/connectors/toolserver/load.js.map +0 -1
- package/dist/identity/actor-subject.d.ts +0 -60
- package/dist/identity/actor-subject.d.ts.map +0 -1
- package/dist/identity/actor-subject.js +0 -107
- package/dist/identity/actor-subject.js.map +0 -1
- package/dist/identity/byo-oauth.d.ts +0 -105
- package/dist/identity/byo-oauth.d.ts.map +0 -1
- package/dist/identity/byo-oauth.js +0 -190
- package/dist/identity/byo-oauth.js.map +0 -1
- package/dist/identity/connect-inference.d.ts +0 -37
- package/dist/identity/connect-inference.d.ts.map +0 -1
- package/dist/identity/connect-inference.js +0 -53
- package/dist/identity/connect-inference.js.map +0 -1
- package/dist/identity/connect-paths.d.ts +0 -8
- package/dist/identity/connect-paths.d.ts.map +0 -1
- package/dist/identity/connect-paths.js +0 -11
- package/dist/identity/connect-paths.js.map +0 -1
- package/dist/identity/connect-provider-types.d.ts +0 -97
- package/dist/identity/connect-provider-types.d.ts.map +0 -1
- package/dist/identity/connect-provider-types.js +0 -10
- package/dist/identity/connect-provider-types.js.map +0 -1
- package/dist/identity/connect-provider.d.ts +0 -35
- package/dist/identity/connect-provider.d.ts.map +0 -1
- package/dist/identity/connect-provider.js +0 -148
- package/dist/identity/connect-provider.js.map +0 -1
- package/dist/identity/credential-resolvers.d.ts +0 -33
- package/dist/identity/credential-resolvers.d.ts.map +0 -1
- package/dist/identity/credential-resolvers.js +0 -62
- package/dist/identity/credential-resolvers.js.map +0 -1
- package/dist/identity/define-fleet-connect.d.ts +0 -53
- package/dist/identity/define-fleet-connect.d.ts.map +0 -1
- package/dist/identity/define-fleet-connect.js +0 -76
- package/dist/identity/define-fleet-connect.js.map +0 -1
- package/dist/identity/fleet-connect-hint.d.ts +0 -41
- package/dist/identity/fleet-connect-hint.d.ts.map +0 -1
- package/dist/identity/fleet-connect-hint.js +0 -190
- package/dist/identity/fleet-connect-hint.js.map +0 -1
- package/dist/identity/fleet-connect.d.ts +0 -93
- package/dist/identity/fleet-connect.d.ts.map +0 -1
- package/dist/identity/fleet-connect.js +0 -256
- package/dist/identity/fleet-connect.js.map +0 -1
- package/dist/identity/fleet-integration-connect.d.ts +0 -32
- package/dist/identity/fleet-integration-connect.d.ts.map +0 -1
- package/dist/identity/fleet-integration-connect.js +0 -35
- package/dist/identity/fleet-integration-connect.js.map +0 -1
- package/dist/identity/fleet.d.ts +0 -56
- package/dist/identity/fleet.d.ts.map +0 -1
- package/dist/identity/fleet.js +0 -131
- package/dist/identity/fleet.js.map +0 -1
- package/dist/identity/github/connect-http.d.ts +0 -37
- package/dist/identity/github/connect-http.d.ts.map +0 -1
- package/dist/identity/github/connect-http.js +0 -128
- package/dist/identity/github/connect-http.js.map +0 -1
- package/dist/identity/github/credentials-store.d.ts +0 -76
- package/dist/identity/github/credentials-store.d.ts.map +0 -1
- package/dist/identity/github/credentials-store.js +0 -270
- package/dist/identity/github/credentials-store.js.map +0 -1
- package/dist/identity/github/credentials.d.ts +0 -87
- package/dist/identity/github/credentials.d.ts.map +0 -1
- package/dist/identity/github/credentials.js +0 -201
- package/dist/identity/github/credentials.js.map +0 -1
- package/dist/identity/github/index.d.ts +0 -7
- package/dist/identity/github/index.d.ts.map +0 -1
- package/dist/identity/github/index.js +0 -6
- package/dist/identity/github/index.js.map +0 -1
- package/dist/identity/github/oauth.d.ts +0 -47
- package/dist/identity/github/oauth.d.ts.map +0 -1
- package/dist/identity/github/oauth.js +0 -124
- package/dist/identity/github/oauth.js.map +0 -1
- package/dist/identity/google/connect-http.d.ts +0 -37
- package/dist/identity/google/connect-http.d.ts.map +0 -1
- package/dist/identity/google/connect-http.js +0 -42
- package/dist/identity/google/connect-http.js.map +0 -1
- package/dist/identity/google/index.d.ts +0 -7
- package/dist/identity/google/index.d.ts.map +0 -1
- package/dist/identity/google/index.js +0 -6
- package/dist/identity/google/index.js.map +0 -1
- package/dist/identity/google/oauth.d.ts +0 -22
- package/dist/identity/google/oauth.d.ts.map +0 -1
- package/dist/identity/google/oauth.js +0 -48
- package/dist/identity/google/oauth.js.map +0 -1
- package/dist/identity/linkedin/connect-http.d.ts +0 -37
- package/dist/identity/linkedin/connect-http.d.ts.map +0 -1
- package/dist/identity/linkedin/connect-http.js +0 -41
- package/dist/identity/linkedin/connect-http.js.map +0 -1
- package/dist/identity/linkedin/index.d.ts +0 -7
- package/dist/identity/linkedin/index.d.ts.map +0 -1
- package/dist/identity/linkedin/index.js +0 -6
- package/dist/identity/linkedin/index.js.map +0 -1
- package/dist/identity/linkedin/oauth.d.ts +0 -22
- package/dist/identity/linkedin/oauth.d.ts.map +0 -1
- package/dist/identity/linkedin/oauth.js +0 -47
- package/dist/identity/linkedin/oauth.js.map +0 -1
- package/dist/identity/marketplace/connect-hint.d.ts +0 -31
- package/dist/identity/marketplace/connect-hint.d.ts.map +0 -1
- package/dist/identity/marketplace/connect-hint.js +0 -59
- package/dist/identity/marketplace/connect-hint.js.map +0 -1
- package/dist/identity/marketplace/connect.d.ts +0 -51
- package/dist/identity/marketplace/connect.d.ts.map +0 -1
- package/dist/identity/marketplace/connect.js +0 -88
- package/dist/identity/marketplace/connect.js.map +0 -1
- package/dist/identity/marketplace/index.d.ts +0 -9
- package/dist/identity/marketplace/index.d.ts.map +0 -1
- package/dist/identity/marketplace/index.js +0 -9
- package/dist/identity/marketplace/index.js.map +0 -1
- package/dist/identity/microsoft/connect-http.d.ts +0 -38
- package/dist/identity/microsoft/connect-http.d.ts.map +0 -1
- package/dist/identity/microsoft/connect-http.js +0 -42
- package/dist/identity/microsoft/connect-http.js.map +0 -1
- package/dist/identity/microsoft/index.d.ts +0 -7
- package/dist/identity/microsoft/index.d.ts.map +0 -1
- package/dist/identity/microsoft/index.js +0 -6
- package/dist/identity/microsoft/index.js.map +0 -1
- package/dist/identity/microsoft/oauth.d.ts +0 -24
- package/dist/identity/microsoft/oauth.d.ts.map +0 -1
- package/dist/identity/microsoft/oauth.js +0 -65
- package/dist/identity/microsoft/oauth.js.map +0 -1
- package/dist/identity/oauth-env.d.ts +0 -43
- package/dist/identity/oauth-env.d.ts.map +0 -1
- package/dist/identity/oauth-env.js +0 -66
- package/dist/identity/oauth-env.js.map +0 -1
- package/dist/identity/oauth-tickets.d.ts +0 -37
- package/dist/identity/oauth-tickets.d.ts.map +0 -1
- package/dist/identity/oauth-tickets.js +0 -114
- package/dist/identity/oauth-tickets.js.map +0 -1
- package/dist/identity/slack/connect-http.d.ts +0 -35
- package/dist/identity/slack/connect-http.d.ts.map +0 -1
- package/dist/identity/slack/connect-http.js +0 -115
- package/dist/identity/slack/connect-http.js.map +0 -1
- package/dist/identity/slack/index.d.ts +0 -8
- package/dist/identity/slack/index.d.ts.map +0 -1
- package/dist/identity/slack/index.js +0 -7
- package/dist/identity/slack/index.js.map +0 -1
- package/dist/identity/slack/oauth.d.ts +0 -28
- package/dist/identity/slack/oauth.d.ts.map +0 -1
- package/dist/identity/slack/oauth.js +0 -87
- package/dist/identity/slack/oauth.js.map +0 -1
- package/dist/identity/x/connect-http.d.ts +0 -38
- package/dist/identity/x/connect-http.d.ts.map +0 -1
- package/dist/identity/x/connect-http.js +0 -41
- package/dist/identity/x/connect-http.js.map +0 -1
- package/dist/identity/x/index.d.ts +0 -6
- package/dist/identity/x/index.d.ts.map +0 -1
- package/dist/identity/x/index.js +0 -5
- package/dist/identity/x/index.js.map +0 -1
- package/dist/runtime/credentials.d.ts +0 -68
- package/dist/runtime/credentials.d.ts.map +0 -1
- package/dist/runtime/credentials.js +0 -235
- package/dist/runtime/credentials.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../src/runtime/credentials.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAGV,gBAAgB,EAChB,cAAc,EACd,kBAAkB,EAClB,eAAe,EAChB,MAAM,sBAAsB,CAAC;AAG9B;;;;;;;;;;;;;GAaG;AAEH,6EAA6E;AAC7E,eAAO,MAAM,6BAA6B,8BAA8B,CAAC;AAKzE,4DAA4D;AAC5D,MAAM,WAAW,oBAAoB;IACnC,2EAA2E;IAC3E,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,GAAG,CACD,MAAM,EAAE,gBAAgB,EACxB,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,kBAAkB,CAAC,CAAC;CAChC;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,OAAO,KAAK,CAAC;IACpB,GAAG,EAAE,MAAM,MAAM,CAAC;IAClB,4EAA4E;IAC5E,aAAa,EAAE,CACb,QAAQ,EAAE,eAAe,EACzB,MAAM,EAAE,gBAAgB,KACrB,OAAO,CAAC,MAAM,CAAC,CAAC;CACtB;AAQD,kEAAkE;AAClE,eAAO,MAAM,yBAAyB,QAAiB,CAAC;AACxD,kDAAkD;AAClD,eAAO,MAAM,4BAA4B,OAAO,CAAC;AAEjD;;;;;GAKG;AACH,qBAAa,eAAe;IAIxB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAJ7B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiC;IAEzD,YACmB,YAAY,GAAE,MAAkC,EAChD,UAAU,GAAE,MAAqC,EAChE;IAEJ,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS,CAU9D;IAED,GAAG,CACD,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,kBAAkB,EACzB,KAAK,GAAE,MAAmB,GACzB,IAAI,CAkBN;IAED,KAAK,IAAI,IAAI,CAEZ;CACF;AAKD,2DAA2D;AAC3D,wBAAgB,4BAA4B,IAAI,IAAI,CAEnD;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CACvC,GAAG,EAAE,cAAc,EACnB,QAAQ,EAAE,eAAe,GAAG,SAAS,EACrC,IAAI,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,EAC9B,KAAK,GAAE,eAA8B,GACpC,mBAAmB,GAAG,SAAS,CA8BjC"}
|
|
@@ -1,235 +0,0 @@
|
|
|
1
|
-
import { SignJWT } from "jose";
|
|
2
|
-
import { credentialTargetNames, isSingleCredentialResolver, } from "../identity/index.js";
|
|
3
|
-
import { fetchWithTimeout, PROVIDER_HTTP_TIMEOUT_MS } from "./http.js";
|
|
4
|
-
/**
|
|
5
|
-
* Component 5 — Credentials, custom mode.
|
|
6
|
-
*
|
|
7
|
-
* The escape hatch Agent Auth can't cover: bespoke per-caller credential minting
|
|
8
|
-
* via an in-process resolver callback or a hosted token-exchange endpoint. It
|
|
9
|
-
* runs in the worker (not the shared ingress auth handler), applies the output
|
|
10
|
-
* to downstream calls, and caches per `(user, target)` until the credential's
|
|
11
|
-
* `expiresAt`. Secrets live only in this in-memory cache keyed by identity —
|
|
12
|
-
* never in thread state or traces.
|
|
13
|
-
*
|
|
14
|
-
* Managed credential modes (`"user"` / `"agent"`) select toolserver/Connect
|
|
15
|
-
* ownership on the identity axis; only `custom` builds a
|
|
16
|
-
* {@link CredentialsProvider} here.
|
|
17
|
-
*/
|
|
18
|
-
/** Env var holding the HMAC secret MDA signs the endpoint assertion with. */
|
|
19
|
-
export const CREDENTIAL_SIGNING_SECRET_ENV = "MDA_TOKEN_EXCHANGE_SECRET";
|
|
20
|
-
/** How long a signed endpoint assertion is valid, in seconds. */
|
|
21
|
-
const ASSERTION_TTL_SECONDS = 60;
|
|
22
|
-
/** Default TTL when a resolver omits `expiresAt` (15 minutes). */
|
|
23
|
-
export const DEFAULT_CREDENTIAL_TTL_MS = 15 * 60 * 1000;
|
|
24
|
-
/** Soft cap on cached credentials per process. */
|
|
25
|
-
export const MAX_CREDENTIAL_CACHE_ENTRIES = 1024;
|
|
26
|
-
/**
|
|
27
|
-
* TTL cache for resolved credentials, keyed by `(user, target)` so
|
|
28
|
-
* per-repo/per-install tokens never collide. Kept out of thread state. Entries
|
|
29
|
-
* expire at the credential's `expiresAt`, or after a default TTL when omitted.
|
|
30
|
-
* The cache is soft-capped to bound memory in long-lived workers.
|
|
31
|
-
*/
|
|
32
|
-
export class CredentialCache {
|
|
33
|
-
defaultTtlMs;
|
|
34
|
-
maxEntries;
|
|
35
|
-
entries = new Map();
|
|
36
|
-
constructor(defaultTtlMs = DEFAULT_CREDENTIAL_TTL_MS, maxEntries = MAX_CREDENTIAL_CACHE_ENTRIES) {
|
|
37
|
-
this.defaultTtlMs = defaultTtlMs;
|
|
38
|
-
this.maxEntries = maxEntries;
|
|
39
|
-
}
|
|
40
|
-
get(key, nowMs) {
|
|
41
|
-
const hit = this.entries.get(key);
|
|
42
|
-
if (!hit) {
|
|
43
|
-
return undefined;
|
|
44
|
-
}
|
|
45
|
-
if (nowMs >= hit.expiresAtMs) {
|
|
46
|
-
this.entries.delete(key);
|
|
47
|
-
return undefined;
|
|
48
|
-
}
|
|
49
|
-
return hit.value;
|
|
50
|
-
}
|
|
51
|
-
set(key, value, nowMs = Date.now()) {
|
|
52
|
-
let expiresAtMs;
|
|
53
|
-
if (value.expiresAt) {
|
|
54
|
-
const parsed = Date.parse(value.expiresAt);
|
|
55
|
-
expiresAtMs = Number.isNaN(parsed) ? nowMs + this.defaultTtlMs : parsed;
|
|
56
|
-
}
|
|
57
|
-
else {
|
|
58
|
-
expiresAtMs = nowMs + this.defaultTtlMs;
|
|
59
|
-
}
|
|
60
|
-
if (!this.entries.has(key)) {
|
|
61
|
-
while (this.entries.size >= this.maxEntries) {
|
|
62
|
-
const oldest = this.entries.keys().next().value;
|
|
63
|
-
if (oldest === undefined) {
|
|
64
|
-
break;
|
|
65
|
-
}
|
|
66
|
-
this.entries.delete(oldest);
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
this.entries.set(key, { value, expiresAtMs });
|
|
70
|
-
}
|
|
71
|
-
clear() {
|
|
72
|
-
this.entries.clear();
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
/** Process-level cache shared across runs for the lifetime of the deployment. */
|
|
76
|
-
const defaultCache = new CredentialCache();
|
|
77
|
-
/** Clear the process-level credential cache. Test-only. */
|
|
78
|
-
export function clearCredentialCacheForTests() {
|
|
79
|
-
defaultCache.clear();
|
|
80
|
-
}
|
|
81
|
-
/**
|
|
82
|
-
* Build the `runtime.credentials` provider for a run, or `undefined` when the
|
|
83
|
-
* deployment isn't in custom-credentials mode. The provider is bound to the
|
|
84
|
-
* run's resolved identity; every `for(target)` call is scoped to that actor.
|
|
85
|
-
*/
|
|
86
|
-
export function createCredentialsProvider(cfg, identity, deps, cache = defaultCache) {
|
|
87
|
-
if (cfg.scope.credentials !== "custom" || !cfg.credentials) {
|
|
88
|
-
return undefined;
|
|
89
|
-
}
|
|
90
|
-
const resolved = {
|
|
91
|
-
fetch: deps?.fetch ?? fetch,
|
|
92
|
-
now: deps?.now ?? (() => Date.now()),
|
|
93
|
-
signAssertion: deps?.signAssertion ?? defaultSignAssertion,
|
|
94
|
-
};
|
|
95
|
-
return {
|
|
96
|
-
async for(target, options) {
|
|
97
|
-
if (!identity) {
|
|
98
|
-
throw new Error("runtime.credentials.for(...) requires a resolved identity, but none " +
|
|
99
|
-
"was available for this run.");
|
|
100
|
-
}
|
|
101
|
-
const key = cacheKey(identity, target);
|
|
102
|
-
if (!options?.forceRefresh) {
|
|
103
|
-
const hit = cache.get(key, resolved.now());
|
|
104
|
-
if (hit) {
|
|
105
|
-
return hit;
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
// Fail-closed: a resolver/endpoint error propagates and nothing is cached.
|
|
109
|
-
const out = await resolveCredential(cfg, identity, target, resolved);
|
|
110
|
-
cache.set(key, out);
|
|
111
|
-
return out;
|
|
112
|
-
},
|
|
113
|
-
};
|
|
114
|
-
}
|
|
115
|
-
async function resolveCredential(cfg, identity, target, deps) {
|
|
116
|
-
const creds = cfg.credentials;
|
|
117
|
-
if (!creds) {
|
|
118
|
-
throw new Error("No credentials resolver is configured for this deployment.");
|
|
119
|
-
}
|
|
120
|
-
return resolveOne(selectResolver(creds, target), identity, target, deps, creds);
|
|
121
|
-
}
|
|
122
|
-
/**
|
|
123
|
-
* Pick the resolver for this target: the single one, or the map entry whose key
|
|
124
|
-
* matches `target.name`.
|
|
125
|
-
*/
|
|
126
|
-
function selectResolver(creds, target) {
|
|
127
|
-
if (isSingleCredentialResolver(creds)) {
|
|
128
|
-
return creds;
|
|
129
|
-
}
|
|
130
|
-
const entry = Object.hasOwn(creds, target.name)
|
|
131
|
-
? creds[target.name]
|
|
132
|
-
: undefined;
|
|
133
|
-
if (!entry) {
|
|
134
|
-
const configured = credentialTargetNames(creds).join(", ");
|
|
135
|
-
throw new Error(`runtime.credentials.for(...) has no resolver for target "${target.name}". ` +
|
|
136
|
-
`Configured targets: ${configured}.`);
|
|
137
|
-
}
|
|
138
|
-
return entry;
|
|
139
|
-
}
|
|
140
|
-
async function resolveOne(config, identity, target, deps, creds) {
|
|
141
|
-
const label = isSingleCredentialResolver(creds)
|
|
142
|
-
? "resolver"
|
|
143
|
-
: `resolver for "${target.name}"`;
|
|
144
|
-
if ("resolve" in config) {
|
|
145
|
-
return normalizeResolved(await config.resolve({ identity, target }), label);
|
|
146
|
-
}
|
|
147
|
-
const assertion = await deps.signAssertion(identity, target);
|
|
148
|
-
return callTokenExchange(config.endpoint.url, assertion, deps);
|
|
149
|
-
}
|
|
150
|
-
async function callTokenExchange(url, assertion, deps) {
|
|
151
|
-
const response = await fetchWithTimeout(url, {
|
|
152
|
-
method: "POST",
|
|
153
|
-
headers: {
|
|
154
|
-
"content-type": "application/json",
|
|
155
|
-
authorization: `Bearer ${assertion}`,
|
|
156
|
-
},
|
|
157
|
-
body: JSON.stringify({ assertion }),
|
|
158
|
-
}, PROVIDER_HTTP_TIMEOUT_MS, deps.fetch);
|
|
159
|
-
if (!response.ok) {
|
|
160
|
-
throw new Error(`Credential token-exchange endpoint ${url} responded ${response.status}.`);
|
|
161
|
-
}
|
|
162
|
-
return normalizeResolved(await response.json(), `endpoint ${url}`);
|
|
163
|
-
}
|
|
164
|
-
async function defaultSignAssertion(identity, target) {
|
|
165
|
-
const secret = process.env[CREDENTIAL_SIGNING_SECRET_ENV];
|
|
166
|
-
if (!secret) {
|
|
167
|
-
throw new Error(`A hosted credential endpoint requires a signing secret. Set ` +
|
|
168
|
-
`${CREDENTIAL_SIGNING_SECRET_ENV} in the deployment environment.`);
|
|
169
|
-
}
|
|
170
|
-
const issuedAt = Math.floor(Date.now() / 1000);
|
|
171
|
-
return new SignJWT({
|
|
172
|
-
user_id: identity.user.id,
|
|
173
|
-
user_kind: identity.user.kind,
|
|
174
|
-
target: { kind: target.kind, name: target.name, intent: target.intent },
|
|
175
|
-
})
|
|
176
|
-
.setProtectedHeader({ alg: "HS256" })
|
|
177
|
-
.setSubject(identity.user.id)
|
|
178
|
-
.setIssuedAt(issuedAt)
|
|
179
|
-
.setExpirationTime(issuedAt + ASSERTION_TTL_SECONDS)
|
|
180
|
-
.sign(new TextEncoder().encode(secret));
|
|
181
|
-
}
|
|
182
|
-
/**
|
|
183
|
-
* The cache key that discriminates a minted credential: the user it belongs to,
|
|
184
|
-
* plus the target's kind/name/intent/thread and metadata.
|
|
185
|
-
*/
|
|
186
|
-
function cacheKey(identity, target) {
|
|
187
|
-
return stableStringify([
|
|
188
|
-
identity.user.id,
|
|
189
|
-
target.kind,
|
|
190
|
-
target.name,
|
|
191
|
-
target.intent ?? null,
|
|
192
|
-
target.threadId ?? null,
|
|
193
|
-
target.metadata ?? null,
|
|
194
|
-
]);
|
|
195
|
-
}
|
|
196
|
-
/** Deterministic JSON with object keys sorted, so the cache key is stable. */
|
|
197
|
-
function stableStringify(value) {
|
|
198
|
-
if (value === null || typeof value !== "object") {
|
|
199
|
-
return JSON.stringify(value) ?? "null";
|
|
200
|
-
}
|
|
201
|
-
if (Array.isArray(value)) {
|
|
202
|
-
return `[${value.map(stableStringify).join(",")}]`;
|
|
203
|
-
}
|
|
204
|
-
const obj = value;
|
|
205
|
-
return `{${Object.keys(obj)
|
|
206
|
-
.sort()
|
|
207
|
-
.map((key) => `${JSON.stringify(key)}:${stableStringify(obj[key])}`)
|
|
208
|
-
.join(",")}}`;
|
|
209
|
-
}
|
|
210
|
-
/** Validate a resolver/endpoint result into a {@link ResolvedCredential}. */
|
|
211
|
-
function normalizeResolved(value, sourceLabel) {
|
|
212
|
-
if (!value || typeof value !== "object") {
|
|
213
|
-
throw new Error(`Credential ${sourceLabel} returned a non-object result.`);
|
|
214
|
-
}
|
|
215
|
-
const { headers, expiresAt } = value;
|
|
216
|
-
if (!headers || typeof headers !== "object" || Array.isArray(headers)) {
|
|
217
|
-
throw new Error(`Credential ${sourceLabel} result is missing a headers object.`);
|
|
218
|
-
}
|
|
219
|
-
const normalizedHeaders = {};
|
|
220
|
-
for (const [name, headerValue] of Object.entries(headers)) {
|
|
221
|
-
if (typeof headerValue !== "string") {
|
|
222
|
-
throw new Error(`Credential ${sourceLabel} header "${name}" must be a string.`);
|
|
223
|
-
}
|
|
224
|
-
normalizedHeaders[name] = headerValue;
|
|
225
|
-
}
|
|
226
|
-
const result = { headers: normalizedHeaders };
|
|
227
|
-
if (expiresAt !== undefined) {
|
|
228
|
-
if (typeof expiresAt !== "string") {
|
|
229
|
-
throw new Error(`Credential ${sourceLabel} \`expiresAt\` must be an ISO string.`);
|
|
230
|
-
}
|
|
231
|
-
result.expiresAt = expiresAt;
|
|
232
|
-
}
|
|
233
|
-
return result;
|
|
234
|
-
}
|
|
235
|
-
//# sourceMappingURL=credentials.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../src/runtime/credentials.ts"],"names":[],"mappings":"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"}
|