@sam2kb/m365-mcp 1.0.4 → 1.0.5

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.
@@ -1,169 +1,266 @@
1
1
  /**
2
- * Contacts tools — list, search, read, create, update, delete
2
+ * Contacts tools — rich contact CRUD, categories, and contact folders.
3
3
  */
4
+ const CONTACT_STRING_FIELDS = [
5
+ "givenName", "middleName", "surname", "title", "generation", "displayName",
6
+ "nickName", "mobilePhone", "jobTitle", "department", "officeLocation",
7
+ "profession", "businessHomePage", "birthday", "spouseName", "assistantName",
8
+ "manager", "fileAs",
9
+ ];
10
+ const CONTACT_ARRAY_FIELDS = [
11
+ "homePhones", "children", "categories", "imAddresses",
12
+ ];
13
+ function encodeId(id) {
14
+ return encodeURIComponent(id);
15
+ }
16
+ function normalizeTop(value, fallback) {
17
+ if (value === undefined)
18
+ return fallback;
19
+ if (!Number.isInteger(value) || value < 1 || value > 500) {
20
+ throw new Error("top must be an integer between 1 and 500");
21
+ }
22
+ return value;
23
+ }
24
+ function contactCollectionPath(location) {
25
+ if (location.parentFolderId && !location.folderId) {
26
+ throw new Error("folderId is required when parentFolderId is provided");
27
+ }
28
+ if (location.parentFolderId && location.folderId) {
29
+ return `/me/contactFolders/${encodeId(location.parentFolderId)}/childFolders/${encodeId(location.folderId)}/contacts`;
30
+ }
31
+ if (location.folderId) {
32
+ return `/me/contactFolders/${encodeId(location.folderId)}/contacts`;
33
+ }
34
+ return "/me/contacts";
35
+ }
36
+ function contactResourcePath(location, contactId) {
37
+ return `${contactCollectionPath(location)}/${encodeId(contactId)}`;
38
+ }
39
+ function folderResourcePath(folderId, parentFolderId) {
40
+ if (parentFolderId) {
41
+ return `/me/contactFolders/${encodeId(parentFolderId)}/childFolders/${encodeId(folderId)}`;
42
+ }
43
+ return `/me/contactFolders/${encodeId(folderId)}`;
44
+ }
45
+ function buildContactPayload(args) {
46
+ const payload = {};
47
+ for (const field of CONTACT_STRING_FIELDS) {
48
+ if (args[field] !== undefined)
49
+ payload[field] = args[field];
50
+ }
51
+ for (const field of CONTACT_ARRAY_FIELDS) {
52
+ if (args[field] !== undefined)
53
+ payload[field] = args[field];
54
+ }
55
+ if (args.emailAddresses !== undefined) {
56
+ payload.emailAddresses = args.emailAddresses;
57
+ }
58
+ else if (args.email !== undefined) {
59
+ const name = [args.givenName, args.surname].filter(Boolean).join(" ");
60
+ payload.emailAddresses = [{ address: args.email, ...(name ? { name } : {}) }];
61
+ }
62
+ if (args.businessPhones !== undefined) {
63
+ payload.businessPhones = args.businessPhones;
64
+ }
65
+ else if (args.businessPhone !== undefined) {
66
+ payload.businessPhones = args.businessPhone ? [args.businessPhone] : [];
67
+ }
68
+ if (args.companyName !== undefined) {
69
+ payload.companyName = args.companyName;
70
+ }
71
+ else if (args.company !== undefined) {
72
+ payload.companyName = args.company;
73
+ }
74
+ if (args.personalNotes !== undefined) {
75
+ payload.personalNotes = args.personalNotes;
76
+ }
77
+ else if (args.notes !== undefined) {
78
+ payload.personalNotes = args.notes;
79
+ }
80
+ for (const field of ["homeAddress", "businessAddress", "otherAddress"]) {
81
+ if (args[field] !== undefined)
82
+ payload[field] = args[field];
83
+ }
84
+ return payload;
85
+ }
86
+ function summarizeContact(contact) {
87
+ return {
88
+ id: contact.id,
89
+ name: contact.displayName,
90
+ emails: contact.emailAddresses ?? [],
91
+ company: contact.companyName,
92
+ jobTitle: contact.jobTitle,
93
+ businessPhones: contact.businessPhones ?? [],
94
+ mobilePhone: contact.mobilePhone,
95
+ categories: contact.categories ?? [],
96
+ parentFolderId: contact.parentFolderId,
97
+ };
98
+ }
99
+ async function getContacts(client, path, top, category) {
100
+ if (!category)
101
+ return client.getAll(path, 10, top);
102
+ const matches = [];
103
+ const wanted = category.toLocaleLowerCase();
104
+ for await (const page of client.paginate(path, 10)) {
105
+ for (const contact of page) {
106
+ if (contact.categories?.some((item) => item.toLocaleLowerCase() === wanted)) {
107
+ matches.push(contact);
108
+ if (matches.length === top)
109
+ return matches;
110
+ }
111
+ }
112
+ }
113
+ return matches;
114
+ }
4
115
  export function registerContactsTools(client) {
5
- const user = "/me";
6
116
  return {
7
117
  async contacts_list(args) {
8
- const top = args.top || 50;
9
- const folderPath = args.folderId
10
- ? `/contactFolders/${encodeURIComponent(args.folderId)}`
11
- : "";
12
- const path = `${user}${folderPath}/contacts?$top=${top}&$orderby=displayName`;
13
- const contacts = await client.getAll(path, 10, top);
14
- return JSON.stringify(contacts.map((c) => ({
15
- id: c.id,
16
- name: c.displayName,
17
- email: c.emailAddresses?.[0]?.address,
18
- company: c.companyName,
19
- jobTitle: c.jobTitle,
20
- phones: c.businessPhones,
21
- mobile: c.mobilePhone,
22
- })), null, 2);
118
+ const top = normalizeTop(args.top, 50);
119
+ const path = `${contactCollectionPath(args)}?$top=${Math.min(top, 100)}&$orderby=displayName`;
120
+ const contacts = await getContacts(client, path, top, args.category);
121
+ return JSON.stringify(contacts.map(summarizeContact), null, 2);
23
122
  },
24
123
  async contacts_search(args) {
25
- const top = args.top || 20;
26
- const path = `${user}/contacts?$search="${encodeURIComponent(args.query)}"&$top=${top}`;
27
- const contacts = await client.getAll(path, 10, top);
28
- return JSON.stringify(contacts.map((c) => ({
29
- id: c.id,
30
- name: c.displayName,
31
- email: c.emailAddresses?.map((e) => e.address).join(", "),
32
- company: c.companyName,
33
- jobTitle: c.jobTitle,
34
- })), null, 2);
124
+ const top = normalizeTop(args.top, 20);
125
+ const path = `${contactCollectionPath(args)}?$search=%22${encodeURIComponent(args.query)}%22&$top=${Math.min(top, 100)}`;
126
+ const contacts = await getContacts(client, path, top, args.category);
127
+ return JSON.stringify(contacts.map(summarizeContact), null, 2);
35
128
  },
36
129
  async contacts_read(args) {
37
- const contactId = encodeURIComponent(args.contactId);
38
- const c = await client.get(`${user}/contacts/${contactId}`);
39
- return JSON.stringify(c, null, 2);
130
+ const contact = await client.get(contactResourcePath(args, args.contactId));
131
+ return JSON.stringify(contact, null, 2);
40
132
  },
41
133
  async contacts_create(args) {
42
- const contact = {};
43
- if (args.givenName)
44
- contact.givenName = args.givenName;
45
- if (args.surname)
46
- contact.surname = args.surname;
47
- if (args.email) {
48
- contact.emailAddresses = [{ address: args.email, name: `${args.givenName || ""} ${args.surname || ""}`.trim() }];
49
- }
50
- if (args.company)
51
- contact.companyName = args.company;
52
- if (args.jobTitle)
53
- contact.jobTitle = args.jobTitle;
54
- if (args.mobilePhone)
55
- contact.mobilePhone = args.mobilePhone;
56
- if (args.businessPhone)
57
- contact.businessPhones = [args.businessPhone];
58
- if (args.notes)
59
- contact.personalNotes = args.notes;
60
- const data = await client.post(`${user}/contacts`, contact);
61
- return JSON.stringify({ id: data.id, displayName: data.displayName, success: true }, null, 2);
134
+ const contact = buildContactPayload(args);
135
+ if (Object.keys(contact).length === 0)
136
+ throw new Error("Provide at least one contact field");
137
+ const data = await client.post(contactCollectionPath(args), contact);
138
+ return JSON.stringify({ id: data.id, displayName: data.displayName, categories: data.categories ?? [], success: true }, null, 2);
62
139
  },
63
140
  async contacts_update(args) {
64
- const patch = {};
65
- if (args.givenName)
66
- patch.givenName = args.givenName;
67
- if (args.surname)
68
- patch.surname = args.surname;
69
- if (args.email)
70
- patch.emailAddresses = [{ address: args.email }];
71
- if (args.company)
72
- patch.companyName = args.company;
73
- if (args.jobTitle)
74
- patch.jobTitle = args.jobTitle;
75
- if (args.mobilePhone)
76
- patch.mobilePhone = args.mobilePhone;
77
- const contactId = encodeURIComponent(args.contactId);
78
- await client.patch(`${user}/contacts/${contactId}`, patch);
141
+ const patch = buildContactPayload(args);
142
+ if (Object.keys(patch).length === 0)
143
+ throw new Error("Provide at least one contact field to update");
144
+ await client.patch(contactResourcePath(args, args.contactId), patch);
79
145
  return JSON.stringify({ success: true, contactId: args.contactId });
80
146
  },
81
147
  async contacts_delete(args) {
82
- const contactId = encodeURIComponent(args.contactId);
83
- await client.delete(`${user}/contacts/${contactId}`);
84
- return JSON.stringify({ success: true });
148
+ await client.delete(contactResourcePath(args, args.contactId));
149
+ return JSON.stringify({ success: true, contactId: args.contactId });
150
+ },
151
+ async contacts_folders_list(args = {}) {
152
+ const top = normalizeTop(args.top, 100);
153
+ const base = args.parentFolderId
154
+ ? `/me/contactFolders/${encodeId(args.parentFolderId)}/childFolders`
155
+ : "/me/contactFolders";
156
+ const folders = await client.getAll(`${base}?$top=${Math.min(top, 100)}&$orderby=displayName`, 10, top);
157
+ return JSON.stringify(folders, null, 2);
158
+ },
159
+ async contacts_folder_create(args) {
160
+ const path = `/me/contactFolders/${encodeId(args.parentFolderId)}/childFolders`;
161
+ const folder = await client.post(path, { displayName: args.displayName });
162
+ return JSON.stringify({ ...folder, success: true }, null, 2);
163
+ },
164
+ async contacts_folder_update(args) {
165
+ const patch = {};
166
+ if (args.displayName !== undefined)
167
+ patch.displayName = args.displayName;
168
+ if (args.moveToParentFolderId !== undefined)
169
+ patch.parentFolderId = args.moveToParentFolderId;
170
+ if (Object.keys(patch).length === 0)
171
+ throw new Error("Provide displayName or moveToParentFolderId");
172
+ const folder = await client.patch(folderResourcePath(args.folderId, args.parentFolderId), patch);
173
+ return JSON.stringify({ ...folder, success: true }, null, 2);
174
+ },
175
+ async contacts_folder_delete(args) {
176
+ await client.delete(folderResourcePath(args.folderId, args.parentFolderId));
177
+ return JSON.stringify({ success: true, folderId: args.folderId });
85
178
  },
86
179
  };
87
180
  }
181
+ const locationProperties = {
182
+ folderId: { type: "string", description: "Optional contact folder ID; omit for the default Contacts folder" },
183
+ parentFolderId: { type: "string", description: "Parent folder ID when folderId identifies a direct child folder" },
184
+ };
185
+ const addressSchema = {
186
+ type: "object",
187
+ additionalProperties: false,
188
+ properties: {
189
+ street: { type: "string" }, city: { type: "string" }, state: { type: "string" },
190
+ countryOrRegion: { type: "string" }, postalCode: { type: "string" }, postOfficeBox: { type: "string" },
191
+ },
192
+ };
193
+ const stringArraySchema = (description) => ({ type: "array", description, items: { type: "string" } });
194
+ const contactFieldProperties = {
195
+ givenName: { type: "string", description: "First name" },
196
+ middleName: { type: "string" }, surname: { type: "string", description: "Last name" },
197
+ title: { type: "string", description: "Courtesy title, such as Dr. or Ms." },
198
+ generation: { type: "string", description: "Name suffix, such as Jr." },
199
+ displayName: { type: "string" }, nickName: { type: "string" },
200
+ email: { type: "string", description: "Single-email convenience field" },
201
+ emailAddresses: {
202
+ type: "array", description: "Complete email list; an empty array clears all email addresses",
203
+ items: { type: "object", additionalProperties: false, properties: { name: { type: "string" }, address: { type: "string" } }, required: ["address"] },
204
+ },
205
+ mobilePhone: { type: "string" },
206
+ businessPhone: { type: "string", description: "Single-business-phone convenience field" },
207
+ businessPhones: stringArraySchema("Complete business phone list; empty clears it"),
208
+ homePhones: stringArraySchema("Complete home phone list; empty clears it"),
209
+ company: { type: "string", description: "Company-name convenience field" },
210
+ companyName: { type: "string" }, jobTitle: { type: "string" }, department: { type: "string" },
211
+ officeLocation: { type: "string" }, profession: { type: "string" }, businessHomePage: { type: "string" },
212
+ notes: { type: "string", description: "Personal-notes convenience field" }, personalNotes: { type: "string" },
213
+ birthday: { type: "string", description: "ISO 8601 date-time in UTC" }, spouseName: { type: "string" },
214
+ assistantName: { type: "string" }, manager: { type: "string" },
215
+ children: stringArraySchema("Children names; empty clears the list"),
216
+ categories: stringArraySchema("Outlook category names; empty removes all categories"),
217
+ imAddresses: stringArraySchema("Instant-messaging addresses; empty clears the list"),
218
+ fileAs: { type: "string" }, homeAddress: addressSchema, businessAddress: addressSchema, otherAddress: addressSchema,
219
+ };
88
220
  export const contactsToolSchemas = [
89
221
  {
90
222
  name: "m365_contacts_list",
91
- description: "List your contacts",
92
- inputSchema: {
93
- type: "object",
94
- properties: {
95
- top: { type: "number", description: "Max results", default: 50 },
96
- folderId: { type: "string", description: "Contact folder ID (optional)" },
97
- },
98
- },
223
+ description: "List contacts, optionally within a folder and filtered by exact category name",
224
+ inputSchema: { type: "object", properties: { top: { type: "number", minimum: 1, maximum: 500, default: 50 }, category: { type: "string", description: "Exact category name, case-insensitive" }, ...locationProperties } },
99
225
  },
100
226
  {
101
227
  name: "m365_contacts_search",
102
- description: "Search your contacts by name, email, or company",
103
- inputSchema: {
104
- type: "object",
105
- properties: {
106
- query: { type: "string", description: "Search query" },
107
- top: { type: "number", description: "Max results", default: 20 },
108
- },
109
- required: ["query"],
110
- },
228
+ description: "Search contacts by name, email, or company, optionally within a folder or category",
229
+ inputSchema: { type: "object", properties: { query: { type: "string" }, top: { type: "number", minimum: 1, maximum: 500, default: 20 }, category: { type: "string", description: "Exact category name, case-insensitive" }, ...locationProperties }, required: ["query"] },
111
230
  },
112
231
  {
113
- name: "m365_contacts_read",
114
- description: "Read a contact's full details",
115
- inputSchema: {
116
- type: "object",
117
- properties: {
118
- contactId: { type: "string", description: "Contact ID" },
119
- },
120
- required: ["contactId"],
121
- },
232
+ name: "m365_contacts_read", description: "Read a contact's full details",
233
+ inputSchema: { type: "object", properties: { contactId: { type: "string" }, ...locationProperties }, required: ["contactId"] },
122
234
  },
123
235
  {
124
236
  name: "m365_contacts_create",
125
- description: "Create a new contact",
126
- inputSchema: {
127
- type: "object",
128
- properties: {
129
- givenName: { type: "string", description: "First name" },
130
- surname: { type: "string", description: "Last name" },
131
- email: { type: "string", description: "Email address" },
132
- company: { type: "string", description: "Company name" },
133
- jobTitle: { type: "string", description: "Job title" },
134
- mobilePhone: { type: "string", description: "Mobile phone" },
135
- businessPhone: { type: "string", description: "Business phone" },
136
- notes: { type: "string", description: "Personal notes" },
137
- },
138
- },
237
+ description: "Create a contact with names, multiple emails and phones, categories, addresses, and work or personal details",
238
+ inputSchema: { type: "object", properties: { ...contactFieldProperties, ...locationProperties } },
139
239
  },
140
240
  {
141
241
  name: "m365_contacts_update",
142
- description: "Update an existing contact",
143
- inputSchema: {
144
- type: "object",
145
- properties: {
146
- contactId: { type: "string", description: "Contact ID" },
147
- givenName: { type: "string" },
148
- surname: { type: "string" },
149
- email: { type: "string" },
150
- company: { type: "string" },
151
- jobTitle: { type: "string" },
152
- mobilePhone: { type: "string" },
153
- },
154
- required: ["contactId"],
155
- },
242
+ description: "Update or clear contact fields; use empty strings or arrays to clear supported values",
243
+ inputSchema: { type: "object", properties: { contactId: { type: "string" }, ...contactFieldProperties, ...locationProperties }, required: ["contactId"] },
156
244
  },
157
245
  {
158
- name: "m365_contacts_delete",
159
- description: "Delete a contact",
160
- inputSchema: {
161
- type: "object",
162
- properties: {
163
- contactId: { type: "string", description: "Contact ID" },
164
- },
165
- required: ["contactId"],
166
- },
246
+ name: "m365_contacts_delete", description: "Move a contact to Deleted Items",
247
+ inputSchema: { type: "object", properties: { contactId: { type: "string" }, ...locationProperties }, required: ["contactId"] },
248
+ },
249
+ {
250
+ name: "m365_contacts_folders_list", description: "List top-level contact folders or the direct children of one folder",
251
+ inputSchema: { type: "object", properties: { parentFolderId: { type: "string" }, top: { type: "number", minimum: 1, maximum: 500, default: 100 } } },
252
+ },
253
+ {
254
+ name: "m365_contacts_folder_create", description: "Create a child contact folder under an existing contact folder",
255
+ inputSchema: { type: "object", properties: { parentFolderId: { type: "string" }, displayName: { type: "string" } }, required: ["parentFolderId", "displayName"] },
256
+ },
257
+ {
258
+ name: "m365_contacts_folder_update", description: "Rename or move a top-level or direct-child contact folder",
259
+ inputSchema: { type: "object", properties: { folderId: { type: "string" }, parentFolderId: { type: "string", description: "Current parent when this is a child folder" }, displayName: { type: "string" }, moveToParentFolderId: { type: "string", description: "New parent folder ID" } }, required: ["folderId"] },
260
+ },
261
+ {
262
+ name: "m365_contacts_folder_delete", description: "Delete a non-default top-level or direct-child contact folder",
263
+ inputSchema: { type: "object", properties: { folderId: { type: "string" }, parentFolderId: { type: "string", description: "Current parent when this is a child folder" } }, required: ["folderId"] },
167
264
  },
168
265
  ];
169
266
  //# sourceMappingURL=contacts.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"contacts.js","sourceRoot":"","sources":["../../src/tools/contacts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"contacts.js","sourceRoot":"","sources":["../../src/tools/contacts.ts"],"names":[],"mappings":"AAAA;;GAEG;AAkEH,MAAM,qBAAqB,GAAG;IAC5B,WAAW,EAAE,YAAY,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,EAAE,aAAa;IAC1E,UAAU,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,gBAAgB;IACrE,YAAY,EAAE,kBAAkB,EAAE,UAAU,EAAE,YAAY,EAAE,eAAe;IAC3E,SAAS,EAAE,QAAQ;CACX,CAAC;AAEX,MAAM,oBAAoB,GAAG;IAC3B,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa;CAC7C,CAAC;AAEX,SAAS,QAAQ,CAAC,EAAU;IAC1B,OAAO,kBAAkB,CAAC,EAAE,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,YAAY,CAAC,KAAyB,EAAE,QAAgB;IAC/D,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC;IACzC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,GAAG,EAAE,CAAC;QACzD,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC9D,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,qBAAqB,CAAC,QAAyB;IACtD,IAAI,QAAQ,CAAC,cAAc,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;QAClD,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;IAC1E,CAAC;IACD,IAAI,QAAQ,CAAC,cAAc,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;QACjD,OAAO,sBAAsB,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,iBAAiB,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC;IACxH,CAAC;IACD,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;QACtB,OAAO,sBAAsB,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC;IACtE,CAAC;IACD,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,SAAS,mBAAmB,CAAC,QAAyB,EAAE,SAAiB;IACvE,OAAO,GAAG,qBAAqB,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;AACrE,CAAC;AAED,SAAS,kBAAkB,CAAC,QAAgB,EAAE,cAAuB;IACnE,IAAI,cAAc,EAAE,CAAC;QACnB,OAAO,sBAAsB,QAAQ,CAAC,cAAc,CAAC,iBAAiB,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;IAC7F,CAAC;IACD,OAAO,sBAAsB,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;AACpD,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAkB;IAC7C,MAAM,OAAO,GAA4B,EAAE,CAAC;IAE5C,KAAK,MAAM,KAAK,IAAI,qBAAqB,EAAE,CAAC;QAC1C,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,SAAS;YAAE,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;IAC9D,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,oBAAoB,EAAE,CAAC;QACzC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,SAAS;YAAE,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;IAC9D,CAAC;IAED,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;QACtC,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;IAC/C,CAAC;SAAM,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACtE,OAAO,CAAC,cAAc,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAChF,CAAC;IAED,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;QACtC,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;IAC/C,CAAC;SAAM,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;QAC5C,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1E,CAAC;IAED,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;QACnC,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;IACzC,CAAC;SAAM,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QACtC,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC;IACrC,CAAC;IAED,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;QACrC,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;IAC7C,CAAC;SAAM,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QACpC,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC;IACrC,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,CAAC,aAAa,EAAE,iBAAiB,EAAE,cAAc,CAAU,EAAE,CAAC;QAChF,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,SAAS;YAAE,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;IAC9D,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAgB;IACxC,OAAO;QACL,EAAE,EAAE,OAAO,CAAC,EAAE;QACd,IAAI,EAAE,OAAO,CAAC,WAAW;QACzB,MAAM,EAAE,OAAO,CAAC,cAAc,IAAI,EAAE;QACpC,OAAO,EAAE,OAAO,CAAC,WAAW;QAC5B,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,EAAE;QAC5C,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,EAAE;QACpC,cAAc,EAAE,OAAO,CAAC,cAAc;KACvC,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,WAAW,CACxB,MAAmB,EACnB,IAAY,EACZ,GAAW,EACX,QAAiB;IAEjB,IAAI,CAAC,QAAQ;QAAE,OAAO,MAAM,CAAC,MAAM,CAAU,IAAI,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;IAE5D,MAAM,OAAO,GAAc,EAAE,CAAC;IAC9B,MAAM,MAAM,GAAG,QAAQ,CAAC,iBAAiB,EAAE,CAAC;IAC5C,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAU,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC;QAC5D,KAAK,MAAM,OAAO,IAAI,IAAI,EAAE,CAAC;YAC3B,IAAI,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,iBAAiB,EAAE,KAAK,MAAM,CAAC,EAAE,CAAC;gBAC5E,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACtB,IAAI,OAAO,CAAC,MAAM,KAAK,GAAG;oBAAE,OAAO,OAAO,CAAC;YAC7C,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,MAAmB;IACvD,OAAO;QACL,KAAK,CAAC,aAAa,CAAC,IAA2D;YAC7E,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YACvC,MAAM,IAAI,GAAG,GAAG,qBAAqB,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,uBAAuB,CAAC;YAC9F,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YACrE,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACjE,CAAC;QAED,KAAK,CAAC,eAAe,CAAC,IAA0E;YAC9F,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YACvC,MAAM,IAAI,GAAG,GAAG,qBAAqB,CAAC,IAAI,CAAC,eAAe,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;YACzH,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YACrE,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACjE,CAAC;QAED,KAAK,CAAC,aAAa,CAAC,IAA6C;YAC/D,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,GAAG,CAAU,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;YACrF,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAC1C,CAAC;QAED,KAAK,CAAC,eAAe,CAAC,IAAkB;YACtC,MAAM,OAAO,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;YAC1C,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;YAC7F,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,CAAU,qBAAqB,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;YAC9E,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACnI,CAAC;QAED,KAAK,CAAC,eAAe,CAAC,IAAwB;YAC5C,MAAM,KAAK,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;YACxC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;YACrG,MAAM,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC,CAAC;YACrE,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;QACtE,CAAC;QAED,KAAK,CAAC,eAAe,CAAC,IAA6C;YACjE,MAAM,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;YAC/D,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;QACtE,CAAC;QAED,KAAK,CAAC,qBAAqB,CAAC,OAAkD,EAAE;YAC9E,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACxC,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc;gBAC9B,CAAC,CAAC,sBAAsB,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,eAAe;gBACpE,CAAC,CAAC,oBAAoB,CAAC;YACzB,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,MAAM,CAAgB,GAAG,IAAI,SAAS,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,uBAAuB,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;YACvH,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAC1C,CAAC;QAED,KAAK,CAAC,sBAAsB,CAAC,IAAqD;YAChF,MAAM,IAAI,GAAG,sBAAsB,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC;YAChF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAgB,IAAI,EAAE,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;YACzF,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAC/D,CAAC;QAED,KAAK,CAAC,sBAAsB,CAAC,IAAwG;YACnI,MAAM,KAAK,GAA2B,EAAE,CAAC;YACzC,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS;gBAAE,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;YACzE,IAAI,IAAI,CAAC,oBAAoB,KAAK,SAAS;gBAAE,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC,oBAAoB,CAAC;YAC9F,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;YACpG,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAgB,kBAAkB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,cAAc,CAAC,EAAE,KAAK,CAAC,CAAC;YAChH,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAC/D,CAAC;QAED,KAAK,CAAC,sBAAsB,CAAC,IAAmD;YAC9E,MAAM,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;YAC5E,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QACpE,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,kBAAkB,GAAG;IACzB,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,kEAAkE,EAAE;IAC7G,cAAc,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,iEAAiE,EAAE;CACnH,CAAC;AAEF,MAAM,aAAa,GAAG;IACpB,IAAI,EAAE,QAAQ;IACd,oBAAoB,EAAE,KAAK;IAC3B,UAAU,EAAE;QACV,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QAC/E,eAAe,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,aAAa,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;KACvG;CACF,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,WAAmB,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;AAE/G,MAAM,sBAAsB,GAAG;IAC7B,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE;IACxD,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE;IACrF,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,oCAAoC,EAAE;IAC5E,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,0BAA0B,EAAE;IACvE,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;IAC7D,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,gCAAgC,EAAE;IACxE,cAAc,EAAE;QACd,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,gEAAgE;QAC5F,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,oBAAoB,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,SAAS,CAAC,EAAE;KACrJ;IACD,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;IAC/B,aAAa,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,yCAAyC,EAAE;IACzF,cAAc,EAAE,iBAAiB,CAAC,+CAA+C,CAAC;IAClF,UAAU,EAAE,iBAAiB,CAAC,2CAA2C,CAAC;IAC1E,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,gCAAgC,EAAE;IAC1E,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;IAC7F,cAAc,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,gBAAgB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;IACxG,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,kCAAkC,EAAE,EAAE,aAAa,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;IAC7G,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,2BAA2B,EAAE,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;IACtG,aAAa,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;IAC9D,QAAQ,EAAE,iBAAiB,CAAC,uCAAuC,CAAC;IACpE,UAAU,EAAE,iBAAiB,CAAC,sDAAsD,CAAC;IACrF,WAAW,EAAE,iBAAiB,CAAC,oDAAoD,CAAC;IACpF,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,WAAW,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,YAAY,EAAE,aAAa;CACpH,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC;QACE,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EAAE,+EAA+E;QAC5F,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,uCAAuC,EAAE,EAAE,GAAG,kBAAkB,EAAE,EAAE;KAC3N;IACD;QACE,IAAI,EAAE,sBAAsB;QAC5B,WAAW,EAAE,oFAAoF;QACjG,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,uCAAuC,EAAE,EAAE,GAAG,kBAAkB,EAAE,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE;KAC3Q;IACD;QACE,IAAI,EAAE,oBAAoB,EAAE,WAAW,EAAE,+BAA+B;QACxE,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,GAAG,kBAAkB,EAAE,EAAE,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE;KAC/H;IACD;QACE,IAAI,EAAE,sBAAsB;QAC5B,WAAW,EAAE,8GAA8G;QAC3H,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,GAAG,sBAAsB,EAAE,GAAG,kBAAkB,EAAE,EAAE;KAClG;IACD;QACE,IAAI,EAAE,sBAAsB;QAC5B,WAAW,EAAE,uFAAuF;QACpG,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,GAAG,sBAAsB,EAAE,GAAG,kBAAkB,EAAE,EAAE,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE;KAC1J;IACD;QACE,IAAI,EAAE,sBAAsB,EAAE,WAAW,EAAE,iCAAiC;QAC5E,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,GAAG,kBAAkB,EAAE,EAAE,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE;KAC/H;IACD;QACE,IAAI,EAAE,4BAA4B,EAAE,WAAW,EAAE,qEAAqE;QACtH,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,cAAc,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE;KACrJ;IACD;QACE,IAAI,EAAE,6BAA6B,EAAE,WAAW,EAAE,gEAAgE;QAClH,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,cAAc,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,gBAAgB,EAAE,aAAa,CAAC,EAAE;KAClK;IACD;QACE,IAAI,EAAE,6BAA6B,EAAE,WAAW,EAAE,2DAA2D;QAC7G,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,cAAc,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,4CAA4C,EAAE,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,oBAAoB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,sBAAsB,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,UAAU,CAAC,EAAE;KACrT;IACD;QACE,IAAI,EAAE,6BAA6B,EAAE,WAAW,EAAE,+DAA+D;QACjH,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,cAAc,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,4CAA4C,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,UAAU,CAAC,EAAE;KACrM;CACF,CAAC"}
package/dist/types.d.ts CHANGED
@@ -120,6 +120,8 @@ export interface Contact {
120
120
  homeAddress?: any;
121
121
  businessAddress?: any;
122
122
  personalNotes?: string;
123
+ categories?: string[];
124
+ parentFolderId?: string;
123
125
  }
124
126
  export interface DriveItem {
125
127
  id: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sam2kb/m365-mcp",
3
- "version": "1.0.4",
3
+ "version": "1.0.5",
4
4
  "description": "Production-grade Microsoft 365 MCP server — email, calendar, contacts, OneDrive, Teams, tasks, and users via delegated OAuth",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",