teams-api 0.5.2 → 0.6.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 (83) hide show
  1. package/SKILL.md +1 -1
  2. package/dist/actions/conversation-resolution.d.ts +26 -0
  3. package/dist/actions/conversation-resolution.d.ts.map +1 -0
  4. package/dist/actions/conversation-resolution.js +81 -0
  5. package/dist/actions/conversation-resolution.js.map +1 -0
  6. package/dist/actions/definitions.d.ts +16 -0
  7. package/dist/actions/definitions.d.ts.map +1 -0
  8. package/dist/{actions.js → actions/definitions.js} +77 -209
  9. package/dist/actions/definitions.js.map +1 -0
  10. package/dist/{actions.d.ts → actions/formatters.d.ts} +24 -13
  11. package/dist/actions/formatters.d.ts.map +1 -0
  12. package/dist/actions/formatters.js +86 -0
  13. package/dist/actions/formatters.js.map +1 -0
  14. package/dist/api/chat-service.d.ts +54 -0
  15. package/dist/api/chat-service.d.ts.map +1 -0
  16. package/dist/api/chat-service.js +327 -0
  17. package/dist/api/chat-service.js.map +1 -0
  18. package/dist/api/common.d.ts +21 -0
  19. package/dist/api/common.d.ts.map +1 -0
  20. package/dist/api/common.js +65 -0
  21. package/dist/api/common.js.map +1 -0
  22. package/dist/api/middle-tier.d.ts +15 -0
  23. package/dist/api/middle-tier.d.ts.map +1 -0
  24. package/dist/api/middle-tier.js +52 -0
  25. package/dist/api/middle-tier.js.map +1 -0
  26. package/dist/api/substrate.d.ts +22 -0
  27. package/dist/api/substrate.d.ts.map +1 -0
  28. package/dist/api/substrate.js +162 -0
  29. package/dist/api/substrate.js.map +1 -0
  30. package/dist/api/transcripts.d.ts +51 -0
  31. package/dist/api/transcripts.d.ts.map +1 -0
  32. package/dist/api/transcripts.js +140 -0
  33. package/dist/api/transcripts.js.map +1 -0
  34. package/dist/auth/auto-login.d.ts +23 -0
  35. package/dist/auth/auto-login.d.ts.map +1 -0
  36. package/dist/auth/auto-login.js +136 -0
  37. package/dist/auth/auto-login.js.map +1 -0
  38. package/dist/auth/debug-session.d.ts +20 -0
  39. package/dist/auth/debug-session.d.ts.map +1 -0
  40. package/dist/auth/debug-session.js +121 -0
  41. package/dist/auth/debug-session.js.map +1 -0
  42. package/dist/auth/interactive.d.ts +21 -0
  43. package/dist/auth/interactive.d.ts.map +1 -0
  44. package/dist/auth/interactive.js +90 -0
  45. package/dist/auth/interactive.js.map +1 -0
  46. package/dist/auth/page-diagnostics.d.ts +21 -0
  47. package/dist/auth/page-diagnostics.d.ts.map +1 -0
  48. package/dist/auth/page-diagnostics.js +65 -0
  49. package/dist/auth/page-diagnostics.js.map +1 -0
  50. package/dist/auth/token-capture.d.ts +24 -0
  51. package/dist/auth/token-capture.d.ts.map +1 -0
  52. package/dist/auth/token-capture.js +123 -0
  53. package/dist/auth/token-capture.js.map +1 -0
  54. package/dist/cli.js +11 -5
  55. package/dist/cli.js.map +1 -1
  56. package/dist/constants.d.ts +9 -0
  57. package/dist/constants.d.ts.map +1 -0
  58. package/dist/constants.js +14 -0
  59. package/dist/constants.js.map +1 -0
  60. package/dist/html-utils.d.ts +9 -0
  61. package/dist/html-utils.d.ts.map +1 -0
  62. package/dist/html-utils.js +21 -0
  63. package/dist/html-utils.js.map +1 -0
  64. package/dist/mcp-server.js +4 -3
  65. package/dist/mcp-server.js.map +1 -1
  66. package/dist/teams-client.d.ts +17 -8
  67. package/dist/teams-client.d.ts.map +1 -1
  68. package/dist/teams-client.js +90 -75
  69. package/dist/teams-client.js.map +1 -1
  70. package/dist/types.d.ts +20 -1
  71. package/dist/types.d.ts.map +1 -1
  72. package/dist/types.js.map +1 -1
  73. package/package.json +1 -1
  74. package/dist/actions.d.ts.map +0 -1
  75. package/dist/actions.js.map +0 -1
  76. package/dist/api.d.ts +0 -126
  77. package/dist/api.d.ts.map +0 -1
  78. package/dist/api.js +0 -702
  79. package/dist/api.js.map +0 -1
  80. package/dist/auth.d.ts +0 -53
  81. package/dist/auth.d.ts.map +0 -1
  82. package/dist/auth.js +0 -491
  83. package/dist/auth.js.map +0 -1
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Debug session token capture for Teams.
3
+ *
4
+ * Connects via puppeteer-core to a running Chrome instance with Teams open,
5
+ * intercepts network headers during a page reload, and extracts tokens.
6
+ */
7
+ import type { TeamsToken, ManualTokenOptions } from "../types.js";
8
+ /**
9
+ * Capture a Teams skype token from an existing Chrome debug session.
10
+ *
11
+ * Connects via puppeteer-core to a running Chrome instance with Teams open,
12
+ * intercepts network headers during a page reload, and extracts the token.
13
+ *
14
+ * Usage:
15
+ * 1. Start Chrome with --remote-debugging-port=9222
16
+ * 2. Navigate to Teams and log in
17
+ * 3. Call this function
18
+ */
19
+ export declare function acquireTokenViaDebugSession(options?: ManualTokenOptions): Promise<TeamsToken>;
20
+ //# sourceMappingURL=debug-session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debug-session.d.ts","sourceRoot":"","sources":["../../src/auth/debug-session.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAMlE;;;;;;;;;;GAUG;AACH,wBAAsB,2BAA2B,CAC/C,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,UAAU,CAAC,CA8HrB"}
@@ -0,0 +1,121 @@
1
+ "use strict";
2
+ /**
3
+ * Debug session token capture for Teams.
4
+ *
5
+ * Connects via puppeteer-core to a running Chrome instance with Teams open,
6
+ * intercepts network headers during a page reload, and extracts tokens.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.acquireTokenViaDebugSession = acquireTokenViaDebugSession;
10
+ const region_js_1 = require("../region.js");
11
+ const FETCH_INTERCEPT_TIMEOUT = 30 * 1_000;
12
+ const PAGE_RELOAD_TIMEOUT = 30 * 1_000;
13
+ /**
14
+ * Capture a Teams skype token from an existing Chrome debug session.
15
+ *
16
+ * Connects via puppeteer-core to a running Chrome instance with Teams open,
17
+ * intercepts network headers during a page reload, and extracts the token.
18
+ *
19
+ * Usage:
20
+ * 1. Start Chrome with --remote-debugging-port=9222
21
+ * 2. Navigate to Teams and log in
22
+ * 3. Call this function
23
+ */
24
+ async function acquireTokenViaDebugSession(options) {
25
+ const puppeteer = await import("puppeteer-core");
26
+ const debugPort = options?.debugPort ?? 9222;
27
+ const browserUrl = `http://127.0.0.1:${debugPort}`;
28
+ const browser = await puppeteer.default.connect({ browserURL: browserUrl });
29
+ try {
30
+ const pages = await browser.pages();
31
+ const teamsPage = pages.find((page) => /teams\.(microsoft|cloud\.microsoft)/i.test(page.url()));
32
+ if (!teamsPage) {
33
+ throw new Error("No Teams page found in the browser. Navigate to Teams and log in first.");
34
+ }
35
+ const cdpSession = await teamsPage.createCDPSession();
36
+ let skypeToken = null;
37
+ let region = null;
38
+ let bearerToken = null;
39
+ let substrateToken = null;
40
+ await cdpSession.send("Fetch.enable", {
41
+ patterns: [
42
+ { urlPattern: "*teams*", requestStage: "Request" },
43
+ { urlPattern: "*substrate.office.com*", requestStage: "Request" },
44
+ ],
45
+ });
46
+ const tokenPromise = new Promise((resolve) => {
47
+ const timeout = setTimeout(resolve, FETCH_INTERCEPT_TIMEOUT);
48
+ cdpSession.on("Fetch.requestPaused", async (event) => {
49
+ const headers = event.request.headers ?? {};
50
+ const requestUrl = event.request.url ?? "";
51
+ const detectedRegion = (0, region_js_1.detectTeamsRegionFromUrl)(requestUrl);
52
+ if (detectedRegion && !region) {
53
+ region = detectedRegion;
54
+ }
55
+ for (const [name, value] of Object.entries(headers)) {
56
+ if (name.toLowerCase() === "x-skypetoken" && !skypeToken) {
57
+ skypeToken = value;
58
+ }
59
+ if (name.toLowerCase() === "authorization" &&
60
+ value.startsWith("Bearer ")) {
61
+ if (requestUrl.includes("/api/mt/") && !bearerToken) {
62
+ bearerToken = value.slice("Bearer ".length);
63
+ }
64
+ if (requestUrl.includes("substrate.office.com") &&
65
+ !substrateToken) {
66
+ substrateToken = value.slice("Bearer ".length);
67
+ }
68
+ }
69
+ }
70
+ try {
71
+ await cdpSession.send("Fetch.continueRequest", {
72
+ requestId: event.requestId,
73
+ });
74
+ }
75
+ catch {
76
+ // Request may have already been handled
77
+ }
78
+ if (skypeToken) {
79
+ clearTimeout(timeout);
80
+ resolve();
81
+ }
82
+ });
83
+ });
84
+ teamsPage
85
+ .reload({ waitUntil: "networkidle2", timeout: PAGE_RELOAD_TIMEOUT })
86
+ .catch(() => {
87
+ // Reload may time out
88
+ });
89
+ await tokenPromise;
90
+ // If we have the skype token but not the substrate token yet,
91
+ // wait a bit longer for substrate requests to fire
92
+ if (skypeToken && !substrateToken) {
93
+ await new Promise((resolve) => {
94
+ const extraTimeout = setTimeout(resolve, 5_000);
95
+ const checkInterval = setInterval(() => {
96
+ if (substrateToken) {
97
+ clearTimeout(extraTimeout);
98
+ clearInterval(checkInterval);
99
+ resolve();
100
+ }
101
+ }, 200);
102
+ extraTimeout.unref?.();
103
+ });
104
+ }
105
+ await cdpSession.send("Fetch.disable");
106
+ await cdpSession.detach();
107
+ if (!skypeToken) {
108
+ throw new Error("Failed to capture skype token. Ensure Teams is loaded and authenticated.");
109
+ }
110
+ return {
111
+ skypeToken,
112
+ region: (0, region_js_1.resolveTeamsRegion)(options?.region, region ?? undefined),
113
+ bearerToken: bearerToken ?? undefined,
114
+ substrateToken: substrateToken ?? undefined,
115
+ };
116
+ }
117
+ finally {
118
+ browser.disconnect();
119
+ }
120
+ }
121
+ //# sourceMappingURL=debug-session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debug-session.js","sourceRoot":"","sources":["../../src/auth/debug-session.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Interactive browser login for Teams.
3
+ *
4
+ * Opens a visible Chromium window (Playwright's bundled browser),
5
+ * navigates to Teams, and waits for the user to complete login manually.
6
+ * Works on all platforms (macOS, Windows, Linux).
7
+ */
8
+ import type { TeamsToken, InteractiveLoginOptions } from "../types.js";
9
+ /**
10
+ * Acquire a Teams skype token via interactive browser login.
11
+ *
12
+ * Opens a visible Chromium window (Playwright's bundled browser),
13
+ * navigates to Teams, and waits for the user to complete login
14
+ * manually. Once Teams loads, the skype token is captured via
15
+ * CDP Fetch interception.
16
+ *
17
+ * Works on all platforms (macOS, Windows, Linux). No FIDO2 passkey
18
+ * or system Chrome required.
19
+ */
20
+ export declare function acquireTokenViaInteractiveLogin(options?: InteractiveLoginOptions): Promise<TeamsToken>;
21
+ //# sourceMappingURL=interactive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactive.d.ts","sourceRoot":"","sources":["../../src/auth/interactive.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAavE;;;;;;;;;;GAUG;AACH,wBAAsB,+BAA+B,CACnD,OAAO,CAAC,EAAE,uBAAuB,GAChC,OAAO,CAAC,UAAU,CAAC,CAmFrB"}
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ /**
3
+ * Interactive browser login for Teams.
4
+ *
5
+ * Opens a visible Chromium window (Playwright's bundled browser),
6
+ * navigates to Teams, and waits for the user to complete login manually.
7
+ * Works on all platforms (macOS, Windows, Linux).
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.acquireTokenViaInteractiveLogin = acquireTokenViaInteractiveLogin;
11
+ const region_js_1 = require("../region.js");
12
+ const page_diagnostics_js_1 = require("./page-diagnostics.js");
13
+ const token_capture_js_1 = require("./token-capture.js");
14
+ const TEAMS_URL = "https://teams.cloud.microsoft/";
15
+ const INTERACTIVE_LOGIN_TIMEOUT = 5 * 60 * 1_000;
16
+ /**
17
+ * Acquire a Teams skype token via interactive browser login.
18
+ *
19
+ * Opens a visible Chromium window (Playwright's bundled browser),
20
+ * navigates to Teams, and waits for the user to complete login
21
+ * manually. Once Teams loads, the skype token is captured via
22
+ * CDP Fetch interception.
23
+ *
24
+ * Works on all platforms (macOS, Windows, Linux). No FIDO2 passkey
25
+ * or system Chrome required.
26
+ */
27
+ async function acquireTokenViaInteractiveLogin(options) {
28
+ const { chromium } = await import("playwright");
29
+ const log = options?.verbose
30
+ ? console.log.bind(console)
31
+ : () => { };
32
+ log("Launching browser for interactive login...");
33
+ const browser = await chromium.launch({ headless: false });
34
+ const context = await browser.newContext();
35
+ const page = await context.newPage();
36
+ try {
37
+ log("Navigating to Teams...");
38
+ await page.goto(TEAMS_URL, {
39
+ waitUntil: "domcontentloaded",
40
+ timeout: INTERACTIVE_LOGIN_TIMEOUT,
41
+ });
42
+ // Pre-fill email if provided
43
+ if (options?.email) {
44
+ try {
45
+ await page.waitForURL(/login\.microsoftonline\.com|login\.microsoft\.com/, { timeout: 30_000 });
46
+ const emailInput = await page
47
+ .waitForSelector('#i0116, input[name="loginfmt"], input[type="email"]', { timeout: 10_000 })
48
+ .catch(() => null);
49
+ if (emailInput) {
50
+ await emailInput.fill(options.email);
51
+ log(`Pre-filled email: ${options.email}`);
52
+ }
53
+ }
54
+ catch {
55
+ log("Could not pre-fill email (login page may have changed)");
56
+ }
57
+ }
58
+ // Wait for user to complete login, polling page state for diagnostics
59
+ log("Waiting for you to complete login in the browser window...");
60
+ const loginDeadline = Date.now() + INTERACTIVE_LOGIN_TIMEOUT;
61
+ while (Date.now() < loginDeadline) {
62
+ const state = await (0, page_diagnostics_js_1.diagnosePageState)(page);
63
+ if (state.phase === "teams-loaded" || state.phase === "teams-loading") {
64
+ log(`Reached Teams: ${state.detail}`);
65
+ break;
66
+ }
67
+ log(`Login progress: ${state.detail}`);
68
+ await new Promise((resolve) => setTimeout(resolve, token_capture_js_1.PAGE_STATE_POLL_INTERVAL));
69
+ }
70
+ if (!page.url().includes("teams.cloud.microsoft") &&
71
+ !page.url().includes("teams.microsoft.com")) {
72
+ const state = await (0, page_diagnostics_js_1.diagnosePageState)(page);
73
+ throw new Error(`Login did not complete within ${INTERACTIVE_LOGIN_TIMEOUT / 1_000}s. ` +
74
+ `Current state: ${state.phase} — ${state.detail} (URL: ${state.url})`);
75
+ }
76
+ log("Login detected, capturing token...");
77
+ const { skypeToken, region, bearerToken, substrateToken } = await (0, token_capture_js_1.captureTokensFromPage)(page, log, token_capture_js_1.TOKEN_INTERCEPT_TIMEOUT);
78
+ return {
79
+ skypeToken,
80
+ region: (0, region_js_1.resolveTeamsRegion)(options?.region, region),
81
+ bearerToken,
82
+ substrateToken,
83
+ };
84
+ }
85
+ finally {
86
+ await context.close();
87
+ await browser.close();
88
+ }
89
+ }
90
+ //# sourceMappingURL=interactive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactive.js","sourceRoot":"","sources":["../../src/auth/interactive.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Page state diagnostics for the authentication flow.
3
+ *
4
+ * Provides structured descriptions of where the user is in the
5
+ * Microsoft login flow, used for progress reporting and error messages.
6
+ */
7
+ /** Describes the current state of the page during the login flow. */
8
+ export interface PageState {
9
+ url: string;
10
+ phase: "login-page" | "mfa-challenge" | "redirect" | "teams-loading" | "teams-loaded" | "unknown";
11
+ detail: string;
12
+ }
13
+ /**
14
+ * Diagnose the current page state during authentication.
15
+ * Returns a structured description of where the user is in the login flow.
16
+ */
17
+ export declare function diagnosePageState(page: {
18
+ url: () => string;
19
+ evaluate: (script: string) => Promise<unknown>;
20
+ }): Promise<PageState>;
21
+ //# sourceMappingURL=page-diagnostics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-diagnostics.d.ts","sourceRoot":"","sources":["../../src/auth/page-diagnostics.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,qEAAqE;AACrE,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EACD,YAAY,GACZ,eAAe,GACf,UAAU,GACV,eAAe,GACf,cAAc,GACd,SAAS,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE;IAC5C,GAAG,EAAE,MAAM,MAAM,CAAC;IAClB,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAChD,GAAG,OAAO,CAAC,SAAS,CAAC,CAkErB"}
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ /**
3
+ * Page state diagnostics for the authentication flow.
4
+ *
5
+ * Provides structured descriptions of where the user is in the
6
+ * Microsoft login flow, used for progress reporting and error messages.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.diagnosePageState = diagnosePageState;
10
+ /**
11
+ * Diagnose the current page state during authentication.
12
+ * Returns a structured description of where the user is in the login flow.
13
+ */
14
+ async function diagnosePageState(page) {
15
+ const url = page.url();
16
+ if (url.includes("login.microsoftonline.com") ||
17
+ url.includes("login.microsoft.com")) {
18
+ const pageContent = (await page
19
+ .evaluate("document.body?.innerText?.slice(0, 500) ?? ''")
20
+ .catch(() => ""));
21
+ if (pageContent.includes("Approve sign in request") ||
22
+ pageContent.includes("Enter code") ||
23
+ pageContent.includes("Verify your identity") ||
24
+ pageContent.includes("approve") ||
25
+ url.includes("/common/SAS")) {
26
+ return {
27
+ url,
28
+ phase: "mfa-challenge",
29
+ detail: "Waiting for MFA/2FA approval",
30
+ };
31
+ }
32
+ return {
33
+ url,
34
+ phase: "login-page",
35
+ detail: "On the Microsoft login page",
36
+ };
37
+ }
38
+ if (url.includes("teams.cloud.microsoft") ||
39
+ url.includes("teams.microsoft.com")) {
40
+ const isLoaded = (await page
41
+ .evaluate("(document.querySelector('#app') ?? document.querySelector(\"[data-tid='app-layout']\") ?? document.querySelector('main')) !== null")
42
+ .catch(() => false));
43
+ if (isLoaded) {
44
+ return {
45
+ url,
46
+ phase: "teams-loaded",
47
+ detail: "Teams application loaded",
48
+ };
49
+ }
50
+ return {
51
+ url,
52
+ phase: "teams-loading",
53
+ detail: "Teams page reached, application loading",
54
+ };
55
+ }
56
+ if (url.includes("microsoftonline.com") || url.includes("microsoft.com")) {
57
+ return {
58
+ url,
59
+ phase: "redirect",
60
+ detail: "Redirecting through Microsoft authentication",
61
+ };
62
+ }
63
+ return { url, phase: "unknown", detail: `Unexpected page: ${url}` };
64
+ }
65
+ //# sourceMappingURL=page-diagnostics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-diagnostics.js","sourceRoot":"","sources":["../../src/auth/page-diagnostics.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAmBH,8CAqEC;AAzED;;;GAGG;AACI,KAAK,UAAU,iBAAiB,CAAC,IAGvC;IACC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAEvB,IACE,GAAG,CAAC,QAAQ,CAAC,2BAA2B,CAAC;QACzC,GAAG,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EACnC,CAAC;QACD,MAAM,WAAW,GAAG,CAAC,MAAM,IAAI;aAC5B,QAAQ,CAAC,+CAA+C,CAAC;aACzD,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAW,CAAC;QAE9B,IACE,WAAW,CAAC,QAAQ,CAAC,yBAAyB,CAAC;YAC/C,WAAW,CAAC,QAAQ,CAAC,YAAY,CAAC;YAClC,WAAW,CAAC,QAAQ,CAAC,sBAAsB,CAAC;YAC5C,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC;YAC/B,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,EAC3B,CAAC;YACD,OAAO;gBACL,GAAG;gBACH,KAAK,EAAE,eAAe;gBACtB,MAAM,EAAE,8BAA8B;aACvC,CAAC;QACJ,CAAC;QAED,OAAO;YACL,GAAG;YACH,KAAK,EAAE,YAAY;YACnB,MAAM,EAAE,6BAA6B;SACtC,CAAC;IACJ,CAAC;IAED,IACE,GAAG,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QACrC,GAAG,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EACnC,CAAC;QACD,MAAM,QAAQ,GAAG,CAAC,MAAM,IAAI;aACzB,QAAQ,CACP,oIAAoI,CACrI;aACA,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAY,CAAC;QAElC,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO;gBACL,GAAG;gBACH,KAAK,EAAE,cAAc;gBACrB,MAAM,EAAE,0BAA0B;aACnC,CAAC;QACJ,CAAC;QAED,OAAO;YACL,GAAG;YACH,KAAK,EAAE,eAAe;YACtB,MAAM,EAAE,yCAAyC;SAClD,CAAC;IACJ,CAAC;IAED,IAAI,GAAG,CAAC,QAAQ,CAAC,qBAAqB,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;QACzE,OAAO;YACL,GAAG;YACH,KAAK,EAAE,UAAU;YACjB,MAAM,EAAE,8CAA8C;SACvD,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,oBAAoB,GAAG,EAAE,EAAE,CAAC;AACtE,CAAC"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Shared token capture logic via Chrome DevTools Protocol (CDP).
3
+ *
4
+ * Used by both the auto-login and interactive login flows (Playwright-based).
5
+ * Captures skype, bearer, and substrate tokens from intercepted network requests.
6
+ */
7
+ export declare const TOKEN_INTERCEPT_TIMEOUT: number;
8
+ export declare const PAGE_RELOAD_TIMEOUT: number;
9
+ export declare const PAGE_STATE_POLL_INTERVAL: number;
10
+ export type LogFunction = (...arguments_: unknown[]) => void;
11
+ /**
12
+ * Wait for the page to reach Teams and capture authentication tokens via CDP.
13
+ *
14
+ * Polls the page state periodically to provide diagnostic feedback instead of
15
+ * relying solely on timeouts. Throws a descriptive error if the login flow
16
+ * stalls or reaches an unexpected state.
17
+ */
18
+ export declare function captureTokensFromPage(page: any, log: LogFunction, interceptTimeout: number): Promise<{
19
+ skypeToken: string;
20
+ region: string | undefined;
21
+ bearerToken: string | undefined;
22
+ substrateToken: string | undefined;
23
+ }>;
24
+ //# sourceMappingURL=token-capture.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-capture.d.ts","sourceRoot":"","sources":["../../src/auth/token-capture.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,eAAO,MAAM,uBAAuB,QAAa,CAAC;AAClD,eAAO,MAAM,mBAAmB,QAAa,CAAC;AAC9C,eAAO,MAAM,wBAAwB,QAAY,CAAC;AAElD,MAAM,MAAM,WAAW,GAAG,CAAC,GAAG,UAAU,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;AAE7D;;;;;;GAMG;AAEH,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,GAAG,EACT,GAAG,EAAE,WAAW,EAChB,gBAAgB,EAAE,MAAM,GACvB,OAAO,CAAC;IACT,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;CACpC,CAAC,CAqID"}
@@ -0,0 +1,123 @@
1
+ "use strict";
2
+ /**
3
+ * Shared token capture logic via Chrome DevTools Protocol (CDP).
4
+ *
5
+ * Used by both the auto-login and interactive login flows (Playwright-based).
6
+ * Captures skype, bearer, and substrate tokens from intercepted network requests.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.PAGE_STATE_POLL_INTERVAL = exports.PAGE_RELOAD_TIMEOUT = exports.TOKEN_INTERCEPT_TIMEOUT = void 0;
10
+ exports.captureTokensFromPage = captureTokensFromPage;
11
+ const region_js_1 = require("../region.js");
12
+ const page_diagnostics_js_1 = require("./page-diagnostics.js");
13
+ exports.TOKEN_INTERCEPT_TIMEOUT = 60 * 1_000;
14
+ exports.PAGE_RELOAD_TIMEOUT = 30 * 1_000;
15
+ exports.PAGE_STATE_POLL_INTERVAL = 3 * 1_000;
16
+ /**
17
+ * Wait for the page to reach Teams and capture authentication tokens via CDP.
18
+ *
19
+ * Polls the page state periodically to provide diagnostic feedback instead of
20
+ * relying solely on timeouts. Throws a descriptive error if the login flow
21
+ * stalls or reaches an unexpected state.
22
+ */
23
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
24
+ async function captureTokensFromPage(page, log, interceptTimeout) {
25
+ const cdpSession = (await page.context().newCDPSession(page));
26
+ let skypeToken = null;
27
+ let region = null;
28
+ let bearerToken = null;
29
+ let substrateToken = null;
30
+ await cdpSession.send("Fetch.enable", {
31
+ patterns: [
32
+ { urlPattern: "*teams*", requestStage: "Request" },
33
+ { urlPattern: "*substrate.office.com*", requestStage: "Request" },
34
+ ],
35
+ });
36
+ log("Listening for tokens in network requests...");
37
+ const tokenPromise = new Promise((resolve) => {
38
+ const timeout = setTimeout(() => {
39
+ log("Token intercept timed out");
40
+ resolve();
41
+ }, interceptTimeout);
42
+ cdpSession.on("Fetch.requestPaused", async (event) => {
43
+ const request = event.request;
44
+ const requestId = event.requestId;
45
+ const requestUrl = request.url ?? "";
46
+ const detectedRegion = (0, region_js_1.detectTeamsRegionFromUrl)(requestUrl);
47
+ if (detectedRegion && !region) {
48
+ region = detectedRegion;
49
+ log(`Detected Teams region from request URL: ${region}`);
50
+ }
51
+ for (const [name, value] of Object.entries(request.headers ?? {})) {
52
+ if (name.toLowerCase() === "x-skypetoken" && !skypeToken) {
53
+ skypeToken = value;
54
+ }
55
+ if (name.toLowerCase() === "authorization" &&
56
+ value.startsWith("Bearer ")) {
57
+ if (requestUrl.includes("/api/mt/") && !bearerToken) {
58
+ bearerToken = value.slice("Bearer ".length);
59
+ }
60
+ if (requestUrl.includes("substrate.office.com") &&
61
+ !substrateToken) {
62
+ substrateToken = value.slice("Bearer ".length);
63
+ }
64
+ }
65
+ }
66
+ try {
67
+ await cdpSession.send("Fetch.continueRequest", { requestId });
68
+ }
69
+ catch {
70
+ // Request may have already been handled
71
+ }
72
+ if (skypeToken) {
73
+ log("Skype token captured from request headers");
74
+ clearTimeout(timeout);
75
+ resolve();
76
+ }
77
+ });
78
+ });
79
+ log("Reloading page to intercept token...");
80
+ page
81
+ .reload({ waitUntil: "domcontentloaded", timeout: exports.PAGE_RELOAD_TIMEOUT })
82
+ .catch(() => {
83
+ // Reload may time out, but token should be captured by then
84
+ });
85
+ await tokenPromise;
86
+ // If we have the skype token but not the substrate token yet,
87
+ // wait a bit longer for substrate requests to fire
88
+ if (skypeToken && !substrateToken) {
89
+ log("Waiting for substrate token...");
90
+ await new Promise((resolve) => {
91
+ const extraTimeout = setTimeout(resolve, 5_000);
92
+ const checkInterval = setInterval(() => {
93
+ if (substrateToken) {
94
+ clearTimeout(extraTimeout);
95
+ clearInterval(checkInterval);
96
+ resolve();
97
+ }
98
+ }, 200);
99
+ extraTimeout.unref?.();
100
+ });
101
+ }
102
+ await cdpSession.send("Fetch.disable");
103
+ await cdpSession.detach();
104
+ if (!skypeToken) {
105
+ const state = await (0, page_diagnostics_js_1.diagnosePageState)(page);
106
+ throw new Error(`Failed to capture skype token. Page state: ${state.phase} — ${state.detail} (URL: ${state.url})`);
107
+ }
108
+ const capturedSkypeToken = skypeToken;
109
+ log(`Token captured (${capturedSkypeToken.length} chars)`);
110
+ if (bearerToken) {
111
+ log("Bearer token also captured for profile resolution");
112
+ }
113
+ if (substrateToken) {
114
+ log("Substrate token also captured for people/chat search");
115
+ }
116
+ return {
117
+ skypeToken,
118
+ region: region ?? undefined,
119
+ bearerToken: bearerToken ?? undefined,
120
+ substrateToken: substrateToken ?? undefined,
121
+ };
122
+ }
123
+ //# sourceMappingURL=token-capture.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-capture.js","sourceRoot":"","sources":["../../src/auth/token-capture.ts"],"names":[],"mappings":"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"}
package/dist/cli.js CHANGED
@@ -15,7 +15,8 @@ const node_fs_1 = require("node:fs");
15
15
  const node_path_1 = require("node:path");
16
16
  const commander_1 = require("commander");
17
17
  const teams_client_js_1 = require("./teams-client.js");
18
- const actions_js_1 = require("./actions.js");
18
+ const definitions_js_1 = require("./actions/definitions.js");
19
+ const formatters_js_1 = require("./actions/formatters.js");
19
20
  const VALID_FORMATS = ["json", "text", "md", "toon"];
20
21
  const program = new commander_1.Command();
21
22
  program
@@ -76,8 +77,13 @@ function coerceParameter(value, type) {
76
77
  if (value === undefined)
77
78
  return undefined;
78
79
  switch (type) {
79
- case "number":
80
- return Number(value);
80
+ case "number": {
81
+ const parsed = Number(value);
82
+ if (Number.isNaN(parsed)) {
83
+ throw new Error(`Invalid number: "${String(value)}"`);
84
+ }
85
+ return parsed;
86
+ }
81
87
  case "boolean":
82
88
  return value === true || value === "true";
83
89
  default:
@@ -85,7 +91,7 @@ function coerceParameter(value, type) {
85
91
  }
86
92
  }
87
93
  // ── Register actions as CLI commands ──────────────────────────────────
88
- for (const action of actions_js_1.actions) {
94
+ for (const action of definitions_js_1.actions) {
89
95
  const command = new commander_1.Command(action.name).description(action.description);
90
96
  addAuthOptions(command);
91
97
  for (const parameter of action.parameters) {
@@ -140,7 +146,7 @@ for (const action of actions_js_1.actions) {
140
146
  if (action.name === "get-messages") {
141
147
  process.stderr.write("\n");
142
148
  }
143
- const output = (0, actions_js_1.formatOutput)(action, result, outputFormat);
149
+ const output = (0, formatters_js_1.formatOutput)(action, result, outputFormat);
144
150
  if (flags.output) {
145
151
  const outputPath = (0, node_path_1.resolve)(flags.output);
146
152
  (0, node_fs_1.writeFileSync)(outputPath, output, "utf-8");
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Shared constants used across the codebase.
3
+ */
4
+ /** Message types that represent user-authored text content. */
5
+ export declare const TEXT_MESSAGE_TYPES: readonly ["RichText/Html", "Text"];
6
+ export type TextMessageType = (typeof TEXT_MESSAGE_TYPES)[number];
7
+ /** Check whether a message type represents user-authored text content. */
8
+ export declare function isTextMessageType(messageType: string): messageType is TextMessageType;
9
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,+DAA+D;AAC/D,eAAO,MAAM,kBAAkB,oCAAqC,CAAC;AAErE,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;AAElE,0EAA0E;AAC1E,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,MAAM,GAClB,WAAW,IAAI,eAAe,CAEhC"}
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ /**
3
+ * Shared constants used across the codebase.
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.TEXT_MESSAGE_TYPES = void 0;
7
+ exports.isTextMessageType = isTextMessageType;
8
+ /** Message types that represent user-authored text content. */
9
+ exports.TEXT_MESSAGE_TYPES = ["RichText/Html", "Text"];
10
+ /** Check whether a message type represents user-authored text content. */
11
+ function isTextMessageType(messageType) {
12
+ return exports.TEXT_MESSAGE_TYPES.includes(messageType);
13
+ }
14
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAQH,8CAIC;AAVD,+DAA+D;AAClD,QAAA,kBAAkB,GAAG,CAAC,eAAe,EAAE,MAAM,CAAU,CAAC;AAIrE,0EAA0E;AAC1E,SAAgB,iBAAiB,CAC/B,WAAmB;IAEnB,OAAQ,0BAAwC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AACzE,CAAC"}