managed-deepagents 0.4.0-dev.72 → 0.4.0
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 +2 -1
- package/dist/channels/binding.d.ts +3 -5
- package/dist/channels/binding.d.ts.map +1 -1
- package/dist/channels/binding.js +3 -9
- package/dist/channels/binding.js.map +1 -1
- package/dist/channels/collect.d.ts +23 -0
- package/dist/channels/collect.d.ts.map +1 -0
- package/dist/channels/collect.js +46 -0
- package/dist/channels/collect.js.map +1 -0
- package/dist/channels/github/adapter-core.d.ts +6 -0
- package/dist/channels/github/adapter-core.d.ts.map +1 -0
- package/dist/channels/github/adapter-core.js +27 -0
- package/dist/channels/github/adapter-core.js.map +1 -0
- package/dist/channels/github/adapter.d.ts +16 -0
- package/dist/channels/github/adapter.d.ts.map +1 -0
- package/dist/channels/github/adapter.js +52 -0
- package/dist/channels/github/adapter.js.map +1 -0
- package/dist/channels/github/define.d.ts +198 -0
- package/dist/channels/github/define.d.ts.map +1 -0
- package/dist/channels/github/define.js +166 -0
- package/dist/channels/github/define.js.map +1 -0
- package/dist/channels/github/http.d.ts +25 -0
- package/dist/channels/github/http.d.ts.map +1 -0
- package/dist/channels/github/http.js +147 -0
- package/dist/channels/github/http.js.map +1 -0
- package/dist/channels/github/index.d.ts +12 -0
- package/dist/channels/github/index.d.ts.map +1 -0
- package/dist/channels/github/index.js +10 -0
- package/dist/channels/github/index.js.map +1 -0
- package/dist/channels/github/normalize.d.ts +32 -0
- package/dist/channels/github/normalize.d.ts.map +1 -0
- package/dist/channels/github/normalize.js +152 -0
- package/dist/channels/github/normalize.js.map +1 -0
- package/dist/channels/github/source-thread.d.ts +24 -0
- package/dist/channels/github/source-thread.d.ts.map +1 -0
- package/dist/channels/github/source-thread.js +54 -0
- package/dist/channels/github/source-thread.js.map +1 -0
- package/dist/channels/github/transport.d.ts +19 -0
- package/dist/channels/github/transport.d.ts.map +1 -0
- package/dist/channels/github/transport.js +92 -0
- package/dist/channels/github/transport.js.map +1 -0
- package/dist/channels/index.d.ts +10 -3
- package/dist/channels/index.d.ts.map +1 -1
- package/dist/channels/index.js +5 -2
- package/dist/channels/index.js.map +1 -1
- package/dist/channels/manifest.d.ts +34 -0
- package/dist/channels/manifest.d.ts.map +1 -0
- package/dist/channels/manifest.js +8 -0
- package/dist/channels/manifest.js.map +1 -0
- package/dist/channels/plugin.d.ts +61 -0
- package/dist/channels/plugin.d.ts.map +1 -0
- package/dist/channels/plugin.js +80 -0
- package/dist/channels/plugin.js.map +1 -0
- package/dist/channels/registry-store.d.ts +12 -0
- package/dist/channels/registry-store.d.ts.map +1 -0
- package/dist/channels/registry-store.js +18 -0
- package/dist/channels/registry-store.js.map +1 -0
- package/dist/channels/registry-types.d.ts +32 -0
- package/dist/channels/registry-types.d.ts.map +1 -0
- package/dist/channels/registry-types.js +5 -0
- package/dist/channels/registry-types.js.map +1 -0
- package/dist/channels/registry.d.ts +14 -0
- package/dist/channels/registry.d.ts.map +1 -0
- package/dist/channels/registry.js +25 -0
- package/dist/channels/registry.js.map +1 -0
- package/dist/channels/runtime.d.ts +2 -4
- package/dist/channels/runtime.d.ts.map +1 -1
- package/dist/channels/runtime.js +0 -4
- package/dist/channels/runtime.js.map +1 -1
- package/dist/channels/schedule-delivery.d.ts +4 -0
- package/dist/channels/schedule-delivery.d.ts.map +1 -1
- package/dist/channels/schedule-delivery.js +6 -5
- package/dist/channels/schedule-delivery.js.map +1 -1
- package/dist/channels/slack/adapter-core.d.ts +6 -0
- package/dist/channels/slack/adapter-core.d.ts.map +1 -0
- package/dist/channels/slack/adapter-core.js +24 -0
- package/dist/channels/slack/adapter-core.js.map +1 -0
- package/dist/channels/slack/adapter.d.ts +10 -0
- package/dist/channels/slack/adapter.d.ts.map +1 -0
- package/dist/channels/slack/adapter.js +22 -0
- package/dist/channels/slack/adapter.js.map +1 -0
- package/dist/channels/slack/define.d.ts +7 -20
- package/dist/channels/slack/define.d.ts.map +1 -1
- package/dist/channels/slack/define.js +29 -10
- package/dist/channels/slack/define.js.map +1 -1
- package/dist/channels/slack/http.d.ts +12 -1
- package/dist/channels/slack/http.d.ts.map +1 -1
- package/dist/channels/slack/http.js +103 -47
- package/dist/channels/slack/http.js.map +1 -1
- package/dist/channels/store.d.ts +4 -4
- package/dist/channels/store.d.ts.map +1 -1
- package/dist/channels/store.js.map +1 -1
- package/dist/channels/types.d.ts +4 -4
- package/dist/channels/types.d.ts.map +1 -1
- package/dist/channels/types.js.map +1 -1
- package/dist/connectors/github/index.d.ts +80 -0
- package/dist/connectors/github/index.d.ts.map +1 -0
- package/dist/connectors/github/index.js +118 -0
- package/dist/connectors/github/index.js.map +1 -0
- package/dist/connectors/github/sandbox.d.ts +54 -0
- package/dist/connectors/github/sandbox.d.ts.map +1 -0
- package/dist/connectors/github/sandbox.js +519 -0
- package/dist/connectors/github/sandbox.js.map +1 -0
- package/dist/connectors/{langsmith.d.ts → langsmith/index.d.ts} +3 -3
- package/dist/connectors/langsmith/index.d.ts.map +1 -0
- package/dist/connectors/{langsmith.js → langsmith/index.js} +4 -4
- package/dist/connectors/langsmith/index.js.map +1 -0
- package/dist/{runtime/langsmith-connector.d.ts → connectors/langsmith/routes.d.ts} +4 -4
- package/dist/connectors/langsmith/routes.d.ts.map +1 -0
- package/dist/{runtime/langsmith-connector.js → connectors/langsmith/routes.js} +12 -6
- package/dist/connectors/langsmith/routes.js.map +1 -0
- package/dist/{connectors.d.ts → connectors/mcp/index.d.ts} +2 -2
- package/dist/connectors/mcp/index.d.ts.map +1 -0
- package/dist/{connectors.js → connectors/mcp/index.js} +3 -3
- package/dist/connectors/mcp/index.js.map +1 -0
- package/dist/{runtime/connectors-manager.d.ts → connectors/mcp/load.d.ts} +2 -2
- package/dist/connectors/mcp/load.d.ts.map +1 -0
- package/dist/{runtime/connectors-manager.js → connectors/mcp/load.js} +1 -1
- package/dist/connectors/mcp/load.js.map +1 -0
- package/dist/define-deep-agent.d.ts +1 -0
- package/dist/define-deep-agent.d.ts.map +1 -1
- package/dist/define-deep-agent.js +6 -0
- package/dist/define-deep-agent.js.map +1 -1
- package/dist/identity/connect-paths.d.ts +8 -0
- package/dist/identity/connect-paths.d.ts.map +1 -0
- package/dist/identity/connect-paths.js +11 -0
- package/dist/identity/connect-paths.js.map +1 -0
- package/dist/identity/connect-provider-types.d.ts +68 -0
- package/dist/identity/connect-provider-types.d.ts.map +1 -0
- package/dist/identity/connect-provider-types.js +8 -0
- package/dist/identity/connect-provider-types.js.map +1 -0
- package/dist/identity/connect-provider.d.ts +30 -0
- package/dist/identity/connect-provider.d.ts.map +1 -0
- package/dist/identity/connect-provider.js +122 -0
- package/dist/identity/connect-provider.js.map +1 -0
- package/dist/identity/github/connect-http.d.ts +33 -0
- package/dist/identity/github/connect-http.d.ts.map +1 -0
- package/dist/identity/github/connect-http.js +111 -0
- package/dist/identity/github/connect-http.js.map +1 -0
- package/dist/identity/github/credentials-store.d.ts +76 -0
- package/dist/identity/github/credentials-store.d.ts.map +1 -0
- package/dist/identity/github/credentials-store.js +257 -0
- package/dist/identity/github/credentials-store.js.map +1 -0
- package/dist/identity/github/credentials.d.ts +82 -0
- package/dist/identity/github/credentials.d.ts.map +1 -0
- package/dist/identity/github/credentials.js +171 -0
- package/dist/identity/github/credentials.js.map +1 -0
- package/dist/identity/github/index.d.ts +10 -0
- package/dist/identity/github/index.d.ts.map +1 -0
- package/dist/identity/github/index.js +9 -0
- package/dist/identity/github/index.js.map +1 -0
- package/dist/identity/github/oauth.d.ts +49 -0
- package/dist/identity/github/oauth.d.ts.map +1 -0
- package/dist/identity/github/oauth.js +143 -0
- package/dist/identity/github/oauth.js.map +1 -0
- package/dist/identity/index.d.ts +2 -3
- package/dist/identity/index.d.ts.map +1 -1
- package/dist/identity/index.js +30 -1
- package/dist/identity/index.js.map +1 -1
- package/dist/identity/loopback.d.ts +8 -0
- package/dist/identity/loopback.d.ts.map +1 -0
- package/dist/identity/loopback.js +18 -0
- package/dist/identity/loopback.js.map +1 -0
- package/dist/identity/slack/connect-http.d.ts +33 -0
- package/dist/identity/slack/connect-http.d.ts.map +1 -0
- package/dist/identity/slack/connect-http.js +105 -0
- package/dist/identity/slack/connect-http.js.map +1 -0
- package/dist/identity/slack/index.d.ts +9 -0
- package/dist/identity/slack/index.d.ts.map +1 -0
- package/dist/identity/slack/index.js +8 -0
- package/dist/identity/slack/index.js.map +1 -0
- package/dist/identity/slack/links.d.ts.map +1 -0
- package/dist/identity/{links.js → slack/links.js} +2 -12
- package/dist/identity/slack/links.js.map +1 -0
- package/dist/identity/{slack-oauth.d.ts → slack/oauth.d.ts} +1 -1
- package/dist/identity/slack/oauth.d.ts.map +1 -0
- package/dist/identity/{slack-oauth.js → slack/oauth.js} +1 -1
- package/dist/identity/slack/oauth.js.map +1 -0
- package/dist/identity/types.d.ts +12 -1
- package/dist/identity/types.d.ts.map +1 -1
- package/dist/index.d.ts +14 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -3
- package/dist/index.js.map +1 -1
- package/dist/runtime/auth.d.ts +6 -0
- package/dist/runtime/auth.d.ts.map +1 -1
- package/dist/runtime/auth.js +19 -8
- package/dist/runtime/auth.js.map +1 -1
- package/dist/runtime/backend.d.ts +52 -0
- package/dist/runtime/backend.d.ts.map +1 -0
- package/dist/runtime/backend.js +165 -0
- package/dist/runtime/backend.js.map +1 -0
- package/dist/runtime/connector.d.ts +43 -12
- package/dist/runtime/connector.d.ts.map +1 -1
- package/dist/runtime/connector.js +25 -10
- package/dist/runtime/connector.js.map +1 -1
- package/dist/runtime/cors.js +1 -1
- package/dist/runtime/identity-http.d.ts +9 -3
- package/dist/runtime/identity-http.d.ts.map +1 -1
- package/dist/runtime/identity-http.js +24 -34
- package/dist/runtime/identity-http.js.map +1 -1
- package/dist/runtime/identity-runtime.d.ts +9 -28
- package/dist/runtime/identity-runtime.d.ts.map +1 -1
- package/dist/runtime/identity-runtime.js +30 -65
- package/dist/runtime/identity-runtime.js.map +1 -1
- package/dist/runtime/index.d.ts +11 -5
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/index.js +27 -69
- package/dist/runtime/index.js.map +1 -1
- package/dist/runtime/memory/index.d.ts +3 -6
- package/dist/runtime/memory/index.d.ts.map +1 -1
- package/dist/runtime/memory/index.js +3 -4
- package/dist/runtime/memory/index.js.map +1 -1
- package/dist/runtime/memory/mounts.d.ts +15 -1
- package/dist/runtime/memory/mounts.d.ts.map +1 -1
- package/dist/runtime/memory/mounts.js +31 -7
- package/dist/runtime/memory/mounts.js.map +1 -1
- package/dist/runtime/memory/paths.d.ts +0 -5
- package/dist/runtime/memory/paths.d.ts.map +1 -1
- package/dist/runtime/memory/paths.js +0 -24
- package/dist/runtime/memory/paths.js.map +1 -1
- package/dist/runtime/memory/seed.d.ts +0 -16
- package/dist/runtime/memory/seed.d.ts.map +1 -1
- package/dist/runtime/memory/seed.js +0 -43
- package/dist/runtime/memory/seed.js.map +1 -1
- package/dist/runtime/sandbox-manager.d.ts +20 -2
- package/dist/runtime/sandbox-manager.d.ts.map +1 -1
- package/dist/runtime/sandbox-manager.js +102 -9
- package/dist/runtime/sandbox-manager.js.map +1 -1
- package/dist/runtime/types.d.ts +0 -6
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/types.d.ts +6 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +11 -7
- package/dist/connectors/langsmith.d.ts.map +0 -1
- package/dist/connectors/langsmith.js.map +0 -1
- package/dist/connectors.d.ts.map +0 -1
- package/dist/connectors.js.map +0 -1
- package/dist/identity/links.d.ts.map +0 -1
- package/dist/identity/links.js.map +0 -1
- package/dist/identity/slack-connect-http.d.ts +0 -21
- package/dist/identity/slack-connect-http.d.ts.map +0 -1
- package/dist/identity/slack-connect-http.js +0 -129
- package/dist/identity/slack-connect-http.js.map +0 -1
- package/dist/identity/slack-oauth.d.ts.map +0 -1
- package/dist/identity/slack-oauth.js.map +0 -1
- package/dist/runtime/connectors-manager.d.ts.map +0 -1
- package/dist/runtime/connectors-manager.js.map +0 -1
- package/dist/runtime/langsmith-connector.d.ts.map +0 -1
- package/dist/runtime/langsmith-connector.js.map +0 -1
- /package/dist/identity/{links.d.ts → slack/links.d.ts} +0 -0
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Connect-with-GitHub — {@link IdentityConnectProvider} for actor OAuth tokens.
|
|
3
|
+
*
|
|
4
|
+
* Mounted under `/identity/github/*` when listed on `identity.connect`.
|
|
5
|
+
*/
|
|
6
|
+
import { identityConnectPaths } from "../connect-paths.js";
|
|
7
|
+
import { buildGitHubCredentialRecord, getGitHubCredentialStore, } from "./credentials-store.js";
|
|
8
|
+
import { buildGitHubAuthorizeUrl, createGitHubOauthState, exchangeGitHubOauthCode, MDA_PUBLIC_APP_URL_ENV, OAUTH_STATE_SIGNING_KEY_ENV, readGitHubOauthConfig, readOauthStateSigningKey, resolveGitHubOauthRedirectBase, verifyGitHubOauthState, } from "./oauth.js";
|
|
9
|
+
const PATHS = identityConnectPaths("github");
|
|
10
|
+
export const GITHUB_CONNECT_STATUS_PATH = PATHS.status;
|
|
11
|
+
export const GITHUB_CONNECT_START_PATH = PATHS.connect;
|
|
12
|
+
export const GITHUB_CONNECT_CALLBACK_PATH = PATHS.callback;
|
|
13
|
+
export const GITHUB_CONNECT_LINK_PATH = PATHS.link;
|
|
14
|
+
/** Build a GitHub connect provider (injectable store for tests). */
|
|
15
|
+
export function createGitHubIdentityConnectProvider(options = {}) {
|
|
16
|
+
const store = () => options.credentialStore ?? getGitHubCredentialStore();
|
|
17
|
+
return {
|
|
18
|
+
id: "github",
|
|
19
|
+
shouldMount(ctx) {
|
|
20
|
+
// Opt-in is via `identity.connect`; this is a secondary gate only.
|
|
21
|
+
return ctx.hasIdentity;
|
|
22
|
+
},
|
|
23
|
+
async status(actorId) {
|
|
24
|
+
const configured = Boolean(readGitHubOauthConfig());
|
|
25
|
+
const record = await store().getByActorId(actorId);
|
|
26
|
+
return {
|
|
27
|
+
configured,
|
|
28
|
+
linked: Boolean(record),
|
|
29
|
+
...(record
|
|
30
|
+
? {
|
|
31
|
+
githubLogin: record.githubLogin,
|
|
32
|
+
githubUserId: record.githubUserId,
|
|
33
|
+
linkedAt: record.linkedAt,
|
|
34
|
+
scope: record.scope,
|
|
35
|
+
}
|
|
36
|
+
: {}),
|
|
37
|
+
};
|
|
38
|
+
},
|
|
39
|
+
async startAuthorize(actorId, redirectUri) {
|
|
40
|
+
const oauth = readGitHubOauthConfig();
|
|
41
|
+
const stateKey = readOauthStateSigningKey();
|
|
42
|
+
if (!oauth || !stateKey) {
|
|
43
|
+
return {
|
|
44
|
+
notConfigured: true,
|
|
45
|
+
error: `GitHub connect is not configured (set GITHUB_CLIENT_ID, GITHUB_CLIENT_SECRET, MDA_PUBLIC_APP_URL, ${OAUTH_STATE_SIGNING_KEY_ENV})`,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
const state = await createGitHubOauthState(actorId, stateKey);
|
|
49
|
+
return {
|
|
50
|
+
authorizeUrl: buildGitHubAuthorizeUrl(oauth, state, redirectUri),
|
|
51
|
+
};
|
|
52
|
+
},
|
|
53
|
+
async completeCallback(code, state, redirectUri) {
|
|
54
|
+
const oauth = readGitHubOauthConfig();
|
|
55
|
+
if (!oauth) {
|
|
56
|
+
throw new Error("GitHub OAuth is not configured");
|
|
57
|
+
}
|
|
58
|
+
const stateKey = readOauthStateSigningKey();
|
|
59
|
+
if (!stateKey) {
|
|
60
|
+
throw new Error(`${OAUTH_STATE_SIGNING_KEY_ENV} is not configured`);
|
|
61
|
+
}
|
|
62
|
+
const { actorId } = await verifyGitHubOauthState(state, stateKey);
|
|
63
|
+
const token = await exchangeGitHubOauthCode(oauth, code, redirectUri);
|
|
64
|
+
const record = buildGitHubCredentialRecord({
|
|
65
|
+
actorId,
|
|
66
|
+
githubUserId: token.userId,
|
|
67
|
+
githubLogin: token.login,
|
|
68
|
+
accessToken: token.accessToken,
|
|
69
|
+
...(token.refreshToken ? { refreshToken: token.refreshToken } : {}),
|
|
70
|
+
...(token.tokenType ? { tokenType: token.tokenType } : {}),
|
|
71
|
+
...(token.scope ? { scope: token.scope } : {}),
|
|
72
|
+
...(token.email ? { email: token.email } : {}),
|
|
73
|
+
});
|
|
74
|
+
await store().upsert(record);
|
|
75
|
+
return {
|
|
76
|
+
successRedirect: `${oauth.publicAppUrl}/settings?github=connected`,
|
|
77
|
+
};
|
|
78
|
+
},
|
|
79
|
+
async unlink(actorId) {
|
|
80
|
+
await store().removeByActorId(actorId);
|
|
81
|
+
},
|
|
82
|
+
resolveRedirectBase(options) {
|
|
83
|
+
return resolveGitHubOauthRedirectBase(options);
|
|
84
|
+
},
|
|
85
|
+
resolvePublicAppUrl() {
|
|
86
|
+
const oauth = readGitHubOauthConfig();
|
|
87
|
+
return (oauth?.publicAppUrl ??
|
|
88
|
+
process.env[MDA_PUBLIC_APP_URL_ENV]?.replace(/\/$/, ""));
|
|
89
|
+
},
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
/** Default GitHub connect provider used by the identity-connect registry. */
|
|
93
|
+
export const githubIdentityConnectProvider = createGitHubIdentityConnectProvider();
|
|
94
|
+
/**
|
|
95
|
+
* Opt into Connect-with-GitHub on `defineIdentity({ connect: […] })`.
|
|
96
|
+
*
|
|
97
|
+
* @example
|
|
98
|
+
* ```ts
|
|
99
|
+
* import { defineIdentity, github } from "managed-deepagents";
|
|
100
|
+
*
|
|
101
|
+
* export const identity = defineIdentity.preset("internal-tool", {
|
|
102
|
+
* connect: [github.connect()],
|
|
103
|
+
* });
|
|
104
|
+
* ```
|
|
105
|
+
*/
|
|
106
|
+
export function connect(options) {
|
|
107
|
+
return options
|
|
108
|
+
? createGitHubIdentityConnectProvider(options)
|
|
109
|
+
: githubIdentityConnectProvider;
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=connect-http.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connect-http.js","sourceRoot":"","sources":["../../../src/identity/github/connect-http.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,76 @@
|
|
|
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; `github.credentials` 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 { Client } from "@langchain/langgraph-sdk";
|
|
18
|
+
import { GITHUB_CREDENTIALS_STORE_PREFIX } from "../../runtime/auth.js";
|
|
19
|
+
export { GITHUB_CREDENTIALS_STORE_PREFIX };
|
|
20
|
+
export declare const GITHUB_CREDENTIALS_NAMESPACE: readonly ["mda_github_credentials"];
|
|
21
|
+
/** How long a same-worker write-through entry may survive a Store miss. */
|
|
22
|
+
export declare const GITHUB_CREDENTIAL_CACHE_TTL_MS = 30000;
|
|
23
|
+
/** Soft cap on cached GitHub credential records per process. */
|
|
24
|
+
export declare const GITHUB_CREDENTIAL_CACHE_MAX_ENTRIES = 256;
|
|
25
|
+
export interface GitHubCredentialRecord {
|
|
26
|
+
actorId: string;
|
|
27
|
+
githubUserId: string;
|
|
28
|
+
githubLogin: string;
|
|
29
|
+
accessToken: string;
|
|
30
|
+
refreshToken?: string;
|
|
31
|
+
tokenType?: string;
|
|
32
|
+
scope?: string;
|
|
33
|
+
email?: string;
|
|
34
|
+
linkedAt: string;
|
|
35
|
+
source: "github_oauth";
|
|
36
|
+
}
|
|
37
|
+
export interface GitHubCredentialStore {
|
|
38
|
+
getByActorId(actorId: string): Promise<GitHubCredentialRecord | null>;
|
|
39
|
+
upsert(record: GitHubCredentialRecord): Promise<void>;
|
|
40
|
+
removeByActorId(actorId: string): Promise<void>;
|
|
41
|
+
}
|
|
42
|
+
/** In-memory store for tests. */
|
|
43
|
+
export declare class InMemoryGitHubCredentialStore implements GitHubCredentialStore {
|
|
44
|
+
private readonly byActor;
|
|
45
|
+
getByActorId(actorId: string): Promise<GitHubCredentialRecord | null>;
|
|
46
|
+
upsert(record: GitHubCredentialRecord): Promise<void>;
|
|
47
|
+
removeByActorId(actorId: string): Promise<void>;
|
|
48
|
+
}
|
|
49
|
+
/** LangGraph Store–backed GitHub credential vault. */
|
|
50
|
+
export declare class LangGraphGitHubCredentialStore implements GitHubCredentialStore {
|
|
51
|
+
private readonly client;
|
|
52
|
+
constructor(client: Client);
|
|
53
|
+
getByActorId(actorId: string): Promise<GitHubCredentialRecord | null>;
|
|
54
|
+
upsert(record: GitHubCredentialRecord): Promise<void>;
|
|
55
|
+
removeByActorId(actorId: string): Promise<void>;
|
|
56
|
+
}
|
|
57
|
+
/** Override the process-default credential store (tests). */
|
|
58
|
+
export declare function setGitHubCredentialStore(store: GitHubCredentialStore | null): void;
|
|
59
|
+
/** Resolve the process-default credential store. */
|
|
60
|
+
export declare function getGitHubCredentialStore(): GitHubCredentialStore;
|
|
61
|
+
export declare function createLangGraphGitHubCredentialStore(options?: {
|
|
62
|
+
apiUrl?: string;
|
|
63
|
+
apiKey?: string;
|
|
64
|
+
ingressSecret?: string;
|
|
65
|
+
}): LangGraphGitHubCredentialStore | null;
|
|
66
|
+
export declare function buildGitHubCredentialRecord(input: {
|
|
67
|
+
actorId: string;
|
|
68
|
+
githubUserId: string;
|
|
69
|
+
githubLogin: string;
|
|
70
|
+
accessToken: string;
|
|
71
|
+
refreshToken?: string;
|
|
72
|
+
tokenType?: string;
|
|
73
|
+
scope?: string;
|
|
74
|
+
email?: string;
|
|
75
|
+
}): GitHubCredentialRecord;
|
|
76
|
+
//# sourceMappingURL=credentials-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credentials-store.d.ts","sourceRoot":"","sources":["../../../src/identity/github/credentials-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAElD,OAAO,EAEL,+BAA+B,EAIhC,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EAAE,+BAA+B,EAAE,CAAC;AAC3C,eAAO,MAAM,4BAA4B,qCAE/B,CAAC;AAEX,2EAA2E;AAC3E,eAAO,MAAM,8BAA8B,QAAS,CAAC;AACrD,gEAAgE;AAChE,eAAO,MAAM,mCAAmC,MAAM,CAAC;AAEvD,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,cAAc,CAAC;CACxB;AAED,MAAM,WAAW,qBAAqB;IACpC,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC,CAAC;IACtE,MAAM,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtD,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACjD;AAgBD,iCAAiC;AACjC,qBAAa,6BAA8B,YAAW,qBAAqB;IACzE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA6C;IAE/D,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC,CAE1E;IAEK,MAAM,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAE1D;IAEK,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEpD;CACF;AAED,sDAAsD;AACtD,qBAAa,8BAA+B,YAAW,qBAAqB;IAC9D,OAAO,CAAC,QAAQ,CAAC,MAAM;IAAnC,YAA6B,MAAM,EAAE,MAAM,EAAI;IAEzC,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC,CA0C1E;IAEK,MAAM,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ1D;IAEK,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAOpD;CACF;AAID,6DAA6D;AAC7D,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,qBAAqB,GAAG,IAAI,GAClC,IAAI,CAGN;AAED,oDAAoD;AACpD,wBAAgB,wBAAwB,IAAI,qBAAqB,CAQhE;AAED,wBAAgB,oCAAoC,CAClD,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAO,GACzE,8BAA8B,GAAG,IAAI,CAqBvC;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE;IACjD,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,sBAAsB,CAazB"}
|
|
@@ -0,0 +1,257 @@
|
|
|
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; `github.credentials` 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 { ACTOR_HEADER, GITHUB_CREDENTIALS_STORE_PREFIX, IDENTITY_LINKS_SERVICE_ACTOR, INGRESS_SECRET_ENV, INGRESS_SECRET_HEADER, } from "../../runtime/auth.js";
|
|
20
|
+
import { 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
|
+
byActor = new Map();
|
|
34
|
+
async getByActorId(actorId) {
|
|
35
|
+
return this.byActor.get(actorId) ?? null;
|
|
36
|
+
}
|
|
37
|
+
async upsert(record) {
|
|
38
|
+
this.byActor.set(record.actorId, record);
|
|
39
|
+
}
|
|
40
|
+
async removeByActorId(actorId) {
|
|
41
|
+
this.byActor.delete(actorId);
|
|
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 getByActorId(actorId) {
|
|
51
|
+
const fromGraph = await readFromAmbientStore(actorId);
|
|
52
|
+
if (fromGraph) {
|
|
53
|
+
rememberCache(actorId, 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], actorKey(actorId));
|
|
60
|
+
if (item?.value && typeof item.value === "object") {
|
|
61
|
+
const record = valueToRecord(item.value);
|
|
62
|
+
if (record) {
|
|
63
|
+
rememberCache(actorId, record, { localWrite: false });
|
|
64
|
+
return record;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
storeMiss = true;
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
storeUnavailable = true;
|
|
71
|
+
}
|
|
72
|
+
const cached = liveCacheEntry(actorId);
|
|
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(actorId);
|
|
85
|
+
}
|
|
86
|
+
return null;
|
|
87
|
+
}
|
|
88
|
+
async upsert(record) {
|
|
89
|
+
await this.client.store.putItem([...GITHUB_CREDENTIALS_NAMESPACE], actorKey(record.actorId), recordToValue(record));
|
|
90
|
+
rememberCache(record.actorId, record, { localWrite: true });
|
|
91
|
+
await writeToAmbientStore(record);
|
|
92
|
+
}
|
|
93
|
+
async removeByActorId(actorId) {
|
|
94
|
+
processCache.delete(actorId);
|
|
95
|
+
await this.client.store.deleteItem([...GITHUB_CREDENTIALS_NAMESPACE], actorKey(actorId));
|
|
96
|
+
await deleteFromAmbientStore(actorId);
|
|
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 ingressSecret = options.ingressSecret ?? process.env[INGRESS_SECRET_ENV];
|
|
117
|
+
if (!ingressSecret) {
|
|
118
|
+
return null;
|
|
119
|
+
}
|
|
120
|
+
const apiUrl = resolveLoopbackApiUrl(options.apiUrl);
|
|
121
|
+
const apiKey = options.apiKey ??
|
|
122
|
+
process.env.LANGSMITH_API_KEY ??
|
|
123
|
+
process.env.LANGGRAPH_API_KEY ??
|
|
124
|
+
"local";
|
|
125
|
+
const client = new Client({
|
|
126
|
+
apiUrl,
|
|
127
|
+
apiKey,
|
|
128
|
+
defaultHeaders: {
|
|
129
|
+
[INGRESS_SECRET_HEADER]: ingressSecret,
|
|
130
|
+
[ACTOR_HEADER]: IDENTITY_LINKS_SERVICE_ACTOR,
|
|
131
|
+
},
|
|
132
|
+
});
|
|
133
|
+
return new LangGraphGitHubCredentialStore(client);
|
|
134
|
+
}
|
|
135
|
+
export function buildGitHubCredentialRecord(input) {
|
|
136
|
+
return {
|
|
137
|
+
actorId: input.actorId,
|
|
138
|
+
githubUserId: input.githubUserId,
|
|
139
|
+
githubLogin: input.githubLogin,
|
|
140
|
+
accessToken: input.accessToken,
|
|
141
|
+
...(input.refreshToken ? { refreshToken: input.refreshToken } : {}),
|
|
142
|
+
...(input.tokenType ? { tokenType: input.tokenType } : {}),
|
|
143
|
+
...(input.scope ? { scope: input.scope } : {}),
|
|
144
|
+
...(input.email ? { email: input.email } : {}),
|
|
145
|
+
linkedAt: new Date().toISOString(),
|
|
146
|
+
source: "github_oauth",
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
function actorKey(actorId) {
|
|
150
|
+
return `actor:${actorId}`;
|
|
151
|
+
}
|
|
152
|
+
function recordToValue(record) {
|
|
153
|
+
return { ...record };
|
|
154
|
+
}
|
|
155
|
+
function valueToRecord(value) {
|
|
156
|
+
const actorId = value.actorId;
|
|
157
|
+
const githubUserId = value.githubUserId;
|
|
158
|
+
const githubLogin = value.githubLogin;
|
|
159
|
+
const accessToken = value.accessToken;
|
|
160
|
+
if (typeof actorId !== "string" ||
|
|
161
|
+
typeof githubUserId !== "string" ||
|
|
162
|
+
typeof githubLogin !== "string" ||
|
|
163
|
+
typeof accessToken !== "string") {
|
|
164
|
+
return null;
|
|
165
|
+
}
|
|
166
|
+
return {
|
|
167
|
+
actorId,
|
|
168
|
+
githubUserId,
|
|
169
|
+
githubLogin,
|
|
170
|
+
accessToken,
|
|
171
|
+
...(typeof value.refreshToken === "string"
|
|
172
|
+
? { refreshToken: value.refreshToken }
|
|
173
|
+
: {}),
|
|
174
|
+
...(typeof value.tokenType === "string"
|
|
175
|
+
? { tokenType: value.tokenType }
|
|
176
|
+
: {}),
|
|
177
|
+
...(typeof value.scope === "string" ? { scope: value.scope } : {}),
|
|
178
|
+
...(typeof value.email === "string" ? { email: value.email } : {}),
|
|
179
|
+
linkedAt: typeof value.linkedAt === "string"
|
|
180
|
+
? value.linkedAt
|
|
181
|
+
: new Date().toISOString(),
|
|
182
|
+
source: "github_oauth",
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
function rememberCache(actorId, record, options) {
|
|
186
|
+
processCache.set(actorId, {
|
|
187
|
+
record,
|
|
188
|
+
cachedAtMs: Date.now(),
|
|
189
|
+
localWrite: options.localWrite,
|
|
190
|
+
});
|
|
191
|
+
evictExpiredAndOverflow();
|
|
192
|
+
}
|
|
193
|
+
function liveCacheEntry(actorId) {
|
|
194
|
+
const entry = processCache.get(actorId);
|
|
195
|
+
if (!entry) {
|
|
196
|
+
return undefined;
|
|
197
|
+
}
|
|
198
|
+
if (Date.now() - entry.cachedAtMs > GITHUB_CREDENTIAL_CACHE_TTL_MS) {
|
|
199
|
+
processCache.delete(actorId);
|
|
200
|
+
return undefined;
|
|
201
|
+
}
|
|
202
|
+
return entry;
|
|
203
|
+
}
|
|
204
|
+
function evictExpiredAndOverflow() {
|
|
205
|
+
const now = Date.now();
|
|
206
|
+
for (const [key, entry] of processCache) {
|
|
207
|
+
if (now - entry.cachedAtMs > GITHUB_CREDENTIAL_CACHE_TTL_MS) {
|
|
208
|
+
processCache.delete(key);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
while (processCache.size > GITHUB_CREDENTIAL_CACHE_MAX_ENTRIES) {
|
|
212
|
+
const oldest = processCache.keys().next().value;
|
|
213
|
+
if (oldest === undefined) {
|
|
214
|
+
break;
|
|
215
|
+
}
|
|
216
|
+
processCache.delete(oldest);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
async function readFromAmbientStore(actorId) {
|
|
220
|
+
try {
|
|
221
|
+
const store = getStore();
|
|
222
|
+
if (!store)
|
|
223
|
+
return null;
|
|
224
|
+
const item = await store.get([...GITHUB_CREDENTIALS_NAMESPACE], actorKey(actorId));
|
|
225
|
+
if (!item?.value || typeof item.value !== "object") {
|
|
226
|
+
return null;
|
|
227
|
+
}
|
|
228
|
+
return valueToRecord(item.value);
|
|
229
|
+
}
|
|
230
|
+
catch {
|
|
231
|
+
// Outside a runnable context (Connect HTTP handlers, unit tests).
|
|
232
|
+
return null;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
async function writeToAmbientStore(record) {
|
|
236
|
+
try {
|
|
237
|
+
const store = getStore();
|
|
238
|
+
if (!store)
|
|
239
|
+
return;
|
|
240
|
+
await store.put([...GITHUB_CREDENTIALS_NAMESPACE], actorKey(record.actorId), recordToValue(record));
|
|
241
|
+
}
|
|
242
|
+
catch {
|
|
243
|
+
// Best-effort; HTTP put already persisted.
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
async function deleteFromAmbientStore(actorId) {
|
|
247
|
+
try {
|
|
248
|
+
const store = getStore();
|
|
249
|
+
if (!store)
|
|
250
|
+
return;
|
|
251
|
+
await store.delete([...GITHUB_CREDENTIALS_NAMESPACE], actorKey(actorId));
|
|
252
|
+
}
|
|
253
|
+
catch {
|
|
254
|
+
// Best-effort.
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
//# sourceMappingURL=credentials-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credentials-store.js","sourceRoot":"","sources":["../../../src/identity/github/credentials-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import type { CredentialResolverConfig, RuntimeIdentity } from "../types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Credential source a GitHub resolver may try for a downstream API call.
|
|
4
|
+
*
|
|
5
|
+
* - `"actor"` calls the user-supplied `resolveActorToken` hook.
|
|
6
|
+
* - `"installation"` mints a GitHub App installation token.
|
|
7
|
+
* - `"pat"` uses a deployment-scoped personal access token.
|
|
8
|
+
*/
|
|
9
|
+
export type GitHubTokenSource = "actor" | "installation" | "pat";
|
|
10
|
+
/** Arguments passed when GitHub credentials need an actor-scoped OAuth token. */
|
|
11
|
+
export interface GitHubActorTokenArgs {
|
|
12
|
+
/** The frozen identity envelope for the current run. */
|
|
13
|
+
identity: RuntimeIdentity;
|
|
14
|
+
/** OAuth scopes the helper needs for this GitHub operation. */
|
|
15
|
+
scopes: string[];
|
|
16
|
+
}
|
|
17
|
+
/** Arguments passed to a custom GitHub App JWT factory. */
|
|
18
|
+
export interface GitHubAppJwtArgs {
|
|
19
|
+
/** GitHub App id used as the JWT issuer. */
|
|
20
|
+
appId: string;
|
|
21
|
+
/** PEM-encoded GitHub App private key. Keep this in deployment secrets. */
|
|
22
|
+
privateKey: string;
|
|
23
|
+
}
|
|
24
|
+
/** Options for {@link credentials}. */
|
|
25
|
+
export interface GitHubCredentialsOptions {
|
|
26
|
+
/**
|
|
27
|
+
* Token sources to try for read intents. Defaults to
|
|
28
|
+
* `["installation", "pat"]`.
|
|
29
|
+
*/
|
|
30
|
+
read?: GitHubTokenSource[];
|
|
31
|
+
/** Token sources to try for write intents. Defaults to `["actor"]`. */
|
|
32
|
+
write?: GitHubTokenSource[];
|
|
33
|
+
/** GitHub App id. Falls back to `GITHUB_APP_ID`. */
|
|
34
|
+
appId?: string;
|
|
35
|
+
/** GitHub App private key. Falls back to `GITHUB_APP_PRIVATE_KEY`. */
|
|
36
|
+
privateKey?: string;
|
|
37
|
+
/**
|
|
38
|
+
* Default installation id when the target metadata does not provide
|
|
39
|
+
* `installationId`.
|
|
40
|
+
*/
|
|
41
|
+
installationId?: string;
|
|
42
|
+
/** Deployment-scoped token. Falls back to `GITHUB_TOKEN` or `GITHUB_PAT`. */
|
|
43
|
+
pat?: string;
|
|
44
|
+
/**
|
|
45
|
+
* Allowed repositories for this resolver, as `owner/repo` or `owner/*`.
|
|
46
|
+
* When set, targets must include `metadata.repo` (or `owner` + `repository`).
|
|
47
|
+
*/
|
|
48
|
+
repositories?: string[];
|
|
49
|
+
/**
|
|
50
|
+
* Hook that mints or retrieves the actor's GitHub OAuth token. Defaults to
|
|
51
|
+
* the Connect-with-GitHub credential vault (populated by
|
|
52
|
+
* `/identity/github/connect`). Supply a custom hook to override until
|
|
53
|
+
* managed Agent Auth lands.
|
|
54
|
+
*/
|
|
55
|
+
resolveActorToken?: (args: GitHubActorTokenArgs) => Promise<string | undefined>;
|
|
56
|
+
/** Fetch implementation for GitHub App installation token exchange. */
|
|
57
|
+
fetch?: typeof fetch;
|
|
58
|
+
/** Test/custom hook for producing the GitHub App JWT. */
|
|
59
|
+
createAppJwt?: (args: GitHubAppJwtArgs) => Promise<string>;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Build a custom credential resolver for GitHub connection targets.
|
|
63
|
+
*
|
|
64
|
+
* Use this through the GitHub namespace:
|
|
65
|
+
*
|
|
66
|
+
* ```ts
|
|
67
|
+
* import { defineIdentity, github } from "managed-deepagents";
|
|
68
|
+
*
|
|
69
|
+
* export const identity = defineIdentity({
|
|
70
|
+
* // ...
|
|
71
|
+
* scoping: { memory: "actor", credentials: "custom" },
|
|
72
|
+
* credentials: github.credentials({ repositories: ["acme/*"] }),
|
|
73
|
+
* });
|
|
74
|
+
* ```
|
|
75
|
+
*/
|
|
76
|
+
export declare function credentials(options?: GitHubCredentialsOptions): CredentialResolverConfig;
|
|
77
|
+
/**
|
|
78
|
+
* Default actor-token lookup: Connect-with-GitHub vault keyed by actor id.
|
|
79
|
+
* Returns undefined when the actor has not connected GitHub yet.
|
|
80
|
+
*/
|
|
81
|
+
export declare function defaultResolveActorToken(args: GitHubActorTokenArgs): Promise<string | undefined>;
|
|
82
|
+
//# sourceMappingURL=credentials.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../../src/identity/github/credentials.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,wBAAwB,EAGxB,eAAe,EAChB,MAAM,aAAa,CAAC;AAErB;;;;;;GAMG;AACH,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,cAAc,GAAG,KAAK,CAAC;AAEjE,iFAAiF;AACjF,MAAM,WAAW,oBAAoB;IACnC,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,uEAAuE;IACvE,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;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,CAClB,IAAI,EAAE,oBAAoB,KACvB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IACjC,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;AAYD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,WAAW,CACzB,OAAO,GAAE,wBAA6B,GACrC,wBAAwB,CA8B1B;AA6HD;;;GAGG;AACH,wBAAsB,wBAAwB,CAC5C,IAAI,EAAE,oBAAoB,GACzB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAK7B"}
|