@joshuanode/n8n-nodes-sophos-central 0.5.2 → 0.5.4

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
@@ -26,6 +26,7 @@ Community node for the **Sophos Central Firewall Management API** — built for
26
26
  | **Health Checks** | Retrieve connection and managing status |
27
27
  | **Partner APIs** | Billing usage, admin management, roles (MSP only) |
28
28
  | **Tenant Management** | Create, get, list tenant organizations (MSP only) |
29
+ | **Diagnostics** | Confirm account scope, regions, tenant access, and licensing mode |
29
30
 
30
31
  ---
31
32
 
@@ -58,6 +59,8 @@ For managing multiple tenant accounts:
58
59
  | Tenant ID | Leave empty |
59
60
 
60
61
  > **Tip**: Leave the **Tenant** field empty in operations to aggregate data from **all managed tenants**.
62
+ >
63
+ > **Licensing note**: Sophos currently rejects its documented partner-scoped firewall-licensing request. This node automatically uses tenant-scoped licensing calls for each managed tenant instead.
61
64
 
62
65
  ### Organization
63
66
 
@@ -110,6 +113,19 @@ For managing a single account:
110
113
  | -------------- | ----------------------------- |
111
114
  | **Get Health** | Retrieve status for firewalls |
112
115
 
116
+ ### Licensing
117
+
118
+ | Operation | Description |
119
+ | --- | --- |
120
+ | **Get Firewall License(s)** | Retrieve firewall subscriptions across the Partner's managed tenants or a single organization |
121
+ | **Get Many Licenses** | Retrieve tenant license records; Partner credentials are automatically expanded across tenants |
122
+
123
+ ### Diagnostic
124
+
125
+ | Operation | Description |
126
+ | --- | --- |
127
+ | **Connection Check** | Returns Sophos identity type, Partner ID, tenant count, regions, and active licensing mode |
128
+
113
129
  ### Organization (Partner Only)
114
130
 
115
131
  | Operation | Description |
@@ -125,7 +141,7 @@ For managing a single account:
125
141
  | **Create Admin** | Create a new partner administrator |
126
142
  | **Delete Role Assignment** | Remove a role assignment from an admin |
127
143
  | **Get Admin** | Get a specific partner administrator |
128
- | **Get Billing Usage** | Monthly usage report for billing |
144
+ | **Get Billing Usage** | Monthly usage report; months with no Sophos report return an empty result |
129
145
  | **Get Many Admins** | List all partner administrators |
130
146
  | **Get Many Roles** | List available roles and permission sets |
131
147
  | **Get Role Assignments** | Get all role assignments for an admin |
@@ -147,7 +163,8 @@ For managing a single account:
147
163
  ```
148
164
 
149
165
  - **Automatic Region Routing**: Caches tenant-to-region mapping
150
- - **Token Caching**: Caches OAuth tokens for 5 minutes
166
+ - **Token Caching**: Reuses OAuth tokens until shortly before expiry
167
+ - **Transient API Retries**: Retries rate-limit and server errors with exponential backoff
151
168
 
152
169
  ---
153
170
 
@@ -5,7 +5,7 @@ class SophosCentralApi {
5
5
  constructor() {
6
6
  this.name = 'sophosCentralApi';
7
7
  this.displayName = 'Sophos Central API';
8
- this.icon = 'file:sophos-central.svg';
8
+ this.icon = 'file:sophosCentral.svg';
9
9
  this.documentationUrl = 'https://developer.sophos.com/getting-started';
10
10
  this.properties = [
11
11
  {
@@ -1 +1 @@
1
- {"version":3,"file":"SophosCentralApi.credentials.js","sourceRoot":"","sources":["../../credentials/SophosCentralApi.credentials.ts"],"names":[],"mappings":";;;AAEA,MAAa,gBAAgB;IAA7B;QACC,SAAI,GAAG,kBAAkB,CAAC;QAC1B,gBAAW,GAAG,oBAAoB,CAAC;QACnC,SAAI,GAAS,yBAAyB,CAAC;QACvC,qBAAgB,GAAG,8CAA8C,CAAC;QAElE,eAAU,GAAsB;YAC/B;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,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAC/B,OAAO,EAAE,EAAE;gBACX,QAAQ,EAAE,IAAI;aACd;YACD;gBACC,WAAW,EAAE,cAAc;gBAC3B,IAAI,EAAE,aAAa;gBACnB,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE;oBACR;wBACC,IAAI,EAAE,wBAAwB;wBAC9B,KAAK,EAAE,SAAS;wBAChB,WAAW,EAAE,6CAA6C;qBAC1D;oBACD;wBACC,IAAI,EAAE,8BAA8B;wBACpC,KAAK,EAAE,cAAc;wBACrB,WAAW,EAAE,2BAA2B;qBACxC;iBACD;gBACD,OAAO,EAAE,SAAS;aAClB;YACD;gBACC,WAAW,EAAE,WAAW;gBACxB,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,EAAE;gBACX,cAAc,EAAE;oBACf,IAAI,EAAE;wBACL,WAAW,EAAE,CAAC,cAAc,CAAC;qBAC7B;iBACD;gBACD,WAAW,EAAE,4CAA4C;gBACzD,WAAW,EAAE,sCAAsC;aACnD;SACD,CAAC;QAEF,SAAI,GAA2B;YAC9B,OAAO,EAAE;gBACR,MAAM,EAAE,MAAM;gBACd,GAAG,EAAE,2CAA2C;gBAChD,OAAO,EAAE;oBACR,cAAc,EAAE,mCAAmC;iBACnD;gBACD,IAAI,EAAE,6KAA6K;gBACnL,IAAI,EAAE,IAAI;aACV;SACD,CAAC;IACH,CAAC;CAAA;AAlED,4CAkEC"}
1
+ {"version":3,"file":"SophosCentralApi.credentials.js","sourceRoot":"","sources":["../../credentials/SophosCentralApi.credentials.ts"],"names":[],"mappings":";;;AAEA,MAAa,gBAAgB;IAA7B;QACC,SAAI,GAAG,kBAAkB,CAAC;QAC1B,gBAAW,GAAG,oBAAoB,CAAC;QACnC,SAAI,GAAS,wBAAwB,CAAC;QACtC,qBAAgB,GAAG,8CAA8C,CAAC;QAElE,eAAU,GAAsB;YAC/B;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,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAC/B,OAAO,EAAE,EAAE;gBACX,QAAQ,EAAE,IAAI;aACd;YACD;gBACC,WAAW,EAAE,cAAc;gBAC3B,IAAI,EAAE,aAAa;gBACnB,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE;oBACR;wBACC,IAAI,EAAE,wBAAwB;wBAC9B,KAAK,EAAE,SAAS;wBAChB,WAAW,EAAE,6CAA6C;qBAC1D;oBACD;wBACC,IAAI,EAAE,8BAA8B;wBACpC,KAAK,EAAE,cAAc;wBACrB,WAAW,EAAE,2BAA2B;qBACxC;iBACD;gBACD,OAAO,EAAE,SAAS;aAClB;YACD;gBACC,WAAW,EAAE,WAAW;gBACxB,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,EAAE;gBACX,cAAc,EAAE;oBACf,IAAI,EAAE;wBACL,WAAW,EAAE,CAAC,cAAc,CAAC;qBAC7B;iBACD;gBACD,WAAW,EAAE,4CAA4C;gBACzD,WAAW,EAAE,sCAAsC;aACnD;SACD,CAAC;QAEF,SAAI,GAA2B;YAC9B,OAAO,EAAE;gBACR,MAAM,EAAE,MAAM;gBACd,GAAG,EAAE,2CAA2C;gBAChD,OAAO,EAAE;oBACR,cAAc,EAAE,mCAAmC;iBACnD;gBACD,IAAI,EAAE,6KAA6K;gBACnL,IAAI,EAAE,IAAI;aACV;SACD,CAAC;IACH,CAAC;CAAA;AAlED,4CAkEC"}
@@ -0,0 +1,4 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 315">
3
+ <image href="sophosCentral.png" width="600" height="315" preserveAspectRatio="xMidYMid meet"/>
4
+ </svg>
@@ -3,6 +3,8 @@ import type { IAuthToken, ISophosCentralCredentials, ITenant } from './types';
3
3
  export declare function getAuthContext(this: IExecuteFunctions | ILoadOptionsFunctions | IHookFunctions, credentials: ISophosCentralCredentials): Promise<IAuthToken>;
4
4
  export declare function getAccessToken(this: IExecuteFunctions | ILoadOptionsFunctions | IHookFunctions, credentials: ISophosCentralCredentials): Promise<string>;
5
5
  export declare function getWhoAmI(this: IExecuteFunctions | ILoadOptionsFunctions | IHookFunctions, token: string): Promise<IAuthToken>;
6
+ export declare function sophosCentralLicensingApiRequest(this: IExecuteFunctions, endpoint: string, query?: IDataObject, tenantId?: string): Promise<IDataObject>;
7
+ export declare function sophosCentralLicensingApiRequestAllItems(this: IExecuteFunctions, endpoint: string, tenantId?: string): Promise<IDataObject[]>;
6
8
  export declare function getTenantList(this: IExecuteFunctions | ILoadOptionsFunctions | IHookFunctions, credentials: ISophosCentralCredentials): Promise<ITenant[]>;
7
9
  export declare function resolveTenantId(this: IExecuteFunctions | ILoadOptionsFunctions | IHookFunctions, tenantIdFromParameters: string | undefined): Promise<string>;
8
10
  export declare function getTenantApiHost(this: IExecuteFunctions | ILoadOptionsFunctions | IHookFunctions, tenantId: string): Promise<string>;
@@ -3,6 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getAuthContext = getAuthContext;
4
4
  exports.getAccessToken = getAccessToken;
5
5
  exports.getWhoAmI = getWhoAmI;
6
+ exports.sophosCentralLicensingApiRequest = sophosCentralLicensingApiRequest;
7
+ exports.sophosCentralLicensingApiRequestAllItems = sophosCentralLicensingApiRequestAllItems;
6
8
  exports.getTenantList = getTenantList;
7
9
  exports.resolveTenantId = resolveTenantId;
8
10
  exports.getTenantApiHost = getTenantApiHost;
@@ -17,6 +19,23 @@ const TENANT_HOST_CACHE_TTL = 24 * 60 * 60 * 1000;
17
19
  function getCacheKey(credentials) {
18
20
  return `${credentials.clientId}:${credentials.clientSecret}`;
19
21
  }
22
+ async function sophosHttpRequestWithRetry(options) {
23
+ var _a, _b, _c, _d;
24
+ for (let attempt = 0; attempt < 3; attempt += 1) {
25
+ try {
26
+ return (await this.helpers.httpRequest(options));
27
+ }
28
+ catch (error) {
29
+ const err = error;
30
+ const status = err.statusCode || ((_a = err.response) === null || _a === void 0 ? void 0 : _a.status) || ((_b = err.response) === null || _b === void 0 ? void 0 : _b.statusCode);
31
+ if ((status !== 429 && (!status || status < 500)) || attempt === 2)
32
+ throw error;
33
+ const retryAfter = Number((_d = (_c = err.response) === null || _c === void 0 ? void 0 : _c.headers) === null || _d === void 0 ? void 0 : _d['retry-after']);
34
+ await sleep(Number.isFinite(retryAfter) ? retryAfter * 1000 : 1000 * 2 ** attempt);
35
+ }
36
+ }
37
+ throw new Error('Unreachable retry state');
38
+ }
20
39
  function joinUrl(baseUrl, endpoint) {
21
40
  const normalizedBase = baseUrl.startsWith('http://') || baseUrl.startsWith('https://')
22
41
  ? baseUrl
@@ -37,8 +56,12 @@ async function getAuthContext(credentials) {
37
56
  token,
38
57
  expiresAt: whoami.expiresAt,
39
58
  partnerId: whoami.partnerId,
59
+ idType: whoami.idType,
40
60
  dataRegion: whoami.dataRegion,
41
61
  };
62
+ if (credentials.accountType === 'partner' && ctx.idType !== 'partner') {
63
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), `This credential is configured as Partner, but Sophos whoami returned '${ctx.idType || 'no idType'}'. Create or select Partner API credentials, then try again.`);
64
+ }
42
65
  tokenCache.set(cacheKey, ctx);
43
66
  return ctx;
44
67
  }
@@ -93,6 +116,7 @@ async function getWhoAmI(token) {
93
116
  token,
94
117
  expiresAt: Date.now() + 3600 * 1000,
95
118
  partnerId: response.id,
119
+ idType: response.idType,
96
120
  dataRegion: dataRegion,
97
121
  };
98
122
  }
@@ -104,6 +128,87 @@ async function getWhoAmI(token) {
104
128
  });
105
129
  }
106
130
  }
131
+ function getSophosErrorDescription(error) {
132
+ var _a, _b;
133
+ const err = error;
134
+ const details = ((_a = err.response) === null || _a === void 0 ? void 0 : _a.data) || ((_b = err.response) === null || _b === void 0 ? void 0 : _b.body) || err.error;
135
+ const message = (details === null || details === void 0 ? void 0 : details.message) || (details === null || details === void 0 ? void 0 : details.error) || err.message || 'Unknown error';
136
+ const correlationId = details === null || details === void 0 ? void 0 : details.correlationId;
137
+ const code = details === null || details === void 0 ? void 0 : details.code;
138
+ return [
139
+ message,
140
+ code ? `Code: ${code}` : undefined,
141
+ correlationId ? `Correlation ID: ${correlationId}` : undefined,
142
+ ]
143
+ .filter((value) => Boolean(value))
144
+ .join(' | ');
145
+ }
146
+ async function sophosCentralLicensingApiRequest(endpoint, query = {}, tenantId) {
147
+ var _a, _b, _c;
148
+ const credentials = (await this.getCredentials('sophosCentralApi'));
149
+ const ctx = await getAuthContext.call(this, credentials);
150
+ const effectiveTenantId = tenantId || (credentials.accountType === 'organization' ? credentials.tenantId : undefined);
151
+ const headers = {
152
+ Authorization: `Bearer ${ctx.token}`,
153
+ Accept: 'application/json',
154
+ };
155
+ if (effectiveTenantId) {
156
+ headers['X-Tenant-ID'] = effectiveTenantId;
157
+ }
158
+ else if (credentials.accountType === 'partner' && ctx.partnerId) {
159
+ headers['X-Partner-ID'] = ctx.partnerId;
160
+ }
161
+ else {
162
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'A Tenant ID is required for this Licensing API request.');
163
+ }
164
+ try {
165
+ return await sophosHttpRequestWithRetry.call(this, {
166
+ method: 'GET',
167
+ url: `https://api.central.sophos.com/licenses/v1${endpoint}`,
168
+ headers,
169
+ qs: query,
170
+ json: true,
171
+ });
172
+ }
173
+ catch (error) {
174
+ const err = error;
175
+ const statusCode = err.statusCode || ((_a = err.response) === null || _a === void 0 ? void 0 : _a.status) || ((_b = err.response) === null || _b === void 0 ? void 0 : _b.statusCode) || 'Unknown';
176
+ const scope = effectiveTenantId ? `tenant ${effectiveTenantId}` : `partner ${ctx.partnerId}`;
177
+ const description = `${getSophosErrorDescription(error)} | Request scope: ${scope}`;
178
+ const errorResponse = {
179
+ ...error,
180
+ response: {
181
+ ...err.response,
182
+ data: {
183
+ ...(_c = err.response) === null || _c === void 0 ? void 0 : _c.data,
184
+ message: description,
185
+ },
186
+ },
187
+ };
188
+ throw new n8n_workflow_1.NodeApiError(this.getNode(), errorResponse, {
189
+ message: `Sophos Licensing API error (Status ${statusCode})`,
190
+ description,
191
+ });
192
+ }
193
+ }
194
+ async function sophosCentralLicensingApiRequestAllItems(endpoint, tenantId) {
195
+ const items = [];
196
+ let page = 1;
197
+ let totalPages = 1;
198
+ do {
199
+ const response = await sophosCentralLicensingApiRequest.call(this, endpoint, {
200
+ page,
201
+ pageSize: 100,
202
+ pageTotal: true,
203
+ }, tenantId);
204
+ const pageItems = response.items || [];
205
+ items.push(...pageItems);
206
+ const pages = response.pages;
207
+ totalPages = typeof (pages === null || pages === void 0 ? void 0 : pages.total) === 'number' ? pages.total : page;
208
+ page += 1;
209
+ } while (page <= totalPages);
210
+ return items;
211
+ }
107
212
  async function getTenantList(credentials) {
108
213
  if (credentials.accountType !== 'partner') {
109
214
  return [];
@@ -182,7 +287,7 @@ async function getTenantApiHost(tenantId) {
182
287
  });
183
288
  return apiHost;
184
289
  }
185
- catch (error) {
290
+ catch {
186
291
  tenantHostCache.delete(tenantId);
187
292
  throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Could not find tenant '${tenantId}'. Ensure it exists and is accessible by this Partner account.`);
188
293
  }
@@ -216,7 +321,7 @@ async function sophosCentralApiRequest(method, endpoint, body = {}, query = {},
216
321
  options.body = body;
217
322
  }
218
323
  try {
219
- return await this.helpers.httpRequest(options);
324
+ return await sophosHttpRequestWithRetry.call(this, options);
220
325
  }
221
326
  catch (error) {
222
327
  const errorResponse = (error || {});
@@ -292,6 +397,7 @@ async function getAllTenantsFirewalls(credentials, returnAll, limit) {
292
397
  tenantFirewalls = response.items || [];
293
398
  }
294
399
  for (const firewall of tenantFirewalls) {
400
+ firewall.tenantId = tenant.id;
295
401
  firewall.tenant = {
296
402
  id: tenant.id,
297
403
  name: tenant.name,
@@ -1 +1 @@
1
- {"version":3,"file":"GenericFunctions.js","sourceRoot":"","sources":["../../../nodes/SophosCentral/GenericFunctions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"GenericFunctions.js","sourceRoot":"","sources":["../../../nodes/SophosCentral/GenericFunctions.ts"],"names":[],"mappings":"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"}
@@ -47,6 +47,11 @@ class SophosCentral {
47
47
  name: 'Alert',
48
48
  value: 'alert',
49
49
  },
50
+ {
51
+ name: 'Diagnostic',
52
+ value: 'diagnostic',
53
+ description: 'Validate account scope, tenant access, and API routing',
54
+ },
50
55
  {
51
56
  name: 'Firewall',
52
57
  value: 'firewall',
@@ -82,6 +87,15 @@ class SophosCentral {
82
87
  },
83
88
  ...descriptions_1.operationFields,
84
89
  ...descriptions_1.resourceFields,
90
+ {
91
+ displayName: 'Operation',
92
+ name: 'operation',
93
+ type: 'options',
94
+ noDataExpression: true,
95
+ default: 'connectionCheck',
96
+ displayOptions: { show: { resource: ['diagnostics'] } },
97
+ options: [{ name: 'Connection Check', value: 'connectionCheck', action: 'Run connection diagnostics' }],
98
+ },
85
99
  ],
86
100
  };
87
101
  this.methods = {
@@ -131,7 +145,7 @@ class SophosCentral {
131
145
  try {
132
146
  response = await GenericFunctions_1.sophosCentralApiRequest.call(this, 'GET', '/firewall/v1/firewalls', {}, { page, pageSize: 100, pageTotal: true }, tenantId);
133
147
  }
134
- catch (error) {
148
+ catch {
135
149
  return { results: [] };
136
150
  }
137
151
  const responseData = response;
@@ -259,6 +273,7 @@ class SophosCentral {
259
273
  };
260
274
  }
261
275
  async execute() {
276
+ var _a;
262
277
  const items = this.getInputData();
263
278
  const returnData = [];
264
279
  const resource = this.getNodeParameter('resource', 0);
@@ -273,9 +288,16 @@ class SophosCentral {
273
288
  try {
274
289
  tenantId = await GenericFunctions_1.resolveTenantId.call(this, tenantIdRaw || undefined);
275
290
  }
276
- catch (error) {
291
+ catch {
277
292
  }
278
293
  }
294
+ if (resource === 'diagnostic') {
295
+ const credentials = (await this.getCredentials('sophosCentralApi'));
296
+ const ctx = await GenericFunctions_1.getAuthContext.call(this, credentials);
297
+ const tenants = credentials.accountType === 'partner' ? await GenericFunctions_1.getTenantList.call(this, credentials) : [];
298
+ const regions = [...new Set(tenants.map((tenant) => tenant.dataRegion))];
299
+ returnData.push({ json: { accountType: credentials.accountType, sophosIdType: ctx.idType, partnerId: ctx.partnerId, apiHost: ctx.dataRegion, tenantCount: tenants.length, regions, licensingMode: credentials.accountType === 'partner' ? 'tenant-scoped fallback' : 'tenant-scoped' }, pairedItem: { item: i } });
300
+ }
279
301
  if (resource === 'firewall') {
280
302
  if (operation === 'get') {
281
303
  const firewallId = getResourceLocatorValue(this.getNodeParameter('firewallId', i));
@@ -378,7 +400,7 @@ class SophosCentral {
378
400
  returnData.push({ json: combined, pairedItem: { item: i } });
379
401
  }
380
402
  }
381
- catch (e) {
403
+ catch {
382
404
  continue;
383
405
  }
384
406
  }
@@ -512,8 +534,12 @@ class SophosCentral {
512
534
  if (resource === 'firewallGroup') {
513
535
  if (operation === 'get') {
514
536
  const groupId = getResourceLocatorValue(this.getNodeParameter('firewallGroupId', i));
515
- const responseData = await GenericFunctions_1.sophosCentralApiRequest.call(this, 'GET', `/firewall/v1/firewall-groups/${groupId}`, {}, {}, tenantId);
516
- returnData.push({ json: responseData, pairedItem: { item: i } });
537
+ const groups = await GenericFunctions_1.sophosCentralApiRequestAllItems.call(this, 'GET', '/firewall/v1/firewall-groups', {}, {}, tenantId);
538
+ const group = groups.find((item) => item.id === groupId);
539
+ if (!group) {
540
+ throw new n8n_workflow_1.NodeApiError(this.getNode(), { message: 'Firewall group not found in tenant' }, { httpCode: '404' });
541
+ }
542
+ returnData.push({ json: group, pairedItem: { item: i } });
517
543
  }
518
544
  if (operation === 'getAll') {
519
545
  const returnAll = this.getNodeParameter('returnAll', i);
@@ -602,41 +628,19 @@ class SophosCentral {
602
628
  }
603
629
  if (resource === 'licensing') {
604
630
  const credentials = (await this.getCredentials('sophosCentralApi'));
605
- const ctx = await GenericFunctions_1.getAuthContext.call(this, credentials);
606
- const headers = {
607
- Authorization: `Bearer ${ctx.token}`,
608
- Accept: 'application/json',
609
- };
610
- if (credentials.accountType === 'partner') {
611
- headers['X-Partner-ID'] = ctx.partnerId;
612
- }
613
- else if (credentials.tenantId) {
614
- headers['X-Tenant-ID'] = credentials.tenantId;
615
- }
616
631
  const returnAll = this.getNodeParameter('returnAll', i);
617
632
  if (operation === 'getFirewallLicense') {
618
633
  const serialNumber = this.getNodeParameter('serialNumber', i);
619
634
  let found;
620
- let page = 1;
621
- const pageSize = 100;
622
- let totalPages = 1;
623
- do {
624
- const response = (await this.helpers.httpRequest({
625
- method: 'GET',
626
- url: 'https://api.central.sophos.com/licenses/v1/licenses/firewalls',
627
- headers,
628
- qs: { page, pageSize, pageTotal: true },
629
- json: true,
630
- }));
631
- const items = response.items || [];
635
+ const tenantIds = credentials.accountType === 'partner'
636
+ ? (await GenericFunctions_1.getTenantList.call(this, credentials)).map((tenant) => tenant.id)
637
+ : [undefined];
638
+ for (const tenantId of tenantIds) {
639
+ const items = await GenericFunctions_1.sophosCentralLicensingApiRequestAllItems.call(this, '/licenses/firewalls', tenantId);
632
640
  found = items.find((fw) => fw.serialNumber === serialNumber);
633
641
  if (found)
634
642
  break;
635
- const pages = response.pages;
636
- totalPages =
637
- typeof (pages === null || pages === void 0 ? void 0 : pages.total) === 'number' ? pages.total : page;
638
- page += 1;
639
- } while (page <= totalPages);
643
+ }
640
644
  if (found) {
641
645
  returnData.push({ json: found, pairedItem: { item: i } });
642
646
  }
@@ -645,78 +649,51 @@ class SophosCentral {
645
649
  }
646
650
  }
647
651
  if (operation === 'getFirewallLicenses') {
652
+ const tenantIds = credentials.accountType === 'partner'
653
+ ? (await GenericFunctions_1.getTenantList.call(this, credentials)).map((tenant) => tenant.id)
654
+ : [undefined];
648
655
  if (returnAll) {
649
- let page = 1;
650
- const pageSize = 100;
651
- let totalPages = 1;
652
- do {
653
- const response = (await this.helpers.httpRequest({
654
- method: 'GET',
655
- url: 'https://api.central.sophos.com/licenses/v1/licenses/firewalls',
656
- headers,
657
- qs: { page, pageSize, pageTotal: true },
658
- json: true,
659
- }));
660
- const items = response.items || [];
656
+ for (const tenantId of tenantIds) {
657
+ const items = await GenericFunctions_1.sophosCentralLicensingApiRequestAllItems.call(this, '/licenses/firewalls', tenantId);
661
658
  for (const item of items) {
662
659
  returnData.push({ json: item, pairedItem: { item: i } });
663
660
  }
664
- const pages = response.pages;
665
- totalPages =
666
- typeof (pages === null || pages === void 0 ? void 0 : pages.total) === 'number' ? pages.total : page;
667
- page += 1;
668
- } while (page <= totalPages);
661
+ }
669
662
  }
670
663
  else {
671
664
  const limit = this.getNodeParameter('limit', i);
672
- const response = (await this.helpers.httpRequest({
673
- method: 'GET',
674
- url: 'https://api.central.sophos.com/licenses/v1/licenses/firewalls',
675
- headers,
676
- qs: { page: 1, pageSize: limit, pageTotal: false },
677
- json: true,
678
- }));
679
- const items = response.items || [];
680
- for (const item of items) {
681
- returnData.push({ json: item, pairedItem: { item: i } });
682
- }
683
- }
684
- }
685
- if (operation === 'getAllLicenses') {
686
- if (returnAll) {
687
- let page = 1;
688
- const pageSize = 100;
689
- let totalPages = 1;
690
- do {
691
- const response = (await this.helpers.httpRequest({
692
- method: 'GET',
693
- url: 'https://api.central.sophos.com/licenses/v1/licenses',
694
- headers,
695
- qs: { page, pageSize, pageTotal: true },
696
- json: true,
697
- }));
665
+ let returned = 0;
666
+ for (const tenantId of tenantIds) {
667
+ if (returned >= limit)
668
+ break;
669
+ const response = await GenericFunctions_1.sophosCentralLicensingApiRequest.call(this, '/licenses/firewalls', { page: 1, pageSize: Math.min(100, limit - returned), pageTotal: false }, tenantId);
698
670
  const items = response.items || [];
699
671
  for (const item of items) {
700
672
  returnData.push({ json: item, pairedItem: { item: i } });
673
+ returned += 1;
701
674
  }
702
- const pages = response.pages;
703
- totalPages =
704
- typeof (pages === null || pages === void 0 ? void 0 : pages.total) === 'number' ? pages.total : page;
705
- page += 1;
706
- } while (page <= totalPages);
675
+ }
707
676
  }
708
- else {
709
- const limit = this.getNodeParameter('limit', i);
710
- const response = (await this.helpers.httpRequest({
711
- method: 'GET',
712
- url: 'https://api.central.sophos.com/licenses/v1/licenses',
713
- headers,
714
- qs: { page: 1, pageSize: limit, pageTotal: false },
715
- json: true,
716
- }));
717
- const items = response.items || [];
718
- for (const item of items) {
719
- returnData.push({ json: item, pairedItem: { item: i } });
677
+ }
678
+ if (operation === 'getAllLicenses') {
679
+ const tenantIds = credentials.accountType === 'partner'
680
+ ? (await GenericFunctions_1.getTenantList.call(this, credentials)).map((tenant) => tenant.id)
681
+ : [credentials.tenantId];
682
+ const limit = returnAll ? undefined : this.getNodeParameter('limit', i);
683
+ let returned = 0;
684
+ for (const tenantId of tenantIds) {
685
+ if (!tenantId || (limit !== undefined && returned >= limit))
686
+ break;
687
+ const response = await GenericFunctions_1.sophosCentralLicensingApiRequest.call(this, '/licenses', {}, tenantId);
688
+ const licenses = response.licenses || [];
689
+ for (const license of licenses) {
690
+ if (limit !== undefined && returned >= limit)
691
+ break;
692
+ returnData.push({
693
+ json: { ...license, tenant: response.tenant },
694
+ pairedItem: { item: i },
695
+ });
696
+ returned += 1;
720
697
  }
721
698
  }
722
699
  }
@@ -848,17 +825,16 @@ class SophosCentral {
848
825
  if (billingFilters.tenantId) {
849
826
  qs.tenantId = billingFilters.tenantId;
850
827
  }
851
- const responseData = await this.helpers.httpRequest({
852
- method: 'GET',
853
- url: `https://api.central.sophos.com/partner/v1/billing/usage/${year}/${month}`,
854
- headers: {
855
- Authorization: `Bearer ${ctx.token}`,
856
- 'X-Partner-ID': ctx.partnerId,
857
- },
858
- qs,
859
- json: true,
860
- });
861
- returnData.push({ json: responseData, pairedItem: { item: i } });
828
+ try {
829
+ const responseData = await this.helpers.httpRequest({ method: 'GET', url: `https://api.central.sophos.com/partner/v1/billing/usage/${year}/${month}`, headers: { Authorization: `Bearer ${ctx.token}`, 'X-Partner-ID': ctx.partnerId }, qs, json: true });
830
+ returnData.push({ json: responseData, pairedItem: { item: i } });
831
+ }
832
+ catch (error) {
833
+ const status = error.statusCode || ((_a = error.response) === null || _a === void 0 ? void 0 : _a.status);
834
+ if (status !== 404)
835
+ throw error;
836
+ returnData.push({ json: { items: [], empty: true, message: `Sophos has no billing data for ${year}-${String(month).padStart(2, '0')}` }, pairedItem: { item: i } });
837
+ }
862
838
  }
863
839
  if (operation === 'getAllAdmins') {
864
840
  const returnAll = this.getNodeParameter('returnAll', i);