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.
Files changed (316) hide show
  1. package/.claude-plugin/README.md +11 -1
  2. package/.claude-plugin/marketplace.json +14 -1
  3. package/.claude-plugin/plugin.json +4 -2
  4. package/AGENTS.md +4 -0
  5. package/README.md +58 -10
  6. package/dist/package.json +10 -2
  7. package/dist/src/cli.d.ts.map +1 -1
  8. package/dist/src/cli.js +3 -0
  9. package/dist/src/cli.js.map +1 -1
  10. package/dist/src/platforms/discord/client.d.ts +6 -2
  11. package/dist/src/platforms/discord/client.d.ts.map +1 -1
  12. package/dist/src/platforms/discord/client.js +10 -3
  13. package/dist/src/platforms/discord/client.js.map +1 -1
  14. package/dist/src/platforms/discordbot/cli.js +1 -1
  15. package/dist/src/platforms/imessage/cli.d.ts +5 -0
  16. package/dist/src/platforms/imessage/cli.d.ts.map +1 -0
  17. package/dist/src/platforms/imessage/cli.js +31 -0
  18. package/dist/src/platforms/imessage/cli.js.map +1 -0
  19. package/dist/src/platforms/imessage/client.d.ts +43 -0
  20. package/dist/src/platforms/imessage/client.d.ts.map +1 -0
  21. package/dist/src/platforms/imessage/client.js +190 -0
  22. package/dist/src/platforms/imessage/client.js.map +1 -0
  23. package/dist/src/platforms/imessage/commands/auth.d.ts +31 -0
  24. package/dist/src/platforms/imessage/commands/auth.d.ts.map +1 -0
  25. package/dist/src/platforms/imessage/commands/auth.js +100 -0
  26. package/dist/src/platforms/imessage/commands/auth.js.map +1 -0
  27. package/dist/src/platforms/imessage/commands/chat.d.ts +3 -0
  28. package/dist/src/platforms/imessage/commands/chat.d.ts.map +1 -0
  29. package/dist/src/platforms/imessage/commands/chat.js +42 -0
  30. package/dist/src/platforms/imessage/commands/chat.js.map +1 -0
  31. package/dist/src/platforms/imessage/commands/doctor.d.ts +25 -0
  32. package/dist/src/platforms/imessage/commands/doctor.d.ts.map +1 -0
  33. package/dist/src/platforms/imessage/commands/doctor.js +101 -0
  34. package/dist/src/platforms/imessage/commands/doctor.js.map +1 -0
  35. package/dist/src/platforms/imessage/commands/index.d.ts +7 -0
  36. package/dist/src/platforms/imessage/commands/index.d.ts.map +1 -0
  37. package/dist/src/platforms/imessage/commands/index.js +7 -0
  38. package/dist/src/platforms/imessage/commands/index.js.map +1 -0
  39. package/dist/src/platforms/imessage/commands/message.d.ts +5 -0
  40. package/dist/src/platforms/imessage/commands/message.d.ts.map +1 -0
  41. package/dist/src/platforms/imessage/commands/message.js +127 -0
  42. package/dist/src/platforms/imessage/commands/message.js.map +1 -0
  43. package/dist/src/platforms/imessage/commands/setup.d.ts +20 -0
  44. package/dist/src/platforms/imessage/commands/setup.d.ts.map +1 -0
  45. package/dist/src/platforms/imessage/commands/setup.js +57 -0
  46. package/dist/src/platforms/imessage/commands/setup.js.map +1 -0
  47. package/dist/src/platforms/imessage/commands/shared.d.ts +10 -0
  48. package/dist/src/platforms/imessage/commands/shared.d.ts.map +1 -0
  49. package/dist/src/platforms/imessage/commands/shared.js +53 -0
  50. package/dist/src/platforms/imessage/commands/shared.js.map +1 -0
  51. package/dist/src/platforms/imessage/commands/whoami.d.ts +3 -0
  52. package/dist/src/platforms/imessage/commands/whoami.d.ts.map +1 -0
  53. package/dist/src/platforms/imessage/commands/whoami.js +20 -0
  54. package/dist/src/platforms/imessage/commands/whoami.js.map +1 -0
  55. package/dist/src/platforms/imessage/credential-manager.d.ts +22 -0
  56. package/dist/src/platforms/imessage/credential-manager.d.ts.map +1 -0
  57. package/dist/src/platforms/imessage/credential-manager.js +111 -0
  58. package/dist/src/platforms/imessage/credential-manager.js.map +1 -0
  59. package/dist/src/platforms/imessage/ensure-auth.d.ts +2 -0
  60. package/dist/src/platforms/imessage/ensure-auth.d.ts.map +1 -0
  61. package/dist/src/platforms/imessage/ensure-auth.js +13 -0
  62. package/dist/src/platforms/imessage/ensure-auth.js.map +1 -0
  63. package/dist/src/platforms/imessage/errors.d.ts +3 -0
  64. package/dist/src/platforms/imessage/errors.d.ts.map +1 -0
  65. package/dist/src/platforms/imessage/errors.js +25 -0
  66. package/dist/src/platforms/imessage/errors.js.map +1 -0
  67. package/dist/src/platforms/imessage/index.d.ts +7 -0
  68. package/dist/src/platforms/imessage/index.d.ts.map +1 -0
  69. package/dist/src/platforms/imessage/index.js +5 -0
  70. package/dist/src/platforms/imessage/index.js.map +1 -0
  71. package/dist/src/platforms/imessage/rpc.d.ts +20 -0
  72. package/dist/src/platforms/imessage/rpc.d.ts.map +1 -0
  73. package/dist/src/platforms/imessage/rpc.js +133 -0
  74. package/dist/src/platforms/imessage/rpc.js.map +1 -0
  75. package/dist/src/platforms/imessage/types.d.ts +59 -0
  76. package/dist/src/platforms/imessage/types.d.ts.map +1 -0
  77. package/dist/src/platforms/imessage/types.js +29 -0
  78. package/dist/src/platforms/imessage/types.js.map +1 -0
  79. package/dist/src/platforms/instagram/cli.js +1 -1
  80. package/dist/src/platforms/instagram/client.d.ts +29 -2
  81. package/dist/src/platforms/instagram/client.d.ts.map +1 -1
  82. package/dist/src/platforms/instagram/client.js +360 -53
  83. package/dist/src/platforms/instagram/client.js.map +1 -1
  84. package/dist/src/platforms/instagram/commands/auth.d.ts +1 -0
  85. package/dist/src/platforms/instagram/commands/auth.d.ts.map +1 -1
  86. package/dist/src/platforms/instagram/commands/auth.js +123 -11
  87. package/dist/src/platforms/instagram/commands/auth.js.map +1 -1
  88. package/dist/src/platforms/instagram/credential-manager.d.ts +4 -1
  89. package/dist/src/platforms/instagram/credential-manager.d.ts.map +1 -1
  90. package/dist/src/platforms/instagram/credential-manager.js +17 -1
  91. package/dist/src/platforms/instagram/credential-manager.js.map +1 -1
  92. package/dist/src/platforms/instagram/hybrid-listener.d.ts +48 -0
  93. package/dist/src/platforms/instagram/hybrid-listener.d.ts.map +1 -0
  94. package/dist/src/platforms/instagram/hybrid-listener.js +154 -0
  95. package/dist/src/platforms/instagram/hybrid-listener.js.map +1 -0
  96. package/dist/src/platforms/instagram/index.d.ts +2 -0
  97. package/dist/src/platforms/instagram/index.d.ts.map +1 -1
  98. package/dist/src/platforms/instagram/index.js +2 -0
  99. package/dist/src/platforms/instagram/index.js.map +1 -1
  100. package/dist/src/platforms/instagram/mqtt/connection.d.ts +4 -0
  101. package/dist/src/platforms/instagram/mqtt/connection.d.ts.map +1 -0
  102. package/dist/src/platforms/instagram/mqtt/connection.js +66 -0
  103. package/dist/src/platforms/instagram/mqtt/connection.js.map +1 -0
  104. package/dist/src/platforms/instagram/mqtt/thrift.d.ts +22 -0
  105. package/dist/src/platforms/instagram/mqtt/thrift.d.ts.map +1 -0
  106. package/dist/src/platforms/instagram/mqtt/thrift.js +143 -0
  107. package/dist/src/platforms/instagram/mqtt/thrift.js.map +1 -0
  108. package/dist/src/platforms/instagram/mqtt/transport.d.ts +42 -0
  109. package/dist/src/platforms/instagram/mqtt/transport.d.ts.map +1 -0
  110. package/dist/src/platforms/instagram/mqtt/transport.js +246 -0
  111. package/dist/src/platforms/instagram/mqtt/transport.js.map +1 -0
  112. package/dist/src/platforms/instagram/realtime-listener.d.ts +33 -0
  113. package/dist/src/platforms/instagram/realtime-listener.d.ts.map +1 -0
  114. package/dist/src/platforms/instagram/realtime-listener.js +151 -0
  115. package/dist/src/platforms/instagram/realtime-listener.js.map +1 -0
  116. package/dist/src/platforms/instagram/types.d.ts +10 -8
  117. package/dist/src/platforms/instagram/types.d.ts.map +1 -1
  118. package/dist/src/platforms/instagram/types.js.map +1 -1
  119. package/dist/src/platforms/kakaotalk/cli.js +1 -1
  120. package/dist/src/platforms/line/cli.js +1 -1
  121. package/dist/src/platforms/teams/app-config.d.ts +36 -0
  122. package/dist/src/platforms/teams/app-config.d.ts.map +1 -0
  123. package/dist/src/platforms/teams/app-config.js +69 -0
  124. package/dist/src/platforms/teams/app-config.js.map +1 -0
  125. package/dist/src/platforms/teams/client.d.ts +19 -2
  126. package/dist/src/platforms/teams/client.d.ts.map +1 -1
  127. package/dist/src/platforms/teams/client.js +295 -7
  128. package/dist/src/platforms/teams/client.js.map +1 -1
  129. package/dist/src/platforms/teams/commands/auth.d.ts +10 -0
  130. package/dist/src/platforms/teams/commands/auth.d.ts.map +1 -1
  131. package/dist/src/platforms/teams/commands/auth.js +137 -3
  132. package/dist/src/platforms/teams/commands/auth.js.map +1 -1
  133. package/dist/src/platforms/teams/commands/file.d.ts +3 -0
  134. package/dist/src/platforms/teams/commands/file.d.ts.map +1 -1
  135. package/dist/src/platforms/teams/commands/file.js +59 -2
  136. package/dist/src/platforms/teams/commands/file.js.map +1 -1
  137. package/dist/src/platforms/teams/commands/message.d.ts +11 -0
  138. package/dist/src/platforms/teams/commands/message.d.ts.map +1 -1
  139. package/dist/src/platforms/teams/commands/message.js +121 -2
  140. package/dist/src/platforms/teams/commands/message.js.map +1 -1
  141. package/dist/src/platforms/teams/credential-manager.d.ts +23 -1
  142. package/dist/src/platforms/teams/credential-manager.d.ts.map +1 -1
  143. package/dist/src/platforms/teams/credential-manager.js +46 -2
  144. package/dist/src/platforms/teams/credential-manager.js.map +1 -1
  145. package/dist/src/platforms/teams/device-code.d.ts +48 -0
  146. package/dist/src/platforms/teams/device-code.d.ts.map +1 -0
  147. package/dist/src/platforms/teams/device-code.js +199 -0
  148. package/dist/src/platforms/teams/device-code.js.map +1 -0
  149. package/dist/src/platforms/teams/device-login.d.ts +37 -0
  150. package/dist/src/platforms/teams/device-login.d.ts.map +1 -0
  151. package/dist/src/platforms/teams/device-login.js +129 -0
  152. package/dist/src/platforms/teams/device-login.js.map +1 -0
  153. package/dist/src/platforms/teams/ensure-auth.d.ts.map +1 -1
  154. package/dist/src/platforms/teams/ensure-auth.js +12 -0
  155. package/dist/src/platforms/teams/ensure-auth.js.map +1 -1
  156. package/dist/src/platforms/teams/index.d.ts +7 -3
  157. package/dist/src/platforms/teams/index.d.ts.map +1 -1
  158. package/dist/src/platforms/teams/index.js +5 -2
  159. package/dist/src/platforms/teams/index.js.map +1 -1
  160. package/dist/src/platforms/teams/listener.d.ts +35 -0
  161. package/dist/src/platforms/teams/listener.d.ts.map +1 -0
  162. package/dist/src/platforms/teams/listener.js +236 -0
  163. package/dist/src/platforms/teams/listener.js.map +1 -0
  164. package/dist/src/platforms/teams/realm-discovery.d.ts +3 -0
  165. package/dist/src/platforms/teams/realm-discovery.d.ts.map +1 -0
  166. package/dist/src/platforms/teams/realm-discovery.js +33 -0
  167. package/dist/src/platforms/teams/realm-discovery.js.map +1 -0
  168. package/dist/src/platforms/teams/token-extractor.d.ts +3 -0
  169. package/dist/src/platforms/teams/token-extractor.d.ts.map +1 -1
  170. package/dist/src/platforms/teams/token-extractor.js +60 -0
  171. package/dist/src/platforms/teams/token-extractor.js.map +1 -1
  172. package/dist/src/platforms/teams/token-provider.d.ts +25 -0
  173. package/dist/src/platforms/teams/token-provider.d.ts.map +1 -0
  174. package/dist/src/platforms/teams/token-provider.js +190 -0
  175. package/dist/src/platforms/teams/token-provider.js.map +1 -0
  176. package/dist/src/platforms/teams/trouter.d.ts +31 -0
  177. package/dist/src/platforms/teams/trouter.d.ts.map +1 -0
  178. package/dist/src/platforms/teams/trouter.js +181 -0
  179. package/dist/src/platforms/teams/trouter.js.map +1 -0
  180. package/dist/src/platforms/teams/types.d.ts +94 -0
  181. package/dist/src/platforms/teams/types.d.ts.map +1 -1
  182. package/dist/src/platforms/teams/types.js +30 -0
  183. package/dist/src/platforms/teams/types.js.map +1 -1
  184. package/dist/src/platforms/webex/cli.js +1 -1
  185. package/dist/src/platforms/webex/types.d.ts +1 -1
  186. package/dist/src/platforms/webexbot/cli.js +1 -1
  187. package/dist/src/platforms/wechatbot/cli.js +1 -1
  188. package/dist/src/platforms/whatsapp/cli.js +1 -1
  189. package/dist/src/platforms/whatsappbot/cli.js +1 -1
  190. package/dist/src/tui/adapters/imessage-adapter.d.ts +21 -0
  191. package/dist/src/tui/adapters/imessage-adapter.d.ts.map +1 -0
  192. package/dist/src/tui/adapters/imessage-adapter.js +110 -0
  193. package/dist/src/tui/adapters/imessage-adapter.js.map +1 -0
  194. package/dist/src/tui/adapters/instagram-adapter.d.ts.map +1 -1
  195. package/dist/src/tui/adapters/instagram-adapter.js +16 -0
  196. package/dist/src/tui/adapters/instagram-adapter.js.map +1 -1
  197. package/dist/src/tui/adapters/teams-adapter.d.ts +3 -0
  198. package/dist/src/tui/adapters/teams-adapter.d.ts.map +1 -1
  199. package/dist/src/tui/adapters/teams-adapter.js +21 -0
  200. package/dist/src/tui/adapters/teams-adapter.js.map +1 -1
  201. package/dist/src/tui/app.d.ts.map +1 -1
  202. package/dist/src/tui/app.js +12 -3
  203. package/dist/src/tui/app.js.map +1 -1
  204. package/docs/content/docs/agent-skills.mdx +1 -1
  205. package/docs/content/docs/cli/imessage.mdx +99 -0
  206. package/docs/content/docs/cli/instagram.mdx +2 -1
  207. package/docs/content/docs/cli/meta.json +1 -0
  208. package/docs/content/docs/cli/teams.mdx +22 -0
  209. package/docs/content/docs/index.mdx +9 -6
  210. package/docs/content/docs/quick-start.mdx +2 -0
  211. package/docs/content/docs/sdk/instagram.mdx +90 -5
  212. package/docs/content/docs/tui.mdx +4 -3
  213. package/package.json +10 -2
  214. package/scripts/postbuild.ts +12 -15
  215. package/skills/agent-channeltalk/SKILL.md +1 -1
  216. package/skills/agent-channeltalkbot/SKILL.md +1 -1
  217. package/skills/agent-discord/SKILL.md +1 -1
  218. package/skills/agent-discordbot/SKILL.md +1 -1
  219. package/skills/agent-imessage/SKILL.md +133 -0
  220. package/skills/agent-imessage/references/authentication.md +66 -0
  221. package/skills/agent-imessage/references/permissions.md +31 -0
  222. package/skills/agent-imessage/references/setup.md +49 -0
  223. package/skills/agent-instagram/SKILL.md +72 -2
  224. package/skills/agent-instagram/references/authentication.md +11 -0
  225. package/skills/agent-instagram/references/common-patterns.md +36 -0
  226. package/skills/agent-instagram/templates/monitor-chat.sh +5 -0
  227. package/skills/agent-kakaotalk/SKILL.md +1 -1
  228. package/skills/agent-line/SKILL.md +1 -1
  229. package/skills/agent-slack/SKILL.md +1 -1
  230. package/skills/agent-slackbot/SKILL.md +1 -1
  231. package/skills/agent-teams/SKILL.md +59 -6
  232. package/skills/agent-teams/references/authentication.md +31 -1
  233. package/skills/agent-telegram/SKILL.md +1 -1
  234. package/skills/agent-telegrambot/SKILL.md +1 -1
  235. package/skills/agent-webex/SKILL.md +1 -1
  236. package/skills/agent-webexbot/SKILL.md +1 -1
  237. package/skills/agent-wechatbot/SKILL.md +1 -1
  238. package/skills/agent-whatsapp/SKILL.md +1 -1
  239. package/skills/agent-whatsappbot/SKILL.md +1 -1
  240. package/src/cli.ts +4 -0
  241. package/src/platforms/discord/client.test.ts +86 -0
  242. package/src/platforms/discord/client.ts +10 -3
  243. package/src/platforms/imessage/cli.ts +39 -0
  244. package/src/platforms/imessage/client.test.ts +137 -0
  245. package/src/platforms/imessage/client.ts +253 -0
  246. package/src/platforms/imessage/commands/auth.ts +142 -0
  247. package/src/platforms/imessage/commands/chat.ts +51 -0
  248. package/src/platforms/imessage/commands/doctor.test.ts +80 -0
  249. package/src/platforms/imessage/commands/doctor.ts +139 -0
  250. package/src/platforms/imessage/commands/index.ts +6 -0
  251. package/src/platforms/imessage/commands/message.test.ts +20 -0
  252. package/src/platforms/imessage/commands/message.ts +151 -0
  253. package/src/platforms/imessage/commands/setup.test.ts +52 -0
  254. package/src/platforms/imessage/commands/setup.ts +76 -0
  255. package/src/platforms/imessage/commands/shared.test.ts +19 -0
  256. package/src/platforms/imessage/commands/shared.ts +69 -0
  257. package/src/platforms/imessage/commands/whoami.ts +22 -0
  258. package/src/platforms/imessage/credential-manager.test.ts +122 -0
  259. package/src/platforms/imessage/credential-manager.ts +123 -0
  260. package/src/platforms/imessage/ensure-auth.ts +18 -0
  261. package/src/platforms/imessage/errors.ts +27 -0
  262. package/src/platforms/imessage/index.test.ts +13 -0
  263. package/src/platforms/imessage/index.ts +16 -0
  264. package/src/platforms/imessage/rpc.ts +157 -0
  265. package/src/platforms/imessage/test-stub-imsg.mjs +147 -0
  266. package/src/platforms/imessage/types.test.ts +47 -0
  267. package/src/platforms/imessage/types.ts +95 -0
  268. package/src/platforms/instagram/client.test.ts +478 -33
  269. package/src/platforms/instagram/client.ts +472 -68
  270. package/src/platforms/instagram/commands/auth.test.ts +177 -1
  271. package/src/platforms/instagram/commands/auth.ts +182 -11
  272. package/src/platforms/instagram/credential-manager.test.ts +30 -0
  273. package/src/platforms/instagram/credential-manager.ts +23 -1
  274. package/src/platforms/instagram/hybrid-listener.test.ts +135 -0
  275. package/src/platforms/instagram/hybrid-listener.ts +196 -0
  276. package/src/platforms/instagram/index.ts +10 -0
  277. package/src/platforms/instagram/mqtt/connection.ts +72 -0
  278. package/src/platforms/instagram/mqtt/thrift.test.ts +91 -0
  279. package/src/platforms/instagram/mqtt/thrift.ts +159 -0
  280. package/src/platforms/instagram/mqtt/transport.ts +285 -0
  281. package/src/platforms/instagram/realtime-listener.test.ts +34 -0
  282. package/src/platforms/instagram/realtime-listener.ts +201 -0
  283. package/src/platforms/instagram/types.ts +11 -8
  284. package/src/platforms/teams/app-config.ts +92 -0
  285. package/src/platforms/teams/client.test.ts +335 -1
  286. package/src/platforms/teams/client.ts +342 -7
  287. package/src/platforms/teams/commands/auth.test.ts +93 -1
  288. package/src/platforms/teams/commands/auth.ts +182 -3
  289. package/src/platforms/teams/commands/file.test.ts +92 -1
  290. package/src/platforms/teams/commands/file.ts +76 -1
  291. package/src/platforms/teams/commands/message.test.ts +95 -1
  292. package/src/platforms/teams/commands/message.ts +145 -3
  293. package/src/platforms/teams/credential-manager.test.ts +20 -0
  294. package/src/platforms/teams/credential-manager.ts +68 -3
  295. package/src/platforms/teams/device-code.test.ts +311 -0
  296. package/src/platforms/teams/device-code.ts +277 -0
  297. package/src/platforms/teams/device-login.test.ts +288 -0
  298. package/src/platforms/teams/device-login.ts +206 -0
  299. package/src/platforms/teams/ensure-auth.ts +11 -0
  300. package/src/platforms/teams/index.test.ts +10 -0
  301. package/src/platforms/teams/index.ts +16 -1
  302. package/src/platforms/teams/listener.ts +295 -0
  303. package/src/platforms/teams/realm-discovery.test.ts +73 -0
  304. package/src/platforms/teams/realm-discovery.ts +42 -0
  305. package/src/platforms/teams/token-extractor.ts +69 -0
  306. package/src/platforms/teams/token-provider.test.ts +227 -0
  307. package/src/platforms/teams/token-provider.ts +284 -0
  308. package/src/platforms/teams/trouter.test.ts +114 -0
  309. package/src/platforms/teams/trouter.ts +228 -0
  310. package/src/platforms/teams/types.test.ts +17 -0
  311. package/src/platforms/teams/types.ts +86 -0
  312. package/src/platforms/webexbot/cli.ts +0 -0
  313. package/src/tui/adapters/imessage-adapter.ts +131 -0
  314. package/src/tui/adapters/instagram-adapter.ts +13 -0
  315. package/src/tui/adapters/teams-adapter.ts +23 -0
  316. 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":"AAAA,OAAO,EACL,kBAAkB,EAClB,sBAAsB,EACtB,eAAe,EACf,mBAAmB,EACnB,gBAAgB,EAChB,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,GACjB,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAA;AAE7D,OAAO,EAAE,wBAAwB,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAkC9D,MAAM,iBAAiB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAA;AACvC,MAAM,4BAA4B,GAAG,IAAI,CAAA;AAEzC,MAAM,gBAAgB,GAAiD;IACrE,SAAS,EAAE,EAAE,KAAK,EAAE,mBAAmB,EAAE,GAAG,EAAE,sBAAsB,EAAE;IACtE,KAAK,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,GAAG,EAAE,kBAAkB,EAAE;CAC3D,CAAA;AAED,MAAM,OAAO,kBAAkB;IAOT;IANZ,KAAK,GAA+B,IAAI,GAAG,EAAE,CAAA;IAC7C,QAAQ,CAAS;IACjB,MAAM,CAAS;IACf,gBAAgB,CAAmB;IACnC,eAAe,CAAmB;IAE1C,YAAoB,cAAsC,IAAI,sBAAsB,EAAE;QAAlE,gBAAW,GAAX,WAAW,CAAuD;IAAG,CAAC;IAE1F,WAAW,CAAC,WAA6B;QACvC,IAAI,CAAC,gBAAgB,GAAG,WAAW,CAAA;QACnC,OAAO,IAAI,CAAA;IACb,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;QACtC,IAAI,MAAM;YAAE,OAAO,MAAM,CAAC,WAAW,CAAA;QAErC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,kBAAkB,EAAE,CAAA;QACxD,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;YACjB,MAAM,IAAI,UAAU,CAClB,yFAAyF,EACzF,gBAAgB,CACjB,CAAA;QACH,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAA;QAC1G,IAAI,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;YAC5B,MAAM,IAAI,UAAU,CAAC,mEAAmE,EAAE,eAAe,CAAC,CAAA;QAC5G,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAA;QAC7E,OAAO,IAAI,CAAC,KAAK,CAAA;IACnB,CAAC;IAED,KAAK,CAAC,iBAAiB;QACrB,OAAO,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAA;IACzC,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA;IACrC,CAAC;IAED,KAAK,CAAC,WAAW;QACf,MAAM,IAAI,CAAC,cAAc,EAAE,CAAA;QAC3B,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,MAAM,IAAI,UAAU,CAClB,sEAAsE,EACtE,sBAAsB,CACvB,CAAA;QACH,CAAC;QACD,OAAO,IAAI,CAAC,QAAQ,CAAA;IACtB,CAAC;IAED,KAAK,CAAC,SAAS;QACb,MAAM,IAAI,CAAC,cAAc,EAAE,CAAA;QAC3B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,IAAI,UAAU,CAAC,oEAAoE,EAAE,sBAAsB,CAAC,CAAA;QACpH,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAA;IACpB,CAAC;IAEO,SAAS,CAAC,GAAa;QAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAClC,IAAI,CAAC,MAAM;YAAE,OAAO,SAAS,CAAA;QAC7B,OAAO,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAA;IAC/E,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,QAAwB;QACnD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAA;QAC9C,IAAI,CAAC,6BAA6B,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;QACvD,MAAM,QAAQ,GAAa,GAAG,OAAO,CAAC,WAAW,IAAI,QAAQ,EAAE,CAAA;QAC/D,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;QACvC,IAAI,MAAM,EAAE,CAAC;YACX,yEAAyE;YACzE,yDAAyD;YACzD,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAA;YAChD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAA;YAC1C,OAAO,MAAM,CAAC,WAAW,CAAA;QAC3B,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC;YACvC,MAAM,IAAI,wBAAwB,EAAE,CAAA;QACtC,CAAC;QAED,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,IAAI,mBAAmB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAA;QACnG,MAAM,MAAM,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAA;QACzC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC;YAC1C,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,QAAQ;YACR,YAAY,EAAE,OAAO,CAAC,OAAO,CAAC,iBAAiB;YAC/C,QAAQ;YACR,MAAM;SACP,CAAC,CAAA;QAEF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;QAC/B,OAAO,KAAK,CAAC,WAAW,CAAA;IAC1B,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAAC,MAMhC;QACC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,kBAAkB,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE;YACnE,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,mCAAmC;gBACnD,MAAM,EAAE,gBAAgB;aACzB;YACD,IAAI,EAAE,IAAI,eAAe,CAAC;gBACxB,UAAU,EAAE,eAAe;gBAC3B,SAAS,EAAE,MAAM,CAAC,QAAQ;gBAC1B,aAAa,EAAE,MAAM,CAAC,YAAY;gBAClC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK;aAC3B,CAAC;SACH,CAAC,CAAA;QAEF,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAA4B,CAAA;QACjF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,UAAU,CAClB,mCAAmC,gBAAgB,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,EAC5E,oBAAoB,CACrB,CAAA;QACH,CAAC;QAED,MAAM,WAAW,GAAG,WAAW,CAAC,IAAI,EAAE,cAAc,CAAC,CAAA;QACrD,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,IAAI,UAAU,CAAC,mEAAmE,EAAE,oBAAoB,CAAC,CAAA;QACjH,CAAC;QAED,MAAM,MAAM,GAAG,SAAS,CAAC,WAAW,CAAC,CAAA;QACrC,IAAI,MAAM,CAAC,GAAG,KAAK,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;YACrC,MAAM,IAAI,UAAU,CAClB,+CAA+C,MAAM,CAAC,MAAM,CAAC,GAAG,SAAS,MAAM,CAAC,GAAG,IAAI,SAAS,GAAG,EACnG,uBAAuB,CACxB,CAAA;QACH,CAAC;QAED,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAA;QAC3C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,MAAM,CAAA;QAEvC,MAAM,mBAAmB,GAAG,WAAW,CAAC,IAAI,EAAE,eAAe,CAAC,CAAA;QAC9D,IAAI,mBAAmB,EAAE,CAAC;YACxB,MAAM,IAAI,CAAC,WAAW,CAAC,qBAAqB,CAAC,MAAM,CAAC,WAAW,EAAE,mBAAmB,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAA;QACxG,CAAC;QAED,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,EAAE,YAAY,CAAC,IAAI,4BAA4B,CAAA;QACjF,OAAO;YACL,WAAW;YACX,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,IAAI;YACxC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG;YACtB,QAAQ,EAAE,MAAM,CAAC,GAAG;YACpB,MAAM,EAAE,MAAM,CAAC,GAAG;SACnB,CAAA;IACH,CAAC;IAEO,KAAK,CAAC,iBAAiB;QAC7B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,CAAA;QAClD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,UAAU,CAClB,yFAAyF,EACzF,gBAAgB,CACjB,CAAA;QACH,CAAC;QACD,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,IAAI,sBAAsB,CAAC,eAAe,IAAI,MAAM,CAAC,eAAe,CAAA;QAC5G,IAAI,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,UAAU,EAAE,CAAC;YACvD,MAAM,IAAI,UAAU,CAClB,0EAA0E,EAC1E,oBAAoB,CACrB,CAAA;QACH,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAA;QAC3C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,UAAU,CAClB,0EAA0E,EAC1E,oBAAoB,CACrB,CAAA;QACH,CAAC;QACD,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,CAAA;IAC7C,CAAC;IAEO,6BAA6B,CAAC,WAA6B;QACjE,IAAI,IAAI,CAAC,eAAe,KAAK,WAAW;YAAE,OAAM;QAChD,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAA;QACzB,IAAI,CAAC,MAAM,GAAG,SAAS,CAAA;QACvB,IAAI,CAAC,eAAe,GAAG,WAAW,CAAA;IACpC,CAAC;IAEO,KAAK,CAAC,cAAc;QAC1B,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM;YAAE,OAAM;QACxC,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAA;IAChC,CAAC;CACF;AAED,SAAS,kBAAkB,CAAC,WAA6B;IACvD,OAAO,WAAW,KAAK,UAAU,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,qBAAqB,EAAE,CAAA;AAClF,CAAC;AAED,SAAS,SAAS,CAAC,KAAa;IAC9B,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;IACnC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,UAAU,CAAC,yCAAyC,EAAE,mBAAmB,CAAC,CAAA;IACtF,CAAC;IACD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAA4B,CAAA;IACzG,OAAO;QACL,GAAG,OAAO;QACV,GAAG,EAAE,OAAO,OAAO,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS;QAC9D,GAAG,EAAE,OAAO,OAAO,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS;QAC9D,GAAG,EAAE,OAAO,OAAO,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS;QAC9D,GAAG,EAAE,OAAO,OAAO,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS;KAC/D,CAAA;AACH,CAAC;AAED,SAAS,WAAW,CAAC,MAA+B,EAAE,GAAW;IAC/D,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;IACzB,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAA;AACtD,CAAC;AAED,SAAS,WAAW,CAAC,MAA+B,EAAE,GAAW;IAC/D,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;IACzB,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAA;AACtD,CAAC;AAED,SAAS,gBAAgB,CAAC,IAA6B,EAAE,MAAc;IACrE,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,KAAK,CAAA;IACjD,OAAO,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,MAAM,EAAE,CAAA;AAC1E,CAAC"}
@@ -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":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/platforms/teams/types.ts"],"names":[],"mappings":"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"}