@blickwerk/n8n-nodes-microsoft-planner 1.4.0 → 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 (42) hide show
  1. package/LICENSE.md +1 -1
  2. package/README.md +233 -30
  3. package/dist/credentials/MicrosoftPlannerOAuth2Api.credentials.d.ts +2 -2
  4. package/dist/credentials/MicrosoftPlannerOAuth2Api.credentials.js +11 -29
  5. package/dist/credentials/MicrosoftPlannerOAuth2Api.credentials.js.map +1 -0
  6. package/dist/nodes/MicrosoftPlanner/BucketDescription.d.ts +3 -0
  7. package/dist/nodes/MicrosoftPlanner/BucketDescription.js +180 -0
  8. package/dist/nodes/MicrosoftPlanner/BucketDescription.js.map +1 -0
  9. package/dist/nodes/MicrosoftPlanner/CommentDescription.d.ts +3 -0
  10. package/dist/nodes/MicrosoftPlanner/CommentDescription.js +156 -0
  11. package/dist/nodes/MicrosoftPlanner/CommentDescription.js.map +1 -0
  12. package/dist/nodes/MicrosoftPlanner/GenericFunctions.d.ts +19 -6
  13. package/dist/nodes/MicrosoftPlanner/GenericFunctions.js +251 -34
  14. package/dist/nodes/MicrosoftPlanner/GenericFunctions.js.map +1 -0
  15. package/dist/nodes/MicrosoftPlanner/MicrosoftPlanner.node.d.ts +6 -7
  16. package/dist/nodes/MicrosoftPlanner/MicrosoftPlanner.node.js +118 -279
  17. package/dist/nodes/MicrosoftPlanner/MicrosoftPlanner.node.js.map +1 -0
  18. package/dist/nodes/MicrosoftPlanner/MicrosoftPlanner.node.json +18 -0
  19. package/dist/nodes/MicrosoftPlanner/PlanDescription.d.ts +3 -0
  20. package/dist/nodes/MicrosoftPlanner/PlanDescription.js +435 -0
  21. package/dist/nodes/MicrosoftPlanner/PlanDescription.js.map +1 -0
  22. package/dist/nodes/MicrosoftPlanner/SharedFields.d.ts +10 -0
  23. package/dist/nodes/MicrosoftPlanner/SharedFields.js +316 -0
  24. package/dist/nodes/MicrosoftPlanner/SharedFields.js.map +1 -0
  25. package/dist/nodes/MicrosoftPlanner/TaskDescription.d.ts +1 -1
  26. package/dist/nodes/MicrosoftPlanner/TaskDescription.js +271 -177
  27. package/dist/nodes/MicrosoftPlanner/TaskDescription.js.map +1 -0
  28. package/dist/nodes/MicrosoftPlanner/actions/bucket.d.ts +2 -0
  29. package/dist/nodes/MicrosoftPlanner/actions/bucket.js +72 -0
  30. package/dist/nodes/MicrosoftPlanner/actions/bucket.js.map +1 -0
  31. package/dist/nodes/MicrosoftPlanner/actions/comment.d.ts +2 -0
  32. package/dist/nodes/MicrosoftPlanner/actions/comment.js +100 -0
  33. package/dist/nodes/MicrosoftPlanner/actions/comment.js.map +1 -0
  34. package/dist/nodes/MicrosoftPlanner/actions/plan.d.ts +4 -0
  35. package/dist/nodes/MicrosoftPlanner/actions/plan.js +116 -0
  36. package/dist/nodes/MicrosoftPlanner/actions/plan.js.map +1 -0
  37. package/dist/nodes/MicrosoftPlanner/actions/task.d.ts +4 -0
  38. package/dist/nodes/MicrosoftPlanner/actions/task.js +392 -0
  39. package/dist/nodes/MicrosoftPlanner/actions/task.js.map +1 -0
  40. package/dist/package.json +60 -0
  41. package/dist/tsconfig.tsbuildinfo +1 -0
  42. package/package.json +22 -20
@@ -0,0 +1,156 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.commentFields = exports.commentOperations = void 0;
4
+ exports.commentOperations = [
5
+ {
6
+ displayName: 'Operation',
7
+ name: 'operation',
8
+ type: 'options',
9
+ noDataExpression: true,
10
+ displayOptions: {
11
+ show: {
12
+ resource: ['comment'],
13
+ },
14
+ },
15
+ options: [
16
+ {
17
+ name: 'Create',
18
+ value: 'create',
19
+ description: 'Create a new comment on a task',
20
+ action: 'Create a comment',
21
+ },
22
+ {
23
+ name: 'Get Many',
24
+ value: 'getAll',
25
+ description: 'Get many comments from a task',
26
+ action: 'Get many comments',
27
+ },
28
+ ],
29
+ default: 'create',
30
+ },
31
+ ];
32
+ exports.commentFields = [
33
+ {
34
+ displayName: 'Task',
35
+ name: 'taskId',
36
+ type: 'resourceLocator',
37
+ default: { mode: 'id', value: '' },
38
+ required: true,
39
+ displayOptions: {
40
+ show: {
41
+ resource: ['comment'],
42
+ operation: ['create'],
43
+ },
44
+ },
45
+ modes: [
46
+ {
47
+ displayName: 'By ID',
48
+ name: 'id',
49
+ type: 'string',
50
+ placeholder: 'e.g. rz1EH6N_a0aLpRm-2QifxZgAF5OL',
51
+ },
52
+ ],
53
+ description: 'The task to comment on',
54
+ },
55
+ {
56
+ displayName: 'Content',
57
+ name: 'content',
58
+ type: 'string',
59
+ typeOptions: {
60
+ rows: 5,
61
+ },
62
+ required: true,
63
+ displayOptions: {
64
+ show: {
65
+ resource: ['comment'],
66
+ operation: ['create'],
67
+ },
68
+ },
69
+ default: '',
70
+ description: 'The content of the comment',
71
+ },
72
+ {
73
+ displayName: 'Additional Fields',
74
+ name: 'additionalFields',
75
+ type: 'collection',
76
+ placeholder: 'Add Field',
77
+ default: {},
78
+ displayOptions: {
79
+ show: {
80
+ resource: ['comment'],
81
+ operation: ['create'],
82
+ },
83
+ },
84
+ options: [
85
+ {
86
+ displayName: 'Content Type',
87
+ name: 'contentType',
88
+ type: 'options',
89
+ options: [
90
+ {
91
+ name: 'HTML',
92
+ value: 'html',
93
+ },
94
+ {
95
+ name: 'Text',
96
+ value: 'text',
97
+ },
98
+ ],
99
+ default: 'text',
100
+ description: 'The format of the comment content',
101
+ },
102
+ ],
103
+ },
104
+ {
105
+ displayName: 'Task',
106
+ name: 'taskId',
107
+ type: 'resourceLocator',
108
+ default: { mode: 'id', value: '' },
109
+ required: true,
110
+ displayOptions: {
111
+ show: {
112
+ resource: ['comment'],
113
+ operation: ['getAll'],
114
+ },
115
+ },
116
+ modes: [
117
+ {
118
+ displayName: 'By ID',
119
+ name: 'id',
120
+ type: 'string',
121
+ placeholder: 'e.g. rz1EH6N_a0aLpRm-2QifxZgAF5OL',
122
+ },
123
+ ],
124
+ description: 'The task to get comments from',
125
+ },
126
+ {
127
+ displayName: 'Additional Fields',
128
+ name: 'additionalFields',
129
+ type: 'collection',
130
+ placeholder: 'Add Field',
131
+ default: {},
132
+ displayOptions: {
133
+ show: {
134
+ resource: ['comment'],
135
+ operation: ['getAll'],
136
+ },
137
+ },
138
+ options: [
139
+ {
140
+ displayName: 'Select Properties',
141
+ name: 'select',
142
+ type: 'string',
143
+ default: '',
144
+ description: 'Comma-separated list of post properties to request (e.g. body,from,createdDateTime). The ID is always returned.',
145
+ },
146
+ {
147
+ displayName: 'Split Into Items',
148
+ name: 'splitIntoItems',
149
+ type: 'boolean',
150
+ default: false,
151
+ description: 'Whether to output one item per comment instead of one item containing all comments',
152
+ },
153
+ ],
154
+ },
155
+ ];
156
+ //# sourceMappingURL=CommentDescription.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommentDescription.js","sourceRoot":"","sources":["../../../nodes/MicrosoftPlanner/CommentDescription.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,21 @@
1
- import { IDataObject, IExecuteFunctions, IHookFunctions, IHttpRequestMethods, ILoadOptionsFunctions } from 'n8n-workflow';
2
- export declare function microsoftApiRequest(this: IHookFunctions | IExecuteFunctions | ILoadOptionsFunctions, method: IHttpRequestMethods, resource: string, body?: IDataObject, qs?: IDataObject, uri?: string, headers?: IDataObject): Promise<any>;
3
- export declare function microsoftApiRequestAllItems(this: IHookFunctions | IExecuteFunctions | ILoadOptionsFunctions, propertyName: string, method: IHttpRequestMethods, endpoint: string, body?: IDataObject, query?: IDataObject): Promise<any>;
1
+ import type { IDataObject, IExecuteFunctions, IHookFunctions, IHttpRequestMethods, ILoadOptionsFunctions } from 'n8n-workflow';
2
+ export type PlannerContext = IExecuteFunctions | ILoadOptionsFunctions | IHookFunctions;
3
+ export declare const GRAPH_BASE_URL = "https://graph.microsoft.com/v1.0";
4
+ export declare function microsoftApiRequest(this: PlannerContext, method: IHttpRequestMethods, resource: string, body?: IDataObject, qs?: IDataObject, uri?: string, headers?: IDataObject): Promise<any>;
5
+ export declare function microsoftApiRequestAllItems(this: PlannerContext, propertyName: string, method: IHttpRequestMethods, endpoint: string, body?: IDataObject, query?: IDataObject): Promise<IDataObject[]>;
4
6
  export declare function cleanETag(eTag: string): string;
5
- export declare function formatDateTime(dateTime: string | undefined): string | undefined;
6
- export declare function getUserIdByEmail(this: IHookFunctions | IExecuteFunctions | ILoadOptionsFunctions, email: string): Promise<string | null>;
7
- export declare function parseAssignments(assignmentsString: string): string[];
7
+ export declare function patchWithETag(this: PlannerContext, endpoint: string, buildBody: (current: IDataObject) => IDataObject | Promise<IDataObject>): Promise<IDataObject>;
8
+ export declare function deleteWithETag(this: PlannerContext, endpoint: string): Promise<void>;
9
+ export declare function formatDateTime(dateTime: unknown): string | undefined;
10
+ export declare function getUserIdByEmail(this: PlannerContext, email: string, cache?: Map<string, string>): Promise<string>;
11
+ export declare function resolveUserIds(this: PlannerContext, input: unknown, cache?: Map<string, string>): Promise<string[]>;
12
+ export declare function parseList(value: unknown): string[];
13
+ export declare function parseAssignments(assignments: string | string[]): string[];
8
14
  export declare function createAssignmentsObject(userIds: string[]): IDataObject;
15
+ export declare function encodeReferenceKey(url: string): string;
16
+ export declare function decodeReferenceKey(key: string): string;
17
+ export declare function generateGuid(): string;
18
+ export declare function formatCommentContent(content: string, contentType?: string): IDataObject;
19
+ export declare function parseJson<T>(this: PlannerContext, value: unknown, fieldName: string, itemIndex: number): T;
20
+ export declare const CATEGORY_COLORS: Record<string, string>;
21
+ export declare function getPlanGroupId(this: PlannerContext, planId: string): Promise<string>;
@@ -1,32 +1,45 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CATEGORY_COLORS = exports.GRAPH_BASE_URL = void 0;
3
4
  exports.microsoftApiRequest = microsoftApiRequest;
4
5
  exports.microsoftApiRequestAllItems = microsoftApiRequestAllItems;
5
6
  exports.cleanETag = cleanETag;
7
+ exports.patchWithETag = patchWithETag;
8
+ exports.deleteWithETag = deleteWithETag;
6
9
  exports.formatDateTime = formatDateTime;
7
10
  exports.getUserIdByEmail = getUserIdByEmail;
11
+ exports.resolveUserIds = resolveUserIds;
12
+ exports.parseList = parseList;
8
13
  exports.parseAssignments = parseAssignments;
9
14
  exports.createAssignmentsObject = createAssignmentsObject;
15
+ exports.encodeReferenceKey = encodeReferenceKey;
16
+ exports.decodeReferenceKey = decodeReferenceKey;
17
+ exports.generateGuid = generateGuid;
18
+ exports.formatCommentContent = formatCommentContent;
19
+ exports.parseJson = parseJson;
20
+ exports.getPlanGroupId = getPlanGroupId;
10
21
  const n8n_workflow_1 = require("n8n-workflow");
22
+ exports.GRAPH_BASE_URL = 'https://graph.microsoft.com/v1.0';
23
+ const CREDENTIAL_NAME = 'microsoftPlannerOAuth2Api';
24
+ const MAX_ETAG_ATTEMPTS = 3;
11
25
  async function microsoftApiRequest(method, resource, body = {}, qs = {}, uri, headers = {}) {
12
26
  const options = {
27
+ method,
28
+ url: uri !== null && uri !== void 0 ? uri : `${exports.GRAPH_BASE_URL}${resource}`,
29
+ json: true,
13
30
  headers: {
14
31
  'Content-Type': 'application/json',
32
+ ...headers,
15
33
  },
16
- method,
17
- body,
18
- qs,
19
- url: uri || `https://graph.microsoft.com/v1.0${resource}`,
20
- json: true,
21
34
  };
35
+ if (Object.keys(body).length !== 0) {
36
+ options.body = body;
37
+ }
38
+ if (Object.keys(qs).length !== 0) {
39
+ options.qs = qs;
40
+ }
22
41
  try {
23
- if (Object.keys(headers).length !== 0) {
24
- options.headers = Object.assign({}, options.headers, headers);
25
- }
26
- if (Object.keys(body).length === 0) {
27
- delete options.body;
28
- }
29
- return await this.helpers.requestOAuth2.call(this, 'microsoftPlannerOAuth2Api', options);
42
+ return await this.helpers.httpRequestWithAuthentication.call(this, CREDENTIAL_NAME, options);
30
43
  }
31
44
  catch (error) {
32
45
  throw new n8n_workflow_1.NodeApiError(this.getNode(), error);
@@ -37,10 +50,14 @@ async function microsoftApiRequestAllItems(propertyName, method, endpoint, body
37
50
  let responseData;
38
51
  let uri;
39
52
  do {
40
- responseData = await microsoftApiRequest.call(this, method, endpoint, body, query, uri);
53
+ const activeQuery = uri ? {} : query;
54
+ responseData = await microsoftApiRequest.call(this, method, endpoint, body, activeQuery, uri);
41
55
  uri = responseData['@odata.nextLink'];
42
- returnData.push.apply(returnData, responseData[propertyName]);
43
- } while (responseData['@odata.nextLink'] !== undefined);
56
+ const page = responseData[propertyName];
57
+ if (Array.isArray(page)) {
58
+ returnData.push(...page);
59
+ }
60
+ } while (uri !== undefined);
44
61
  return returnData;
45
62
  }
46
63
  function cleanETag(eTag) {
@@ -49,40 +66,149 @@ function cleanETag(eTag) {
49
66
  }
50
67
  return eTag;
51
68
  }
69
+ function isPreconditionFailed(error) {
70
+ const httpCode = error === null || error === void 0 ? void 0 : error.httpCode;
71
+ return httpCode === '412';
72
+ }
73
+ async function patchWithETag(endpoint, buildBody) {
74
+ for (let attempt = 1;; attempt++) {
75
+ const current = (await microsoftApiRequest.call(this, 'GET', endpoint));
76
+ const body = await buildBody(current);
77
+ if (Object.keys(body).length === 0) {
78
+ return current;
79
+ }
80
+ try {
81
+ const response = (await microsoftApiRequest.call(this, 'PATCH', endpoint, body, {}, undefined, {
82
+ 'If-Match': cleanETag(current['@odata.etag']),
83
+ Prefer: 'return=representation',
84
+ }));
85
+ if (response && typeof response === 'object' && Object.keys(response).length > 0) {
86
+ return response;
87
+ }
88
+ return (await microsoftApiRequest.call(this, 'GET', endpoint));
89
+ }
90
+ catch (error) {
91
+ if (attempt < MAX_ETAG_ATTEMPTS && isPreconditionFailed(error)) {
92
+ continue;
93
+ }
94
+ throw new n8n_workflow_1.NodeApiError(this.getNode(), error);
95
+ }
96
+ }
97
+ }
98
+ async function deleteWithETag(endpoint) {
99
+ for (let attempt = 1;; attempt++) {
100
+ const current = (await microsoftApiRequest.call(this, 'GET', endpoint));
101
+ try {
102
+ await microsoftApiRequest.call(this, 'DELETE', endpoint, {}, {}, undefined, {
103
+ 'If-Match': cleanETag(current['@odata.etag']),
104
+ });
105
+ return;
106
+ }
107
+ catch (error) {
108
+ if (attempt < MAX_ETAG_ATTEMPTS && isPreconditionFailed(error)) {
109
+ continue;
110
+ }
111
+ throw new n8n_workflow_1.NodeApiError(this.getNode(), error);
112
+ }
113
+ }
114
+ }
52
115
  function formatDateTime(dateTime) {
53
- if (!dateTime) {
116
+ var _a;
117
+ if (dateTime === undefined || dateTime === null || dateTime === '') {
118
+ return undefined;
119
+ }
120
+ if (dateTime instanceof Date) {
121
+ return isNaN(dateTime.getTime()) ? undefined : dateTime.toISOString();
122
+ }
123
+ if (typeof dateTime === 'object') {
124
+ const luxonLike = dateTime;
125
+ if (typeof luxonLike.toISO === 'function') {
126
+ const utc = (typeof luxonLike.toUTC === 'function' ? luxonLike.toUTC() : luxonLike);
127
+ return (_a = utc.toISO()) !== null && _a !== void 0 ? _a : undefined;
128
+ }
129
+ return undefined;
130
+ }
131
+ if (typeof dateTime === 'number') {
132
+ const date = new Date(dateTime);
133
+ return isNaN(date.getTime()) ? undefined : date.toISOString();
134
+ }
135
+ if (typeof dateTime !== 'string') {
54
136
  return undefined;
55
137
  }
56
- // If already in ISO format with timezone, return as is
57
- if (dateTime.includes('T') && (dateTime.endsWith('Z') || dateTime.includes('+'))) {
58
- return dateTime;
138
+ const value = dateTime.trim();
139
+ if (/T.*(Z|[+-]\d{2}:?\d{2})$/i.test(value)) {
140
+ return value;
59
141
  }
60
- // Convert to ISO 8601 format with UTC timezone
61
- const date = new Date(dateTime);
142
+ const date = new Date(value);
62
143
  if (isNaN(date.getTime())) {
63
144
  return undefined;
64
145
  }
65
146
  return date.toISOString();
66
147
  }
67
- async function getUserIdByEmail(email) {
148
+ const UUID_REGEX = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
149
+ async function getUserIdByEmail(email, cache) {
150
+ var _a, _b;
151
+ const value = email.trim();
152
+ if (UUID_REGEX.test(value)) {
153
+ return value;
154
+ }
155
+ const cacheKey = value.toLowerCase();
156
+ const cached = cache === null || cache === void 0 ? void 0 : cache.get(cacheKey);
157
+ if (cached) {
158
+ return cached;
159
+ }
160
+ let userId;
68
161
  try {
69
- const response = await microsoftApiRequest.call(this, 'GET', `/users/${encodeURIComponent(email)}`);
70
- return response.id;
162
+ const response = await microsoftApiRequest.call(this, 'GET', `/users/${encodeURIComponent(value)}`, {}, { $select: 'id' });
163
+ userId = response.id;
71
164
  }
72
- catch (error) {
73
- // Log error for debugging
74
- console.error(`Failed to get user ID for email ${email}:`, error.message || error);
75
- return null;
165
+ catch {
166
+ try {
167
+ const escaped = value.replace(/'/g, "''");
168
+ const users = await microsoftApiRequest.call(this, 'GET', '/users', {}, {
169
+ $filter: `mail eq '${escaped}' or userPrincipalName eq '${escaped}'`,
170
+ $select: 'id',
171
+ $top: 1,
172
+ });
173
+ userId = (_b = (_a = users === null || users === void 0 ? void 0 : users.value) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.id;
174
+ }
175
+ catch {
176
+ }
177
+ }
178
+ if (!userId) {
179
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Could not find user with email/ID: ${value}`, {
180
+ description: 'Make sure the user exists in your tenant and the credential has the User.ReadBasic.All permission (reconnect the credential after updating the node).',
181
+ });
182
+ }
183
+ cache === null || cache === void 0 ? void 0 : cache.set(cacheKey, userId);
184
+ return userId;
185
+ }
186
+ async function resolveUserIds(input, cache) {
187
+ const userIds = [];
188
+ for (const entry of parseList(input)) {
189
+ userIds.push(await getUserIdByEmail.call(this, entry, cache));
76
190
  }
191
+ return [...new Set(userIds)];
77
192
  }
78
- function parseAssignments(assignmentsString) {
79
- if (!assignmentsString || assignmentsString.trim() === '') {
193
+ function parseList(value) {
194
+ if (value === undefined || value === null) {
80
195
  return [];
81
196
  }
82
- return assignmentsString
83
- .split(',')
84
- .map((email) => email.trim())
85
- .filter((email) => email.length > 0);
197
+ const entries = Array.isArray(value) ? value : String(value).split(',');
198
+ return entries
199
+ .map((entry) => {
200
+ var _a, _b, _c, _d;
201
+ if (entry && typeof entry === 'object') {
202
+ const obj = entry;
203
+ return String((_d = (_c = (_b = (_a = obj.id) !== null && _a !== void 0 ? _a : obj.email) !== null && _b !== void 0 ? _b : obj.mail) !== null && _c !== void 0 ? _c : obj.userPrincipalName) !== null && _d !== void 0 ? _d : '');
204
+ }
205
+ return String(entry);
206
+ })
207
+ .map((entry) => entry.trim())
208
+ .filter((entry) => entry.length > 0);
209
+ }
210
+ function parseAssignments(assignments) {
211
+ return parseList(assignments);
86
212
  }
87
213
  function createAssignmentsObject(userIds) {
88
214
  const assignments = {};
@@ -94,3 +220,94 @@ function createAssignmentsObject(userIds) {
94
220
  }
95
221
  return assignments;
96
222
  }
223
+ function encodeReferenceKey(url) {
224
+ return encodeURI(url)
225
+ .replace(/\./g, '%2E')
226
+ .replace(/:/g, '%3A')
227
+ .replace(/@/g, '%40')
228
+ .replace(/#/g, '%23');
229
+ }
230
+ function decodeReferenceKey(key) {
231
+ try {
232
+ return decodeURIComponent(key);
233
+ }
234
+ catch {
235
+ return key;
236
+ }
237
+ }
238
+ function generateGuid() {
239
+ return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
240
+ const r = (Math.random() * 16) | 0;
241
+ const v = c === 'x' ? r : (r & 0x3) | 0x8;
242
+ return v.toString(16);
243
+ });
244
+ }
245
+ function escapeHtml(text) {
246
+ return text
247
+ .replace(/&/g, '&amp;')
248
+ .replace(/</g, '&lt;')
249
+ .replace(/>/g, '&gt;')
250
+ .replace(/"/g, '&quot;')
251
+ .replace(/'/g, '&#39;');
252
+ }
253
+ function formatCommentContent(content, contentType = 'text') {
254
+ const formattedContent = contentType === 'html' ? content : `<p>${escapeHtml(content).replace(/\r?\n/g, '<br>')}</p>`;
255
+ return {
256
+ body: {
257
+ contentType: 'html',
258
+ content: formattedContent,
259
+ },
260
+ };
261
+ }
262
+ function parseJson(value, fieldName, itemIndex) {
263
+ if (typeof value !== 'string') {
264
+ return value;
265
+ }
266
+ try {
267
+ return JSON.parse(value);
268
+ }
269
+ catch {
270
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Invalid JSON in "${fieldName}"`, {
271
+ itemIndex,
272
+ });
273
+ }
274
+ }
275
+ exports.CATEGORY_COLORS = {
276
+ category1: 'Pink',
277
+ category2: 'Red',
278
+ category3: 'Yellow',
279
+ category4: 'Green',
280
+ category5: 'Blue',
281
+ category6: 'Purple',
282
+ category7: 'Bronze',
283
+ category8: 'Lime',
284
+ category9: 'Aqua',
285
+ category10: 'Gray',
286
+ category11: 'Silver',
287
+ category12: 'Brown',
288
+ category13: 'Cranberry',
289
+ category14: 'Orange',
290
+ category15: 'Peach',
291
+ category16: 'Marigold',
292
+ category17: 'Light Green',
293
+ category18: 'Dark Green',
294
+ category19: 'Teal',
295
+ category20: 'Light Blue',
296
+ category21: 'Dark Blue',
297
+ category22: 'Lavender',
298
+ category23: 'Plum',
299
+ category24: 'Light Gray',
300
+ category25: 'Dark Gray',
301
+ };
302
+ async function getPlanGroupId(planId) {
303
+ const plan = (await microsoftApiRequest.call(this, 'GET', `/planner/plans/${planId}`));
304
+ const container = plan.container;
305
+ if ((container === null || container === void 0 ? void 0 : container.containerId) && (!container.type || container.type === 'group')) {
306
+ return container.containerId;
307
+ }
308
+ if (!container && plan.owner) {
309
+ return plan.owner;
310
+ }
311
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Comments are only supported for plans that belong to a Microsoft 365 group');
312
+ }
313
+ //# sourceMappingURL=GenericFunctions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GenericFunctions.js","sourceRoot":"","sources":["../../../nodes/MicrosoftPlanner/GenericFunctions.ts"],"names":[],"mappings":"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"}
@@ -1,14 +1,13 @@
1
- import { IExecuteFunctions, ILoadOptionsFunctions, INodeExecutionData, INodeType, INodeTypeDescription } from 'n8n-workflow';
1
+ import type { IExecuteFunctions, ILoadOptionsFunctions, INodeExecutionData, INodeListSearchResult, INodePropertyOptions, INodeType, INodeTypeDescription } from 'n8n-workflow';
2
2
  export declare class MicrosoftPlanner implements INodeType {
3
3
  description: INodeTypeDescription;
4
4
  methods: {
5
5
  listSearch: {
6
- getBuckets(this: ILoadOptionsFunctions): Promise<{
7
- results: any;
8
- }>;
9
- getTasks(this: ILoadOptionsFunctions): Promise<{
10
- results: any;
11
- }>;
6
+ getBuckets(this: ILoadOptionsFunctions, filter?: string): Promise<INodeListSearchResult>;
7
+ getGroups(this: ILoadOptionsFunctions, filter?: string): Promise<INodeListSearchResult>;
8
+ };
9
+ loadOptions: {
10
+ getCategories(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]>;
12
11
  };
13
12
  };
14
13
  execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]>;