@jbctechsolutions/mcp-outlook-mac 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 (235) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +358 -0
  3. package/dist/applescript/account-repository.d.ts +29 -0
  4. package/dist/applescript/account-repository.d.ts.map +1 -0
  5. package/dist/applescript/account-repository.js +34 -0
  6. package/dist/applescript/account-repository.js.map +1 -0
  7. package/dist/applescript/account-scripts.d.ts +22 -0
  8. package/dist/applescript/account-scripts.d.ts.map +1 -0
  9. package/dist/applescript/account-scripts.js +176 -0
  10. package/dist/applescript/account-scripts.js.map +1 -0
  11. package/dist/applescript/calendar-manager.d.ts +45 -0
  12. package/dist/applescript/calendar-manager.d.ts.map +1 -0
  13. package/dist/applescript/calendar-manager.js +88 -0
  14. package/dist/applescript/calendar-manager.js.map +1 -0
  15. package/dist/applescript/calendar-writer.d.ts +38 -0
  16. package/dist/applescript/calendar-writer.d.ts.map +1 -0
  17. package/dist/applescript/calendar-writer.js +90 -0
  18. package/dist/applescript/calendar-writer.js.map +1 -0
  19. package/dist/applescript/content-readers.d.ts +93 -0
  20. package/dist/applescript/content-readers.d.ts.map +1 -0
  21. package/dist/applescript/content-readers.js +299 -0
  22. package/dist/applescript/content-readers.js.map +1 -0
  23. package/dist/applescript/executor.d.ts +62 -0
  24. package/dist/applescript/executor.d.ts.map +1 -0
  25. package/dist/applescript/executor.js +164 -0
  26. package/dist/applescript/executor.js.map +1 -0
  27. package/dist/applescript/index.d.ts +16 -0
  28. package/dist/applescript/index.d.ts.map +1 -0
  29. package/dist/applescript/index.js +25 -0
  30. package/dist/applescript/index.js.map +1 -0
  31. package/dist/applescript/mail-sender.d.ts +30 -0
  32. package/dist/applescript/mail-sender.d.ts.map +1 -0
  33. package/dist/applescript/mail-sender.js +53 -0
  34. package/dist/applescript/mail-sender.js.map +1 -0
  35. package/dist/applescript/parser.d.ts +215 -0
  36. package/dist/applescript/parser.d.ts.map +1 -0
  37. package/dist/applescript/parser.js +431 -0
  38. package/dist/applescript/parser.js.map +1 -0
  39. package/dist/applescript/repository.d.ts +58 -0
  40. package/dist/applescript/repository.d.ts.map +1 -0
  41. package/dist/applescript/repository.js +417 -0
  42. package/dist/applescript/repository.js.map +1 -0
  43. package/dist/applescript/scripts.d.ts +242 -0
  44. package/dist/applescript/scripts.d.ts.map +1 -0
  45. package/dist/applescript/scripts.js +1300 -0
  46. package/dist/applescript/scripts.js.map +1 -0
  47. package/dist/approval/hash.d.ts +26 -0
  48. package/dist/approval/hash.d.ts.map +1 -0
  49. package/dist/approval/hash.js +28 -0
  50. package/dist/approval/hash.js.map +1 -0
  51. package/dist/approval/index.d.ts +9 -0
  52. package/dist/approval/index.d.ts.map +1 -0
  53. package/dist/approval/index.js +8 -0
  54. package/dist/approval/index.js.map +1 -0
  55. package/dist/approval/token-manager.d.ts +48 -0
  56. package/dist/approval/token-manager.d.ts.map +1 -0
  57. package/dist/approval/token-manager.js +100 -0
  58. package/dist/approval/token-manager.js.map +1 -0
  59. package/dist/approval/types.d.ts +40 -0
  60. package/dist/approval/types.d.ts.map +1 -0
  61. package/dist/approval/types.js +8 -0
  62. package/dist/approval/types.js.map +1 -0
  63. package/dist/config.d.ts +23 -0
  64. package/dist/config.d.ts.map +1 -0
  65. package/dist/config.js +38 -0
  66. package/dist/config.js.map +1 -0
  67. package/dist/database/connection.d.ts +73 -0
  68. package/dist/database/connection.d.ts.map +1 -0
  69. package/dist/database/connection.js +126 -0
  70. package/dist/database/connection.js.map +1 -0
  71. package/dist/database/index.d.ts +7 -0
  72. package/dist/database/index.d.ts.map +1 -0
  73. package/dist/database/index.js +7 -0
  74. package/dist/database/index.js.map +1 -0
  75. package/dist/database/queries.d.ts +89 -0
  76. package/dist/database/queries.d.ts.map +1 -0
  77. package/dist/database/queries.js +422 -0
  78. package/dist/database/queries.js.map +1 -0
  79. package/dist/database/repository.d.ts +188 -0
  80. package/dist/database/repository.d.ts.map +1 -0
  81. package/dist/database/repository.js +187 -0
  82. package/dist/database/repository.js.map +1 -0
  83. package/dist/graph/auth/config.d.ts +33 -0
  84. package/dist/graph/auth/config.d.ts.map +1 -0
  85. package/dist/graph/auth/config.js +53 -0
  86. package/dist/graph/auth/config.js.map +1 -0
  87. package/dist/graph/auth/device-code-flow.d.ts +51 -0
  88. package/dist/graph/auth/device-code-flow.d.ts.map +1 -0
  89. package/dist/graph/auth/device-code-flow.js +176 -0
  90. package/dist/graph/auth/device-code-flow.js.map +1 -0
  91. package/dist/graph/auth/index.d.ts +9 -0
  92. package/dist/graph/auth/index.d.ts.map +1 -0
  93. package/dist/graph/auth/index.js +9 -0
  94. package/dist/graph/auth/index.js.map +1 -0
  95. package/dist/graph/auth/token-cache.d.ts +43 -0
  96. package/dist/graph/auth/token-cache.d.ts.map +1 -0
  97. package/dist/graph/auth/token-cache.js +99 -0
  98. package/dist/graph/auth/token-cache.js.map +1 -0
  99. package/dist/graph/client/cache.d.ts +65 -0
  100. package/dist/graph/client/cache.d.ts.map +1 -0
  101. package/dist/graph/client/cache.js +109 -0
  102. package/dist/graph/client/cache.js.map +1 -0
  103. package/dist/graph/client/graph-client.d.ts +150 -0
  104. package/dist/graph/client/graph-client.d.ts.map +1 -0
  105. package/dist/graph/client/graph-client.js +538 -0
  106. package/dist/graph/client/graph-client.js.map +1 -0
  107. package/dist/graph/client/index.d.ts +8 -0
  108. package/dist/graph/client/index.d.ts.map +1 -0
  109. package/dist/graph/client/index.js +8 -0
  110. package/dist/graph/client/index.js.map +1 -0
  111. package/dist/graph/content-readers.d.ts +102 -0
  112. package/dist/graph/content-readers.d.ts.map +1 -0
  113. package/dist/graph/content-readers.js +327 -0
  114. package/dist/graph/content-readers.js.map +1 -0
  115. package/dist/graph/index.d.ts +14 -0
  116. package/dist/graph/index.d.ts.map +1 -0
  117. package/dist/graph/index.js +19 -0
  118. package/dist/graph/index.js.map +1 -0
  119. package/dist/graph/mailbox-adapter.d.ts +25 -0
  120. package/dist/graph/mailbox-adapter.d.ts.map +1 -0
  121. package/dist/graph/mailbox-adapter.js +56 -0
  122. package/dist/graph/mailbox-adapter.js.map +1 -0
  123. package/dist/graph/mappers/contact-mapper.d.ts +10 -0
  124. package/dist/graph/mappers/contact-mapper.d.ts.map +1 -0
  125. package/dist/graph/mappers/contact-mapper.js +19 -0
  126. package/dist/graph/mappers/contact-mapper.js.map +1 -0
  127. package/dist/graph/mappers/email-mapper.d.ts +10 -0
  128. package/dist/graph/mappers/email-mapper.d.ts.map +1 -0
  129. package/dist/graph/mappers/email-mapper.js +43 -0
  130. package/dist/graph/mappers/email-mapper.js.map +1 -0
  131. package/dist/graph/mappers/event-mapper.d.ts +10 -0
  132. package/dist/graph/mappers/event-mapper.d.ts.map +1 -0
  133. package/dist/graph/mappers/event-mapper.js +28 -0
  134. package/dist/graph/mappers/event-mapper.js.map +1 -0
  135. package/dist/graph/mappers/folder-mapper.d.ts +18 -0
  136. package/dist/graph/mappers/folder-mapper.d.ts.map +1 -0
  137. package/dist/graph/mappers/folder-mapper.js +50 -0
  138. package/dist/graph/mappers/folder-mapper.js.map +1 -0
  139. package/dist/graph/mappers/index.d.ts +12 -0
  140. package/dist/graph/mappers/index.d.ts.map +1 -0
  141. package/dist/graph/mappers/index.js +12 -0
  142. package/dist/graph/mappers/index.js.map +1 -0
  143. package/dist/graph/mappers/task-mapper.d.ts +16 -0
  144. package/dist/graph/mappers/task-mapper.d.ts.map +1 -0
  145. package/dist/graph/mappers/task-mapper.js +26 -0
  146. package/dist/graph/mappers/task-mapper.js.map +1 -0
  147. package/dist/graph/mappers/utils.d.ts +75 -0
  148. package/dist/graph/mappers/utils.d.ts.map +1 -0
  149. package/dist/graph/mappers/utils.js +130 -0
  150. package/dist/graph/mappers/utils.js.map +1 -0
  151. package/dist/graph/repository.d.ts +112 -0
  152. package/dist/graph/repository.d.ts.map +1 -0
  153. package/dist/graph/repository.js +549 -0
  154. package/dist/graph/repository.js.map +1 -0
  155. package/dist/index.d.ts +17 -0
  156. package/dist/index.d.ts.map +1 -0
  157. package/dist/index.js +1821 -0
  158. package/dist/index.js.map +1 -0
  159. package/dist/parsers/html-stripper.d.ts +43 -0
  160. package/dist/parsers/html-stripper.d.ts.map +1 -0
  161. package/dist/parsers/html-stripper.js +175 -0
  162. package/dist/parsers/html-stripper.js.map +1 -0
  163. package/dist/parsers/index.d.ts +8 -0
  164. package/dist/parsers/index.d.ts.map +1 -0
  165. package/dist/parsers/index.js +8 -0
  166. package/dist/parsers/index.js.map +1 -0
  167. package/dist/parsers/olk15.d.ts +99 -0
  168. package/dist/parsers/olk15.d.ts.map +1 -0
  169. package/dist/parsers/olk15.js +364 -0
  170. package/dist/parsers/olk15.js.map +1 -0
  171. package/dist/tools/calendar.d.ts +203 -0
  172. package/dist/tools/calendar.d.ts.map +1 -0
  173. package/dist/tools/calendar.js +251 -0
  174. package/dist/tools/calendar.js.map +1 -0
  175. package/dist/tools/contacts.d.ts +89 -0
  176. package/dist/tools/contacts.d.ts.map +1 -0
  177. package/dist/tools/contacts.js +129 -0
  178. package/dist/tools/contacts.js.map +1 -0
  179. package/dist/tools/index.d.ts +12 -0
  180. package/dist/tools/index.d.ts.map +1 -0
  181. package/dist/tools/index.js +18 -0
  182. package/dist/tools/index.js.map +1 -0
  183. package/dist/tools/mail.d.ts +83 -0
  184. package/dist/tools/mail.d.ts.map +1 -0
  185. package/dist/tools/mail.js +217 -0
  186. package/dist/tools/mail.js.map +1 -0
  187. package/dist/tools/mailbox-organization.d.ts +337 -0
  188. package/dist/tools/mailbox-organization.d.ts.map +1 -0
  189. package/dist/tools/mailbox-organization.js +525 -0
  190. package/dist/tools/mailbox-organization.js.map +1 -0
  191. package/dist/tools/notes.d.ts +70 -0
  192. package/dist/tools/notes.d.ts.map +1 -0
  193. package/dist/tools/notes.js +132 -0
  194. package/dist/tools/notes.js.map +1 -0
  195. package/dist/tools/tasks.d.ts +70 -0
  196. package/dist/tools/tasks.d.ts.map +1 -0
  197. package/dist/tools/tasks.js +122 -0
  198. package/dist/tools/tasks.js.map +1 -0
  199. package/dist/types/calendar.d.ts +56 -0
  200. package/dist/types/calendar.d.ts.map +1 -0
  201. package/dist/types/calendar.js +14 -0
  202. package/dist/types/calendar.js.map +1 -0
  203. package/dist/types/contacts.d.ts +92 -0
  204. package/dist/types/contacts.d.ts.map +1 -0
  205. package/dist/types/contacts.js +37 -0
  206. package/dist/types/contacts.js.map +1 -0
  207. package/dist/types/index.d.ts +11 -0
  208. package/dist/types/index.d.ts.map +1 -0
  209. package/dist/types/index.js +12 -0
  210. package/dist/types/index.js.map +1 -0
  211. package/dist/types/mail.d.ts +87 -0
  212. package/dist/types/mail.d.ts.map +1 -0
  213. package/dist/types/mail.js +32 -0
  214. package/dist/types/mail.js.map +1 -0
  215. package/dist/types/notes.d.ts +22 -0
  216. package/dist/types/notes.d.ts.map +1 -0
  217. package/dist/types/notes.js +5 -0
  218. package/dist/types/notes.js.map +1 -0
  219. package/dist/types/tasks.d.ts +27 -0
  220. package/dist/types/tasks.d.ts.map +1 -0
  221. package/dist/types/tasks.js +5 -0
  222. package/dist/types/tasks.js.map +1 -0
  223. package/dist/utils/dates.d.ts +62 -0
  224. package/dist/utils/dates.d.ts.map +1 -0
  225. package/dist/utils/dates.js +90 -0
  226. package/dist/utils/dates.js.map +1 -0
  227. package/dist/utils/errors.d.ts +198 -0
  228. package/dist/utils/errors.d.ts.map +1 -0
  229. package/dist/utils/errors.js +281 -0
  230. package/dist/utils/errors.js.map +1 -0
  231. package/dist/utils/index.d.ts +6 -0
  232. package/dist/utils/index.d.ts.map +1 -0
  233. package/dist/utils/index.js +6 -0
  234. package/dist/utils/index.js.map +1 -0
  235. package/package.json +75 -0
@@ -0,0 +1,188 @@
1
+ /**
2
+ * Repository for accessing Outlook data.
3
+ *
4
+ * Provides a data access layer over the SQLite database.
5
+ */
6
+ import type { IConnection } from './connection.js';
7
+ export interface FolderRow {
8
+ readonly id: number;
9
+ readonly name: string | null;
10
+ readonly parentId: number | null;
11
+ readonly specialType: number;
12
+ readonly folderType: number;
13
+ readonly accountId: number;
14
+ readonly messageCount: number;
15
+ readonly unreadCount: number;
16
+ }
17
+ export interface EmailRow {
18
+ readonly id: number;
19
+ readonly folderId: number;
20
+ readonly subject: string | null;
21
+ readonly sender: string | null;
22
+ readonly senderAddress: string | null;
23
+ readonly recipients: string | null;
24
+ readonly displayTo: string | null;
25
+ readonly toAddresses: string | null;
26
+ readonly ccAddresses: string | null;
27
+ readonly preview: string | null;
28
+ readonly isRead: number;
29
+ readonly timeReceived: number | null;
30
+ readonly timeSent: number | null;
31
+ readonly hasAttachment: number;
32
+ readonly size: number;
33
+ readonly priority: number;
34
+ readonly flagStatus: number;
35
+ readonly categories: Buffer | null;
36
+ readonly messageId: string | null;
37
+ readonly conversationId: number | null;
38
+ readonly dataFilePath: string | null;
39
+ }
40
+ export interface EventRow {
41
+ readonly id: number;
42
+ readonly folderId: number;
43
+ readonly startDate: number | null;
44
+ readonly endDate: number | null;
45
+ readonly isRecurring: number;
46
+ readonly hasReminder: number;
47
+ readonly attendeeCount: number;
48
+ readonly uid: string | null;
49
+ readonly masterRecordId: number | null;
50
+ readonly recurrenceId: number | null;
51
+ readonly dataFilePath: string | null;
52
+ }
53
+ export interface ContactRow {
54
+ readonly id: number;
55
+ readonly folderId: number;
56
+ readonly displayName: string | null;
57
+ readonly sortName: string | null;
58
+ readonly contactType: number | null;
59
+ readonly dataFilePath: string | null;
60
+ }
61
+ export interface TaskRow {
62
+ readonly id: number;
63
+ readonly folderId: number;
64
+ readonly name: string | null;
65
+ readonly isCompleted: number;
66
+ readonly dueDate: number | null;
67
+ readonly startDate: number | null;
68
+ readonly priority: number;
69
+ readonly hasReminder: number | null;
70
+ readonly dataFilePath: string | null;
71
+ }
72
+ export interface NoteRow {
73
+ readonly id: number;
74
+ readonly folderId: number;
75
+ readonly modifiedDate: number | null;
76
+ readonly dataFilePath: string | null;
77
+ }
78
+ export interface CountRow {
79
+ readonly count: number;
80
+ }
81
+ /**
82
+ * Interface for the Outlook data repository (for dependency injection).
83
+ */
84
+ export interface IRepository {
85
+ listFolders(): FolderRow[];
86
+ getFolder(id: number): FolderRow | undefined;
87
+ listEmails(folderId: number, limit: number, offset: number): EmailRow[];
88
+ listUnreadEmails(folderId: number, limit: number, offset: number): EmailRow[];
89
+ searchEmails(query: string, limit: number): EmailRow[];
90
+ searchEmailsInFolder(folderId: number, query: string, limit: number): EmailRow[];
91
+ getEmail(id: number): EmailRow | undefined;
92
+ getUnreadCount(): number;
93
+ getUnreadCountByFolder(folderId: number): number;
94
+ listCalendars(): FolderRow[];
95
+ listEvents(limit: number): EventRow[];
96
+ listEventsByFolder(folderId: number, limit: number): EventRow[];
97
+ listEventsByDateRange(startDate: number, endDate: number, limit: number): EventRow[];
98
+ getEvent(id: number): EventRow | undefined;
99
+ listContacts(limit: number, offset: number): ContactRow[];
100
+ searchContacts(query: string, limit: number): ContactRow[];
101
+ getContact(id: number): ContactRow | undefined;
102
+ listTasks(limit: number, offset: number): TaskRow[];
103
+ listIncompleteTasks(limit: number, offset: number): TaskRow[];
104
+ searchTasks(query: string, limit: number): TaskRow[];
105
+ getTask(id: number): TaskRow | undefined;
106
+ listNotes(limit: number, offset: number): NoteRow[];
107
+ getNote(id: number): NoteRow | undefined;
108
+ }
109
+ /**
110
+ * Interface for writable Outlook data operations.
111
+ * Extends IRepository with mutation methods for mailbox organization.
112
+ */
113
+ export interface IWriteableRepository extends IRepository {
114
+ moveEmail(emailId: number, destinationFolderId: number): void;
115
+ deleteEmail(emailId: number): void;
116
+ archiveEmail(emailId: number): void;
117
+ junkEmail(emailId: number): void;
118
+ markEmailRead(emailId: number, isRead: boolean): void;
119
+ setEmailFlag(emailId: number, flagStatus: number): void;
120
+ setEmailCategories(emailId: number, categories: string[]): void;
121
+ createFolder(name: string, parentFolderId?: number): FolderRow;
122
+ deleteFolder(folderId: number): void;
123
+ renameFolder(folderId: number, newName: string): void;
124
+ moveFolder(folderId: number, destinationParentId: number): void;
125
+ emptyFolder(folderId: number): void;
126
+ }
127
+ /**
128
+ * A value that may be synchronous or wrapped in a Promise.
129
+ */
130
+ export type MaybePromise<T> = T | Promise<T>;
131
+ /**
132
+ * Async-compatible repository interface for mailbox organization tools.
133
+ *
134
+ * Both sync (AppleScript) and async (Graph) repositories satisfy this
135
+ * interface. AppleScript repos return plain values; Graph repos return
136
+ * Promises. MailboxOrganizationTools awaits all calls uniformly.
137
+ */
138
+ export interface IMailboxRepository {
139
+ getEmail(id: number): MaybePromise<EmailRow | undefined>;
140
+ getFolder(id: number): MaybePromise<FolderRow | undefined>;
141
+ moveEmail(emailId: number, destinationFolderId: number): MaybePromise<void>;
142
+ deleteEmail(emailId: number): MaybePromise<void>;
143
+ archiveEmail(emailId: number): MaybePromise<void>;
144
+ junkEmail(emailId: number): MaybePromise<void>;
145
+ markEmailRead(emailId: number, isRead: boolean): MaybePromise<void>;
146
+ setEmailFlag(emailId: number, flagStatus: number): MaybePromise<void>;
147
+ setEmailCategories(emailId: number, categories: string[]): MaybePromise<void>;
148
+ createFolder(name: string, parentFolderId?: number): MaybePromise<FolderRow>;
149
+ deleteFolder(folderId: number): MaybePromise<void>;
150
+ renameFolder(folderId: number, newName: string): MaybePromise<void>;
151
+ moveFolder(folderId: number, destinationParentId: number): MaybePromise<void>;
152
+ emptyFolder(folderId: number): MaybePromise<void>;
153
+ }
154
+ /**
155
+ * Repository implementation using better-sqlite3.
156
+ */
157
+ export declare class OutlookRepository implements IRepository {
158
+ private readonly connection;
159
+ constructor(connection: IConnection);
160
+ listFolders(): FolderRow[];
161
+ getFolder(id: number): FolderRow | undefined;
162
+ listEmails(folderId: number, limit: number, offset: number): EmailRow[];
163
+ listUnreadEmails(folderId: number, limit: number, offset: number): EmailRow[];
164
+ searchEmails(query: string, limit: number): EmailRow[];
165
+ searchEmailsInFolder(folderId: number, query: string, limit: number): EmailRow[];
166
+ getEmail(id: number): EmailRow | undefined;
167
+ getUnreadCount(): number;
168
+ getUnreadCountByFolder(folderId: number): number;
169
+ listCalendars(): FolderRow[];
170
+ listEvents(limit: number): EventRow[];
171
+ listEventsByFolder(folderId: number, limit: number): EventRow[];
172
+ listEventsByDateRange(startDate: number, endDate: number, limit: number): EventRow[];
173
+ getEvent(id: number): EventRow | undefined;
174
+ listContacts(limit: number, offset: number): ContactRow[];
175
+ searchContacts(query: string, limit: number): ContactRow[];
176
+ getContact(id: number): ContactRow | undefined;
177
+ listTasks(limit: number, offset: number): TaskRow[];
178
+ listIncompleteTasks(limit: number, offset: number): TaskRow[];
179
+ searchTasks(query: string, limit: number): TaskRow[];
180
+ getTask(id: number): TaskRow | undefined;
181
+ listNotes(limit: number, offset: number): NoteRow[];
182
+ getNote(id: number): NoteRow | undefined;
183
+ }
184
+ /**
185
+ * Creates a repository with the given connection.
186
+ */
187
+ export declare function createRepository(connection: IConnection): IRepository;
188
+ //# sourceMappingURL=repository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../src/database/repository.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAOnD,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CACtC;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CACtC;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CACtC;AAED,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CACtC;AAED,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CACtC;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAMD;;GAEG;AACH,MAAM,WAAW,WAAW;IAE1B,WAAW,IAAI,SAAS,EAAE,CAAC;IAC3B,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC;IAG7C,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,EAAE,CAAC;IACxE,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,EAAE,CAAC;IAC9E,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,QAAQ,EAAE,CAAC;IACvD,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,QAAQ,EAAE,CAAC;IACjF,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;IAC3C,cAAc,IAAI,MAAM,CAAC;IACzB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC;IAGjD,aAAa,IAAI,SAAS,EAAE,CAAC;IAC7B,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,EAAE,CAAC;IACtC,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,QAAQ,EAAE,CAAC;IAChE,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,QAAQ,EAAE,CAAC;IACrF,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;IAG3C,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,UAAU,EAAE,CAAC;IAC1D,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,UAAU,EAAE,CAAC;IAC3D,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC;IAG/C,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,EAAE,CAAC;IACpD,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,EAAE,CAAC;IAC9D,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,EAAE,CAAC;IACrD,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;IAGzC,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,EAAE,CAAC;IACpD,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;CAC1C;AAMD;;;GAGG;AACH,MAAM,WAAW,oBAAqB,SAAQ,WAAW;IAEvD,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9D,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;IACtD,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACxD,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAGhE,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/D,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACtD,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChE,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACrC;AAMD;;GAEG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAE7C;;;;;;GAMG;AACH,MAAM,WAAW,kBAAkB;IAEjC,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,CAAC,QAAQ,GAAG,SAAS,CAAC,CAAC;IACzD,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC;IAG3D,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAC5E,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACjD,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAClD,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAC/C,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACpE,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACtE,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAG9E,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;IAC7E,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACnD,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACpE,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,mBAAmB,EAAE,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAC9E,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;CACnD;AAMD;;GAEG;AACH,qBAAa,iBAAkB,YAAW,WAAW;IACvC,OAAO,CAAC,QAAQ,CAAC,UAAU;gBAAV,UAAU,EAAE,WAAW;IAMpD,WAAW,IAAI,SAAS,EAAE;IAO1B,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IAW5C,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,EAAE;IAOvE,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,EAAE;IAO7E,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,QAAQ,EAAE;IAQtD,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,QAAQ,EAAE;IAQhF,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS;IAO1C,cAAc,IAAI,MAAM;IAQxB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAYhD,aAAa,IAAI,SAAS,EAAE;IAO5B,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,EAAE;IAOrC,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,QAAQ,EAAE;IAO/D,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,QAAQ,EAAE;IAOpF,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS;IAW1C,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,UAAU,EAAE;IAOzD,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,UAAU,EAAE;IAQ1D,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAW9C,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,EAAE;IAOnD,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,EAAE;IAO7D,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,EAAE;IAQpD,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS;IAWxC,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,EAAE;IAOnD,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS;CAMzC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,WAAW,GAAG,WAAW,CAErE"}
@@ -0,0 +1,187 @@
1
+ /**
2
+ * Repository for accessing Outlook data.
3
+ *
4
+ * Provides a data access layer over the SQLite database.
5
+ */
6
+ import * as queries from './queries.js';
7
+ // =============================================================================
8
+ // Repository Implementation
9
+ // =============================================================================
10
+ /**
11
+ * Repository implementation using better-sqlite3.
12
+ */
13
+ export class OutlookRepository {
14
+ connection;
15
+ constructor(connection) {
16
+ this.connection = connection;
17
+ }
18
+ // ---------------------------------------------------------------------------
19
+ // Folders
20
+ // ---------------------------------------------------------------------------
21
+ listFolders() {
22
+ return this.connection.execute((db) => {
23
+ const stmt = db.prepare(queries.LIST_FOLDERS);
24
+ return stmt.all();
25
+ });
26
+ }
27
+ getFolder(id) {
28
+ return this.connection.execute((db) => {
29
+ const stmt = db.prepare(queries.GET_FOLDER);
30
+ return stmt.get(id);
31
+ });
32
+ }
33
+ // ---------------------------------------------------------------------------
34
+ // Emails
35
+ // ---------------------------------------------------------------------------
36
+ listEmails(folderId, limit, offset) {
37
+ return this.connection.execute((db) => {
38
+ const stmt = db.prepare(queries.LIST_EMAILS);
39
+ return stmt.all(folderId, limit, offset);
40
+ });
41
+ }
42
+ listUnreadEmails(folderId, limit, offset) {
43
+ return this.connection.execute((db) => {
44
+ const stmt = db.prepare(queries.LIST_UNREAD_EMAILS);
45
+ return stmt.all(folderId, limit, offset);
46
+ });
47
+ }
48
+ searchEmails(query, limit) {
49
+ return this.connection.execute((db) => {
50
+ const pattern = `%${query}%`;
51
+ const stmt = db.prepare(queries.SEARCH_EMAILS);
52
+ return stmt.all(pattern, pattern, pattern, limit);
53
+ });
54
+ }
55
+ searchEmailsInFolder(folderId, query, limit) {
56
+ return this.connection.execute((db) => {
57
+ const pattern = `%${query}%`;
58
+ const stmt = db.prepare(queries.SEARCH_EMAILS_IN_FOLDER);
59
+ return stmt.all(folderId, pattern, pattern, pattern, limit);
60
+ });
61
+ }
62
+ getEmail(id) {
63
+ return this.connection.execute((db) => {
64
+ const stmt = db.prepare(queries.GET_EMAIL);
65
+ return stmt.get(id);
66
+ });
67
+ }
68
+ getUnreadCount() {
69
+ return this.connection.execute((db) => {
70
+ const stmt = db.prepare(queries.GET_UNREAD_COUNT);
71
+ const row = stmt.get();
72
+ return row?.count ?? 0;
73
+ });
74
+ }
75
+ getUnreadCountByFolder(folderId) {
76
+ return this.connection.execute((db) => {
77
+ const stmt = db.prepare(queries.GET_UNREAD_COUNT_BY_FOLDER);
78
+ const row = stmt.get(folderId);
79
+ return row?.count ?? 0;
80
+ });
81
+ }
82
+ // ---------------------------------------------------------------------------
83
+ // Calendar
84
+ // ---------------------------------------------------------------------------
85
+ listCalendars() {
86
+ return this.connection.execute((db) => {
87
+ const stmt = db.prepare(queries.LIST_CALENDARS);
88
+ return stmt.all();
89
+ });
90
+ }
91
+ listEvents(limit) {
92
+ return this.connection.execute((db) => {
93
+ const stmt = db.prepare(queries.LIST_EVENTS);
94
+ return stmt.all(limit);
95
+ });
96
+ }
97
+ listEventsByFolder(folderId, limit) {
98
+ return this.connection.execute((db) => {
99
+ const stmt = db.prepare(queries.LIST_EVENTS_BY_FOLDER);
100
+ return stmt.all(folderId, limit);
101
+ });
102
+ }
103
+ listEventsByDateRange(startDate, endDate, limit) {
104
+ return this.connection.execute((db) => {
105
+ const stmt = db.prepare(queries.LIST_EVENTS_BY_DATE_RANGE);
106
+ return stmt.all(startDate, endDate, limit);
107
+ });
108
+ }
109
+ getEvent(id) {
110
+ return this.connection.execute((db) => {
111
+ const stmt = db.prepare(queries.GET_EVENT);
112
+ return stmt.get(id);
113
+ });
114
+ }
115
+ // ---------------------------------------------------------------------------
116
+ // Contacts
117
+ // ---------------------------------------------------------------------------
118
+ listContacts(limit, offset) {
119
+ return this.connection.execute((db) => {
120
+ const stmt = db.prepare(queries.LIST_CONTACTS);
121
+ return stmt.all(limit, offset);
122
+ });
123
+ }
124
+ searchContacts(query, limit) {
125
+ return this.connection.execute((db) => {
126
+ const pattern = `%${query}%`;
127
+ const stmt = db.prepare(queries.SEARCH_CONTACTS);
128
+ return stmt.all(pattern, pattern, limit);
129
+ });
130
+ }
131
+ getContact(id) {
132
+ return this.connection.execute((db) => {
133
+ const stmt = db.prepare(queries.GET_CONTACT);
134
+ return stmt.get(id);
135
+ });
136
+ }
137
+ // ---------------------------------------------------------------------------
138
+ // Tasks
139
+ // ---------------------------------------------------------------------------
140
+ listTasks(limit, offset) {
141
+ return this.connection.execute((db) => {
142
+ const stmt = db.prepare(queries.LIST_TASKS);
143
+ return stmt.all(limit, offset);
144
+ });
145
+ }
146
+ listIncompleteTasks(limit, offset) {
147
+ return this.connection.execute((db) => {
148
+ const stmt = db.prepare(queries.LIST_INCOMPLETE_TASKS);
149
+ return stmt.all(limit, offset);
150
+ });
151
+ }
152
+ searchTasks(query, limit) {
153
+ return this.connection.execute((db) => {
154
+ const pattern = `%${query}%`;
155
+ const stmt = db.prepare(queries.SEARCH_TASKS);
156
+ return stmt.all(pattern, limit);
157
+ });
158
+ }
159
+ getTask(id) {
160
+ return this.connection.execute((db) => {
161
+ const stmt = db.prepare(queries.GET_TASK);
162
+ return stmt.get(id);
163
+ });
164
+ }
165
+ // ---------------------------------------------------------------------------
166
+ // Notes
167
+ // ---------------------------------------------------------------------------
168
+ listNotes(limit, offset) {
169
+ return this.connection.execute((db) => {
170
+ const stmt = db.prepare(queries.LIST_NOTES);
171
+ return stmt.all(limit, offset);
172
+ });
173
+ }
174
+ getNote(id) {
175
+ return this.connection.execute((db) => {
176
+ const stmt = db.prepare(queries.GET_NOTE);
177
+ return stmt.get(id);
178
+ });
179
+ }
180
+ }
181
+ /**
182
+ * Creates a repository with the given connection.
183
+ */
184
+ export function createRepository(connection) {
185
+ return new OutlookRepository(connection);
186
+ }
187
+ //# sourceMappingURL=repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repository.js","sourceRoot":"","sources":["../../src/database/repository.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Microsoft Graph API configuration.
3
+ *
4
+ * Contains Azure AD app registration settings for the device code flow.
5
+ * The client ID is embedded in the package - users don't need to configure anything.
6
+ */
7
+ /**
8
+ * Microsoft Graph API scopes required for read-only Outlook access.
9
+ */
10
+ export declare const GRAPH_SCOPES: readonly ["Mail.Read", "Calendars.Read", "Contacts.Read", "Tasks.Read", "User.Read", "offline_access"];
11
+ /**
12
+ * Microsoft Graph API configuration.
13
+ */
14
+ export interface GraphAuthConfig {
15
+ /** Azure AD application (client) ID */
16
+ readonly clientId: string;
17
+ /** Azure AD tenant ID (default: 'common' for multi-tenant) */
18
+ readonly tenantId: string;
19
+ /** OAuth2 scopes to request */
20
+ readonly scopes: readonly string[];
21
+ }
22
+ /**
23
+ * Loads the Graph API configuration.
24
+ *
25
+ * Uses embedded defaults but allows override via environment variables
26
+ * for users who want to use their own Azure AD app registration.
27
+ */
28
+ export declare function loadGraphConfig(): GraphAuthConfig;
29
+ /**
30
+ * Gets the Azure AD authority URL for the configured tenant.
31
+ */
32
+ export declare function getAuthorityUrl(config: GraphAuthConfig): string;
33
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/graph/auth/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAYH;;GAEG;AACH,eAAO,MAAM,YAAY,wGAOf,CAAC;AAEX;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,uCAAuC;IACvC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,8DAA8D;IAC9D,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,+BAA+B;IAC/B,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;CACpC;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,IAAI,eAAe,CAiBjD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,CAE/D"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Microsoft Graph API configuration.
3
+ *
4
+ * Contains Azure AD app registration settings for the device code flow.
5
+ * The client ID is embedded in the package - users don't need to configure anything.
6
+ */
7
+ /**
8
+ * Default client ID for the Outlook MCP Server Azure AD app.
9
+ *
10
+ * This is a public client application registered in Azure AD.
11
+ * Users can override this with their own app registration if needed.
12
+ *
13
+ * TODO: Replace with actual Azure AD app client ID before publishing.
14
+ */
15
+ const DEFAULT_CLIENT_ID = 'YOUR_AZURE_APP_CLIENT_ID';
16
+ /**
17
+ * Microsoft Graph API scopes required for read-only Outlook access.
18
+ */
19
+ export const GRAPH_SCOPES = [
20
+ 'Mail.Read',
21
+ 'Calendars.Read',
22
+ 'Contacts.Read',
23
+ 'Tasks.Read',
24
+ 'User.Read',
25
+ 'offline_access',
26
+ ];
27
+ /**
28
+ * Loads the Graph API configuration.
29
+ *
30
+ * Uses embedded defaults but allows override via environment variables
31
+ * for users who want to use their own Azure AD app registration.
32
+ */
33
+ export function loadGraphConfig() {
34
+ const clientId = process.env['OUTLOOK_MCP_CLIENT_ID'] ?? DEFAULT_CLIENT_ID;
35
+ const tenantId = process.env['OUTLOOK_MCP_TENANT_ID'] ?? 'common';
36
+ if (clientId === 'YOUR_AZURE_APP_CLIENT_ID') {
37
+ throw new Error('Azure AD app not configured. Either:\n' +
38
+ '1. Set OUTLOOK_MCP_CLIENT_ID environment variable, or\n' +
39
+ '2. The package maintainer needs to embed the client ID in config.ts');
40
+ }
41
+ return {
42
+ clientId,
43
+ tenantId,
44
+ scopes: [...GRAPH_SCOPES],
45
+ };
46
+ }
47
+ /**
48
+ * Gets the Azure AD authority URL for the configured tenant.
49
+ */
50
+ export function getAuthorityUrl(config) {
51
+ return `https://login.microsoftonline.com/${config.tenantId}`;
52
+ }
53
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/graph/auth/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;;;GAOG;AACH,MAAM,iBAAiB,GAAG,0BAA0B,CAAC;AAErD;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,WAAW;IACX,gBAAgB;IAChB,eAAe;IACf,YAAY;IACZ,WAAW;IACX,gBAAgB;CACR,CAAC;AAcX;;;;;GAKG;AACH,MAAM,UAAU,eAAe;IAC7B,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,IAAI,iBAAiB,CAAC;IAC3E,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,IAAI,QAAQ,CAAC;IAElE,IAAI,QAAQ,KAAK,0BAA0B,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CACb,wCAAwC;YACtC,yDAAyD;YACzD,qEAAqE,CACxE,CAAC;IACJ,CAAC;IAED,OAAO;QACL,QAAQ;QACR,QAAQ;QACR,MAAM,EAAE,CAAC,GAAG,YAAY,CAAC;KAC1B,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,MAAuB;IACrD,OAAO,qCAAqC,MAAM,CAAC,QAAQ,EAAE,CAAC;AAChE,CAAC"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Microsoft Authentication Library (MSAL) device code flow implementation.
3
+ *
4
+ * Uses the device code flow for authentication, which is ideal for CLI tools:
5
+ * 1. User is shown a code and URL
6
+ * 2. User visits URL in browser and enters code
7
+ * 3. User authenticates with Microsoft
8
+ * 4. Application receives tokens
9
+ */
10
+ import { type AuthenticationResult, type AccountInfo } from '@azure/msal-node';
11
+ /**
12
+ * Callback type for device code messages.
13
+ */
14
+ export type DeviceCodeCallback = (userCode: string, verificationUri: string, message: string) => void;
15
+ /**
16
+ * Acquires a token using the device code flow.
17
+ *
18
+ * This will prompt the user to authenticate if needed.
19
+ */
20
+ export declare function acquireTokenInteractive(deviceCodeCallback?: DeviceCodeCallback): Promise<AuthenticationResult>;
21
+ /**
22
+ * Acquires a token silently using cached credentials.
23
+ *
24
+ * Returns null if no cached token is available or if refresh fails.
25
+ */
26
+ export declare function acquireTokenSilent(): Promise<AuthenticationResult | null>;
27
+ /**
28
+ * Gets an access token, prompting for login if needed.
29
+ *
30
+ * This is the main entry point for getting a token:
31
+ * 1. First tries to get a cached/refreshed token silently
32
+ * 2. If that fails, prompts for device code authentication
33
+ */
34
+ export declare function getAccessToken(deviceCodeCallback?: DeviceCodeCallback): Promise<string>;
35
+ /**
36
+ * Checks if the user is authenticated (has cached tokens).
37
+ */
38
+ export declare function isAuthenticated(): Promise<boolean>;
39
+ /**
40
+ * Gets the currently authenticated account info.
41
+ */
42
+ export declare function getAccount(): Promise<AccountInfo | null>;
43
+ /**
44
+ * Signs out by clearing the token cache.
45
+ */
46
+ export declare function signOut(): Promise<void>;
47
+ /**
48
+ * Resets the MSAL instance (mainly for testing).
49
+ */
50
+ export declare function resetMsalInstance(): void;
51
+ //# sourceMappingURL=device-code-flow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"device-code-flow.d.ts","sourceRoot":"","sources":["../../../src/graph/auth/device-code-flow.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAEL,KAAK,oBAAoB,EAEzB,KAAK,WAAW,EACjB,MAAM,kBAAkB,CAAC;AA8C1B;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;AAiBtG;;;;GAIG;AACH,wBAAsB,uBAAuB,CAC3C,kBAAkB,GAAE,kBAA8C,GACjE,OAAO,CAAC,oBAAoB,CAAC,CAgB/B;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAsB/E;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAClC,kBAAkB,GAAE,kBAA8C,GACjE,OAAO,CAAC,MAAM,CAAC,CAUjB;AAED;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC,CAYxD;AAED;;GAEG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAS9D;AAED;;GAEG;AACH,wBAAsB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAW7C;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAGxC"}