@jbctechsolutions/mcp-office365 2.5.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.
Files changed (339) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +667 -0
  3. package/dist/applescript/account-repository.d.ts +30 -0
  4. package/dist/applescript/account-repository.d.ts.map +1 -0
  5. package/dist/applescript/account-repository.js +38 -0
  6. package/dist/applescript/account-repository.js.map +1 -0
  7. package/dist/applescript/account-scripts.d.ts +21 -0
  8. package/dist/applescript/account-scripts.d.ts.map +1 -0
  9. package/dist/applescript/account-scripts.js +180 -0
  10. package/dist/applescript/account-scripts.js.map +1 -0
  11. package/dist/applescript/calendar-manager.d.ts +44 -0
  12. package/dist/applescript/calendar-manager.d.ts.map +1 -0
  13. package/dist/applescript/calendar-manager.js +92 -0
  14. package/dist/applescript/calendar-manager.js.map +1 -0
  15. package/dist/applescript/calendar-writer.d.ts +36 -0
  16. package/dist/applescript/calendar-writer.d.ts.map +1 -0
  17. package/dist/applescript/calendar-writer.js +94 -0
  18. package/dist/applescript/calendar-writer.js.map +1 -0
  19. package/dist/applescript/content-readers.d.ts +114 -0
  20. package/dist/applescript/content-readers.d.ts.map +1 -0
  21. package/dist/applescript/content-readers.js +328 -0
  22. package/dist/applescript/content-readers.js.map +1 -0
  23. package/dist/applescript/executor.d.ts +60 -0
  24. package/dist/applescript/executor.d.ts.map +1 -0
  25. package/dist/applescript/executor.js +173 -0
  26. package/dist/applescript/executor.js.map +1 -0
  27. package/dist/applescript/index.d.ts +20 -0
  28. package/dist/applescript/index.d.ts.map +1 -0
  29. package/dist/applescript/index.js +29 -0
  30. package/dist/applescript/index.js.map +1 -0
  31. package/dist/applescript/mail-sender.d.ts +38 -0
  32. package/dist/applescript/mail-sender.d.ts.map +1 -0
  33. package/dist/applescript/mail-sender.js +67 -0
  34. package/dist/applescript/mail-sender.js.map +1 -0
  35. package/dist/applescript/parser.d.ts +235 -0
  36. package/dist/applescript/parser.d.ts.map +1 -0
  37. package/dist/applescript/parser.js +496 -0
  38. package/dist/applescript/parser.js.map +1 -0
  39. package/dist/applescript/repository.d.ts +64 -0
  40. package/dist/applescript/repository.d.ts.map +1 -0
  41. package/dist/applescript/repository.js +444 -0
  42. package/dist/applescript/repository.js.map +1 -0
  43. package/dist/applescript/scripts.d.ts +265 -0
  44. package/dist/applescript/scripts.d.ts.map +1 -0
  45. package/dist/applescript/scripts.js +1483 -0
  46. package/dist/applescript/scripts.js.map +1 -0
  47. package/dist/approval/hash.d.ts +87 -0
  48. package/dist/approval/hash.d.ts.map +1 -0
  49. package/dist/approval/hash.js +102 -0
  50. package/dist/approval/hash.js.map +1 -0
  51. package/dist/approval/index.d.ts +13 -0
  52. package/dist/approval/index.d.ts.map +1 -0
  53. package/dist/approval/index.js +7 -0
  54. package/dist/approval/index.js.map +1 -0
  55. package/dist/approval/token-manager.d.ts +51 -0
  56. package/dist/approval/token-manager.d.ts.map +1 -0
  57. package/dist/approval/token-manager.js +111 -0
  58. package/dist/approval/token-manager.js.map +1 -0
  59. package/dist/approval/types.d.ts +44 -0
  60. package/dist/approval/types.d.ts.map +1 -0
  61. package/dist/approval/types.js +6 -0
  62. package/dist/approval/types.js.map +1 -0
  63. package/dist/cli.d.ts +30 -0
  64. package/dist/cli.d.ts.map +1 -0
  65. package/dist/cli.js +143 -0
  66. package/dist/cli.js.map +1 -0
  67. package/dist/config.d.ts +27 -0
  68. package/dist/config.d.ts.map +1 -0
  69. package/dist/config.js +42 -0
  70. package/dist/config.js.map +1 -0
  71. package/dist/database/connection.d.ts +77 -0
  72. package/dist/database/connection.d.ts.map +1 -0
  73. package/dist/database/connection.js +130 -0
  74. package/dist/database/connection.js.map +1 -0
  75. package/dist/database/index.d.ts +11 -0
  76. package/dist/database/index.d.ts.map +1 -0
  77. package/dist/database/index.js +11 -0
  78. package/dist/database/index.js.map +1 -0
  79. package/dist/database/queries.d.ts +93 -0
  80. package/dist/database/queries.d.ts.map +1 -0
  81. package/dist/database/queries.js +430 -0
  82. package/dist/database/queries.js.map +1 -0
  83. package/dist/database/repository.d.ts +198 -0
  84. package/dist/database/repository.d.ts.map +1 -0
  85. package/dist/database/repository.js +199 -0
  86. package/dist/database/repository.js.map +1 -0
  87. package/dist/graph/attachments.d.ts +72 -0
  88. package/dist/graph/attachments.d.ts.map +1 -0
  89. package/dist/graph/attachments.js +207 -0
  90. package/dist/graph/attachments.js.map +1 -0
  91. package/dist/graph/auth/config.d.ts +34 -0
  92. package/dist/graph/auth/config.d.ts.map +1 -0
  93. package/dist/graph/auth/config.js +78 -0
  94. package/dist/graph/auth/config.js.map +1 -0
  95. package/dist/graph/auth/device-code-flow.d.ts +55 -0
  96. package/dist/graph/auth/device-code-flow.d.ts.map +1 -0
  97. package/dist/graph/auth/device-code-flow.js +180 -0
  98. package/dist/graph/auth/device-code-flow.js.map +1 -0
  99. package/dist/graph/auth/index.d.ts +13 -0
  100. package/dist/graph/auth/index.d.ts.map +1 -0
  101. package/dist/graph/auth/index.js +13 -0
  102. package/dist/graph/auth/index.js.map +1 -0
  103. package/dist/graph/auth/token-cache.d.ts +41 -0
  104. package/dist/graph/auth/token-cache.d.ts.map +1 -0
  105. package/dist/graph/auth/token-cache.js +105 -0
  106. package/dist/graph/auth/token-cache.js.map +1 -0
  107. package/dist/graph/client/batch.d.ts +38 -0
  108. package/dist/graph/client/batch.d.ts.map +1 -0
  109. package/dist/graph/client/batch.js +33 -0
  110. package/dist/graph/client/batch.js.map +1 -0
  111. package/dist/graph/client/cache.d.ts +64 -0
  112. package/dist/graph/client/cache.d.ts.map +1 -0
  113. package/dist/graph/client/cache.js +108 -0
  114. package/dist/graph/client/cache.js.map +1 -0
  115. package/dist/graph/client/graph-client.d.ts +630 -0
  116. package/dist/graph/client/graph-client.d.ts.map +1 -0
  117. package/dist/graph/client/graph-client.js +1771 -0
  118. package/dist/graph/client/graph-client.js.map +1 -0
  119. package/dist/graph/client/index.d.ts +12 -0
  120. package/dist/graph/client/index.d.ts.map +1 -0
  121. package/dist/graph/client/index.js +12 -0
  122. package/dist/graph/client/index.js.map +1 -0
  123. package/dist/graph/content-readers.d.ts +106 -0
  124. package/dist/graph/content-readers.d.ts.map +1 -0
  125. package/dist/graph/content-readers.js +321 -0
  126. package/dist/graph/content-readers.js.map +1 -0
  127. package/dist/graph/index.d.ts +18 -0
  128. package/dist/graph/index.d.ts.map +1 -0
  129. package/dist/graph/index.js +23 -0
  130. package/dist/graph/index.js.map +1 -0
  131. package/dist/graph/mailbox-adapter.d.ts +30 -0
  132. package/dist/graph/mailbox-adapter.d.ts.map +1 -0
  133. package/dist/graph/mailbox-adapter.js +59 -0
  134. package/dist/graph/mailbox-adapter.js.map +1 -0
  135. package/dist/graph/mappers/contact-mapper.d.ts +14 -0
  136. package/dist/graph/mappers/contact-mapper.d.ts.map +1 -0
  137. package/dist/graph/mappers/contact-mapper.js +20 -0
  138. package/dist/graph/mappers/contact-mapper.js.map +1 -0
  139. package/dist/graph/mappers/email-mapper.d.ts +14 -0
  140. package/dist/graph/mappers/email-mapper.d.ts.map +1 -0
  141. package/dist/graph/mappers/email-mapper.js +44 -0
  142. package/dist/graph/mappers/email-mapper.js.map +1 -0
  143. package/dist/graph/mappers/event-mapper.d.ts +14 -0
  144. package/dist/graph/mappers/event-mapper.d.ts.map +1 -0
  145. package/dist/graph/mappers/event-mapper.js +31 -0
  146. package/dist/graph/mappers/event-mapper.js.map +1 -0
  147. package/dist/graph/mappers/folder-mapper.d.ts +22 -0
  148. package/dist/graph/mappers/folder-mapper.d.ts.map +1 -0
  149. package/dist/graph/mappers/folder-mapper.js +51 -0
  150. package/dist/graph/mappers/folder-mapper.js.map +1 -0
  151. package/dist/graph/mappers/index.d.ts +16 -0
  152. package/dist/graph/mappers/index.d.ts.map +1 -0
  153. package/dist/graph/mappers/index.js +16 -0
  154. package/dist/graph/mappers/index.js.map +1 -0
  155. package/dist/graph/mappers/task-mapper.d.ts +20 -0
  156. package/dist/graph/mappers/task-mapper.d.ts.map +1 -0
  157. package/dist/graph/mappers/task-mapper.js +27 -0
  158. package/dist/graph/mappers/task-mapper.js.map +1 -0
  159. package/dist/graph/mappers/utils.d.ts +97 -0
  160. package/dist/graph/mappers/utils.d.ts.map +1 -0
  161. package/dist/graph/mappers/utils.js +186 -0
  162. package/dist/graph/mappers/utils.js.map +1 -0
  163. package/dist/graph/repository.d.ts +1104 -0
  164. package/dist/graph/repository.d.ts.map +1 -0
  165. package/dist/graph/repository.js +2999 -0
  166. package/dist/graph/repository.js.map +1 -0
  167. package/dist/index.d.ts +21 -0
  168. package/dist/index.d.ts.map +1 -0
  169. package/dist/index.js +6052 -0
  170. package/dist/index.js.map +1 -0
  171. package/dist/parsers/html-stripper.d.ts +41 -0
  172. package/dist/parsers/html-stripper.d.ts.map +1 -0
  173. package/dist/parsers/html-stripper.js +179 -0
  174. package/dist/parsers/html-stripper.js.map +1 -0
  175. package/dist/parsers/index.d.ts +12 -0
  176. package/dist/parsers/index.d.ts.map +1 -0
  177. package/dist/parsers/index.js +12 -0
  178. package/dist/parsers/index.js.map +1 -0
  179. package/dist/parsers/olk15.d.ts +87 -0
  180. package/dist/parsers/olk15.d.ts.map +1 -0
  181. package/dist/parsers/olk15.js +368 -0
  182. package/dist/parsers/olk15.js.map +1 -0
  183. package/dist/signature.d.ts +22 -0
  184. package/dist/signature.d.ts.map +1 -0
  185. package/dist/signature.js +89 -0
  186. package/dist/signature.js.map +1 -0
  187. package/dist/tools/calendar-permissions.d.ts +79 -0
  188. package/dist/tools/calendar-permissions.d.ts.map +1 -0
  189. package/dist/tools/calendar-permissions.js +121 -0
  190. package/dist/tools/calendar-permissions.js.map +1 -0
  191. package/dist/tools/calendar.d.ts +208 -0
  192. package/dist/tools/calendar.d.ts.map +1 -0
  193. package/dist/tools/calendar.js +247 -0
  194. package/dist/tools/calendar.js.map +1 -0
  195. package/dist/tools/categories.d.ts +94 -0
  196. package/dist/tools/categories.d.ts.map +1 -0
  197. package/dist/tools/categories.js +117 -0
  198. package/dist/tools/categories.js.map +1 -0
  199. package/dist/tools/checklist-items.d.ts +89 -0
  200. package/dist/tools/checklist-items.d.ts.map +1 -0
  201. package/dist/tools/checklist-items.js +140 -0
  202. package/dist/tools/checklist-items.js.map +1 -0
  203. package/dist/tools/contacts.d.ts +94 -0
  204. package/dist/tools/contacts.d.ts.map +1 -0
  205. package/dist/tools/contacts.js +134 -0
  206. package/dist/tools/contacts.js.map +1 -0
  207. package/dist/tools/excel.d.ts +96 -0
  208. package/dist/tools/excel.d.ts.map +1 -0
  209. package/dist/tools/excel.js +165 -0
  210. package/dist/tools/excel.js.map +1 -0
  211. package/dist/tools/focused-overrides.d.ts +70 -0
  212. package/dist/tools/focused-overrides.d.ts.map +1 -0
  213. package/dist/tools/focused-overrides.js +117 -0
  214. package/dist/tools/focused-overrides.js.map +1 -0
  215. package/dist/tools/index.d.ts +22 -0
  216. package/dist/tools/index.d.ts.map +1 -0
  217. package/dist/tools/index.js +34 -0
  218. package/dist/tools/index.js.map +1 -0
  219. package/dist/tools/linked-resources.d.ts +74 -0
  220. package/dist/tools/linked-resources.d.ts.map +1 -0
  221. package/dist/tools/linked-resources.js +122 -0
  222. package/dist/tools/linked-resources.js.map +1 -0
  223. package/dist/tools/mail-rules.d.ts +98 -0
  224. package/dist/tools/mail-rules.d.ts.map +1 -0
  225. package/dist/tools/mail-rules.js +169 -0
  226. package/dist/tools/mail-rules.js.map +1 -0
  227. package/dist/tools/mail-send.d.ts +314 -0
  228. package/dist/tools/mail-send.d.ts.map +1 -0
  229. package/dist/tools/mail-send.js +555 -0
  230. package/dist/tools/mail-send.js.map +1 -0
  231. package/dist/tools/mail.d.ts +127 -0
  232. package/dist/tools/mail.d.ts.map +1 -0
  233. package/dist/tools/mail.js +311 -0
  234. package/dist/tools/mail.js.map +1 -0
  235. package/dist/tools/mailbox-organization.d.ts +301 -0
  236. package/dist/tools/mailbox-organization.d.ts.map +1 -0
  237. package/dist/tools/mailbox-organization.js +541 -0
  238. package/dist/tools/mailbox-organization.js.map +1 -0
  239. package/dist/tools/meetings.d.ts +114 -0
  240. package/dist/tools/meetings.d.ts.map +1 -0
  241. package/dist/tools/meetings.js +110 -0
  242. package/dist/tools/meetings.js.map +1 -0
  243. package/dist/tools/notes.d.ts +74 -0
  244. package/dist/tools/notes.d.ts.map +1 -0
  245. package/dist/tools/notes.js +136 -0
  246. package/dist/tools/notes.js.map +1 -0
  247. package/dist/tools/onedrive.d.ts +194 -0
  248. package/dist/tools/onedrive.d.ts.map +1 -0
  249. package/dist/tools/onedrive.js +257 -0
  250. package/dist/tools/onedrive.js.map +1 -0
  251. package/dist/tools/people.d.ts +129 -0
  252. package/dist/tools/people.d.ts.map +1 -0
  253. package/dist/tools/people.js +195 -0
  254. package/dist/tools/people.js.map +1 -0
  255. package/dist/tools/planner-visualization.d.ts +91 -0
  256. package/dist/tools/planner-visualization.d.ts.map +1 -0
  257. package/dist/tools/planner-visualization.js +192 -0
  258. package/dist/tools/planner-visualization.js.map +1 -0
  259. package/dist/tools/planner.d.ts +288 -0
  260. package/dist/tools/planner.d.ts.map +1 -0
  261. package/dist/tools/planner.js +368 -0
  262. package/dist/tools/planner.js.map +1 -0
  263. package/dist/tools/scheduling.d.ts +49 -0
  264. package/dist/tools/scheduling.d.ts.map +1 -0
  265. package/dist/tools/scheduling.js +115 -0
  266. package/dist/tools/scheduling.js.map +1 -0
  267. package/dist/tools/sharepoint.d.ts +115 -0
  268. package/dist/tools/sharepoint.d.ts.map +1 -0
  269. package/dist/tools/sharepoint.js +99 -0
  270. package/dist/tools/sharepoint.js.map +1 -0
  271. package/dist/tools/task-attachments.d.ts +74 -0
  272. package/dist/tools/task-attachments.d.ts.map +1 -0
  273. package/dist/tools/task-attachments.js +122 -0
  274. package/dist/tools/task-attachments.js.map +1 -0
  275. package/dist/tools/tasks.d.ts +74 -0
  276. package/dist/tools/tasks.d.ts.map +1 -0
  277. package/dist/tools/tasks.js +126 -0
  278. package/dist/tools/tasks.js.map +1 -0
  279. package/dist/tools/teams.d.ts +389 -0
  280. package/dist/tools/teams.d.ts.map +1 -0
  281. package/dist/tools/teams.js +546 -0
  282. package/dist/tools/teams.js.map +1 -0
  283. package/dist/types/calendar.d.ts +60 -0
  284. package/dist/types/calendar.d.ts.map +1 -0
  285. package/dist/types/calendar.js +15 -0
  286. package/dist/types/calendar.js.map +1 -0
  287. package/dist/types/contacts.d.ts +96 -0
  288. package/dist/types/contacts.d.ts.map +1 -0
  289. package/dist/types/contacts.js +41 -0
  290. package/dist/types/contacts.js.map +1 -0
  291. package/dist/types/index.d.ts +15 -0
  292. package/dist/types/index.d.ts.map +1 -0
  293. package/dist/types/index.js +16 -0
  294. package/dist/types/index.js.map +1 -0
  295. package/dist/types/mail.d.ts +108 -0
  296. package/dist/types/mail.d.ts.map +1 -0
  297. package/dist/types/mail.js +40 -0
  298. package/dist/types/mail.js.map +1 -0
  299. package/dist/types/notes.d.ts +26 -0
  300. package/dist/types/notes.d.ts.map +1 -0
  301. package/dist/types/notes.js +6 -0
  302. package/dist/types/notes.js.map +1 -0
  303. package/dist/types/tasks.d.ts +31 -0
  304. package/dist/types/tasks.d.ts.map +1 -0
  305. package/dist/types/tasks.js +6 -0
  306. package/dist/types/tasks.js.map +1 -0
  307. package/dist/utils/dates.d.ts +66 -0
  308. package/dist/utils/dates.d.ts.map +1 -0
  309. package/dist/utils/dates.js +94 -0
  310. package/dist/utils/dates.js.map +1 -0
  311. package/dist/utils/errors.d.ts +218 -0
  312. package/dist/utils/errors.d.ts.map +1 -0
  313. package/dist/utils/errors.js +306 -0
  314. package/dist/utils/errors.js.map +1 -0
  315. package/dist/utils/index.d.ts +10 -0
  316. package/dist/utils/index.d.ts.map +1 -0
  317. package/dist/utils/index.js +10 -0
  318. package/dist/utils/index.js.map +1 -0
  319. package/dist/visualization/html.d.ts +26 -0
  320. package/dist/visualization/html.d.ts.map +1 -0
  321. package/dist/visualization/html.js +306 -0
  322. package/dist/visualization/html.js.map +1 -0
  323. package/dist/visualization/markdown.d.ts +25 -0
  324. package/dist/visualization/markdown.d.ts.map +1 -0
  325. package/dist/visualization/markdown.js +186 -0
  326. package/dist/visualization/markdown.js.map +1 -0
  327. package/dist/visualization/mermaid.d.ts +25 -0
  328. package/dist/visualization/mermaid.d.ts.map +1 -0
  329. package/dist/visualization/mermaid.js +158 -0
  330. package/dist/visualization/mermaid.js.map +1 -0
  331. package/dist/visualization/svg.d.ts +25 -0
  332. package/dist/visualization/svg.d.ts.map +1 -0
  333. package/dist/visualization/svg.js +282 -0
  334. package/dist/visualization/svg.js.map +1 -0
  335. package/dist/visualization/types.d.ts +43 -0
  336. package/dist/visualization/types.d.ts.map +1 -0
  337. package/dist/visualization/types.js +34 -0
  338. package/dist/visualization/types.js.map +1 -0
  339. package/package.json +88 -0
@@ -0,0 +1,555 @@
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
+ * Mail send MCP tools.
7
+ *
8
+ * Provides tools for email draft management and two-phase approval
9
+ * for all send operations (send draft, send email, reply, forward).
10
+ */
11
+ import * as fs from 'fs';
12
+ import { z } from 'zod';
13
+ import { hashDraftForSend, hashDirectSendForApproval, hashReplyForApproval, hashForwardForApproval, } from '../approval/index.js';
14
+ import { ApprovalExpiredError, ApprovalInvalidError, TargetChangedError, NotFoundError, } from '../utils/errors.js';
15
+ import { uploadAttachment, uploadInlineAttachment } from '../graph/attachments.js';
16
+ import { readSignature, writeSignature, appendSignature } from '../signature.js';
17
+ // =============================================================================
18
+ // Input Schemas -- Non-Destructive Operations
19
+ // =============================================================================
20
+ const AttachmentInput = z.strictObject({
21
+ file_path: z.string().describe('Absolute path to the file to attach'),
22
+ name: z.string().optional().describe('Override filename'),
23
+ content_type: z.string().optional().describe('Override MIME type'),
24
+ });
25
+ const InlineImageInput = z.strictObject({
26
+ file_path: z.string().describe('Absolute path to the image file'),
27
+ content_id: z.string().describe('Content-ID for referencing in HTML (use in <img src="cid:content_id">)'),
28
+ });
29
+ export const CreateDraftInput = z
30
+ .strictObject({
31
+ to: z.array(z.string().email()).optional().describe('To recipients'),
32
+ cc: z.array(z.string().email()).optional().describe('CC recipients'),
33
+ bcc: z.array(z.string().email()).optional().describe('BCC recipients'),
34
+ subject: z.string().describe('Email subject'),
35
+ body: z.string().optional().describe('Email body (omit when using body_file)'),
36
+ body_file: z.string().optional().describe('Path to a file containing the email body (alternative to body)'),
37
+ body_type: z.enum(['text', 'html']).default('text').describe('Body content type'),
38
+ attachments: z.array(AttachmentInput).optional().describe('File attachments'),
39
+ inline_images: z.array(InlineImageInput).optional().describe('Inline images for HTML body (reference via cid: in img tags)'),
40
+ include_signature: z.boolean().default(true).describe('Include email signature (default: true)'),
41
+ })
42
+ .refine((data) => data.body != null || data.body_file != null, {
43
+ message: 'Either body or body_file is required',
44
+ path: ['body'],
45
+ });
46
+ export const UpdateDraftInput = z
47
+ .strictObject({
48
+ draft_id: z.number().int().positive().describe('The draft ID to update'),
49
+ to: z.array(z.string().email()).optional().describe('To recipients'),
50
+ cc: z.array(z.string().email()).optional().describe('CC recipients'),
51
+ bcc: z.array(z.string().email()).optional().describe('BCC recipients'),
52
+ subject: z.string().optional().describe('Email subject'),
53
+ body: z.string().optional().describe('Email body (omit when using body_file)'),
54
+ body_file: z.string().optional().describe('Path to a file containing the email body (alternative to body)'),
55
+ body_type: z.enum(['text', 'html']).optional().describe('Body content type'),
56
+ })
57
+ .refine((data) => !(data.body != null && data.body_file != null), {
58
+ message: 'Cannot provide both body and body_file',
59
+ path: ['body'],
60
+ });
61
+ export const AddDraftAttachmentInput = z.strictObject({
62
+ draft_id: z.number().int().positive().describe('The draft ID to add attachment to'),
63
+ file_path: z.string().describe('Absolute path to the file to attach'),
64
+ name: z.string().optional().describe('Override filename'),
65
+ content_type: z.string().optional().describe('Override MIME type'),
66
+ });
67
+ export const AddDraftInlineImageInput = z.strictObject({
68
+ draft_id: z.number().int().positive().describe('The draft ID to add inline image to'),
69
+ file_path: z.string().describe('Absolute path to the image file'),
70
+ content_id: z.string().describe('Content-ID for referencing in HTML (use in <img src="cid:content_id">)'),
71
+ });
72
+ export const ListDraftsInput = z.strictObject({
73
+ limit: z.number().int().min(1).max(100).default(50).describe('Maximum drafts to return'),
74
+ offset: z.number().int().min(0).default(0).describe('Number to skip'),
75
+ });
76
+ // =============================================================================
77
+ // Input Schemas -- Destructive Operations (Two-Phase)
78
+ // =============================================================================
79
+ // Send Draft
80
+ export const PrepareSendDraftInput = z.strictObject({
81
+ draft_id: z.number().int().positive().describe('The draft ID to send'),
82
+ });
83
+ export const ConfirmSendDraftInput = z.strictObject({
84
+ token_id: z.uuid().describe('Approval token from prepare_send_draft'),
85
+ draft_id: z.number().int().positive().describe('The draft ID to send'),
86
+ });
87
+ // Send Email (direct)
88
+ export const PrepareSendEmailInput = z
89
+ .strictObject({
90
+ to: z.array(z.string().email()).min(1).describe('To recipients'),
91
+ cc: z.array(z.string().email()).optional().describe('CC recipients'),
92
+ bcc: z.array(z.string().email()).optional().describe('BCC recipients'),
93
+ subject: z.string().describe('Email subject'),
94
+ body: z.string().optional().describe('Email body (omit when using body_file)'),
95
+ body_file: z.string().optional().describe('Path to a file containing the email body (alternative to body)'),
96
+ body_type: z.enum(['text', 'html']).default('text').describe('Body content type'),
97
+ attachments: z.array(AttachmentInput).optional().describe('File attachments'),
98
+ include_signature: z.boolean().default(true).describe('Include email signature (default: true)'),
99
+ })
100
+ .refine((data) => data.body != null || data.body_file != null, {
101
+ message: 'Either body or body_file is required',
102
+ path: ['body'],
103
+ });
104
+ export const ConfirmSendEmailInput = z.strictObject({
105
+ token_id: z.uuid().describe('Approval token from prepare_send_email'),
106
+ });
107
+ // Reply Email
108
+ export const PrepareReplyEmailInput = z.strictObject({
109
+ message_id: z.number().int().positive().describe('The message ID to reply to'),
110
+ comment: z.string().describe('Reply body'),
111
+ reply_all: z.boolean().default(true).describe('Reply to all recipients (default true)'),
112
+ });
113
+ export const ConfirmReplyEmailInput = z.strictObject({
114
+ token_id: z.uuid().describe('Approval token from prepare_reply_email'),
115
+ message_id: z.number().int().positive().describe('The message ID being replied to'),
116
+ });
117
+ // Forward Email
118
+ export const PrepareForwardEmailInput = z.strictObject({
119
+ message_id: z.number().int().positive().describe('The message ID to forward'),
120
+ to_recipients: z.array(z.string().email()).min(1).describe('Forward to recipients'),
121
+ comment: z.string().optional().describe('Optional comment to include'),
122
+ });
123
+ export const ConfirmForwardEmailInput = z.strictObject({
124
+ token_id: z.uuid().describe('Approval token from prepare_forward_email'),
125
+ message_id: z.number().int().positive().describe('The message ID being forwarded'),
126
+ });
127
+ // =============================================================================
128
+ // Input Schemas -- Draft Reply/Forward (Non-Destructive)
129
+ // =============================================================================
130
+ export const ReplyAsDraftInput = z.strictObject({
131
+ message_id: z.number().int().positive().describe('The message ID to reply to'),
132
+ comment: z.string().optional().describe('Initial reply body text'),
133
+ reply_all: z.boolean().default(false).describe('Reply to all recipients (default: false)'),
134
+ body_type: z.enum(['text', 'html']).default('text').describe('Body content type (default: text)'),
135
+ include_signature: z.boolean().default(true).describe('Include email signature (default: true)'),
136
+ });
137
+ export const ForwardAsDraftInput = z.strictObject({
138
+ message_id: z.number().int().positive().describe('The message ID to forward'),
139
+ to_recipients: z.array(z.string().email()).optional().describe('Forward recipients'),
140
+ comment: z.string().optional().describe('Initial forward body text'),
141
+ body_type: z.enum(['text', 'html']).default('text').describe('Body content type (default: text)'),
142
+ include_signature: z.boolean().default(true).describe('Include email signature (default: true)'),
143
+ });
144
+ export const SetSignatureInput = z.strictObject({
145
+ content: z.string().describe('Signature content (HTML or plain text)'),
146
+ content_type: z.enum(['html', 'text']).default('html').describe('Content type of the signature'),
147
+ });
148
+ export const GetSignatureInput = z.strictObject({});
149
+ // =============================================================================
150
+ // Preview Helpers
151
+ // =============================================================================
152
+ function draftPreview(row) {
153
+ return {
154
+ id: row.id,
155
+ subject: row.subject,
156
+ to: row.toAddresses ?? row.displayTo,
157
+ cc: row.ccAddresses,
158
+ };
159
+ }
160
+ function messagePreview(row) {
161
+ return {
162
+ id: row.id,
163
+ subject: row.subject,
164
+ sender: row.sender,
165
+ senderAddress: row.senderAddress,
166
+ };
167
+ }
168
+ // =============================================================================
169
+ // Validation Helpers
170
+ // =============================================================================
171
+ function throwValidationError(error) {
172
+ switch (error) {
173
+ case 'EXPIRED':
174
+ throw new ApprovalExpiredError();
175
+ case 'NOT_FOUND':
176
+ throw new ApprovalInvalidError('Token not found or already used');
177
+ case 'OPERATION_MISMATCH':
178
+ throw new ApprovalInvalidError('Token was issued for a different operation');
179
+ case 'TARGET_MISMATCH':
180
+ throw new ApprovalInvalidError('Token was issued for a different target');
181
+ case 'ALREADY_CONSUMED':
182
+ throw new ApprovalInvalidError('Token has already been used');
183
+ case 'TARGET_CHANGED':
184
+ throw new TargetChangedError();
185
+ }
186
+ }
187
+ /**
188
+ * Counts recipients from a semicolon-separated address string.
189
+ */
190
+ function countRecipients(addresses) {
191
+ if (addresses == null || addresses.trim() === '')
192
+ return 0;
193
+ return addresses.split(';').filter((a) => a.trim() !== '').length;
194
+ }
195
+ // =============================================================================
196
+ // Mail Send Tools
197
+ // =============================================================================
198
+ /**
199
+ * Mail send tools with two-phase approval for send operations.
200
+ *
201
+ * Provides draft management (create, update, list) as non-destructive ops,
202
+ * and send/reply/forward as two-phase approval operations.
203
+ */
204
+ export class MailSendTools {
205
+ repository;
206
+ tokenManager;
207
+ constructor(repository, tokenManager) {
208
+ this.repository = repository;
209
+ this.tokenManager = tokenManager;
210
+ }
211
+ // ---------------------------------------------------------------------------
212
+ // Non-Destructive Operations
213
+ // ---------------------------------------------------------------------------
214
+ async createDraft(params) {
215
+ const rawBody = params.body_file != null
216
+ ? fs.readFileSync(params.body_file, 'utf-8')
217
+ : params.body;
218
+ const body = appendSignature(rawBody, params.body_type, params.include_signature);
219
+ const { numericId, graphId } = await this.repository.createDraftAsync({
220
+ subject: params.subject,
221
+ body,
222
+ bodyType: params.body_type,
223
+ ...(params.to != null ? { to: params.to } : {}),
224
+ ...(params.cc != null ? { cc: params.cc } : {}),
225
+ ...(params.bcc != null ? { bcc: params.bcc } : {}),
226
+ });
227
+ if (params.attachments != null && params.attachments.length > 0) {
228
+ const graphClient = this.repository.getGraphClient();
229
+ for (const att of params.attachments) {
230
+ await uploadAttachment(graphClient, graphId, att.file_path, att.name, att.content_type);
231
+ }
232
+ }
233
+ if (params.inline_images != null && params.inline_images.length > 0) {
234
+ const graphClient = this.repository.getGraphClient();
235
+ for (const img of params.inline_images) {
236
+ await uploadInlineAttachment(graphClient, graphId, img.file_path, img.content_id);
237
+ }
238
+ }
239
+ return { success: true, draft_id: numericId };
240
+ }
241
+ async updateDraft(params) {
242
+ const updates = {};
243
+ if (params.to !== undefined)
244
+ updates['to'] = params.to;
245
+ if (params.cc !== undefined)
246
+ updates['cc'] = params.cc;
247
+ if (params.bcc !== undefined)
248
+ updates['bcc'] = params.bcc;
249
+ if (params.subject !== undefined)
250
+ updates['subject'] = params.subject;
251
+ // Resolve body content from body or body_file
252
+ const bodyContent = params.body_file != null
253
+ ? fs.readFileSync(params.body_file, 'utf-8')
254
+ : params.body;
255
+ // Format body as Graph API expects: { contentType, content }
256
+ if (bodyContent !== undefined) {
257
+ const contentType = params.body_type ?? 'text';
258
+ updates['body'] = { contentType, content: bodyContent };
259
+ }
260
+ else if (params.body_type !== undefined) {
261
+ // body_type alone without body content — no body update
262
+ }
263
+ await this.repository.updateDraftAsync(params.draft_id, updates);
264
+ return { success: true, message: 'Draft updated.' };
265
+ }
266
+ async addDraftAttachment(params) {
267
+ const graphId = this.repository.getGraphIdForDraft(params.draft_id);
268
+ if (graphId == null)
269
+ throw new Error(`Draft ID ${params.draft_id} not found in cache. Try listing drafts first.`);
270
+ const graphClient = this.repository.getGraphClient();
271
+ await uploadAttachment(graphClient, graphId, params.file_path, params.name, params.content_type);
272
+ return { success: true, message: 'Attachment added to draft.' };
273
+ }
274
+ async addDraftInlineImage(params) {
275
+ const graphId = this.repository.getGraphIdForDraft(params.draft_id);
276
+ if (graphId == null)
277
+ throw new Error(`Draft ID ${params.draft_id} not found in cache. Try listing drafts first.`);
278
+ const graphClient = this.repository.getGraphClient();
279
+ await uploadInlineAttachment(graphClient, graphId, params.file_path, params.content_id);
280
+ return { success: true, message: 'Inline image added to draft.' };
281
+ }
282
+ async listDrafts(params) {
283
+ return this.repository.listDraftsAsync(params.limit, params.offset);
284
+ }
285
+ // ---------------------------------------------------------------------------
286
+ // Prepare Methods (Destructive -- Phase 1)
287
+ // ---------------------------------------------------------------------------
288
+ async prepareSendDraft(params) {
289
+ const draft = await this.requireEmail(params.draft_id);
290
+ const recipientCount = countRecipients(draft.toAddresses) +
291
+ countRecipients(draft.ccAddresses);
292
+ const hash = hashDraftForSend({
293
+ id: draft.id,
294
+ subject: draft.subject,
295
+ recipientCount,
296
+ });
297
+ const token = this.tokenManager.generateToken({
298
+ operation: 'send_draft',
299
+ targetType: 'email',
300
+ targetId: draft.id,
301
+ targetHash: hash,
302
+ });
303
+ return {
304
+ token_id: token.tokenId,
305
+ expires_at: new Date(token.expiresAt).toISOString(),
306
+ draft: draftPreview(draft),
307
+ action: `This draft will be sent: "${draft.subject ?? '(no subject)'}".`,
308
+ };
309
+ }
310
+ prepareSendEmail(params) {
311
+ const rawBody = params.body_file != null
312
+ ? fs.readFileSync(params.body_file, 'utf-8')
313
+ : params.body;
314
+ const body = appendSignature(rawBody, params.body_type, params.include_signature);
315
+ const hash = hashDirectSendForApproval({
316
+ subject: params.subject,
317
+ toCount: params.to.length,
318
+ ccCount: params.cc?.length ?? 0,
319
+ bccCount: params.bcc?.length ?? 0,
320
+ });
321
+ // Use 0 as targetId since there's no pre-existing entity
322
+ const token = this.tokenManager.generateToken({
323
+ operation: 'send_email',
324
+ targetType: 'email',
325
+ targetId: 0,
326
+ targetHash: hash,
327
+ metadata: {
328
+ subject: params.subject,
329
+ body,
330
+ bodyType: params.body_type,
331
+ to: params.to,
332
+ cc: params.cc,
333
+ bcc: params.bcc,
334
+ attachments: params.attachments,
335
+ },
336
+ });
337
+ return {
338
+ token_id: token.tokenId,
339
+ expires_at: new Date(token.expiresAt).toISOString(),
340
+ preview: {
341
+ subject: params.subject,
342
+ to: params.to,
343
+ ...(params.cc != null ? { cc: params.cc } : {}),
344
+ ...(params.bcc != null ? { bcc: params.bcc } : {}),
345
+ },
346
+ action: `A new email will be sent: "${params.subject}" to ${params.to.length} recipient(s).`,
347
+ };
348
+ }
349
+ async prepareReplyEmail(params) {
350
+ const original = await this.requireEmail(params.message_id);
351
+ const hash = hashReplyForApproval({
352
+ originalId: original.id,
353
+ commentLength: params.comment.length,
354
+ replyAll: params.reply_all,
355
+ });
356
+ const token = this.tokenManager.generateToken({
357
+ operation: 'reply_email',
358
+ targetType: 'email',
359
+ targetId: original.id,
360
+ targetHash: hash,
361
+ metadata: {
362
+ comment: params.comment,
363
+ replyAll: params.reply_all,
364
+ },
365
+ });
366
+ const replyType = params.reply_all ? 'reply all' : 'reply';
367
+ return {
368
+ token_id: token.tokenId,
369
+ expires_at: new Date(token.expiresAt).toISOString(),
370
+ original_message: messagePreview(original),
371
+ action: `A ${replyType} will be sent to "${original.subject ?? '(no subject)'}".`,
372
+ };
373
+ }
374
+ async prepareForwardEmail(params) {
375
+ const original = await this.requireEmail(params.message_id);
376
+ const hash = hashForwardForApproval({
377
+ originalId: original.id,
378
+ recipientCount: params.to_recipients.length,
379
+ });
380
+ const token = this.tokenManager.generateToken({
381
+ operation: 'forward_email',
382
+ targetType: 'email',
383
+ targetId: original.id,
384
+ targetHash: hash,
385
+ metadata: {
386
+ toRecipients: params.to_recipients,
387
+ comment: params.comment,
388
+ },
389
+ });
390
+ return {
391
+ token_id: token.tokenId,
392
+ expires_at: new Date(token.expiresAt).toISOString(),
393
+ original_message: messagePreview(original),
394
+ action: `This email will be forwarded to ${params.to_recipients.length} recipient(s): "${original.subject ?? '(no subject)'}".`,
395
+ };
396
+ }
397
+ // ---------------------------------------------------------------------------
398
+ // Confirm Methods (Destructive -- Phase 2)
399
+ // ---------------------------------------------------------------------------
400
+ async confirmSendDraft(params) {
401
+ await this.consumeAndVerifyDraft(params.token_id, 'send_draft', params.draft_id);
402
+ await this.repository.sendDraftAsync(params.draft_id);
403
+ return { success: true, message: 'Draft sent successfully.' };
404
+ }
405
+ async confirmSendEmail(params) {
406
+ const token = this.consumeTokenForSendEmail(params.token_id);
407
+ // Read the full send params from token metadata
408
+ const metadata = token.metadata;
409
+ if (metadata.attachments != null && metadata.attachments.length > 0) {
410
+ // When attachments are present, create a draft, upload attachments, then send it
411
+ const { graphId } = await this.repository.createDraftAsync({
412
+ subject: metadata.subject,
413
+ body: metadata.body,
414
+ bodyType: metadata.bodyType,
415
+ to: metadata.to,
416
+ ...(metadata.cc != null ? { cc: metadata.cc } : {}),
417
+ ...(metadata.bcc != null ? { bcc: metadata.bcc } : {}),
418
+ });
419
+ const graphClient = this.repository.getGraphClient();
420
+ for (const att of metadata.attachments) {
421
+ await uploadAttachment(graphClient, graphId, att.file_path, att.name, att.content_type);
422
+ }
423
+ await graphClient.sendDraft(graphId);
424
+ }
425
+ else {
426
+ await this.repository.sendMailAsync({
427
+ subject: metadata.subject,
428
+ body: metadata.body,
429
+ bodyType: metadata.bodyType,
430
+ to: metadata.to,
431
+ ...(metadata.cc != null ? { cc: metadata.cc } : {}),
432
+ ...(metadata.bcc != null ? { bcc: metadata.bcc } : {}),
433
+ });
434
+ }
435
+ return { success: true, message: 'Email sent successfully.' };
436
+ }
437
+ async confirmReplyEmail(params) {
438
+ const token = this.consumeTokenForMessage(params.token_id, 'reply_email', params.message_id);
439
+ const metadata = token.metadata;
440
+ await this.repository.replyMessageAsync(params.message_id, metadata.comment, metadata.replyAll);
441
+ return { success: true, message: 'Reply sent successfully.' };
442
+ }
443
+ async confirmForwardEmail(params) {
444
+ const token = this.consumeTokenForMessage(params.token_id, 'forward_email', params.message_id);
445
+ const metadata = token.metadata;
446
+ await this.repository.forwardMessageAsync(params.message_id, metadata.toRecipients, metadata.comment);
447
+ return { success: true, message: 'Email forwarded successfully.' };
448
+ }
449
+ // ---------------------------------------------------------------------------
450
+ // Non-Destructive Draft Reply/Forward
451
+ // ---------------------------------------------------------------------------
452
+ async replyAsDraft(params) {
453
+ const baseComment = params.comment ?? (params.include_signature ? '' : undefined);
454
+ const comment = baseComment != null ? appendSignature(baseComment, params.body_type, params.include_signature) : baseComment;
455
+ const { numericId } = await this.repository.replyAsDraftAsync(params.message_id, params.reply_all, comment, params.body_type);
456
+ return {
457
+ success: true,
458
+ draft_id: numericId,
459
+ message: 'Reply draft created. Use update_draft to edit, then prepare_send_draft or prepare_send_email to send.',
460
+ };
461
+ }
462
+ async forwardAsDraft(params) {
463
+ const baseComment = params.comment ?? (params.include_signature ? '' : undefined);
464
+ const comment = baseComment != null ? appendSignature(baseComment, params.body_type, params.include_signature) : baseComment;
465
+ const { numericId } = await this.repository.forwardAsDraftAsync(params.message_id, params.to_recipients, comment, params.body_type);
466
+ return {
467
+ success: true,
468
+ draft_id: numericId,
469
+ message: 'Forward draft created. Use update_draft to edit, then prepare_send_draft or prepare_send_email to send.',
470
+ };
471
+ }
472
+ // ---------------------------------------------------------------------------
473
+ // Signature Management
474
+ // ---------------------------------------------------------------------------
475
+ setSignature(params) {
476
+ try {
477
+ writeSignature(params.content, params.content_type);
478
+ return { success: true, message: 'Signature saved successfully.' };
479
+ }
480
+ catch (err) {
481
+ const message = err instanceof Error ? err.message : String(err);
482
+ return { success: false, message };
483
+ }
484
+ }
485
+ getSignature() {
486
+ const signature = readSignature();
487
+ if (signature == null) {
488
+ return { has_signature: false, message: 'No signature is set. Use set_signature to create one.' };
489
+ }
490
+ return { has_signature: true, content: signature };
491
+ }
492
+ // ---------------------------------------------------------------------------
493
+ // Private Helpers
494
+ // ---------------------------------------------------------------------------
495
+ async requireEmail(emailId) {
496
+ const email = await this.repository.getEmailAsync(emailId);
497
+ if (email == null) {
498
+ throw new NotFoundError('Email', emailId);
499
+ }
500
+ return email;
501
+ }
502
+ /**
503
+ * Consumes a token and verifies the draft hasn't changed.
504
+ * Returns the consumed token for metadata access.
505
+ */
506
+ async consumeAndVerifyDraft(tokenId, operation, draftId) {
507
+ const result = this.tokenManager.consumeToken(tokenId, operation, draftId);
508
+ if (!result.valid) {
509
+ throwValidationError(result.error);
510
+ }
511
+ const token = result.token;
512
+ const draft = await this.requireEmail(draftId);
513
+ const recipientCount = countRecipients(draft.toAddresses) +
514
+ countRecipients(draft.ccAddresses);
515
+ const currentHash = hashDraftForSend({
516
+ id: draft.id,
517
+ subject: draft.subject,
518
+ recipientCount,
519
+ });
520
+ if (currentHash !== token.targetHash) {
521
+ throw new TargetChangedError();
522
+ }
523
+ return token;
524
+ }
525
+ /**
526
+ * Consumes a token for send_email (no pre-existing entity to verify).
527
+ * The targetId is 0, so we use that for validation.
528
+ */
529
+ consumeTokenForSendEmail(tokenId) {
530
+ const result = this.tokenManager.consumeToken(tokenId, 'send_email', 0);
531
+ if (!result.valid) {
532
+ throwValidationError(result.error);
533
+ }
534
+ return result.token;
535
+ }
536
+ /**
537
+ * Consumes a token for reply/forward operations.
538
+ * Validates token but does not re-hash the original message
539
+ * (the original message content is not expected to change).
540
+ */
541
+ consumeTokenForMessage(tokenId, operation, messageId) {
542
+ const result = this.tokenManager.consumeToken(tokenId, operation, messageId);
543
+ if (!result.valid) {
544
+ throwValidationError(result.error);
545
+ }
546
+ return result.token;
547
+ }
548
+ }
549
+ /**
550
+ * Creates mail send tools with the given repository and token manager.
551
+ */
552
+ export function createMailSendTools(repository, tokenManager) {
553
+ return new MailSendTools(repository, tokenManager);
554
+ }
555
+ //# sourceMappingURL=mail-send.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mail-send.js","sourceRoot":"","sources":["../../src/tools/mail-send.ts"],"names":[],"mappings":"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"}