@hahnfeld/teams-adapter 1.0.9
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/LICENSE +21 -0
- package/README.md +286 -0
- package/dist/activity.d.ts +23 -0
- package/dist/activity.d.ts.map +1 -0
- package/dist/activity.js +3 -0
- package/dist/activity.js.map +1 -0
- package/dist/adapter.d.ts +174 -0
- package/dist/adapter.d.ts.map +1 -0
- package/dist/adapter.js +1583 -0
- package/dist/adapter.js.map +1 -0
- package/dist/app-package.d.ts +7 -0
- package/dist/app-package.d.ts.map +1 -0
- package/dist/app-package.js +158 -0
- package/dist/app-package.js.map +1 -0
- package/dist/assistant.d.ts +7 -0
- package/dist/assistant.d.ts.map +1 -0
- package/dist/assistant.js +32 -0
- package/dist/assistant.js.map +1 -0
- package/dist/commands/admin.d.ts +27 -0
- package/dist/commands/admin.d.ts.map +1 -0
- package/dist/commands/admin.js +146 -0
- package/dist/commands/admin.js.map +1 -0
- package/dist/commands/agents.d.ts +13 -0
- package/dist/commands/agents.d.ts.map +1 -0
- package/dist/commands/agents.js +98 -0
- package/dist/commands/agents.js.map +1 -0
- package/dist/commands/doctor.d.ts +8 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +49 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/index.d.ts +16 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +253 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/integrate.d.ts +8 -0
- package/dist/commands/integrate.d.ts.map +1 -0
- package/dist/commands/integrate.js +45 -0
- package/dist/commands/integrate.js.map +1 -0
- package/dist/commands/menu.d.ts +16 -0
- package/dist/commands/menu.d.ts.map +1 -0
- package/dist/commands/menu.js +92 -0
- package/dist/commands/menu.js.map +1 -0
- package/dist/commands/new-session.d.ts +13 -0
- package/dist/commands/new-session.d.ts.map +1 -0
- package/dist/commands/new-session.js +105 -0
- package/dist/commands/new-session.js.map +1 -0
- package/dist/commands/session.d.ts +22 -0
- package/dist/commands/session.d.ts.map +1 -0
- package/dist/commands/session.js +110 -0
- package/dist/commands/session.js.map +1 -0
- package/dist/commands/settings.d.ts +8 -0
- package/dist/commands/settings.d.ts.map +1 -0
- package/dist/commands/settings.js +54 -0
- package/dist/commands/settings.js.map +1 -0
- package/dist/conversation-store.d.ts +38 -0
- package/dist/conversation-store.d.ts.map +1 -0
- package/dist/conversation-store.js +101 -0
- package/dist/conversation-store.js.map +1 -0
- package/dist/draft-manager.d.ts +47 -0
- package/dist/draft-manager.d.ts.map +1 -0
- package/dist/draft-manager.js +136 -0
- package/dist/draft-manager.js.map +1 -0
- package/dist/formatting.d.ts +121 -0
- package/dist/formatting.d.ts.map +1 -0
- package/dist/formatting.js +392 -0
- package/dist/formatting.js.map +1 -0
- package/dist/graph.d.ts +59 -0
- package/dist/graph.d.ts.map +1 -0
- package/dist/graph.js +261 -0
- package/dist/graph.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/media.d.ts +29 -0
- package/dist/media.d.ts.map +1 -0
- package/dist/media.js +120 -0
- package/dist/media.js.map +1 -0
- package/dist/permissions.d.ts +15 -0
- package/dist/permissions.d.ts.map +1 -0
- package/dist/permissions.js +221 -0
- package/dist/permissions.js.map +1 -0
- package/dist/plugin.d.ts +13 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +689 -0
- package/dist/plugin.js.map +1 -0
- package/dist/renderer.d.ts +49 -0
- package/dist/renderer.d.ts.map +1 -0
- package/dist/renderer.js +55 -0
- package/dist/renderer.js.map +1 -0
- package/dist/send-utils.d.ts +15 -0
- package/dist/send-utils.d.ts.map +1 -0
- package/dist/send-utils.js +64 -0
- package/dist/send-utils.js.map +1 -0
- package/dist/task-modules.d.ts +34 -0
- package/dist/task-modules.d.ts.map +1 -0
- package/dist/task-modules.js +136 -0
- package/dist/task-modules.js.map +1 -0
- package/dist/types.d.ts +26 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/validators.d.ts +54 -0
- package/dist/validators.d.ts.map +1 -0
- package/dist/validators.js +142 -0
- package/dist/validators.js.map +1 -0
- package/package.json +56 -0
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validate bot credentials by acquiring a token from the MSA/AAD endpoint.
|
|
3
|
+
* This proves the App ID and Password are correct and the bot registration exists.
|
|
4
|
+
*/
|
|
5
|
+
export async function validateBotCredentials(appId, appPassword, tenantId) {
|
|
6
|
+
try {
|
|
7
|
+
const tenant = tenantId || "botframework.com";
|
|
8
|
+
const response = await fetch(`https://login.microsoftonline.com/${tenant}/oauth2/v2.0/token`, {
|
|
9
|
+
method: "POST",
|
|
10
|
+
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
|
11
|
+
body: new URLSearchParams({
|
|
12
|
+
grant_type: "client_credentials",
|
|
13
|
+
client_id: appId,
|
|
14
|
+
client_secret: appPassword,
|
|
15
|
+
scope: "https://api.botframework.com/.default",
|
|
16
|
+
}).toString(),
|
|
17
|
+
});
|
|
18
|
+
if (response.ok) {
|
|
19
|
+
return { ok: true };
|
|
20
|
+
}
|
|
21
|
+
const data = (await response.json().catch(() => ({})));
|
|
22
|
+
if (data.error === "invalid_client") {
|
|
23
|
+
return { ok: false, error: "Invalid App ID or Password. Check your Azure Bot registration." };
|
|
24
|
+
}
|
|
25
|
+
if (data.error === "unauthorized_client") {
|
|
26
|
+
return { ok: false, error: "App ID is not authorized. Ensure it's registered as a Bot in Azure." };
|
|
27
|
+
}
|
|
28
|
+
return { ok: false, error: `Authentication failed (${response.status}). Verify your credentials.` };
|
|
29
|
+
}
|
|
30
|
+
catch (err) {
|
|
31
|
+
return { ok: false, error: `Network error: ${err.message}` };
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Validate a tenant ID by attempting token acquisition against it.
|
|
36
|
+
* Also tries to resolve the tenant display name via the OpenID configuration.
|
|
37
|
+
*/
|
|
38
|
+
export async function validateTenant(appId, appPassword, tenantId) {
|
|
39
|
+
// First validate credentials work with this tenant
|
|
40
|
+
const credResult = await validateBotCredentials(appId, appPassword, tenantId);
|
|
41
|
+
if (!credResult.ok) {
|
|
42
|
+
return { ok: false, error: `Tenant validation failed: ${credResult.error}` };
|
|
43
|
+
}
|
|
44
|
+
// Try to get tenant display name via OpenID config
|
|
45
|
+
let tenantName;
|
|
46
|
+
try {
|
|
47
|
+
const oidcRes = await fetch(`https://login.microsoftonline.com/${tenantId}/v2.0/.well-known/openid-configuration`);
|
|
48
|
+
if (oidcRes.ok) {
|
|
49
|
+
const oidc = (await oidcRes.json());
|
|
50
|
+
// The issuer URL contains the tenant ID, confirming it's valid
|
|
51
|
+
if (oidc.issuer?.includes(tenantId)) {
|
|
52
|
+
tenantName = tenantId; // Display the GUID; tenant name requires Graph access
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
// Non-critical — we already validated the credentials
|
|
58
|
+
}
|
|
59
|
+
return { ok: true, tenantName };
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Discover Teams and channels the bot has access to via Microsoft Graph API.
|
|
63
|
+
* Requires the bot's app registration to have Team.ReadBasic.All or similar permissions.
|
|
64
|
+
* Returns an empty array if Graph permissions aren't configured (graceful fallback).
|
|
65
|
+
*/
|
|
66
|
+
export async function discoverTeamsAndChannels(appId, appPassword, tenantId) {
|
|
67
|
+
try {
|
|
68
|
+
// Get a Graph token
|
|
69
|
+
const tokenRes = await fetch(`https://login.microsoftonline.com/${tenantId}/oauth2/v2.0/token`, {
|
|
70
|
+
method: "POST",
|
|
71
|
+
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
|
72
|
+
body: new URLSearchParams({
|
|
73
|
+
grant_type: "client_credentials",
|
|
74
|
+
client_id: appId,
|
|
75
|
+
client_secret: appPassword,
|
|
76
|
+
scope: "https://graph.microsoft.com/.default",
|
|
77
|
+
}).toString(),
|
|
78
|
+
});
|
|
79
|
+
if (!tokenRes.ok) {
|
|
80
|
+
return { ok: false, error: "Could not acquire Graph API token. Auto-discovery requires Graph permissions." };
|
|
81
|
+
}
|
|
82
|
+
const tokenData = (await tokenRes.json());
|
|
83
|
+
const token = tokenData.access_token;
|
|
84
|
+
// List teams (requires Team.ReadBasic.All or TeamSettings.Read.All)
|
|
85
|
+
const teamsRes = await fetch("https://graph.microsoft.com/v1.0/groups?$filter=resourceProvisioningOptions/Any(x:x eq 'Team')&$select=id,displayName&$top=50", {
|
|
86
|
+
headers: { Authorization: `Bearer ${token}` },
|
|
87
|
+
});
|
|
88
|
+
if (!teamsRes.ok) {
|
|
89
|
+
if (teamsRes.status === 403) {
|
|
90
|
+
return { ok: false, error: "Graph API permissions not configured. Add Team.ReadBasic.All to your app registration for auto-discovery." };
|
|
91
|
+
}
|
|
92
|
+
return { ok: false, error: `Graph API error (${teamsRes.status})` };
|
|
93
|
+
}
|
|
94
|
+
const teamsData = (await teamsRes.json());
|
|
95
|
+
const teams = [];
|
|
96
|
+
for (const team of (teamsData.value ?? []).slice(0, 10)) {
|
|
97
|
+
// Get channels for each team
|
|
98
|
+
try {
|
|
99
|
+
const channelsRes = await fetch(`https://graph.microsoft.com/v1.0/teams/${team.id}/channels?$select=id,displayName&$top=25`, { headers: { Authorization: `Bearer ${token}` } });
|
|
100
|
+
const channelsData = channelsRes.ok
|
|
101
|
+
? (await channelsRes.json())
|
|
102
|
+
: { value: [] };
|
|
103
|
+
teams.push({
|
|
104
|
+
id: team.id,
|
|
105
|
+
name: team.displayName,
|
|
106
|
+
channels: channelsData.value.map((c) => ({ id: c.id, name: c.displayName })),
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
catch {
|
|
110
|
+
teams.push({ id: team.id, name: team.displayName, channels: [] });
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return { ok: true, teams };
|
|
114
|
+
}
|
|
115
|
+
catch (err) {
|
|
116
|
+
return { ok: false, error: `Discovery failed: ${err.message}` };
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Parse a Teams channel link to extract team and channel IDs.
|
|
121
|
+
* Teams links look like:
|
|
122
|
+
* https://teams.microsoft.com/l/channel/19%3A...%40thread.tacv2/General?groupId=<teamId>&tenantId=<tenantId>
|
|
123
|
+
* https://teams.cloud.microsoft/l/channel/19%3A...%40thread.tacv2/General?groupId=<teamId>&tenantId=<tenantId>
|
|
124
|
+
*/
|
|
125
|
+
export function parseTeamsLink(url) {
|
|
126
|
+
try {
|
|
127
|
+
const parsed = new URL(url);
|
|
128
|
+
const groupId = parsed.searchParams.get("groupId") ?? undefined;
|
|
129
|
+
const tenantId = parsed.searchParams.get("tenantId") ?? undefined;
|
|
130
|
+
// Channel ID is in the path: /l/channel/<encodedChannelId>/...
|
|
131
|
+
let channelId;
|
|
132
|
+
const pathMatch = parsed.pathname.match(/\/l\/channel\/([^/]+)/);
|
|
133
|
+
if (pathMatch) {
|
|
134
|
+
channelId = decodeURIComponent(pathMatch[1]);
|
|
135
|
+
}
|
|
136
|
+
return { teamId: groupId, channelId, tenantId };
|
|
137
|
+
}
|
|
138
|
+
catch {
|
|
139
|
+
return {};
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=validators.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validators.js","sourceRoot":"","sources":["../src/validators.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@hahnfeld/teams-adapter",
|
|
3
|
+
"version": "1.0.9",
|
|
4
|
+
"description": "Teams adapter plugin for OpenACP — Adaptive Cards, commands, streaming",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"import": "./dist/index.js"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"keywords": ["openacp", "openacp-plugin", "teams", "adapter", "microsoft-teams"],
|
|
15
|
+
"engines": {
|
|
16
|
+
"node": ">=20",
|
|
17
|
+
"openacp": ">=2026.0.0"
|
|
18
|
+
},
|
|
19
|
+
"scripts": {
|
|
20
|
+
"build": "tsc",
|
|
21
|
+
"dev": "tsc --watch",
|
|
22
|
+
"test": "vitest",
|
|
23
|
+
"prepublishOnly": "pnpm run build"
|
|
24
|
+
},
|
|
25
|
+
"repository": {
|
|
26
|
+
"type": "git",
|
|
27
|
+
"url": "https://github.com/hahnfeld/teams-adapter"
|
|
28
|
+
},
|
|
29
|
+
"homepage": "https://github.com/hahnfeld/teams-adapter",
|
|
30
|
+
"author": "Matt Hahnfeld",
|
|
31
|
+
"publishConfig": {
|
|
32
|
+
"registry": "https://registry.npmjs.org",
|
|
33
|
+
"access": "public"
|
|
34
|
+
},
|
|
35
|
+
"peerDependencies": {
|
|
36
|
+
"@openacp/cli": ">=2026.0.0",
|
|
37
|
+
"@openacp/plugin-sdk": ">=2026.0.0"
|
|
38
|
+
},
|
|
39
|
+
"dependencies": {
|
|
40
|
+
"@microsoft/agents-hosting": "^1.4.0",
|
|
41
|
+
"@microsoft/teams.api": "^2.0.0",
|
|
42
|
+
"@microsoft/teams.apps": "^2.0.0",
|
|
43
|
+
"@microsoft/teams.botbuilder": "^2.0.0",
|
|
44
|
+
"botbuilder": "^4.23.0",
|
|
45
|
+
"botframework-connector": "^4.23.0",
|
|
46
|
+
"nanoid": "^5.0.0"
|
|
47
|
+
},
|
|
48
|
+
"devDependencies": {
|
|
49
|
+
"@openacp/plugin-sdk": "^2026.0.0",
|
|
50
|
+
"typescript": "^5.4.0",
|
|
51
|
+
"vitest": "^3.0.0"
|
|
52
|
+
},
|
|
53
|
+
"files": ["dist"],
|
|
54
|
+
"packageManager": "pnpm@10.5.0",
|
|
55
|
+
"license": "MIT"
|
|
56
|
+
}
|