@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,541 @@
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
+ * Mailbox organization MCP tools.
7
+ *
8
+ * Provides tools for organizing emails and folders with a two-phase
9
+ * approval pattern for destructive operations (prepare → confirm).
10
+ */
11
+ import { z } from 'zod';
12
+ import { hashEmailForApproval, hashFolderForApproval, } from '../approval/index.js';
13
+ import { ApprovalExpiredError, ApprovalInvalidError, TargetChangedError, NotFoundError, } from '../utils/errors.js';
14
+ import { appleTimestampToIso } from '../utils/dates.js';
15
+ // =============================================================================
16
+ // Input Schemas — Destructive Operations (Two-Phase)
17
+ // =============================================================================
18
+ export const PrepareDeleteEmailInput = z.strictObject({
19
+ email_id: z.number().int().positive().describe('The email ID to delete'),
20
+ });
21
+ export const ConfirmDeleteEmailInput = z.strictObject({
22
+ token_id: z.uuid().describe('The approval token from prepare_delete_email'),
23
+ email_id: z.number().int().positive().describe('The email ID to delete'),
24
+ });
25
+ export const PrepareMoveEmailInput = z.strictObject({
26
+ email_id: z.number().int().positive().describe('The email ID to move'),
27
+ destination_folder_id: z.number().int().positive().describe('The destination folder ID'),
28
+ });
29
+ export const ConfirmMoveEmailInput = z.strictObject({
30
+ token_id: z.uuid().describe('The approval token from prepare_move_email'),
31
+ email_id: z.number().int().positive().describe('The email ID to move'),
32
+ });
33
+ export const PrepareArchiveEmailInput = z.strictObject({
34
+ email_id: z.number().int().positive().describe('The email ID to archive'),
35
+ });
36
+ export const ConfirmArchiveEmailInput = z.strictObject({
37
+ token_id: z.uuid().describe('The approval token from prepare_archive_email'),
38
+ email_id: z.number().int().positive().describe('The email ID to archive'),
39
+ });
40
+ export const PrepareJunkEmailInput = z.strictObject({
41
+ email_id: z.number().int().positive().describe('The email ID to mark as junk'),
42
+ });
43
+ export const ConfirmJunkEmailInput = z.strictObject({
44
+ token_id: z.uuid().describe('The approval token from prepare_junk_email'),
45
+ email_id: z.number().int().positive().describe('The email ID to mark as junk'),
46
+ });
47
+ export const PrepareDeleteFolderInput = z.strictObject({
48
+ folder_id: z.number().int().positive().describe('The folder ID to delete'),
49
+ });
50
+ export const ConfirmDeleteFolderInput = z.strictObject({
51
+ token_id: z.uuid().describe('The approval token from prepare_delete_folder'),
52
+ folder_id: z.number().int().positive().describe('The folder ID to delete'),
53
+ });
54
+ export const PrepareEmptyFolderInput = z.strictObject({
55
+ folder_id: z.number().int().positive().describe('The folder ID to empty'),
56
+ });
57
+ export const ConfirmEmptyFolderInput = z.strictObject({
58
+ token_id: z.uuid().describe('The approval token from prepare_empty_folder'),
59
+ folder_id: z.number().int().positive().describe('The folder ID to empty'),
60
+ });
61
+ export const PrepareBatchDeleteEmailsInput = z.strictObject({
62
+ email_ids: z
63
+ .array(z.number().int().positive())
64
+ .min(1)
65
+ .max(50)
66
+ .describe('The email IDs to delete (max 50)'),
67
+ });
68
+ export const PrepareBatchMoveEmailsInput = z.strictObject({
69
+ email_ids: z
70
+ .array(z.number().int().positive())
71
+ .min(1)
72
+ .max(50)
73
+ .describe('The email IDs to move (max 50)'),
74
+ destination_folder_id: z.number().int().positive().describe('The destination folder ID'),
75
+ });
76
+ export const ConfirmBatchOperationInput = z.strictObject({
77
+ tokens: z
78
+ .array(z.object({
79
+ token_id: z.uuid().describe('The approval token'),
80
+ email_id: z.number().int().positive().describe('The email ID'),
81
+ }))
82
+ .min(1)
83
+ .max(50)
84
+ .describe('Array of token/email pairs to confirm'),
85
+ });
86
+ // =============================================================================
87
+ // Input Schemas — Low-Risk Modifications (Single Tool)
88
+ // =============================================================================
89
+ export const MarkEmailReadInput = z.strictObject({
90
+ email_id: z.number().int().positive().describe('The email ID to mark as read'),
91
+ });
92
+ export const MarkEmailUnreadInput = z.strictObject({
93
+ email_id: z.number().int().positive().describe('The email ID to mark as unread'),
94
+ });
95
+ export const SetEmailFlagInput = z.strictObject({
96
+ email_id: z.number().int().positive().describe('The email ID to flag'),
97
+ flag_status: z
98
+ .number()
99
+ .int()
100
+ .min(0)
101
+ .max(2)
102
+ .describe('Flag status: 0=not flagged, 1=flagged, 2=completed'),
103
+ });
104
+ export const ClearEmailFlagInput = z.strictObject({
105
+ email_id: z.number().int().positive().describe('The email ID to clear the flag from'),
106
+ });
107
+ export const SetEmailCategoriesInput = z.strictObject({
108
+ email_id: z.number().int().positive().describe('The email ID'),
109
+ categories: z
110
+ .array(z.string().min(1))
111
+ .describe('Categories to set (replaces existing). Use empty array to clear.'),
112
+ });
113
+ export const SetEmailImportanceInput = z.strictObject({
114
+ email_id: z.number().int().positive().describe('The email ID'),
115
+ importance: z.enum(['low', 'normal', 'high']).describe('Email importance level'),
116
+ });
117
+ // =============================================================================
118
+ // Input Schemas — Non-Destructive Operations
119
+ // =============================================================================
120
+ export const CreateFolderInput = z.strictObject({
121
+ name: z.string().min(1).max(255).describe('Name for the new folder'),
122
+ parent_folder_id: z
123
+ .number()
124
+ .int()
125
+ .positive()
126
+ .optional()
127
+ .describe('Optional parent folder ID (creates top-level if omitted)'),
128
+ });
129
+ export const RenameFolderInput = z.strictObject({
130
+ folder_id: z.number().int().positive().describe('The folder ID to rename'),
131
+ new_name: z.string().min(1).max(255).describe('The new folder name'),
132
+ });
133
+ export const MoveFolderInput = z.strictObject({
134
+ folder_id: z.number().int().positive().describe('The folder ID to move'),
135
+ destination_parent_id: z
136
+ .number()
137
+ .int()
138
+ .positive()
139
+ .describe('The destination parent folder ID'),
140
+ });
141
+ // =============================================================================
142
+ // Preview Helpers
143
+ // =============================================================================
144
+ function emailPreview(row) {
145
+ return {
146
+ id: row.id,
147
+ subject: row.subject,
148
+ sender: row.sender,
149
+ senderAddress: row.senderAddress,
150
+ folderId: row.folderId,
151
+ timeReceived: row.timeReceived != null ? appleTimestampToIso(row.timeReceived) : null,
152
+ };
153
+ }
154
+ function folderPreview(row) {
155
+ return {
156
+ id: row.id,
157
+ name: row.name,
158
+ messageCount: row.messageCount,
159
+ unreadCount: row.unreadCount,
160
+ };
161
+ }
162
+ // =============================================================================
163
+ // Validation Helpers
164
+ // =============================================================================
165
+ function throwValidationError(error) {
166
+ switch (error) {
167
+ case 'EXPIRED':
168
+ throw new ApprovalExpiredError();
169
+ case 'NOT_FOUND':
170
+ throw new ApprovalInvalidError('Token not found or already used');
171
+ case 'OPERATION_MISMATCH':
172
+ throw new ApprovalInvalidError('Token was issued for a different operation');
173
+ case 'TARGET_MISMATCH':
174
+ throw new ApprovalInvalidError('Token was issued for a different target');
175
+ case 'ALREADY_CONSUMED':
176
+ throw new ApprovalInvalidError('Token has already been used');
177
+ case 'TARGET_CHANGED':
178
+ throw new TargetChangedError();
179
+ }
180
+ }
181
+ // =============================================================================
182
+ // Mailbox Organization Tools
183
+ // =============================================================================
184
+ /**
185
+ * Mailbox organization tools with two-phase approval for destructive ops.
186
+ *
187
+ * Works with both sync (AppleScript) and async (Graph) backends via
188
+ * the IMailboxRepository interface and MaybePromise return types.
189
+ */
190
+ export class MailboxOrganizationTools {
191
+ repository;
192
+ tokenManager;
193
+ constructor(repository, tokenManager) {
194
+ this.repository = repository;
195
+ this.tokenManager = tokenManager;
196
+ }
197
+ // ---------------------------------------------------------------------------
198
+ // Prepare Methods (Destructive — Phase 1)
199
+ // ---------------------------------------------------------------------------
200
+ async prepareDeleteEmail(params) {
201
+ const email = await this.requireEmail(params.email_id);
202
+ const hash = hashEmailForApproval(email);
203
+ const token = this.tokenManager.generateToken({
204
+ operation: 'delete_email',
205
+ targetType: 'email',
206
+ targetId: email.id,
207
+ targetHash: hash,
208
+ });
209
+ return {
210
+ token_id: token.tokenId,
211
+ expires_at: new Date(token.expiresAt).toISOString(),
212
+ email: emailPreview(email),
213
+ action: 'This email will be moved to the Deleted Items folder.',
214
+ };
215
+ }
216
+ async prepareMoveEmail(params) {
217
+ const email = await this.requireEmail(params.email_id);
218
+ const destFolder = await this.requireFolder(params.destination_folder_id);
219
+ const hash = hashEmailForApproval(email);
220
+ const token = this.tokenManager.generateToken({
221
+ operation: 'move_email',
222
+ targetType: 'email',
223
+ targetId: email.id,
224
+ targetHash: hash,
225
+ metadata: { destinationFolderId: destFolder.id },
226
+ });
227
+ return {
228
+ token_id: token.tokenId,
229
+ expires_at: new Date(token.expiresAt).toISOString(),
230
+ email: emailPreview(email),
231
+ destination_folder: folderPreview(destFolder),
232
+ action: `This email will be moved to "${destFolder.name ?? 'Unnamed'}".`,
233
+ };
234
+ }
235
+ async prepareArchiveEmail(params) {
236
+ const email = await this.requireEmail(params.email_id);
237
+ const hash = hashEmailForApproval(email);
238
+ const token = this.tokenManager.generateToken({
239
+ operation: 'archive_email',
240
+ targetType: 'email',
241
+ targetId: email.id,
242
+ targetHash: hash,
243
+ });
244
+ return {
245
+ token_id: token.tokenId,
246
+ expires_at: new Date(token.expiresAt).toISOString(),
247
+ email: emailPreview(email),
248
+ action: 'This email will be moved to the Archive folder.',
249
+ };
250
+ }
251
+ async prepareJunkEmail(params) {
252
+ const email = await this.requireEmail(params.email_id);
253
+ const hash = hashEmailForApproval(email);
254
+ const token = this.tokenManager.generateToken({
255
+ operation: 'junk_email',
256
+ targetType: 'email',
257
+ targetId: email.id,
258
+ targetHash: hash,
259
+ });
260
+ return {
261
+ token_id: token.tokenId,
262
+ expires_at: new Date(token.expiresAt).toISOString(),
263
+ email: emailPreview(email),
264
+ action: 'This email will be moved to the Junk folder.',
265
+ };
266
+ }
267
+ async prepareDeleteFolder(params) {
268
+ const folder = await this.requireFolder(params.folder_id);
269
+ const hash = hashFolderForApproval(folder);
270
+ const token = this.tokenManager.generateToken({
271
+ operation: 'delete_folder',
272
+ targetType: 'folder',
273
+ targetId: folder.id,
274
+ targetHash: hash,
275
+ });
276
+ return {
277
+ token_id: token.tokenId,
278
+ expires_at: new Date(token.expiresAt).toISOString(),
279
+ folder: folderPreview(folder),
280
+ action: `This folder and its ${folder.messageCount} messages will be deleted.`,
281
+ };
282
+ }
283
+ async prepareEmptyFolder(params) {
284
+ const folder = await this.requireFolder(params.folder_id);
285
+ const hash = hashFolderForApproval(folder);
286
+ const token = this.tokenManager.generateToken({
287
+ operation: 'empty_folder',
288
+ targetType: 'folder',
289
+ targetId: folder.id,
290
+ targetHash: hash,
291
+ });
292
+ return {
293
+ token_id: token.tokenId,
294
+ expires_at: new Date(token.expiresAt).toISOString(),
295
+ folder: folderPreview(folder),
296
+ action: `All ${folder.messageCount} messages in this folder will be deleted.`,
297
+ };
298
+ }
299
+ async prepareBatchDeleteEmails(params) {
300
+ const tokens = [];
301
+ for (const emailId of params.email_ids) {
302
+ const email = await this.requireEmail(emailId);
303
+ const hash = hashEmailForApproval(email);
304
+ const token = this.tokenManager.generateToken({
305
+ operation: 'batch_delete_emails',
306
+ targetType: 'email',
307
+ targetId: email.id,
308
+ targetHash: hash,
309
+ });
310
+ tokens.push({
311
+ token_id: token.tokenId,
312
+ email: emailPreview(email),
313
+ });
314
+ }
315
+ const firstToken = this.tokenManager.validateToken(tokens[0].token_id, 'batch_delete_emails', params.email_ids[0]);
316
+ return {
317
+ tokens,
318
+ expires_at: firstToken.token != null
319
+ ? new Date(firstToken.token.expiresAt).toISOString()
320
+ : null,
321
+ action: `${tokens.length} emails will be moved to the Deleted Items folder. You may selectively confirm by omitting tokens.`,
322
+ };
323
+ }
324
+ async prepareBatchMoveEmails(params) {
325
+ const destFolder = await this.requireFolder(params.destination_folder_id);
326
+ const tokens = [];
327
+ for (const emailId of params.email_ids) {
328
+ const email = await this.requireEmail(emailId);
329
+ const hash = hashEmailForApproval(email);
330
+ const token = this.tokenManager.generateToken({
331
+ operation: 'batch_move_emails',
332
+ targetType: 'email',
333
+ targetId: email.id,
334
+ targetHash: hash,
335
+ metadata: { destinationFolderId: destFolder.id },
336
+ });
337
+ tokens.push({
338
+ token_id: token.tokenId,
339
+ email: emailPreview(email),
340
+ });
341
+ }
342
+ const firstToken = this.tokenManager.validateToken(tokens[0].token_id, 'batch_move_emails', params.email_ids[0]);
343
+ return {
344
+ tokens,
345
+ destination_folder: folderPreview(destFolder),
346
+ expires_at: firstToken.token != null
347
+ ? new Date(firstToken.token.expiresAt).toISOString()
348
+ : null,
349
+ action: `${tokens.length} emails will be moved to "${destFolder.name ?? 'Unnamed'}". You may selectively confirm by omitting tokens.`,
350
+ };
351
+ }
352
+ // ---------------------------------------------------------------------------
353
+ // Confirm Methods (Destructive — Phase 2)
354
+ // ---------------------------------------------------------------------------
355
+ async confirmDeleteEmail(params) {
356
+ await this.consumeAndVerifyEmail(params.token_id, 'delete_email', params.email_id);
357
+ await this.repository.deleteEmail(params.email_id);
358
+ return { success: true, message: 'Email moved to Deleted Items.' };
359
+ }
360
+ async confirmMoveEmail(params) {
361
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
362
+ const token = await this.consumeAndVerifyEmail(params.token_id, 'move_email', params.email_id);
363
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
364
+ const destFolderId = token.metadata['destinationFolderId'];
365
+ await this.repository.moveEmail(params.email_id, destFolderId);
366
+ return { success: true, message: 'Email moved successfully.' };
367
+ }
368
+ async confirmArchiveEmail(params) {
369
+ await this.consumeAndVerifyEmail(params.token_id, 'archive_email', params.email_id);
370
+ await this.repository.archiveEmail(params.email_id);
371
+ return { success: true, message: 'Email moved to Archive.' };
372
+ }
373
+ async confirmJunkEmail(params) {
374
+ await this.consumeAndVerifyEmail(params.token_id, 'junk_email', params.email_id);
375
+ await this.repository.junkEmail(params.email_id);
376
+ return { success: true, message: 'Email moved to Junk.' };
377
+ }
378
+ async confirmDeleteFolder(params) {
379
+ await this.consumeAndVerifyFolder(params.token_id, 'delete_folder', params.folder_id);
380
+ await this.repository.deleteFolder(params.folder_id);
381
+ return { success: true, message: 'Folder deleted.' };
382
+ }
383
+ async confirmEmptyFolder(params) {
384
+ await this.consumeAndVerifyFolder(params.token_id, 'empty_folder', params.folder_id);
385
+ await this.repository.emptyFolder(params.folder_id);
386
+ return { success: true, message: 'Folder emptied.' };
387
+ }
388
+ async confirmBatchOperation(params) {
389
+ const results = [];
390
+ for (const { token_id, email_id } of params.tokens) {
391
+ try {
392
+ // Peek at the token to determine the operation type
393
+ const peekResult = this.tokenManager.validateToken(token_id, 'batch_delete_emails', email_id);
394
+ let operation;
395
+ if (peekResult.valid) {
396
+ operation = 'batch_delete_emails';
397
+ }
398
+ else if (peekResult.error === 'OPERATION_MISMATCH') {
399
+ // Try the other batch operation
400
+ const moveResult = this.tokenManager.validateToken(token_id, 'batch_move_emails', email_id);
401
+ if (!moveResult.valid) {
402
+ throwValidationError(moveResult.error);
403
+ }
404
+ operation = 'batch_move_emails';
405
+ }
406
+ else {
407
+ throwValidationError(peekResult.error);
408
+ // unreachable, but satisfies typescript
409
+ operation = 'batch_delete_emails';
410
+ }
411
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
412
+ const token = await this.consumeAndVerifyEmail(token_id, operation, email_id);
413
+ if (operation === 'batch_delete_emails') {
414
+ await this.repository.deleteEmail(email_id);
415
+ }
416
+ else {
417
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
418
+ const destFolderId = token.metadata['destinationFolderId'];
419
+ await this.repository.moveEmail(email_id, destFolderId);
420
+ }
421
+ results.push({ email_id, success: true });
422
+ }
423
+ catch (error) {
424
+ const message = error instanceof Error ? error.message : 'Unknown error';
425
+ results.push({ email_id, success: false, error: message });
426
+ }
427
+ }
428
+ const succeeded = results.filter((r) => r.success).length;
429
+ const failed = results.filter((r) => !r.success).length;
430
+ return {
431
+ results,
432
+ summary: { total: results.length, succeeded, failed },
433
+ };
434
+ }
435
+ // ---------------------------------------------------------------------------
436
+ // Low-Risk Modifications (Single Tool)
437
+ // ---------------------------------------------------------------------------
438
+ async markEmailRead(params) {
439
+ await this.requireEmail(params.email_id);
440
+ await this.repository.markEmailRead(params.email_id, true);
441
+ return { success: true, message: 'Email marked as read.' };
442
+ }
443
+ async markEmailUnread(params) {
444
+ await this.requireEmail(params.email_id);
445
+ await this.repository.markEmailRead(params.email_id, false);
446
+ return { success: true, message: 'Email marked as unread.' };
447
+ }
448
+ async setEmailFlag(params) {
449
+ await this.requireEmail(params.email_id);
450
+ await this.repository.setEmailFlag(params.email_id, params.flag_status);
451
+ return { success: true, message: 'Email flag updated.' };
452
+ }
453
+ async clearEmailFlag(params) {
454
+ await this.requireEmail(params.email_id);
455
+ await this.repository.setEmailFlag(params.email_id, 0);
456
+ return { success: true, message: 'Email flag cleared.' };
457
+ }
458
+ async setEmailCategories(params) {
459
+ await this.requireEmail(params.email_id);
460
+ await this.repository.setEmailCategories(params.email_id, params.categories);
461
+ return { success: true, message: 'Email categories updated.' };
462
+ }
463
+ async setEmailImportance(params) {
464
+ await this.repository.setEmailImportance(params.email_id, params.importance);
465
+ return { success: true, message: `Email importance set to ${params.importance}.` };
466
+ }
467
+ // ---------------------------------------------------------------------------
468
+ // Non-Destructive Operations
469
+ // ---------------------------------------------------------------------------
470
+ async createFolder(params) {
471
+ const newFolder = await this.repository.createFolder(params.name, params.parent_folder_id);
472
+ return { success: true, folder: folderPreview(newFolder) };
473
+ }
474
+ async renameFolder(params) {
475
+ await this.requireFolder(params.folder_id);
476
+ await this.repository.renameFolder(params.folder_id, params.new_name);
477
+ return { success: true, message: `Folder renamed to "${params.new_name}".` };
478
+ }
479
+ async moveFolder(params) {
480
+ await this.requireFolder(params.folder_id);
481
+ await this.requireFolder(params.destination_parent_id);
482
+ await this.repository.moveFolder(params.folder_id, params.destination_parent_id);
483
+ return { success: true, message: 'Folder moved.' };
484
+ }
485
+ // ---------------------------------------------------------------------------
486
+ // Private Helpers
487
+ // ---------------------------------------------------------------------------
488
+ async requireEmail(emailId) {
489
+ const email = await this.repository.getEmail(emailId);
490
+ if (email == null) {
491
+ throw new NotFoundError('Email', emailId);
492
+ }
493
+ return email;
494
+ }
495
+ async requireFolder(folderId) {
496
+ const folder = await this.repository.getFolder(folderId);
497
+ if (folder == null) {
498
+ throw new NotFoundError('Folder', folderId);
499
+ }
500
+ return folder;
501
+ }
502
+ /**
503
+ * Consumes a token and verifies the email hasn't changed.
504
+ * Returns the consumed token for metadata access.
505
+ */
506
+ async consumeAndVerifyEmail(tokenId, operation, emailId) {
507
+ const result = this.tokenManager.consumeToken(tokenId, operation, emailId);
508
+ if (!result.valid) {
509
+ throwValidationError(result.error);
510
+ }
511
+ const token = result.token;
512
+ const email = await this.requireEmail(emailId);
513
+ const currentHash = hashEmailForApproval(email);
514
+ if (currentHash !== token.targetHash) {
515
+ throw new TargetChangedError();
516
+ }
517
+ return token;
518
+ }
519
+ /**
520
+ * Consumes a token and verifies the folder hasn't changed.
521
+ */
522
+ async consumeAndVerifyFolder(tokenId, operation, folderId) {
523
+ const result = this.tokenManager.consumeToken(tokenId, operation, folderId);
524
+ if (!result.valid) {
525
+ throwValidationError(result.error);
526
+ }
527
+ const token = result.token;
528
+ const folder = await this.requireFolder(folderId);
529
+ const currentHash = hashFolderForApproval(folder);
530
+ if (currentHash !== token.targetHash) {
531
+ throw new TargetChangedError();
532
+ }
533
+ }
534
+ }
535
+ /**
536
+ * Creates mailbox organization tools with the given repository and token manager.
537
+ */
538
+ export function createMailboxOrganizationTools(repository, tokenManager) {
539
+ return new MailboxOrganizationTools(repository, tokenManager);
540
+ }
541
+ //# sourceMappingURL=mailbox-organization.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mailbox-organization.js","sourceRoot":"","sources":["../../src/tools/mailbox-organization.ts"],"names":[],"mappings":"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"}