agent-messenger 2.27.2 → 2.29.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/.claude-plugin/README.md +11 -1
- package/.claude-plugin/marketplace.json +14 -1
- package/.claude-plugin/plugin.json +4 -2
- package/AGENTS.md +4 -0
- package/README.md +58 -10
- package/dist/package.json +10 -2
- package/dist/src/cli.d.ts.map +1 -1
- package/dist/src/cli.js +3 -0
- package/dist/src/cli.js.map +1 -1
- package/dist/src/platforms/discord/client.d.ts +6 -2
- package/dist/src/platforms/discord/client.d.ts.map +1 -1
- package/dist/src/platforms/discord/client.js +10 -3
- package/dist/src/platforms/discord/client.js.map +1 -1
- package/dist/src/platforms/discordbot/cli.js +1 -1
- package/dist/src/platforms/imessage/cli.d.ts +5 -0
- package/dist/src/platforms/imessage/cli.d.ts.map +1 -0
- package/dist/src/platforms/imessage/cli.js +31 -0
- package/dist/src/platforms/imessage/cli.js.map +1 -0
- package/dist/src/platforms/imessage/client.d.ts +43 -0
- package/dist/src/platforms/imessage/client.d.ts.map +1 -0
- package/dist/src/platforms/imessage/client.js +190 -0
- package/dist/src/platforms/imessage/client.js.map +1 -0
- package/dist/src/platforms/imessage/commands/auth.d.ts +31 -0
- package/dist/src/platforms/imessage/commands/auth.d.ts.map +1 -0
- package/dist/src/platforms/imessage/commands/auth.js +100 -0
- package/dist/src/platforms/imessage/commands/auth.js.map +1 -0
- package/dist/src/platforms/imessage/commands/chat.d.ts +3 -0
- package/dist/src/platforms/imessage/commands/chat.d.ts.map +1 -0
- package/dist/src/platforms/imessage/commands/chat.js +42 -0
- package/dist/src/platforms/imessage/commands/chat.js.map +1 -0
- package/dist/src/platforms/imessage/commands/doctor.d.ts +25 -0
- package/dist/src/platforms/imessage/commands/doctor.d.ts.map +1 -0
- package/dist/src/platforms/imessage/commands/doctor.js +101 -0
- package/dist/src/platforms/imessage/commands/doctor.js.map +1 -0
- package/dist/src/platforms/imessage/commands/index.d.ts +7 -0
- package/dist/src/platforms/imessage/commands/index.d.ts.map +1 -0
- package/dist/src/platforms/imessage/commands/index.js +7 -0
- package/dist/src/platforms/imessage/commands/index.js.map +1 -0
- package/dist/src/platforms/imessage/commands/message.d.ts +5 -0
- package/dist/src/platforms/imessage/commands/message.d.ts.map +1 -0
- package/dist/src/platforms/imessage/commands/message.js +127 -0
- package/dist/src/platforms/imessage/commands/message.js.map +1 -0
- package/dist/src/platforms/imessage/commands/setup.d.ts +20 -0
- package/dist/src/platforms/imessage/commands/setup.d.ts.map +1 -0
- package/dist/src/platforms/imessage/commands/setup.js +57 -0
- package/dist/src/platforms/imessage/commands/setup.js.map +1 -0
- package/dist/src/platforms/imessage/commands/shared.d.ts +10 -0
- package/dist/src/platforms/imessage/commands/shared.d.ts.map +1 -0
- package/dist/src/platforms/imessage/commands/shared.js +53 -0
- package/dist/src/platforms/imessage/commands/shared.js.map +1 -0
- package/dist/src/platforms/imessage/commands/whoami.d.ts +3 -0
- package/dist/src/platforms/imessage/commands/whoami.d.ts.map +1 -0
- package/dist/src/platforms/imessage/commands/whoami.js +20 -0
- package/dist/src/platforms/imessage/commands/whoami.js.map +1 -0
- package/dist/src/platforms/imessage/credential-manager.d.ts +22 -0
- package/dist/src/platforms/imessage/credential-manager.d.ts.map +1 -0
- package/dist/src/platforms/imessage/credential-manager.js +111 -0
- package/dist/src/platforms/imessage/credential-manager.js.map +1 -0
- package/dist/src/platforms/imessage/ensure-auth.d.ts +2 -0
- package/dist/src/platforms/imessage/ensure-auth.d.ts.map +1 -0
- package/dist/src/platforms/imessage/ensure-auth.js +13 -0
- package/dist/src/platforms/imessage/ensure-auth.js.map +1 -0
- package/dist/src/platforms/imessage/errors.d.ts +3 -0
- package/dist/src/platforms/imessage/errors.d.ts.map +1 -0
- package/dist/src/platforms/imessage/errors.js +25 -0
- package/dist/src/platforms/imessage/errors.js.map +1 -0
- package/dist/src/platforms/imessage/index.d.ts +7 -0
- package/dist/src/platforms/imessage/index.d.ts.map +1 -0
- package/dist/src/platforms/imessage/index.js +5 -0
- package/dist/src/platforms/imessage/index.js.map +1 -0
- package/dist/src/platforms/imessage/rpc.d.ts +20 -0
- package/dist/src/platforms/imessage/rpc.d.ts.map +1 -0
- package/dist/src/platforms/imessage/rpc.js +133 -0
- package/dist/src/platforms/imessage/rpc.js.map +1 -0
- package/dist/src/platforms/imessage/types.d.ts +59 -0
- package/dist/src/platforms/imessage/types.d.ts.map +1 -0
- package/dist/src/platforms/imessage/types.js +29 -0
- package/dist/src/platforms/imessage/types.js.map +1 -0
- package/dist/src/platforms/instagram/cli.js +1 -1
- package/dist/src/platforms/instagram/client.d.ts +29 -2
- package/dist/src/platforms/instagram/client.d.ts.map +1 -1
- package/dist/src/platforms/instagram/client.js +360 -53
- package/dist/src/platforms/instagram/client.js.map +1 -1
- package/dist/src/platforms/instagram/commands/auth.d.ts +1 -0
- package/dist/src/platforms/instagram/commands/auth.d.ts.map +1 -1
- package/dist/src/platforms/instagram/commands/auth.js +123 -11
- package/dist/src/platforms/instagram/commands/auth.js.map +1 -1
- package/dist/src/platforms/instagram/credential-manager.d.ts +4 -1
- package/dist/src/platforms/instagram/credential-manager.d.ts.map +1 -1
- package/dist/src/platforms/instagram/credential-manager.js +17 -1
- package/dist/src/platforms/instagram/credential-manager.js.map +1 -1
- package/dist/src/platforms/instagram/hybrid-listener.d.ts +48 -0
- package/dist/src/platforms/instagram/hybrid-listener.d.ts.map +1 -0
- package/dist/src/platforms/instagram/hybrid-listener.js +154 -0
- package/dist/src/platforms/instagram/hybrid-listener.js.map +1 -0
- package/dist/src/platforms/instagram/index.d.ts +2 -0
- package/dist/src/platforms/instagram/index.d.ts.map +1 -1
- package/dist/src/platforms/instagram/index.js +2 -0
- package/dist/src/platforms/instagram/index.js.map +1 -1
- package/dist/src/platforms/instagram/mqtt/connection.d.ts +4 -0
- package/dist/src/platforms/instagram/mqtt/connection.d.ts.map +1 -0
- package/dist/src/platforms/instagram/mqtt/connection.js +66 -0
- package/dist/src/platforms/instagram/mqtt/connection.js.map +1 -0
- package/dist/src/platforms/instagram/mqtt/thrift.d.ts +22 -0
- package/dist/src/platforms/instagram/mqtt/thrift.d.ts.map +1 -0
- package/dist/src/platforms/instagram/mqtt/thrift.js +143 -0
- package/dist/src/platforms/instagram/mqtt/thrift.js.map +1 -0
- package/dist/src/platforms/instagram/mqtt/transport.d.ts +42 -0
- package/dist/src/platforms/instagram/mqtt/transport.d.ts.map +1 -0
- package/dist/src/platforms/instagram/mqtt/transport.js +246 -0
- package/dist/src/platforms/instagram/mqtt/transport.js.map +1 -0
- package/dist/src/platforms/instagram/realtime-listener.d.ts +33 -0
- package/dist/src/platforms/instagram/realtime-listener.d.ts.map +1 -0
- package/dist/src/platforms/instagram/realtime-listener.js +151 -0
- package/dist/src/platforms/instagram/realtime-listener.js.map +1 -0
- package/dist/src/platforms/instagram/types.d.ts +10 -8
- package/dist/src/platforms/instagram/types.d.ts.map +1 -1
- package/dist/src/platforms/instagram/types.js.map +1 -1
- package/dist/src/platforms/kakaotalk/cli.js +1 -1
- package/dist/src/platforms/line/cli.js +1 -1
- package/dist/src/platforms/teams/app-config.d.ts +36 -0
- package/dist/src/platforms/teams/app-config.d.ts.map +1 -0
- package/dist/src/platforms/teams/app-config.js +69 -0
- package/dist/src/platforms/teams/app-config.js.map +1 -0
- package/dist/src/platforms/teams/client.d.ts +19 -2
- package/dist/src/platforms/teams/client.d.ts.map +1 -1
- package/dist/src/platforms/teams/client.js +295 -7
- package/dist/src/platforms/teams/client.js.map +1 -1
- package/dist/src/platforms/teams/commands/auth.d.ts +10 -0
- package/dist/src/platforms/teams/commands/auth.d.ts.map +1 -1
- package/dist/src/platforms/teams/commands/auth.js +137 -3
- package/dist/src/platforms/teams/commands/auth.js.map +1 -1
- package/dist/src/platforms/teams/commands/file.d.ts +3 -0
- package/dist/src/platforms/teams/commands/file.d.ts.map +1 -1
- package/dist/src/platforms/teams/commands/file.js +59 -2
- package/dist/src/platforms/teams/commands/file.js.map +1 -1
- package/dist/src/platforms/teams/commands/message.d.ts +11 -0
- package/dist/src/platforms/teams/commands/message.d.ts.map +1 -1
- package/dist/src/platforms/teams/commands/message.js +121 -2
- package/dist/src/platforms/teams/commands/message.js.map +1 -1
- package/dist/src/platforms/teams/credential-manager.d.ts +23 -1
- package/dist/src/platforms/teams/credential-manager.d.ts.map +1 -1
- package/dist/src/platforms/teams/credential-manager.js +46 -2
- package/dist/src/platforms/teams/credential-manager.js.map +1 -1
- package/dist/src/platforms/teams/device-code.d.ts +48 -0
- package/dist/src/platforms/teams/device-code.d.ts.map +1 -0
- package/dist/src/platforms/teams/device-code.js +199 -0
- package/dist/src/platforms/teams/device-code.js.map +1 -0
- package/dist/src/platforms/teams/device-login.d.ts +37 -0
- package/dist/src/platforms/teams/device-login.d.ts.map +1 -0
- package/dist/src/platforms/teams/device-login.js +129 -0
- package/dist/src/platforms/teams/device-login.js.map +1 -0
- package/dist/src/platforms/teams/ensure-auth.d.ts.map +1 -1
- package/dist/src/platforms/teams/ensure-auth.js +12 -0
- package/dist/src/platforms/teams/ensure-auth.js.map +1 -1
- package/dist/src/platforms/teams/index.d.ts +7 -3
- package/dist/src/platforms/teams/index.d.ts.map +1 -1
- package/dist/src/platforms/teams/index.js +5 -2
- package/dist/src/platforms/teams/index.js.map +1 -1
- package/dist/src/platforms/teams/listener.d.ts +35 -0
- package/dist/src/platforms/teams/listener.d.ts.map +1 -0
- package/dist/src/platforms/teams/listener.js +236 -0
- package/dist/src/platforms/teams/listener.js.map +1 -0
- package/dist/src/platforms/teams/realm-discovery.d.ts +3 -0
- package/dist/src/platforms/teams/realm-discovery.d.ts.map +1 -0
- package/dist/src/platforms/teams/realm-discovery.js +33 -0
- package/dist/src/platforms/teams/realm-discovery.js.map +1 -0
- package/dist/src/platforms/teams/token-extractor.d.ts +3 -0
- package/dist/src/platforms/teams/token-extractor.d.ts.map +1 -1
- package/dist/src/platforms/teams/token-extractor.js +60 -0
- package/dist/src/platforms/teams/token-extractor.js.map +1 -1
- package/dist/src/platforms/teams/token-provider.d.ts +25 -0
- package/dist/src/platforms/teams/token-provider.d.ts.map +1 -0
- package/dist/src/platforms/teams/token-provider.js +190 -0
- package/dist/src/platforms/teams/token-provider.js.map +1 -0
- package/dist/src/platforms/teams/trouter.d.ts +31 -0
- package/dist/src/platforms/teams/trouter.d.ts.map +1 -0
- package/dist/src/platforms/teams/trouter.js +181 -0
- package/dist/src/platforms/teams/trouter.js.map +1 -0
- package/dist/src/platforms/teams/types.d.ts +94 -0
- package/dist/src/platforms/teams/types.d.ts.map +1 -1
- package/dist/src/platforms/teams/types.js +30 -0
- package/dist/src/platforms/teams/types.js.map +1 -1
- package/dist/src/platforms/webex/cli.js +1 -1
- package/dist/src/platforms/webex/types.d.ts +1 -1
- package/dist/src/platforms/webexbot/cli.js +1 -1
- package/dist/src/platforms/wechatbot/cli.js +1 -1
- package/dist/src/platforms/whatsapp/cli.js +1 -1
- package/dist/src/platforms/whatsappbot/cli.js +1 -1
- package/dist/src/tui/adapters/imessage-adapter.d.ts +21 -0
- package/dist/src/tui/adapters/imessage-adapter.d.ts.map +1 -0
- package/dist/src/tui/adapters/imessage-adapter.js +110 -0
- package/dist/src/tui/adapters/imessage-adapter.js.map +1 -0
- package/dist/src/tui/adapters/instagram-adapter.d.ts.map +1 -1
- package/dist/src/tui/adapters/instagram-adapter.js +16 -0
- package/dist/src/tui/adapters/instagram-adapter.js.map +1 -1
- package/dist/src/tui/adapters/teams-adapter.d.ts +3 -0
- package/dist/src/tui/adapters/teams-adapter.d.ts.map +1 -1
- package/dist/src/tui/adapters/teams-adapter.js +21 -0
- package/dist/src/tui/adapters/teams-adapter.js.map +1 -1
- package/dist/src/tui/app.d.ts.map +1 -1
- package/dist/src/tui/app.js +12 -3
- package/dist/src/tui/app.js.map +1 -1
- package/docs/content/docs/agent-skills.mdx +1 -1
- package/docs/content/docs/cli/imessage.mdx +99 -0
- package/docs/content/docs/cli/instagram.mdx +2 -1
- package/docs/content/docs/cli/meta.json +1 -0
- package/docs/content/docs/cli/teams.mdx +22 -0
- package/docs/content/docs/index.mdx +9 -6
- package/docs/content/docs/quick-start.mdx +2 -0
- package/docs/content/docs/sdk/instagram.mdx +90 -5
- package/docs/content/docs/tui.mdx +4 -3
- package/package.json +10 -2
- package/scripts/postbuild.ts +12 -15
- package/skills/agent-channeltalk/SKILL.md +1 -1
- package/skills/agent-channeltalkbot/SKILL.md +1 -1
- package/skills/agent-discord/SKILL.md +1 -1
- package/skills/agent-discordbot/SKILL.md +1 -1
- package/skills/agent-imessage/SKILL.md +133 -0
- package/skills/agent-imessage/references/authentication.md +66 -0
- package/skills/agent-imessage/references/permissions.md +31 -0
- package/skills/agent-imessage/references/setup.md +49 -0
- package/skills/agent-instagram/SKILL.md +72 -2
- package/skills/agent-instagram/references/authentication.md +11 -0
- package/skills/agent-instagram/references/common-patterns.md +36 -0
- package/skills/agent-instagram/templates/monitor-chat.sh +5 -0
- package/skills/agent-kakaotalk/SKILL.md +1 -1
- package/skills/agent-line/SKILL.md +1 -1
- package/skills/agent-slack/SKILL.md +1 -1
- package/skills/agent-slackbot/SKILL.md +1 -1
- package/skills/agent-teams/SKILL.md +59 -6
- package/skills/agent-teams/references/authentication.md +31 -1
- package/skills/agent-telegram/SKILL.md +1 -1
- package/skills/agent-telegrambot/SKILL.md +1 -1
- package/skills/agent-webex/SKILL.md +1 -1
- package/skills/agent-webexbot/SKILL.md +1 -1
- package/skills/agent-wechatbot/SKILL.md +1 -1
- package/skills/agent-whatsapp/SKILL.md +1 -1
- package/skills/agent-whatsappbot/SKILL.md +1 -1
- package/src/cli.ts +4 -0
- package/src/platforms/discord/client.test.ts +86 -0
- package/src/platforms/discord/client.ts +10 -3
- package/src/platforms/imessage/cli.ts +39 -0
- package/src/platforms/imessage/client.test.ts +137 -0
- package/src/platforms/imessage/client.ts +253 -0
- package/src/platforms/imessage/commands/auth.ts +142 -0
- package/src/platforms/imessage/commands/chat.ts +51 -0
- package/src/platforms/imessage/commands/doctor.test.ts +80 -0
- package/src/platforms/imessage/commands/doctor.ts +139 -0
- package/src/platforms/imessage/commands/index.ts +6 -0
- package/src/platforms/imessage/commands/message.test.ts +20 -0
- package/src/platforms/imessage/commands/message.ts +151 -0
- package/src/platforms/imessage/commands/setup.test.ts +52 -0
- package/src/platforms/imessage/commands/setup.ts +76 -0
- package/src/platforms/imessage/commands/shared.test.ts +19 -0
- package/src/platforms/imessage/commands/shared.ts +69 -0
- package/src/platforms/imessage/commands/whoami.ts +22 -0
- package/src/platforms/imessage/credential-manager.test.ts +122 -0
- package/src/platforms/imessage/credential-manager.ts +123 -0
- package/src/platforms/imessage/ensure-auth.ts +18 -0
- package/src/platforms/imessage/errors.ts +27 -0
- package/src/platforms/imessage/index.test.ts +13 -0
- package/src/platforms/imessage/index.ts +16 -0
- package/src/platforms/imessage/rpc.ts +157 -0
- package/src/platforms/imessage/test-stub-imsg.mjs +147 -0
- package/src/platforms/imessage/types.test.ts +47 -0
- package/src/platforms/imessage/types.ts +95 -0
- package/src/platforms/instagram/client.test.ts +478 -33
- package/src/platforms/instagram/client.ts +472 -68
- package/src/platforms/instagram/commands/auth.test.ts +177 -1
- package/src/platforms/instagram/commands/auth.ts +182 -11
- package/src/platforms/instagram/credential-manager.test.ts +30 -0
- package/src/platforms/instagram/credential-manager.ts +23 -1
- package/src/platforms/instagram/hybrid-listener.test.ts +135 -0
- package/src/platforms/instagram/hybrid-listener.ts +196 -0
- package/src/platforms/instagram/index.ts +10 -0
- package/src/platforms/instagram/mqtt/connection.ts +72 -0
- package/src/platforms/instagram/mqtt/thrift.test.ts +91 -0
- package/src/platforms/instagram/mqtt/thrift.ts +159 -0
- package/src/platforms/instagram/mqtt/transport.ts +285 -0
- package/src/platforms/instagram/realtime-listener.test.ts +34 -0
- package/src/platforms/instagram/realtime-listener.ts +201 -0
- package/src/platforms/instagram/types.ts +11 -8
- package/src/platforms/teams/app-config.ts +92 -0
- package/src/platforms/teams/client.test.ts +335 -1
- package/src/platforms/teams/client.ts +342 -7
- package/src/platforms/teams/commands/auth.test.ts +93 -1
- package/src/platforms/teams/commands/auth.ts +182 -3
- package/src/platforms/teams/commands/file.test.ts +92 -1
- package/src/platforms/teams/commands/file.ts +76 -1
- package/src/platforms/teams/commands/message.test.ts +95 -1
- package/src/platforms/teams/commands/message.ts +145 -3
- package/src/platforms/teams/credential-manager.test.ts +20 -0
- package/src/platforms/teams/credential-manager.ts +68 -3
- package/src/platforms/teams/device-code.test.ts +311 -0
- package/src/platforms/teams/device-code.ts +277 -0
- package/src/platforms/teams/device-login.test.ts +288 -0
- package/src/platforms/teams/device-login.ts +206 -0
- package/src/platforms/teams/ensure-auth.ts +11 -0
- package/src/platforms/teams/index.test.ts +10 -0
- package/src/platforms/teams/index.ts +16 -1
- package/src/platforms/teams/listener.ts +295 -0
- package/src/platforms/teams/realm-discovery.test.ts +73 -0
- package/src/platforms/teams/realm-discovery.ts +42 -0
- package/src/platforms/teams/token-extractor.ts +69 -0
- package/src/platforms/teams/token-provider.test.ts +227 -0
- package/src/platforms/teams/token-provider.ts +284 -0
- package/src/platforms/teams/trouter.test.ts +114 -0
- package/src/platforms/teams/trouter.ts +228 -0
- package/src/platforms/teams/types.test.ts +17 -0
- package/src/platforms/teams/types.ts +86 -0
- package/src/platforms/webexbot/cli.ts +0 -0
- package/src/tui/adapters/imessage-adapter.ts +131 -0
- package/src/tui/adapters/instagram-adapter.ts +13 -0
- package/src/tui/adapters/teams-adapter.ts +23 -0
- package/src/tui/app.ts +16 -3
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import { AAD_AUDIENCE_GRAPH, AAD_AUDIENCE_SUBSTRATE, AAD_SCOPE_GRAPH, AAD_SCOPE_SUBSTRATE, consumerTokenUrl, getTeamsAppClientId, organizationsTokenUrl, TEAMS_WEB_ORIGIN, } from './app-config.js';
|
|
2
|
+
import { TeamsCredentialManager } from './credential-manager.js';
|
|
3
|
+
import { TeamsAuthCapabilityError, TeamsError } from './types.js';
|
|
4
|
+
const REFRESH_BUFFER_MS = 5 * 60 * 1000;
|
|
5
|
+
const DEFAULT_ACCESS_TOKEN_TTL_SEC = 3600;
|
|
6
|
+
const BEARER_AUDIENCES = {
|
|
7
|
+
substrate: { scope: AAD_SCOPE_SUBSTRATE, aud: AAD_AUDIENCE_SUBSTRATE },
|
|
8
|
+
graph: { scope: AAD_SCOPE_GRAPH, aud: AAD_AUDIENCE_GRAPH },
|
|
9
|
+
};
|
|
10
|
+
export class TeamsTokenProvider {
|
|
11
|
+
credManager;
|
|
12
|
+
cache = new Map();
|
|
13
|
+
tenantId;
|
|
14
|
+
userId;
|
|
15
|
+
boundAccountType;
|
|
16
|
+
lastAccountType;
|
|
17
|
+
constructor(credManager = new TeamsCredentialManager()) {
|
|
18
|
+
this.credManager = credManager;
|
|
19
|
+
}
|
|
20
|
+
bindAccount(accountType) {
|
|
21
|
+
this.boundAccountType = accountType;
|
|
22
|
+
return this;
|
|
23
|
+
}
|
|
24
|
+
async getSkypeToken() {
|
|
25
|
+
const cached = this.getCached('skype');
|
|
26
|
+
if (cached)
|
|
27
|
+
return cached.accessToken;
|
|
28
|
+
const cred = await this.credManager.getTokenWithExpiry();
|
|
29
|
+
if (!cred?.token) {
|
|
30
|
+
throw new TeamsError('No Teams credentials found. Run `agent-teams auth login` or `agent-teams auth extract`.', 'no_credentials');
|
|
31
|
+
}
|
|
32
|
+
const expiresAt = cred.tokenExpiresAt ? new Date(cred.tokenExpiresAt).getTime() : Number.POSITIVE_INFINITY;
|
|
33
|
+
if (expiresAt <= Date.now()) {
|
|
34
|
+
throw new TeamsError('Token has expired. Run "auth login" or "auth extract" to refresh.', 'token_expired');
|
|
35
|
+
}
|
|
36
|
+
this.cache.set('skype', { accessToken: cred.token, expiresAt, aud: 'skype' });
|
|
37
|
+
return cred.token;
|
|
38
|
+
}
|
|
39
|
+
async getSubstrateToken() {
|
|
40
|
+
return this.getBearerToken('substrate');
|
|
41
|
+
}
|
|
42
|
+
async getGraphToken() {
|
|
43
|
+
return this.getBearerToken('graph');
|
|
44
|
+
}
|
|
45
|
+
async getTenantId() {
|
|
46
|
+
await this.ensureIdentity();
|
|
47
|
+
if (!this.tenantId) {
|
|
48
|
+
throw new TeamsError('Microsoft token did not include a tenant id needed for Teams search.', 'aad_identity_missing');
|
|
49
|
+
}
|
|
50
|
+
return this.tenantId;
|
|
51
|
+
}
|
|
52
|
+
async getUserId() {
|
|
53
|
+
await this.ensureIdentity();
|
|
54
|
+
if (!this.userId) {
|
|
55
|
+
throw new TeamsError('Microsoft token did not include a user id needed for Teams search.', 'aad_identity_missing');
|
|
56
|
+
}
|
|
57
|
+
return this.userId;
|
|
58
|
+
}
|
|
59
|
+
getCached(key) {
|
|
60
|
+
const cached = this.cache.get(key);
|
|
61
|
+
if (!cached)
|
|
62
|
+
return undefined;
|
|
63
|
+
return cached.expiresAt - Date.now() > REFRESH_BUFFER_MS ? cached : undefined;
|
|
64
|
+
}
|
|
65
|
+
async getBearerToken(audience) {
|
|
66
|
+
const current = await this.getCurrentAccount();
|
|
67
|
+
this.resetIdentityIfAccountChanged(current.accountType);
|
|
68
|
+
const cacheKey = `${current.accountType}:${audience}`;
|
|
69
|
+
const cached = this.getCached(cacheKey);
|
|
70
|
+
if (cached) {
|
|
71
|
+
// a cache hit after an account switch reset our identity, so restore the
|
|
72
|
+
// tenant/user claims captured when this token was minted
|
|
73
|
+
this.tenantId = cached.tenantId ?? this.tenantId;
|
|
74
|
+
this.userId = cached.userId ?? this.userId;
|
|
75
|
+
return cached.accessToken;
|
|
76
|
+
}
|
|
77
|
+
if (!current.account.aad_refresh_token) {
|
|
78
|
+
throw new TeamsAuthCapabilityError();
|
|
79
|
+
}
|
|
80
|
+
const clientId = current.account.aad_client_id ?? getTeamsAppClientId(current.accountType).clientId;
|
|
81
|
+
const config = BEARER_AUDIENCES[audience];
|
|
82
|
+
const token = await this.refreshBearerToken({
|
|
83
|
+
accountType: current.accountType,
|
|
84
|
+
clientId,
|
|
85
|
+
refreshToken: current.account.aad_refresh_token,
|
|
86
|
+
audience,
|
|
87
|
+
config,
|
|
88
|
+
});
|
|
89
|
+
this.cache.set(cacheKey, token);
|
|
90
|
+
return token.accessToken;
|
|
91
|
+
}
|
|
92
|
+
async refreshBearerToken(params) {
|
|
93
|
+
const response = await fetch(tokenUrlForAccount(params.accountType), {
|
|
94
|
+
method: 'POST',
|
|
95
|
+
headers: {
|
|
96
|
+
'Content-Type': 'application/x-www-form-urlencoded',
|
|
97
|
+
Origin: TEAMS_WEB_ORIGIN,
|
|
98
|
+
},
|
|
99
|
+
body: new URLSearchParams({
|
|
100
|
+
grant_type: 'refresh_token',
|
|
101
|
+
client_id: params.clientId,
|
|
102
|
+
refresh_token: params.refreshToken,
|
|
103
|
+
scope: params.config.scope,
|
|
104
|
+
}),
|
|
105
|
+
});
|
|
106
|
+
const body = (await response.json().catch(() => ({})));
|
|
107
|
+
if (!response.ok) {
|
|
108
|
+
throw new TeamsError(`Microsoft token refresh failed: ${describeAadError(body, response.status)}`, 'aad_refresh_failed');
|
|
109
|
+
}
|
|
110
|
+
const accessToken = stringField(body, 'access_token');
|
|
111
|
+
if (!accessToken) {
|
|
112
|
+
throw new TeamsError('Microsoft token refresh response did not include an access token.', 'aad_access_missing');
|
|
113
|
+
}
|
|
114
|
+
const claims = decodeJwt(accessToken);
|
|
115
|
+
if (claims.aud !== params.config.aud) {
|
|
116
|
+
throw new TeamsError(`Microsoft token audience mismatch: expected ${params.config.aud}, got ${claims.aud ?? 'missing'}.`, 'aad_audience_mismatch');
|
|
117
|
+
}
|
|
118
|
+
this.tenantId = claims.tid ?? this.tenantId;
|
|
119
|
+
this.userId = claims.oid ?? this.userId;
|
|
120
|
+
const rotatedRefreshToken = stringField(body, 'refresh_token');
|
|
121
|
+
if (rotatedRefreshToken) {
|
|
122
|
+
await this.credManager.updateAadRefreshToken(params.accountType, rotatedRefreshToken, params.clientId);
|
|
123
|
+
}
|
|
124
|
+
const expiresIn = numberField(body, 'expires_in') ?? DEFAULT_ACCESS_TOKEN_TTL_SEC;
|
|
125
|
+
return {
|
|
126
|
+
accessToken,
|
|
127
|
+
expiresAt: Date.now() + expiresIn * 1000,
|
|
128
|
+
aud: params.config.aud,
|
|
129
|
+
tenantId: claims.tid,
|
|
130
|
+
userId: claims.oid,
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
async getCurrentAccount() {
|
|
134
|
+
const config = await this.credManager.loadConfig();
|
|
135
|
+
if (!config) {
|
|
136
|
+
throw new TeamsError('No Teams credentials found. Run `agent-teams auth login` or `agent-teams auth extract`.', 'no_credentials');
|
|
137
|
+
}
|
|
138
|
+
const accountKey = this.boundAccountType ?? TeamsCredentialManager.accountOverride ?? config.current_account;
|
|
139
|
+
if (accountKey !== 'work' && accountKey !== 'personal') {
|
|
140
|
+
throw new TeamsError('No active Teams account selected. Run `agent-teams auth switch-account`.', 'no_current_account');
|
|
141
|
+
}
|
|
142
|
+
const account = config.accounts[accountKey];
|
|
143
|
+
if (!account) {
|
|
144
|
+
throw new TeamsError('No active Teams account selected. Run `agent-teams auth switch-account`.', 'no_current_account');
|
|
145
|
+
}
|
|
146
|
+
return { accountType: accountKey, account };
|
|
147
|
+
}
|
|
148
|
+
resetIdentityIfAccountChanged(accountType) {
|
|
149
|
+
if (this.lastAccountType === accountType)
|
|
150
|
+
return;
|
|
151
|
+
this.tenantId = undefined;
|
|
152
|
+
this.userId = undefined;
|
|
153
|
+
this.lastAccountType = accountType;
|
|
154
|
+
}
|
|
155
|
+
async ensureIdentity() {
|
|
156
|
+
if (this.tenantId && this.userId)
|
|
157
|
+
return;
|
|
158
|
+
await this.getSubstrateToken();
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
function tokenUrlForAccount(accountType) {
|
|
162
|
+
return accountType === 'personal' ? consumerTokenUrl() : organizationsTokenUrl();
|
|
163
|
+
}
|
|
164
|
+
function decodeJwt(token) {
|
|
165
|
+
const payload = token.split('.')[1];
|
|
166
|
+
if (!payload) {
|
|
167
|
+
throw new TeamsError('Microsoft token response was not a JWT.', 'aad_token_invalid');
|
|
168
|
+
}
|
|
169
|
+
const decoded = JSON.parse(Buffer.from(payload, 'base64url').toString('utf8'));
|
|
170
|
+
return {
|
|
171
|
+
...decoded,
|
|
172
|
+
aud: typeof decoded.aud === 'string' ? decoded.aud : undefined,
|
|
173
|
+
tid: typeof decoded.tid === 'string' ? decoded.tid : undefined,
|
|
174
|
+
oid: typeof decoded.oid === 'string' ? decoded.oid : undefined,
|
|
175
|
+
exp: typeof decoded.exp === 'number' ? decoded.exp : undefined,
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
function stringField(record, key) {
|
|
179
|
+
const value = record[key];
|
|
180
|
+
return typeof value === 'string' ? value : undefined;
|
|
181
|
+
}
|
|
182
|
+
function numberField(record, key) {
|
|
183
|
+
const value = record[key];
|
|
184
|
+
return typeof value === 'number' ? value : undefined;
|
|
185
|
+
}
|
|
186
|
+
function describeAadError(body, status) {
|
|
187
|
+
const desc = body.error_description ?? body.error;
|
|
188
|
+
return typeof desc === 'string' ? desc.split('\n')[0] : `HTTP ${status}`;
|
|
189
|
+
}
|
|
190
|
+
//# sourceMappingURL=token-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-provider.js","sourceRoot":"","sources":["../../../../src/platforms/teams/token-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { TeamsAccountType } from './types.js';
|
|
2
|
+
export interface TrouterConnectParams {
|
|
3
|
+
[key: string]: string;
|
|
4
|
+
}
|
|
5
|
+
export interface TrouterInfo {
|
|
6
|
+
socketio: string;
|
|
7
|
+
surl: string;
|
|
8
|
+
connectparams: TrouterConnectParams;
|
|
9
|
+
ccid?: string;
|
|
10
|
+
}
|
|
11
|
+
export interface TrouterRequestFrame {
|
|
12
|
+
id: number;
|
|
13
|
+
url?: string;
|
|
14
|
+
headers?: Record<string, string>;
|
|
15
|
+
body?: string;
|
|
16
|
+
}
|
|
17
|
+
export declare function buildTrouterQuery(info: TrouterInfo, endpointId: string): string;
|
|
18
|
+
export declare function fetchTrouterInfo(skypeToken: string, endpointId: string): Promise<TrouterInfo>;
|
|
19
|
+
export declare function fetchTrouterSessionId(info: TrouterInfo, skypeToken: string, endpointId: string): Promise<string>;
|
|
20
|
+
export declare function buildWebSocketUrl(info: TrouterInfo, sessionId: string, endpointId: string): string;
|
|
21
|
+
export declare function buildAuthenticateFrame(info: TrouterInfo, idToken: string): string;
|
|
22
|
+
export declare function buildActivityFrame(sequence: number): string;
|
|
23
|
+
export declare function buildPingFrame(sequence: number): string;
|
|
24
|
+
export declare function buildRequestAck(requestId: number): string;
|
|
25
|
+
export declare function buildEventAck(frame: string): string | null;
|
|
26
|
+
export declare function registerEndpoint(info: TrouterInfo, skypeToken: string, idToken: string, endpointId: string, accountType: TeamsAccountType, makeId: () => string): Promise<void>;
|
|
27
|
+
export declare function parseRequestFrame(frame: string): TrouterRequestFrame | null;
|
|
28
|
+
export declare function isMessageLossFrame(frame: string): boolean;
|
|
29
|
+
export declare function decodeMessageBody(headers: Record<string, string>, body: string): Record<string, unknown>;
|
|
30
|
+
export declare function extractChatId(link: string | undefined): string | null;
|
|
31
|
+
//# sourceMappingURL=trouter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trouter.d.ts","sourceRoot":"","sources":["../../../../src/platforms/teams/trouter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAkB/C,MAAM,WAAW,oBAAoB;IACnC,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,aAAa,EAAE,oBAAoB,CAAA;IACnC,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAA;IACV,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAoBD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAW/E;AAED,wBAAsB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CASnG;AAED,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,WAAW,EACjB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,CAAC,CAQjB;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAElG;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAejF;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEvD;AAKD,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEzD;AAID,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG1D;AAED,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,WAAW,EACjB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,gBAAgB,EAC7B,MAAM,EAAE,MAAM,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC,CAmCf;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,mBAAmB,GAAG,IAAI,CAW3E;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAUzD;AAID,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAaxG;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAIrE"}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import { gunzipSync } from 'node:zlib';
|
|
2
|
+
// Trouter is Teams' internal real-time notification service. Protocol shape was
|
|
3
|
+
// reverse-engineered from the Teams web client and cross-checked against the
|
|
4
|
+
// open-source purple-teams and eisbaw/ost implementations. It speaks socket.io
|
|
5
|
+
// v1 (colon-prefixed frames) over a WebSocket, NOT engine.io.
|
|
6
|
+
const TROUTER_BOOTSTRAP_URL = 'https://go.trouter.teams.microsoft.com/v4/a';
|
|
7
|
+
// Personal/TFL accounts register against edge.skype.com; work accounts use
|
|
8
|
+
// teams.microsoft.com.
|
|
9
|
+
const REGISTRAR_URL_PERSONAL = 'https://edge.skype.com/registrar/prod/v2/registrations';
|
|
10
|
+
const REGISTRAR_URL_WORK = 'https://teams.microsoft.com/registrar/prod/V2/registrations';
|
|
11
|
+
const CLIENTINFO_VERSION = '27/1.0.0.2024101502';
|
|
12
|
+
const TC = JSON.stringify({ cv: '2024.04.01.1', ua: 'TeamsCDL', hr: '', v: CLIENTINFO_VERSION });
|
|
13
|
+
const USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Electron/35.3.0';
|
|
14
|
+
const REGISTRATION_TTL_SECONDS = 86400;
|
|
15
|
+
const REGISTRATION_SPECS = [
|
|
16
|
+
{
|
|
17
|
+
appId: 'NextGenCalling',
|
|
18
|
+
templateKey: 'DesktopNgc_2.5:SkypeNgc',
|
|
19
|
+
pathSuffix: 'NGCallManagerWin',
|
|
20
|
+
productContext: '',
|
|
21
|
+
},
|
|
22
|
+
{ appId: 'SkypeSpacesWeb', templateKey: 'SkypeSpacesWeb_2.4', pathSuffix: 'SkypeSpacesWeb', productContext: '' },
|
|
23
|
+
{ appId: 'TeamsCDLWebWorker', templateKey: 'TeamsCDLWebWorker_2.6', pathSuffix: '', productContext: 'TFL' },
|
|
24
|
+
];
|
|
25
|
+
export function buildTrouterQuery(info, endpointId) {
|
|
26
|
+
const params = new URLSearchParams();
|
|
27
|
+
params.set('v', 'v4');
|
|
28
|
+
for (const [key, value] of Object.entries(info.connectparams))
|
|
29
|
+
params.set(key, value);
|
|
30
|
+
params.set('tc', TC);
|
|
31
|
+
params.set('timeout', '40');
|
|
32
|
+
params.set('auth', 'true');
|
|
33
|
+
params.set('epid', endpointId);
|
|
34
|
+
if (info.ccid)
|
|
35
|
+
params.set('ccid', info.ccid);
|
|
36
|
+
params.set('con_num', `${Date.now()}_1`);
|
|
37
|
+
return params.toString();
|
|
38
|
+
}
|
|
39
|
+
export async function fetchTrouterInfo(skypeToken, endpointId) {
|
|
40
|
+
const response = await fetch(`${TROUTER_BOOTSTRAP_URL}?epid=${encodeURIComponent(endpointId)}`, {
|
|
41
|
+
method: 'POST',
|
|
42
|
+
headers: { 'x-skypetoken': skypeToken, 'Content-Length': '0', 'User-Agent': USER_AGENT },
|
|
43
|
+
});
|
|
44
|
+
if (!response.ok) {
|
|
45
|
+
throw new Error(`Trouter bootstrap failed: ${response.status} ${response.statusText}`);
|
|
46
|
+
}
|
|
47
|
+
return (await response.json());
|
|
48
|
+
}
|
|
49
|
+
export async function fetchTrouterSessionId(info, skypeToken, endpointId) {
|
|
50
|
+
const url = `${info.socketio}socket.io/1/?${buildTrouterQuery(info, endpointId)}`;
|
|
51
|
+
const response = await fetch(url, { headers: { 'X-Skypetoken': skypeToken, 'User-Agent': USER_AGENT } });
|
|
52
|
+
if (!response.ok) {
|
|
53
|
+
throw new Error(`Trouter handshake failed: ${response.status} ${response.statusText}`);
|
|
54
|
+
}
|
|
55
|
+
const body = await response.text();
|
|
56
|
+
return body.split(':')[0];
|
|
57
|
+
}
|
|
58
|
+
export function buildWebSocketUrl(info, sessionId, endpointId) {
|
|
59
|
+
return `${info.socketio}socket.io/1/websocket/${sessionId}?${buildTrouterQuery(info, endpointId)}`;
|
|
60
|
+
}
|
|
61
|
+
export function buildAuthenticateFrame(info, idToken) {
|
|
62
|
+
const message = {
|
|
63
|
+
name: 'user.authenticate',
|
|
64
|
+
args: [
|
|
65
|
+
{
|
|
66
|
+
headers: {
|
|
67
|
+
'X-Ms-Test-User': 'False',
|
|
68
|
+
Authorization: `Bearer ${idToken}`,
|
|
69
|
+
'X-MS-Migration': 'True',
|
|
70
|
+
},
|
|
71
|
+
connectparams: info.connectparams,
|
|
72
|
+
},
|
|
73
|
+
],
|
|
74
|
+
};
|
|
75
|
+
return `5:::${JSON.stringify(message)}`;
|
|
76
|
+
}
|
|
77
|
+
export function buildActivityFrame(sequence) {
|
|
78
|
+
return `5:${sequence}::{"name":"user.activity","args":[{"state":"active"}]}`;
|
|
79
|
+
}
|
|
80
|
+
export function buildPingFrame(sequence) {
|
|
81
|
+
return `5:${sequence}::{"name":"ping"}`;
|
|
82
|
+
}
|
|
83
|
+
// Trouter delivers messages as socket.io "3:::" data frames, which require an
|
|
84
|
+
// HTTP-style 200 acknowledgement or the server marks the endpoint unresponsive
|
|
85
|
+
// and stops routing.
|
|
86
|
+
export function buildRequestAck(requestId) {
|
|
87
|
+
return `3:::${JSON.stringify({ id: requestId, status: 200, body: '' })}`;
|
|
88
|
+
}
|
|
89
|
+
// Server "5:<id>+::" event frames must be acked with "6:<id>::" or trouter
|
|
90
|
+
// eventually drops the connection.
|
|
91
|
+
export function buildEventAck(frame) {
|
|
92
|
+
const match = frame.match(/^5:(\d+)\+?::/);
|
|
93
|
+
return match ? `6:${match[1]}::` : null;
|
|
94
|
+
}
|
|
95
|
+
export async function registerEndpoint(info, skypeToken, idToken, endpointId, accountType, makeId) {
|
|
96
|
+
const registrarUrl = accountType === 'personal' ? REGISTRAR_URL_PERSONAL : REGISTRAR_URL_WORK;
|
|
97
|
+
for (const spec of REGISTRATION_SPECS) {
|
|
98
|
+
// The messaging worker must reuse the endpoint id; call apps get fresh ids.
|
|
99
|
+
const registrationId = spec.appId === 'TeamsCDLWebWorker' ? endpointId : makeId();
|
|
100
|
+
const payload = {
|
|
101
|
+
clientDescription: {
|
|
102
|
+
appId: spec.appId,
|
|
103
|
+
aesKey: '',
|
|
104
|
+
languageId: 'en-US',
|
|
105
|
+
platform: 'edge',
|
|
106
|
+
templateKey: spec.templateKey,
|
|
107
|
+
platformUIVersion: CLIENTINFO_VERSION,
|
|
108
|
+
productContext: accountType === 'personal' ? spec.productContext : '',
|
|
109
|
+
},
|
|
110
|
+
registrationId,
|
|
111
|
+
nodeId: '',
|
|
112
|
+
transports: { TROUTER: [{ context: '', path: `${info.surl}${spec.pathSuffix}`, ttl: REGISTRATION_TTL_SECONDS }] },
|
|
113
|
+
};
|
|
114
|
+
const response = await fetch(registrarUrl, {
|
|
115
|
+
method: 'POST',
|
|
116
|
+
headers: {
|
|
117
|
+
'Content-Type': 'application/json',
|
|
118
|
+
'X-Skypetoken': skypeToken,
|
|
119
|
+
Authorization: `Bearer ${idToken}`,
|
|
120
|
+
'User-Agent': USER_AGENT,
|
|
121
|
+
},
|
|
122
|
+
body: JSON.stringify(payload),
|
|
123
|
+
});
|
|
124
|
+
if (!response.ok) {
|
|
125
|
+
throw new Error(`Trouter registration for ${spec.appId} failed: ${response.status}`);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
export function parseRequestFrame(frame) {
|
|
130
|
+
if (!frame.startsWith('3:::'))
|
|
131
|
+
return null;
|
|
132
|
+
try {
|
|
133
|
+
const parsed = JSON.parse(frame.slice(4));
|
|
134
|
+
if (typeof parsed !== 'object' || parsed === null)
|
|
135
|
+
return null;
|
|
136
|
+
const { id } = parsed;
|
|
137
|
+
if (typeof id !== 'number' || !Number.isFinite(id))
|
|
138
|
+
return null;
|
|
139
|
+
return parsed;
|
|
140
|
+
}
|
|
141
|
+
catch {
|
|
142
|
+
return null;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
export function isMessageLossFrame(frame) {
|
|
146
|
+
if (!frame.startsWith('5:'))
|
|
147
|
+
return false;
|
|
148
|
+
const jsonStart = frame.indexOf('{');
|
|
149
|
+
if (jsonStart === -1)
|
|
150
|
+
return false;
|
|
151
|
+
try {
|
|
152
|
+
const payload = JSON.parse(frame.slice(jsonStart));
|
|
153
|
+
return payload.name === 'trouter.message_loss';
|
|
154
|
+
}
|
|
155
|
+
catch {
|
|
156
|
+
return false;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
// Trouter message bodies may be gzip+base64 encoded, and nest a further encoded
|
|
160
|
+
// payload under `cp` (gzip+base64) or `gp` (base64).
|
|
161
|
+
export function decodeMessageBody(headers, body) {
|
|
162
|
+
let raw = body;
|
|
163
|
+
if (headers['X-Microsoft-Skype-Content-Encoding'] === 'gzip') {
|
|
164
|
+
raw = gunzipSync(Buffer.from(body, 'base64')).toString('utf8');
|
|
165
|
+
}
|
|
166
|
+
const obj = JSON.parse(raw);
|
|
167
|
+
if (typeof obj.cp === 'string') {
|
|
168
|
+
return JSON.parse(gunzipSync(Buffer.from(obj.cp, 'base64')).toString('utf8'));
|
|
169
|
+
}
|
|
170
|
+
if (typeof obj.gp === 'string') {
|
|
171
|
+
return JSON.parse(Buffer.from(obj.gp, 'base64').toString('utf8'));
|
|
172
|
+
}
|
|
173
|
+
return obj;
|
|
174
|
+
}
|
|
175
|
+
export function extractChatId(link) {
|
|
176
|
+
if (!link)
|
|
177
|
+
return null;
|
|
178
|
+
const match = link.match(/conversations\/([^/]+)/);
|
|
179
|
+
return match ? decodeURIComponent(match[1]) : null;
|
|
180
|
+
}
|
|
181
|
+
//# sourceMappingURL=trouter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trouter.js","sourceRoot":"","sources":["../../../../src/platforms/teams/trouter.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,6 +22,23 @@ export interface TeamsMessage {
|
|
|
22
22
|
};
|
|
23
23
|
content: string;
|
|
24
24
|
timestamp: string;
|
|
25
|
+
root_message_id?: string;
|
|
26
|
+
parent_message_id?: string;
|
|
27
|
+
is_thread_reply?: boolean;
|
|
28
|
+
}
|
|
29
|
+
export interface TeamsSearchResult {
|
|
30
|
+
id: string;
|
|
31
|
+
content: string;
|
|
32
|
+
author: {
|
|
33
|
+
id: string;
|
|
34
|
+
displayName: string;
|
|
35
|
+
};
|
|
36
|
+
channel_id: string;
|
|
37
|
+
thread_id?: string;
|
|
38
|
+
team_name?: string;
|
|
39
|
+
channel_name?: string;
|
|
40
|
+
timestamp: string;
|
|
41
|
+
permalink?: string;
|
|
25
42
|
}
|
|
26
43
|
export interface TeamsUser {
|
|
27
44
|
id: string;
|
|
@@ -47,6 +64,8 @@ export interface TeamsFile {
|
|
|
47
64
|
size: number;
|
|
48
65
|
url: string;
|
|
49
66
|
contentType?: string;
|
|
67
|
+
sharepoint_url?: string;
|
|
68
|
+
object_url?: string;
|
|
50
69
|
}
|
|
51
70
|
export interface TeamsCredentials {
|
|
52
71
|
token: string;
|
|
@@ -54,6 +73,7 @@ export interface TeamsCredentials {
|
|
|
54
73
|
}
|
|
55
74
|
export type TeamsAccountType = 'work' | 'personal';
|
|
56
75
|
export type TeamsRegion = 'amer' | 'emea' | 'apac';
|
|
76
|
+
export type TeamsAuthMethod = 'device-code' | 'browser' | 'extracted' | 'manual';
|
|
57
77
|
export interface TeamsAccount {
|
|
58
78
|
token: string;
|
|
59
79
|
token_expires_at?: string;
|
|
@@ -65,6 +85,10 @@ export interface TeamsAccount {
|
|
|
65
85
|
team_id: string;
|
|
66
86
|
team_name: string;
|
|
67
87
|
}>;
|
|
88
|
+
auth_method?: TeamsAuthMethod;
|
|
89
|
+
aad_refresh_token?: string;
|
|
90
|
+
aad_client_id?: string;
|
|
91
|
+
aad_tenant_id?: string;
|
|
68
92
|
}
|
|
69
93
|
export interface TeamsConfig {
|
|
70
94
|
current_account: string | null;
|
|
@@ -100,6 +124,23 @@ export declare const TeamsMessageSchema: z.ZodObject<{
|
|
|
100
124
|
}, z.core.$strip>;
|
|
101
125
|
content: z.ZodString;
|
|
102
126
|
timestamp: z.ZodString;
|
|
127
|
+
root_message_id: z.ZodOptional<z.ZodString>;
|
|
128
|
+
parent_message_id: z.ZodOptional<z.ZodString>;
|
|
129
|
+
is_thread_reply: z.ZodOptional<z.ZodBoolean>;
|
|
130
|
+
}, z.core.$strip>;
|
|
131
|
+
export declare const TeamsSearchResultSchema: z.ZodObject<{
|
|
132
|
+
id: z.ZodString;
|
|
133
|
+
content: z.ZodString;
|
|
134
|
+
author: z.ZodObject<{
|
|
135
|
+
id: z.ZodString;
|
|
136
|
+
displayName: z.ZodString;
|
|
137
|
+
}, z.core.$strip>;
|
|
138
|
+
channel_id: z.ZodString;
|
|
139
|
+
thread_id: z.ZodOptional<z.ZodString>;
|
|
140
|
+
team_name: z.ZodOptional<z.ZodString>;
|
|
141
|
+
channel_name: z.ZodOptional<z.ZodString>;
|
|
142
|
+
timestamp: z.ZodString;
|
|
143
|
+
permalink: z.ZodOptional<z.ZodString>;
|
|
103
144
|
}, z.core.$strip>;
|
|
104
145
|
export declare const TeamsUserSchema: z.ZodObject<{
|
|
105
146
|
id: z.ZodString;
|
|
@@ -133,6 +174,8 @@ export declare const TeamsFileSchema: z.ZodObject<{
|
|
|
133
174
|
size: z.ZodNumber;
|
|
134
175
|
url: z.ZodString;
|
|
135
176
|
contentType: z.ZodOptional<z.ZodString>;
|
|
177
|
+
sharepoint_url: z.ZodOptional<z.ZodString>;
|
|
178
|
+
object_url: z.ZodOptional<z.ZodString>;
|
|
136
179
|
}, z.core.$strip>;
|
|
137
180
|
export declare const TeamsCredentialsSchema: z.ZodObject<{
|
|
138
181
|
token: z.ZodString;
|
|
@@ -147,6 +190,12 @@ export declare const TeamsRegionSchema: z.ZodEnum<{
|
|
|
147
190
|
emea: "emea";
|
|
148
191
|
apac: "apac";
|
|
149
192
|
}>;
|
|
193
|
+
export declare const TeamsAuthMethodSchema: z.ZodEnum<{
|
|
194
|
+
manual: "manual";
|
|
195
|
+
"device-code": "device-code";
|
|
196
|
+
browser: "browser";
|
|
197
|
+
extracted: "extracted";
|
|
198
|
+
}>;
|
|
150
199
|
export declare const TeamsAccountSchema: z.ZodObject<{
|
|
151
200
|
token: z.ZodString;
|
|
152
201
|
token_expires_at: z.ZodOptional<z.ZodString>;
|
|
@@ -165,6 +214,15 @@ export declare const TeamsAccountSchema: z.ZodObject<{
|
|
|
165
214
|
team_id: z.ZodString;
|
|
166
215
|
team_name: z.ZodString;
|
|
167
216
|
}, z.core.$strip>>;
|
|
217
|
+
auth_method: z.ZodOptional<z.ZodEnum<{
|
|
218
|
+
manual: "manual";
|
|
219
|
+
"device-code": "device-code";
|
|
220
|
+
browser: "browser";
|
|
221
|
+
extracted: "extracted";
|
|
222
|
+
}>>;
|
|
223
|
+
aad_refresh_token: z.ZodOptional<z.ZodString>;
|
|
224
|
+
aad_client_id: z.ZodOptional<z.ZodString>;
|
|
225
|
+
aad_tenant_id: z.ZodOptional<z.ZodString>;
|
|
168
226
|
}, z.core.$strip>;
|
|
169
227
|
export declare const TeamsConfigSchema: z.ZodObject<{
|
|
170
228
|
current_account: z.ZodNullable<z.ZodString>;
|
|
@@ -186,6 +244,15 @@ export declare const TeamsConfigSchema: z.ZodObject<{
|
|
|
186
244
|
team_id: z.ZodString;
|
|
187
245
|
team_name: z.ZodString;
|
|
188
246
|
}, z.core.$strip>>;
|
|
247
|
+
auth_method: z.ZodOptional<z.ZodEnum<{
|
|
248
|
+
manual: "manual";
|
|
249
|
+
"device-code": "device-code";
|
|
250
|
+
browser: "browser";
|
|
251
|
+
extracted: "extracted";
|
|
252
|
+
}>>;
|
|
253
|
+
aad_refresh_token: z.ZodOptional<z.ZodString>;
|
|
254
|
+
aad_client_id: z.ZodOptional<z.ZodString>;
|
|
255
|
+
aad_tenant_id: z.ZodOptional<z.ZodString>;
|
|
189
256
|
}, z.core.$strip>>;
|
|
190
257
|
}, z.core.$strip>;
|
|
191
258
|
export declare const TeamsConfigLegacySchema: z.ZodObject<{
|
|
@@ -197,8 +264,35 @@ export declare const TeamsConfigLegacySchema: z.ZodObject<{
|
|
|
197
264
|
team_name: z.ZodString;
|
|
198
265
|
}, z.core.$strip>>;
|
|
199
266
|
}, z.core.$strip>;
|
|
267
|
+
export interface TeamsRealtimeMessage {
|
|
268
|
+
id: string;
|
|
269
|
+
chatId: string;
|
|
270
|
+
content: string;
|
|
271
|
+
author: {
|
|
272
|
+
id: string;
|
|
273
|
+
displayName: string;
|
|
274
|
+
};
|
|
275
|
+
messageType: string;
|
|
276
|
+
timestamp: string;
|
|
277
|
+
}
|
|
278
|
+
export interface TeamsTrouterGenericEvent {
|
|
279
|
+
resourceType: string;
|
|
280
|
+
[key: string]: unknown;
|
|
281
|
+
}
|
|
282
|
+
export interface TeamsListenerEventMap {
|
|
283
|
+
message: [message: TeamsRealtimeMessage];
|
|
284
|
+
teams_event: [event: TeamsTrouterGenericEvent];
|
|
285
|
+
connected: [info: {
|
|
286
|
+
endpointId: string;
|
|
287
|
+
}];
|
|
288
|
+
disconnected: [];
|
|
289
|
+
error: [error: Error];
|
|
290
|
+
}
|
|
200
291
|
export declare class TeamsError extends Error {
|
|
201
292
|
code: string;
|
|
202
293
|
constructor(message: string, code: string);
|
|
203
294
|
}
|
|
295
|
+
export declare class TeamsAuthCapabilityError extends Error {
|
|
296
|
+
constructor();
|
|
297
|
+
}
|
|
204
298
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/platforms/teams/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAA;IACV,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAA;IACV,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE;QACN,EAAE,EAAE,MAAM,CAAA;QACV,WAAW,EAAE,MAAM,CAAA;KACpB,CAAA;IACD,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/platforms/teams/types.ts"],"names":[],"mappings":"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"}
|