@advenimuss/n8n-nodes-msgraph 0.2.1 → 0.2.3

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.
package/README.md CHANGED
@@ -1 +1,180 @@
1
-
1
+ # n8n-nodes-msgraph
2
+
3
+ This is a custom n8n node that provides enhanced Microsoft Graph API integration with built-in rate limiting and retry handling. It allows you to make requests to any Microsoft Graph API endpoint while automatically handling throttling responses (HTTP 429) using Microsoft's recommended retry-after approach.
4
+
5
+ ## Features
6
+
7
+ * 🔄 Automatic rate limit handling with retry logic
8
+ * ⏱️ Configurable retry intervals using Microsoft's retry-after header
9
+ * 🎯 Support for all Microsoft Graph API endpoints
10
+ * 🔐 OAuth2 authentication support
11
+ * 📝 Detailed error handling and logging
12
+ * 🛠️ Configurable request parameters (method, URL, headers, query parameters, body)
13
+ * 📦 Response format selection (JSON/String)
14
+
15
+ ## Installation
16
+
17
+ You can install this node in your n8n instance by:
18
+
19
+ ```bash
20
+ npm install @advenimuss/n8n-nodes-msgraph
21
+ ```
22
+
23
+
24
+ ## Configuration
25
+
26
+
27
+ 1. Create a new Microsoft Graph API credential in n8n:
28
+ * Go to Settings > Credentials > New
29
+ * Search for "Microsoft Graph API"
30
+ * Configure with your Azure AD application details (or with an existing access token via a previous API call to get the token with a client secret)
31
+ 2. In your workflow:
32
+ * Add the "Microsoft Graph" node
33
+ * Select your credential
34
+ * Configure the HTTP method, URL, and other parameters
35
+ * Enable/configure rate limit handling if needed
36
+
37
+ ## Rate Limiting Features
38
+
39
+ The node includes smart handling of Microsoft Graph API rate limits:
40
+
41
+ * Automatically detects HTTP 429 responses
42
+ * Uses the retry-after header from Microsoft's response
43
+ * Configurable maximum retry attempts
44
+ * Customizable retry delay with expression support
45
+ * Detailed logging of retry attempts
46
+
47
+ ## Development Setup
48
+
49
+
50
+ 1. Clone this repository:
51
+
52
+ ```bash
53
+ git clone https://github.com/advenimuss/n8n-nodes-msgraph.git
54
+ cd n8n-nodes-msgraph
55
+ ```
56
+
57
+
58
+ 2. Install dependencies:
59
+
60
+ ```bash
61
+ npm install
62
+ ```
63
+
64
+
65
+ 3. Build the node:
66
+
67
+ ```bash
68
+ npm run build
69
+ ```
70
+
71
+
72
+ 4. Link for local testing:
73
+
74
+ ```bash
75
+ npm link
76
+ ```
77
+
78
+
79
+ 5. In your local n8n installation directory:
80
+
81
+ ```bash
82
+ npm link @advenimuss/n8n-nodes-msgraph
83
+ ```
84
+
85
+ ## Testing
86
+
87
+
88
+ 1. Run the linter:
89
+
90
+ ```bash
91
+ npm run lint
92
+ ```
93
+
94
+
95
+ 2. Fix linting issues:
96
+
97
+ ```bash
98
+ npm run lintfix
99
+ ```
100
+
101
+ ## Building for Production
102
+
103
+
104
+ 1. Update version in package.json
105
+ 2. Build the project:
106
+
107
+ ```bash
108
+ npm run build
109
+ ```
110
+
111
+
112
+ 3. Test the build:
113
+
114
+ ```bash
115
+ npm run lint
116
+ ```
117
+
118
+ ## Publishing to npm
119
+
120
+
121
+ 1. Login to npm:
122
+
123
+ ```bash
124
+ npm login
125
+ ```
126
+
127
+
128
+ 2. Publish the package:
129
+
130
+ ```bash
131
+ npm publish --access public
132
+ ```
133
+
134
+ ## Example Usage
135
+
136
+ ### Basic GET Request
137
+
138
+ ```typescript
139
+ {
140
+ "resource": "custom",
141
+ "method": "GET",
142
+ "url": "https://graph.microsoft.com/v1.0/me",
143
+ "authentication": "msGraphOAuth2Api"
144
+ }
145
+ ```
146
+
147
+ ### Handling Rate Limits
148
+
149
+ ```typescript
150
+ {
151
+ "resource": "custom",
152
+ "method": "GET",
153
+ "url": "https://graph.microsoft.com/v1.0/users",
154
+ "authentication": "msGraphOAuth2Api",
155
+ "options": {
156
+ "enableThrottling": true,
157
+ "maxRetries": 5,
158
+ "retryAfter": "{{$response.headers['retry-after'] || 2}}"
159
+ }
160
+ }
161
+ ```
162
+
163
+ ## License
164
+
165
+ [MIT](LICENSE)
166
+
167
+ ## Support
168
+
169
+ * Create an issue in this repository
170
+
171
+ ## Contributing
172
+
173
+
174
+ 1. Fork the repository
175
+ 2. Create a feature branch
176
+ 3. Commit your changes
177
+ 4. Push to the branch
178
+ 5. Create a Pull Request
179
+
180
+
@@ -1,6 +1,7 @@
1
1
  import { ICredentialType, INodeProperties } from 'n8n-workflow';
2
2
  export declare class MsGraphOAuth2Api implements ICredentialType {
3
3
  name: string;
4
+ extends: string[];
4
5
  displayName: string;
5
6
  documentationUrl: string;
6
7
  properties: INodeProperties[];
@@ -4,22 +4,24 @@ exports.MsGraphOAuth2Api = void 0;
4
4
  class MsGraphOAuth2Api {
5
5
  constructor() {
6
6
  this.name = 'msGraphOAuth2Api';
7
+ this.extends = ['oAuth2Api']; // CRITICAL: Enables n8n's OAuth handler
7
8
  this.displayName = 'Microsoft Graph OAuth2 API';
8
- this.documentationUrl = 'https://docs.microsoft.com/en-us/graph/auth-v2-user';
9
+ this.documentationUrl = 'https://docs.microsoft.com/en-us/graph/auth-v2-service';
9
10
  this.properties = [
10
11
  {
11
- displayName: 'Authorization URL',
12
- name: 'authUrl',
13
- type: 'string',
14
- default: 'https://login.microsoftonline.com/common/oauth2/v2.0/authorize',
15
- required: true,
12
+ displayName: 'Grant Type',
13
+ name: 'grantType',
14
+ type: 'hidden',
15
+ default: 'clientCredentials', // App-only flow (no user interaction)
16
16
  },
17
17
  {
18
- displayName: 'Token URL',
19
- name: 'tokenUrl',
18
+ displayName: 'Access Token URL',
19
+ name: 'accessTokenUrl',
20
20
  type: 'string',
21
- default: 'https://login.microsoftonline.com/common/oauth2/v2.0/token',
21
+ default: '',
22
22
  required: true,
23
+ placeholder: 'https://login.microsoftonline.com/{tenant-id}/oauth2/v2.0/token',
24
+ description: 'Token endpoint URL. Replace {tenant-id} with your Azure AD Tenant ID (GUID). Client credentials flow requires tenant-specific URL - cannot use /common/.',
23
25
  },
24
26
  {
25
27
  displayName: 'Client ID',
@@ -27,6 +29,7 @@ class MsGraphOAuth2Api {
27
29
  type: 'string',
28
30
  default: '',
29
31
  required: true,
32
+ description: 'Application (client) ID from your Azure AD app registration',
30
33
  },
31
34
  {
32
35
  displayName: 'Client Secret',
@@ -37,30 +40,21 @@ class MsGraphOAuth2Api {
37
40
  },
38
41
  default: '',
39
42
  required: true,
43
+ description: 'Client secret value (not the secret ID) from Azure AD app registration → Certificates & secrets',
40
44
  },
41
45
  {
42
46
  displayName: 'Scope',
43
47
  name: 'scope',
44
48
  type: 'string',
45
- default: 'offline_access user.read',
46
- description: 'Space-separated list of scopes to request',
49
+ default: 'https://graph.microsoft.com/.default',
47
50
  required: true,
51
+ description: 'For client credentials, use .default to get all granted Application permissions. Do not change unless you know what you are doing.',
48
52
  },
49
53
  {
50
54
  displayName: 'Authentication',
51
55
  name: 'authentication',
52
- type: 'options',
53
- options: [
54
- {
55
- name: 'Body',
56
- value: 'body',
57
- },
58
- {
59
- name: 'Header',
60
- value: 'header',
61
- },
62
- ],
63
- default: 'header',
56
+ type: 'hidden',
57
+ default: 'body', // Microsoft prefers credentials in body for client credentials
64
58
  },
65
59
  ];
66
60
  }
@@ -1 +1 @@
1
- {"version":3,"file":"MsGraphOAuth2Api.credentials.js","sourceRoot":"","sources":["../../credentials/MsGraphOAuth2Api.credentials.ts"],"names":[],"mappings":";;;AAKA,MAAa,gBAAgB;IAA7B;QACC,SAAI,GAAG,kBAAkB,CAAC;QAC1B,gBAAW,GAAG,4BAA4B,CAAC;QAC3C,qBAAgB,GAAG,qDAAqD,CAAC;QACzE,eAAU,GAAsB;YAC/B;gBACC,WAAW,EAAE,mBAAmB;gBAChC,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,gEAAgE;gBACzE,QAAQ,EAAE,IAAI;aACd;YACD;gBACC,WAAW,EAAE,WAAW;gBACxB,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,4DAA4D;gBACrE,QAAQ,EAAE,IAAI;aACd;YACD;gBACC,WAAW,EAAE,WAAW;gBACxB,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,EAAE;gBACX,QAAQ,EAAE,IAAI;aACd;YACD;gBACC,WAAW,EAAE,eAAe;gBAC5B,IAAI,EAAE,cAAc;gBACpB,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE;oBACZ,QAAQ,EAAE,IAAI;iBACd;gBACD,OAAO,EAAE,EAAE;gBACX,QAAQ,EAAE,IAAI;aACd;YACD;gBACC,WAAW,EAAE,OAAO;gBACpB,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,0BAA0B;gBACnC,WAAW,EAAE,2CAA2C;gBACxD,QAAQ,EAAE,IAAI;aACd;YACD;gBACC,WAAW,EAAE,gBAAgB;gBAC7B,IAAI,EAAE,gBAAgB;gBACtB,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE;oBACR;wBACC,IAAI,EAAE,MAAM;wBACZ,KAAK,EAAE,MAAM;qBACb;oBACD;wBACC,IAAI,EAAE,QAAQ;wBACd,KAAK,EAAE,QAAQ;qBACf;iBACD;gBACD,OAAO,EAAE,QAAQ;aACjB;SACD,CAAC;IACH,CAAC;CAAA;AA7DD,4CA6DC"}
1
+ {"version":3,"file":"MsGraphOAuth2Api.credentials.js","sourceRoot":"","sources":["../../credentials/MsGraphOAuth2Api.credentials.ts"],"names":[],"mappings":";;;AAKA,MAAa,gBAAgB;IAA7B;QACC,SAAI,GAAG,kBAAkB,CAAC;QAC1B,YAAO,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,wCAAwC;QACjE,gBAAW,GAAG,4BAA4B,CAAC;QAC3C,qBAAgB,GAAG,wDAAwD,CAAC;QAE5E,eAAU,GAAsB;YAC/B;gBACC,WAAW,EAAE,YAAY;gBACzB,IAAI,EAAE,WAAW;gBACjB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,mBAAmB,EAAE,sCAAsC;aACpE;YACD;gBACC,WAAW,EAAE,kBAAkB;gBAC/B,IAAI,EAAE,gBAAgB;gBACtB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,EAAE;gBACX,QAAQ,EAAE,IAAI;gBACd,WAAW,EAAE,iEAAiE;gBAC9E,WAAW,EAAE,0JAA0J;aACvK;YACD;gBACC,WAAW,EAAE,WAAW;gBACxB,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,EAAE;gBACX,QAAQ,EAAE,IAAI;gBACd,WAAW,EAAE,6DAA6D;aAC1E;YACD;gBACC,WAAW,EAAE,eAAe;gBAC5B,IAAI,EAAE,cAAc;gBACpB,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE;oBACZ,QAAQ,EAAE,IAAI;iBACd;gBACD,OAAO,EAAE,EAAE;gBACX,QAAQ,EAAE,IAAI;gBACd,WAAW,EAAE,iGAAiG;aAC9G;YACD;gBACC,WAAW,EAAE,OAAO;gBACpB,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,sCAAsC;gBAC/C,QAAQ,EAAE,IAAI;gBACd,WAAW,EAAE,oIAAoI;aACjJ;YACD;gBACC,WAAW,EAAE,gBAAgB;gBAC7B,IAAI,EAAE,gBAAgB;gBACtB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,MAAM,EAAE,+DAA+D;aAChF;SACD,CAAC;IACH,CAAC;CAAA;AAxDD,4CAwDC"}
@@ -15,263 +15,165 @@ class MsGraph {
15
15
  defaults: {
16
16
  name: 'Microsoft Graph',
17
17
  },
18
- // @ts-expect-error - n8n types issue
19
18
  inputs: ['main'],
20
- // @ts-expect-error - n8n types issue
21
19
  outputs: ['main'],
22
20
  credentials: [
23
21
  {
24
22
  name: 'msGraphOAuth2Api',
25
23
  required: false,
24
+ displayOptions: {
25
+ show: {
26
+ authentication: ['oauth2'],
27
+ },
28
+ },
26
29
  },
27
30
  ],
28
31
  properties: [
32
+ // ==================== Authentication ====================
29
33
  {
30
34
  displayName: 'Authentication',
31
35
  name: 'authentication',
32
36
  type: 'options',
33
37
  options: [
34
38
  {
35
- name: 'OAuth2 (via Credentials)',
39
+ name: 'OAuth2 (Client Credentials)',
36
40
  value: 'oauth2',
41
+ description: 'Use OAuth2 credentials configured in n8n (recommended)',
37
42
  },
38
43
  {
39
- name: 'Access Token',
44
+ name: 'Access Token (Manual)',
40
45
  value: 'accessToken',
46
+ description: 'Provide a pre-obtained access token',
41
47
  },
42
48
  ],
43
49
  default: 'oauth2',
44
- description: 'The authentication method to use',
50
+ description: 'How to authenticate with Microsoft Graph API',
45
51
  },
46
52
  {
47
53
  displayName: 'Access Token',
48
54
  name: 'accessToken',
49
55
  type: 'string',
56
+ typeOptions: {
57
+ password: true,
58
+ },
50
59
  displayOptions: {
51
60
  show: {
52
61
  authentication: ['accessToken'],
53
62
  },
54
63
  },
55
64
  default: '',
56
- description: 'Access token obtained from Microsoft Identity Platform (Azure AD). Can be set via an expression from the result of a previous node.',
57
65
  required: true,
66
+ description: 'Bearer token obtained from Microsoft Identity Platform. Can use an expression to reference output from a previous node.',
58
67
  },
68
+ // ==================== Request Configuration ====================
59
69
  {
60
70
  displayName: 'HTTP Method',
61
71
  name: 'method',
62
72
  type: 'options',
63
73
  options: [
64
- {
65
- name: 'DELETE',
66
- value: 'DELETE',
67
- },
68
- {
69
- name: 'GET',
70
- value: 'GET',
71
- },
72
- {
73
- name: 'PATCH',
74
- value: 'PATCH',
75
- },
76
- {
77
- name: 'POST',
78
- value: 'POST',
79
- },
80
- {
81
- name: 'PUT',
82
- value: 'PUT',
83
- },
74
+ { name: 'GET', value: 'GET' },
75
+ { name: 'POST', value: 'POST' },
76
+ { name: 'PATCH', value: 'PATCH' },
77
+ { name: 'PUT', value: 'PUT' },
78
+ { name: 'DELETE', value: 'DELETE' },
84
79
  ],
85
80
  default: 'GET',
86
- description: 'The HTTP method to use for the request',
81
+ description: 'HTTP method for the request',
87
82
  },
88
83
  {
89
84
  displayName: 'URL',
90
85
  name: 'url',
91
86
  type: 'string',
92
87
  default: '',
93
- placeholder: 'https://graph.microsoft.com/v1.0/me',
94
- description: 'The URL to make the request to',
88
+ placeholder: 'https://graph.microsoft.com/v1.0/users',
95
89
  required: true,
90
+ description: 'Full Microsoft Graph API URL. Use v1.0 for production, beta for preview features.',
96
91
  },
97
92
  {
98
- displayName: 'Headers',
99
- name: 'headers',
100
- placeholder: 'Add Header',
93
+ displayName: 'Request Body',
94
+ name: 'body',
95
+ type: 'json',
96
+ displayOptions: {
97
+ show: {
98
+ method: ['PATCH', 'POST', 'PUT'],
99
+ },
100
+ },
101
+ default: '',
102
+ description: 'JSON body for the request',
103
+ },
104
+ // ==================== Query Parameters ====================
105
+ {
106
+ displayName: 'Query Parameters',
107
+ name: 'queryParameters',
108
+ placeholder: 'Add Parameter',
101
109
  type: 'fixedCollection',
102
110
  typeOptions: {
103
111
  multipleValues: true,
104
112
  },
105
113
  default: {},
114
+ description: 'OData query parameters like $select, $filter, $expand, $top, etc.',
106
115
  options: [
107
116
  {
108
117
  name: 'parameter',
109
- displayName: 'Header',
118
+ displayName: 'Parameter',
110
119
  values: [
111
120
  {
112
121
  displayName: 'Name',
113
122
  name: 'name',
114
123
  type: 'string',
115
124
  default: '',
116
- description: 'Name of the header',
125
+ placeholder: '$select',
126
+ description: 'Parameter name (e.g., $select, $filter, $expand, $top, $orderby)',
117
127
  },
118
128
  {
119
129
  displayName: 'Value',
120
130
  name: 'value',
121
131
  type: 'string',
122
132
  default: '',
123
- description: 'Value of the header',
133
+ placeholder: 'id,displayName,mail',
134
+ description: 'Parameter value',
124
135
  },
125
136
  ],
126
137
  },
127
138
  ],
128
139
  },
140
+ // ==================== Headers ====================
129
141
  {
130
- displayName: 'Query Parameters',
131
- name: 'queryParameters',
132
- placeholder: 'Add Parameter',
142
+ displayName: 'Headers',
143
+ name: 'headers',
144
+ placeholder: 'Add Header',
133
145
  type: 'fixedCollection',
134
146
  typeOptions: {
135
147
  multipleValues: true,
136
148
  },
137
149
  default: {},
150
+ description: 'Custom HTTP headers to include in the request',
138
151
  options: [
139
152
  {
140
153
  name: 'parameter',
141
- displayName: 'Parameter',
154
+ displayName: 'Header',
142
155
  values: [
143
156
  {
144
157
  displayName: 'Name',
145
158
  name: 'name',
146
159
  type: 'string',
147
160
  default: '',
148
- description: 'Name of the parameter',
161
+ placeholder: 'ConsistencyLevel',
162
+ description: 'Header name',
149
163
  },
150
164
  {
151
165
  displayName: 'Value',
152
166
  name: 'value',
153
167
  type: 'string',
154
168
  default: '',
155
- description: 'Value of the parameter',
156
- },
157
- ],
158
- },
159
- ],
160
- },
161
- {
162
- displayName: 'Body',
163
- name: 'body',
164
- type: 'json',
165
- displayOptions: {
166
- show: {
167
- method: ['PATCH', 'POST', 'PUT'],
168
- },
169
- },
170
- default: '',
171
- description: 'Body of the request',
172
- },
173
- {
174
- displayName: 'Response Format',
175
- name: 'responseFormat',
176
- type: 'options',
177
- options: [
178
- {
179
- name: 'JSON',
180
- value: 'json',
181
- },
182
- {
183
- name: 'String',
184
- value: 'string',
185
- },
186
- ],
187
- default: 'json',
188
- description: 'The format in which the data gets returned from the URL',
189
- },
190
- {
191
- displayName: 'Handle Throttling',
192
- name: 'handleThrottling',
193
- type: 'fixedCollection',
194
- typeOptions: {
195
- multipleValues: false,
196
- },
197
- default: {},
198
- options: [
199
- {
200
- name: 'values',
201
- displayName: 'Values',
202
- values: [
203
- {
204
- displayName: 'Enable Throttle Handling',
205
- name: 'enabled',
206
- type: 'boolean',
207
- default: true,
208
- description: 'Whether to handle rate limiting (HTTP 429 responses)',
209
- },
210
- {
211
- displayName: 'Retry After (Seconds)',
212
- name: 'retryAfterExpression',
213
- displayOptions: {
214
- show: {
215
- enabled: [true],
216
- },
217
- },
218
- type: 'string',
219
- default: '={{$response.headers["retry-after"] || 2}}',
220
- description: 'Expression to determine how long to wait before retry. Access the retry-after header with $response.headers["retry-after"]',
221
- },
222
- {
223
- displayName: 'Limit Number of Retries',
224
- name: 'limitRetries',
225
- displayOptions: {
226
- show: {
227
- enabled: [true],
228
- },
229
- },
230
- type: 'boolean',
231
- default: true,
232
- description: 'Whether to limit the number of retry attempts',
233
- },
234
- {
235
- displayName: 'Maximum Retries',
236
- name: 'maxRetries',
237
- displayOptions: {
238
- show: {
239
- enabled: [true],
240
- limitRetries: [true],
241
- },
242
- },
243
- type: 'number',
244
- default: 5,
245
- description: 'Maximum number of retries to attempt if rate limited',
246
- },
247
- ],
248
- },
249
- ],
250
- },
251
- {
252
- displayName: 'Error Handling',
253
- name: 'errorHandling',
254
- type: 'fixedCollection',
255
- typeOptions: {
256
- multipleValues: false,
257
- },
258
- default: {},
259
- options: [
260
- {
261
- name: 'values',
262
- displayName: 'Values',
263
- values: [
264
- {
265
- displayName: 'Continue On Error',
266
- name: 'continueOnError',
267
- type: 'boolean',
268
- default: false,
269
- description: 'Whether to continue execution even when an error occurs',
169
+ placeholder: 'eventual',
170
+ description: 'Header value',
270
171
  },
271
172
  ],
272
173
  },
273
174
  ],
274
175
  },
176
+ // ==================== Options (Collapsible) ====================
275
177
  {
276
178
  displayName: 'Options',
277
179
  name: 'options',
@@ -279,19 +181,56 @@ class MsGraph {
279
181
  placeholder: 'Add Option',
280
182
  default: {},
281
183
  options: [
184
+ {
185
+ displayName: 'Response Format',
186
+ name: 'responseFormat',
187
+ type: 'options',
188
+ options: [
189
+ { name: 'JSON', value: 'json' },
190
+ { name: 'Text', value: 'string' },
191
+ ],
192
+ default: 'json',
193
+ description: 'How to parse the response from Microsoft Graph',
194
+ },
282
195
  {
283
196
  displayName: 'Full Response',
284
197
  name: 'fullResponse',
285
198
  type: 'boolean',
286
199
  default: false,
287
- description: 'Whether to return the full response data instead of only the body',
200
+ description: 'Whether to return the full response including headers and status code',
288
201
  },
289
202
  {
290
- displayName: 'Timeout',
203
+ displayName: 'Timeout (ms)',
291
204
  name: 'timeout',
292
205
  type: 'number',
293
206
  default: 10000,
294
- description: 'Time in ms to wait for the server to send response headers before aborting the request',
207
+ description: 'Request timeout in milliseconds',
208
+ },
209
+ {
210
+ displayName: 'Handle Rate Limiting',
211
+ name: 'handleRateLimiting',
212
+ type: 'boolean',
213
+ default: true,
214
+ description: 'Whether to automatically retry when rate limited (HTTP 429)',
215
+ },
216
+ {
217
+ displayName: 'Max Retries',
218
+ name: 'maxRetries',
219
+ type: 'number',
220
+ default: 5,
221
+ description: 'Maximum number of retry attempts when rate limited',
222
+ displayOptions: {
223
+ show: {
224
+ handleRateLimiting: [true],
225
+ },
226
+ },
227
+ },
228
+ {
229
+ displayName: 'Continue On Error',
230
+ name: 'continueOnError',
231
+ type: 'boolean',
232
+ default: false,
233
+ description: 'Whether to continue workflow execution when this node encounters an error',
295
234
  },
296
235
  ],
297
236
  },
@@ -299,198 +238,183 @@ class MsGraph {
299
238
  };
300
239
  }
301
240
  async execute() {
302
- var _a, _b, _c;
241
+ var _a, _b, _c, _d, _e, _f;
303
242
  const items = this.getInputData();
304
243
  const returnItems = [];
305
244
  for (let itemIndex = 0; itemIndex < items.length; itemIndex++) {
306
245
  try {
307
- // Get authentication parameters
246
+ // Get authentication method
308
247
  const authMethod = this.getNodeParameter('authentication', itemIndex, 'oauth2');
309
- let accessToken;
310
- if (authMethod === 'oauth2') {
311
- // Get credentials for MS Graph API
312
- const credentials = await this.getCredentials('msGraphOAuth2Api');
313
- accessToken = credentials.access_token;
314
- }
315
- else {
316
- // Get the access token directly from the parameter
317
- accessToken = this.getNodeParameter('accessToken', itemIndex, '');
318
- if (!accessToken) {
319
- throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Access Token is required for this authentication method', {
320
- itemIndex,
321
- });
322
- }
323
- }
324
- // Get parameters
248
+ // Get request parameters
325
249
  const method = this.getNodeParameter('method', itemIndex);
326
250
  const url = this.getNodeParameter('url', itemIndex);
327
- const responseFormat = this.getNodeParameter('responseFormat', itemIndex);
328
251
  const options = this.getNodeParameter('options', itemIndex, {});
329
- // Get throttling options
330
- const throttleSettings = this.getNodeParameter('handleThrottling.values', itemIndex, {
331
- enabled: true,
332
- retryAfterExpression: '={{$response.headers["retry-after"] || 2}}',
333
- limitRetries: true,
334
- maxRetries: 5,
335
- });
336
- // Get body, headers and query parameters
252
+ // Set defaults for options
253
+ const responseFormat = options.responseFormat || 'json';
254
+ const timeout = options.timeout || 10000;
255
+ const handleRateLimiting = options.handleRateLimiting !== false;
256
+ const maxRetries = (_a = options.maxRetries) !== null && _a !== void 0 ? _a : 5;
257
+ // Get body for POST/PATCH/PUT
337
258
  let body;
338
259
  if (['PATCH', 'POST', 'PUT'].includes(method)) {
339
- body = this.getNodeParameter('body', itemIndex, {});
340
- if (body !== '' && typeof body === 'string') {
341
- // Try to parse the body as JSON
260
+ const bodyParam = this.getNodeParameter('body', itemIndex, '');
261
+ if (bodyParam && bodyParam.trim() !== '') {
342
262
  try {
343
- body = JSON.parse(body);
263
+ body = JSON.parse(bodyParam);
344
264
  }
345
265
  catch {
346
- // If parsing fails, throw an error
347
- throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Body must be a valid JSON', {
348
- itemIndex,
349
- });
266
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Request body must be valid JSON', { itemIndex });
350
267
  }
351
268
  }
352
269
  }
353
- // Get headers
354
- const headerParameters = this.getNodeParameter('headers', itemIndex, {});
355
- const headers = {};
356
- if (headerParameters.parameter) {
357
- for (const param of headerParameters.parameter) {
358
- headers[param.name] = param.value;
270
+ // Build headers (Authorization added separately based on auth method)
271
+ const headerParams = this.getNodeParameter('headers', itemIndex, {});
272
+ const headers = {
273
+ Accept: 'application/json',
274
+ };
275
+ if (['PATCH', 'POST', 'PUT'].includes(method)) {
276
+ headers['Content-Type'] = 'application/json';
277
+ }
278
+ // Add custom headers (can override defaults)
279
+ if (headerParams.parameter) {
280
+ for (const param of headerParams.parameter) {
281
+ if (param.name) {
282
+ headers[param.name] = param.value;
283
+ }
359
284
  }
360
285
  }
361
- // Get query parameters
362
- const queryParameters = this.getNodeParameter('queryParameters', itemIndex, {});
286
+ // Build query string
287
+ const queryParams = this.getNodeParameter('queryParameters', itemIndex, {});
363
288
  const qs = {};
364
- if (queryParameters.parameter) {
365
- for (const param of queryParameters.parameter) {
366
- qs[param.name] = param.value;
289
+ if (queryParams.parameter) {
290
+ for (const param of queryParams.parameter) {
291
+ if (param.name) {
292
+ qs[param.name] = param.value;
293
+ }
367
294
  }
368
295
  }
369
- // Add authorization header
370
- headers.Authorization = `Bearer ${accessToken}`;
371
- // Add Content-Type header if not present
372
- if (!headers['Content-Type'] && ['PATCH', 'POST', 'PUT'].includes(method)) {
373
- headers['Content-Type'] = 'application/json';
374
- }
375
- // Add Accept header if not present
376
- if (!headers.Accept) {
377
- headers.Accept = 'application/json';
378
- }
379
- // Execute the request with retry logic for rate limiting
296
+ // Execute request with retry logic
380
297
  let response;
381
- let retryCount = 0;
382
- let retryAfter = 0;
383
298
  let responseHeaders = {};
384
- const maxRetries = throttleSettings.limitRetries ? throttleSettings.maxRetries : Infinity;
385
- while (throttleSettings.enabled && retryCount <= maxRetries) {
299
+ let statusCode = 200;
300
+ let retryCount = 0;
301
+ let shouldRetry = true;
302
+ while (shouldRetry) {
303
+ shouldRetry = false;
386
304
  try {
387
- // If we need to retry, wait for the specified time
388
- if (retryCount > 0 && retryAfter > 0) {
389
- this.logger.info(`Rate limited by MS Graph API. Retrying after ${retryAfter} seconds (Attempt ${retryCount}/${maxRetries})`);
390
- await new Promise(resolve => setTimeout(resolve, retryAfter * 1000));
305
+ if (authMethod === 'oauth2') {
306
+ // Use n8n's OAuth2 helper - automatically fetches/caches/refreshes token
307
+ const requestOptions = {
308
+ method: method,
309
+ url,
310
+ headers,
311
+ qs: Object.keys(qs).length > 0 ? qs : undefined,
312
+ body,
313
+ json: responseFormat === 'json',
314
+ timeout,
315
+ returnFullResponse: true,
316
+ };
317
+ const fullResponse = await this.helpers.httpRequestWithAuthentication.call(this, 'msGraphOAuth2Api', requestOptions);
318
+ // httpRequestWithAuthentication with returnFullResponse returns full response object
319
+ if (requestOptions.returnFullResponse) {
320
+ response = (_b = fullResponse.body) !== null && _b !== void 0 ? _b : fullResponse;
321
+ responseHeaders = fullResponse.headers || {};
322
+ statusCode = fullResponse.statusCode || 200;
323
+ }
324
+ else {
325
+ response = fullResponse;
326
+ }
327
+ }
328
+ else {
329
+ // Manual access token - add Authorization header ourselves
330
+ const accessToken = this.getNodeParameter('accessToken', itemIndex, '');
331
+ if (!accessToken) {
332
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Access Token is required when using manual token authentication', { itemIndex });
333
+ }
334
+ const requestHeaders = {
335
+ ...headers,
336
+ Authorization: `Bearer ${accessToken}`,
337
+ };
338
+ // When json:false, body must be stringified manually
339
+ const requestBody = body
340
+ ? (responseFormat === 'json' ? body : JSON.stringify(body))
341
+ : undefined;
342
+ const requestOptions = {
343
+ method,
344
+ url,
345
+ headers: requestHeaders,
346
+ qs: Object.keys(qs).length > 0 ? qs : undefined,
347
+ body: requestBody,
348
+ json: responseFormat === 'json',
349
+ timeout,
350
+ resolveWithFullResponse: true,
351
+ };
352
+ const fullResponse = await this.helpers.request(requestOptions);
353
+ response = fullResponse.body;
354
+ responseHeaders = fullResponse.headers || {};
355
+ statusCode = fullResponse.statusCode || 200;
391
356
  }
392
- // Make the request
393
- const requestOptions = {
394
- method,
395
- url,
396
- headers,
397
- qs,
398
- body,
399
- json: responseFormat === 'json',
400
- timeout: options.timeout || 10000,
401
- resolveWithFullResponse: true,
402
- };
403
- // Use any instead of the actual type because response.headers is not recognized in n8n types
404
- const fullResponse = await this.helpers.request(requestOptions);
405
- response = fullResponse.body;
406
- responseHeaders = fullResponse.headers || {};
407
- // No need to retry on success
408
- break;
409
357
  }
410
358
  catch (error) {
411
- responseHeaders = ((_a = error.response) === null || _a === void 0 ? void 0 : _a.headers) || {};
412
- // Check if this is a rate limiting error (HTTP 429)
413
- if (error.statusCode === 429 && retryCount < maxRetries) {
359
+ const err = error;
360
+ // Handle rate limiting (HTTP 429)
361
+ if (err.statusCode === 429 && handleRateLimiting && retryCount < maxRetries) {
414
362
  retryCount++;
415
- // Get the Retry-After header value and compile the expression if provided
416
- if (throttleSettings.retryAfterExpression) {
417
- try {
418
- // Evaluate the expression
419
- const expressionResult = this.getNodeParameter('handleThrottling.values.retryAfterExpression', itemIndex, 2);
420
- if (typeof expressionResult === 'number' || (typeof expressionResult === 'string' && !isNaN(Number(expressionResult)))) {
421
- retryAfter = Number(expressionResult);
422
- }
423
- else {
424
- // Default to exponential backoff if expression doesn't evaluate to a number
425
- retryAfter = Math.pow(2, retryCount);
426
- }
427
- }
428
- catch {
429
- // If expression evaluation fails, use fallback
430
- const headerRetryAfter = parseInt((responseHeaders === null || responseHeaders === void 0 ? void 0 : responseHeaders['retry-after']) || (responseHeaders === null || responseHeaders === void 0 ? void 0 : responseHeaders['Retry-After']) || '0', 10);
431
- retryAfter = headerRetryAfter || Math.pow(2, retryCount);
432
- }
433
- }
434
- else {
435
- // Use header value if no expression is provided
436
- const headerRetryAfter = parseInt((responseHeaders === null || responseHeaders === void 0 ? void 0 : responseHeaders['retry-after']) || (responseHeaders === null || responseHeaders === void 0 ? void 0 : responseHeaders['Retry-After']) || '0', 10);
437
- retryAfter = headerRetryAfter || Math.pow(2, retryCount);
438
- }
439
- // Continue to the next iteration which will wait and retry
363
+ // Case-insensitive header lookup for Retry-After
364
+ const errResponseHeaders = ((_c = err.response) === null || _c === void 0 ? void 0 : _c.headers) || {};
365
+ const retryAfterHeader = (_d = Object.entries(errResponseHeaders)
366
+ .find(([key]) => key.toLowerCase() === 'retry-after')) === null || _d === void 0 ? void 0 : _d[1];
367
+ const retryAfter = retryAfterHeader ? parseInt(String(retryAfterHeader), 10) : Math.pow(2, retryCount);
368
+ this.logger.info(`Rate limited by Microsoft Graph. Waiting ${retryAfter}s before retry ${retryCount}/${maxRetries}`);
369
+ await new Promise(resolve => setTimeout(resolve, retryAfter * 1000));
370
+ shouldRetry = true;
440
371
  continue;
441
372
  }
442
- // For other errors or if we've exhausted retries, throw the error
443
373
  throw error;
444
374
  }
445
375
  }
446
- // Process the response
447
- let responseData;
448
- if (responseFormat === 'json') {
449
- responseData = response;
450
- if (options.fullResponse === true) {
451
- responseData = {
452
- body: response,
453
- headers: responseHeaders,
454
- statusCode: 200,
455
- };
456
- }
376
+ // Format response
377
+ let outputData;
378
+ if (options.fullResponse) {
379
+ outputData = {
380
+ body: response,
381
+ headers: responseHeaders,
382
+ statusCode,
383
+ };
384
+ }
385
+ else if (responseFormat === 'string') {
386
+ outputData = { data: typeof response === 'object' ? JSON.stringify(response) : String(response) };
457
387
  }
458
388
  else {
459
- // String
460
- responseData = typeof response === 'object' ? JSON.stringify(response) : (response || '').toString();
461
- if (options.fullResponse === true) {
462
- responseData = {
463
- body: responseData,
464
- headers: responseHeaders,
465
- statusCode: 200,
466
- };
467
- }
389
+ outputData = response;
468
390
  }
469
- // Return the response data
470
- const newItem = {
471
- json: responseData,
472
- binary: {},
391
+ returnItems.push({
392
+ json: outputData,
473
393
  pairedItem: { item: itemIndex },
474
- };
475
- returnItems.push(newItem);
394
+ });
476
395
  }
477
396
  catch (error) {
478
- if (this.continueOnFail()) {
397
+ const err = error;
398
+ // Check if we should continue on error
399
+ const options = this.getNodeParameter('options', itemIndex, {});
400
+ if (options.continueOnError || this.continueOnFail()) {
479
401
  returnItems.push({
480
402
  json: {
481
- error: error.message,
482
- statusCode: error.statusCode,
403
+ error: err.message || 'Unknown error',
404
+ statusCode: err.statusCode,
483
405
  url: this.getNodeParameter('url', itemIndex),
484
406
  method: this.getNodeParameter('method', itemIndex),
485
- headers: ((_b = error.response) === null || _b === void 0 ? void 0 : _b.headers) || {},
486
- body: ((_c = error.response) === null || _c === void 0 ? void 0 : _c.body) || null,
407
+ responseHeaders: ((_e = err.response) === null || _e === void 0 ? void 0 : _e.headers) || {},
408
+ responseBody: ((_f = err.response) === null || _f === void 0 ? void 0 : _f.body) || null,
487
409
  },
488
- binary: {},
489
410
  pairedItem: { item: itemIndex },
490
411
  });
491
412
  continue;
492
413
  }
493
- throw error;
414
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), err.message || 'Request failed', {
415
+ itemIndex,
416
+ description: `Status: ${err.statusCode || 'unknown'}. Check that your app has the required Application permissions in Azure AD.`,
417
+ });
494
418
  }
495
419
  }
496
420
  return this.prepareOutputData(returnItems);
@@ -1 +1 @@
1
- {"version":3,"file":"MsGraph.node.js","sourceRoot":"","sources":["../../nodes/MsGraph.node.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MsGraph.node.js","sourceRoot":"","sources":["../../nodes/MsGraph.node.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@advenimuss/n8n-nodes-msgraph",
3
- "version": "0.2.1",
3
+ "version": "0.2.3",
4
4
  "description": "n8n node for Microsoft Graph API with retry handling",
5
5
  "keywords": [
6
6
  "n8n-community-node-package",
@@ -22,7 +22,7 @@
22
22
  "main": "index.js",
23
23
  "type": "commonjs",
24
24
  "scripts": {
25
- "build": "tsc",
25
+ "build": "tsc && cp nodes/*.svg dist/nodes/",
26
26
  "dev": "tsc --watch",
27
27
  "format": "prettier --write .",
28
28
  "lint": "eslint nodes credentials --ext .ts",
@@ -48,11 +48,11 @@
48
48
  "@typescript-eslint/eslint-plugin": "^8.26.1",
49
49
  "@typescript-eslint/parser": "^8.26.1",
50
50
  "eslint": "^8.57.1",
51
- "eslint-plugin-n8n-nodes-base": "^1.16.1"
51
+ "eslint-plugin-n8n-nodes-base": "^1.16.1",
52
+ "typescript": "^5.3.0"
52
53
  },
53
- "dependencies": {
54
+ "peerDependencies": {
54
55
  "n8n-core": "^1.0.0",
55
- "n8n-workflow": "^1.0.0",
56
- "typescript": "^4.9.0"
56
+ "n8n-workflow": "^1.0.0"
57
57
  }
58
58
  }
File without changes