teams-api 1.4.0 → 1.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.
- package/README.md +138 -20
- package/dist/actions/conversation-actions.d.ts.map +1 -1
- package/dist/actions/conversation-actions.js.map +1 -1
- package/dist/actions/definitions.d.ts.map +1 -1
- package/dist/actions/definitions.js +2 -0
- package/dist/actions/definitions.js.map +1 -1
- package/dist/actions/file-actions.d.ts.map +1 -1
- package/dist/actions/file-actions.js +3 -1
- package/dist/actions/file-actions.js.map +1 -1
- package/dist/actions/image-description-actions.d.ts +28 -0
- package/dist/actions/image-description-actions.d.ts.map +1 -0
- package/dist/actions/image-description-actions.js +148 -0
- package/dist/actions/image-description-actions.js.map +1 -0
- package/dist/actions/message-actions.d.ts.map +1 -1
- package/dist/actions/message-actions.js +175 -9
- package/dist/actions/message-actions.js.map +1 -1
- package/dist/actions/utility-actions.d.ts.map +1 -1
- package/dist/actions/utility-actions.js.map +1 -1
- package/dist/api/chat-service.d.ts +2 -12
- package/dist/api/chat-service.d.ts.map +1 -1
- package/dist/api/chat-service.js +33 -41
- package/dist/api/chat-service.js.map +1 -1
- package/dist/api/common.d.ts +4 -0
- package/dist/api/common.d.ts.map +1 -1
- package/dist/api/common.js +10 -1
- package/dist/api/common.js.map +1 -1
- package/dist/api/image-description.d.ts +20 -0
- package/dist/api/image-description.d.ts.map +1 -0
- package/dist/api/image-description.js +77 -0
- package/dist/api/image-description.js.map +1 -0
- package/dist/audit.d.ts +17 -0
- package/dist/audit.d.ts.map +1 -0
- package/dist/audit.js +53 -0
- package/dist/audit.js.map +1 -0
- package/dist/auth/auto-login.d.ts.map +1 -1
- package/dist/auth/auto-login.js +1 -3
- package/dist/auth/auto-login.js.map +1 -1
- package/dist/auth/interactive.d.ts.map +1 -1
- package/dist/auth/interactive.js +7 -8
- package/dist/auth/interactive.js.map +1 -1
- package/dist/auth/token-capture.d.ts.map +1 -1
- package/dist/auth/token-capture.js +62 -8
- package/dist/auth/token-capture.js.map +1 -1
- package/dist/browser-runtime.d.ts +11 -0
- package/dist/browser-runtime.d.ts.map +1 -1
- package/dist/browser-runtime.js +106 -0
- package/dist/browser-runtime.js.map +1 -1
- package/dist/cli.js.map +1 -1
- package/dist/conversation-protection.d.ts +21 -0
- package/dist/conversation-protection.d.ts.map +1 -0
- package/dist/conversation-protection.js +47 -0
- package/dist/conversation-protection.js.map +1 -0
- package/dist/credential-store.d.ts.map +1 -1
- package/dist/credential-store.js +10 -2
- package/dist/credential-store.js.map +1 -1
- package/dist/emoji-map.d.ts.map +1 -1
- package/dist/emoji-map.js.map +1 -1
- package/dist/html-utils.d.ts +23 -3
- package/dist/html-utils.d.ts.map +1 -1
- package/dist/html-utils.js +34 -3
- package/dist/html-utils.js.map +1 -1
- package/dist/mcp-auth.d.ts +56 -0
- package/dist/mcp-auth.d.ts.map +1 -0
- package/dist/mcp-auth.js +207 -0
- package/dist/mcp-auth.js.map +1 -0
- package/dist/mcp-server.d.ts +1 -0
- package/dist/mcp-server.d.ts.map +1 -1
- package/dist/mcp-server.js +37 -213
- package/dist/mcp-server.js.map +1 -1
- package/dist/model-context-protocol-download-content.d.ts +7 -0
- package/dist/model-context-protocol-download-content.d.ts.map +1 -0
- package/dist/model-context-protocol-download-content.js +90 -0
- package/dist/model-context-protocol-download-content.js.map +1 -0
- package/dist/server-instructions.d.ts.map +1 -1
- package/dist/server-instructions.js +4 -0
- package/dist/server-instructions.js.map +1 -1
- package/dist/smart-login.d.ts.map +1 -1
- package/dist/smart-login.js +3 -3
- package/dist/smart-login.js.map +1 -1
- package/dist/teams-client.d.ts +20 -3
- package/dist/teams-client.d.ts.map +1 -1
- package/dist/teams-client.js +117 -29
- package/dist/teams-client.js.map +1 -1
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +5 -1
- package/dist/telemetry.js.map +1 -1
- package/dist/token-store.d.ts.map +1 -1
- package/dist/token-store.js.map +1 -1
- package/dist/types.d.ts +54 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +8 -2
package/dist/api/common.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/api/common.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,qBAAa,YAAa,SAAQ,KAAK;gBACzB,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,SAAgB,sBAAsB,EAAE,MAAM,CAAC;gBAEnC,OAAO,EAAE,MAAM,EAAE,sBAAsB,EAAE,MAAM;CAK5D;AAqBD;;;;;GAKG;AACH,wBAAsB,cAAc,CAClC,KAAK,EAAE,MAAM,GAAG,GAAG,GAAG,OAAO,EAC7B,IAAI,CAAC,EAAE,WAAW,GACjB,OAAO,CAAC,QAAQ,CAAC,CAsBnB"}
|
|
1
|
+
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/api/common.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,qBAAa,YAAa,SAAQ,KAAK;gBACzB,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,SAAgB,sBAAsB,EAAE,MAAM,CAAC;gBAEnC,OAAO,EAAE,MAAM,EAAE,sBAAsB,EAAE,MAAM;CAK5D;AAED,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,SAAgB,UAAU,EAAE,MAAM,CAAC;gBAEvB,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;CAKhD;AAqBD;;;;;GAKG;AACH,wBAAsB,cAAc,CAClC,KAAK,EAAE,MAAM,GAAG,GAAG,GAAG,OAAO,EAC7B,IAAI,CAAC,EAAE,WAAW,GACjB,OAAO,CAAC,QAAQ,CAAC,CAsBnB"}
|
package/dist/api/common.js
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* used by chat-service, middle-tier, substrate, and transcript modules.
|
|
7
7
|
*/
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.ApiRateLimitError = exports.ApiAuthError = void 0;
|
|
9
|
+
exports.ApiResponseError = exports.ApiRateLimitError = exports.ApiAuthError = void 0;
|
|
10
10
|
exports.fetchWithRetry = fetchWithRetry;
|
|
11
11
|
class ApiAuthError extends Error {
|
|
12
12
|
constructor(message) {
|
|
@@ -24,6 +24,15 @@ class ApiRateLimitError extends Error {
|
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
26
|
exports.ApiRateLimitError = ApiRateLimitError;
|
|
27
|
+
class ApiResponseError extends Error {
|
|
28
|
+
statusCode;
|
|
29
|
+
constructor(message, statusCode) {
|
|
30
|
+
super(message);
|
|
31
|
+
this.name = "ApiResponseError";
|
|
32
|
+
this.statusCode = statusCode;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
exports.ApiResponseError = ApiResponseError;
|
|
27
36
|
const MAX_RETRY_ATTEMPTS = 5;
|
|
28
37
|
const INITIAL_BACKOFF_MILLISECONDS = 2_000;
|
|
29
38
|
function parseRetryAfter(response) {
|
package/dist/api/common.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/api/common.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;
|
|
1
|
+
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/api/common.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAsDH,wCAyBC;AA7ED,MAAa,YAAa,SAAQ,KAAK;IACrC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;IAC7B,CAAC;CACF;AALD,oCAKC;AAED,MAAa,iBAAkB,SAAQ,KAAK;IAC1B,sBAAsB,CAAS;IAE/C,YAAY,OAAe,EAAE,sBAA8B;QACzD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;QAChC,IAAI,CAAC,sBAAsB,GAAG,sBAAsB,CAAC;IACvD,CAAC;CACF;AARD,8CAQC;AAED,MAAa,gBAAiB,SAAQ,KAAK;IACzB,UAAU,CAAS;IAEnC,YAAY,OAAe,EAAE,UAAkB;QAC7C,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;QAC/B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;CACF;AARD,4CAQC;AAED,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAC7B,MAAM,4BAA4B,GAAG,KAAK,CAAC;AAE3C,SAAS,eAAe,CAAC,QAAkB;IACzC,MAAM,gBAAgB,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC7D,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,OAAO,4BAA4B,CAAC;IACtC,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;IACzC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;QAC1C,OAAO,OAAO,GAAG,KAAK,CAAC;IACzB,CAAC;IACD,OAAO,4BAA4B,CAAC;AACtC,CAAC;AAED,SAAS,KAAK,CAAC,YAAoB;IACjC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;AACrE,CAAC;AAED;;;;;GAKG;AACI,KAAK,UAAU,cAAc,CAClC,KAA6B,EAC7B,IAAkB;IAElB,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,kBAAkB,EAAE,OAAO,EAAE,EAAE,CAAC;QAC/D,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAE1C,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,IAAI,OAAO,KAAK,kBAAkB,EAAE,CAAC;YACnC,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACxC,MAAM,IAAI,iBAAiB,CACzB,6BAA6B,kBAAkB,GAAG,CAAC,cAAc,QAAQ,CAAC,MAAM,IAAI,SAAS,EAAE,EAC/F,eAAe,CAAC,QAAQ,CAAC,CAC1B,CAAC;QACJ,CAAC;QAED,MAAM,sBAAsB,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;QACzD,MAAM,mBAAmB,GAAG,sBAAsB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAC1E,MAAM,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACnC,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;AAC1E,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Image description utilities.
|
|
3
|
+
*
|
|
4
|
+
* The Teams API provides image bytes; this module sends those bytes to an
|
|
5
|
+
* OpenAI-compatible vision endpoint when the user has configured credentials.
|
|
6
|
+
*/
|
|
7
|
+
export interface DescribeImageOptions {
|
|
8
|
+
imageData: Buffer;
|
|
9
|
+
contentType: string;
|
|
10
|
+
prompt?: string;
|
|
11
|
+
environment?: NodeJS.ProcessEnv;
|
|
12
|
+
fetchFunction?: typeof fetch;
|
|
13
|
+
}
|
|
14
|
+
export interface ImageDescriptionResult {
|
|
15
|
+
provider: "openai-compatible";
|
|
16
|
+
model: string;
|
|
17
|
+
description: string;
|
|
18
|
+
}
|
|
19
|
+
export declare function describeImageWithOpenAiCompatibleVision(options: DescribeImageOptions): Promise<ImageDescriptionResult>;
|
|
20
|
+
//# sourceMappingURL=image-description.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image-description.d.ts","sourceRoot":"","sources":["../../src/api/image-description.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAeH,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IAChC,aAAa,CAAC,EAAE,OAAO,KAAK,CAAC;CAC9B;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB;AAoCD,wBAAsB,uCAAuC,CAC3D,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,sBAAsB,CAAC,CAwDjC"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Image description utilities.
|
|
4
|
+
*
|
|
5
|
+
* The Teams API provides image bytes; this module sends those bytes to an
|
|
6
|
+
* OpenAI-compatible vision endpoint when the user has configured credentials.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.describeImageWithOpenAiCompatibleVision = describeImageWithOpenAiCompatibleVision;
|
|
10
|
+
const common_js_1 = require("./common.js");
|
|
11
|
+
const DEFAULT_OPENAI_COMPATIBLE_BASE_URL = "https://api.openai.com/v1";
|
|
12
|
+
const DEFAULT_OPENAI_COMPATIBLE_MODEL = "gpt-4o-mini";
|
|
13
|
+
const DEFAULT_IMAGE_DESCRIPTION_PROMPT = "Describe this Teams image for someone who cannot see it. Focus on visible text, UI state, diagrams, charts, and any actionable context. Be concise but complete.";
|
|
14
|
+
function readImageDescriptionConfig(environment) {
|
|
15
|
+
const apiKey = environment.TEAMS_IMAGE_DESCRIPTION_API_KEY ?? environment.OPENAI_API_KEY;
|
|
16
|
+
if (!apiKey) {
|
|
17
|
+
throw new Error("Image description requires TEAMS_IMAGE_DESCRIPTION_API_KEY or OPENAI_API_KEY to be set.");
|
|
18
|
+
}
|
|
19
|
+
const baseUrl = (environment.TEAMS_IMAGE_DESCRIPTION_BASE_URL ??
|
|
20
|
+
DEFAULT_OPENAI_COMPATIBLE_BASE_URL).replace(/\/+$/, "");
|
|
21
|
+
const model = environment.TEAMS_IMAGE_DESCRIPTION_MODEL ??
|
|
22
|
+
DEFAULT_OPENAI_COMPATIBLE_MODEL;
|
|
23
|
+
return {
|
|
24
|
+
endpointUrl: `${baseUrl}/chat/completions`,
|
|
25
|
+
apiKey,
|
|
26
|
+
model,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
async function describeImageWithOpenAiCompatibleVision(options) {
|
|
30
|
+
const environment = options.environment ?? process.env;
|
|
31
|
+
const fetchFunction = options.fetchFunction ?? common_js_1.fetchWithRetry;
|
|
32
|
+
const config = readImageDescriptionConfig(environment);
|
|
33
|
+
const prompt = options.prompt ?? DEFAULT_IMAGE_DESCRIPTION_PROMPT;
|
|
34
|
+
const response = await fetchFunction(config.endpointUrl, {
|
|
35
|
+
method: "POST",
|
|
36
|
+
headers: {
|
|
37
|
+
Authorization: `Bearer ${config.apiKey}`,
|
|
38
|
+
"Content-Type": "application/json",
|
|
39
|
+
},
|
|
40
|
+
body: JSON.stringify({
|
|
41
|
+
model: config.model,
|
|
42
|
+
messages: [
|
|
43
|
+
{
|
|
44
|
+
role: "user",
|
|
45
|
+
content: [
|
|
46
|
+
{
|
|
47
|
+
type: "text",
|
|
48
|
+
text: prompt,
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
type: "image_url",
|
|
52
|
+
image_url: {
|
|
53
|
+
url: `data:${options.contentType};base64,${options.imageData.toString("base64")}`,
|
|
54
|
+
},
|
|
55
|
+
},
|
|
56
|
+
],
|
|
57
|
+
},
|
|
58
|
+
],
|
|
59
|
+
max_tokens: 500,
|
|
60
|
+
}),
|
|
61
|
+
});
|
|
62
|
+
if (!response.ok) {
|
|
63
|
+
const errorText = await response.text();
|
|
64
|
+
throw new Error(`Image description request failed: ${response.status} ${response.statusText} — ${errorText}`);
|
|
65
|
+
}
|
|
66
|
+
const responseBody = (await response.json());
|
|
67
|
+
const description = responseBody.choices?.[0]?.message?.content?.trim();
|
|
68
|
+
if (!description) {
|
|
69
|
+
throw new Error("Image description response did not include message content.");
|
|
70
|
+
}
|
|
71
|
+
return {
|
|
72
|
+
provider: "openai-compatible",
|
|
73
|
+
model: config.model,
|
|
74
|
+
description,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=image-description.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image-description.js","sourceRoot":"","sources":["../../src/api/image-description.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AA+DH,0FA0DC;AAvHD,2CAA6C;AAE7C,MAAM,kCAAkC,GAAG,2BAA2B,CAAC;AACvE,MAAM,+BAA+B,GAAG,aAAa,CAAC;AACtD,MAAM,gCAAgC,GACpC,kKAAkK,CAAC;AA8BrK,SAAS,0BAA0B,CACjC,WAA8B;IAE9B,MAAM,MAAM,GACV,WAAW,CAAC,+BAA+B,IAAI,WAAW,CAAC,cAAc,CAAC;IAC5E,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACb,yFAAyF,CAC1F,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,CACd,WAAW,CAAC,gCAAgC;QAC5C,kCAAkC,CACnC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACtB,MAAM,KAAK,GACT,WAAW,CAAC,6BAA6B;QACzC,+BAA+B,CAAC;IAElC,OAAO;QACL,WAAW,EAAE,GAAG,OAAO,mBAAmB;QAC1C,MAAM;QACN,KAAK;KACN,CAAC;AACJ,CAAC;AAEM,KAAK,UAAU,uCAAuC,CAC3D,OAA6B;IAE7B,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC;IACvD,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,0BAAc,CAAC;IAC9D,MAAM,MAAM,GAAG,0BAA0B,CAAC,WAAW,CAAC,CAAC;IACvD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,gCAAgC,CAAC;IAElE,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC,WAAW,EAAE;QACvD,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,aAAa,EAAE,UAAU,MAAM,CAAC,MAAM,EAAE;YACxC,cAAc,EAAE,kBAAkB;SACnC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,MAAM;yBACb;wBACD;4BACE,IAAI,EAAE,WAAW;4BACjB,SAAS,EAAE;gCACT,GAAG,EAAE,QAAQ,OAAO,CAAC,WAAW,WAAW,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;6BAClF;yBACF;qBACF;iBACF;aACF;YACD,UAAU,EAAE,GAAG;SAChB,CAAC;KACH,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CACb,qCAAqC,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,MAAM,SAAS,EAAE,CAC7F,CAAC;IACJ,CAAC;IAED,MAAM,YAAY,GAChB,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAmC,CAAC;IAC5D,MAAM,WAAW,GAAG,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IACxE,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CACb,6DAA6D,CAC9D,CAAC;IACJ,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,mBAAmB;QAC7B,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,WAAW;KACZ,CAAC;AACJ,CAAC"}
|
package/dist/audit.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Audit logging for state-modifying Teams actions.
|
|
3
|
+
*
|
|
4
|
+
* Emits structured JSON Lines to stderr or a file for compliance and audit trails.
|
|
5
|
+
* Controlled by the TEAMS_AUDIT_LOG environment variable:
|
|
6
|
+
* - "off" or unset — no audit logging (default)
|
|
7
|
+
* - "stderr" — write to stderr
|
|
8
|
+
* - "file:/path/to/audit.jsonl" — append to file
|
|
9
|
+
*
|
|
10
|
+
* Audit failures are silent — they must never break the tool.
|
|
11
|
+
*/
|
|
12
|
+
import type { AuditDestination, AuditEvent } from "./types.js";
|
|
13
|
+
/** Resolve the audit destination from the TEAMS_AUDIT_LOG environment variable. */
|
|
14
|
+
export declare function resolveAuditDestination(): AuditDestination;
|
|
15
|
+
/** Emit a structured audit event to the configured destination. */
|
|
16
|
+
export declare function emitAuditEvent(event: AuditEvent): void;
|
|
17
|
+
//# sourceMappingURL=audit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../src/audit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE/D,mFAAmF;AACnF,wBAAgB,uBAAuB,IAAI,gBAAgB,CAM1D;AAED,mEAAmE;AACnE,wBAAgB,cAAc,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAuBtD"}
|
package/dist/audit.js
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Audit logging for state-modifying Teams actions.
|
|
4
|
+
*
|
|
5
|
+
* Emits structured JSON Lines to stderr or a file for compliance and audit trails.
|
|
6
|
+
* Controlled by the TEAMS_AUDIT_LOG environment variable:
|
|
7
|
+
* - "off" or unset — no audit logging (default)
|
|
8
|
+
* - "stderr" — write to stderr
|
|
9
|
+
* - "file:/path/to/audit.jsonl" — append to file
|
|
10
|
+
*
|
|
11
|
+
* Audit failures are silent — they must never break the tool.
|
|
12
|
+
*/
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.resolveAuditDestination = resolveAuditDestination;
|
|
15
|
+
exports.emitAuditEvent = emitAuditEvent;
|
|
16
|
+
const node_fs_1 = require("node:fs");
|
|
17
|
+
const node_path_1 = require("node:path");
|
|
18
|
+
/** Resolve the audit destination from the TEAMS_AUDIT_LOG environment variable. */
|
|
19
|
+
function resolveAuditDestination() {
|
|
20
|
+
const value = process.env.TEAMS_AUDIT_LOG?.trim();
|
|
21
|
+
if (!value || value === "off")
|
|
22
|
+
return "off";
|
|
23
|
+
if (value === "stderr")
|
|
24
|
+
return "stderr";
|
|
25
|
+
if (value.startsWith("file:"))
|
|
26
|
+
return value;
|
|
27
|
+
return "off";
|
|
28
|
+
}
|
|
29
|
+
/** Emit a structured audit event to the configured destination. */
|
|
30
|
+
function emitAuditEvent(event) {
|
|
31
|
+
const destination = resolveAuditDestination();
|
|
32
|
+
if (destination === "off")
|
|
33
|
+
return;
|
|
34
|
+
try {
|
|
35
|
+
const line = JSON.stringify(event) + "\n";
|
|
36
|
+
if (destination === "stderr") {
|
|
37
|
+
process.stderr.write(line);
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
if (destination.startsWith("file:")) {
|
|
41
|
+
const filePath = destination.slice("file:".length);
|
|
42
|
+
const directory = (0, node_path_1.dirname)(filePath);
|
|
43
|
+
if (!(0, node_fs_1.existsSync)(directory)) {
|
|
44
|
+
(0, node_fs_1.mkdirSync)(directory, { recursive: true });
|
|
45
|
+
}
|
|
46
|
+
(0, node_fs_1.appendFileSync)(filePath, line, "utf-8");
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
// Audit failures must never surface to the user
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=audit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit.js","sourceRoot":"","sources":["../src/audit.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;AAOH,0DAMC;AAGD,wCAuBC;AArCD,qCAAgE;AAChE,yCAAoC;AAGpC,mFAAmF;AACnF,SAAgB,uBAAuB;IACrC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,EAAE,CAAC;IAClD,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC;IAC5C,IAAI,KAAK,KAAK,QAAQ;QAAE,OAAO,QAAQ,CAAC;IACxC,IAAI,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,KAAyB,CAAC;IAChE,OAAO,KAAK,CAAC;AACf,CAAC;AAED,mEAAmE;AACnE,SAAgB,cAAc,CAAC,KAAiB;IAC9C,MAAM,WAAW,GAAG,uBAAuB,EAAE,CAAC;IAC9C,IAAI,WAAW,KAAK,KAAK;QAAE,OAAO;IAElC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;QAE1C,IAAI,WAAW,KAAK,QAAQ,EAAE,CAAC;YAC7B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC3B,OAAO;QACT,CAAC;QAED,IAAI,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACpC,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACnD,MAAM,SAAS,GAAG,IAAA,mBAAO,EAAC,QAAQ,CAAC,CAAC;YACpC,IAAI,CAAC,IAAA,oBAAU,EAAC,SAAS,CAAC,EAAE,CAAC;gBAC3B,IAAA,mBAAS,EAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC5C,CAAC;YACD,IAAA,wBAAc,EAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,gDAAgD;IAClD,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-login.d.ts","sourceRoot":"","sources":["../../src/auth/auto-login.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAiBhE;;;;;;;;;;;;GAYG;AACH,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,UAAU,CAAC,
|
|
1
|
+
{"version":3,"file":"auto-login.d.ts","sourceRoot":"","sources":["../../src/auth/auto-login.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAiBhE;;;;;;;;;;;;GAYG;AACH,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,UAAU,CAAC,CAqJrB"}
|
package/dist/auth/auto-login.js
CHANGED
|
@@ -34,9 +34,7 @@ async function acquireTokenViaAutoLogin(options) {
|
|
|
34
34
|
const chromePath = options.chromePath ?? DEFAULT_SYSTEM_CHROME_PATH;
|
|
35
35
|
const profileDirectory = options.profileDirectory ?? DEFAULT_PROFILE_DIRECTORY;
|
|
36
36
|
const headless = options.headless ?? true;
|
|
37
|
-
const log = options.verbose
|
|
38
|
-
? console.error.bind(console)
|
|
39
|
-
: () => { };
|
|
37
|
+
const log = options.log ?? (options.verbose ? console.error.bind(console) : () => { });
|
|
40
38
|
// Clean up any previous profile to ensure a fresh session
|
|
41
39
|
const { rmSync } = await import("node:fs");
|
|
42
40
|
rmSync(profileDirectory, { recursive: true, force: true });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-login.js","sourceRoot":"","sources":["../../src/auth/auto-login.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;AAgCH,
|
|
1
|
+
{"version":3,"file":"auto-login.js","sourceRoot":"","sources":["../../src/auth/auto-login.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;AAgCH,4DAuJC;AApLD,4CAAkD;AAClD,+DAA0D;AAC1D,yDAK4B;AAE5B,MAAM,SAAS,GAAG,gCAAgC,CAAC;AACnD,MAAM,0BAA0B,GAC9B,8DAA8D,CAAC;AACjE,MAAM,yBAAyB,GAAG,+BAA+B,CAAC;AAClE,MAAM,kBAAkB,GAAG,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;AAC1C,MAAM,sBAAsB,GAAG,EAAE,GAAG,KAAK,CAAC;AAE1C;;;;;;;;;;;;GAYG;AACI,KAAK,UAAU,wBAAwB,CAC5C,OAAyB;IAEzB,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;IAEhD,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,0BAA0B,CAAC;IACpE,MAAM,gBAAgB,GACpB,OAAO,CAAC,gBAAgB,IAAI,yBAAyB,CAAC;IACxD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC;IAC1C,MAAM,GAAG,GACP,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAE5E,0DAA0D;IAC1D,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;IAC3C,MAAM,CAAC,gBAAgB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAE3D,GAAG,CAAC,wCAAwC,CAAC,CAAC;IAC9C,MAAM,aAAa,GAAG,QAAQ,CAAC,uBAAuB,CAAC,gBAAgB,EAAE;QACvE,QAAQ;QACR,cAAc,EAAE,UAAU;QAC1B,IAAI,EAAE;YACJ,+CAA+C;YAC/C,0CAA0C;YAC1C,gDAAgD;YAChD,gBAAgB;YAChB,4BAA4B;SAC7B;QACD,iBAAiB,EAAE,CAAC,sDAAsD,CAAC;KAC5E,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC;QACjC,aAAa;QACb,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAC/B,UAAU,CACR,GAAG,EAAE,CACH,MAAM,CACJ,IAAI,KAAK,CACP,iCAAiC,sBAAsB,GAAG,KAAK,GAAG,CACnE,CACF,EACH,sBAAsB,CACvB,CACF;KACO,CAAC,CAAC;IACZ,GAAG,CAAC,8BAA8B,CAAC,CAAC;IAEpC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QAE7D,GAAG,CAAC,wBAAwB,CAAC,CAAC;QAC9B,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACzB,SAAS,EAAE,kBAAkB;YAC7B,OAAO,EAAE,kBAAkB;SAC5B,CAAC,CAAC;QAEH,+BAA+B;QAC/B,GAAG,CAAC,gBAAgB,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAClC,GAAG,CAAC,oCAAoC,CAAC,CAAC;QAC1C,MAAM,IAAI;aACP,UAAU,CAAC,mDAAmD,EAAE;YAC/D,OAAO,EAAE,kBAAkB;SAC5B,CAAC;aACD,KAAK,CAAC,GAAG,EAAE;YACV,GAAG,CAAC,oDAAoD,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;QAEL,+CAA+C;QAC/C,IACE,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;YAChD,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EAC1C,CAAC;YACD,GAAG,CAAC,kCAAkC,CAAC,CAAC;YAExC,MAAM,UAAU,GAAG,MAAM,IAAI;iBAC1B,eAAe,CACd,qDAAqD,EACrD,EAAE,OAAO,EAAE,MAAM,EAAE,CACpB;iBACA,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;YAErB,IAAI,UAAU,EAAE,CAAC;gBACf,MAAM,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBAErC,MAAM,UAAU,GAAG,MAAM,IAAI;qBAC1B,eAAe,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;qBACnD,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;gBACrB,IAAI,UAAU,EAAE,CAAC;oBACf,GAAG,CAAC,qBAAqB,CAAC,CAAC;oBAC3B,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC;gBAC3B,CAAC;YACH,CAAC;YAED,sEAAsE;YACtE,GAAG,CAAC,2CAA2C,CAAC,CAAC;YACjD,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,kBAAkB,CAAC;YACtD,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,aAAa,EAAE,CAAC;gBAClC,MAAM,KAAK,GAAG,MAAM,IAAA,uCAAiB,EAAC,IAAI,CAAC,CAAC;gBAC5C,IAAI,KAAK,CAAC,KAAK,KAAK,cAAc,IAAI,KAAK,CAAC,KAAK,KAAK,eAAe,EAAE,CAAC;oBACtE,GAAG,CAAC,kBAAkB,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;oBACtC,MAAM;gBACR,CAAC;gBACD,GAAG,CAAC,mBAAmB,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;gBACvC,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAC5B,UAAU,CAAC,OAAO,EAAE,2CAAwB,CAAC,CAC9C,CAAC;YACJ,CAAC;YAED,8BAA8B;YAC9B,IACE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;gBAC7C,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EAC3C,CAAC;gBACD,MAAM,KAAK,GAAG,MAAM,IAAA,uCAAiB,EAAC,IAAI,CAAC,CAAC;gBAC5C,MAAM,IAAI,KAAK,CACb,iCAAiC,kBAAkB,GAAG,KAAK,KAAK;oBAC9D,kBAAkB,KAAK,CAAC,KAAK,MAAM,KAAK,CAAC,MAAM,UAAU,KAAK,CAAC,GAAG,GAAG,CACxE,CAAC;YACJ,CAAC;QACH,CAAC;QAED,GAAG,CAAC,6BAA6B,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAE/C,mCAAmC;QACnC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QAC3B,MAAM,EACJ,UAAU,EACV,MAAM,EACN,WAAW,EACX,cAAc,EACd,QAAQ,EACR,eAAe,EACf,cAAc,GACf,GAAG,MAAM,IAAA,wCAAqB,EAAC,IAAI,EAAE,GAAG,EAAE,0CAAuB,CAAC,CAAC;QAEpE,OAAO;YACL,UAAU;YACV,MAAM,EAAE,IAAA,8BAAkB,EAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC;YAClD,WAAW;YACX,cAAc;YACd,QAAQ;YACR,eAAe;YACf,cAAc;SACf,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC;YACH,MAAM,CAAC,gBAAgB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7D,CAAC;QAAC,MAAM,CAAC;YACP,sBAAsB;QACxB,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -1 +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;AAiBvE;;;;;;;;;;GAUG;AACH,wBAAsB,+BAA+B,CACnD,OAAO,CAAC,EAAE,uBAAuB,GAChC,OAAO,CAAC,UAAU,CAAC,
|
|
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;AAiBvE;;;;;;;;;;GAUG;AACH,wBAAsB,+BAA+B,CACnD,OAAO,CAAC,EAAE,uBAAuB,GAChC,OAAO,CAAC,UAAU,CAAC,CAqGrB"}
|
package/dist/auth/interactive.js
CHANGED
|
@@ -27,18 +27,16 @@ const INTERACTIVE_LOGIN_TIMEOUT = 5 * 60 * 1_000;
|
|
|
27
27
|
*/
|
|
28
28
|
async function acquireTokenViaInteractiveLogin(options) {
|
|
29
29
|
const { chromium } = await import("playwright");
|
|
30
|
-
const log = options?.verbose
|
|
31
|
-
? console.error.bind(console)
|
|
32
|
-
: () => { };
|
|
30
|
+
const log = options?.log ?? (options?.verbose ? console.error.bind(console) : () => { });
|
|
33
31
|
log("Launching browser for interactive login...");
|
|
34
32
|
const profileDir = (0, browser_runtime_js_1.getDefaultBrowserProfileDir)();
|
|
35
33
|
log(`Using browser profile: ${profileDir}`);
|
|
36
34
|
const context = await (0, browser_runtime_js_1.launchInteractiveBrowserContext)(chromium, log, profileDir);
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
35
|
+
const existingPages = context.pages();
|
|
36
|
+
const page = existingPages[0] ?? (await context.newPage());
|
|
37
|
+
for (const stalePage of existingPages.slice(1)) {
|
|
38
|
+
await stalePage.close();
|
|
40
39
|
}
|
|
41
|
-
const page = await context.newPage();
|
|
42
40
|
try {
|
|
43
41
|
log("Navigating to Teams...");
|
|
44
42
|
await page.goto(TEAMS_URL, {
|
|
@@ -80,7 +78,7 @@ async function acquireTokenViaInteractiveLogin(options) {
|
|
|
80
78
|
`Current state: ${state.phase} — ${state.detail} (URL: ${state.url})`);
|
|
81
79
|
}
|
|
82
80
|
log("Login detected, capturing token...");
|
|
83
|
-
const { skypeToken, region, bearerToken, substrateToken, amsToken, sharePointToken, } = await (0, token_capture_js_1.captureTokensFromPage)(page, log, token_capture_js_1.TOKEN_INTERCEPT_TIMEOUT);
|
|
81
|
+
const { skypeToken, region, bearerToken, substrateToken, amsToken, sharePointToken, sharePointHost, } = await (0, token_capture_js_1.captureTokensFromPage)(page, log, token_capture_js_1.TOKEN_INTERCEPT_TIMEOUT);
|
|
84
82
|
return {
|
|
85
83
|
skypeToken,
|
|
86
84
|
region: (0, region_js_1.resolveTeamsRegion)(options?.region, region),
|
|
@@ -88,6 +86,7 @@ async function acquireTokenViaInteractiveLogin(options) {
|
|
|
88
86
|
substrateToken,
|
|
89
87
|
amsToken,
|
|
90
88
|
sharePointToken,
|
|
89
|
+
sharePointHost,
|
|
91
90
|
};
|
|
92
91
|
}
|
|
93
92
|
finally {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interactive.js","sourceRoot":"","sources":["../../src/auth/interactive.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;AA8BH,
|
|
1
|
+
{"version":3,"file":"interactive.js","sourceRoot":"","sources":["../../src/auth/interactive.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +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;
|
|
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;AAoB7D;;;;;;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;IACnC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;CACpC,CAAC,CAyPD"}
|
|
@@ -13,6 +13,22 @@ const page_diagnostics_js_1 = require("./page-diagnostics.js");
|
|
|
13
13
|
exports.TOKEN_INTERCEPT_TIMEOUT = 90 * 1_000;
|
|
14
14
|
exports.PAGE_RELOAD_TIMEOUT = 30 * 1_000;
|
|
15
15
|
exports.PAGE_STATE_POLL_INTERVAL = 3 * 1_000;
|
|
16
|
+
const FALLBACK_SKYPE_TOKEN_GRACE_PERIOD = 5 * 1_000;
|
|
17
|
+
function isChatServiceRequest(requestUrl) {
|
|
18
|
+
try {
|
|
19
|
+
const url = new URL(requestUrl);
|
|
20
|
+
return url.hostname.toLowerCase().endsWith(".ng.msg.teams.microsoft.com");
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
function normalizeSkypeTokenHeader(value) {
|
|
27
|
+
const prefix = "skypetoken=";
|
|
28
|
+
return value.toLowerCase().startsWith(prefix)
|
|
29
|
+
? value.slice(prefix.length)
|
|
30
|
+
: value;
|
|
31
|
+
}
|
|
16
32
|
/**
|
|
17
33
|
* Wait for the page to reach Teams and capture authentication tokens via CDP.
|
|
18
34
|
*
|
|
@@ -24,6 +40,7 @@ exports.PAGE_STATE_POLL_INTERVAL = 3 * 1_000;
|
|
|
24
40
|
async function captureTokensFromPage(page, log, interceptTimeout) {
|
|
25
41
|
const cdpSession = (await page.context().newCDPSession(page));
|
|
26
42
|
let skypeToken = null;
|
|
43
|
+
let fallbackSkypeToken = null;
|
|
27
44
|
let region = null;
|
|
28
45
|
let bearerToken = null;
|
|
29
46
|
let substrateToken = null;
|
|
@@ -38,20 +55,60 @@ async function captureTokensFromPage(page, log, interceptTimeout) {
|
|
|
38
55
|
const tokenPromise = new Promise((resolve) => {
|
|
39
56
|
const timeout = setTimeout(() => {
|
|
40
57
|
log("Token intercept timed out");
|
|
58
|
+
if (fallbackTimeout) {
|
|
59
|
+
clearTimeout(fallbackTimeout);
|
|
60
|
+
}
|
|
61
|
+
if (!skypeToken && fallbackSkypeToken) {
|
|
62
|
+
skypeToken = fallbackSkypeToken;
|
|
63
|
+
log("Using fallback Skype token from non-chat request headers");
|
|
64
|
+
}
|
|
41
65
|
resolve();
|
|
42
66
|
}, interceptTimeout);
|
|
67
|
+
let fallbackTimeout = null;
|
|
68
|
+
function resolveWithToken() {
|
|
69
|
+
if (resolved) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
resolved = true;
|
|
73
|
+
if (fallbackTimeout) {
|
|
74
|
+
clearTimeout(fallbackTimeout);
|
|
75
|
+
}
|
|
76
|
+
log("Skype token captured from request headers");
|
|
77
|
+
clearTimeout(timeout);
|
|
78
|
+
resolve();
|
|
79
|
+
}
|
|
80
|
+
function scheduleFallbackResolution() {
|
|
81
|
+
if (fallbackTimeout) {
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
fallbackTimeout = setTimeout(() => {
|
|
85
|
+
if (!skypeToken && fallbackSkypeToken) {
|
|
86
|
+
skypeToken = fallbackSkypeToken;
|
|
87
|
+
log("Using fallback Skype token from non-chat request headers");
|
|
88
|
+
resolveWithToken();
|
|
89
|
+
}
|
|
90
|
+
}, FALLBACK_SKYPE_TOKEN_GRACE_PERIOD);
|
|
91
|
+
}
|
|
43
92
|
cdpSession.on("Fetch.requestPaused", async (event) => {
|
|
44
93
|
const request = event.request;
|
|
45
94
|
const requestId = event.requestId;
|
|
46
95
|
const requestUrl = request.url ?? "";
|
|
96
|
+
const isChatService = isChatServiceRequest(requestUrl);
|
|
47
97
|
const detectedRegion = (0, region_js_1.detectTeamsRegionFromUrl)(requestUrl);
|
|
48
|
-
if (detectedRegion && !region) {
|
|
98
|
+
if (detectedRegion && (isChatService || !region)) {
|
|
49
99
|
region = detectedRegion;
|
|
50
100
|
log(`Detected Teams region from request URL: ${region}`);
|
|
51
101
|
}
|
|
52
102
|
for (const [name, value] of Object.entries(request.headers ?? {})) {
|
|
53
|
-
if (name.toLowerCase() === "x-skypetoken"
|
|
54
|
-
|
|
103
|
+
if (name.toLowerCase() === "x-skypetoken") {
|
|
104
|
+
const normalizedToken = normalizeSkypeTokenHeader(value);
|
|
105
|
+
if (isChatService && !skypeToken) {
|
|
106
|
+
skypeToken = normalizedToken;
|
|
107
|
+
}
|
|
108
|
+
else if (!fallbackSkypeToken) {
|
|
109
|
+
fallbackSkypeToken = normalizedToken;
|
|
110
|
+
scheduleFallbackResolution();
|
|
111
|
+
}
|
|
55
112
|
}
|
|
56
113
|
if (name.toLowerCase() === "authorization" &&
|
|
57
114
|
value.startsWith("Bearer ")) {
|
|
@@ -70,11 +127,8 @@ async function captureTokensFromPage(page, log, interceptTimeout) {
|
|
|
70
127
|
catch {
|
|
71
128
|
// Request may have already been handled
|
|
72
129
|
}
|
|
73
|
-
if (skypeToken
|
|
74
|
-
|
|
75
|
-
log("Skype token captured from request headers");
|
|
76
|
-
clearTimeout(timeout);
|
|
77
|
-
resolve();
|
|
130
|
+
if (skypeToken) {
|
|
131
|
+
resolveWithToken();
|
|
78
132
|
}
|
|
79
133
|
});
|
|
80
134
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token-capture.js","sourceRoot":"","sources":["../../src/auth/token-capture.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;
|
|
1
|
+
{"version":3,"file":"token-capture.js","sourceRoot":"","sources":["../../src/auth/token-capture.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,6 +24,17 @@ export declare function getDefaultBrowserProfileDir(): string;
|
|
|
24
24
|
export declare function getInteractiveBrowserChannels(platform?: NodeJS.Platform): InteractiveBrowserChannel[];
|
|
25
25
|
export declare function isMissingPlaywrightBrowserError(error: unknown): boolean;
|
|
26
26
|
export declare function installBundledChromium(log: LogFunction): void;
|
|
27
|
+
/**
|
|
28
|
+
* Detect whether a browser launch error is caused by a locked profile
|
|
29
|
+
* (Chromium exit code 21 or SingletonLock contention).
|
|
30
|
+
*/
|
|
31
|
+
export declare function isProfileLockError(error: unknown): boolean;
|
|
32
|
+
/**
|
|
33
|
+
* Attempt to remove a stale SingletonLock file from a browser profile.
|
|
34
|
+
* Only removes the lock if the PID it references is not running.
|
|
35
|
+
* Returns true if the lock was successfully cleaned.
|
|
36
|
+
*/
|
|
37
|
+
export declare function cleanStaleSingletonLock(profileDir: string, log: LogFunction): boolean;
|
|
27
38
|
export declare function launchInteractiveBrowser(chromium: ChromiumBrowserLauncher, log: LogFunction, options?: {
|
|
28
39
|
platform?: NodeJS.Platform;
|
|
29
40
|
installBundledChromium?: (log: LogFunction) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-runtime.d.ts","sourceRoot":"","sources":["../src/browser-runtime.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"browser-runtime.d.ts","sourceRoot":"","sources":["../src/browser-runtime.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAI1D,KAAK,WAAW,GAAG,CAAC,GAAG,UAAU,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;AACtD,KAAK,yBAAyB,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAErD,MAAM,WAAW,uBAAuB;IACtC,MAAM,CAAC,OAAO,EAAE;QACd,QAAQ,EAAE,KAAK,CAAC;QAChB,OAAO,CAAC,EAAE,yBAAyB,CAAC;KACrC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACtB;AAED,MAAM,WAAW,yBAA0B,SAAQ,uBAAuB;IACxE,uBAAuB,CACrB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE;QACP,QAAQ,EAAE,KAAK,CAAC;QAChB,OAAO,CAAC,EAAE,yBAAyB,CAAC;KACrC,GACA,OAAO,CAAC,cAAc,CAAC,CAAC;CAC5B;AAED,wBAAgB,2BAA2B,IAAI,MAAM,CAEpD;AAmBD,wBAAgB,6BAA6B,CAC3C,QAAQ,GAAE,MAAM,CAAC,QAA2B,GAC3C,yBAAyB,EAAE,CAE7B;AAED,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAIvE;AAED,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI,CAgC7D;AAkBD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAS1D;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE,WAAW,GACf,OAAO,CAkCT;AAWD,wBAAsB,wBAAwB,CAC5C,QAAQ,EAAE,uBAAuB,EACjC,GAAG,EAAE,WAAW,EAChB,OAAO,CAAC,EAAE;IACR,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC3B,sBAAsB,CAAC,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,IAAI,CAAC;CACrD,GACA,OAAO,CAAC,OAAO,CAAC,CAoClB;AAED,wBAAsB,+BAA+B,CACnD,QAAQ,EAAE,yBAAyB,EACnC,GAAG,EAAE,WAAW,EAChB,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE;IACR,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC3B,sBAAsB,CAAC,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,IAAI,CAAC;CACrD,GACA,OAAO,CAAC,cAAc,CAAC,CA+BzB"}
|