@avantguardllc/n8n-nodes-halopsa 0.1.23 → 0.1.25

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,8 +1,9 @@
1
- import type { ICredentialType, INodeProperties } from 'n8n-workflow';
1
+ import type { IAuthenticateGeneric, ICredentialType, IDataObject, IHttpRequestHelper, INodeProperties } from 'n8n-workflow';
2
2
  export declare class HaloPSAApi implements ICredentialType {
3
3
  name: string;
4
4
  displayName: string;
5
5
  documentationUrl: string;
6
- extends: string[];
7
6
  properties: INodeProperties[];
7
+ preAuthentication(this: IHttpRequestHelper, credentials: IDataObject): Promise<IDataObject>;
8
+ authenticate: IAuthenticateGeneric;
8
9
  }
@@ -4,16 +4,9 @@ exports.HaloPSAApi = void 0;
4
4
  class HaloPSAApi {
5
5
  constructor() {
6
6
  this.name = 'HaloPSAApi';
7
- this.displayName = 'HaloPSA OAuth2 API';
7
+ this.displayName = 'HaloPSA API';
8
8
  this.documentationUrl = '';
9
- this.extends = ['oAuth2Api'];
10
9
  this.properties = [
11
- {
12
- displayName: 'Grant Type',
13
- name: 'grantType',
14
- type: 'hidden',
15
- default: 'clientCredentials',
16
- },
17
10
  {
18
11
  displayName: 'Client ID',
19
12
  name: 'clientId',
@@ -31,12 +24,6 @@ class HaloPSAApi {
31
24
  required: true,
32
25
  description: 'The OAuth2 client / application secret',
33
26
  },
34
- {
35
- displayName: 'Authorization URL',
36
- name: 'authUrl',
37
- type: 'hidden',
38
- default: 'https://example.com/oauth2/authorize',
39
- },
40
27
  {
41
28
  displayName: 'Access Token URL',
42
29
  name: 'accessTokenUrl',
@@ -50,19 +37,7 @@ class HaloPSAApi {
50
37
  name: 'scope',
51
38
  type: 'string',
52
39
  default: '',
53
- description: 'Space-separated list of OAuth2 scopes to request',
54
- },
55
- {
56
- displayName: 'Auth URI Query Parameters',
57
- name: 'authQueryParameters',
58
- type: 'hidden',
59
- default: '',
60
- },
61
- {
62
- displayName: 'Authentication',
63
- name: 'authentication',
64
- type: 'hidden',
65
- default: 'header',
40
+ description: 'The scope to request with the access token',
66
41
  },
67
42
  {
68
43
  displayName: 'Base URL',
@@ -70,9 +45,41 @@ class HaloPSAApi {
70
45
  type: 'string',
71
46
  default: '/api',
72
47
  required: true,
73
- description: 'The base URL of the API (resource server)',
48
+ description: 'The base URL of the API',
74
49
  },
75
50
  ];
51
+ this.authenticate = {
52
+ type: 'generic',
53
+ properties: {
54
+ headers: {
55
+ Authorization: '=Bearer {{$credentials.token}}',
56
+ },
57
+ },
58
+ };
59
+ }
60
+ async preAuthentication(credentials) {
61
+ const bodyParams = {
62
+ client_id: credentials.clientId,
63
+ client_secret: credentials.clientSecret,
64
+ grant_type: 'client_credentials',
65
+ };
66
+ if (credentials.scope) {
67
+ bodyParams.scope = credentials.scope;
68
+ }
69
+ const body = new URLSearchParams(bodyParams);
70
+ const rawResponse = await this.helpers.httpRequest({
71
+ method: 'POST',
72
+ url: credentials.accessTokenUrl,
73
+ headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
74
+ body: body.toString(),
75
+ });
76
+ const response = typeof rawResponse === 'string'
77
+ ? JSON.parse(rawResponse)
78
+ : rawResponse;
79
+ if (!response.access_token) {
80
+ throw new Error(`OAuth2 token exchange failed: ${JSON.stringify(response)}`);
81
+ }
82
+ return { token: response.access_token };
76
83
  }
77
84
  }
78
85
  exports.HaloPSAApi = HaloPSAApi;
@@ -1 +1 @@
1
- {"version":3,"file":"HaloPSAApi.credentials.js","sourceRoot":"","sources":["../../credentials/HaloPSAApi.credentials.ts"],"names":[],"mappings":";;;AAKA,MAAa,UAAU;IAAvB;QACC,SAAI,GAAG,YAAY,CAAC;QACpB,gBAAW,GAAG,oBAAoB,CAAC;QACnC,qBAAgB,GAAG,EAAE,CAAC;QAEtB,YAAO,GAAG,CAAC,WAAW,CAAC,CAAC;QAExB,eAAU,GAAsB;YAC/B;gBACC,WAAW,EAAE,YAAY;gBACzB,IAAI,EAAE,WAAW;gBACjB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,mBAAmB;aAC5B;YACD;gBACC,WAAW,EAAE,WAAW;gBACxB,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,EAAE;gBACX,QAAQ,EAAE,IAAI;gBACd,WAAW,EAAE,oCAAoC;aACjD;YACD;gBACC,WAAW,EAAE,eAAe;gBAC5B,IAAI,EAAE,cAAc;gBACpB,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAC/B,OAAO,EAAE,EAAE;gBACX,QAAQ,EAAE,IAAI;gBACd,WAAW,EAAE,wCAAwC;aACrD;YACD;gBACC,WAAW,EAAE,mBAAmB;gBAChC,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,sCAAsC;aAC/C;YACD;gBACC,WAAW,EAAE,kBAAkB;gBAC/B,IAAI,EAAE,gBAAgB;gBACtB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,kCAAkC;gBAC3C,QAAQ,EAAE,IAAI;gBACd,WAAW,EAAE,0CAA0C;aACvD;YACD;gBACC,WAAW,EAAE,OAAO;gBACpB,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,EAAE;gBACX,WAAW,EAAE,kDAAkD;aAC/D;YACD;gBACC,WAAW,EAAE,2BAA2B;gBACxC,IAAI,EAAE,qBAAqB;gBAC3B,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,EAAE;aACX;YACD;gBACC,WAAW,EAAE,gBAAgB;gBAC7B,IAAI,EAAE,gBAAgB;gBACtB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,QAAQ;aACjB;YACD;gBACC,WAAW,EAAE,UAAU;gBACvB,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,MAAM;gBACf,QAAQ,EAAE,IAAI;gBACd,WAAW,EAAE,2CAA2C;aACxD;SACD,CAAC;IACH,CAAC;CAAA;AAzED,gCAyEC"}
1
+ {"version":3,"file":"HaloPSAApi.credentials.js","sourceRoot":"","sources":["../../credentials/HaloPSAApi.credentials.ts"],"names":[],"mappings":";;;AAQA,MAAa,UAAU;IAAvB;QACC,SAAI,GAAG,YAAY,CAAC;QACpB,gBAAW,GAAG,aAAa,CAAC;QAC5B,qBAAgB,GAAG,EAAE,CAAC;QAEtB,eAAU,GAAsB;YAC/B;gBACC,WAAW,EAAE,WAAW;gBACxB,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,EAAE;gBACX,QAAQ,EAAE,IAAI;gBACd,WAAW,EAAE,oCAAoC;aACjD;YACD;gBACC,WAAW,EAAE,eAAe;gBAC5B,IAAI,EAAE,cAAc;gBACpB,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAC/B,OAAO,EAAE,EAAE;gBACX,QAAQ,EAAE,IAAI;gBACd,WAAW,EAAE,wCAAwC;aACrD;YACD;gBACC,WAAW,EAAE,kBAAkB;gBAC/B,IAAI,EAAE,gBAAgB;gBACtB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,kCAAkC;gBAC3C,QAAQ,EAAE,IAAI;gBACd,WAAW,EAAE,0CAA0C;aACvD;YACD;gBACC,WAAW,EAAE,OAAO;gBACpB,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,EAAE;gBACX,WAAW,EAAE,4CAA4C;aACzD;YACD;gBACC,WAAW,EAAE,UAAU;gBACvB,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,MAAM;gBACf,QAAQ,EAAE,IAAI;gBACd,WAAW,EAAE,yBAAyB;aACtC;SACD,CAAC;QAkCF,iBAAY,GAAyB;YACpC,IAAI,EAAE,SAAS;YACf,UAAU,EAAE;gBACX,OAAO,EAAE;oBACR,aAAa,EAAE,gCAAgC;iBAC/C;aACD;SACD,CAAC;IACH,CAAC;IAvCA,KAAK,CAAC,iBAAiB,CAEtB,WAAwB;QAExB,MAAM,UAAU,GAA2B;YAC1C,SAAS,EAAE,WAAW,CAAC,QAAkB;YACzC,aAAa,EAAE,WAAW,CAAC,YAAsB;YACjD,UAAU,EAAE,oBAAoB;SAChC,CAAC;QACF,IAAI,WAAW,CAAC,KAAK,EAAE,CAAC;YACvB,UAAU,CAAC,KAAK,GAAG,WAAW,CAAC,KAAe,CAAC;QAChD,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,eAAe,CAAC,UAAU,CAAC,CAAC;QAE7C,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;YAClD,MAAM,EAAE,MAAM;YACd,GAAG,EAAE,WAAW,CAAC,cAAwB;YACzC,OAAO,EAAE,EAAE,cAAc,EAAE,mCAAmC,EAAE;YAChE,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE;SACrB,CAAC,CAAC;QACH,MAAM,QAAQ,GAAgB,OAAO,WAAW,KAAK,QAAQ;YAC5D,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;YACzB,CAAC,CAAE,WAA2B,CAAC;QAChC,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CACd,iCAAiC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAC3D,CAAC;QACH,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,YAAsB,EAAE,CAAC;IACnD,CAAC;CAUD;AAxFD,gCAwFC"}
@@ -8,52 +8,117 @@ function getNestedValue(obj, path) {
8
8
  return obj;
9
9
  return path.split('.').reduce((current, key) => current === null || current === void 0 ? void 0 : current[key], obj);
10
10
  }
11
+ const _tokenCache = new Map();
12
+ function _cacheKey(credentials) {
13
+ return `${credentials.clientId}::${credentials.accessTokenUrl}`;
14
+ }
15
+ async function getAccessToken(execContext, forceRefresh = false) {
16
+ const credentials = await execContext.getCredentials('HaloPSAApi');
17
+ const key = _cacheKey(credentials);
18
+ const cached = _tokenCache.get(key);
19
+ if (!forceRefresh && cached && Date.now() < cached.expiresAt) {
20
+ return cached.token;
21
+ }
22
+ const tokenUrl = credentials.accessTokenUrl;
23
+ const bodyParams = {
24
+ client_id: credentials.clientId,
25
+ client_secret: credentials.clientSecret,
26
+ grant_type: 'client_credentials',
27
+ };
28
+ if (credentials.scope) {
29
+ bodyParams.scope = credentials.scope;
30
+ }
31
+ const body = new URLSearchParams(bodyParams);
32
+ let rawResponse;
33
+ try {
34
+ rawResponse = await execContext.helpers.httpRequest({
35
+ method: 'POST',
36
+ url: tokenUrl,
37
+ headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
38
+ body: body.toString(),
39
+ });
40
+ }
41
+ catch (tokenError) {
42
+ const msg = tokenError.message || String(tokenError);
43
+ _tokenCache.delete(key);
44
+ throw new Error(`OAuth2 token exchange failed (POST ${tokenUrl}): ${msg}. ` +
45
+ `Verify your Access Token URL, Client ID, Client Secret, and Scope in the credential settings.`);
46
+ }
47
+ const response = typeof rawResponse === 'string' ? JSON.parse(rawResponse) : rawResponse;
48
+ if (!response.access_token) {
49
+ _tokenCache.delete(key);
50
+ throw new Error(`OAuth2 token exchange succeeded but no access_token in response (POST ${tokenUrl}): ${JSON.stringify(response)}`);
51
+ }
52
+ const token = response.access_token;
53
+ const expiresAt = Date.now() + ((response.expires_in || 3600) - 60) * 1000;
54
+ _tokenCache.set(key, { token, expiresAt });
55
+ return token;
56
+ }
11
57
  async function apiRequest(method, resource, body = {}, query = {}, headers = {}, debugLog, timeout) {
12
58
  const credentials = await this.getCredentials('HaloPSAApi');
13
59
  const baseUrl = credentials.baseUrl || '/api';
14
60
  const url = (resource.startsWith('http://') || resource.startsWith('https://'))
15
61
  ? resource
16
62
  : `${baseUrl}${resource}`;
17
- const options = {
18
- method,
19
- url,
20
- qs: query,
21
- headers: {
22
- 'Accept': 'application/json',
23
- ...headers,
24
- },
25
- json: true,
26
- ...(timeout ? { timeout } : {}),
27
- };
28
- if (['POST', 'PUT', 'PATCH'].includes(method) && body && Object.keys(body).length > 0) {
29
- options.body = body;
30
- }
31
- if (debugLog) {
32
- const qsString = Object.entries(query).map(([k, v]) => `${k}=${v}`).join('&');
33
- debugLog.push({
34
- url: qsString ? `${url}?${qsString}` : url,
63
+ const makeRequest = async (forceRefresh) => {
64
+ const token = await getAccessToken(this, forceRefresh);
65
+ const options = {
35
66
  method,
36
- qs: { ...query },
37
- headers: { 'Accept': 'application/json', ...headers },
38
- body: body && Object.keys(body).length > 0 ? body : undefined,
39
- });
40
- }
67
+ url,
68
+ qs: query,
69
+ headers: {
70
+ 'Accept': 'application/json',
71
+ 'Authorization': `Bearer ${token}`,
72
+ ...headers,
73
+ },
74
+ json: true,
75
+ ...(timeout ? { timeout } : {}),
76
+ };
77
+ if (['POST', 'PUT', 'PATCH'].includes(method) && body && Object.keys(body).length > 0) {
78
+ options.body = body;
79
+ }
80
+ if (debugLog) {
81
+ const qsString = Object.entries(query).map(([k, v]) => `${k}=${v}`).join('&');
82
+ debugLog.push({
83
+ url: qsString ? `${url}?${qsString}` : url,
84
+ method,
85
+ qs: { ...query },
86
+ headers: { 'Accept': 'application/json', ...headers },
87
+ body: body && Object.keys(body).length > 0 ? body : undefined,
88
+ });
89
+ }
90
+ return await this.helpers.httpRequest(options);
91
+ };
41
92
  try {
42
- return await this.helpers.httpRequestWithAuthentication.call(this, 'HaloPSAApi', options);
93
+ return await makeRequest(false);
43
94
  }
44
95
  catch (error) {
45
96
  const message = error.message || '';
97
+ if (message.includes('OAuth2 token exchange')) {
98
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), message, { description: `The token exchange failed before the API request could be made.` });
99
+ }
46
100
  if (message.includes('text/html') || message.includes('Unsupported content type')) {
47
101
  throw new n8n_workflow_1.NodeOperationError(this.getNode(), `The server returned HTML instead of JSON. This usually means the Base URL is incorrect, authentication failed, or the endpoint does not exist. Verify your credentials and Base URL (${baseUrl}).`, { description: `Request: ${method} ${url}` });
48
102
  }
49
103
  if (message.includes('401') || message.includes('Unauthorized') || message.includes('invalid credentials')) {
50
- throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Authorization failed - please check your credentials', { description: `Request: ${method} ${url}` });
104
+ try {
105
+ return await makeRequest(true);
106
+ }
107
+ catch (retryError) {
108
+ const retryMessage = retryError.message || '';
109
+ const key = _cacheKey(credentials);
110
+ _tokenCache.delete(key);
111
+ if (retryMessage.includes('OAuth2 token exchange')) {
112
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), retryMessage, { description: `The token exchange failed on retry.` });
113
+ }
114
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Authorization failed - the API returned 401. Verify your Base URL (${baseUrl}) and that the app registration has the correct API permissions.`, { description: `Request: ${method} ${url} — ${retryMessage}` });
115
+ }
51
116
  }
52
117
  throw error;
53
118
  }
54
119
  }
55
120
  async function apiRequestAllItems(method, resource, body = {}, query = {}, headers = {}, pagination = {}, debug = false, timeout) {
56
- var _a, _b, _c;
121
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
57
122
  const returnData = [];
58
123
  const debugLog = [];
59
124
  const mode = pagination.paginationMode || 'offset';
@@ -62,12 +127,27 @@ async function apiRequestAllItems(method, resource, body = {}, query = {}, heade
62
127
  const interval = pagination.requestInterval || 0;
63
128
  let currentPage = 0;
64
129
  let lastFirstItem = null;
130
+ if (debug) {
131
+ debugLog.push({
132
+ _paginationConfig: {
133
+ mode,
134
+ dataPath: dataPath || '(root)',
135
+ maxPages: maxPages || 'unlimited',
136
+ paginationInput: { ...pagination },
137
+ },
138
+ });
139
+ }
65
140
  if (mode === 'offset') {
66
- const pageParam = pagination.pageParam || 'page';
67
- const pageSize = pagination.pageSize || 50;
68
- const sizeParam = pagination.sizeParam || '';
69
- let paramValue = (_b = pagination.startValue) !== null && _b !== void 0 ? _b : 1;
70
- const increment = (_c = pagination.increment) !== null && _c !== void 0 ? _c : 1;
141
+ const pageParam = (_b = pagination.pageParam) !== null && _b !== void 0 ? _b : 'page';
142
+ const pageSize = (_c = pagination.pageSize) !== null && _c !== void 0 ? _c : 50;
143
+ const sizeParam = (_d = pagination.sizeParam) !== null && _d !== void 0 ? _d : '';
144
+ let paramValue = (_e = pagination.startValue) !== null && _e !== void 0 ? _e : 1;
145
+ const increment = (_f = pagination.increment) !== null && _f !== void 0 ? _f : 1;
146
+ if (debug) {
147
+ debugLog.push({
148
+ _offsetConfig: { pageParam, pageSize, sizeParam: sizeParam || '(none)', startValue: paramValue, increment },
149
+ });
150
+ }
71
151
  if (sizeParam) {
72
152
  query[sizeParam] = String(pageSize);
73
153
  }
@@ -76,83 +156,137 @@ async function apiRequestAllItems(method, resource, body = {}, query = {}, heade
76
156
  const responseData = await apiRequest.call(this, method, resource, body, query, headers, debug ? debugLog : undefined, timeout);
77
157
  const items = dataPath ? getNestedValue(responseData, dataPath) : responseData;
78
158
  if (Array.isArray(items)) {
79
- if (items.length === 0)
159
+ if (items.length === 0) {
160
+ if (debug)
161
+ debugLog.push({ _paginationStop: 'empty array', page: currentPage });
80
162
  break;
163
+ }
81
164
  const firstItemKey = JSON.stringify(items[0]);
82
- if (lastFirstItem !== null && firstItemKey === lastFirstItem)
165
+ if (lastFirstItem !== null && firstItemKey === lastFirstItem) {
166
+ if (debug)
167
+ debugLog.push({ _paginationStop: 'duplicate first item', page: currentPage });
83
168
  break;
169
+ }
84
170
  lastFirstItem = firstItemKey;
85
171
  returnData.push(...items);
86
- if (sizeParam && items.length < pageSize)
172
+ if (sizeParam && items.length < pageSize) {
173
+ if (debug)
174
+ debugLog.push({ _paginationStop: 'partial page (last page)', page: currentPage, itemsOnPage: items.length, pageSize });
87
175
  break;
176
+ }
88
177
  }
89
178
  else if (items !== null && items !== undefined) {
90
179
  returnData.push(items);
180
+ if (debug)
181
+ debugLog.push({ _paginationStop: 'non-array response', page: currentPage });
91
182
  break;
92
183
  }
93
184
  else {
185
+ if (debug)
186
+ debugLog.push({ _paginationStop: 'null/undefined items', page: currentPage, dataPath });
94
187
  break;
95
188
  }
96
189
  paramValue += increment;
97
190
  currentPage++;
98
- if (maxPages > 0 && currentPage >= maxPages)
191
+ if (debug)
192
+ debugLog.push({ _paginationPage: currentPage, itemsSoFar: returnData.length, nextParamValue: paramValue });
193
+ if (maxPages > 0 && currentPage >= maxPages) {
194
+ if (debug)
195
+ debugLog.push({ _paginationStop: 'maxPages reached', page: currentPage });
99
196
  break;
197
+ }
100
198
  if (interval > 0)
101
199
  await new Promise(r => setTimeout(r, interval));
102
200
  } while (true);
103
201
  }
104
202
  else if (mode === 'cursor') {
105
- const cursorParam = pagination.cursorParam || 'cursor';
106
- const cursorPath = pagination.cursorPath || '';
107
- const pageSize = pagination.pageSize || 50;
108
- const sizeParam = pagination.sizeParam || '';
203
+ const cursorParam = (_g = pagination.cursorParam) !== null && _g !== void 0 ? _g : 'cursor';
204
+ const cursorPath = (_h = pagination.cursorPath) !== null && _h !== void 0 ? _h : '';
205
+ const pageSize = (_j = pagination.pageSize) !== null && _j !== void 0 ? _j : 50;
206
+ const sizeParam = (_k = pagination.sizeParam) !== null && _k !== void 0 ? _k : '';
109
207
  let cursor = null;
208
+ if (debug) {
209
+ debugLog.push({
210
+ _cursorConfig: { cursorParam, cursorPath: cursorPath || '(not set)', pageSize, sizeParam: sizeParam || '(none)' },
211
+ });
212
+ }
110
213
  if (sizeParam) {
111
214
  query[sizeParam] = String(pageSize);
112
215
  }
113
216
  do {
114
217
  if (cursor) {
115
218
  query[cursorParam] = cursor;
219
+ if (debug)
220
+ debugLog.push({ _cursorSending: { param: cursorParam, value: cursor } });
221
+ }
222
+ else if (debug && currentPage === 0) {
223
+ debugLog.push({ _cursorInfo: 'First page — no cursor sent yet' });
116
224
  }
117
225
  const responseData = await apiRequest.call(this, method, resource, body, query, headers, debug ? debugLog : undefined, timeout);
118
226
  const items = dataPath ? getNestedValue(responseData, dataPath) : responseData;
119
227
  if (Array.isArray(items)) {
120
- if (items.length === 0)
228
+ if (items.length === 0) {
229
+ if (debug)
230
+ debugLog.push({ _paginationStop: 'empty array', page: currentPage });
121
231
  break;
232
+ }
122
233
  const firstItemKey = JSON.stringify(items[0]);
123
- if (lastFirstItem !== null && firstItemKey === lastFirstItem)
234
+ if (lastFirstItem !== null && firstItemKey === lastFirstItem) {
235
+ if (debug)
236
+ debugLog.push({ _paginationStop: 'duplicate first item', page: currentPage });
124
237
  break;
238
+ }
125
239
  lastFirstItem = firstItemKey;
126
240
  returnData.push(...items);
127
- if (sizeParam && items.length < pageSize)
241
+ if (sizeParam && items.length < pageSize) {
242
+ if (debug)
243
+ debugLog.push({ _paginationStop: 'partial page (last page)', page: currentPage, itemsOnPage: items.length, pageSize });
128
244
  break;
245
+ }
129
246
  }
130
247
  else if (items !== null && items !== undefined) {
131
248
  returnData.push(items);
249
+ if (debug)
250
+ debugLog.push({ _paginationStop: 'non-array response', page: currentPage });
132
251
  break;
133
252
  }
134
253
  else {
254
+ if (debug)
255
+ debugLog.push({ _paginationStop: 'null/undefined items — check dataPath', page: currentPage, dataPath });
135
256
  break;
136
257
  }
137
258
  cursor = cursorPath ? getNestedValue(responseData, cursorPath) : null;
138
259
  if (debug) {
139
- debugLog.push({ _paginationExtracted: { cursorPath, cursorValue: cursor } });
260
+ debugLog.push({ _cursorExtracted: { cursorPath, cursorValue: cursor !== null && cursor !== void 0 ? cursor : '(not found — pagination will stop)' } });
140
261
  }
141
262
  currentPage++;
142
- if (maxPages > 0 && currentPage >= maxPages)
263
+ if (maxPages > 0 && currentPage >= maxPages) {
264
+ if (debug)
265
+ debugLog.push({ _paginationStop: 'maxPages reached', page: currentPage });
143
266
  break;
144
- if (!cursor)
267
+ }
268
+ if (!cursor) {
269
+ if (debug)
270
+ debugLog.push({ _paginationStop: 'no cursor in response — end of data or cursorPath is wrong', page: currentPage, cursorPath });
145
271
  break;
272
+ }
273
+ if (debug)
274
+ debugLog.push({ _paginationPage: currentPage, itemsSoFar: returnData.length });
146
275
  if (interval > 0)
147
276
  await new Promise(r => setTimeout(r, interval));
148
277
  } while (true);
149
278
  }
150
279
  else if (mode === 'url') {
151
- const nextUrlPath = pagination.nextUrlPath || '';
152
- const pageSize = pagination.pageSize || 50;
153
- const sizeParam = pagination.sizeParam || '';
280
+ const nextUrlPath = (_l = pagination.nextUrlPath) !== null && _l !== void 0 ? _l : '';
281
+ const pageSize = (_m = pagination.pageSize) !== null && _m !== void 0 ? _m : 50;
282
+ const sizeParam = (_o = pagination.sizeParam) !== null && _o !== void 0 ? _o : '';
154
283
  let nextUrl = null;
155
284
  let isFirstRequest = true;
285
+ if (debug) {
286
+ debugLog.push({
287
+ _urlConfig: { nextUrlPath: nextUrlPath || '(not set)', pageSize, sizeParam: sizeParam || '(none)' },
288
+ });
289
+ }
156
290
  if (sizeParam) {
157
291
  query[sizeParam] = String(pageSize);
158
292
  }
@@ -170,42 +304,68 @@ async function apiRequestAllItems(method, resource, body = {}, query = {}, heade
170
304
  parsed.searchParams.forEach((v, k) => { mergedQuery[k] = v; });
171
305
  nextResource = parsed.origin + parsed.pathname;
172
306
  }
307
+ if (debug)
308
+ debugLog.push({ _urlFollowing: nextUrl });
173
309
  responseData = await apiRequest.call(this, method, nextResource, body, mergedQuery, headers, debug ? debugLog : undefined, timeout);
174
310
  }
175
311
  const items = dataPath ? getNestedValue(responseData, dataPath) : responseData;
176
312
  if (Array.isArray(items)) {
177
- if (items.length === 0)
313
+ if (items.length === 0) {
314
+ if (debug)
315
+ debugLog.push({ _paginationStop: 'empty array', page: currentPage });
178
316
  break;
317
+ }
179
318
  const firstItemKey = JSON.stringify(items[0]);
180
- if (lastFirstItem !== null && firstItemKey === lastFirstItem)
319
+ if (lastFirstItem !== null && firstItemKey === lastFirstItem) {
320
+ if (debug)
321
+ debugLog.push({ _paginationStop: 'duplicate first item', page: currentPage });
181
322
  break;
323
+ }
182
324
  lastFirstItem = firstItemKey;
183
325
  returnData.push(...items);
184
- if (sizeParam && items.length < pageSize)
326
+ if (sizeParam && items.length < pageSize) {
327
+ if (debug)
328
+ debugLog.push({ _paginationStop: 'partial page (last page)', page: currentPage, itemsOnPage: items.length, pageSize });
185
329
  break;
330
+ }
186
331
  }
187
332
  else if (items !== null && items !== undefined) {
188
333
  returnData.push(items);
334
+ if (debug)
335
+ debugLog.push({ _paginationStop: 'non-array response', page: currentPage });
189
336
  break;
190
337
  }
191
338
  else {
339
+ if (debug)
340
+ debugLog.push({ _paginationStop: 'null/undefined items — check dataPath', page: currentPage, dataPath });
192
341
  break;
193
342
  }
194
343
  nextUrl = nextUrlPath ? getNestedValue(responseData, nextUrlPath) : null;
195
344
  if (debug) {
196
- debugLog.push({ _paginationExtracted: { nextUrlPath, nextUrlValue: nextUrl } });
345
+ debugLog.push({ _urlExtracted: { nextUrlPath, nextUrlValue: nextUrl !== null && nextUrl !== void 0 ? nextUrl : '(not found — pagination will stop)' } });
197
346
  }
198
347
  currentPage++;
199
- if (maxPages > 0 && currentPage >= maxPages)
348
+ if (maxPages > 0 && currentPage >= maxPages) {
349
+ if (debug)
350
+ debugLog.push({ _paginationStop: 'maxPages reached', page: currentPage });
200
351
  break;
201
- if (!nextUrl)
352
+ }
353
+ if (!nextUrl) {
354
+ if (debug)
355
+ debugLog.push({ _paginationStop: 'no next URL in response', page: currentPage, nextUrlPath });
202
356
  break;
357
+ }
358
+ if (debug)
359
+ debugLog.push({ _paginationPage: currentPage, itemsSoFar: returnData.length });
203
360
  if (interval > 0)
204
361
  await new Promise(r => setTimeout(r, interval));
205
362
  } while (true);
206
363
  }
364
+ if (debug) {
365
+ debugLog.push({ _paginationSummary: { mode, totalItems: returnData.length, totalPages: currentPage + 1 } });
366
+ }
207
367
  if (debug && debugLog.length > 0) {
208
- returnData.unshift({ __debugLog: debugLog });
368
+ returnData.unshift({ __debug: debugLog });
209
369
  }
210
370
  return returnData;
211
371
  }
@@ -1 +1 @@
1
- {"version":3,"file":"GenericFunctions.js","sourceRoot":"","sources":["../../../nodes/HaloPSA/GenericFunctions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"GenericFunctions.js","sourceRoot":"","sources":["../../../nodes/HaloPSA/GenericFunctions.ts"],"names":[],"mappings":"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"}