@sam2kb/m365-mcp 1.0.8 → 1.1.1
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/.env.example +4 -0
- package/README.md +32 -11
- package/SKILL.md +14 -6
- package/dist/auth-cli.js +1 -1
- package/dist/auth-cli.js.map +1 -1
- package/dist/auth.js +73 -17
- package/dist/auth.js.map +1 -1
- package/dist/graph.d.ts +3 -1
- package/dist/graph.js +88 -26
- package/dist/graph.js.map +1 -1
- package/dist/index.js +11 -3
- package/dist/index.js.map +1 -1
- package/dist/security.js +6 -2
- package/dist/security.js.map +1 -1
- package/dist/tools/calendar.d.ts +55 -1
- package/dist/tools/calendar.js +104 -46
- package/dist/tools/calendar.js.map +1 -1
- package/dist/tools/contacts.js +1 -8
- package/dist/tools/contacts.js.map +1 -1
- package/dist/tools/files.d.ts +6 -0
- package/dist/tools/files.js +6 -5
- package/dist/tools/files.js.map +1 -1
- package/dist/tools/mail.d.ts +4 -0
- package/dist/tools/mail.js +12 -6
- package/dist/tools/mail.js.map +1 -1
- package/dist/tools/tasks.d.ts +2 -0
- package/dist/tools/tasks.js +6 -3
- package/dist/tools/tasks.js.map +1 -1
- package/dist/tools/teams.d.ts +4 -0
- package/dist/tools/teams.js +8 -7
- package/dist/tools/teams.js.map +1 -1
- package/dist/tools/users.d.ts +2 -0
- package/dist/tools/users.js +13 -6
- package/dist/tools/users.js.map +1 -1
- package/dist/types.d.ts +8 -0
- package/dist/validation.d.ts +7 -0
- package/dist/validation.js +26 -0
- package/dist/validation.js.map +1 -0
- package/dist/version.d.ts +1 -0
- package/dist/version.js +4 -0
- package/dist/version.js.map +1 -0
- package/package.json +3 -3
package/.env.example
CHANGED
|
@@ -8,6 +8,10 @@ M365_TIMEZONE=America/New_York
|
|
|
8
8
|
# and reject direct calls to them.
|
|
9
9
|
# M365_MCP_READ_ONLY=true
|
|
10
10
|
|
|
11
|
+
# Optional organization directory access. Requires delegated User.Read.All
|
|
12
|
+
# and admin consent. Set for both authentication and server startup.
|
|
13
|
+
# M365_MCP_DIRECTORY_READ=true
|
|
14
|
+
|
|
11
15
|
# Optional auth storage override (default: ~/.m365-mcp/auth)
|
|
12
16
|
# Use an absolute path; variable expansion is not supported by every .env loader.
|
|
13
17
|
# M365_MCP_AUTH_DIR=/absolute/path/to/m365-mcp-auth
|
package/README.md
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
|
|
6
6
|
**Production-grade Microsoft 365 MCP server** — Email, Calendar, Contacts, OneDrive, Teams, Tasks, and Users via delegated OAuth.
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
Combines delegated OAuth and multiple accounts with MCP tools, pagination, rate-limit handling, timezone-aware calendars, and TypeScript.
|
|
9
9
|
|
|
10
10
|
## Why this exists
|
|
11
11
|
|
|
@@ -33,7 +33,7 @@ as reviewed on July 18, 2026.
|
|
|
33
33
|
| Tasks | ✅ | ❌ | ✅ |
|
|
34
34
|
| Users | ✅ | ❌ | ✅ |
|
|
35
35
|
| Implementation | TypeScript | JavaScript CLI | TypeScript |
|
|
36
|
-
| Interface coverage | 19 MCP tools | CLI scripts | **
|
|
36
|
+
| Interface coverage | 19 MCP tools | CLI scripts | **46 MCP tools** |
|
|
37
37
|
|
|
38
38
|
`m365-mcp` does not store a client secret or password. Tenant and client IDs are
|
|
39
39
|
non-secret identifiers; sensitive OAuth access and refresh tokens are stored
|
|
@@ -42,14 +42,14 @@ the storage and revocation details.
|
|
|
42
42
|
|
|
43
43
|
## Scope
|
|
44
44
|
|
|
45
|
-
|
|
45
|
+
The app uses delegated permissions. Microsoft Graph limits access to the granted scopes and what the signed-in user can access, including shared resources where permitted.
|
|
46
46
|
|
|
47
47
|
- `Mail.Read` / `Mail.ReadWrite` / `Mail.Send`
|
|
48
48
|
- `Calendars.Read` / `Calendars.ReadWrite`
|
|
49
49
|
- `Contacts.Read` / `Contacts.ReadWrite`
|
|
50
50
|
- `People.Read` (relevance-ranked people search)
|
|
51
|
-
- `Files.Read.All` (your
|
|
52
|
-
- `Tasks.ReadWrite` (To Do)
|
|
51
|
+
- `Files.Read.All` / `Files.ReadWrite` (read accessible files and create folders in your drive)
|
|
52
|
+
- `Tasks.Read` / `Tasks.ReadWrite` (To Do)
|
|
53
53
|
- `Chat.Read` / `Chat.ReadWrite` (Teams)
|
|
54
54
|
- `User.Read` + `offline_access`
|
|
55
55
|
|
|
@@ -91,6 +91,8 @@ Contacts.Read
|
|
|
91
91
|
Contacts.ReadWrite
|
|
92
92
|
People.Read
|
|
93
93
|
Files.Read.All
|
|
94
|
+
Files.ReadWrite
|
|
95
|
+
Tasks.Read
|
|
94
96
|
Tasks.ReadWrite
|
|
95
97
|
Chat.Read
|
|
96
98
|
Chat.ReadWrite
|
|
@@ -98,7 +100,7 @@ Chat.ReadWrite
|
|
|
98
100
|
|
|
99
101
|
Click **Grant admin consent** (or each user will consent individually during login).
|
|
100
102
|
|
|
101
|
-
> Organization-wide user listing and lookup
|
|
103
|
+
> Organization-wide user listing and lookup require delegated `User.Read.All` with admin consent. To use these tools, add that permission to the registration and set `M365_MCP_DIRECTORY_READ=true` during authentication and server startup. This broader scope is off by default.
|
|
102
104
|
|
|
103
105
|
### 3. Install
|
|
104
106
|
|
|
@@ -203,7 +205,11 @@ node dist/auth-cli.js list
|
|
|
203
205
|
|
|
204
206
|
Each account needs its own App Registration in its respective tenant. Tokens are isolated per account.
|
|
205
207
|
|
|
206
|
-
|
|
208
|
+
Changing an account's tenant or client ID clears that account's cached tokens.
|
|
209
|
+
Sign in again after changing permissions or the read-only/directory settings.
|
|
210
|
+
Login checks cached permissions before reusing a token.
|
|
211
|
+
|
|
212
|
+
## Available Tools (46)
|
|
207
213
|
|
|
208
214
|
### 📧 Mail (9 tools)
|
|
209
215
|
| Tool | Description |
|
|
@@ -218,7 +224,7 @@ Each account needs its own App Registration in its respective tenant. Tokens are
|
|
|
218
224
|
| `m365_mail_mark_read` | Mark as read/unread |
|
|
219
225
|
| `m365_mail_folders` | List all mail folders with counts |
|
|
220
226
|
|
|
221
|
-
### 📅 Calendar (
|
|
227
|
+
### 📅 Calendar (9 tools)
|
|
222
228
|
| Tool | Description |
|
|
223
229
|
|---|---|
|
|
224
230
|
| `m365_calendar_list` | Events in a date range (paginated) |
|
|
@@ -226,9 +232,15 @@ Each account needs its own App Registration in its respective tenant. Tokens are
|
|
|
226
232
|
| `m365_calendar_week` | Week view grouped by day |
|
|
227
233
|
| `m365_calendar_create` | Create event (optional Teams meeting) |
|
|
228
234
|
| `m365_calendar_update` | Update event |
|
|
229
|
-
| `m365_calendar_delete` |
|
|
235
|
+
| `m365_calendar_delete` | Legacy alias for organizer cancellation |
|
|
236
|
+
| `m365_calendar_cancel` | Cancel an event you organize and notify attendees |
|
|
237
|
+
| `m365_calendar_decline` | Decline an invitation as an attendee |
|
|
230
238
|
| `m365_calendar_availability` | Free/busy lookup |
|
|
231
239
|
|
|
240
|
+
Calendar listings include `isOrganizer` and `responseStatus` so clients can
|
|
241
|
+
choose the correct action. Cancellation is organizer-only and notifies attendees;
|
|
242
|
+
decline is attendee-only. There is no ambiguous silent-remove tool.
|
|
243
|
+
|
|
232
244
|
### 👤 Contacts (12 tools)
|
|
233
245
|
| Tool | Description |
|
|
234
246
|
|---|---|
|
|
@@ -263,6 +275,9 @@ Outlook Contact Lists or their membership.
|
|
|
263
275
|
| `m365_files_info` | File/folder metadata |
|
|
264
276
|
| `m365_files_create_folder` | Create folder |
|
|
265
277
|
|
|
278
|
+
Text reads default to 50,000 bytes and accept `maxBytes` from 0 to 1,000,000.
|
|
279
|
+
The downloader stops reading at that limit, including when the server returns a larger file.
|
|
280
|
+
|
|
266
281
|
### 💬 Teams (3 tools)
|
|
267
282
|
| Tool | Description |
|
|
268
283
|
|---|---|
|
|
@@ -288,6 +303,8 @@ Outlook Contact Lists or their membership.
|
|
|
288
303
|
|
|
289
304
|
## Development
|
|
290
305
|
|
|
306
|
+
Use Node.js 20 or later for the development test runner. CI tests on Linux and Windows with Node.js 24.
|
|
307
|
+
|
|
291
308
|
```bash
|
|
292
309
|
npm install
|
|
293
310
|
npm run dev # tsx watch mode
|
|
@@ -301,7 +318,7 @@ npm run build # compile TypeScript
|
|
|
301
318
|
- **Device code flow** — you never type your password into anything but Microsoft's login page.
|
|
302
319
|
- **Sensitive reads** — mail, files, calendar entries, contacts, Teams messages,
|
|
303
320
|
tasks, and user profiles can enter the MCP client's model context.
|
|
304
|
-
- **Real side effects** — send, reply, move, create, update, and delete tools
|
|
321
|
+
- **Real side effects** — send, reply, move, create, update, cancel, decline, and delete tools
|
|
305
322
|
change Microsoft 365 data. Configure your MCP client to require explicit user
|
|
306
323
|
approval before it invokes them.
|
|
307
324
|
- **MCP safety annotations** — every tool declares read-only, destructive,
|
|
@@ -313,7 +330,11 @@ npm run build # compile TypeScript
|
|
|
313
330
|
by `0700` directories and `0600` files where supported. Protect
|
|
314
331
|
`~/.m365-mcp/auth/` or your configured `M365_MCP_AUTH_DIR`.
|
|
315
332
|
- **Auto-refresh** — tokens refreshed before expiry, expired refresh tokens trigger re-auth.
|
|
316
|
-
- **
|
|
333
|
+
- **Network destinations** — OAuth uses `login.microsoftonline.com`; API calls use `graph.microsoft.com`. File reads also follow HTTPS download URLs supplied by Graph, such as OneDrive and SharePoint URLs. The Graph bearer token is attached only to Graph-origin requests. The server has no telemetry or analytics.
|
|
334
|
+
|
|
335
|
+
Reads retry temporary failures and honor `Retry-After` for 429 and 503 responses.
|
|
336
|
+
Writes retry explicit throttling responses, but connection failures or server errors
|
|
337
|
+
can leave their outcome uncertain. Check the target before trying those writes again.
|
|
317
338
|
|
|
318
339
|
To delete a local token, remove its account:
|
|
319
340
|
|
package/SKILL.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: m365-mcp
|
|
3
|
-
description: Production-grade Microsoft 365 MCP server with delegated OAuth, multi-account support, pagination, rate limiting, and
|
|
3
|
+
description: Production-grade Microsoft 365 MCP server with delegated OAuth, multi-account support, pagination, rate limiting, and 46 tools covering email, calendar, contacts, OneDrive, Teams, tasks, and users.
|
|
4
4
|
metadata:
|
|
5
5
|
openclaw:
|
|
6
6
|
homepage: https://github.com/sam2kb/m365-mcp#readme
|
|
@@ -21,6 +21,9 @@ metadata:
|
|
|
21
21
|
- name: M365_MCP_READ_ONLY
|
|
22
22
|
required: false
|
|
23
23
|
description: Set true to request read-only scopes and disable all mutating tools.
|
|
24
|
+
- name: M365_MCP_DIRECTORY_READ
|
|
25
|
+
required: false
|
|
26
|
+
description: Opt in to delegated User.Read.All for organization directory tools; requires admin consent.
|
|
24
27
|
install:
|
|
25
28
|
- kind: node
|
|
26
29
|
package: "@sam2kb/m365-mcp"
|
|
@@ -45,9 +48,9 @@ Production-grade Microsoft 365 MCP server combining the best of office365-connec
|
|
|
45
48
|
|
|
46
49
|
- List, read, send, reply, search, move, delete, mark read/unread, list folders
|
|
47
50
|
|
|
48
|
-
### Calendar (
|
|
51
|
+
### Calendar (9 tools)
|
|
49
52
|
|
|
50
|
-
- List events, today view, week view, create (with Teams meeting), update,
|
|
53
|
+
- List events with organizer/response status, today view, week view, create (with Teams meeting), update, explicit organizer cancellation, attendee decline, free/busy
|
|
51
54
|
|
|
52
55
|
### Contacts (12 tools)
|
|
53
56
|
|
|
@@ -71,11 +74,12 @@ Production-grade Microsoft 365 MCP server combining the best of office365-connec
|
|
|
71
74
|
|
|
72
75
|
## Security and consent
|
|
73
76
|
|
|
74
|
-
-
|
|
75
|
-
|
|
77
|
+
- OAuth and API requests use `login.microsoftonline.com` and `graph.microsoft.com`.
|
|
78
|
+
File reads also use HTTPS download URLs supplied by Graph, including OneDrive
|
|
79
|
+
and SharePoint hosts. Off-origin downloads do not receive the Graph bearer token.
|
|
76
80
|
- Device-code OAuth grants delegated access as the signed-in user. Read tools can
|
|
77
81
|
expose private mail, files, calendars, contacts, Teams chats, tasks, and user data.
|
|
78
|
-
- Send, reply, move, create, update, and delete tools change real Microsoft 365
|
|
82
|
+
- Send, reply, move, create, update, cancel, decline, and delete tools change real Microsoft 365
|
|
79
83
|
data. Configure the MCP client to require explicit user approval for those tools.
|
|
80
84
|
- Tools publish standard MCP read-only, destructive, idempotent, and open-world
|
|
81
85
|
annotations so compatible clients can apply confirmation policies.
|
|
@@ -86,6 +90,10 @@ Production-grade Microsoft 365 MCP server combining the best of office365-connec
|
|
|
86
90
|
`~/.m365-mcp/auth/` (or `M365_MCP_AUTH_DIR`), protected with directory mode
|
|
87
91
|
`0700` and file mode `0600` where supported. Protect that directory and revoke
|
|
88
92
|
the app's Microsoft account consent if a token or device is compromised.
|
|
93
|
+
- File reads stop at `maxBytes` (50,000 by default; maximum 1,000,000).
|
|
94
|
+
- Set `M365_MCP_DIRECTORY_READ=true` during login and server startup to request
|
|
95
|
+
organization directory access with admin consent. Sign in again after changing
|
|
96
|
+
scope settings or an account's tenant/client registration.
|
|
89
97
|
|
|
90
98
|
## Setup
|
|
91
99
|
|
package/dist/auth-cli.js
CHANGED
|
@@ -16,7 +16,7 @@ async function main() {
|
|
|
16
16
|
const cmd = args[0];
|
|
17
17
|
const rest = args.slice(1);
|
|
18
18
|
const accountArg = rest.find((a) => a.startsWith("--account="));
|
|
19
|
-
const accountName = accountArg ? accountArg.
|
|
19
|
+
const accountName = accountArg ? accountArg.slice("--account=".length) : undefined;
|
|
20
20
|
const positional = rest.filter((a) => !a.startsWith("--"));
|
|
21
21
|
try {
|
|
22
22
|
switch (cmd) {
|
package/dist/auth-cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-cli.js","sourceRoot":"","sources":["../src/auth-cli.ts"],"names":[],"mappings":";AACA;;;;;;;;;;GAUG;AAEH,OAAO,EACL,UAAU,EACV,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,cAAc,GACf,MAAM,WAAW,CAAC;AAEnB,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC3B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC;IAChE,MAAM,WAAW,GAAG,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"auth-cli.js","sourceRoot":"","sources":["../src/auth-cli.ts"],"names":[],"mappings":"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"}
|
package/dist/auth.js
CHANGED
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
import * as fs from "node:fs";
|
|
8
8
|
import * as path from "node:path";
|
|
9
9
|
import * as os from "node:os";
|
|
10
|
+
import { randomUUID } from "node:crypto";
|
|
10
11
|
import { envFlag } from "./security.js";
|
|
11
12
|
export function resolveAuthDir(env = process.env, homeDir = os.homedir()) {
|
|
12
13
|
const configuredDir = env.M365_MCP_AUTH_DIR?.trim();
|
|
@@ -15,7 +16,7 @@ export function resolveAuthDir(env = process.env, homeDir = os.homedir()) {
|
|
|
15
16
|
const AUTH_DIR = resolveAuthDir();
|
|
16
17
|
const ACCOUNTS_PATH = path.join(AUTH_DIR, "accounts.json");
|
|
17
18
|
const TOKENS_DIR = path.join(AUTH_DIR, "tokens");
|
|
18
|
-
//
|
|
19
|
+
// Delegated scopes: Graph combines consent with the signed-in user's access.
|
|
19
20
|
export function resolveScopes(env = process.env) {
|
|
20
21
|
const scopes = [
|
|
21
22
|
"offline_access",
|
|
@@ -29,8 +30,10 @@ export function resolveScopes(env = process.env) {
|
|
|
29
30
|
"Chat.Read",
|
|
30
31
|
];
|
|
31
32
|
if (!envFlag(env.M365_MCP_READ_ONLY)) {
|
|
32
|
-
scopes.push("Mail.ReadWrite", "Mail.Send", "Calendars.ReadWrite", "Contacts.ReadWrite", "Tasks.ReadWrite", "Chat.ReadWrite");
|
|
33
|
+
scopes.push("Mail.ReadWrite", "Mail.Send", "Calendars.ReadWrite", "Contacts.ReadWrite", "Tasks.ReadWrite", "Chat.ReadWrite", "Files.ReadWrite");
|
|
33
34
|
}
|
|
35
|
+
if (envFlag(env.M365_MCP_DIRECTORY_READ))
|
|
36
|
+
scopes.push("User.Read.All");
|
|
34
37
|
return scopes.join(" ");
|
|
35
38
|
}
|
|
36
39
|
const SCOPES = resolveScopes();
|
|
@@ -40,8 +43,33 @@ export function ensureDirs() {
|
|
|
40
43
|
fs.mkdirSync(TOKENS_DIR, { recursive: true, mode: 0o700 });
|
|
41
44
|
}
|
|
42
45
|
export function getTokenPath(accountName) {
|
|
46
|
+
validateAccountName(accountName);
|
|
43
47
|
return path.join(TOKENS_DIR, `${accountName}.json`);
|
|
44
48
|
}
|
|
49
|
+
function validateAccountName(name) {
|
|
50
|
+
if (!/^[a-zA-Z0-9][a-zA-Z0-9._-]{0,63}$/.test(name) || /\.$/.test(name)) {
|
|
51
|
+
throw new Error("Account name must start with a letter or digit and contain at most 64 letters, digits, dots, underscores or hyphens");
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
function writePrivateJson(file, data) {
|
|
55
|
+
const temporary = `${file}.${randomUUID()}.tmp`;
|
|
56
|
+
try {
|
|
57
|
+
fs.writeFileSync(temporary, JSON.stringify(data, null, 2), { mode: 0o600, flag: "wx" });
|
|
58
|
+
fs.renameSync(temporary, file);
|
|
59
|
+
}
|
|
60
|
+
finally {
|
|
61
|
+
if (fs.existsSync(temporary))
|
|
62
|
+
fs.unlinkSync(temporary);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
function hasRequestedScopes(scope) {
|
|
66
|
+
const granted = new Set(scope.split(/\s+/));
|
|
67
|
+
const required = SCOPES.split(" ").filter((value) => value !== "offline_access");
|
|
68
|
+
if (!required.every((value) => granted.has(value)))
|
|
69
|
+
return false;
|
|
70
|
+
return !envFlag(process.env.M365_MCP_READ_ONLY) ||
|
|
71
|
+
![...granted].some((value) => /(?:\.ReadWrite(?:\.All)?|\.Send)$/.test(value));
|
|
72
|
+
}
|
|
45
73
|
// ─── account store ──────────────────────────────────────────────────
|
|
46
74
|
export function loadAccounts() {
|
|
47
75
|
ensureDirs();
|
|
@@ -49,18 +77,31 @@ export function loadAccounts() {
|
|
|
49
77
|
return { default: null, accounts: {} };
|
|
50
78
|
}
|
|
51
79
|
try {
|
|
52
|
-
|
|
80
|
+
const store = JSON.parse(fs.readFileSync(ACCOUNTS_PATH, "utf8"));
|
|
81
|
+
if (!store || !store.accounts || typeof store.accounts !== "object" || Array.isArray(store.accounts) ||
|
|
82
|
+
(store.default !== null && typeof store.default !== "string"))
|
|
83
|
+
throw new Error("Invalid account registry");
|
|
84
|
+
return store;
|
|
53
85
|
}
|
|
54
|
-
catch {
|
|
55
|
-
|
|
86
|
+
catch (error) {
|
|
87
|
+
throw new Error("Cannot read account registry; restore accounts.json before changing accounts", { cause: error });
|
|
56
88
|
}
|
|
57
89
|
}
|
|
58
90
|
function saveAccounts(store) {
|
|
59
91
|
ensureDirs();
|
|
60
|
-
|
|
92
|
+
writePrivateJson(ACCOUNTS_PATH, store);
|
|
61
93
|
}
|
|
62
94
|
export function addAccount(name, tenantId, clientId, email, description) {
|
|
95
|
+
validateAccountName(name);
|
|
96
|
+
if (!tenantId.trim() || !clientId.trim())
|
|
97
|
+
throw new Error("tenantId and clientId are required");
|
|
63
98
|
const store = loadAccounts();
|
|
99
|
+
const existing = Object.hasOwn(store.accounts, name) ? store.accounts[name] : undefined;
|
|
100
|
+
if (existing && (existing.tenantId !== tenantId || existing.clientId !== clientId)) {
|
|
101
|
+
const tokenPath = getTokenPath(name);
|
|
102
|
+
if (fs.existsSync(tokenPath))
|
|
103
|
+
fs.unlinkSync(tokenPath);
|
|
104
|
+
}
|
|
64
105
|
store.accounts[name] = {
|
|
65
106
|
tenantId,
|
|
66
107
|
clientId,
|
|
@@ -73,6 +114,7 @@ export function addAccount(name, tenantId, clientId, email, description) {
|
|
|
73
114
|
saveAccounts(store);
|
|
74
115
|
}
|
|
75
116
|
export function removeAccount(name) {
|
|
117
|
+
validateAccountName(name);
|
|
76
118
|
const store = loadAccounts();
|
|
77
119
|
delete store.accounts[name];
|
|
78
120
|
const tokenPath = getTokenPath(name);
|
|
@@ -85,7 +127,8 @@ export function removeAccount(name) {
|
|
|
85
127
|
}
|
|
86
128
|
export function setDefaultAccount(name) {
|
|
87
129
|
const store = loadAccounts();
|
|
88
|
-
|
|
130
|
+
validateAccountName(name);
|
|
131
|
+
if (!Object.hasOwn(store.accounts, name))
|
|
89
132
|
throw new Error(`Account "${name}" not found`);
|
|
90
133
|
store.default = name;
|
|
91
134
|
saveAccounts(store);
|
|
@@ -95,9 +138,10 @@ export function resolveAccount(accountName) {
|
|
|
95
138
|
const name = accountName ?? store.default;
|
|
96
139
|
if (!name)
|
|
97
140
|
throw new Error("No account configured. Run: m365-mcp-auth add <name> <tenantId> <clientId>");
|
|
98
|
-
|
|
99
|
-
if (!
|
|
141
|
+
validateAccountName(name);
|
|
142
|
+
if (!Object.hasOwn(store.accounts, name))
|
|
100
143
|
throw new Error(`Account "${name}" not found`);
|
|
144
|
+
const acc = store.accounts[name];
|
|
101
145
|
return { name, ...acc, tokenPath: getTokenPath(name) };
|
|
102
146
|
}
|
|
103
147
|
export function listAccounts() {
|
|
@@ -118,7 +162,9 @@ export function loadTokens(config) {
|
|
|
118
162
|
return null;
|
|
119
163
|
try {
|
|
120
164
|
const data = JSON.parse(fs.readFileSync(config.tokenPath, "utf8"));
|
|
121
|
-
if (
|
|
165
|
+
if (typeof data?.access_token !== "string" || !data.access_token ||
|
|
166
|
+
typeof data.refresh_token !== "string" || !data.refresh_token ||
|
|
167
|
+
!Number.isFinite(data.expires_at) || data.expires_at <= 0 || typeof data.scope !== "string")
|
|
122
168
|
return null;
|
|
123
169
|
return data;
|
|
124
170
|
}
|
|
@@ -135,7 +181,7 @@ function saveTokens(config, tokens) {
|
|
|
135
181
|
expires_at: tokens.expires_at,
|
|
136
182
|
scope: tokens.scope ?? SCOPES,
|
|
137
183
|
};
|
|
138
|
-
|
|
184
|
+
writePrivateJson(config.tokenPath, data);
|
|
139
185
|
return data;
|
|
140
186
|
}
|
|
141
187
|
// ─── HTTPS helper ───────────────────────────────────────────────────
|
|
@@ -152,6 +198,7 @@ async function httpsPost(url, body) {
|
|
|
152
198
|
method: "POST",
|
|
153
199
|
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
|
154
200
|
body: body.toString(),
|
|
201
|
+
signal: AbortSignal.timeout(30_000),
|
|
155
202
|
});
|
|
156
203
|
const data = await resp.json();
|
|
157
204
|
if (!resp.ok) {
|
|
@@ -161,10 +208,10 @@ async function httpsPost(url, body) {
|
|
|
161
208
|
}
|
|
162
209
|
// ─── device code flow ───────────────────────────────────────────────
|
|
163
210
|
export async function requestDeviceCode(config) {
|
|
164
|
-
return httpsPost(`https://login.microsoftonline.com/${config.tenantId}/oauth2/v2.0/devicecode`, new URLSearchParams({ client_id: config.clientId, scope: SCOPES }));
|
|
211
|
+
return httpsPost(`https://login.microsoftonline.com/${encodeURIComponent(config.tenantId)}/oauth2/v2.0/devicecode`, new URLSearchParams({ client_id: config.clientId, scope: SCOPES }));
|
|
165
212
|
}
|
|
166
213
|
async function pollForToken(deviceCode, config) {
|
|
167
|
-
const data = await httpsPost(`https://login.microsoftonline.com/${config.tenantId}/oauth2/v2.0/token`, new URLSearchParams({
|
|
214
|
+
const data = await httpsPost(`https://login.microsoftonline.com/${encodeURIComponent(config.tenantId)}/oauth2/v2.0/token`, new URLSearchParams({
|
|
168
215
|
grant_type: "urn:ietf:params:oauth:grant-type:device_code",
|
|
169
216
|
client_id: config.clientId,
|
|
170
217
|
device_code: deviceCode,
|
|
@@ -178,7 +225,7 @@ async function pollForToken(deviceCode, config) {
|
|
|
178
225
|
}
|
|
179
226
|
// ─── token refresh ──────────────────────────────────────────────────
|
|
180
227
|
async function refreshAccessToken(config, refreshToken) {
|
|
181
|
-
const data = await httpsPost(`https://login.microsoftonline.com/${config.tenantId}/oauth2/v2.0/token`, new URLSearchParams({
|
|
228
|
+
const data = await httpsPost(`https://login.microsoftonline.com/${encodeURIComponent(config.tenantId)}/oauth2/v2.0/token`, new URLSearchParams({
|
|
182
229
|
grant_type: "refresh_token",
|
|
183
230
|
client_id: config.clientId,
|
|
184
231
|
refresh_token: refreshToken,
|
|
@@ -207,6 +254,8 @@ export async function getAccessToken(accountName) {
|
|
|
207
254
|
}
|
|
208
255
|
// Still valid with 5-minute buffer
|
|
209
256
|
if (tokens.expires_at > Date.now() + 5 * 60 * 1000) {
|
|
257
|
+
if (!hasRequestedScopes(tokens.scope))
|
|
258
|
+
throw new Error(`Permissions changed for "${config.name}". Re-authenticate: m365-mcp-auth login --account=${config.name}`);
|
|
210
259
|
return tokens.access_token;
|
|
211
260
|
}
|
|
212
261
|
// Serialise refresh — if another caller is already refreshing, wait for it
|
|
@@ -222,7 +271,7 @@ export async function getAccessToken(accountName) {
|
|
|
222
271
|
async function doRefresh(config, refreshToken) {
|
|
223
272
|
// Double-check tokens haven't been refreshed by a concurrent caller
|
|
224
273
|
const current = loadTokens(config);
|
|
225
|
-
if (current && current.expires_at > Date.now() + 5 * 60 * 1000) {
|
|
274
|
+
if (current && current.expires_at > Date.now() + 5 * 60 * 1000 && hasRequestedScopes(current.scope)) {
|
|
226
275
|
return current.access_token;
|
|
227
276
|
}
|
|
228
277
|
let attempt = 0;
|
|
@@ -254,7 +303,7 @@ export async function authenticate(accountName, onPrompt) {
|
|
|
254
303
|
const config = resolveAccount(accountName);
|
|
255
304
|
// Check existing
|
|
256
305
|
const existing = loadTokens(config);
|
|
257
|
-
if (existing && existing.expires_at > Date.now() + 5 * 60 * 1000) {
|
|
306
|
+
if (existing && existing.expires_at > Date.now() + 5 * 60 * 1000 && hasRequestedScopes(existing.scope)) {
|
|
258
307
|
return existing;
|
|
259
308
|
}
|
|
260
309
|
// Request device code
|
|
@@ -262,14 +311,21 @@ export async function authenticate(accountName, onPrompt) {
|
|
|
262
311
|
onPrompt(dc.verification_uri, dc.user_code);
|
|
263
312
|
// Poll
|
|
264
313
|
const deadline = Date.now() + dc.expires_in * 1000;
|
|
314
|
+
let interval = dc.interval ?? 5;
|
|
265
315
|
while (Date.now() < deadline) {
|
|
266
|
-
await new Promise((r) => setTimeout(r,
|
|
316
|
+
await new Promise((r) => setTimeout(r, interval * 1000));
|
|
317
|
+
if (Date.now() >= deadline)
|
|
318
|
+
break;
|
|
267
319
|
try {
|
|
268
320
|
const tokens = await pollForToken(dc.device_code, config);
|
|
269
321
|
return saveTokens(config, tokens);
|
|
270
322
|
}
|
|
271
323
|
catch (err) {
|
|
272
324
|
const errorCode = err instanceof OAuthError ? err.code : undefined;
|
|
325
|
+
if (errorCode === "slow_down") {
|
|
326
|
+
interval += 5;
|
|
327
|
+
continue;
|
|
328
|
+
}
|
|
273
329
|
if (errorCode === "authorization_pending" ||
|
|
274
330
|
err.message.includes("AADSTS70016")) {
|
|
275
331
|
continue;
|
package/dist/auth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAE9B,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,MAAM,UAAU,cAAc,CAC5B,MAAyB,OAAO,CAAC,GAAG,EACpC,OAAO,GAAG,EAAE,CAAC,OAAO,EAAE;IAEtB,MAAM,aAAa,GAAG,GAAG,CAAC,iBAAiB,EAAE,IAAI,EAAE,CAAC;IACpD,OAAO,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;AAC/F,CAAC;AAED,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC;AAClC,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;AAC3D,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAEjD,mFAAmF;AACnF,MAAM,UAAU,aAAa,CAAC,MAAyB,OAAO,CAAC,GAAG;IAChE,MAAM,MAAM,GAAG;QACb,gBAAgB;QAChB,WAAW;QACX,WAAW;QACX,gBAAgB;QAChB,eAAe;QACf,aAAa;QACb,gBAAgB;QAChB,YAAY;QACZ,WAAW;KACZ,CAAC;IAEF,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAAE,CAAC;QACrC,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,WAAW,EACX,qBAAqB,EACrB,oBAAoB,EACpB,iBAAiB,EACjB,gBAAgB,CACjB,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;AAE/B,uEAAuE;AAEvE,MAAM,UAAU,UAAU;IACxB,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACzD,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,WAAmB;IAC9C,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,WAAW,OAAO,CAAC,CAAC;AACtD,CAAC;AAED,uEAAuE;AAEvE,MAAM,UAAU,YAAY;IAC1B,UAAU,EAAE,CAAC;IACb,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IACzC,CAAC;IACD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC;IAC5D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IACzC,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,KAAoB;IACxC,UAAU,EAAE,CAAC;IACb,EAAE,CAAC,aAAa,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AACnF,CAAC;AAED,MAAM,UAAU,UAAU,CACxB,IAAY,EACZ,QAAgB,EAChB,QAAgB,EAChB,KAAc,EACd,WAAoB;IAEpB,MAAM,KAAK,GAAG,YAAY,EAAE,CAAC;IAC7B,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG;QACrB,QAAQ;QACR,QAAQ;QACR,KAAK;QACL,WAAW;QACX,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACnE,CAAC;IACF,IAAI,CAAC,KAAK,CAAC,OAAO;QAAE,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;IACzC,YAAY,CAAC,KAAK,CAAC,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,MAAM,KAAK,GAAG,YAAY,EAAE,CAAC;IAC7B,OAAO,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC5B,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACrC,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IACvD,IAAI,KAAK,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;QAC3B,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IACzD,CAAC;IACD,YAAY,CAAC,KAAK,CAAC,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,MAAM,KAAK,GAAG,YAAY,EAAE,CAAC;IAC7B,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,YAAY,IAAI,aAAa,CAAC,CAAC;IAC1E,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;IACrB,YAAY,CAAC,KAAK,CAAC,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,WAAoB;IACjD,MAAM,KAAK,GAAG,YAAY,EAAE,CAAC;IAC7B,MAAM,IAAI,GAAG,WAAW,IAAI,KAAK,CAAC,OAAO,CAAC;IAC1C,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CACxB,4EAA4E,CAC7E,CAAC;IACF,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,YAAY,IAAI,aAAa,CAAC,CAAC;IACzD,OAAO,EAAE,IAAI,EAAE,GAAG,GAAG,EAAE,SAAS,EAAE,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,MAAM,KAAK,GAAG,YAAY,EAAE,CAAC;IAC7B,OAAO;QACL,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;YAC7D,GAAG,GAAG;YACN,IAAI;YACJ,SAAS,EAAE,IAAI,KAAK,KAAK,CAAC,OAAO;YACjC,SAAS,EAAE,YAAY,CAAC,IAAI,CAAC;SAC9B,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC;AAED,uEAAuE;AAEvE,MAAM,UAAU,UAAU,CAAC,MAAqB;IAC9C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC;QAAE,OAAO,IAAI,CAAC;IAClD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;QACnE,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,aAAa;YAAE,OAAO,IAAI,CAAC;QAC3D,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,MAAqB,EAAE,MAAiB;IAC1D,UAAU,EAAE,CAAC;IACb,0EAA0E;IAC1E,MAAM,IAAI,GAAc;QACtB,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,MAAM;KAC9B,CAAC;IACF,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACnF,OAAO,IAAI,CAAC;AACd,CAAC;AAED,uEAAuE;AAEvE,MAAM,UAAW,SAAQ,KAAK;IAEjB;IADX,YACW,IAAwB,EACjC,WAAmB;QAEnB,KAAK,CAAC,aAAa,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,WAAW,EAAE,CAAC,CAAC;QAHtD,SAAI,GAAJ,IAAI,CAAoB;QAIjC,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;IAC3B,CAAC;CACF;AAED,KAAK,UAAU,SAAS,CAAC,GAAW,EAAE,IAAqB;IACzD,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAC5B,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,mCAAmC,EAAE;QAChE,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE;KACtB,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;IAC/B,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QACb,MAAM,IAAI,UAAU,CAClB,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,EACvD,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,UAAU,CAC1C,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,uEAAuE;AAEvE,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,MAAqB;IAO3D,OAAO,SAAS,CACd,qCAAqC,MAAM,CAAC,QAAQ,yBAAyB,EAC7E,IAAI,eAAe,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CACnE,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,YAAY,CACzB,UAAkB,EAClB,MAAqB;IAErB,MAAM,IAAI,GAAG,MAAM,SAAS,CAC1B,qCAAqC,MAAM,CAAC,QAAQ,oBAAoB,EACxE,IAAI,eAAe,CAAC;QAClB,UAAU,EAAE,8CAA8C;QAC1D,SAAS,EAAE,MAAM,CAAC,QAAQ;QAC1B,WAAW,EAAE,UAAU;KACxB,CAAC,CACH,CAAC;IACF,OAAO;QACL,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,aAAa,EAAE,IAAI,CAAC,aAAa;QACjC,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC,GAAG,IAAI;QACtD,KAAK,EAAE,IAAI,CAAC,KAAK;KAClB,CAAC;AACJ,CAAC;AAED,uEAAuE;AAEvE,KAAK,UAAU,kBAAkB,CAAC,MAAqB,EAAE,YAAoB;IAC3E,MAAM,IAAI,GAAG,MAAM,SAAS,CAC1B,qCAAqC,MAAM,CAAC,QAAQ,oBAAoB,EACxE,IAAI,eAAe,CAAC;QAClB,UAAU,EAAE,eAAe;QAC3B,SAAS,EAAE,MAAM,CAAC,QAAQ;QAC1B,aAAa,EAAE,YAAY;QAC3B,KAAK,EAAE,MAAM;KACd,CAAC,CACH,CAAC;IACF,OAAO;QACL,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,mEAAmE;QACnE,aAAa,EAAE,IAAI,CAAC,aAAa,IAAI,YAAY;QACjD,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC,GAAG,IAAI;QACtD,KAAK,EAAE,IAAI,CAAC,KAAK;KAClB,CAAC;AACJ,CAAC;AAED,uEAAuE;AAEvE,qFAAqF;AACrF,MAAM,YAAY,GAAG,IAAI,GAAG,EAA2B,CAAC;AAExD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,WAAoB;IACvD,MAAM,MAAM,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;IAC3C,IAAI,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IAChC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACb,kCAAkC,MAAM,CAAC,IAAI,0CAA0C,MAAM,CAAC,IAAI,GAAG,CACtG,CAAC;IACJ,CAAC;IAED,mCAAmC;IACnC,IAAI,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC;QACnD,OAAO,MAAM,CAAC,YAAY,CAAC;IAC7B,CAAC;IAED,2EAA2E;IAC3E,IAAI,WAAW,GAAG,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACrD,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,WAAW,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE;YACjE,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QACH,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IAClD,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,MAAqB,EAAE,YAAoB;IAClE,oEAAoE;IACpE,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IACnC,IAAI,OAAO,IAAI,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC;QAC/D,OAAO,OAAO,CAAC,YAAY,CAAC;IAC9B,CAAC;IAED,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,KAAK,GAAG,IAAI,CAAC;IACjB,OAAO,OAAO,GAAG,CAAC,EAAE,CAAC;QACnB,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,kBAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,aAAa,IAAI,YAAY,CAAC,CAAC;YACvF,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAC1B,OAAO,KAAK,CAAC,YAAY,CAAC;QAC5B,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,EAAE,CAAC;YACV,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;gBAC7E,MAAM,IAAI,KAAK,CACb,8BAA8B,MAAM,CAAC,IAAI,yCAAyC,CACnF,CAAC;YACJ,CAAC;YACD,IAAI,OAAO,IAAI,CAAC;gBAAE,MAAM,GAAG,CAAC;YAC5B,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;YAC/C,KAAK,IAAI,CAAC,CAAC;QACb,CAAC;IACH,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;AAC9D,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,WAA+B,EAC/B,QAA6D;IAE7D,MAAM,MAAM,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;IAE3C,iBAAiB;IACjB,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IACpC,IAAI,QAAQ,IAAI,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC;QACjE,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,sBAAsB;IACtB,MAAM,EAAE,GAAG,MAAM,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC3C,QAAQ,CAAC,EAAE,CAAC,gBAAgB,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC;IAE5C,OAAO;IACP,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,UAAU,GAAG,IAAI,CAAC;IACnD,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC7B,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC;QAC5D,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;YAC1D,OAAO,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACpC,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,MAAM,SAAS,GAAG,GAAG,YAAY,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;YACnE,IACE,SAAS,KAAK,uBAAuB;gBACrC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,EACnC,CAAC;gBACD,SAAS;YACX,CAAC;YACD,IACE,SAAS,KAAK,wBAAwB;gBACtC,SAAS,KAAK,eAAe,EAC7B,CAAC;gBACD,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;YAClD,CAAC;YACD,IACE,SAAS,KAAK,eAAe;gBAC7B,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,EACnC,CAAC;gBACD,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;YAC5D,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,WAAoB;IAEpB,MAAM,MAAM,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IAClC,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC1E,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7C,OAAO;QACL,OAAO,EAAE,MAAM,CAAC,IAAI;QACpB,KAAK;QACL,OAAO,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE;KACnD,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
|
package/dist/graph.d.ts
CHANGED
|
@@ -17,7 +17,9 @@ export declare class GraphClient {
|
|
|
17
17
|
/** Paginated GET — yields pages lazily */
|
|
18
18
|
paginate<T>(path: string, maxPages?: number, additionalHeaders?: Readonly<Record<string, string>>): AsyncGenerator<T[]>;
|
|
19
19
|
/** POST */
|
|
20
|
-
post<T>(path: string, body: unknown
|
|
20
|
+
post<T>(path: string, body: unknown, options?: {
|
|
21
|
+
retrySafe?: boolean;
|
|
22
|
+
}): Promise<T>;
|
|
21
23
|
/** PATCH */
|
|
22
24
|
patch<T>(path: string, body: unknown): Promise<T>;
|
|
23
25
|
/** DELETE */
|