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,270 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Per-actor GitHub OAuth credential vault.
|
|
3
|
-
*
|
|
4
|
-
* Stored in the LangGraph Store under `["mda_github_credentials"]`. Connect-
|
|
5
|
-
* with-GitHub upserts after OAuth; `credentials.github` resolves `actor` tokens
|
|
6
|
-
* from here until managed Agent Auth lands.
|
|
7
|
-
*
|
|
8
|
-
* Tokens are deployment-scoped Store values — treat the Store namespace as
|
|
9
|
-
* sensitive and prefer short-lived OAuth tokens / refresh where available.
|
|
10
|
-
*
|
|
11
|
-
* Reads always consult the shared Store first (in-graph {@link getStore}, then
|
|
12
|
-
* the service-principal HTTP client). A small process cache is only a
|
|
13
|
-
* write-through fallback for the Host quirk where loopback `get` can miss
|
|
14
|
-
* right after a successful `put` on the same worker — never an authority that
|
|
15
|
-
* can outlive an unlink/rotate on another worker.
|
|
16
|
-
*/
|
|
17
|
-
import { getStore } from "@langchain/langgraph";
|
|
18
|
-
import { Client } from "@langchain/langgraph-sdk";
|
|
19
|
-
import { HANDOFF_SECRET_ENV, HANDOFF_SECRET_HEADER, USER_HEADER, GITHUB_CREDENTIALS_STORE_PREFIX, IDENTITY_LINKS_SERVICE_USER, INGRESS_SECRET_ENV, INGRESS_SECRET_HEADER, LANGSMITH_API_KEY_ENV, } from "../../runtime/auth.js";
|
|
20
|
-
import { isLoopbackUrl, resolveLoopbackApiKey, resolveLoopbackApiUrl, } from "../loopback.js";
|
|
21
|
-
export { GITHUB_CREDENTIALS_STORE_PREFIX };
|
|
22
|
-
export const GITHUB_CREDENTIALS_NAMESPACE = [
|
|
23
|
-
GITHUB_CREDENTIALS_STORE_PREFIX,
|
|
24
|
-
];
|
|
25
|
-
/** How long a same-worker write-through entry may survive a Store miss. */
|
|
26
|
-
export const GITHUB_CREDENTIAL_CACHE_TTL_MS = 30_000;
|
|
27
|
-
/** Soft cap on cached GitHub credential records per process. */
|
|
28
|
-
export const GITHUB_CREDENTIAL_CACHE_MAX_ENTRIES = 256;
|
|
29
|
-
/** Bounded write-through cache shared by LangGraph-backed stores. */
|
|
30
|
-
const processCache = new Map();
|
|
31
|
-
/** In-memory store for tests. */
|
|
32
|
-
export class InMemoryGitHubCredentialStore {
|
|
33
|
-
byUser = new Map();
|
|
34
|
-
async getByUserId(userId) {
|
|
35
|
-
return this.byUser.get(userId) ?? null;
|
|
36
|
-
}
|
|
37
|
-
async upsert(record) {
|
|
38
|
-
this.byUser.set(record.userId, record);
|
|
39
|
-
}
|
|
40
|
-
async removeByUserId(userId) {
|
|
41
|
-
this.byUser.delete(userId);
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
/** LangGraph Store–backed GitHub credential vault. */
|
|
45
|
-
export class LangGraphGitHubCredentialStore {
|
|
46
|
-
client;
|
|
47
|
-
constructor(client) {
|
|
48
|
-
this.client = client;
|
|
49
|
-
}
|
|
50
|
-
async getByUserId(userId) {
|
|
51
|
-
const fromGraph = await readFromAmbientStore(userId);
|
|
52
|
-
if (fromGraph) {
|
|
53
|
-
rememberCache(userId, fromGraph, { localWrite: false });
|
|
54
|
-
return fromGraph;
|
|
55
|
-
}
|
|
56
|
-
let storeMiss = false;
|
|
57
|
-
let storeUnavailable = false;
|
|
58
|
-
try {
|
|
59
|
-
const item = await this.client.store.getItem([...GITHUB_CREDENTIALS_NAMESPACE], userKey(userId));
|
|
60
|
-
if (item?.value && typeof item.value === "object") {
|
|
61
|
-
const record = valueToRecord(item.value);
|
|
62
|
-
if (record) {
|
|
63
|
-
rememberCache(userId, record, { localWrite: false });
|
|
64
|
-
return record;
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
storeMiss = true;
|
|
68
|
-
}
|
|
69
|
-
catch {
|
|
70
|
-
storeUnavailable = true;
|
|
71
|
-
}
|
|
72
|
-
const cached = liveCacheEntry(userId);
|
|
73
|
-
if (cached) {
|
|
74
|
-
if (storeUnavailable) {
|
|
75
|
-
return cached.record;
|
|
76
|
-
}
|
|
77
|
-
if (storeMiss && cached.localWrite) {
|
|
78
|
-
// Same-worker Host quirk: put succeeded, loopback get returned empty.
|
|
79
|
-
return cached.record;
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
if (storeMiss) {
|
|
83
|
-
// Authoritative miss — honor unlink/rotate from another worker.
|
|
84
|
-
processCache.delete(userId);
|
|
85
|
-
}
|
|
86
|
-
return null;
|
|
87
|
-
}
|
|
88
|
-
async upsert(record) {
|
|
89
|
-
await this.client.store.putItem([...GITHUB_CREDENTIALS_NAMESPACE], userKey(record.userId), recordToValue(record));
|
|
90
|
-
rememberCache(record.userId, record, { localWrite: true });
|
|
91
|
-
await writeToAmbientStore(record);
|
|
92
|
-
}
|
|
93
|
-
async removeByUserId(userId) {
|
|
94
|
-
processCache.delete(userId);
|
|
95
|
-
await this.client.store.deleteItem([...GITHUB_CREDENTIALS_NAMESPACE], userKey(userId));
|
|
96
|
-
await deleteFromAmbientStore(userId);
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
let defaultStore = null;
|
|
100
|
-
/** Override the process-default credential store (tests). */
|
|
101
|
-
export function setGitHubCredentialStore(store) {
|
|
102
|
-
defaultStore = store;
|
|
103
|
-
processCache.clear();
|
|
104
|
-
}
|
|
105
|
-
/** Resolve the process-default credential store. */
|
|
106
|
-
export function getGitHubCredentialStore() {
|
|
107
|
-
if (defaultStore) {
|
|
108
|
-
return defaultStore;
|
|
109
|
-
}
|
|
110
|
-
defaultStore =
|
|
111
|
-
createLangGraphGitHubCredentialStore() ??
|
|
112
|
-
new InMemoryGitHubCredentialStore();
|
|
113
|
-
return defaultStore;
|
|
114
|
-
}
|
|
115
|
-
export function createLangGraphGitHubCredentialStore(options = {}) {
|
|
116
|
-
const serverApiKey = process.env[LANGSMITH_API_KEY_ENV]?.trim();
|
|
117
|
-
const configuredHandoffSecret = process.env[HANDOFF_SECRET_ENV]?.trim();
|
|
118
|
-
const explicitIngressSecret = options.ingressSecret?.trim();
|
|
119
|
-
const configuredIngressSecret = explicitIngressSecret || process.env[INGRESS_SECRET_ENV]?.trim();
|
|
120
|
-
const apiUrl = resolveLoopbackApiUrl(options.apiUrl);
|
|
121
|
-
const apiKey = resolveLoopbackApiKey(options.apiKey);
|
|
122
|
-
const isLocal = isLoopbackUrl(apiUrl);
|
|
123
|
-
const handoffSecret = isLocal ? configuredHandoffSecret : undefined;
|
|
124
|
-
const ingressSecret = isLocal ? configuredIngressSecret : undefined;
|
|
125
|
-
const usesServerApiKey = Boolean(serverApiKey && apiKey === serverApiKey);
|
|
126
|
-
if (!usesServerApiKey && !handoffSecret && !ingressSecret) {
|
|
127
|
-
return null;
|
|
128
|
-
}
|
|
129
|
-
const defaultHeaders = {
|
|
130
|
-
[USER_HEADER]: IDENTITY_LINKS_SERVICE_USER,
|
|
131
|
-
};
|
|
132
|
-
if (!usesServerApiKey && explicitIngressSecret && ingressSecret) {
|
|
133
|
-
defaultHeaders[INGRESS_SECRET_HEADER] = ingressSecret;
|
|
134
|
-
}
|
|
135
|
-
else if (handoffSecret) {
|
|
136
|
-
defaultHeaders[HANDOFF_SECRET_HEADER] = handoffSecret;
|
|
137
|
-
}
|
|
138
|
-
else if (!usesServerApiKey && ingressSecret) {
|
|
139
|
-
defaultHeaders[INGRESS_SECRET_HEADER] = ingressSecret;
|
|
140
|
-
}
|
|
141
|
-
const client = new Client({
|
|
142
|
-
apiUrl,
|
|
143
|
-
apiKey,
|
|
144
|
-
defaultHeaders,
|
|
145
|
-
});
|
|
146
|
-
return new LangGraphGitHubCredentialStore(client);
|
|
147
|
-
}
|
|
148
|
-
export function buildGitHubCredentialRecord(input) {
|
|
149
|
-
return {
|
|
150
|
-
userId: input.userId,
|
|
151
|
-
githubUserId: input.githubUserId,
|
|
152
|
-
githubLogin: input.githubLogin,
|
|
153
|
-
accessToken: input.accessToken,
|
|
154
|
-
...(input.refreshToken ? { refreshToken: input.refreshToken } : {}),
|
|
155
|
-
...(input.tokenType ? { tokenType: input.tokenType } : {}),
|
|
156
|
-
...(input.scope ? { scope: input.scope } : {}),
|
|
157
|
-
...(input.email ? { email: input.email } : {}),
|
|
158
|
-
linkedAt: new Date().toISOString(),
|
|
159
|
-
source: "github_oauth",
|
|
160
|
-
};
|
|
161
|
-
}
|
|
162
|
-
function userKey(userId) {
|
|
163
|
-
return `actor:${userId}`;
|
|
164
|
-
}
|
|
165
|
-
function recordToValue(record) {
|
|
166
|
-
return { ...record };
|
|
167
|
-
}
|
|
168
|
-
function valueToRecord(value) {
|
|
169
|
-
const userId = value.userId;
|
|
170
|
-
const githubUserId = value.githubUserId;
|
|
171
|
-
const githubLogin = value.githubLogin;
|
|
172
|
-
const accessToken = value.accessToken;
|
|
173
|
-
if (typeof userId !== "string" ||
|
|
174
|
-
typeof githubUserId !== "string" ||
|
|
175
|
-
typeof githubLogin !== "string" ||
|
|
176
|
-
typeof accessToken !== "string") {
|
|
177
|
-
return null;
|
|
178
|
-
}
|
|
179
|
-
return {
|
|
180
|
-
userId,
|
|
181
|
-
githubUserId,
|
|
182
|
-
githubLogin,
|
|
183
|
-
accessToken,
|
|
184
|
-
...(typeof value.refreshToken === "string"
|
|
185
|
-
? { refreshToken: value.refreshToken }
|
|
186
|
-
: {}),
|
|
187
|
-
...(typeof value.tokenType === "string"
|
|
188
|
-
? { tokenType: value.tokenType }
|
|
189
|
-
: {}),
|
|
190
|
-
...(typeof value.scope === "string" ? { scope: value.scope } : {}),
|
|
191
|
-
...(typeof value.email === "string" ? { email: value.email } : {}),
|
|
192
|
-
linkedAt: typeof value.linkedAt === "string"
|
|
193
|
-
? value.linkedAt
|
|
194
|
-
: new Date().toISOString(),
|
|
195
|
-
source: "github_oauth",
|
|
196
|
-
};
|
|
197
|
-
}
|
|
198
|
-
function rememberCache(userId, record, options) {
|
|
199
|
-
processCache.set(userId, {
|
|
200
|
-
record,
|
|
201
|
-
cachedAtMs: Date.now(),
|
|
202
|
-
localWrite: options.localWrite,
|
|
203
|
-
});
|
|
204
|
-
evictExpiredAndOverflow();
|
|
205
|
-
}
|
|
206
|
-
function liveCacheEntry(userId) {
|
|
207
|
-
const entry = processCache.get(userId);
|
|
208
|
-
if (!entry) {
|
|
209
|
-
return undefined;
|
|
210
|
-
}
|
|
211
|
-
if (Date.now() - entry.cachedAtMs > GITHUB_CREDENTIAL_CACHE_TTL_MS) {
|
|
212
|
-
processCache.delete(userId);
|
|
213
|
-
return undefined;
|
|
214
|
-
}
|
|
215
|
-
return entry;
|
|
216
|
-
}
|
|
217
|
-
function evictExpiredAndOverflow() {
|
|
218
|
-
const now = Date.now();
|
|
219
|
-
for (const [key, entry] of processCache) {
|
|
220
|
-
if (now - entry.cachedAtMs > GITHUB_CREDENTIAL_CACHE_TTL_MS) {
|
|
221
|
-
processCache.delete(key);
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
while (processCache.size > GITHUB_CREDENTIAL_CACHE_MAX_ENTRIES) {
|
|
225
|
-
const oldest = processCache.keys().next().value;
|
|
226
|
-
if (oldest === undefined) {
|
|
227
|
-
break;
|
|
228
|
-
}
|
|
229
|
-
processCache.delete(oldest);
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
async function readFromAmbientStore(userId) {
|
|
233
|
-
try {
|
|
234
|
-
const store = getStore();
|
|
235
|
-
if (!store)
|
|
236
|
-
return null;
|
|
237
|
-
const item = await store.get([...GITHUB_CREDENTIALS_NAMESPACE], userKey(userId));
|
|
238
|
-
if (!item?.value || typeof item.value !== "object") {
|
|
239
|
-
return null;
|
|
240
|
-
}
|
|
241
|
-
return valueToRecord(item.value);
|
|
242
|
-
}
|
|
243
|
-
catch {
|
|
244
|
-
// Outside a runnable context (Connect HTTP handlers, unit tests).
|
|
245
|
-
return null;
|
|
246
|
-
}
|
|
247
|
-
}
|
|
248
|
-
async function writeToAmbientStore(record) {
|
|
249
|
-
try {
|
|
250
|
-
const store = getStore();
|
|
251
|
-
if (!store)
|
|
252
|
-
return;
|
|
253
|
-
await store.put([...GITHUB_CREDENTIALS_NAMESPACE], userKey(record.userId), recordToValue(record));
|
|
254
|
-
}
|
|
255
|
-
catch {
|
|
256
|
-
// Best-effort; HTTP put already persisted.
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
async function deleteFromAmbientStore(userId) {
|
|
260
|
-
try {
|
|
261
|
-
const store = getStore();
|
|
262
|
-
if (!store)
|
|
263
|
-
return;
|
|
264
|
-
await store.delete([...GITHUB_CREDENTIALS_NAMESPACE], userKey(userId));
|
|
265
|
-
}
|
|
266
|
-
catch {
|
|
267
|
-
// Best-effort.
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
//# sourceMappingURL=credentials-store.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"credentials-store.js","sourceRoot":"","sources":["../../../src/identity/github/credentials-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
import type { CredentialResolverConfig, RuntimeIdentity } from "../types.js";
|
|
2
|
-
/**
|
|
3
|
-
* Credential source a GitHub resolver may try for a downstream API call.
|
|
4
|
-
*
|
|
5
|
-
* - `"user"` calls the user-supplied `resolveUserToken` hook, which defaults to
|
|
6
|
-
* the Connect-with-GitHub vault.
|
|
7
|
-
* - `"installation"` mints a GitHub App installation token.
|
|
8
|
-
* - `"pat"` uses a deployment-scoped personal access token.
|
|
9
|
-
*/
|
|
10
|
-
export type GitHubTokenSource = "user" | "installation" | "pat";
|
|
11
|
-
/** Arguments passed when GitHub credentials need a user-scoped OAuth token. */
|
|
12
|
-
export interface GitHubUserTokenArgs {
|
|
13
|
-
/** The frozen identity envelope for the current run. */
|
|
14
|
-
identity: RuntimeIdentity;
|
|
15
|
-
/** OAuth scopes the helper needs for this GitHub operation. */
|
|
16
|
-
scopes: string[];
|
|
17
|
-
}
|
|
18
|
-
/** Arguments passed to a custom GitHub App JWT factory. */
|
|
19
|
-
export interface GitHubAppJwtArgs {
|
|
20
|
-
/** GitHub App id used as the JWT issuer. */
|
|
21
|
-
appId: string;
|
|
22
|
-
/** PEM-encoded GitHub App private key. Keep this in deployment secrets. */
|
|
23
|
-
privateKey: string;
|
|
24
|
-
}
|
|
25
|
-
/** Options for {@link credentials}. */
|
|
26
|
-
export interface GitHubCredentialsOptions {
|
|
27
|
-
/**
|
|
28
|
-
* Token sources to try for read intents. Defaults to
|
|
29
|
-
* `["installation", "pat"]`.
|
|
30
|
-
*/
|
|
31
|
-
read?: GitHubTokenSource[];
|
|
32
|
-
/** Token sources to try for write intents. Defaults to `["user"]`. */
|
|
33
|
-
write?: GitHubTokenSource[];
|
|
34
|
-
/** GitHub App id. Falls back to `GITHUB_APP_ID`. */
|
|
35
|
-
appId?: string;
|
|
36
|
-
/** GitHub App private key. Falls back to `GITHUB_APP_PRIVATE_KEY`. */
|
|
37
|
-
privateKey?: string;
|
|
38
|
-
/**
|
|
39
|
-
* Default installation id when the target metadata does not provide
|
|
40
|
-
* `installationId`.
|
|
41
|
-
*/
|
|
42
|
-
installationId?: string;
|
|
43
|
-
/** Deployment-scoped token. Falls back to `GITHUB_TOKEN` or `GITHUB_PAT`. */
|
|
44
|
-
pat?: string;
|
|
45
|
-
/**
|
|
46
|
-
* Allowed repositories for this resolver, as `owner/repo` or `owner/*`.
|
|
47
|
-
* When set, targets should include `metadata.repo` (or `owner` +
|
|
48
|
-
* `repository`). If omitted, the first exact `owner/repo` pattern is used as
|
|
49
|
-
* the default target (wildcard-only lists still require metadata).
|
|
50
|
-
*/
|
|
51
|
-
repositories?: string[];
|
|
52
|
-
/**
|
|
53
|
-
* Hook that mints or retrieves the caller's GitHub OAuth token. Defaults to
|
|
54
|
-
* the Connect-with-GitHub credential vault (populated by
|
|
55
|
-
* `/identity/github/connect`). Supply a custom hook to override until
|
|
56
|
-
* managed Agent Auth lands.
|
|
57
|
-
*/
|
|
58
|
-
resolveUserToken?: (args: GitHubUserTokenArgs) => Promise<string | undefined>;
|
|
59
|
-
/** Fetch implementation for GitHub App installation token exchange. */
|
|
60
|
-
fetch?: typeof fetch;
|
|
61
|
-
/** Test/custom hook for producing the GitHub App JWT. */
|
|
62
|
-
createAppJwt?: (args: GitHubAppJwtArgs) => Promise<string>;
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* Build a custom credential resolver for GitHub connection targets.
|
|
66
|
-
*
|
|
67
|
-
* Use this through the GitHub namespace:
|
|
68
|
-
*
|
|
69
|
-
* ```ts
|
|
70
|
-
* import { defineIdentity, github } from "managed-deepagents";
|
|
71
|
-
*
|
|
72
|
-
* export const identity = defineIdentity({
|
|
73
|
-
* credentials: credentials.github({ repositories: ["acme/*"] }),
|
|
74
|
-
* });
|
|
75
|
-
* ```
|
|
76
|
-
*
|
|
77
|
-
* When a chain reads user tokens from the managed vault, the returned config
|
|
78
|
-
* declares Connect-with-GitHub so `defineIdentity` mounts `/identity/github/…`
|
|
79
|
-
* without a separate `connect` entry.
|
|
80
|
-
*/
|
|
81
|
-
export declare function credentials(options?: GitHubCredentialsOptions): CredentialResolverConfig;
|
|
82
|
-
/**
|
|
83
|
-
* Default user-token lookup: Connect-with-GitHub vault keyed by user id.
|
|
84
|
-
* Returns undefined when the user has not connected GitHub yet.
|
|
85
|
-
*/
|
|
86
|
-
export declare function defaultResolveUserToken(args: GitHubUserTokenArgs): Promise<string | undefined>;
|
|
87
|
-
//# sourceMappingURL=credentials.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../../src/identity/github/credentials.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACV,wBAAwB,EAGxB,eAAe,EAChB,MAAM,aAAa,CAAC;AAErB;;;;;;;GAOG;AACH,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,cAAc,GAAG,KAAK,CAAC;AAEhE,+EAA+E;AAC/E,MAAM,WAAW,mBAAmB;IAClC,wDAAwD;IACxD,QAAQ,EAAE,eAAe,CAAC;IAC1B,+DAA+D;IAC/D,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,2DAA2D;AAC3D,MAAM,WAAW,gBAAgB;IAC/B,4CAA4C;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,2EAA2E;IAC3E,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,uCAAuC;AACvC,MAAM,WAAW,wBAAwB;IACvC;;;OAGG;IACH,IAAI,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAC3B,sEAAsE;IACtE,KAAK,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAC5B,oDAAoD;IACpD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sEAAsE;IACtE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,6EAA6E;IAC7E,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,mBAAmB,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAC9E,uEAAuE;IACvE,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB,yDAAyD;IACzD,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CAC5D;AAaD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,WAAW,CACzB,OAAO,GAAE,wBAA6B,GACrC,wBAAwB,CAgC1B;AAgJD;;;GAGG;AACH,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,mBAAmB,GACxB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAK7B"}
|
|
@@ -1,201 +0,0 @@
|
|
|
1
|
-
import { importPKCS8, SignJWT } from "jose";
|
|
2
|
-
import { fetchWithTimeout, PROVIDER_HTTP_TIMEOUT_MS, } from "../../runtime/http.js";
|
|
3
|
-
import { connect as githubConnect } from "./connect-http.js";
|
|
4
|
-
import { getGitHubCredentialStore } from "./credentials-store.js";
|
|
5
|
-
const DEFAULT_READ_CHAIN = ["installation", "pat"];
|
|
6
|
-
const DEFAULT_WRITE_CHAIN = ["user"];
|
|
7
|
-
const USER_TOKEN_SOURCES = ["user"];
|
|
8
|
-
const GITHUB_API_VERSION = "2022-11-28";
|
|
9
|
-
const USER_AGENT = "managed-deepagents";
|
|
10
|
-
/**
|
|
11
|
-
* Build a custom credential resolver for GitHub connection targets.
|
|
12
|
-
*
|
|
13
|
-
* Use this through the GitHub namespace:
|
|
14
|
-
*
|
|
15
|
-
* ```ts
|
|
16
|
-
* import { defineIdentity, github } from "managed-deepagents";
|
|
17
|
-
*
|
|
18
|
-
* export const identity = defineIdentity({
|
|
19
|
-
* credentials: credentials.github({ repositories: ["acme/*"] }),
|
|
20
|
-
* });
|
|
21
|
-
* ```
|
|
22
|
-
*
|
|
23
|
-
* When a chain reads user tokens from the managed vault, the returned config
|
|
24
|
-
* declares Connect-with-GitHub so `defineIdentity` mounts `/identity/github/…`
|
|
25
|
-
* without a separate `connect` entry.
|
|
26
|
-
*/
|
|
27
|
-
export function credentials(options = {}) {
|
|
28
|
-
validateGithubCredentialsOptions(options);
|
|
29
|
-
return {
|
|
30
|
-
...(usesUserTokens(options) ? { connect: [githubConnect()] } : {}),
|
|
31
|
-
async resolve({ identity, target }) {
|
|
32
|
-
if (target.name !== "github") {
|
|
33
|
-
throw new Error(`credentials.github(...) can only resolve target name "github" (received "${target.name}").`);
|
|
34
|
-
}
|
|
35
|
-
const repo = repoFromTarget(target) ?? defaultRepoFromPatterns(options.repositories);
|
|
36
|
-
assertRepoAllowed(repo, options.repositories);
|
|
37
|
-
const chain = target.intent === "write"
|
|
38
|
-
? (options.write ?? DEFAULT_WRITE_CHAIN)
|
|
39
|
-
: (options.read ?? DEFAULT_READ_CHAIN);
|
|
40
|
-
for (const source of chain) {
|
|
41
|
-
const credential = await resolveSource(source, { identity, target }, options);
|
|
42
|
-
if (credential) {
|
|
43
|
-
return credential;
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
throw new Error(`credentials.github(...) could not resolve a GitHub credential for target "${target.name}".`);
|
|
47
|
-
},
|
|
48
|
-
};
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* True when either chain can reach the per-user OAuth vault.
|
|
52
|
-
*
|
|
53
|
-
* A custom `resolveUserToken` hook replaces the vault, so a deployment that
|
|
54
|
-
* supplies one owns its token source and needs no Connect-with-GitHub routes.
|
|
55
|
-
*/
|
|
56
|
-
function usesUserTokens(options) {
|
|
57
|
-
if (options.resolveUserToken) {
|
|
58
|
-
return false;
|
|
59
|
-
}
|
|
60
|
-
const read = options.read ?? DEFAULT_READ_CHAIN;
|
|
61
|
-
const write = options.write ?? DEFAULT_WRITE_CHAIN;
|
|
62
|
-
return [...read, ...write].some((source) => USER_TOKEN_SOURCES.includes(source));
|
|
63
|
-
}
|
|
64
|
-
function validateGithubCredentialsOptions(options) {
|
|
65
|
-
validateChain("read", options.read);
|
|
66
|
-
validateChain("write", options.write);
|
|
67
|
-
if (options.repositories) {
|
|
68
|
-
for (const pattern of options.repositories) {
|
|
69
|
-
if (!isAllowedRepoPattern(pattern)) {
|
|
70
|
-
throw new Error(`credentials.github(...) repository allowlist entry "${pattern}" must look like "owner/repo" or "owner/*".`);
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
function validateChain(name, chain) {
|
|
76
|
-
if (chain === undefined)
|
|
77
|
-
return;
|
|
78
|
-
if (!Array.isArray(chain) || chain.length === 0) {
|
|
79
|
-
throw new Error(`credentials.github(...) \`${name}\` must be a non-empty token source list.`);
|
|
80
|
-
}
|
|
81
|
-
for (const source of chain) {
|
|
82
|
-
if (source !== "user" && source !== "installation" && source !== "pat") {
|
|
83
|
-
throw new Error(`credentials.github(...) unknown token source "${String(source)}".`);
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
async function resolveSource(source, ctx, options) {
|
|
88
|
-
if (source === "pat") {
|
|
89
|
-
const token = options.pat ?? process.env.GITHUB_TOKEN ?? process.env.GITHUB_PAT;
|
|
90
|
-
return token ? bearer(token) : undefined;
|
|
91
|
-
}
|
|
92
|
-
if (source === "user") {
|
|
93
|
-
const resolve = options.resolveUserToken ?? defaultResolveUserToken;
|
|
94
|
-
const token = await resolve({
|
|
95
|
-
identity: ctx.identity,
|
|
96
|
-
scopes: ["repo"],
|
|
97
|
-
});
|
|
98
|
-
return token ? bearer(token) : undefined;
|
|
99
|
-
}
|
|
100
|
-
return installationCredential(ctx.target, options);
|
|
101
|
-
}
|
|
102
|
-
async function installationCredential(target, options) {
|
|
103
|
-
const appId = options.appId ?? process.env.GITHUB_APP_ID;
|
|
104
|
-
const privateKey = options.privateKey ?? process.env.GITHUB_APP_PRIVATE_KEY;
|
|
105
|
-
const installationId = stringMetadata(target, "installationId") ?? options.installationId;
|
|
106
|
-
if (!installationId) {
|
|
107
|
-
return undefined;
|
|
108
|
-
}
|
|
109
|
-
if (!appId || !privateKey) {
|
|
110
|
-
throw new Error('credentials.github(...) token source "installation" requires `appId` and `privateKey` (or GITHUB_APP_ID / GITHUB_APP_PRIVATE_KEY).');
|
|
111
|
-
}
|
|
112
|
-
const appJwt = options.createAppJwt
|
|
113
|
-
? await options.createAppJwt({ appId, privateKey })
|
|
114
|
-
: await createGitHubAppJwt({ appId, privateKey });
|
|
115
|
-
const fetchImpl = options.fetch ?? fetch;
|
|
116
|
-
const response = await fetchWithTimeout(`https://api.github.com/app/installations/${encodeURIComponent(installationId)}/access_tokens`, {
|
|
117
|
-
method: "POST",
|
|
118
|
-
headers: {
|
|
119
|
-
Accept: "application/vnd.github+json",
|
|
120
|
-
Authorization: `Bearer ${appJwt}`,
|
|
121
|
-
"User-Agent": USER_AGENT,
|
|
122
|
-
"X-GitHub-Api-Version": GITHUB_API_VERSION,
|
|
123
|
-
},
|
|
124
|
-
}, PROVIDER_HTTP_TIMEOUT_MS, fetchImpl);
|
|
125
|
-
if (!response.ok) {
|
|
126
|
-
throw new Error(`credentials.github(...) GitHub installation token request failed with ${response.status}.`);
|
|
127
|
-
}
|
|
128
|
-
const body = (await response.json());
|
|
129
|
-
if (typeof body.token !== "string" || body.token.length === 0) {
|
|
130
|
-
throw new Error("credentials.github(...) GitHub installation token response did not include `token`.");
|
|
131
|
-
}
|
|
132
|
-
return {
|
|
133
|
-
...bearer(body.token),
|
|
134
|
-
...(typeof body.expires_at === "string"
|
|
135
|
-
? { expiresAt: body.expires_at }
|
|
136
|
-
: {}),
|
|
137
|
-
};
|
|
138
|
-
}
|
|
139
|
-
async function createGitHubAppJwt({ appId, privateKey, }) {
|
|
140
|
-
const nowSeconds = Math.floor(Date.now() / 1000);
|
|
141
|
-
const key = await importPKCS8(privateKey, "RS256");
|
|
142
|
-
return new SignJWT({})
|
|
143
|
-
.setProtectedHeader({ alg: "RS256" })
|
|
144
|
-
.setIssuedAt(nowSeconds - 60)
|
|
145
|
-
.setExpirationTime(nowSeconds + 9 * 60)
|
|
146
|
-
.setIssuer(appId)
|
|
147
|
-
.sign(key);
|
|
148
|
-
}
|
|
149
|
-
/**
|
|
150
|
-
* Default user-token lookup: Connect-with-GitHub vault keyed by user id.
|
|
151
|
-
* Returns undefined when the user has not connected GitHub yet.
|
|
152
|
-
*/
|
|
153
|
-
export async function defaultResolveUserToken(args) {
|
|
154
|
-
const record = await getGitHubCredentialStore().getByUserId(args.identity.user.id);
|
|
155
|
-
return record?.accessToken;
|
|
156
|
-
}
|
|
157
|
-
function bearer(token) {
|
|
158
|
-
return { headers: { Authorization: `Bearer ${token}` } };
|
|
159
|
-
}
|
|
160
|
-
function repoFromTarget(target) {
|
|
161
|
-
const repo = stringMetadata(target, "repo");
|
|
162
|
-
if (repo)
|
|
163
|
-
return repo;
|
|
164
|
-
const owner = stringMetadata(target, "owner");
|
|
165
|
-
const name = stringMetadata(target, "repository");
|
|
166
|
-
return owner && name ? `${owner}/${name}` : undefined;
|
|
167
|
-
}
|
|
168
|
-
function stringMetadata(target, key) {
|
|
169
|
-
const value = target.metadata?.[key];
|
|
170
|
-
return typeof value === "string" && value.length > 0 ? value : undefined;
|
|
171
|
-
}
|
|
172
|
-
function assertRepoAllowed(repo, patterns) {
|
|
173
|
-
if (!patterns || patterns.length === 0)
|
|
174
|
-
return;
|
|
175
|
-
if (!repo) {
|
|
176
|
-
throw new Error("credentials.github(...) target metadata must include `repo` when repositories allowlist is configured (or include an exact owner/repo entry to default).");
|
|
177
|
-
}
|
|
178
|
-
if (!patterns.some((pattern) => repoMatches(repo, pattern))) {
|
|
179
|
-
throw new Error(`credentials.github(...) repository "${repo}" is not allowed by the configured repositories allowlist.`);
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
/** First exact `owner/repo` pattern, used when callers omit `metadata.repo`. */
|
|
183
|
-
function defaultRepoFromPatterns(patterns) {
|
|
184
|
-
if (!patterns)
|
|
185
|
-
return undefined;
|
|
186
|
-
for (const pattern of patterns) {
|
|
187
|
-
if (!pattern.endsWith("/*"))
|
|
188
|
-
return pattern;
|
|
189
|
-
}
|
|
190
|
-
return undefined;
|
|
191
|
-
}
|
|
192
|
-
function repoMatches(repo, pattern) {
|
|
193
|
-
if (pattern.endsWith("/*")) {
|
|
194
|
-
return repo.startsWith(`${pattern.slice(0, -2)}/`);
|
|
195
|
-
}
|
|
196
|
-
return repo === pattern;
|
|
197
|
-
}
|
|
198
|
-
function isAllowedRepoPattern(pattern) {
|
|
199
|
-
return /^[A-Za-z0-9_.-]+\/(?:[A-Za-z0-9_.-]+|\*)$/.test(pattern);
|
|
200
|
-
}
|
|
201
|
-
//# sourceMappingURL=credentials.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../../src/identity/github/credentials.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* GitHub identity helpers — credentials resolver + Connect-with-GitHub opt-in.
|
|
3
|
-
*/
|
|
4
|
-
export { credentials, type GitHubUserTokenArgs, type GitHubAppJwtArgs, type GitHubCredentialsOptions, type GitHubTokenSource, } from "./credentials.js";
|
|
5
|
-
export { connect, createGitHubIdentityConnectProvider, githubIdentityConnectProvider, GITHUB_CONNECT_CALLBACK_PATH, GITHUB_CONNECT_LINK_PATH, GITHUB_CONNECT_START_PATH, GITHUB_CONNECT_STATUS_PATH, } from "./connect-http.js";
|
|
6
|
-
export type { GitHubIdentityConnectProviderOptions } from "./connect-http.js";
|
|
7
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/identity/github/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,WAAW,EACX,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,KAAK,wBAAwB,EAC7B,KAAK,iBAAiB,GACvB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,OAAO,EACP,mCAAmC,EACnC,6BAA6B,EAC7B,4BAA4B,EAC5B,wBAAwB,EACxB,yBAAyB,EACzB,0BAA0B,GAC3B,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,oCAAoC,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* GitHub identity helpers — credentials resolver + Connect-with-GitHub opt-in.
|
|
3
|
-
*/
|
|
4
|
-
export { credentials, } from "./credentials.js";
|
|
5
|
-
export { connect, createGitHubIdentityConnectProvider, githubIdentityConnectProvider, GITHUB_CONNECT_CALLBACK_PATH, GITHUB_CONNECT_LINK_PATH, GITHUB_CONNECT_START_PATH, GITHUB_CONNECT_STATUS_PATH, } from "./connect-http.js";
|
|
6
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/identity/github/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,WAAW,GAKZ,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,OAAO,EACP,mCAAmC,EACnC,6BAA6B,EAC7B,4BAA4B,EAC5B,wBAAwB,EACxB,yBAAyB,EACzB,0BAA0B,GAC3B,MAAM,mBAAmB,CAAC"}
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* GitHub OAuth helpers for Connect-with-GitHub credential binding.
|
|
3
|
-
*
|
|
4
|
-
* Unlike Slack Connect (channel identity remap only), GitHub Connect stores a
|
|
5
|
-
* per-actor OAuth access token so `credentials.github({ write: ["actor"] })`
|
|
6
|
-
* can act as the signed-in user (e.g. open pull requests).
|
|
7
|
-
*
|
|
8
|
-
* Implemented as a {@link createByoOauthClient} descriptor with GitHub-specific
|
|
9
|
-
* token (JSON body) and userinfo (API headers) quirks.
|
|
10
|
-
*/
|
|
11
|
-
import { type ByoOauthClient, type ByoOauthConfig } from "../byo-oauth.js";
|
|
12
|
-
export declare const GITHUB_CLIENT_ID_ENV = "GITHUB_CLIENT_ID";
|
|
13
|
-
export declare const GITHUB_CLIENT_SECRET_ENV = "GITHUB_CLIENT_SECRET";
|
|
14
|
-
/** Space-separated OAuth scopes. Defaults to `repo read:user`. */
|
|
15
|
-
export declare const GITHUB_OAUTH_SCOPES_ENV = "GITHUB_OAUTH_SCOPES";
|
|
16
|
-
/** Override GitHub OAuth/API base (tests). */
|
|
17
|
-
export declare const GITHUB_OAUTH_BASE_ENV = "GITHUB_OAUTH_BASE";
|
|
18
|
-
export type GitHubOauthConfig = ByoOauthConfig;
|
|
19
|
-
export interface GitHubOauthTokenResult {
|
|
20
|
-
accessToken: string;
|
|
21
|
-
tokenType?: string;
|
|
22
|
-
scope?: string;
|
|
23
|
-
refreshToken?: string;
|
|
24
|
-
userId: string;
|
|
25
|
-
login: string;
|
|
26
|
-
email?: string;
|
|
27
|
-
}
|
|
28
|
-
/** GitHub BYO OAuth client (config, authorize, exchange). */
|
|
29
|
-
export declare const githubByoOauth: ByoOauthClient;
|
|
30
|
-
/** GitHub-bound OAuth state / connect-ticket helpers. */
|
|
31
|
-
export declare const githubOauthTickets: import("../oauth-tickets.js").OauthTickets;
|
|
32
|
-
export declare const resolveGitHubOauthRedirectBase: typeof import("../oauth-env.js").resolveOauthRedirectBase;
|
|
33
|
-
/**
|
|
34
|
-
* Requires `MDA_PUBLIC_APP_URL` — unlike Fleet BYO readers, do not fall back
|
|
35
|
-
* to `MDA_PUBLIC_API_URL`; post-OAuth redirect targets the managed app
|
|
36
|
-
* (`/settings?github=connected`).
|
|
37
|
-
*/
|
|
38
|
-
export declare function readGitHubOauthConfig(env?: NodeJS.ProcessEnv): GitHubOauthConfig | null;
|
|
39
|
-
export declare const buildGitHubAuthorizeUrl: (config: ByoOauthConfig, state: string, redirectUri: string, scopes?: string) => string;
|
|
40
|
-
/**
|
|
41
|
-
* Exchange an authorization code for a user access token and profile.
|
|
42
|
-
*
|
|
43
|
-
* GitHub returns `application/x-www-form-urlencoded` unless `Accept:
|
|
44
|
-
* application/json` is set — handled by the BYO tokenRequest config.
|
|
45
|
-
*/
|
|
46
|
-
export declare function exchangeGitHubOauthCode(config: GitHubOauthConfig, code: string, redirectUri: string, fetchImpl?: typeof fetch): Promise<GitHubOauthTokenResult>;
|
|
47
|
-
//# sourceMappingURL=oauth.d.ts.map
|