@jbctechsolutions/mcp-outlook-mac 1.1.7 → 1.2.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 (38) hide show
  1. package/dist/approval/hash.d.ts +63 -0
  2. package/dist/approval/hash.d.ts.map +1 -1
  3. package/dist/approval/hash.js +71 -1
  4. package/dist/approval/hash.js.map +1 -1
  5. package/dist/approval/index.d.ts +1 -1
  6. package/dist/approval/index.d.ts.map +1 -1
  7. package/dist/approval/index.js +1 -1
  8. package/dist/approval/index.js.map +1 -1
  9. package/dist/approval/types.d.ts +2 -2
  10. package/dist/approval/types.d.ts.map +1 -1
  11. package/dist/graph/attachments.d.ts +57 -0
  12. package/dist/graph/attachments.d.ts.map +1 -0
  13. package/dist/graph/attachments.js +165 -0
  14. package/dist/graph/attachments.js.map +1 -0
  15. package/dist/graph/client/graph-client.d.ts +99 -0
  16. package/dist/graph/client/graph-client.d.ts.map +1 -1
  17. package/dist/graph/client/graph-client.js +246 -0
  18. package/dist/graph/client/graph-client.js.map +1 -1
  19. package/dist/graph/mappers/utils.d.ts +4 -0
  20. package/dist/graph/mappers/utils.d.ts.map +1 -1
  21. package/dist/graph/mappers/utils.js +17 -3
  22. package/dist/graph/mappers/utils.js.map +1 -1
  23. package/dist/graph/repository.d.ts +234 -0
  24. package/dist/graph/repository.d.ts.map +1 -1
  25. package/dist/graph/repository.js +427 -0
  26. package/dist/graph/repository.js.map +1 -1
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +1100 -15
  29. package/dist/index.js.map +1 -1
  30. package/dist/tools/index.d.ts +1 -0
  31. package/dist/tools/index.d.ts.map +1 -1
  32. package/dist/tools/index.js +2 -0
  33. package/dist/tools/index.js.map +1 -1
  34. package/dist/tools/mail-send.d.ts +239 -0
  35. package/dist/tools/mail-send.d.ts.map +1 -0
  36. package/dist/tools/mail-send.js +414 -0
  37. package/dist/tools/mail-send.js.map +1 -0
  38. package/package.json +1 -1
@@ -21,4 +21,67 @@ export declare function hashFolderForApproval(folder: {
21
21
  name: string | null;
22
22
  messageCount: number;
23
23
  }): string;
24
+ /**
25
+ * Creates a hash of a draft's critical properties for send approval.
26
+ * Used to detect if the draft changed between prepare and confirm.
27
+ */
28
+ export declare function hashDraftForSend(draft: {
29
+ id: number;
30
+ subject: string | null;
31
+ recipientCount: number;
32
+ }): string;
33
+ /**
34
+ * Creates a hash for a direct send (compose-and-send) approval.
35
+ * Captures the recipient counts that define the send scope.
36
+ */
37
+ export declare function hashDirectSendForApproval(params: {
38
+ subject: string;
39
+ toCount: number;
40
+ ccCount: number;
41
+ bccCount: number;
42
+ }): string;
43
+ /**
44
+ * Creates a hash for a reply approval.
45
+ * Captures the original message ID, comment length, and reply-all flag.
46
+ */
47
+ export declare function hashReplyForApproval(params: {
48
+ originalId: number;
49
+ commentLength: number;
50
+ replyAll: boolean;
51
+ }): string;
52
+ /**
53
+ * Creates a hash for a forward approval.
54
+ * Captures the original message ID and the number of forward recipients.
55
+ */
56
+ export declare function hashForwardForApproval(params: {
57
+ originalId: number;
58
+ recipientCount: number;
59
+ }): string;
60
+ /**
61
+ * Creates a hash of a calendar event's critical properties.
62
+ * Used to detect if the event changed between prepare and confirm.
63
+ */
64
+ export declare function hashEventForApproval(event: {
65
+ id: number;
66
+ subject: string | null;
67
+ startDateTime: string | null;
68
+ }): string;
69
+ /**
70
+ * Creates a hash of a contact's critical properties.
71
+ * Used to detect if the contact changed between prepare and confirm.
72
+ */
73
+ export declare function hashContactForApproval(contact: {
74
+ id: number;
75
+ displayName: string | null;
76
+ emailAddress: string | null;
77
+ }): string;
78
+ /**
79
+ * Creates a hash of a task's critical properties.
80
+ * Used to detect if the task changed between prepare and confirm.
81
+ */
82
+ export declare function hashTaskForApproval(task: {
83
+ taskId: string;
84
+ title: string | null;
85
+ listId: string;
86
+ }): string;
24
87
  //# sourceMappingURL=hash.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../../src/approval/hash.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE;IAC1C,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B,GAAG,MAAM,CAKT;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE;IAC5C,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB,GAAG,MAAM,CAKT"}
1
+ {"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../../src/approval/hash.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE;IAC1C,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B,GAAG,MAAM,CAKT;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE;IAC5C,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB,GAAG,MAAM,CAKT;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CACxB,GAAG,MAAM,CAKT;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE;IAChD,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB,GAAG,MAAM,CAKT;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE;IAC3C,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,OAAO,CAAC;CACnB,GAAG,MAAM,CAKT;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE;IAC7C,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;CACxB,GAAG,MAAM,CAKT;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE;IAC1C,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B,GAAG,MAAM,CAKT;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE;IAC9C,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B,GAAG,MAAM,CAKT;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,MAAM,CAKT"}
@@ -6,7 +6,7 @@
6
6
  * Target hashing for approval tokens.
7
7
  *
8
8
  * Generates hashes of critical properties to detect if a target
9
- * (email or folder) has been modified between prepare and confirm.
9
+ * has been modified between prepare and confirm.
10
10
  */
11
11
  import { createHash } from 'node:crypto';
12
12
  /**
@@ -29,4 +29,74 @@ export function hashFolderForApproval(folder) {
29
29
  .digest('hex')
30
30
  .slice(0, 16);
31
31
  }
32
+ /**
33
+ * Creates a hash of a draft's critical properties for send approval.
34
+ * Used to detect if the draft changed between prepare and confirm.
35
+ */
36
+ export function hashDraftForSend(draft) {
37
+ return createHash('sha256')
38
+ .update(`${draft.id}:${draft.subject ?? ''}:${draft.recipientCount}`)
39
+ .digest('hex')
40
+ .slice(0, 16);
41
+ }
42
+ /**
43
+ * Creates a hash for a direct send (compose-and-send) approval.
44
+ * Captures the recipient counts that define the send scope.
45
+ */
46
+ export function hashDirectSendForApproval(params) {
47
+ return createHash('sha256')
48
+ .update(`${params.subject}:${params.toCount}:${params.ccCount}:${params.bccCount}`)
49
+ .digest('hex')
50
+ .slice(0, 16);
51
+ }
52
+ /**
53
+ * Creates a hash for a reply approval.
54
+ * Captures the original message ID, comment length, and reply-all flag.
55
+ */
56
+ export function hashReplyForApproval(params) {
57
+ return createHash('sha256')
58
+ .update(`${params.originalId}:${params.commentLength}:${params.replyAll}`)
59
+ .digest('hex')
60
+ .slice(0, 16);
61
+ }
62
+ /**
63
+ * Creates a hash for a forward approval.
64
+ * Captures the original message ID and the number of forward recipients.
65
+ */
66
+ export function hashForwardForApproval(params) {
67
+ return createHash('sha256')
68
+ .update(`${params.originalId}:${params.recipientCount}`)
69
+ .digest('hex')
70
+ .slice(0, 16);
71
+ }
72
+ /**
73
+ * Creates a hash of a calendar event's critical properties.
74
+ * Used to detect if the event changed between prepare and confirm.
75
+ */
76
+ export function hashEventForApproval(event) {
77
+ return createHash('sha256')
78
+ .update(`${event.id}:${event.subject ?? ''}:${event.startDateTime ?? ''}`)
79
+ .digest('hex')
80
+ .slice(0, 16);
81
+ }
82
+ /**
83
+ * Creates a hash of a contact's critical properties.
84
+ * Used to detect if the contact changed between prepare and confirm.
85
+ */
86
+ export function hashContactForApproval(contact) {
87
+ return createHash('sha256')
88
+ .update(`${contact.id}:${contact.displayName ?? ''}:${contact.emailAddress ?? ''}`)
89
+ .digest('hex')
90
+ .slice(0, 16);
91
+ }
92
+ /**
93
+ * Creates a hash of a task's critical properties.
94
+ * Used to detect if the task changed between prepare and confirm.
95
+ */
96
+ export function hashTaskForApproval(task) {
97
+ return createHash('sha256')
98
+ .update(`${task.taskId}:${task.title ?? ''}:${task.listId}`)
99
+ .digest('hex')
100
+ .slice(0, 16);
101
+ }
32
102
  //# sourceMappingURL=hash.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"hash.js","sourceRoot":"","sources":["../../src/approval/hash.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAKpC;IACC,OAAO,UAAU,CAAC,QAAQ,CAAC;SACxB,MAAM,CAAC,GAAG,KAAK,CAAC,EAAE,IAAI,KAAK,CAAC,OAAO,IAAI,EAAE,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,YAAY,IAAI,CAAC,EAAE,CAAC;SACzF,MAAM,CAAC,KAAK,CAAC;SACb,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAClB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAIrC;IACC,OAAO,UAAU,CAAC,QAAQ,CAAC;SACxB,MAAM,CAAC,GAAG,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,IAAI,IAAI,EAAE,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;SAClE,MAAM,CAAC,KAAK,CAAC;SACb,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"hash.js","sourceRoot":"","sources":["../../src/approval/hash.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,6 @@
8
8
  * Re-exports all approval types, hashing, and token management.
9
9
  */
10
10
  export { type OperationType, type TargetType, type ApprovalToken, type ValidationErrorReason, type ValidationResult, } from './types.js';
11
- export { hashEmailForApproval, hashFolderForApproval } from './hash.js';
11
+ export { hashEmailForApproval, hashFolderForApproval, hashDraftForSend, hashDirectSendForApproval, hashReplyForApproval, hashForwardForApproval, hashEventForApproval, hashContactForApproval, hashTaskForApproval, } from './hash.js';
12
12
  export { ApprovalTokenManager } from './token-manager.js';
13
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/approval/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;GAIG;AAEH,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,GACtB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAExE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/approval/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;GAIG;AAEH,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,GACtB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,gBAAgB,EAChB,yBAAyB,EACzB,oBAAoB,EACpB,sBAAsB,EACtB,oBAAoB,EACpB,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC"}
@@ -2,6 +2,6 @@
2
2
  * Copyright (c) 2026 JBC Tech Solutions, LLC
3
3
  * Licensed under the MIT License. See LICENSE file in the project root.
4
4
  */
5
- export { hashEmailForApproval, hashFolderForApproval } from './hash.js';
5
+ export { hashEmailForApproval, hashFolderForApproval, hashDraftForSend, hashDirectSendForApproval, hashReplyForApproval, hashForwardForApproval, hashEventForApproval, hashContactForApproval, hashTaskForApproval, } from './hash.js';
6
6
  export { ApprovalTokenManager } from './token-manager.js';
7
7
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/approval/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAgBH,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAExE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/approval/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAgBH,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,gBAAgB,EAChB,yBAAyB,EACzB,oBAAoB,EACpB,sBAAsB,EACtB,oBAAoB,EACpB,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC"}
@@ -11,11 +11,11 @@
11
11
  /**
12
12
  * Operations that require approval tokens.
13
13
  */
14
- export type OperationType = 'delete_email' | 'move_email' | 'archive_email' | 'junk_email' | 'delete_folder' | 'empty_folder' | 'batch_delete_emails' | 'batch_move_emails';
14
+ export type OperationType = 'delete_email' | 'move_email' | 'archive_email' | 'junk_email' | 'delete_folder' | 'empty_folder' | 'batch_delete_emails' | 'batch_move_emails' | 'send_draft' | 'send_email' | 'reply_email' | 'forward_email' | 'delete_event' | 'delete_contact' | 'delete_task';
15
15
  /**
16
16
  * Target resource types.
17
17
  */
18
- export type TargetType = 'email' | 'folder';
18
+ export type TargetType = 'email' | 'folder' | 'event' | 'contact' | 'task';
19
19
  /**
20
20
  * An approval token authorizing a single destructive operation.
21
21
  */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/approval/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;GAKG;AAMH;;GAEG;AACH,MAAM,MAAM,aAAa,GACrB,cAAc,GACd,YAAY,GACZ,eAAe,GACf,YAAY,GACZ,eAAe,GACf,cAAc,GACd,qBAAqB,GACrB,mBAAmB,CAAC;AAExB;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAC;AAM5C;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC;IAClC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACtD;AAED;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAC7B,SAAS,GACT,WAAW,GACX,oBAAoB,GACpB,iBAAiB,GACjB,gBAAgB,GAChB,kBAAkB,CAAC;AAEvB;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,qBAAqB,CAAC;IACvC,QAAQ,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC;CAChC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/approval/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;GAKG;AAMH;;GAEG;AACH,MAAM,MAAM,aAAa,GACrB,cAAc,GACd,YAAY,GACZ,eAAe,GACf,YAAY,GACZ,eAAe,GACf,cAAc,GACd,qBAAqB,GACrB,mBAAmB,GACnB,YAAY,GACZ,YAAY,GACZ,aAAa,GACb,eAAe,GACf,cAAc,GACd,gBAAgB,GAChB,aAAa,CAAC;AAElB;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAM3E;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC;IAClC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACtD;AAED;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAC7B,SAAS,GACT,WAAW,GACX,oBAAoB,GACpB,iBAAiB,GACjB,gBAAgB,GAChB,kBAAkB,CAAC;AAEvB;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,qBAAqB,CAAC;IACvC,QAAQ,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC;CAChC"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Copyright (c) 2026 JBC Tech Solutions, LLC
3
+ * Licensed under the MIT License. See LICENSE file in the project root.
4
+ */
5
+ import type { GraphClient } from './client/index.js';
6
+ /**
7
+ * Returns the download directory for attachments.
8
+ *
9
+ * Reads `MCP_OUTLOOK_DOWNLOAD_DIR` env var, falls back to `os.tmpdir()`.
10
+ * Creates a subdirectory `mcp-outlook-attachments` inside it.
11
+ */
12
+ export declare function getDownloadDir(): string;
13
+ /**
14
+ * Sanitizes a filename to prevent path traversal attacks.
15
+ *
16
+ * Strips directory separators (`/`, `\`), strips `..` segments,
17
+ * and trims whitespace. Falls back to `'attachment'` if result is empty.
18
+ */
19
+ export declare function sanitizeFilename(name: string): string;
20
+ /**
21
+ * Generates a unique file path in the given directory.
22
+ *
23
+ * Sanitizes the filename, then checks if it already exists.
24
+ * If it does, appends a numeric suffix (e.g., `file(1).txt`, `file(2).txt`).
25
+ */
26
+ export declare function resolveFilePath(downloadDir: string, filename: string): string;
27
+ /**
28
+ * Uploads a file as an attachment to a message.
29
+ *
30
+ * Routes based on file size:
31
+ * - <= 3MB: Inline base64 upload via `client.addAttachment`
32
+ * - > 3MB: Chunked upload session via `client.createUploadSession` + raw fetch
33
+ *
34
+ * @param client - The Graph API client
35
+ * @param messageId - The message to attach the file to
36
+ * @param filePath - Local path to the file to upload
37
+ * @param name - Optional display name (defaults to basename of filePath)
38
+ * @param contentType - Optional MIME type (defaults to 'application/octet-stream')
39
+ */
40
+ export declare function uploadAttachment(client: GraphClient, messageId: string, filePath: string, name?: string, contentType?: string): Promise<void>;
41
+ /**
42
+ * Downloads an attachment from a message and saves it to disk.
43
+ *
44
+ * Decodes `contentBytes` from base64 and writes the file to the download directory.
45
+ *
46
+ * @param client - The Graph API client
47
+ * @param messageId - The message containing the attachment
48
+ * @param attachmentId - The attachment to download
49
+ * @returns Metadata about the downloaded file including its local path
50
+ */
51
+ export declare function downloadAttachment(client: GraphClient, messageId: string, attachmentId: string): Promise<{
52
+ filePath: string;
53
+ name: string;
54
+ size: number;
55
+ contentType: string;
56
+ }>;
57
+ //# sourceMappingURL=attachments.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attachments.d.ts","sourceRoot":"","sources":["../../src/graph/attachments.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAgBH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAQrD;;;;;GAKG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAKvC;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAcrD;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAmB7E;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,WAAW,EACnB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,MAAM,EACb,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC,CAsDf;AAED;;;;;;;;;GASG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,WAAW,EACnB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC,CAqBhF"}
@@ -0,0 +1,165 @@
1
+ /**
2
+ * Copyright (c) 2026 JBC Tech Solutions, LLC
3
+ * Licensed under the MIT License. See LICENSE file in the project root.
4
+ */
5
+ /**
6
+ * Attachment upload and download helpers for Microsoft Graph API.
7
+ *
8
+ * Handles:
9
+ * - File I/O for reading/writing attachments
10
+ * - Size-based routing (inline vs chunked upload)
11
+ * - Chunked upload sessions for large files (> 3MB)
12
+ * - Safe filename resolution with path traversal prevention
13
+ */
14
+ import * as fs from 'fs';
15
+ import * as os from 'os';
16
+ import * as path from 'path';
17
+ /** 3MB threshold for inline vs chunked upload. */
18
+ const INLINE_MAX_BYTES = 3 * 1024 * 1024;
19
+ /** Microsoft's recommended chunk size (~3.75MB). */
20
+ const CHUNK_SIZE = 3932160;
21
+ /**
22
+ * Returns the download directory for attachments.
23
+ *
24
+ * Reads `MCP_OUTLOOK_DOWNLOAD_DIR` env var, falls back to `os.tmpdir()`.
25
+ * Creates a subdirectory `mcp-outlook-attachments` inside it.
26
+ */
27
+ export function getDownloadDir() {
28
+ const base = process.env['MCP_OUTLOOK_DOWNLOAD_DIR'] ?? os.tmpdir();
29
+ const dir = path.join(base, 'mcp-outlook-attachments');
30
+ fs.mkdirSync(dir, { recursive: true });
31
+ return dir;
32
+ }
33
+ /**
34
+ * Sanitizes a filename to prevent path traversal attacks.
35
+ *
36
+ * Strips directory separators (`/`, `\`), strips `..` segments,
37
+ * and trims whitespace. Falls back to `'attachment'` if result is empty.
38
+ */
39
+ export function sanitizeFilename(name) {
40
+ // Strip .. segments
41
+ let sanitized = name.replace(/\.\./g, '');
42
+ // Take only the last component after any path separator
43
+ const forwardSlashIdx = sanitized.lastIndexOf('/');
44
+ if (forwardSlashIdx >= 0) {
45
+ sanitized = sanitized.substring(forwardSlashIdx + 1);
46
+ }
47
+ const backslashIdx = sanitized.lastIndexOf('\\');
48
+ if (backslashIdx >= 0) {
49
+ sanitized = sanitized.substring(backslashIdx + 1);
50
+ }
51
+ sanitized = sanitized.trim();
52
+ return sanitized.length > 0 ? sanitized : 'attachment';
53
+ }
54
+ /**
55
+ * Generates a unique file path in the given directory.
56
+ *
57
+ * Sanitizes the filename, then checks if it already exists.
58
+ * If it does, appends a numeric suffix (e.g., `file(1).txt`, `file(2).txt`).
59
+ */
60
+ export function resolveFilePath(downloadDir, filename) {
61
+ const safeName = sanitizeFilename(filename);
62
+ let candidate = path.join(downloadDir, safeName);
63
+ if (!fs.existsSync(candidate)) {
64
+ return candidate;
65
+ }
66
+ const ext = path.extname(safeName);
67
+ const base = safeName.substring(0, safeName.length - ext.length);
68
+ let counter = 1;
69
+ for (;;) { // eslint-disable-line no-constant-condition
70
+ candidate = path.join(downloadDir, `${base}(${counter})${ext}`);
71
+ if (!fs.existsSync(candidate)) {
72
+ return candidate;
73
+ }
74
+ counter++;
75
+ }
76
+ }
77
+ /**
78
+ * Uploads a file as an attachment to a message.
79
+ *
80
+ * Routes based on file size:
81
+ * - <= 3MB: Inline base64 upload via `client.addAttachment`
82
+ * - > 3MB: Chunked upload session via `client.createUploadSession` + raw fetch
83
+ *
84
+ * @param client - The Graph API client
85
+ * @param messageId - The message to attach the file to
86
+ * @param filePath - Local path to the file to upload
87
+ * @param name - Optional display name (defaults to basename of filePath)
88
+ * @param contentType - Optional MIME type (defaults to 'application/octet-stream')
89
+ */
90
+ export async function uploadAttachment(client, messageId, filePath, name, contentType) {
91
+ const fileName = name ?? path.basename(filePath);
92
+ const mimeType = contentType ?? 'application/octet-stream';
93
+ const stat = fs.statSync(filePath);
94
+ const fileSize = stat.size;
95
+ if (fileSize <= INLINE_MAX_BYTES) {
96
+ // Inline upload: read file, base64 encode, POST as attachment
97
+ const fileContent = fs.readFileSync(filePath);
98
+ const base64 = fileContent.toString('base64');
99
+ await client.addAttachment(messageId, {
100
+ '@odata.type': '#microsoft.graph.fileAttachment',
101
+ name: fileName,
102
+ contentBytes: base64,
103
+ contentType: mimeType,
104
+ });
105
+ }
106
+ else {
107
+ // Chunked upload session for large files
108
+ const session = await client.createUploadSession(messageId, {
109
+ AttachmentItem: {
110
+ attachmentType: 'file',
111
+ name: fileName,
112
+ size: fileSize,
113
+ },
114
+ });
115
+ const uploadUrl = session.uploadUrl;
116
+ const fileContent = fs.readFileSync(filePath);
117
+ let offset = 0;
118
+ while (offset < fileSize) {
119
+ const end = Math.min(offset + CHUNK_SIZE, fileSize);
120
+ const chunk = fileContent.subarray(offset, end);
121
+ const contentRange = `bytes ${offset}-${end - 1}/${fileSize}`;
122
+ const response = await fetch(uploadUrl, {
123
+ method: 'PUT',
124
+ headers: {
125
+ 'Content-Range': contentRange,
126
+ 'Content-Length': String(chunk.length),
127
+ },
128
+ body: chunk,
129
+ });
130
+ if (!response.ok) {
131
+ throw new Error(`Upload chunk failed: ${response.status} ${response.statusText}`);
132
+ }
133
+ offset = end;
134
+ }
135
+ }
136
+ }
137
+ /**
138
+ * Downloads an attachment from a message and saves it to disk.
139
+ *
140
+ * Decodes `contentBytes` from base64 and writes the file to the download directory.
141
+ *
142
+ * @param client - The Graph API client
143
+ * @param messageId - The message containing the attachment
144
+ * @param attachmentId - The attachment to download
145
+ * @returns Metadata about the downloaded file including its local path
146
+ */
147
+ export async function downloadAttachment(client, messageId, attachmentId) {
148
+ const attachment = await client.getAttachment(messageId, attachmentId);
149
+ const rawName = attachment.name ?? '';
150
+ const safeName = sanitizeFilename(rawName);
151
+ const size = attachment.size ?? 0;
152
+ const attachmentContentType = attachment.contentType ?? 'application/octet-stream';
153
+ const downloadDir = getDownloadDir();
154
+ const filePath = resolveFilePath(downloadDir, safeName);
155
+ const contentBytes = attachment.contentBytes ?? '';
156
+ const buffer = Buffer.from(contentBytes, 'base64');
157
+ fs.writeFileSync(filePath, buffer);
158
+ return {
159
+ filePath,
160
+ name: safeName,
161
+ size,
162
+ contentType: attachmentContentType,
163
+ };
164
+ }
165
+ //# sourceMappingURL=attachments.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attachments.js","sourceRoot":"","sources":["../../src/graph/attachments.ts"],"names":[],"mappings":"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"}
@@ -70,6 +70,22 @@ export declare class GraphClient {
70
70
  * Gets a specific event.
71
71
  */
72
72
  getEvent(eventId: string): Promise<MicrosoftGraph.Event | null>;
73
+ /**
74
+ * Creates a new calendar event.
75
+ */
76
+ createEvent(event: Record<string, unknown>, calendarId?: string): Promise<MicrosoftGraph.Event>;
77
+ /**
78
+ * Updates an existing calendar event.
79
+ */
80
+ updateEvent(eventId: string, updates: Record<string, unknown>): Promise<void>;
81
+ /**
82
+ * Deletes a calendar event.
83
+ */
84
+ deleteEvent(eventId: string): Promise<void>;
85
+ /**
86
+ * Responds to a calendar event invitation.
87
+ */
88
+ respondToEvent(eventId: string, response: 'accept' | 'decline' | 'tentative', sendResponse: boolean, comment?: string): Promise<void>;
73
89
  /**
74
90
  * Lists contacts with pagination.
75
91
  */
@@ -82,6 +98,18 @@ export declare class GraphClient {
82
98
  * Gets a specific contact.
83
99
  */
84
100
  getContact(contactId: string): Promise<MicrosoftGraph.Contact | null>;
101
+ /**
102
+ * Creates a new contact.
103
+ */
104
+ createContact(contact: Record<string, unknown>): Promise<MicrosoftGraph.Contact>;
105
+ /**
106
+ * Updates an existing contact.
107
+ */
108
+ updateContact(contactId: string, updates: Record<string, unknown>): Promise<void>;
109
+ /**
110
+ * Deletes a contact.
111
+ */
112
+ deleteContact(contactId: string): Promise<void>;
85
113
  /**
86
114
  * Lists task lists.
87
115
  */
@@ -140,12 +168,83 @@ export declare class GraphClient {
140
168
  * Deletes all messages in a folder.
141
169
  */
142
170
  emptyMailFolder(folderId: string): Promise<void>;
171
+ /**
172
+ * Creates a new draft message.
173
+ */
174
+ createDraft(message: {
175
+ subject: string;
176
+ body: MicrosoftGraph.ItemBody;
177
+ toRecipients?: MicrosoftGraph.Recipient[];
178
+ ccRecipients?: MicrosoftGraph.Recipient[];
179
+ bccRecipients?: MicrosoftGraph.Recipient[];
180
+ isDraft?: boolean;
181
+ }): Promise<MicrosoftGraph.Message>;
182
+ /**
183
+ * Updates an existing draft message.
184
+ */
185
+ updateDraft(messageId: string, updates: Record<string, unknown>): Promise<MicrosoftGraph.Message>;
186
+ /**
187
+ * Sends an existing draft message.
188
+ */
189
+ sendDraft(messageId: string): Promise<void>;
190
+ /**
191
+ * Sends a new email directly without creating a draft.
192
+ */
193
+ sendMail(message: {
194
+ subject: string;
195
+ body: MicrosoftGraph.ItemBody;
196
+ toRecipients: MicrosoftGraph.Recipient[];
197
+ ccRecipients?: MicrosoftGraph.Recipient[];
198
+ bccRecipients?: MicrosoftGraph.Recipient[];
199
+ }): Promise<void>;
200
+ /**
201
+ * Replies to a message, or replies to all recipients.
202
+ */
203
+ replyMessage(messageId: string, comment: string, replyAll: boolean): Promise<void>;
204
+ /**
205
+ * Forwards a message to specified recipients.
206
+ */
207
+ forwardMessage(messageId: string, toRecipients: MicrosoftGraph.Recipient[], comment?: string): Promise<void>;
208
+ /**
209
+ * Lists attachments on a message.
210
+ */
211
+ listAttachments(messageId: string): Promise<MicrosoftGraph.Attachment[]>;
212
+ /**
213
+ * Gets a specific attachment with full content (including contentBytes).
214
+ */
215
+ getAttachment(messageId: string, attachmentId: string): Promise<MicrosoftGraph.FileAttachment>;
216
+ /**
217
+ * Adds an inline base64 attachment to a message (<= 3MB).
218
+ */
219
+ addAttachment(messageId: string, attachment: Record<string, unknown>): Promise<MicrosoftGraph.Attachment>;
220
+ /**
221
+ * Creates an upload session for large file attachments (> 3MB).
222
+ */
223
+ createUploadSession(messageId: string, body: Record<string, unknown>): Promise<{
224
+ uploadUrl: string;
225
+ }>;
143
226
  /**
144
227
  * Searches tasks by title.
145
228
  */
146
229
  searchTasks(query: string, limit?: number): Promise<Array<MicrosoftGraph.TodoTask & {
147
230
  taskListId: string;
148
231
  }>>;
232
+ /**
233
+ * Creates a new task in a task list.
234
+ */
235
+ createTask(taskListId: string, task: Record<string, unknown>): Promise<MicrosoftGraph.TodoTask>;
236
+ /**
237
+ * Updates an existing task.
238
+ */
239
+ updateTask(taskListId: string, taskId: string, updates: Record<string, unknown>): Promise<MicrosoftGraph.TodoTask>;
240
+ /**
241
+ * Deletes a task.
242
+ */
243
+ deleteTask(taskListId: string, taskId: string): Promise<void>;
244
+ /**
245
+ * Creates a new task list.
246
+ */
247
+ createTaskList(displayName: string): Promise<MicrosoftGraph.TodoTaskList>;
149
248
  }
150
249
  /**
151
250
  * Creates a new Graph client instance.
@@ -1 +1 @@
1
- {"version":3,"file":"graph-client.d.ts","sourceRoot":"","sources":["../../../src/graph/client/graph-client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;GAQG;AAEH,OAAO,kBAAkB,CAAC;AAE1B,OAAO,KAAK,KAAK,cAAc,MAAM,kCAAkC,CAAC;AAExE,OAAO,EAAkB,KAAK,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAG3E;;GAEG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAuB;IAC7C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAiC;gBAExD,kBAAkB,CAAC,EAAE,kBAAkB;IAInD;;OAEG;YAEW,SAAS;IAiBvB;;OAEG;IACH,UAAU,IAAI,IAAI;IAQlB;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,cAAc,CAAC,UAAU,EAAE,CAAC;IA2C7D;;OAEG;IACG,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,UAAU,GAAG,IAAI,CAAC;IAiBhF;;OAEG;IACG,YAAY,CAChB,QAAQ,EAAE,MAAM,EAChB,KAAK,GAAE,MAAW,EAClB,IAAI,GAAE,MAAU,GACf,OAAO,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;IAsBpC;;OAEG;IACG,kBAAkB,CACtB,QAAQ,EAAE,MAAM,EAChB,KAAK,GAAE,MAAW,EAClB,IAAI,GAAE,MAAU,GACf,OAAO,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;IAepC;;OAEG;IACG,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,GAAG,OAAO,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;IAa1F;;OAEG;IACG,sBAAsB,CAC1B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,KAAK,GAAE,MAAW,GACjB,OAAO,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;IAapC;;OAEG;IACG,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,OAAO,GAAG,IAAI,CAAC;IAiB3E;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC;IAuBzD;;OAEG;IACG,UAAU,CACd,KAAK,GAAE,MAAW,EAClB,UAAU,CAAC,EAAE,MAAM,EACnB,SAAS,CAAC,EAAE,IAAI,EAChB,OAAO,CAAC,EAAE,IAAI,GACb,OAAO,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;IAsClC;;OAEG;IACG,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,KAAK,GAAG,IAAI,CAAC;IAiBrE;;OAEG;IACG,YAAY,CAAC,KAAK,GAAE,MAAW,EAAE,IAAI,GAAE,MAAU,GAAG,OAAO,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;IAsB3F;;OAEG;IACG,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,GAAG,OAAO,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;IAa1F;;OAEG;IACG,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,OAAO,GAAG,IAAI,CAAC;IAiB3E;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC;IAmB7D;;OAEG;IACG,SAAS,CACb,UAAU,EAAE,MAAM,EAClB,KAAK,GAAE,MAAW,EAClB,IAAI,GAAE,MAAU,EAChB,gBAAgB,GAAE,OAAc,GAC/B,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC;IAiBrC;;OAEG;IACG,YAAY,CAChB,KAAK,GAAE,MAAW,EAClB,IAAI,GAAE,MAAU,EAChB,gBAAgB,GAAE,OAAc,GAC/B,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,QAAQ,GAAG;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAyBnE;;OAEG;IACG,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,QAAQ,GAAG,IAAI,CAAC;IAiB1F;;OAEG;IACG,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,mBAAmB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQhF;;OAEG;IACG,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASrD;;OAEG;IACG,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQtD;;OAEG;IACG,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQnD;;OAEG;IACG,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAQvF;;OAEG;IACG,gBAAgB,CACpB,WAAW,EAAE,MAAM,EACnB,cAAc,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC;IAarC;;OAEG;IACG,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQvD;;OAEG;IACG,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQxE;;OAEG;IACG,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,mBAAmB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQlF;;OAEG;IACG,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqCtD;;OAEG;IACG,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,GAAG,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,QAAQ,GAAG;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAUvH;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,kBAAkB,CAAC,EAAE,kBAAkB,GAAG,WAAW,CAEtF"}
1
+ {"version":3,"file":"graph-client.d.ts","sourceRoot":"","sources":["../../../src/graph/client/graph-client.ts"],"names":[],"mappings":"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"}