@mcp-z/mcp-outlook 1.0.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 (300) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +165 -0
  3. package/bin/server.js +5 -0
  4. package/dist/cjs/constants.d.cts +10 -0
  5. package/dist/cjs/constants.d.ts +10 -0
  6. package/dist/cjs/constants.js +35 -0
  7. package/dist/cjs/constants.js.map +1 -0
  8. package/dist/cjs/email/composition/outlook-message-builder.d.cts +36 -0
  9. package/dist/cjs/email/composition/outlook-message-builder.d.ts +36 -0
  10. package/dist/cjs/email/composition/outlook-message-builder.js +56 -0
  11. package/dist/cjs/email/composition/outlook-message-builder.js.map +1 -0
  12. package/dist/cjs/email/messages/messages.d.cts +7 -0
  13. package/dist/cjs/email/messages/messages.d.ts +7 -0
  14. package/dist/cjs/email/messages/messages.js +61 -0
  15. package/dist/cjs/email/messages/messages.js.map +1 -0
  16. package/dist/cjs/email/parsing/header-parsing.d.cts +18 -0
  17. package/dist/cjs/email/parsing/header-parsing.d.ts +18 -0
  18. package/dist/cjs/email/parsing/header-parsing.js +42 -0
  19. package/dist/cjs/email/parsing/header-parsing.js.map +1 -0
  20. package/dist/cjs/email/parsing/message-extraction.d.cts +4 -0
  21. package/dist/cjs/email/parsing/message-extraction.d.ts +4 -0
  22. package/dist/cjs/email/parsing/message-extraction.js +192 -0
  23. package/dist/cjs/email/parsing/message-extraction.js.map +1 -0
  24. package/dist/cjs/email/parsing/message-mapping.d.cts +21 -0
  25. package/dist/cjs/email/parsing/message-mapping.d.ts +21 -0
  26. package/dist/cjs/email/parsing/message-mapping.js +47 -0
  27. package/dist/cjs/email/parsing/message-mapping.js.map +1 -0
  28. package/dist/cjs/email/querying/execute-query.d.cts +20 -0
  29. package/dist/cjs/email/querying/execute-query.d.ts +20 -0
  30. package/dist/cjs/email/querying/execute-query.js +268 -0
  31. package/dist/cjs/email/querying/execute-query.js.map +1 -0
  32. package/dist/cjs/email/querying/query-builder.d.cts +32 -0
  33. package/dist/cjs/email/querying/query-builder.d.ts +32 -0
  34. package/dist/cjs/email/querying/query-builder.js +528 -0
  35. package/dist/cjs/email/querying/query-builder.js.map +1 -0
  36. package/dist/cjs/email/querying/search-execution.d.cts +24 -0
  37. package/dist/cjs/email/querying/search-execution.d.ts +24 -0
  38. package/dist/cjs/email/querying/search-execution.js +261 -0
  39. package/dist/cjs/email/querying/search-execution.js.map +1 -0
  40. package/dist/cjs/index.d.cts +8 -0
  41. package/dist/cjs/index.d.ts +8 -0
  42. package/dist/cjs/index.js +314 -0
  43. package/dist/cjs/index.js.map +1 -0
  44. package/dist/cjs/lib/create-store.d.cts +2 -0
  45. package/dist/cjs/lib/create-store.d.ts +2 -0
  46. package/dist/cjs/lib/create-store.js +166 -0
  47. package/dist/cjs/lib/create-store.js.map +1 -0
  48. package/dist/cjs/lib/messages-to-row.d.cts +39 -0
  49. package/dist/cjs/lib/messages-to-row.d.ts +39 -0
  50. package/dist/cjs/lib/messages-to-row.js +177 -0
  51. package/dist/cjs/lib/messages-to-row.js.map +1 -0
  52. package/dist/cjs/lib/outlook/index.d.cts +7 -0
  53. package/dist/cjs/lib/outlook/index.d.ts +7 -0
  54. package/dist/cjs/lib/outlook/index.js +56 -0
  55. package/dist/cjs/lib/outlook/index.js.map +1 -0
  56. package/dist/cjs/lib/outlook/types.d.cts +22 -0
  57. package/dist/cjs/lib/outlook/types.d.ts +22 -0
  58. package/dist/cjs/lib/outlook/types.js +6 -0
  59. package/dist/cjs/lib/outlook/types.js.map +1 -0
  60. package/dist/cjs/mcp/index.d.cts +3 -0
  61. package/dist/cjs/mcp/index.d.ts +3 -0
  62. package/dist/cjs/mcp/index.js +66 -0
  63. package/dist/cjs/mcp/index.js.map +1 -0
  64. package/dist/cjs/mcp/prompts/draft-email.d.cts +30 -0
  65. package/dist/cjs/mcp/prompts/draft-email.d.ts +30 -0
  66. package/dist/cjs/mcp/prompts/draft-email.js +184 -0
  67. package/dist/cjs/mcp/prompts/draft-email.js.map +1 -0
  68. package/dist/cjs/mcp/prompts/index.d.cts +2 -0
  69. package/dist/cjs/mcp/prompts/index.d.ts +2 -0
  70. package/dist/cjs/mcp/prompts/index.js +26 -0
  71. package/dist/cjs/mcp/prompts/index.js.map +1 -0
  72. package/dist/cjs/mcp/prompts/query-syntax.d.cts +19 -0
  73. package/dist/cjs/mcp/prompts/query-syntax.d.ts +19 -0
  74. package/dist/cjs/mcp/prompts/query-syntax.js +169 -0
  75. package/dist/cjs/mcp/prompts/query-syntax.js.map +1 -0
  76. package/dist/cjs/mcp/resources/email.d.cts +11 -0
  77. package/dist/cjs/mcp/resources/email.d.ts +11 -0
  78. package/dist/cjs/mcp/resources/email.js +233 -0
  79. package/dist/cjs/mcp/resources/email.js.map +1 -0
  80. package/dist/cjs/mcp/resources/index.d.cts +1 -0
  81. package/dist/cjs/mcp/resources/index.d.ts +1 -0
  82. package/dist/cjs/mcp/resources/index.js +17 -0
  83. package/dist/cjs/mcp/resources/index.js.map +1 -0
  84. package/dist/cjs/mcp/tools/categories-list.d.cts +96 -0
  85. package/dist/cjs/mcp/tools/categories-list.d.ts +96 -0
  86. package/dist/cjs/mcp/tools/categories-list.js +252 -0
  87. package/dist/cjs/mcp/tools/categories-list.js.map +1 -0
  88. package/dist/cjs/mcp/tools/index.d.cts +11 -0
  89. package/dist/cjs/mcp/tools/index.d.ts +11 -0
  90. package/dist/cjs/mcp/tools/index.js +62 -0
  91. package/dist/cjs/mcp/tools/index.js.map +1 -0
  92. package/dist/cjs/mcp/tools/label-add.d.cts +44 -0
  93. package/dist/cjs/mcp/tools/label-add.d.ts +44 -0
  94. package/dist/cjs/mcp/tools/label-add.js +249 -0
  95. package/dist/cjs/mcp/tools/label-add.js.map +1 -0
  96. package/dist/cjs/mcp/tools/label-delete.d.cts +54 -0
  97. package/dist/cjs/mcp/tools/label-delete.d.ts +54 -0
  98. package/dist/cjs/mcp/tools/label-delete.js +497 -0
  99. package/dist/cjs/mcp/tools/label-delete.js.map +1 -0
  100. package/dist/cjs/mcp/tools/labels-list.d.cts +96 -0
  101. package/dist/cjs/mcp/tools/labels-list.d.ts +96 -0
  102. package/dist/cjs/mcp/tools/labels-list.js +252 -0
  103. package/dist/cjs/mcp/tools/labels-list.js.map +1 -0
  104. package/dist/cjs/mcp/tools/message-get.d.cts +110 -0
  105. package/dist/cjs/mcp/tools/message-get.d.ts +110 -0
  106. package/dist/cjs/mcp/tools/message-get.js +289 -0
  107. package/dist/cjs/mcp/tools/message-get.js.map +1 -0
  108. package/dist/cjs/mcp/tools/message-mark-read.d.cts +42 -0
  109. package/dist/cjs/mcp/tools/message-mark-read.d.ts +42 -0
  110. package/dist/cjs/mcp/tools/message-mark-read.js +254 -0
  111. package/dist/cjs/mcp/tools/message-mark-read.js.map +1 -0
  112. package/dist/cjs/mcp/tools/message-move-to-trash.d.cts +54 -0
  113. package/dist/cjs/mcp/tools/message-move-to-trash.d.ts +54 -0
  114. package/dist/cjs/mcp/tools/message-move-to-trash.js +460 -0
  115. package/dist/cjs/mcp/tools/message-move-to-trash.js.map +1 -0
  116. package/dist/cjs/mcp/tools/message-respond.d.cts +52 -0
  117. package/dist/cjs/mcp/tools/message-respond.d.ts +52 -0
  118. package/dist/cjs/mcp/tools/message-respond.js +263 -0
  119. package/dist/cjs/mcp/tools/message-respond.js.map +1 -0
  120. package/dist/cjs/mcp/tools/message-search.d.cts +138 -0
  121. package/dist/cjs/mcp/tools/message-search.d.ts +138 -0
  122. package/dist/cjs/mcp/tools/message-search.js +408 -0
  123. package/dist/cjs/mcp/tools/message-search.js.map +1 -0
  124. package/dist/cjs/mcp/tools/message-send.d.cts +66 -0
  125. package/dist/cjs/mcp/tools/message-send.d.ts +66 -0
  126. package/dist/cjs/mcp/tools/message-send.js +298 -0
  127. package/dist/cjs/mcp/tools/message-send.js.map +1 -0
  128. package/dist/cjs/mcp/tools/messages-export-csv.d.cts +72 -0
  129. package/dist/cjs/mcp/tools/messages-export-csv.d.ts +72 -0
  130. package/dist/cjs/mcp/tools/messages-export-csv.js +540 -0
  131. package/dist/cjs/mcp/tools/messages-export-csv.js.map +1 -0
  132. package/dist/cjs/package.json +1 -0
  133. package/dist/cjs/schemas/index.d.cts +2 -0
  134. package/dist/cjs/schemas/index.d.ts +2 -0
  135. package/dist/cjs/schemas/index.js +20 -0
  136. package/dist/cjs/schemas/index.js.map +1 -0
  137. package/dist/cjs/schemas/outlook-query-schema.d.cts +53 -0
  138. package/dist/cjs/schemas/outlook-query-schema.d.ts +53 -0
  139. package/dist/cjs/schemas/outlook-query-schema.js +115 -0
  140. package/dist/cjs/schemas/outlook-query-schema.js.map +1 -0
  141. package/dist/cjs/schemas/outlook-validation.d.cts +428 -0
  142. package/dist/cjs/schemas/outlook-validation.d.ts +428 -0
  143. package/dist/cjs/schemas/outlook-validation.js +420 -0
  144. package/dist/cjs/schemas/outlook-validation.js.map +1 -0
  145. package/dist/cjs/setup/config.d.cts +50 -0
  146. package/dist/cjs/setup/config.d.ts +50 -0
  147. package/dist/cjs/setup/config.js +217 -0
  148. package/dist/cjs/setup/config.js.map +1 -0
  149. package/dist/cjs/setup/http.d.cts +8 -0
  150. package/dist/cjs/setup/http.d.ts +8 -0
  151. package/dist/cjs/setup/http.js +267 -0
  152. package/dist/cjs/setup/http.js.map +1 -0
  153. package/dist/cjs/setup/index.d.cts +5 -0
  154. package/dist/cjs/setup/index.d.ts +5 -0
  155. package/dist/cjs/setup/index.js +46 -0
  156. package/dist/cjs/setup/index.js.map +1 -0
  157. package/dist/cjs/setup/oauth-microsoft.d.cts +43 -0
  158. package/dist/cjs/setup/oauth-microsoft.d.ts +43 -0
  159. package/dist/cjs/setup/oauth-microsoft.js +366 -0
  160. package/dist/cjs/setup/oauth-microsoft.js.map +1 -0
  161. package/dist/cjs/setup/runtime.d.cts +11 -0
  162. package/dist/cjs/setup/runtime.d.ts +11 -0
  163. package/dist/cjs/setup/runtime.js +489 -0
  164. package/dist/cjs/setup/runtime.js.map +1 -0
  165. package/dist/cjs/setup/stdio.d.cts +7 -0
  166. package/dist/cjs/setup/stdio.d.ts +7 -0
  167. package/dist/cjs/setup/stdio.js +239 -0
  168. package/dist/cjs/setup/stdio.js.map +1 -0
  169. package/dist/cjs/types.d.cts +54 -0
  170. package/dist/cjs/types.d.ts +54 -0
  171. package/dist/cjs/types.js +5 -0
  172. package/dist/cjs/types.js.map +1 -0
  173. package/dist/esm/constants.d.ts +10 -0
  174. package/dist/esm/constants.js +13 -0
  175. package/dist/esm/constants.js.map +1 -0
  176. package/dist/esm/email/composition/outlook-message-builder.d.ts +36 -0
  177. package/dist/esm/email/composition/outlook-message-builder.js +46 -0
  178. package/dist/esm/email/composition/outlook-message-builder.js.map +1 -0
  179. package/dist/esm/email/messages/messages.d.ts +7 -0
  180. package/dist/esm/email/messages/messages.js +42 -0
  181. package/dist/esm/email/messages/messages.js.map +1 -0
  182. package/dist/esm/email/parsing/header-parsing.d.ts +18 -0
  183. package/dist/esm/email/parsing/header-parsing.js +18 -0
  184. package/dist/esm/email/parsing/header-parsing.js.map +1 -0
  185. package/dist/esm/email/parsing/message-extraction.d.ts +4 -0
  186. package/dist/esm/email/parsing/message-extraction.js +26 -0
  187. package/dist/esm/email/parsing/message-extraction.js.map +1 -0
  188. package/dist/esm/email/parsing/message-mapping.d.ts +21 -0
  189. package/dist/esm/email/parsing/message-mapping.js +35 -0
  190. package/dist/esm/email/parsing/message-mapping.js.map +1 -0
  191. package/dist/esm/email/querying/execute-query.d.ts +20 -0
  192. package/dist/esm/email/querying/execute-query.js +48 -0
  193. package/dist/esm/email/querying/execute-query.js.map +1 -0
  194. package/dist/esm/email/querying/query-builder.d.ts +32 -0
  195. package/dist/esm/email/querying/query-builder.js +424 -0
  196. package/dist/esm/email/querying/query-builder.js.map +1 -0
  197. package/dist/esm/email/querying/search-execution.d.ts +24 -0
  198. package/dist/esm/email/querying/search-execution.js +96 -0
  199. package/dist/esm/email/querying/search-execution.js.map +1 -0
  200. package/dist/esm/index.d.ts +8 -0
  201. package/dist/esm/index.js +34 -0
  202. package/dist/esm/index.js.map +1 -0
  203. package/dist/esm/lib/create-store.d.ts +2 -0
  204. package/dist/esm/lib/create-store.js +6 -0
  205. package/dist/esm/lib/create-store.js.map +1 -0
  206. package/dist/esm/lib/messages-to-row.d.ts +39 -0
  207. package/dist/esm/lib/messages-to-row.js +141 -0
  208. package/dist/esm/lib/messages-to-row.js.map +1 -0
  209. package/dist/esm/lib/outlook/index.d.ts +7 -0
  210. package/dist/esm/lib/outlook/index.js +7 -0
  211. package/dist/esm/lib/outlook/index.js.map +1 -0
  212. package/dist/esm/lib/outlook/types.d.ts +22 -0
  213. package/dist/esm/lib/outlook/types.js +2 -0
  214. package/dist/esm/lib/outlook/types.js.map +1 -0
  215. package/dist/esm/mcp/index.d.ts +3 -0
  216. package/dist/esm/mcp/index.js +6 -0
  217. package/dist/esm/mcp/index.js.map +1 -0
  218. package/dist/esm/mcp/prompts/draft-email.d.ts +30 -0
  219. package/dist/esm/mcp/prompts/draft-email.js +37 -0
  220. package/dist/esm/mcp/prompts/draft-email.js.map +1 -0
  221. package/dist/esm/mcp/prompts/index.d.ts +2 -0
  222. package/dist/esm/mcp/prompts/index.js +2 -0
  223. package/dist/esm/mcp/prompts/index.js.map +1 -0
  224. package/dist/esm/mcp/prompts/query-syntax.d.ts +19 -0
  225. package/dist/esm/mcp/prompts/query-syntax.js +75 -0
  226. package/dist/esm/mcp/prompts/query-syntax.js.map +1 -0
  227. package/dist/esm/mcp/resources/email.d.ts +11 -0
  228. package/dist/esm/mcp/resources/email.js +69 -0
  229. package/dist/esm/mcp/resources/email.js.map +1 -0
  230. package/dist/esm/mcp/resources/index.d.ts +1 -0
  231. package/dist/esm/mcp/resources/index.js +1 -0
  232. package/dist/esm/mcp/resources/index.js.map +1 -0
  233. package/dist/esm/mcp/tools/categories-list.d.ts +96 -0
  234. package/dist/esm/mcp/tools/categories-list.js +78 -0
  235. package/dist/esm/mcp/tools/categories-list.js.map +1 -0
  236. package/dist/esm/mcp/tools/index.d.ts +11 -0
  237. package/dist/esm/mcp/tools/index.js +11 -0
  238. package/dist/esm/mcp/tools/index.js.map +1 -0
  239. package/dist/esm/mcp/tools/label-add.d.ts +44 -0
  240. package/dist/esm/mcp/tools/label-add.js +75 -0
  241. package/dist/esm/mcp/tools/label-add.js.map +1 -0
  242. package/dist/esm/mcp/tools/label-delete.d.ts +54 -0
  243. package/dist/esm/mcp/tools/label-delete.js +166 -0
  244. package/dist/esm/mcp/tools/label-delete.js.map +1 -0
  245. package/dist/esm/mcp/tools/labels-list.d.ts +96 -0
  246. package/dist/esm/mcp/tools/labels-list.js +78 -0
  247. package/dist/esm/mcp/tools/labels-list.js.map +1 -0
  248. package/dist/esm/mcp/tools/message-get.d.ts +110 -0
  249. package/dist/esm/mcp/tools/message-get.js +117 -0
  250. package/dist/esm/mcp/tools/message-get.js.map +1 -0
  251. package/dist/esm/mcp/tools/message-mark-read.d.ts +42 -0
  252. package/dist/esm/mcp/tools/message-mark-read.js +80 -0
  253. package/dist/esm/mcp/tools/message-mark-read.js.map +1 -0
  254. package/dist/esm/mcp/tools/message-move-to-trash.d.ts +54 -0
  255. package/dist/esm/mcp/tools/message-move-to-trash.js +177 -0
  256. package/dist/esm/mcp/tools/message-move-to-trash.js.map +1 -0
  257. package/dist/esm/mcp/tools/message-respond.d.ts +52 -0
  258. package/dist/esm/mcp/tools/message-respond.js +89 -0
  259. package/dist/esm/mcp/tools/message-respond.js.map +1 -0
  260. package/dist/esm/mcp/tools/message-search.d.ts +138 -0
  261. package/dist/esm/mcp/tools/message-search.js +184 -0
  262. package/dist/esm/mcp/tools/message-search.js.map +1 -0
  263. package/dist/esm/mcp/tools/message-send.d.ts +66 -0
  264. package/dist/esm/mcp/tools/message-send.js +111 -0
  265. package/dist/esm/mcp/tools/message-send.js.map +1 -0
  266. package/dist/esm/mcp/tools/messages-export-csv.d.ts +72 -0
  267. package/dist/esm/mcp/tools/messages-export-csv.js +273 -0
  268. package/dist/esm/mcp/tools/messages-export-csv.js.map +1 -0
  269. package/dist/esm/package.json +1 -0
  270. package/dist/esm/schemas/index.d.ts +2 -0
  271. package/dist/esm/schemas/index.js +2 -0
  272. package/dist/esm/schemas/index.js.map +1 -0
  273. package/dist/esm/schemas/outlook-query-schema.d.ts +53 -0
  274. package/dist/esm/schemas/outlook-query-schema.js +63 -0
  275. package/dist/esm/schemas/outlook-query-schema.js.map +1 -0
  276. package/dist/esm/schemas/outlook-validation.d.ts +428 -0
  277. package/dist/esm/schemas/outlook-validation.js +388 -0
  278. package/dist/esm/schemas/outlook-validation.js.map +1 -0
  279. package/dist/esm/setup/config.d.ts +50 -0
  280. package/dist/esm/setup/config.js +180 -0
  281. package/dist/esm/setup/config.js.map +1 -0
  282. package/dist/esm/setup/http.d.ts +8 -0
  283. package/dist/esm/setup/http.js +61 -0
  284. package/dist/esm/setup/http.js.map +1 -0
  285. package/dist/esm/setup/index.d.ts +5 -0
  286. package/dist/esm/setup/index.js +5 -0
  287. package/dist/esm/setup/index.js.map +1 -0
  288. package/dist/esm/setup/oauth-microsoft.d.ts +43 -0
  289. package/dist/esm/setup/oauth-microsoft.js +169 -0
  290. package/dist/esm/setup/oauth-microsoft.js.map +1 -0
  291. package/dist/esm/setup/runtime.d.ts +11 -0
  292. package/dist/esm/setup/runtime.js +115 -0
  293. package/dist/esm/setup/runtime.js.map +1 -0
  294. package/dist/esm/setup/stdio.d.ts +7 -0
  295. package/dist/esm/setup/stdio.js +38 -0
  296. package/dist/esm/setup/stdio.js.map +1 -0
  297. package/dist/esm/types.d.ts +54 -0
  298. package/dist/esm/types.js +1 -0
  299. package/dist/esm/types.js.map +1 -0
  300. package/package.json +111 -0
@@ -0,0 +1,32 @@
1
+ import type { OutlookQuery as QueryNode } from '../../schemas/outlook-query-schema.js';
2
+ export interface ODataFilterResult {
3
+ search: string | null;
4
+ filter: string | null;
5
+ requireBodyClientFilter: boolean;
6
+ }
7
+ export declare function toGraphFilter(query: QueryNode): ODataFilterResult;
8
+ export declare function toOutlookFilter(parsed: QueryNode, _options?: {
9
+ includeBodyContent?: boolean;
10
+ useCaseInsensitiveWrap?: boolean;
11
+ }): {
12
+ filter: string;
13
+ search: string;
14
+ requireBodyClientFilter: boolean;
15
+ filters: ExtractedFilters;
16
+ };
17
+ interface ExtractedFilters {
18
+ subjectIncludes: string[];
19
+ bodyIncludes: string[];
20
+ textIncludes: string[];
21
+ fromIncludes: string[];
22
+ toIncludes: string[];
23
+ ccIncludes: string[];
24
+ bccIncludes: string[];
25
+ categoriesIncludes: string[];
26
+ labelIncludes: string[];
27
+ hasAttachment?: boolean;
28
+ since?: string;
29
+ before?: string;
30
+ }
31
+ export declare function extractOutlookFilters(parsed: QueryNode): ExtractedFilters;
32
+ export {};
@@ -0,0 +1,528 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ function _export(target, all) {
6
+ for(var name in all)Object.defineProperty(target, name, {
7
+ enumerable: true,
8
+ get: Object.getOwnPropertyDescriptor(all, name).get
9
+ });
10
+ }
11
+ _export(exports, {
12
+ get extractOutlookFilters () {
13
+ return extractOutlookFilters;
14
+ },
15
+ get toGraphFilter () {
16
+ return toGraphFilter;
17
+ },
18
+ get toOutlookFilter () {
19
+ return toOutlookFilter;
20
+ }
21
+ });
22
+ function _array_like_to_array(arr, len) {
23
+ if (len == null || len > arr.length) len = arr.length;
24
+ for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
25
+ return arr2;
26
+ }
27
+ function _array_without_holes(arr) {
28
+ if (Array.isArray(arr)) return _array_like_to_array(arr);
29
+ }
30
+ function _iterable_to_array(iter) {
31
+ if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
32
+ }
33
+ function _non_iterable_spread() {
34
+ throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
35
+ }
36
+ function _to_consumable_array(arr) {
37
+ return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread();
38
+ }
39
+ function _type_of(obj) {
40
+ "@swc/helpers - typeof";
41
+ return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
42
+ }
43
+ function _unsupported_iterable_to_array(o, minLen) {
44
+ if (!o) return;
45
+ if (typeof o === "string") return _array_like_to_array(o, minLen);
46
+ var n = Object.prototype.toString.call(o).slice(8, -1);
47
+ if (n === "Object" && o.constructor) n = o.constructor.name;
48
+ if (n === "Map" || n === "Set") return Array.from(n);
49
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
50
+ }
51
+ /**
52
+ * Outlook category mappings - case insensitive input to exact system categories
53
+ * Note: These are user-defined categories in Outlook, not system categories like Gmail
54
+ */ var OUTLOOK_CATEGORIES = {
55
+ personal: 'Personal',
56
+ work: 'Work',
57
+ family: 'Family',
58
+ travel: 'Travel',
59
+ important: 'Important',
60
+ urgent: 'Urgent'
61
+ };
62
+ /**
63
+ * Validate and map category name to Outlook system category
64
+ * Throws error for invalid categories (fail fast principle)
65
+ */ function mapOutlookCategory(category) {
66
+ // Input validation - fail fast on invalid input
67
+ if (!category || typeof category !== 'string') {
68
+ throw new Error("Invalid category: expected non-empty string, got ".concat(typeof category === "undefined" ? "undefined" : _type_of(category)));
69
+ }
70
+ var trimmed = category.trim();
71
+ if (trimmed === '') {
72
+ throw new Error('Invalid category: empty string after trimming');
73
+ }
74
+ // Fail fast on unknown categories
75
+ var normalizedCategory = trimmed.toLowerCase();
76
+ var systemCategory = OUTLOOK_CATEGORIES[normalizedCategory];
77
+ if (!systemCategory) {
78
+ throw new Error('Invalid Outlook category: "'.concat(category, '". Valid categories: ').concat(Object.keys(OUTLOOK_CATEGORIES).join(', ')));
79
+ }
80
+ return systemCategory;
81
+ }
82
+ function toGraphFilter(query) {
83
+ var requireBodyClientFilter = false;
84
+ function L(s) {
85
+ // Microsoft Graph does NOT support toLower() function in OData filters
86
+ // Case-insensitive matching must be done client-side or via $search
87
+ return s;
88
+ }
89
+ function p(s) {
90
+ return "(".concat(s, ")");
91
+ }
92
+ function recip(coll, V) {
93
+ // Graph may reject functions on nested properties; use equality on nested address/name fields.
94
+ var left = "r/emailAddress/address eq ".concat(V);
95
+ var right = "r/emailAddress/name eq ".concat(V);
96
+ return "".concat(coll, "/any(r: ").concat(left, " or ").concat(right, ")");
97
+ }
98
+ function fv(field, raw) {
99
+ if (raw == null) return '';
100
+ var rawStr = String(raw);
101
+ // For text and body fields, skip OData filtering entirely (uses KQL search instead)
102
+ // Do this BEFORE validation so we don't throw on valid text/body queries
103
+ if (field === 'text' || field === 'body') {
104
+ if (rawStr.trim() === '') {
105
+ throw new Error("Invalid ".concat(field, " value: empty string"));
106
+ }
107
+ requireBodyClientFilter = true;
108
+ return '';
109
+ }
110
+ // For all other fields, validate non-empty AFTER checking for null
111
+ if (rawStr.trim() === '') {
112
+ throw new Error("Invalid ".concat(field, " value: empty string"));
113
+ }
114
+ var V = "'".concat(rawStr.toLowerCase().replace(/'/g, "''"), "'");
115
+ switch(field){
116
+ case 'from':
117
+ {
118
+ // For email addresses emit equality checks on nested address/name;
119
+ // for name-only tokens, skip server-side filter (handled client-side or via $search).
120
+ if (rawStr.includes('@')) {
121
+ var addrEq = "".concat(L('from/emailAddress/address'), " eq ").concat(V);
122
+ var nameEq = "".concat(L('from/emailAddress/name'), " eq ").concat(V);
123
+ return p("".concat(addrEq, " or ").concat(nameEq));
124
+ }
125
+ // Don't emit a server-side filter for name-only 'from' tokens.
126
+ return '';
127
+ }
128
+ case 'to':
129
+ return recip('toRecipients', V);
130
+ case 'cc':
131
+ return recip('ccRecipients', V);
132
+ case 'bcc':
133
+ return recip('bccRecipients', V);
134
+ case 'subject':
135
+ // Microsoft Graph does NOT support contains() function in OData filters
136
+ // Use startswith as a partial alternative or rely on $search
137
+ if (rawStr.includes('-') || rawStr.length < 3) return '';
138
+ return "startswith(subject, ".concat(V, ")");
139
+ case 'categories':
140
+ {
141
+ // mapOutlookCategory will throw on invalid input (fail fast)
142
+ var systemCategory = mapOutlookCategory(rawStr);
143
+ // Use the categories OData property with exact case-sensitive match
144
+ return "categories/any(c: c eq '".concat(systemCategory, "')");
145
+ }
146
+ case 'label':
147
+ {
148
+ // Direct passthrough to categories for Outlook (case-sensitive)
149
+ return "categories/any(c: c eq '".concat(rawStr.replace(/'/g, "''"), "')");
150
+ }
151
+ default:
152
+ // Microsoft Graph does NOT support contains() function
153
+ // For unknown fields, skip server-side filtering
154
+ return '';
155
+ }
156
+ }
157
+ function chain(op, arr) {
158
+ if (!arr || arr.length === 0) {
159
+ throw new Error("chain: empty array for ".concat(op, " operation"));
160
+ }
161
+ if (arr.length === 1) {
162
+ var _arr_;
163
+ var first = (_arr_ = arr[0]) !== null && _arr_ !== void 0 ? _arr_ : '';
164
+ return String(first);
165
+ }
166
+ var joined = arr.join(" ".concat(op, " "));
167
+ return p(joined);
168
+ }
169
+ function fieldExpr(field, op) {
170
+ if (typeof op === 'string') {
171
+ return fv(field, op);
172
+ }
173
+ if (Array.isArray(op.$any)) {
174
+ var results = op.$any.map(function(v) {
175
+ return fv(field, String(v !== null && v !== void 0 ? v : ''));
176
+ });
177
+ // Filter out empty strings (from fields like text/body that don't generate OData filters)
178
+ var validResults = results.filter(function(s) {
179
+ return s && s.trim();
180
+ });
181
+ if (validResults.length === 0) return '';
182
+ return chain('or', validResults);
183
+ }
184
+ if (Array.isArray(op.$all)) {
185
+ var results1 = op.$all.map(function(v) {
186
+ return fv(field, String(v !== null && v !== void 0 ? v : ''));
187
+ });
188
+ // Filter out empty strings (from fields like text/body that don't generate OData filters)
189
+ var validResults1 = results1.filter(function(s) {
190
+ return s && s.trim();
191
+ });
192
+ if (validResults1.length === 0) return '';
193
+ return chain('and', validResults1);
194
+ }
195
+ if (Array.isArray(op.$none)) {
196
+ var results2 = op.$none.map(function(v) {
197
+ return fv(field, String(v !== null && v !== void 0 ? v : ''));
198
+ });
199
+ // Filter out empty strings (from fields like text/body that don't generate OData filters)
200
+ var validResults2 = results2.filter(function(s) {
201
+ return s && s.trim();
202
+ });
203
+ if (validResults2.length === 0) return '';
204
+ return "not ".concat(p(chain('or', validResults2)));
205
+ }
206
+ throw new Error("Unknown field operator ".concat(JSON.stringify(op)));
207
+ }
208
+ function dateExpr(d) {
209
+ var _parts_;
210
+ var parts = [];
211
+ if (d.$gte) parts.push("receivedDateTime ge ".concat(d.$gte, "T00:00:00Z"));
212
+ if (d.$lt) parts.push("receivedDateTime lt ".concat(d.$lt, "T00:00:00Z"));
213
+ return parts.length > 1 ? p(parts.join(' and ')) : (_parts_ = parts[0]) !== null && _parts_ !== void 0 ? _parts_ : '';
214
+ }
215
+ function emit(n) {
216
+ if (!n || (typeof n === "undefined" ? "undefined" : _type_of(n)) !== 'object') return '';
217
+ if ('$and' in n && n.$and) {
218
+ var andParts = n.$and.map(emit).filter(function(part) {
219
+ return Boolean(part);
220
+ });
221
+ if (andParts.length === 0) return '';
222
+ if (andParts.length === 1) {
223
+ var firstPart = andParts[0];
224
+ return firstPart !== null && firstPart !== void 0 ? firstPart : '';
225
+ }
226
+ return p(andParts.join(' and '));
227
+ }
228
+ if ('$or' in n && n.$or) {
229
+ var orParts = n.$or.map(emit).filter(function(part) {
230
+ return Boolean(part);
231
+ });
232
+ if (orParts.length === 0) return '';
233
+ if (orParts.length === 1) {
234
+ var firstPart1 = orParts[0];
235
+ return firstPart1 !== null && firstPart1 !== void 0 ? firstPart1 : '';
236
+ }
237
+ return p(orParts.join(' or '));
238
+ }
239
+ if ('$not' in n && n.$not) {
240
+ var notExpr = emit(n.$not);
241
+ return notExpr ? "not (".concat(notExpr, ")") : '';
242
+ }
243
+ if ('hasAttachment' in n && n.hasAttachment) return 'hasAttachments eq true';
244
+ if ('date' in n && n.date) return dateExpr(n.date);
245
+ var keys = Object.keys(n);
246
+ if (keys.length === 1) {
247
+ var _keys_;
248
+ var k0 = String((_keys_ = keys[0]) !== null && _keys_ !== void 0 ? _keys_ : '');
249
+ if (k0 && [
250
+ 'from',
251
+ 'to',
252
+ 'cc',
253
+ 'bcc',
254
+ 'subject',
255
+ 'text',
256
+ 'body',
257
+ 'categories',
258
+ 'label'
259
+ ].includes(k0)) {
260
+ var fieldValue = n[k0];
261
+ if (fieldValue) return fieldExpr(k0, fieldValue);
262
+ }
263
+ }
264
+ return '';
265
+ }
266
+ var filterStr = emit(query);
267
+ var terms = [];
268
+ function pushTerms(arr) {
269
+ if (Array.isArray(arr)) {
270
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
271
+ try {
272
+ for(var _iterator = arr[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
273
+ var t = _step.value;
274
+ if ((t !== null && t !== void 0 ? t : '').toString().trim()) terms.push(String(t).trim());
275
+ }
276
+ } catch (err) {
277
+ _didIteratorError = true;
278
+ _iteratorError = err;
279
+ } finally{
280
+ try {
281
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
282
+ _iterator.return();
283
+ }
284
+ } finally{
285
+ if (_didIteratorError) {
286
+ throw _iteratorError;
287
+ }
288
+ }
289
+ }
290
+ }
291
+ }
292
+ function walk(node) {
293
+ if (!node || (typeof node === "undefined" ? "undefined" : _type_of(node)) !== 'object') return;
294
+ if ('$and' in node && node.$and) {
295
+ node.$and.forEach(walk);
296
+ return;
297
+ }
298
+ if ('$or' in node && node.$or) {
299
+ node.$or.forEach(walk);
300
+ return;
301
+ }
302
+ if ('$not' in node && node.$not) {
303
+ walk(node.$not);
304
+ return;
305
+ }
306
+ if ('exactPhrase' in node && node.exactPhrase) {
307
+ // KQL uses double quotes for exact phrase matching
308
+ pushTerms([
309
+ '"'.concat(String(node.exactPhrase).replace(/"/g, '\\"'), '"')
310
+ ]);
311
+ return;
312
+ }
313
+ if ('subject' in node && node.subject) {
314
+ if (typeof node.subject === 'string') {
315
+ pushTerms([
316
+ node.subject
317
+ ]);
318
+ } else {
319
+ pushTerms(node.subject.$any);
320
+ pushTerms(node.subject.$all);
321
+ pushTerms(node.subject.$none);
322
+ }
323
+ }
324
+ if ('body' in node && node.body) {
325
+ if (typeof node.body === 'string') {
326
+ pushTerms([
327
+ node.body
328
+ ]);
329
+ } else {
330
+ pushTerms(node.body.$any);
331
+ pushTerms(node.body.$all);
332
+ pushTerms(node.body.$none);
333
+ }
334
+ }
335
+ if ('text' in node && node.text) {
336
+ if (typeof node.text === 'string') {
337
+ pushTerms([
338
+ node.text
339
+ ]);
340
+ } else {
341
+ pushTerms(node.text.$any);
342
+ pushTerms(node.text.$all);
343
+ pushTerms(node.text.$none);
344
+ }
345
+ }
346
+ }
347
+ walk(query);
348
+ /**
349
+ * Escape KQL (Keyword Query Language) special characters in search terms.
350
+ * KQL special characters that need escaping: \ : ( ) { } [ ] " * ? < > - _
351
+ * According to Microsoft Graph KQL syntax, these must be escaped with backslash.
352
+ */ function escapeKQL(term) {
353
+ if (!term) return term;
354
+ // Escape backslash first, then other special characters
355
+ return term.replace(/\\/g, '\\\\').replace(/:/g, '\\:').replace(/\(/g, '\\(').replace(/\)/g, '\\)').replace(/\{/g, '\\{').replace(/\}/g, '\\}').replace(/\[/g, '\\[').replace(/\]/g, '\\]').replace(/"/g, '\\"').replace(/\*/g, '\\*').replace(/\?/g, '\\?').replace(/</g, '\\<').replace(/>/g, '\\>').replace(/-/g, '\\-').replace(/_/g, '\\_');
356
+ }
357
+ var mapped = terms.map(function(t) {
358
+ var escaped = escapeKQL(String(t));
359
+ return escaped;
360
+ });
361
+ var search = mapped.length ? mapped.join(' OR ') : null;
362
+ return {
363
+ search: search,
364
+ filter: filterStr && typeof filterStr === 'string' && filterStr.length ? filterStr : null,
365
+ requireBodyClientFilter: requireBodyClientFilter
366
+ };
367
+ }
368
+ function toOutlookFilter(parsed, _options) {
369
+ var graphResult = toGraphFilter(parsed);
370
+ var filters = extractOutlookFilters(parsed);
371
+ return {
372
+ filter: graphResult.filter,
373
+ search: graphResult.search,
374
+ requireBodyClientFilter: graphResult.requireBodyClientFilter,
375
+ filters: filters
376
+ };
377
+ }
378
+ function extractOutlookFilters(parsed) {
379
+ var filters = {
380
+ subjectIncludes: [],
381
+ bodyIncludes: [],
382
+ textIncludes: [],
383
+ fromIncludes: [],
384
+ toIncludes: [],
385
+ ccIncludes: [],
386
+ bccIncludes: [],
387
+ categoriesIncludes: [],
388
+ labelIncludes: []
389
+ };
390
+ function walk(node) {
391
+ if (!node || (typeof node === "undefined" ? "undefined" : _type_of(node)) !== 'object') return;
392
+ if ('$and' in node && node.$and) {
393
+ node.$and.forEach(walk);
394
+ return;
395
+ }
396
+ if ('$or' in node && node.$or) {
397
+ node.$or.forEach(walk);
398
+ return;
399
+ }
400
+ if ('$not' in node && node.$not) {
401
+ walk(node.$not);
402
+ return;
403
+ }
404
+ if ('hasAttachment' in node && node.hasAttachment !== undefined) {
405
+ filters.hasAttachment = node.hasAttachment === true;
406
+ return;
407
+ }
408
+ if ('date' in node && node.date) {
409
+ if (node.date.$gte) filters.since = node.date.$gte;
410
+ if (node.date.$lt) filters.before = node.date.$lt;
411
+ return;
412
+ }
413
+ if ('subject' in node && node.subject) {
414
+ if (typeof node.subject === 'string') {
415
+ filters.subjectIncludes.push(node.subject);
416
+ } else {
417
+ var _filters_subjectIncludes, _filters_subjectIncludes1;
418
+ if (node.subject.$any) (_filters_subjectIncludes = filters.subjectIncludes).push.apply(_filters_subjectIncludes, _to_consumable_array(node.subject.$any));
419
+ if (node.subject.$all) (_filters_subjectIncludes1 = filters.subjectIncludes).push.apply(_filters_subjectIncludes1, _to_consumable_array(node.subject.$all));
420
+ }
421
+ }
422
+ if ('body' in node && node.body) {
423
+ if (typeof node.body === 'string') {
424
+ filters.bodyIncludes.push(node.body);
425
+ } else {
426
+ var _filters_bodyIncludes, _filters_bodyIncludes1;
427
+ if (node.body.$any) (_filters_bodyIncludes = filters.bodyIncludes).push.apply(_filters_bodyIncludes, _to_consumable_array(node.body.$any));
428
+ if (node.body.$all) (_filters_bodyIncludes1 = filters.bodyIncludes).push.apply(_filters_bodyIncludes1, _to_consumable_array(node.body.$all));
429
+ }
430
+ }
431
+ if ('text' in node && node.text) {
432
+ if (typeof node.text === 'string') {
433
+ filters.textIncludes.push(node.text);
434
+ filters.bodyIncludes.push(node.text);
435
+ } else {
436
+ if (node.text.$any) {
437
+ var _filters_textIncludes, _filters_bodyIncludes2;
438
+ (_filters_textIncludes = filters.textIncludes).push.apply(_filters_textIncludes, _to_consumable_array(node.text.$any));
439
+ (_filters_bodyIncludes2 = filters.bodyIncludes).push.apply(_filters_bodyIncludes2, _to_consumable_array(node.text.$any));
440
+ }
441
+ if (node.text.$all) {
442
+ var _filters_textIncludes1, _filters_bodyIncludes3;
443
+ (_filters_textIncludes1 = filters.textIncludes).push.apply(_filters_textIncludes1, _to_consumable_array(node.text.$all));
444
+ (_filters_bodyIncludes3 = filters.bodyIncludes).push.apply(_filters_bodyIncludes3, _to_consumable_array(node.text.$all));
445
+ }
446
+ }
447
+ }
448
+ if ('from' in node && node.from) {
449
+ if (typeof node.from === 'string') {
450
+ filters.fromIncludes.push(node.from);
451
+ } else {
452
+ var _filters_fromIncludes, _filters_fromIncludes1;
453
+ if (node.from.$any) (_filters_fromIncludes = filters.fromIncludes).push.apply(_filters_fromIncludes, _to_consumable_array(node.from.$any));
454
+ if (node.from.$all) (_filters_fromIncludes1 = filters.fromIncludes).push.apply(_filters_fromIncludes1, _to_consumable_array(node.from.$all));
455
+ }
456
+ }
457
+ if ('to' in node && node.to) {
458
+ if (typeof node.to === 'string') {
459
+ filters.toIncludes.push(node.to);
460
+ } else {
461
+ var _filters_toIncludes, _filters_toIncludes1;
462
+ if (node.to.$any) (_filters_toIncludes = filters.toIncludes).push.apply(_filters_toIncludes, _to_consumable_array(node.to.$any));
463
+ if (node.to.$all) (_filters_toIncludes1 = filters.toIncludes).push.apply(_filters_toIncludes1, _to_consumable_array(node.to.$all));
464
+ }
465
+ }
466
+ if ('cc' in node && node.cc) {
467
+ if (typeof node.cc === 'string') {
468
+ filters.ccIncludes.push(node.cc);
469
+ } else {
470
+ var _filters_ccIncludes, _filters_ccIncludes1;
471
+ if (node.cc.$any) (_filters_ccIncludes = filters.ccIncludes).push.apply(_filters_ccIncludes, _to_consumable_array(node.cc.$any));
472
+ if (node.cc.$all) (_filters_ccIncludes1 = filters.ccIncludes).push.apply(_filters_ccIncludes1, _to_consumable_array(node.cc.$all));
473
+ }
474
+ }
475
+ if ('bcc' in node && node.bcc) {
476
+ if (typeof node.bcc === 'string') {
477
+ filters.bccIncludes.push(node.bcc);
478
+ } else {
479
+ var _filters_bccIncludes, _filters_bccIncludes1;
480
+ if (node.bcc.$any) (_filters_bccIncludes = filters.bccIncludes).push.apply(_filters_bccIncludes, _to_consumable_array(node.bcc.$any));
481
+ if (node.bcc.$all) (_filters_bccIncludes1 = filters.bccIncludes).push.apply(_filters_bccIncludes1, _to_consumable_array(node.bcc.$all));
482
+ }
483
+ }
484
+ if ('categories' in node && node.categories) {
485
+ if (typeof node.categories === 'string') {
486
+ if (mapOutlookCategory(node.categories) !== null) {
487
+ filters.categoriesIncludes.push(node.categories);
488
+ }
489
+ } else {
490
+ // Filter out invalid categories to prevent memory leaks and maintain clean state
491
+ if (node.categories.$any) {
492
+ var _filters_categoriesIncludes;
493
+ var validCategories = node.categories.$any.filter(function(cat) {
494
+ return mapOutlookCategory(cat) !== null;
495
+ });
496
+ if (validCategories.length > 0) (_filters_categoriesIncludes = filters.categoriesIncludes).push.apply(_filters_categoriesIncludes, _to_consumable_array(validCategories));
497
+ }
498
+ if (node.categories.$all) {
499
+ var _filters_categoriesIncludes1;
500
+ var validCategories1 = node.categories.$all.filter(function(cat) {
501
+ return mapOutlookCategory(cat) !== null;
502
+ });
503
+ if (validCategories1.length > 0) (_filters_categoriesIncludes1 = filters.categoriesIncludes).push.apply(_filters_categoriesIncludes1, _to_consumable_array(validCategories1));
504
+ }
505
+ if (node.categories.$none) {
506
+ var _filters_categoriesIncludes2;
507
+ var validCategories2 = node.categories.$none.filter(function(cat) {
508
+ return mapOutlookCategory(cat) !== null;
509
+ });
510
+ if (validCategories2.length > 0) (_filters_categoriesIncludes2 = filters.categoriesIncludes).push.apply(_filters_categoriesIncludes2, _to_consumable_array(validCategories2));
511
+ }
512
+ }
513
+ }
514
+ if ('label' in node && node.label) {
515
+ if (typeof node.label === 'string') {
516
+ filters.labelIncludes.push(node.label);
517
+ } else {
518
+ var _filters_labelIncludes, _filters_labelIncludes1, _filters_labelIncludes2;
519
+ if (node.label.$any) (_filters_labelIncludes = filters.labelIncludes).push.apply(_filters_labelIncludes, _to_consumable_array(node.label.$any));
520
+ if (node.label.$all) (_filters_labelIncludes1 = filters.labelIncludes).push.apply(_filters_labelIncludes1, _to_consumable_array(node.label.$all));
521
+ if (node.label.$none) (_filters_labelIncludes2 = filters.labelIncludes).push.apply(_filters_labelIncludes2, _to_consumable_array(node.label.$none));
522
+ }
523
+ }
524
+ }
525
+ walk(parsed);
526
+ return filters;
527
+ }
528
+ /* CJS INTEROP */ if (exports.__esModule && exports.default) { try { Object.defineProperty(exports.default, '__esModule', { value: true }); for (var key in exports) { exports.default[key] = exports[key]; } } catch (_) {}; module.exports = exports.default; }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/kevin/Dev/Projects/ai/mcp-z/servers/mcp-outlook/src/email/querying/query-builder.ts"],"sourcesContent":["import type { OutlookQuery as QueryNode } from '../../schemas/outlook-query-schema.js';\n\ntype FieldOperator = {\n $any?: string[];\n $all?: string[];\n $none?: string[];\n};\n\ntype DateOperator = {\n $gte?: string;\n $lt?: string;\n};\n\ntype FieldQuery = {\n from?: FieldOperator | string;\n to?: FieldOperator | string;\n cc?: FieldOperator | string;\n bcc?: FieldOperator | string;\n subject?: FieldOperator | string;\n text?: FieldOperator | string;\n body?: FieldOperator | string;\n categories?: FieldOperator | string;\n label?: FieldOperator | string;\n};\n\n/**\n * Outlook category mappings - case insensitive input to exact system categories\n * Note: These are user-defined categories in Outlook, not system categories like Gmail\n */\nconst OUTLOOK_CATEGORIES = {\n personal: 'Personal',\n work: 'Work',\n family: 'Family',\n travel: 'Travel',\n important: 'Important',\n urgent: 'Urgent',\n} as const;\n\n/**\n * Validate and map category name to Outlook system category\n * Throws error for invalid categories (fail fast principle)\n */\nfunction mapOutlookCategory(category: string): string {\n // Input validation - fail fast on invalid input\n if (!category || typeof category !== 'string') {\n throw new Error(`Invalid category: expected non-empty string, got ${typeof category}`);\n }\n\n const trimmed = category.trim();\n if (trimmed === '') {\n throw new Error('Invalid category: empty string after trimming');\n }\n\n // Fail fast on unknown categories\n const normalizedCategory = trimmed.toLowerCase();\n const systemCategory = OUTLOOK_CATEGORIES[normalizedCategory as keyof typeof OUTLOOK_CATEGORIES];\n\n if (!systemCategory) {\n throw new Error(`Invalid Outlook category: \"${category}\". Valid categories: ${Object.keys(OUTLOOK_CATEGORIES).join(', ')}`);\n }\n\n return systemCategory;\n}\n\nexport interface ODataFilterResult {\n search: string | null;\n filter: string | null;\n requireBodyClientFilter: boolean;\n}\n\nexport function toGraphFilter(query: QueryNode): ODataFilterResult {\n let requireBodyClientFilter = false;\n\n function L(s: string) {\n // Microsoft Graph does NOT support toLower() function in OData filters\n // Case-insensitive matching must be done client-side or via $search\n return s;\n }\n function p(s: string) {\n return `(${s})`;\n }\n\n function recip(coll: string, V: string) {\n // Graph may reject functions on nested properties; use equality on nested address/name fields.\n const left = `r/emailAddress/address eq ${V}`;\n const right = `r/emailAddress/name eq ${V}`;\n return `${coll}/any(r: ${left} or ${right})`;\n }\n\n function fv(field: string, raw: string | number | boolean | null | undefined): string {\n if (raw == null) return '';\n const rawStr = String(raw);\n\n // For text and body fields, skip OData filtering entirely (uses KQL search instead)\n // Do this BEFORE validation so we don't throw on valid text/body queries\n if (field === 'text' || field === 'body') {\n if (rawStr.trim() === '') {\n throw new Error(`Invalid ${field} value: empty string`);\n }\n requireBodyClientFilter = true;\n return '';\n }\n\n // For all other fields, validate non-empty AFTER checking for null\n if (rawStr.trim() === '') {\n throw new Error(`Invalid ${field} value: empty string`);\n }\n\n const V = `'${rawStr.toLowerCase().replace(/'/g, \"''\")}'`;\n switch (field) {\n case 'from': {\n // For email addresses emit equality checks on nested address/name;\n // for name-only tokens, skip server-side filter (handled client-side or via $search).\n if (rawStr.includes('@')) {\n const addrEq = `${L('from/emailAddress/address')} eq ${V}`;\n const nameEq = `${L('from/emailAddress/name')} eq ${V}`;\n return p(`${addrEq} or ${nameEq}`);\n }\n // Don't emit a server-side filter for name-only 'from' tokens.\n return '';\n }\n case 'to':\n return recip('toRecipients', V);\n case 'cc':\n return recip('ccRecipients', V);\n case 'bcc':\n return recip('bccRecipients', V);\n case 'subject':\n // Microsoft Graph does NOT support contains() function in OData filters\n // Use startswith as a partial alternative or rely on $search\n if (rawStr.includes('-') || rawStr.length < 3) return '';\n return `startswith(subject, ${V})`;\n case 'categories': {\n // mapOutlookCategory will throw on invalid input (fail fast)\n const systemCategory = mapOutlookCategory(rawStr);\n // Use the categories OData property with exact case-sensitive match\n return `categories/any(c: c eq '${systemCategory}')`;\n }\n case 'label': {\n // Direct passthrough to categories for Outlook (case-sensitive)\n return `categories/any(c: c eq '${rawStr.replace(/'/g, \"''\")}')`;\n }\n default:\n // Microsoft Graph does NOT support contains() function\n // For unknown fields, skip server-side filtering\n return '';\n }\n }\n\n function chain(op: 'and' | 'or', arr: Array<string | undefined>) {\n if (!arr || arr.length === 0) {\n throw new Error(`chain: empty array for ${op} operation`);\n }\n if (arr.length === 1) {\n const first = arr[0] ?? '';\n return String(first);\n }\n const joined = arr.join(` ${op} `);\n return p(joined);\n }\n function fieldExpr(field: string, op: FieldOperator | string): string {\n if (typeof op === 'string') {\n return fv(field, op);\n }\n\n if (Array.isArray(op.$any)) {\n const results = op.$any.map((v) => fv(field, String(v ?? '')));\n // Filter out empty strings (from fields like text/body that don't generate OData filters)\n const validResults = results.filter((s) => s && s.trim());\n if (validResults.length === 0) return '';\n return chain('or', validResults);\n }\n if (Array.isArray(op.$all)) {\n const results = op.$all.map((v) => fv(field, String(v ?? '')));\n // Filter out empty strings (from fields like text/body that don't generate OData filters)\n const validResults = results.filter((s) => s && s.trim());\n if (validResults.length === 0) return '';\n return chain('and', validResults);\n }\n if (Array.isArray(op.$none)) {\n const results = op.$none.map((v) => fv(field, String(v ?? '')));\n // Filter out empty strings (from fields like text/body that don't generate OData filters)\n const validResults = results.filter((s) => s && s.trim());\n if (validResults.length === 0) return '';\n return `not ${p(chain('or', validResults))}`;\n }\n throw new Error(`Unknown field operator ${JSON.stringify(op)}`);\n }\n\n function dateExpr(d: DateOperator): string {\n const parts: string[] = [];\n if (d.$gte) parts.push(`receivedDateTime ge ${d.$gte}T00:00:00Z`);\n if (d.$lt) parts.push(`receivedDateTime lt ${d.$lt}T00:00:00Z`);\n return parts.length > 1 ? p(parts.join(' and ')) : (parts[0] ?? '');\n }\n\n function emit(n: QueryNode): string {\n if (!n || typeof n !== 'object') return '';\n\n if ('$and' in n && n.$and) {\n const andParts = n.$and.map(emit).filter((part: string): part is string => Boolean(part));\n if (andParts.length === 0) return '';\n if (andParts.length === 1) {\n const firstPart = andParts[0];\n return firstPart ?? '';\n }\n return p(andParts.join(' and '));\n }\n if ('$or' in n && n.$or) {\n const orParts = n.$or.map(emit).filter((part: string): part is string => Boolean(part));\n if (orParts.length === 0) return '';\n if (orParts.length === 1) {\n const firstPart = orParts[0];\n return firstPart ?? '';\n }\n return p(orParts.join(' or '));\n }\n if ('$not' in n && n.$not) {\n const notExpr = emit(n.$not);\n return notExpr ? `not (${notExpr})` : '';\n }\n if ('hasAttachment' in n && n.hasAttachment) return 'hasAttachments eq true';\n if ('date' in n && n.date) return dateExpr(n.date);\n\n const keys = Object.keys(n);\n if (keys.length === 1) {\n const k0 = String(keys[0] ?? '');\n if (k0 && ['from', 'to', 'cc', 'bcc', 'subject', 'text', 'body', 'categories', 'label'].includes(k0)) {\n const fieldValue = (n as FieldQuery)[k0 as keyof FieldQuery];\n if (fieldValue) return fieldExpr(k0, fieldValue);\n }\n }\n return '';\n }\n\n const filterStr = emit(query);\n\n const terms: string[] = [];\n function pushTerms(arr?: string[]) {\n if (Array.isArray(arr)) for (const t of arr) if ((t ?? '').toString().trim()) terms.push(String(t).trim());\n }\n\n function walk(node: QueryNode): void {\n if (!node || typeof node !== 'object') return;\n if ('$and' in node && node.$and) {\n node.$and.forEach(walk);\n return;\n }\n if ('$or' in node && node.$or) {\n node.$or.forEach(walk);\n return;\n }\n if ('$not' in node && node.$not) {\n walk(node.$not);\n return;\n }\n\n if ('exactPhrase' in node && node.exactPhrase) {\n // KQL uses double quotes for exact phrase matching\n pushTerms([`\"${String(node.exactPhrase).replace(/\"/g, '\\\\\"')}\"`]);\n return;\n }\n\n if ('subject' in node && node.subject) {\n if (typeof node.subject === 'string') {\n pushTerms([node.subject]);\n } else {\n pushTerms(node.subject.$any);\n pushTerms(node.subject.$all);\n pushTerms(node.subject.$none);\n }\n }\n if ('body' in node && node.body) {\n if (typeof node.body === 'string') {\n pushTerms([node.body]);\n } else {\n pushTerms(node.body.$any);\n pushTerms(node.body.$all);\n pushTerms(node.body.$none);\n }\n }\n if ('text' in node && node.text) {\n if (typeof node.text === 'string') {\n pushTerms([node.text]);\n } else {\n pushTerms(node.text.$any);\n pushTerms(node.text.$all);\n pushTerms(node.text.$none);\n }\n }\n }\n walk(query);\n\n /**\n * Escape KQL (Keyword Query Language) special characters in search terms.\n * KQL special characters that need escaping: \\ : ( ) { } [ ] \" * ? < > - _\n * According to Microsoft Graph KQL syntax, these must be escaped with backslash.\n */\n function escapeKQL(term: string): string {\n if (!term) return term;\n // Escape backslash first, then other special characters\n return term\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/:/g, '\\\\:')\n .replace(/\\(/g, '\\\\(')\n .replace(/\\)/g, '\\\\)')\n .replace(/\\{/g, '\\\\{')\n .replace(/\\}/g, '\\\\}')\n .replace(/\\[/g, '\\\\[')\n .replace(/\\]/g, '\\\\]')\n .replace(/\"/g, '\\\\\"')\n .replace(/\\*/g, '\\\\*')\n .replace(/\\?/g, '\\\\?')\n .replace(/</g, '\\\\<')\n .replace(/>/g, '\\\\>')\n .replace(/-/g, '\\\\-')\n .replace(/_/g, '\\\\_');\n }\n\n const mapped = terms.map((t) => {\n const escaped = escapeKQL(String(t));\n return escaped;\n });\n const search = mapped.length ? mapped.join(' OR ') : null;\n\n return { search, filter: filterStr && typeof filterStr === 'string' && filterStr.length ? filterStr : null, requireBodyClientFilter };\n}\n\nexport function toOutlookFilter(parsed: QueryNode, _options?: { includeBodyContent?: boolean; useCaseInsensitiveWrap?: boolean }) {\n const graphResult = toGraphFilter(parsed);\n const filters = extractOutlookFilters(parsed);\n return {\n filter: graphResult.filter,\n search: graphResult.search,\n requireBodyClientFilter: graphResult.requireBodyClientFilter,\n filters,\n };\n}\n\ninterface ExtractedFilters {\n subjectIncludes: string[];\n bodyIncludes: string[];\n textIncludes: string[];\n fromIncludes: string[];\n toIncludes: string[];\n ccIncludes: string[];\n bccIncludes: string[];\n categoriesIncludes: string[];\n labelIncludes: string[];\n hasAttachment?: boolean;\n since?: string;\n before?: string;\n}\n\nexport function extractOutlookFilters(parsed: QueryNode): ExtractedFilters {\n const filters: ExtractedFilters = {\n subjectIncludes: [],\n bodyIncludes: [],\n textIncludes: [],\n fromIncludes: [],\n toIncludes: [],\n ccIncludes: [],\n bccIncludes: [],\n categoriesIncludes: [],\n labelIncludes: [],\n };\n function walk(node: QueryNode): void {\n if (!node || typeof node !== 'object') return;\n\n if ('$and' in node && node.$and) {\n node.$and.forEach(walk);\n return;\n }\n if ('$or' in node && node.$or) {\n node.$or.forEach(walk);\n return;\n }\n if ('$not' in node && node.$not) {\n walk(node.$not);\n return;\n }\n\n if ('hasAttachment' in node && node.hasAttachment !== undefined) {\n filters.hasAttachment = node.hasAttachment === true;\n return;\n }\n if ('date' in node && node.date) {\n if (node.date.$gte) filters.since = node.date.$gte;\n if (node.date.$lt) filters.before = node.date.$lt;\n return;\n }\n\n if ('subject' in node && node.subject) {\n if (typeof node.subject === 'string') {\n filters.subjectIncludes.push(node.subject);\n } else {\n if (node.subject.$any) filters.subjectIncludes.push(...node.subject.$any);\n if (node.subject.$all) filters.subjectIncludes.push(...node.subject.$all);\n }\n }\n if ('body' in node && node.body) {\n if (typeof node.body === 'string') {\n filters.bodyIncludes.push(node.body);\n } else {\n if (node.body.$any) filters.bodyIncludes.push(...node.body.$any);\n if (node.body.$all) filters.bodyIncludes.push(...node.body.$all);\n }\n }\n if ('text' in node && node.text) {\n if (typeof node.text === 'string') {\n filters.textIncludes.push(node.text);\n filters.bodyIncludes.push(node.text);\n } else {\n if (node.text.$any) {\n filters.textIncludes.push(...node.text.$any);\n filters.bodyIncludes.push(...node.text.$any);\n }\n if (node.text.$all) {\n filters.textIncludes.push(...node.text.$all);\n filters.bodyIncludes.push(...node.text.$all);\n }\n }\n }\n if ('from' in node && node.from) {\n if (typeof node.from === 'string') {\n filters.fromIncludes.push(node.from);\n } else {\n if (node.from.$any) filters.fromIncludes.push(...node.from.$any);\n if (node.from.$all) filters.fromIncludes.push(...node.from.$all);\n }\n }\n if ('to' in node && node.to) {\n if (typeof node.to === 'string') {\n filters.toIncludes.push(node.to);\n } else {\n if (node.to.$any) filters.toIncludes.push(...node.to.$any);\n if (node.to.$all) filters.toIncludes.push(...node.to.$all);\n }\n }\n if ('cc' in node && node.cc) {\n if (typeof node.cc === 'string') {\n filters.ccIncludes.push(node.cc);\n } else {\n if (node.cc.$any) filters.ccIncludes.push(...node.cc.$any);\n if (node.cc.$all) filters.ccIncludes.push(...node.cc.$all);\n }\n }\n if ('bcc' in node && node.bcc) {\n if (typeof node.bcc === 'string') {\n filters.bccIncludes.push(node.bcc);\n } else {\n if (node.bcc.$any) filters.bccIncludes.push(...node.bcc.$any);\n if (node.bcc.$all) filters.bccIncludes.push(...node.bcc.$all);\n }\n }\n if ('categories' in node && node.categories) {\n if (typeof node.categories === 'string') {\n if (mapOutlookCategory(node.categories) !== null) {\n filters.categoriesIncludes.push(node.categories);\n }\n } else {\n // Filter out invalid categories to prevent memory leaks and maintain clean state\n if (node.categories.$any) {\n const validCategories = node.categories.$any.filter((cat: string) => mapOutlookCategory(cat) !== null);\n if (validCategories.length > 0) filters.categoriesIncludes.push(...validCategories);\n }\n if (node.categories.$all) {\n const validCategories = node.categories.$all.filter((cat: string) => mapOutlookCategory(cat) !== null);\n if (validCategories.length > 0) filters.categoriesIncludes.push(...validCategories);\n }\n if (node.categories.$none) {\n const validCategories = node.categories.$none.filter((cat: string) => mapOutlookCategory(cat) !== null);\n if (validCategories.length > 0) filters.categoriesIncludes.push(...validCategories);\n }\n }\n }\n if ('label' in node && node.label) {\n if (typeof node.label === 'string') {\n filters.labelIncludes.push(node.label);\n } else {\n if (node.label.$any) filters.labelIncludes.push(...node.label.$any);\n if (node.label.$all) filters.labelIncludes.push(...node.label.$all);\n if (node.label.$none) filters.labelIncludes.push(...node.label.$none);\n }\n }\n }\n walk(parsed);\n return filters;\n}\n"],"names":["extractOutlookFilters","toGraphFilter","toOutlookFilter","OUTLOOK_CATEGORIES","personal","work","family","travel","important","urgent","mapOutlookCategory","category","Error","trimmed","trim","normalizedCategory","toLowerCase","systemCategory","Object","keys","join","query","requireBodyClientFilter","L","s","p","recip","coll","V","left","right","fv","field","raw","rawStr","String","replace","includes","addrEq","nameEq","length","chain","op","arr","first","joined","fieldExpr","Array","isArray","$any","results","map","v","validResults","filter","$all","$none","JSON","stringify","dateExpr","d","parts","$gte","push","$lt","emit","n","$and","andParts","part","Boolean","firstPart","$or","orParts","$not","notExpr","hasAttachment","date","k0","fieldValue","filterStr","terms","pushTerms","t","toString","walk","node","forEach","exactPhrase","subject","body","text","escapeKQL","term","mapped","escaped","search","parsed","_options","graphResult","filters","subjectIncludes","bodyIncludes","textIncludes","fromIncludes","toIncludes","ccIncludes","bccIncludes","categoriesIncludes","labelIncludes","undefined","since","before","from","to","cc","bcc","categories","validCategories","cat","label"],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { Client } from '@microsoft/microsoft-graph-client';
2
+ import type { Message } from '@microsoft/microsoft-graph-types';
3
+ import type { OutlookQuery as QueryNode } from '../../schemas/outlook-query-schema.js';
4
+ import type { Logger } from '../../types.js';
5
+ export interface OutlookSearchOptions {
6
+ query?: QueryNode;
7
+ limit?: number;
8
+ includeBody?: boolean;
9
+ maxPages?: number | null;
10
+ pageSize?: number;
11
+ pageToken?: string | undefined;
12
+ logger: Logger;
13
+ }
14
+ export interface OutlookSearchResult {
15
+ messages: Message[];
16
+ nextPageToken?: string | undefined;
17
+ }
18
+ /**
19
+ * Execute a direct Microsoft Graph API query.
20
+ * Single attempt with no fallbacks or retries.
21
+ * Errors are returned directly for actionable feedback.
22
+ * Returns raw Graph API Message objects for transformation by caller.
23
+ */
24
+ export declare function searchMessages(graph: Client, opts: OutlookSearchOptions): Promise<OutlookSearchResult>;