@awolve/myoffice 1.6.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 (94) hide show
  1. package/README.md +271 -0
  2. package/dist/auth/cache-plugin.d.ts +20 -0
  3. package/dist/auth/cache-plugin.d.ts.map +1 -0
  4. package/dist/auth/cache-plugin.js +49 -0
  5. package/dist/auth/cache-plugin.js.map +1 -0
  6. package/dist/auth/config.d.ts +40 -0
  7. package/dist/auth/config.d.ts.map +1 -0
  8. package/dist/auth/config.js +135 -0
  9. package/dist/auth/config.js.map +1 -0
  10. package/dist/auth/device-code.d.ts +2 -0
  11. package/dist/auth/device-code.d.ts.map +1 -0
  12. package/dist/auth/device-code.js +40 -0
  13. package/dist/auth/device-code.js.map +1 -0
  14. package/dist/auth/index.d.ts +4 -0
  15. package/dist/auth/index.d.ts.map +1 -0
  16. package/dist/auth/index.js +4 -0
  17. package/dist/auth/index.js.map +1 -0
  18. package/dist/auth/login.d.ts +7 -0
  19. package/dist/auth/login.d.ts.map +1 -0
  20. package/dist/auth/login.js +22 -0
  21. package/dist/auth/login.js.map +1 -0
  22. package/dist/auth/token-manager.d.ts +4 -0
  23. package/dist/auth/token-manager.d.ts.map +1 -0
  24. package/dist/auth/token-manager.js +85 -0
  25. package/dist/auth/token-manager.js.map +1 -0
  26. package/dist/cli/formatter.d.ts +5 -0
  27. package/dist/cli/formatter.d.ts.map +1 -0
  28. package/dist/cli/formatter.js +317 -0
  29. package/dist/cli/formatter.js.map +1 -0
  30. package/dist/cli.d.ts +3 -0
  31. package/dist/cli.d.ts.map +1 -0
  32. package/dist/cli.js +973 -0
  33. package/dist/cli.js.map +1 -0
  34. package/dist/core/handler.d.ts +8 -0
  35. package/dist/core/handler.d.ts.map +1 -0
  36. package/dist/core/handler.js +327 -0
  37. package/dist/core/handler.js.map +1 -0
  38. package/dist/index.d.ts +3 -0
  39. package/dist/index.d.ts.map +1 -0
  40. package/dist/index.js +924 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/tools/calendar.d.ts +124 -0
  43. package/dist/tools/calendar.d.ts.map +1 -0
  44. package/dist/tools/calendar.js +129 -0
  45. package/dist/tools/calendar.js.map +1 -0
  46. package/dist/tools/chats.d.ts +66 -0
  47. package/dist/tools/chats.d.ts.map +1 -0
  48. package/dist/tools/chats.js +102 -0
  49. package/dist/tools/chats.js.map +1 -0
  50. package/dist/tools/contacts.d.ts +138 -0
  51. package/dist/tools/contacts.d.ts.map +1 -0
  52. package/dist/tools/contacts.js +189 -0
  53. package/dist/tools/contacts.js.map +1 -0
  54. package/dist/tools/index.d.ts +10 -0
  55. package/dist/tools/index.d.ts.map +1 -0
  56. package/dist/tools/index.js +10 -0
  57. package/dist/tools/index.js.map +1 -0
  58. package/dist/tools/mail.d.ts +138 -0
  59. package/dist/tools/mail.d.ts.map +1 -0
  60. package/dist/tools/mail.js +187 -0
  61. package/dist/tools/mail.js.map +1 -0
  62. package/dist/tools/onedrive.d.ts +125 -0
  63. package/dist/tools/onedrive.d.ts.map +1 -0
  64. package/dist/tools/onedrive.js +203 -0
  65. package/dist/tools/onedrive.js.map +1 -0
  66. package/dist/tools/planner.d.ts +390 -0
  67. package/dist/tools/planner.d.ts.map +1 -0
  68. package/dist/tools/planner.js +693 -0
  69. package/dist/tools/planner.js.map +1 -0
  70. package/dist/tools/sharepoint.d.ts +138 -0
  71. package/dist/tools/sharepoint.d.ts.map +1 -0
  72. package/dist/tools/sharepoint.js +156 -0
  73. package/dist/tools/sharepoint.js.map +1 -0
  74. package/dist/tools/tasks.d.ts +107 -0
  75. package/dist/tools/tasks.d.ts.map +1 -0
  76. package/dist/tools/tasks.js +131 -0
  77. package/dist/tools/tasks.js.map +1 -0
  78. package/dist/tools/teams.d.ts +66 -0
  79. package/dist/tools/teams.d.ts.map +1 -0
  80. package/dist/tools/teams.js +69 -0
  81. package/dist/tools/teams.js.map +1 -0
  82. package/dist/utils/graph-client.d.ts +15 -0
  83. package/dist/utils/graph-client.d.ts.map +1 -0
  84. package/dist/utils/graph-client.js +126 -0
  85. package/dist/utils/graph-client.js.map +1 -0
  86. package/dist/utils/signature.d.ts +2 -0
  87. package/dist/utils/signature.d.ts.map +1 -0
  88. package/dist/utils/signature.js +17 -0
  89. package/dist/utils/signature.js.map +1 -0
  90. package/dist/utils/version.d.ts +2 -0
  91. package/dist/utils/version.d.ts.map +1 -0
  92. package/dist/utils/version.js +20 -0
  93. package/dist/utils/version.js.map +1 -0
  94. package/package.json +55 -0
@@ -0,0 +1,189 @@
1
+ import { z } from 'zod';
2
+ import { graphRequest, graphList } from '../utils/graph-client.js';
3
+ // Schemas
4
+ export const listContactsSchema = z.object({
5
+ maxItems: z.number().optional().describe('Maximum number of contacts. Default: 50'),
6
+ });
7
+ export const searchContactsSchema = z.object({
8
+ query: z.string().describe('Search query (name, email, or company)'),
9
+ maxItems: z.number().optional().describe('Maximum results. Default: 25'),
10
+ });
11
+ export const getContactSchema = z.object({
12
+ contactId: z.string().describe('The ID of the contact to retrieve'),
13
+ });
14
+ export const createContactSchema = z.object({
15
+ givenName: z.string().optional().describe('First name'),
16
+ surname: z.string().optional().describe('Last name'),
17
+ email: z.string().optional().describe('Email address'),
18
+ mobilePhone: z.string().optional().describe('Mobile phone number'),
19
+ businessPhone: z.string().optional().describe('Business phone number'),
20
+ companyName: z.string().optional().describe('Company name'),
21
+ jobTitle: z.string().optional().describe('Job title'),
22
+ notes: z.string().optional().describe('Personal notes about the contact'),
23
+ birthday: z.string().optional().describe('Birthday (ISO date format, e.g., 1990-05-15)'),
24
+ });
25
+ export const updateContactSchema = z.object({
26
+ contactId: z.string().describe('The ID of the contact to update'),
27
+ givenName: z.string().optional().describe('First name'),
28
+ surname: z.string().optional().describe('Last name'),
29
+ email: z.string().optional().describe('Email address'),
30
+ mobilePhone: z.string().optional().describe('Mobile phone number'),
31
+ businessPhone: z.string().optional().describe('Business phone number'),
32
+ companyName: z.string().optional().describe('Company name'),
33
+ jobTitle: z.string().optional().describe('Job title'),
34
+ notes: z.string().optional().describe('Personal notes about the contact'),
35
+ birthday: z.string().optional().describe('Birthday (ISO date format, e.g., 1990-05-15)'),
36
+ });
37
+ // Tool implementations
38
+ export async function listContacts(params) {
39
+ const { maxItems = 50 } = params;
40
+ const path = `/me/contacts?$select=id,displayName,givenName,surname,emailAddresses,businessPhones,mobilePhone,companyName,jobTitle,personalNotes,birthday&$orderby=displayName&$top=${maxItems}`;
41
+ const contacts = await graphList(path, { maxItems });
42
+ return contacts.map((c) => ({
43
+ id: c.id,
44
+ name: c.displayName,
45
+ firstName: c.givenName,
46
+ lastName: c.surname,
47
+ email: c.emailAddresses?.[0]?.address,
48
+ phone: c.mobilePhone || c.businessPhones?.[0],
49
+ company: c.companyName,
50
+ title: c.jobTitle,
51
+ notes: c.personalNotes,
52
+ birthday: c.birthday,
53
+ }));
54
+ }
55
+ export async function searchContacts(params) {
56
+ const { query, maxItems = 25 } = params;
57
+ const queryLower = query.toLowerCase();
58
+ // First, search using API filter (name, company, job title - Graph API supports these)
59
+ const encodedQuery = encodeURIComponent(query);
60
+ const filters = [
61
+ `contains(displayName,'${encodedQuery}')`,
62
+ `contains(givenName,'${encodedQuery}')`,
63
+ `contains(surname,'${encodedQuery}')`,
64
+ `contains(companyName,'${encodedQuery}')`,
65
+ `contains(jobTitle,'${encodedQuery}')`,
66
+ ].join(' or ');
67
+ const path = `/me/contacts?$filter=${filters}&$select=id,displayName,emailAddresses,businessPhones,mobilePhone,companyName,jobTitle,personalNotes,birthday&$top=${maxItems}`;
68
+ let contacts = [];
69
+ try {
70
+ contacts = await graphList(path, { maxItems });
71
+ }
72
+ catch {
73
+ // If filter fails, fall back to getting all and filtering locally
74
+ }
75
+ // Also get all contacts to search notes and emails (not supported by $filter)
76
+ const allPath = `/me/contacts?$select=id,displayName,emailAddresses,businessPhones,mobilePhone,companyName,jobTitle,personalNotes,birthday&$top=500`;
77
+ const allContacts = await graphList(allPath, { maxItems: 500 });
78
+ // Search locally in notes and emails
79
+ const localMatches = allContacts.filter((c) => {
80
+ const searchable = [
81
+ c.personalNotes,
82
+ ...(c.emailAddresses?.map((e) => e.address) || []),
83
+ ].filter(Boolean);
84
+ return searchable.some((s) => s?.toLowerCase().includes(queryLower));
85
+ });
86
+ // Merge results, dedupe by id
87
+ const seen = new Set();
88
+ const merged = [];
89
+ for (const c of [...contacts, ...localMatches]) {
90
+ if (!seen.has(c.id)) {
91
+ seen.add(c.id);
92
+ merged.push(c);
93
+ }
94
+ }
95
+ return merged.slice(0, maxItems).map((c) => ({
96
+ id: c.id,
97
+ name: c.displayName,
98
+ email: c.emailAddresses?.[0]?.address,
99
+ phone: c.mobilePhone || c.businessPhones?.[0],
100
+ company: c.companyName,
101
+ title: c.jobTitle,
102
+ notes: c.personalNotes,
103
+ birthday: c.birthday,
104
+ }));
105
+ }
106
+ export async function getContact(params) {
107
+ const { contactId } = params;
108
+ const contact = await graphRequest(`/me/contacts/${contactId}?$select=id,displayName,givenName,surname,emailAddresses,businessPhones,mobilePhone,companyName,jobTitle,personalNotes,birthday`);
109
+ return {
110
+ id: contact.id,
111
+ name: contact.displayName,
112
+ firstName: contact.givenName,
113
+ lastName: contact.surname,
114
+ emails: contact.emailAddresses?.map((e) => e.address),
115
+ businessPhones: contact.businessPhones,
116
+ mobilePhone: contact.mobilePhone,
117
+ company: contact.companyName,
118
+ title: contact.jobTitle,
119
+ notes: contact.personalNotes,
120
+ birthday: contact.birthday,
121
+ };
122
+ }
123
+ export async function createContact(params) {
124
+ const { givenName, surname, email, mobilePhone, businessPhone, companyName, jobTitle, notes, birthday } = params;
125
+ const body = {};
126
+ if (givenName)
127
+ body.givenName = givenName;
128
+ if (surname)
129
+ body.surname = surname;
130
+ if (email) {
131
+ body.emailAddresses = [{ address: email, name: `${givenName || ''} ${surname || ''}`.trim() || email }];
132
+ }
133
+ if (mobilePhone)
134
+ body.mobilePhone = mobilePhone;
135
+ if (businessPhone)
136
+ body.businessPhones = [businessPhone];
137
+ if (companyName)
138
+ body.companyName = companyName;
139
+ if (jobTitle)
140
+ body.jobTitle = jobTitle;
141
+ if (notes)
142
+ body.personalNotes = notes;
143
+ if (birthday)
144
+ body.birthday = birthday;
145
+ const contact = await graphRequest('/me/contacts', {
146
+ method: 'POST',
147
+ body,
148
+ });
149
+ return {
150
+ success: true,
151
+ contactId: contact.id,
152
+ name: contact.displayName,
153
+ message: 'Contact created',
154
+ };
155
+ }
156
+ export async function updateContact(params) {
157
+ const { contactId, givenName, surname, email, mobilePhone, businessPhone, companyName, jobTitle, notes, birthday } = params;
158
+ const body = {};
159
+ if (givenName !== undefined)
160
+ body.givenName = givenName;
161
+ if (surname !== undefined)
162
+ body.surname = surname;
163
+ if (email !== undefined) {
164
+ body.emailAddresses = [{ address: email }];
165
+ }
166
+ if (mobilePhone !== undefined)
167
+ body.mobilePhone = mobilePhone;
168
+ if (businessPhone !== undefined)
169
+ body.businessPhones = [businessPhone];
170
+ if (companyName !== undefined)
171
+ body.companyName = companyName;
172
+ if (jobTitle !== undefined)
173
+ body.jobTitle = jobTitle;
174
+ if (notes !== undefined)
175
+ body.personalNotes = notes;
176
+ if (birthday !== undefined)
177
+ body.birthday = birthday;
178
+ const contact = await graphRequest(`/me/contacts/${contactId}`, {
179
+ method: 'PATCH',
180
+ body,
181
+ });
182
+ return {
183
+ success: true,
184
+ contactId: contact.id,
185
+ name: contact.displayName,
186
+ message: 'Contact updated',
187
+ };
188
+ }
189
+ //# sourceMappingURL=contacts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contacts.js","sourceRoot":"","sources":["../../src/tools/contacts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export * from './mail.js';
2
+ export * from './calendar.js';
3
+ export * from './tasks.js';
4
+ export * from './onedrive.js';
5
+ export * from './sharepoint.js';
6
+ export * from './contacts.js';
7
+ export * from './teams.js';
8
+ export * from './chats.js';
9
+ export * from './planner.js';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC"}
@@ -0,0 +1,10 @@
1
+ export * from './mail.js';
2
+ export * from './calendar.js';
3
+ export * from './tasks.js';
4
+ export * from './onedrive.js';
5
+ export * from './sharepoint.js';
6
+ export * from './contacts.js';
7
+ export * from './teams.js';
8
+ export * from './chats.js';
9
+ export * from './planner.js';
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC"}
@@ -0,0 +1,138 @@
1
+ import { z } from 'zod';
2
+ export declare const listMailsSchema: z.ZodObject<{
3
+ folder: z.ZodOptional<z.ZodString>;
4
+ maxItems: z.ZodOptional<z.ZodNumber>;
5
+ unreadOnly: z.ZodOptional<z.ZodBoolean>;
6
+ }, "strip", z.ZodTypeAny, {
7
+ maxItems?: number | undefined;
8
+ folder?: string | undefined;
9
+ unreadOnly?: boolean | undefined;
10
+ }, {
11
+ maxItems?: number | undefined;
12
+ folder?: string | undefined;
13
+ unreadOnly?: boolean | undefined;
14
+ }>;
15
+ export declare const readMailSchema: z.ZodObject<{
16
+ messageId: z.ZodString;
17
+ }, "strip", z.ZodTypeAny, {
18
+ messageId: string;
19
+ }, {
20
+ messageId: string;
21
+ }>;
22
+ export declare const searchMailSchema: z.ZodObject<{
23
+ query: z.ZodString;
24
+ maxItems: z.ZodOptional<z.ZodNumber>;
25
+ }, "strip", z.ZodTypeAny, {
26
+ query: string;
27
+ maxItems?: number | undefined;
28
+ }, {
29
+ query: string;
30
+ maxItems?: number | undefined;
31
+ }>;
32
+ export declare const sendMailSchema: z.ZodObject<{
33
+ to: z.ZodArray<z.ZodString, "many">;
34
+ subject: z.ZodString;
35
+ body: z.ZodString;
36
+ isHtml: z.ZodOptional<z.ZodBoolean>;
37
+ cc: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
38
+ bcc: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
39
+ useSignature: z.ZodOptional<z.ZodBoolean>;
40
+ }, "strip", z.ZodTypeAny, {
41
+ body: string;
42
+ to: string[];
43
+ subject: string;
44
+ isHtml?: boolean | undefined;
45
+ cc?: string[] | undefined;
46
+ bcc?: string[] | undefined;
47
+ useSignature?: boolean | undefined;
48
+ }, {
49
+ body: string;
50
+ to: string[];
51
+ subject: string;
52
+ isHtml?: boolean | undefined;
53
+ cc?: string[] | undefined;
54
+ bcc?: string[] | undefined;
55
+ useSignature?: boolean | undefined;
56
+ }>;
57
+ export declare const replyMailSchema: z.ZodObject<{
58
+ messageId: z.ZodString;
59
+ body: z.ZodString;
60
+ isHtml: z.ZodOptional<z.ZodBoolean>;
61
+ replyAll: z.ZodOptional<z.ZodBoolean>;
62
+ useSignature: z.ZodOptional<z.ZodBoolean>;
63
+ }, "strip", z.ZodTypeAny, {
64
+ body: string;
65
+ messageId: string;
66
+ isHtml?: boolean | undefined;
67
+ useSignature?: boolean | undefined;
68
+ replyAll?: boolean | undefined;
69
+ }, {
70
+ body: string;
71
+ messageId: string;
72
+ isHtml?: boolean | undefined;
73
+ useSignature?: boolean | undefined;
74
+ replyAll?: boolean | undefined;
75
+ }>;
76
+ export declare const deleteMailSchema: z.ZodObject<{
77
+ messageId: z.ZodString;
78
+ }, "strip", z.ZodTypeAny, {
79
+ messageId: string;
80
+ }, {
81
+ messageId: string;
82
+ }>;
83
+ export declare const markAsReadSchema: z.ZodObject<{
84
+ messageId: z.ZodString;
85
+ isRead: z.ZodOptional<z.ZodBoolean>;
86
+ }, "strip", z.ZodTypeAny, {
87
+ messageId: string;
88
+ isRead?: boolean | undefined;
89
+ }, {
90
+ messageId: string;
91
+ isRead?: boolean | undefined;
92
+ }>;
93
+ export declare function listMails(params: z.infer<typeof listMailsSchema>): Promise<{
94
+ id: string;
95
+ subject: string;
96
+ from: string | undefined;
97
+ fromName: string | undefined;
98
+ received: string;
99
+ isRead: boolean;
100
+ preview: string | undefined;
101
+ hasAttachments: boolean | undefined;
102
+ }[]>;
103
+ export declare function readMail(params: z.infer<typeof readMailSchema>): Promise<{
104
+ id: string;
105
+ subject: string;
106
+ from: string | undefined;
107
+ fromName: string | undefined;
108
+ to: string[] | undefined;
109
+ received: string;
110
+ body: string | undefined;
111
+ bodyType: string | undefined;
112
+ hasAttachments: boolean | undefined;
113
+ }>;
114
+ export declare function searchMail(params: z.infer<typeof searchMailSchema>): Promise<{
115
+ id: string;
116
+ subject: string;
117
+ from: string | undefined;
118
+ received: string;
119
+ isRead: boolean;
120
+ preview: string | undefined;
121
+ }[]>;
122
+ export declare function sendMail(params: z.infer<typeof sendMailSchema>): Promise<{
123
+ success: boolean;
124
+ message: string;
125
+ }>;
126
+ export declare function replyMail(params: z.infer<typeof replyMailSchema>): Promise<{
127
+ success: boolean;
128
+ message: string;
129
+ }>;
130
+ export declare function deleteMail(params: z.infer<typeof deleteMailSchema>): Promise<{
131
+ success: boolean;
132
+ message: string;
133
+ }>;
134
+ export declare function markAsRead(params: z.infer<typeof markAsReadSchema>): Promise<{
135
+ success: boolean;
136
+ message: string;
137
+ }>;
138
+ //# sourceMappingURL=mail.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mail.d.ts","sourceRoot":"","sources":["../../src/tools/mail.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AA4BxB,eAAO,MAAM,eAAe;;;;;;;;;;;;EAI1B,CAAC;AAEH,eAAO,MAAM,cAAc;;;;;;EAEzB,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;;;;EAG3B,CAAC;AAEH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;EAQzB,CAAC;AAEH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;EAM1B,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;EAE3B,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;;;;EAG3B,CAAC;AAGH,wBAAsB,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC;;;;;;;;;KAqBtE;AAED,wBAAsB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC;;;;;;;;;;GAkBpE;AAED,wBAAsB,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC;;;;;;;KAexE;AAgBD,wBAAsB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC;;;GA6CpE;AAED,wBAAsB,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC;;;GAoCtE;AAED,wBAAsB,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC;;;GAQxE;AAED,wBAAsB,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC;;;GASxE"}
@@ -0,0 +1,187 @@
1
+ import { z } from 'zod';
2
+ import { graphRequest, graphList } from '../utils/graph-client.js';
3
+ import { getSignature } from '../utils/signature.js';
4
+ // Schemas
5
+ export const listMailsSchema = z.object({
6
+ folder: z.string().optional().describe('Folder to list (inbox, sentitems, drafts, etc.). Default: inbox'),
7
+ maxItems: z.number().optional().describe('Maximum number of emails to return. Default: 25'),
8
+ unreadOnly: z.boolean().optional().describe('Only return unread emails'),
9
+ });
10
+ export const readMailSchema = z.object({
11
+ messageId: z.string().describe('The ID of the message to read'),
12
+ });
13
+ export const searchMailSchema = z.object({
14
+ query: z.string().describe('Search query (searches subject, body, and participants)'),
15
+ maxItems: z.number().optional().describe('Maximum number of results. Default: 25'),
16
+ });
17
+ export const sendMailSchema = z.object({
18
+ to: z.array(z.string()).describe('List of recipient email addresses'),
19
+ subject: z.string().describe('Email subject'),
20
+ body: z.string().describe('Email body (plain text or HTML)'),
21
+ isHtml: z.boolean().optional().describe('Whether body is HTML. Default: true'),
22
+ cc: z.array(z.string()).optional().describe('CC recipients'),
23
+ bcc: z.array(z.string()).optional().describe('BCC recipients'),
24
+ useSignature: z.boolean().optional().describe('Append email signature if configured. Default: true'),
25
+ });
26
+ export const replyMailSchema = z.object({
27
+ messageId: z.string().describe('The ID of the message to reply to'),
28
+ body: z.string().describe('Reply body (HTML by default)'),
29
+ isHtml: z.boolean().optional().describe('Whether body is HTML. Default: true'),
30
+ replyAll: z.boolean().optional().describe('Reply to all recipients. Default: false'),
31
+ useSignature: z.boolean().optional().describe('Append email signature if configured. Default: false'),
32
+ });
33
+ export const deleteMailSchema = z.object({
34
+ messageId: z.string().describe('The ID of the message to delete'),
35
+ });
36
+ export const markAsReadSchema = z.object({
37
+ messageId: z.string().describe('The ID of the message to mark as read'),
38
+ isRead: z.boolean().optional().describe('Set to false to mark as unread. Default: true'),
39
+ });
40
+ // Tool implementations
41
+ export async function listMails(params) {
42
+ const { folder = 'inbox', maxItems = 25, unreadOnly = false } = params;
43
+ let path = `/me/mailFolders/${folder}/messages?$select=id,subject,from,receivedDateTime,isRead,bodyPreview,hasAttachments&$orderby=receivedDateTime desc&$top=${maxItems}`;
44
+ if (unreadOnly) {
45
+ path += '&$filter=isRead eq false';
46
+ }
47
+ const messages = await graphList(path, { maxItems });
48
+ return messages.map((m) => ({
49
+ id: m.id,
50
+ subject: m.subject,
51
+ from: m.from?.emailAddress?.address,
52
+ fromName: m.from?.emailAddress?.name,
53
+ received: m.receivedDateTime,
54
+ isRead: m.isRead,
55
+ preview: m.bodyPreview?.substring(0, 200),
56
+ hasAttachments: m.hasAttachments,
57
+ }));
58
+ }
59
+ export async function readMail(params) {
60
+ const { messageId } = params;
61
+ const message = await graphRequest(`/me/messages/${messageId}?$select=id,subject,from,toRecipients,receivedDateTime,body,hasAttachments`);
62
+ return {
63
+ id: message.id,
64
+ subject: message.subject,
65
+ from: message.from?.emailAddress?.address,
66
+ fromName: message.from?.emailAddress?.name,
67
+ to: message.toRecipients?.map((r) => r.emailAddress.address),
68
+ received: message.receivedDateTime,
69
+ body: message.body?.content,
70
+ bodyType: message.body?.contentType,
71
+ hasAttachments: message.hasAttachments,
72
+ };
73
+ }
74
+ export async function searchMail(params) {
75
+ const { query, maxItems = 25 } = params;
76
+ const path = `/me/messages?$search="${encodeURIComponent(query)}"&$select=id,subject,from,receivedDateTime,isRead,bodyPreview&$top=${maxItems}`;
77
+ const messages = await graphList(path, { maxItems });
78
+ return messages.map((m) => ({
79
+ id: m.id,
80
+ subject: m.subject,
81
+ from: m.from?.emailAddress?.address,
82
+ received: m.receivedDateTime,
83
+ isRead: m.isRead,
84
+ preview: m.bodyPreview?.substring(0, 200),
85
+ }));
86
+ }
87
+ // Convert plain text to HTML (escape special chars, convert newlines to <br>)
88
+ function textToHtml(text) {
89
+ return text
90
+ .replace(/&/g, '&amp;')
91
+ .replace(/</g, '&lt;')
92
+ .replace(/>/g, '&gt;')
93
+ .replace(/\n/g, '<br>');
94
+ }
95
+ // Check if string looks like HTML (contains tags)
96
+ function looksLikeHtml(text) {
97
+ return /<[a-z][\s\S]*>/i.test(text);
98
+ }
99
+ export async function sendMail(params) {
100
+ const { to, subject, body, isHtml = true, cc, bcc, useSignature = true } = params;
101
+ // Prepare body - convert plain text to HTML if needed
102
+ let finalBody = body;
103
+ if (isHtml && !looksLikeHtml(body)) {
104
+ finalBody = textToHtml(body);
105
+ }
106
+ // Append signature if enabled and configured
107
+ if (useSignature) {
108
+ const signature = getSignature();
109
+ if (signature) {
110
+ finalBody = isHtml
111
+ ? `${finalBody}<br><br>${signature}`
112
+ : `${finalBody}\n\n--\n${signature}`;
113
+ }
114
+ }
115
+ const message = {
116
+ message: {
117
+ subject,
118
+ body: {
119
+ contentType: isHtml ? 'HTML' : 'Text',
120
+ content: finalBody,
121
+ },
122
+ toRecipients: to.map((addr) => ({
123
+ emailAddress: { address: addr },
124
+ })),
125
+ ccRecipients: cc?.map((addr) => ({
126
+ emailAddress: { address: addr },
127
+ })),
128
+ bccRecipients: bcc?.map((addr) => ({
129
+ emailAddress: { address: addr },
130
+ })),
131
+ },
132
+ saveToSentItems: true,
133
+ };
134
+ await graphRequest('/me/sendMail', {
135
+ method: 'POST',
136
+ body: message,
137
+ });
138
+ return { success: true, message: `Email sent to ${to.join(', ')}` };
139
+ }
140
+ export async function replyMail(params) {
141
+ const { messageId, body, isHtml = true, replyAll = false, useSignature = false } = params;
142
+ // Prepare body - convert plain text to HTML if needed
143
+ let finalBody = body;
144
+ if (isHtml && !looksLikeHtml(body)) {
145
+ finalBody = textToHtml(body);
146
+ }
147
+ // Append signature if enabled and configured
148
+ if (useSignature) {
149
+ const signature = getSignature();
150
+ if (signature) {
151
+ finalBody = isHtml
152
+ ? `${finalBody}<br><br>${signature}`
153
+ : `${finalBody}\n\n--\n${signature}`;
154
+ }
155
+ }
156
+ const endpoint = replyAll
157
+ ? `/me/messages/${messageId}/replyAll`
158
+ : `/me/messages/${messageId}/reply`;
159
+ await graphRequest(endpoint, {
160
+ method: 'POST',
161
+ body: {
162
+ message: {
163
+ body: {
164
+ contentType: isHtml ? 'HTML' : 'Text',
165
+ content: finalBody,
166
+ },
167
+ },
168
+ },
169
+ });
170
+ return { success: true, message: replyAll ? 'Reply sent to all' : 'Reply sent' };
171
+ }
172
+ export async function deleteMail(params) {
173
+ const { messageId } = params;
174
+ await graphRequest(`/me/messages/${messageId}`, {
175
+ method: 'DELETE',
176
+ });
177
+ return { success: true, message: 'Email deleted' };
178
+ }
179
+ export async function markAsRead(params) {
180
+ const { messageId, isRead = true } = params;
181
+ await graphRequest(`/me/messages/${messageId}`, {
182
+ method: 'PATCH',
183
+ body: { isRead },
184
+ });
185
+ return { success: true, message: isRead ? 'Email marked as read' : 'Email marked as unread' };
186
+ }
187
+ //# sourceMappingURL=mail.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mail.js","sourceRoot":"","sources":["../../src/tools/mail.ts"],"names":[],"mappings":"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"}