managed-deepagents 0.4.0-dev.70 → 0.4.0-dev.73
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/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/errors.d.ts.map +1 -1
- 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 +9 -1
- package/dist/channels/index.d.ts.map +1 -1
- package/dist/channels/index.js +4 -0
- package/dist/channels/index.js.map +1 -1
- package/dist/channels/manifest.d.ts +36 -0
- package/dist/channels/manifest.d.ts.map +1 -0
- package/dist/channels/manifest.js +20 -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 +17 -0
- package/dist/channels/registry.d.ts.map +1 -0
- package/dist/channels/registry.js +37 -0
- package/dist/channels/registry.js.map +1 -0
- package/dist/channels/runtime.d.ts +2 -2
- package/dist/channels/runtime.d.ts.map +1 -1
- 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 +8 -18
- 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 +112 -47
- package/dist/channels/slack/http.js.map +1 -1
- package/dist/channels/slack/normalize.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 +57 -0
- package/dist/connectors/github/sandbox.d.ts.map +1 -0
- package/dist/connectors/github/sandbox.js +534 -0
- package/dist/connectors/github/sandbox.js.map +1 -0
- package/dist/connectors/{langsmith.d.ts → langsmith/index.d.ts} +5 -5
- 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.map +1 -1
- package/dist/define-deep-agent.js +3 -2
- 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-store.d.ts +16 -0
- package/dist/identity/connect-provider-store.d.ts.map +1 -0
- package/dist/identity/connect-provider-store.js +27 -0
- package/dist/identity/connect-provider-store.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 +33 -0
- package/dist/identity/connect-provider.d.ts.map +1 -0
- package/dist/identity/connect-provider.js +125 -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 +50 -0
- package/dist/identity/github/oauth.d.ts.map +1 -0
- package/dist/identity/github/oauth.js +146 -0
- package/dist/identity/github/oauth.js.map +1 -0
- package/dist/identity/index.d.ts +2 -1
- package/dist/identity/index.d.ts.map +1 -1
- package/dist/identity/index.js +30 -0
- 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 +36 -0
- package/dist/identity/slack/connect-http.d.ts.map +1 -0
- package/dist/identity/slack/connect-http.js +111 -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 +7 -2
- package/dist/index.js.map +1 -1
- package/dist/resolve.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.d.ts.map +1 -1
- package/dist/runtime/cors.js +1 -1
- package/dist/runtime/cors.js.map +1 -1
- package/dist/runtime/credentials.d.ts +3 -3
- package/dist/runtime/credentials.d.ts.map +1 -1
- package/dist/runtime/credentials.js +3 -3
- package/dist/runtime/credentials.js.map +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 +19 -14
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/index.js +26 -69
- package/dist/runtime/index.js.map +1 -1
- package/dist/runtime/memory/index.d.ts +2 -2
- package/dist/runtime/memory/index.d.ts.map +1 -1
- package/dist/runtime/memory/index.js +2 -2
- 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 +19 -1
- package/dist/runtime/sandbox-manager.d.ts.map +1 -1
- package/dist/runtime/sandbox-manager.js +94 -7
- package/dist/runtime/sandbox-manager.js.map +1 -1
- package/dist/runtime/types.d.ts +5 -1
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/sandbox.d.ts +6 -0
- package/dist/sandbox.d.ts.map +1 -1
- package/dist/sandbox.js +3 -2
- package/dist/sandbox.js.map +1 -1
- package/dist/types.d.ts +1 -23
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +12 -8
- 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,171 @@
|
|
|
1
|
+
import { importPKCS8, SignJWT } from "jose";
|
|
2
|
+
import { getGitHubCredentialStore } from "./credentials-store.js";
|
|
3
|
+
const DEFAULT_READ_CHAIN = ["installation", "pat"];
|
|
4
|
+
const DEFAULT_WRITE_CHAIN = ["actor"];
|
|
5
|
+
const GITHUB_API_VERSION = "2022-11-28";
|
|
6
|
+
const USER_AGENT = "managed-deepagents";
|
|
7
|
+
/**
|
|
8
|
+
* Build a custom credential resolver for GitHub connection targets.
|
|
9
|
+
*
|
|
10
|
+
* Use this through the GitHub namespace:
|
|
11
|
+
*
|
|
12
|
+
* ```ts
|
|
13
|
+
* import { defineIdentity, github } from "managed-deepagents";
|
|
14
|
+
*
|
|
15
|
+
* export const identity = defineIdentity({
|
|
16
|
+
* // ...
|
|
17
|
+
* scoping: { memory: "actor", credentials: "custom" },
|
|
18
|
+
* credentials: github.credentials({ repositories: ["acme/*"] }),
|
|
19
|
+
* });
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export function credentials(options = {}) {
|
|
23
|
+
validateGithubCredentialsOptions(options);
|
|
24
|
+
return {
|
|
25
|
+
async resolve({ identity, target }) {
|
|
26
|
+
if (target.name !== "github") {
|
|
27
|
+
throw new Error(`github.credentials(...) can only resolve target name "github" (received "${target.name}").`);
|
|
28
|
+
}
|
|
29
|
+
const repo = repoFromTarget(target);
|
|
30
|
+
assertRepoAllowed(repo, options.repositories);
|
|
31
|
+
const chain = target.intent === "write"
|
|
32
|
+
? (options.write ?? DEFAULT_WRITE_CHAIN)
|
|
33
|
+
: (options.read ?? DEFAULT_READ_CHAIN);
|
|
34
|
+
for (const source of chain) {
|
|
35
|
+
const credential = await resolveSource(source, { identity, target }, options);
|
|
36
|
+
if (credential) {
|
|
37
|
+
return credential;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
throw new Error(`github.credentials(...) could not resolve a GitHub credential for target "${target.name}".`);
|
|
41
|
+
},
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
function validateGithubCredentialsOptions(options) {
|
|
45
|
+
validateChain("read", options.read);
|
|
46
|
+
validateChain("write", options.write);
|
|
47
|
+
if (options.repositories) {
|
|
48
|
+
for (const pattern of options.repositories) {
|
|
49
|
+
if (!isAllowedRepoPattern(pattern)) {
|
|
50
|
+
throw new Error(`github.credentials(...) repository allowlist entry "${pattern}" must look like "owner/repo" or "owner/*".`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
function validateChain(name, chain) {
|
|
56
|
+
if (chain === undefined)
|
|
57
|
+
return;
|
|
58
|
+
if (!Array.isArray(chain) || chain.length === 0) {
|
|
59
|
+
throw new Error(`github.credentials(...) \`${name}\` must be a non-empty token source list.`);
|
|
60
|
+
}
|
|
61
|
+
for (const source of chain) {
|
|
62
|
+
if (source !== "actor" && source !== "installation" && source !== "pat") {
|
|
63
|
+
throw new Error(`github.credentials(...) unknown token source "${String(source)}".`);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
async function resolveSource(source, ctx, options) {
|
|
68
|
+
if (source === "pat") {
|
|
69
|
+
const token = options.pat ?? process.env.GITHUB_TOKEN ?? process.env.GITHUB_PAT;
|
|
70
|
+
return token ? bearer(token) : undefined;
|
|
71
|
+
}
|
|
72
|
+
if (source === "actor") {
|
|
73
|
+
const resolve = options.resolveActorToken ?? defaultResolveActorToken;
|
|
74
|
+
const token = await resolve({
|
|
75
|
+
identity: ctx.identity,
|
|
76
|
+
scopes: ["repo"],
|
|
77
|
+
});
|
|
78
|
+
return token ? bearer(token) : undefined;
|
|
79
|
+
}
|
|
80
|
+
return installationCredential(ctx.target, options);
|
|
81
|
+
}
|
|
82
|
+
async function installationCredential(target, options) {
|
|
83
|
+
const appId = options.appId ?? process.env.GITHUB_APP_ID;
|
|
84
|
+
const privateKey = options.privateKey ?? process.env.GITHUB_APP_PRIVATE_KEY;
|
|
85
|
+
const installationId = stringMetadata(target, "installationId") ?? options.installationId;
|
|
86
|
+
if (!installationId) {
|
|
87
|
+
return undefined;
|
|
88
|
+
}
|
|
89
|
+
if (!appId || !privateKey) {
|
|
90
|
+
throw new Error('github.credentials(...) token source "installation" requires `appId` and `privateKey` (or GITHUB_APP_ID / GITHUB_APP_PRIVATE_KEY).');
|
|
91
|
+
}
|
|
92
|
+
const appJwt = options.createAppJwt
|
|
93
|
+
? await options.createAppJwt({ appId, privateKey })
|
|
94
|
+
: await createGitHubAppJwt({ appId, privateKey });
|
|
95
|
+
const fetchImpl = options.fetch ?? fetch;
|
|
96
|
+
const response = await fetchImpl(`https://api.github.com/app/installations/${encodeURIComponent(installationId)}/access_tokens`, {
|
|
97
|
+
method: "POST",
|
|
98
|
+
headers: {
|
|
99
|
+
Accept: "application/vnd.github+json",
|
|
100
|
+
Authorization: `Bearer ${appJwt}`,
|
|
101
|
+
"User-Agent": USER_AGENT,
|
|
102
|
+
"X-GitHub-Api-Version": GITHUB_API_VERSION,
|
|
103
|
+
},
|
|
104
|
+
});
|
|
105
|
+
if (!response.ok) {
|
|
106
|
+
throw new Error(`github.credentials(...) GitHub installation token request failed with ${response.status}.`);
|
|
107
|
+
}
|
|
108
|
+
const body = (await response.json());
|
|
109
|
+
if (typeof body.token !== "string" || body.token.length === 0) {
|
|
110
|
+
throw new Error("github.credentials(...) GitHub installation token response did not include `token`.");
|
|
111
|
+
}
|
|
112
|
+
return {
|
|
113
|
+
...bearer(body.token),
|
|
114
|
+
...(typeof body.expires_at === "string"
|
|
115
|
+
? { expiresAt: body.expires_at }
|
|
116
|
+
: {}),
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
async function createGitHubAppJwt({ appId, privateKey, }) {
|
|
120
|
+
const nowSeconds = Math.floor(Date.now() / 1000);
|
|
121
|
+
const key = await importPKCS8(privateKey, "RS256");
|
|
122
|
+
return new SignJWT({})
|
|
123
|
+
.setProtectedHeader({ alg: "RS256" })
|
|
124
|
+
.setIssuedAt(nowSeconds - 60)
|
|
125
|
+
.setExpirationTime(nowSeconds + 9 * 60)
|
|
126
|
+
.setIssuer(appId)
|
|
127
|
+
.sign(key);
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Default actor-token lookup: Connect-with-GitHub vault keyed by actor id.
|
|
131
|
+
* Returns undefined when the actor has not connected GitHub yet.
|
|
132
|
+
*/
|
|
133
|
+
export async function defaultResolveActorToken(args) {
|
|
134
|
+
const record = await getGitHubCredentialStore().getByActorId(args.identity.actor.id);
|
|
135
|
+
return record?.accessToken;
|
|
136
|
+
}
|
|
137
|
+
function bearer(token) {
|
|
138
|
+
return { headers: { Authorization: `Bearer ${token}` } };
|
|
139
|
+
}
|
|
140
|
+
function repoFromTarget(target) {
|
|
141
|
+
const repo = stringMetadata(target, "repo");
|
|
142
|
+
if (repo)
|
|
143
|
+
return repo;
|
|
144
|
+
const owner = stringMetadata(target, "owner");
|
|
145
|
+
const name = stringMetadata(target, "repository");
|
|
146
|
+
return owner && name ? `${owner}/${name}` : undefined;
|
|
147
|
+
}
|
|
148
|
+
function stringMetadata(target, key) {
|
|
149
|
+
const value = target.metadata?.[key];
|
|
150
|
+
return typeof value === "string" && value.length > 0 ? value : undefined;
|
|
151
|
+
}
|
|
152
|
+
function assertRepoAllowed(repo, patterns) {
|
|
153
|
+
if (!patterns || patterns.length === 0)
|
|
154
|
+
return;
|
|
155
|
+
if (!repo) {
|
|
156
|
+
throw new Error("github.credentials(...) target metadata must include `repo` when repositories allowlist is configured.");
|
|
157
|
+
}
|
|
158
|
+
if (!patterns.some((pattern) => repoMatches(repo, pattern))) {
|
|
159
|
+
throw new Error(`github.credentials(...) repository "${repo}" is not allowed by the configured repositories allowlist.`);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
function repoMatches(repo, pattern) {
|
|
163
|
+
if (pattern.endsWith("/*")) {
|
|
164
|
+
return repo.startsWith(`${pattern.slice(0, -2)}/`);
|
|
165
|
+
}
|
|
166
|
+
return repo === pattern;
|
|
167
|
+
}
|
|
168
|
+
function isAllowedRepoPattern(pattern) {
|
|
169
|
+
return /^[A-Za-z0-9_.-]+\/(?:[A-Za-z0-9_.-]+|\*)$/.test(pattern);
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=credentials.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../../src/identity/github/credentials.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitHub identity helpers — credentials resolver + Connect-with-GitHub opt-in.
|
|
3
|
+
*
|
|
4
|
+
* Channel authoring lives under `managed-deepagents/channels/github`
|
|
5
|
+
* (`defineGitHubChannel`). Sandbox connector: `github.connector(...)`.
|
|
6
|
+
*/
|
|
7
|
+
export { credentials, type GitHubActorTokenArgs, type GitHubAppJwtArgs, type GitHubCredentialsOptions, type GitHubTokenSource, } from "./credentials.js";
|
|
8
|
+
export { connect, createGitHubIdentityConnectProvider, githubIdentityConnectProvider, GITHUB_CONNECT_CALLBACK_PATH, GITHUB_CONNECT_LINK_PATH, GITHUB_CONNECT_START_PATH, GITHUB_CONNECT_STATUS_PATH, } from "./connect-http.js";
|
|
9
|
+
export type { GitHubIdentityConnectProviderOptions } from "./connect-http.js";
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/identity/github/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,WAAW,EACX,KAAK,oBAAoB,EACzB,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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitHub identity helpers — credentials resolver + Connect-with-GitHub opt-in.
|
|
3
|
+
*
|
|
4
|
+
* Channel authoring lives under `managed-deepagents/channels/github`
|
|
5
|
+
* (`defineGitHubChannel`). Sandbox connector: `github.connector(...)`.
|
|
6
|
+
*/
|
|
7
|
+
export { credentials, } from "./credentials.js";
|
|
8
|
+
export { connect, createGitHubIdentityConnectProvider, githubIdentityConnectProvider, GITHUB_CONNECT_CALLBACK_PATH, GITHUB_CONNECT_LINK_PATH, GITHUB_CONNECT_START_PATH, GITHUB_CONNECT_STATUS_PATH, } from "./connect-http.js";
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/identity/github/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
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 `github.credentials({ write: ["actor"] })`
|
|
6
|
+
* can act as the signed-in user (e.g. open pull requests).
|
|
7
|
+
*/
|
|
8
|
+
import { MDA_PUBLIC_API_URL_ENV, MDA_PUBLIC_APP_URL_ENV, OAUTH_STATE_SIGNING_KEY_ENV, readOauthStateSigningKey, resolveSlackOauthRedirectBase } from "../slack/oauth.js";
|
|
9
|
+
export { MDA_PUBLIC_API_URL_ENV, MDA_PUBLIC_APP_URL_ENV, OAUTH_STATE_SIGNING_KEY_ENV, readOauthStateSigningKey, };
|
|
10
|
+
export declare const GITHUB_CLIENT_ID_ENV = "GITHUB_CLIENT_ID";
|
|
11
|
+
export declare const GITHUB_CLIENT_SECRET_ENV = "GITHUB_CLIENT_SECRET";
|
|
12
|
+
/** Space-separated OAuth scopes. Defaults to `repo read:user`. */
|
|
13
|
+
export declare const GITHUB_OAUTH_SCOPES_ENV = "GITHUB_OAUTH_SCOPES";
|
|
14
|
+
/** Override GitHub OAuth/API base (tests). */
|
|
15
|
+
export declare const GITHUB_OAUTH_BASE_ENV = "GITHUB_OAUTH_BASE";
|
|
16
|
+
export interface GitHubOauthConfig {
|
|
17
|
+
clientId: string;
|
|
18
|
+
clientSecret: string;
|
|
19
|
+
publicAppUrl: string;
|
|
20
|
+
scopes: string;
|
|
21
|
+
oauthBase: string;
|
|
22
|
+
apiBase: string;
|
|
23
|
+
}
|
|
24
|
+
export interface GitHubOauthTokenResult {
|
|
25
|
+
accessToken: string;
|
|
26
|
+
tokenType?: string;
|
|
27
|
+
scope?: string;
|
|
28
|
+
refreshToken?: string;
|
|
29
|
+
userId: string;
|
|
30
|
+
login: string;
|
|
31
|
+
email?: string;
|
|
32
|
+
}
|
|
33
|
+
export declare function readGitHubOauthConfig(env?: NodeJS.ProcessEnv): GitHubOauthConfig | null;
|
|
34
|
+
/** Reuse the Slack redirect-base resolver (same Host/loopback constraints). */
|
|
35
|
+
export declare const resolveGitHubOauthRedirectBase: typeof resolveSlackOauthRedirectBase;
|
|
36
|
+
export declare function githubConnectUrl(publicAppUrl: string): string;
|
|
37
|
+
export declare function buildGitHubAuthorizeUrl(config: GitHubOauthConfig, state: string, redirectUri: string): string;
|
|
38
|
+
/** Signed state binding the authenticated actor to the OAuth round-trip. */
|
|
39
|
+
export declare function createGitHubOauthState(actorId: string, signingKey: string, nowMs?: number): Promise<string>;
|
|
40
|
+
export declare function verifyGitHubOauthState(state: string, signingKey: string, nowMs?: number): Promise<{
|
|
41
|
+
actorId: string;
|
|
42
|
+
}>;
|
|
43
|
+
/**
|
|
44
|
+
* Exchange an authorization code for a user access token and profile.
|
|
45
|
+
*
|
|
46
|
+
* GitHub returns `application/x-www-form-urlencoded` unless `Accept:
|
|
47
|
+
* application/json` is set.
|
|
48
|
+
*/
|
|
49
|
+
export declare function exchangeGitHubOauthCode(config: GitHubOauthConfig, code: string, redirectUri: string, fetchImpl?: typeof fetch): Promise<GitHubOauthTokenResult>;
|
|
50
|
+
//# sourceMappingURL=oauth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../../../src/identity/github/oauth.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,2BAA2B,EAC3B,wBAAwB,EACxB,6BAA6B,EAC9B,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,2BAA2B,EAC3B,wBAAwB,GACzB,CAAC;AAEF,eAAO,MAAM,oBAAoB,qBAAqB,CAAC;AACvD,eAAO,MAAM,wBAAwB,yBAAyB,CAAC;AAC/D,kEAAkE;AAClE,eAAO,MAAM,uBAAuB,wBAAwB,CAAC;AAC7D,8CAA8C;AAC9C,eAAO,MAAM,qBAAqB,sBAAsB,CAAC;AAQzD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,sBAAsB;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,qBAAqB,CACnC,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,iBAAiB,GAAG,IAAI,CAqB1B;AAED,+EAA+E;AAC/E,eAAO,MAAM,8BAA8B,sCAAgC,CAAC;AAE5E,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,iBAAiB,EACzB,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,GAClB,MAAM,CAOR;AAED,4EAA4E;AAC5E,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,KAAK,GAAE,MAAmB,GACzB,OAAO,CAAC,MAAM,CAAC,CAWjB;AAED,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,EAClB,KAAK,GAAE,MAAmB,GACzB,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAqB9B;AAED;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,iBAAiB,EACzB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,SAAS,GAAE,OAAO,KAAa,GAC9B,OAAO,CAAC,sBAAsB,CAAC,CAgEjC"}
|
|
@@ -0,0 +1,146 @@
|
|
|
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 `github.credentials({ write: ["actor"] })`
|
|
6
|
+
* can act as the signed-in user (e.g. open pull requests).
|
|
7
|
+
*/
|
|
8
|
+
import { randomBytes } from "node:crypto";
|
|
9
|
+
import { jwtVerify, SignJWT } from "jose";
|
|
10
|
+
import { MDA_PUBLIC_API_URL_ENV, MDA_PUBLIC_APP_URL_ENV, OAUTH_STATE_SIGNING_KEY_ENV, readOauthStateSigningKey, resolveSlackOauthRedirectBase, } from "../slack/oauth.js";
|
|
11
|
+
export { MDA_PUBLIC_API_URL_ENV, MDA_PUBLIC_APP_URL_ENV, OAUTH_STATE_SIGNING_KEY_ENV, readOauthStateSigningKey, };
|
|
12
|
+
export const GITHUB_CLIENT_ID_ENV = "GITHUB_CLIENT_ID";
|
|
13
|
+
export const GITHUB_CLIENT_SECRET_ENV = "GITHUB_CLIENT_SECRET";
|
|
14
|
+
/** Space-separated OAuth scopes. Defaults to `repo read:user`. */
|
|
15
|
+
export const GITHUB_OAUTH_SCOPES_ENV = "GITHUB_OAUTH_SCOPES";
|
|
16
|
+
/** Override GitHub OAuth/API base (tests). */
|
|
17
|
+
export const GITHUB_OAUTH_BASE_ENV = "GITHUB_OAUTH_BASE";
|
|
18
|
+
const DEFAULT_OAUTH_BASE = "https://github.com";
|
|
19
|
+
const DEFAULT_API_BASE = "https://api.github.com";
|
|
20
|
+
const DEFAULT_SCOPES = "repo read:user";
|
|
21
|
+
const STATE_TTL_MS = 10 * 60 * 1000;
|
|
22
|
+
const STATE_JWT_TYP = "mda-github-oauth-state";
|
|
23
|
+
export function readGitHubOauthConfig(env = process.env) {
|
|
24
|
+
const clientId = env[GITHUB_CLIENT_ID_ENV]?.trim();
|
|
25
|
+
const clientSecret = env[GITHUB_CLIENT_SECRET_ENV]?.trim();
|
|
26
|
+
const publicAppUrl = env[MDA_PUBLIC_APP_URL_ENV]?.trim();
|
|
27
|
+
if (!clientId || !clientSecret || !publicAppUrl) {
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
const oauthBase = (env[GITHUB_OAUTH_BASE_ENV]?.trim() || DEFAULT_OAUTH_BASE).replace(/\/$/, "");
|
|
31
|
+
return {
|
|
32
|
+
clientId,
|
|
33
|
+
clientSecret,
|
|
34
|
+
publicAppUrl: publicAppUrl.replace(/\/$/, ""),
|
|
35
|
+
scopes: env[GITHUB_OAUTH_SCOPES_ENV]?.trim() || DEFAULT_SCOPES,
|
|
36
|
+
oauthBase,
|
|
37
|
+
apiBase: oauthBase === DEFAULT_OAUTH_BASE
|
|
38
|
+
? DEFAULT_API_BASE
|
|
39
|
+
: `${oauthBase}/api/v3`,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
/** Reuse the Slack redirect-base resolver (same Host/loopback constraints). */
|
|
43
|
+
export const resolveGitHubOauthRedirectBase = resolveSlackOauthRedirectBase;
|
|
44
|
+
export function githubConnectUrl(publicAppUrl) {
|
|
45
|
+
return `${publicAppUrl.replace(/\/$/, "")}/settings`;
|
|
46
|
+
}
|
|
47
|
+
export function buildGitHubAuthorizeUrl(config, state, redirectUri) {
|
|
48
|
+
const url = new URL(`${config.oauthBase}/login/oauth/authorize`);
|
|
49
|
+
url.searchParams.set("client_id", config.clientId);
|
|
50
|
+
url.searchParams.set("redirect_uri", redirectUri);
|
|
51
|
+
url.searchParams.set("scope", config.scopes);
|
|
52
|
+
url.searchParams.set("state", state);
|
|
53
|
+
return url.toString();
|
|
54
|
+
}
|
|
55
|
+
/** Signed state binding the authenticated actor to the OAuth round-trip. */
|
|
56
|
+
export async function createGitHubOauthState(actorId, signingKey, nowMs = Date.now()) {
|
|
57
|
+
const iat = Math.floor(nowMs / 1000);
|
|
58
|
+
const exp = Math.floor((nowMs + STATE_TTL_MS) / 1000);
|
|
59
|
+
return new SignJWT({
|
|
60
|
+
actorId,
|
|
61
|
+
nonce: randomBytes(16).toString("hex"),
|
|
62
|
+
})
|
|
63
|
+
.setProtectedHeader({ alg: "HS256", typ: STATE_JWT_TYP })
|
|
64
|
+
.setIssuedAt(iat)
|
|
65
|
+
.setExpirationTime(exp)
|
|
66
|
+
.sign(stateSigningKey(signingKey));
|
|
67
|
+
}
|
|
68
|
+
export async function verifyGitHubOauthState(state, signingKey, nowMs = Date.now()) {
|
|
69
|
+
try {
|
|
70
|
+
const { payload } = await jwtVerify(state, stateSigningKey(signingKey), {
|
|
71
|
+
algorithms: ["HS256"],
|
|
72
|
+
typ: STATE_JWT_TYP,
|
|
73
|
+
currentDate: new Date(nowMs),
|
|
74
|
+
});
|
|
75
|
+
if (typeof payload.actorId !== "string" || !payload.actorId) {
|
|
76
|
+
throw new Error("invalid OAuth state actor");
|
|
77
|
+
}
|
|
78
|
+
return { actorId: payload.actorId };
|
|
79
|
+
}
|
|
80
|
+
catch (err) {
|
|
81
|
+
if (err instanceof Error && err.message.startsWith("invalid OAuth state")) {
|
|
82
|
+
throw err;
|
|
83
|
+
}
|
|
84
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
85
|
+
if (/exp|expir/i.test(message)) {
|
|
86
|
+
throw new Error("OAuth state expired");
|
|
87
|
+
}
|
|
88
|
+
throw new Error("invalid OAuth state signature");
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Exchange an authorization code for a user access token and profile.
|
|
93
|
+
*
|
|
94
|
+
* GitHub returns `application/x-www-form-urlencoded` unless `Accept:
|
|
95
|
+
* application/json` is set.
|
|
96
|
+
*/
|
|
97
|
+
export async function exchangeGitHubOauthCode(config, code, redirectUri, fetchImpl = fetch) {
|
|
98
|
+
const tokenResponse = await fetchImpl(`${config.oauthBase}/login/oauth/access_token`, {
|
|
99
|
+
method: "POST",
|
|
100
|
+
headers: {
|
|
101
|
+
Accept: "application/json",
|
|
102
|
+
"Content-Type": "application/json",
|
|
103
|
+
},
|
|
104
|
+
body: JSON.stringify({
|
|
105
|
+
client_id: config.clientId,
|
|
106
|
+
client_secret: config.clientSecret,
|
|
107
|
+
code,
|
|
108
|
+
redirect_uri: redirectUri,
|
|
109
|
+
}),
|
|
110
|
+
});
|
|
111
|
+
const tokenJson = (await tokenResponse.json());
|
|
112
|
+
if (!tokenResponse.ok || !tokenJson.access_token) {
|
|
113
|
+
throw new Error(tokenJson.error_description ??
|
|
114
|
+
tokenJson.error ??
|
|
115
|
+
"GitHub OAuth token exchange failed");
|
|
116
|
+
}
|
|
117
|
+
const userResponse = await fetchImpl(`${config.apiBase}/user`, {
|
|
118
|
+
headers: {
|
|
119
|
+
Accept: "application/vnd.github+json",
|
|
120
|
+
Authorization: `Bearer ${tokenJson.access_token}`,
|
|
121
|
+
"User-Agent": "managed-deepagents",
|
|
122
|
+
"X-GitHub-Api-Version": "2022-11-28",
|
|
123
|
+
},
|
|
124
|
+
});
|
|
125
|
+
const userJson = (await userResponse.json());
|
|
126
|
+
if (!userResponse.ok || userJson.id === undefined || !userJson.login) {
|
|
127
|
+
throw new Error(userJson.message ?? "GitHub /user lookup failed");
|
|
128
|
+
}
|
|
129
|
+
return {
|
|
130
|
+
accessToken: tokenJson.access_token,
|
|
131
|
+
...(tokenJson.token_type ? { tokenType: tokenJson.token_type } : {}),
|
|
132
|
+
...(tokenJson.scope ? { scope: tokenJson.scope } : {}),
|
|
133
|
+
...(tokenJson.refresh_token
|
|
134
|
+
? { refreshToken: tokenJson.refresh_token }
|
|
135
|
+
: {}),
|
|
136
|
+
userId: String(userJson.id),
|
|
137
|
+
login: userJson.login,
|
|
138
|
+
...(typeof userJson.email === "string" && userJson.email
|
|
139
|
+
? { email: userJson.email }
|
|
140
|
+
: {}),
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
function stateSigningKey(signingKey) {
|
|
144
|
+
return new TextEncoder().encode(signingKey);
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=oauth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../../src/identity/github/oauth.ts"],"names":[],"mappings":"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"}
|
package/dist/identity/index.d.ts
CHANGED
|
@@ -11,9 +11,10 @@
|
|
|
11
11
|
*/
|
|
12
12
|
import { type SupabaseProviderOptions } from "./supabase.js";
|
|
13
13
|
import type { IdentityConfig, IdentityDefinition, IdentityPresetName, ValidatedTokenProvider } from "./types.js";
|
|
14
|
-
export type { CredentialResolver, CredentialResolverConfig, CredentialScope, CredentialTarget, HttpIngress, IdentityConfig, IdentityDefinition, IdentityPresetName, MemoryScope, ResolvedCredential, RuntimeIdentity, Tenancy, ThreadScope, ValidatedTokenIngress, ValidatedTokenProvider, } from "./types.js";
|
|
14
|
+
export type { CredentialResolver, CredentialResolverConfig, CredentialScope, CredentialTarget, HttpIngress, IdentityConfig, IdentityConnectProvider, IdentityDefinition, IdentityPresetName, MemoryScope, ResolvedCredential, RuntimeIdentity, Tenancy, ThreadScope, ValidatedTokenIngress, ValidatedTokenProvider, } from "./types.js";
|
|
15
15
|
export type { SupabaseProviderOptions, SupabaseRegion } from "./supabase.js";
|
|
16
16
|
export { supabaseAuthV1Base } from "./supabase.js";
|
|
17
|
+
export type { GitHubActorTokenArgs, GitHubAppJwtArgs, GitHubCredentialsOptions, GitHubTokenSource, } from "./github/credentials.js";
|
|
17
18
|
/** The signature of {@link defineIdentity}, including its `.preset` helper. */
|
|
18
19
|
export interface DefineIdentity {
|
|
19
20
|
(config: IdentityConfig): IdentityDefinition;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/identity/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,KAAK,uBAAuB,EAAoB,MAAM,eAAe,CAAC;AAC/E,OAAO,KAAK,EACV,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAElB,sBAAsB,EACvB,MAAM,YAAY,CAAC;AAEpB,YAAY,EACV,kBAAkB,EAClB,wBAAwB,EACxB,eAAe,EACf,gBAAgB,EAChB,WAAW,EACX,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,WAAW,EACX,kBAAkB,EAClB,eAAe,EACf,OAAO,EACP,WAAW,EACX,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,YAAY,CAAC;AAEpB,YAAY,EAAE,uBAAuB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/identity/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,KAAK,uBAAuB,EAAoB,MAAM,eAAe,CAAC;AAC/E,OAAO,KAAK,EACV,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAElB,sBAAsB,EACvB,MAAM,YAAY,CAAC;AAEpB,YAAY,EACV,kBAAkB,EAClB,wBAAwB,EACxB,eAAe,EACf,gBAAgB,EAChB,WAAW,EACX,cAAc,EACd,uBAAuB,EACvB,kBAAkB,EAClB,kBAAkB,EAClB,WAAW,EACX,kBAAkB,EAClB,eAAe,EACf,OAAO,EACP,WAAW,EACX,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,YAAY,CAAC;AAEpB,YAAY,EAAE,uBAAuB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,YAAY,EACV,oBAAoB,EACpB,gBAAgB,EAChB,wBAAwB,EACxB,iBAAiB,GAClB,MAAM,yBAAyB,CAAC;AA8BjC,+EAA+E;AAC/E,MAAM,WAAW,cAAc;IAC7B,CAAC,MAAM,EAAE,cAAc,GAAG,kBAAkB,CAAC;IAC7C;;;OAGG;IACH,MAAM,CACJ,IAAI,EAAE,kBAAkB,EACxB,SAAS,CAAC,EAAE,WAAW,CAAC,cAAc,CAAC,GACtC,kBAAkB,CAAC;CACvB;AAED;;;;;GAKG;AACH,eAAO,MAAM,cAAc,EAAE,cAoB5B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,SAAS;IACpB,KAAK,wBAGF;QACD,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,GAAG,sBAAsB;IAU1B,KAAK,aAAa;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,sBAAsB;IAS7D,IAAI,wBAGD;QACD,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,GAAG,sBAAsB;IAU1B,OAAO,0BAGJ;QACD,UAAU,EAAE,MAAM,CAAC;QACnB,MAAM,EAAE,MAAM,CAAC;KAChB,GAAG,sBAAsB;IAU1B,KAAK,0BAGF;QACD,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,GAAG,sBAAsB;IAU1B,MAAM,gBAAe;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAAQ,sBAAsB;IAUxE,oCAAoC;IACpC,QAAQ,UAAU,uBAAuB,GAAG,sBAAsB;IAIlE,mEAAmE;IACnE,IAAI,wBAGD;QACD,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,GAAG,sBAAsB;IAU1B;;;OAGG;IACH,MAAM,IAAI,sBAAsB;IAehC,yCAAyC;IACzC,KAAK,yBAGF;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,GAAQ,sBAAsB;CAWxE,CAAC;AAIF;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CA8E7D;AAuHD,+EAA+E;AAC/E,KAAK,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,MAAM,GAClC;KAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAAE,GACtC,CAAC,CAAC"}
|
package/dist/identity/index.js
CHANGED
|
@@ -213,6 +213,36 @@ export function validateIdentity(config) {
|
|
|
213
213
|
else if (http !== "trusted_backend") {
|
|
214
214
|
throw new Error('defineIdentity(...) `ingress.http` must be "trusted_backend" or a { mode: "validated_token", providers: [...] } config.');
|
|
215
215
|
}
|
|
216
|
+
if (provided.connect !== undefined) {
|
|
217
|
+
validateConnectProviders(provided.connect);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
function validateConnectProviders(connect) {
|
|
221
|
+
if (!Array.isArray(connect)) {
|
|
222
|
+
throw new Error("defineIdentity(...) `connect` must be an array of identity connect providers " +
|
|
223
|
+
"(e.g. `[github.connect(), slack.connect()]`).");
|
|
224
|
+
}
|
|
225
|
+
for (const [index, entry] of connect.entries()) {
|
|
226
|
+
if (entry === null || typeof entry !== "object") {
|
|
227
|
+
throw new Error(`defineIdentity(...) connect[${index}] must be an IdentityConnectProvider object.`);
|
|
228
|
+
}
|
|
229
|
+
const provider = entry;
|
|
230
|
+
if (typeof provider.id !== "string" || !provider.id.trim()) {
|
|
231
|
+
throw new Error(`defineIdentity(...) connect[${index}] requires a non-empty \`id\` string.`);
|
|
232
|
+
}
|
|
233
|
+
for (const method of [
|
|
234
|
+
"shouldMount",
|
|
235
|
+
"status",
|
|
236
|
+
"startAuthorize",
|
|
237
|
+
"completeCallback",
|
|
238
|
+
"unlink",
|
|
239
|
+
"resolveRedirectBase",
|
|
240
|
+
]) {
|
|
241
|
+
if (typeof provider[method] !== "function") {
|
|
242
|
+
throw new Error(`defineIdentity(...) connect[${index}] ("${provider.id}") requires \`${method}\`.`);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
}
|
|
216
246
|
}
|
|
217
247
|
function isValidatedToken(http) {
|
|
218
248
|
return (typeof http === "object" &&
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/identity/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAgC,gBAAgB,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/identity/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve the local Agent Server URL for trusted loopback clients.
|
|
3
|
+
*
|
|
4
|
+
* Prefers `explicit`, then `MDA_CHANNEL_API_URL` / `LANGGRAPH_API_URL` /
|
|
5
|
+
* `LANGSMITH_ENDPOINT`, else `http://127.0.0.1:{PORT|8000}`.
|
|
6
|
+
*/
|
|
7
|
+
export declare function resolveLoopbackApiUrl(explicit?: string): string;
|
|
8
|
+
//# sourceMappingURL=loopback.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loopback.d.ts","sourceRoot":"","sources":["../../src/identity/loopback.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAW/D"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve the local Agent Server URL for trusted loopback clients.
|
|
3
|
+
*
|
|
4
|
+
* Prefers `explicit`, then `MDA_CHANNEL_API_URL` / `LANGGRAPH_API_URL` /
|
|
5
|
+
* `LANGSMITH_ENDPOINT`, else `http://127.0.0.1:{PORT|8000}`.
|
|
6
|
+
*/
|
|
7
|
+
export function resolveLoopbackApiUrl(explicit) {
|
|
8
|
+
const fromEnv = explicit ??
|
|
9
|
+
process.env.MDA_CHANNEL_API_URL ??
|
|
10
|
+
process.env.LANGGRAPH_API_URL ??
|
|
11
|
+
process.env.LANGSMITH_ENDPOINT;
|
|
12
|
+
if (fromEnv && fromEnv.trim().length > 0) {
|
|
13
|
+
return fromEnv.replace(/\/$/, "");
|
|
14
|
+
}
|
|
15
|
+
const port = process.env.PORT ?? "8000";
|
|
16
|
+
return `http://127.0.0.1:${port}`;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=loopback.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loopback.js","sourceRoot":"","sources":["../../src/identity/loopback.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,QAAiB;IACrD,MAAM,OAAO,GACX,QAAQ;QACR,OAAO,CAAC,GAAG,CAAC,mBAAmB;QAC/B,OAAO,CAAC,GAAG,CAAC,iBAAiB;QAC7B,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;IACjC,IAAI,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzC,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACpC,CAAC;IACD,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,MAAM,CAAC;IACxC,OAAO,oBAAoB,IAAI,EAAE,CAAC;AACpC,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Connect-with-Slack — {@link IdentityConnectProvider} for Slack OIDC linking.
|
|
3
|
+
*
|
|
4
|
+
* Mounted under `/identity/slack/*` when listed on `identity.connect`.
|
|
5
|
+
*/
|
|
6
|
+
import type { IdentityConnectProvider } from "../connect-provider-types.js";
|
|
7
|
+
import { type IdentityLinkStore } from "./links.js";
|
|
8
|
+
export declare const SLACK_CONNECT_STATUS_PATH: string;
|
|
9
|
+
export declare const SLACK_CONNECT_START_PATH: string;
|
|
10
|
+
export declare const SLACK_CONNECT_CALLBACK_PATH: string;
|
|
11
|
+
export declare const SLACK_CONNECT_LINK_PATH: string;
|
|
12
|
+
export declare function projectHasSlackChannel(channels: Record<string, {
|
|
13
|
+
provider?: string;
|
|
14
|
+
}> | undefined): boolean;
|
|
15
|
+
/** Options for {@link createSlackIdentityConnectProvider}. */
|
|
16
|
+
export interface SlackIdentityConnectProviderOptions {
|
|
17
|
+
linkStore?: IdentityLinkStore;
|
|
18
|
+
}
|
|
19
|
+
/** Build a Slack connect provider (injectable store for tests). */
|
|
20
|
+
export declare function createSlackIdentityConnectProvider(options?: SlackIdentityConnectProviderOptions): IdentityConnectProvider;
|
|
21
|
+
/** Default Slack connect provider used by the identity-connect registry. */
|
|
22
|
+
export declare const slackIdentityConnectProvider: IdentityConnectProvider;
|
|
23
|
+
/**
|
|
24
|
+
* Opt into Connect-with-Slack on `defineIdentity({ connect: […] })`.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```ts
|
|
28
|
+
* import { defineIdentity, slack } from "managed-deepagents";
|
|
29
|
+
*
|
|
30
|
+
* export const identity = defineIdentity.preset("internal-tool", {
|
|
31
|
+
* connect: [slack.connect()],
|
|
32
|
+
* });
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
export declare function connect(options?: SlackIdentityConnectProviderOptions): IdentityConnectProvider;
|
|
36
|
+
//# sourceMappingURL=connect-http.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connect-http.d.ts","sourceRoot":"","sources":["../../../src/identity/slack/connect-http.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAKV,uBAAuB,EAExB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAGL,KAAK,iBAAiB,EACvB,MAAM,YAAY,CAAC;AAgBpB,eAAO,MAAM,yBAAyB,QAAe,CAAC;AACtD,eAAO,MAAM,wBAAwB,QAAgB,CAAC;AACtD,eAAO,MAAM,2BAA2B,QAAiB,CAAC;AAC1D,eAAO,MAAM,uBAAuB,QAAa,CAAC;AAElD,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,SAAS,GAC1D,OAAO,CAOT;AAED,8DAA8D;AAC9D,MAAM,WAAW,mCAAmC;IAClD,SAAS,CAAC,EAAE,iBAAiB,CAAC;CAC/B;AAED,mEAAmE;AACnE,wBAAgB,kCAAkC,CAChD,OAAO,GAAE,mCAAwC,GAChD,uBAAuB,CAoFzB;AAED,4EAA4E;AAC5E,eAAO,MAAM,4BAA4B,EAAE,uBACL,CAAC;AAEvC;;;;;;;;;;;GAWG;AACH,wBAAgB,OAAO,CACrB,OAAO,CAAC,EAAE,mCAAmC,GAC5C,uBAAuB,CAIzB"}
|