@joshuanode/n8n-nodes-sophos-central 0.5.2 → 0.5.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +19 -2
- package/dist/credentials/SophosCentralApi.credentials.js +1 -1
- package/dist/credentials/SophosCentralApi.credentials.js.map +1 -1
- package/dist/credentials/sophosCentral.png +0 -0
- package/dist/credentials/sophosCentral.svg +4 -0
- package/dist/nodes/SophosCentral/GenericFunctions.d.ts +2 -0
- package/dist/nodes/SophosCentral/GenericFunctions.js +108 -2
- package/dist/nodes/SophosCentral/GenericFunctions.js.map +1 -1
- package/dist/nodes/SophosCentral/SophosCentral.node.js +80 -104
- package/dist/nodes/SophosCentral/SophosCentral.node.js.map +1 -1
- package/dist/nodes/SophosCentral/descriptions/AlertDescription.js +7 -8
- package/dist/nodes/SophosCentral/descriptions/AlertDescription.js.map +1 -1
- package/dist/nodes/SophosCentral/descriptions/OrganizationDescription.js +4 -5
- package/dist/nodes/SophosCentral/descriptions/OrganizationDescription.js.map +1 -1
- package/dist/nodes/SophosCentral/descriptions/PartnerDescription.js +5 -4
- package/dist/nodes/SophosCentral/descriptions/PartnerDescription.js.map +1 -1
- package/dist/nodes/SophosCentral/sophosCentral.png +0 -0
- package/dist/nodes/SophosCentral/sophosCentral.svg +3 -17
- package/dist/nodes/SophosCentral/types.d.ts +1 -0
- package/dist/package.json +2 -2
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -2
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
|
|
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**:
|
|
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:
|
|
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,
|
|
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"}
|
|
Binary file
|
|
@@ -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
|
|
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
|
|
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":";;AA0DA,wCA+BC;AAED,wCAgCC;AAED,8BA2CC;AA+BD,4EAiEC;AAED,4FAwBC;AAED,sCA0CC;AAED,0CAoBC;AAED,4CAmEC;AAED,0DAsGC;AAED,0EAuCC;AAGD,wDAmDC;AAID,sBAIC;AA9mBD,+CAAgE;AAKhE,MAAM,UAAU,GAAG,IAAI,GAAG,EAAsB,CAAC;AAOjD,MAAM,eAAe,GAAG,IAAI,GAAG,EAA4B,CAAC;AAC5D,MAAM,qBAAqB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAElD,SAAS,WAAW,CAAC,WAAsC;IAC1D,OAAO,GAAG,WAAW,CAAC,QAAQ,IAAI,WAAW,CAAC,YAAY,EAAE,CAAC;AAC9D,CAAC;AAED,KAAK,UAAU,0BAA0B,CAExC,OAA4B;;IAE5B,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,CAAC,EAAE,CAAC;QACjD,IAAI,CAAC;YACJ,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAgB,CAAC;QACjE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,GAAG,GAAG,KAA4G,CAAC;YACzH,MAAM,MAAM,GAAG,GAAG,CAAC,UAAU,KAAI,MAAA,GAAG,CAAC,QAAQ,0CAAE,MAAM,CAAA,KAAI,MAAA,GAAG,CAAC,QAAQ,0CAAE,UAAU,CAAA,CAAC;YAClF,IAAI,CAAC,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,MAAM,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI,OAAO,KAAK,CAAC;gBAAE,MAAM,KAAK,CAAC;YAChF,MAAM,UAAU,GAAG,MAAM,CAAC,MAAA,MAAA,GAAG,CAAC,QAAQ,0CAAE,OAAO,0CAAG,aAAa,CAAC,CAAC,CAAC;YAClE,MAAM,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,OAAO,CAAC,CAAC;QACpF,CAAC;IACF,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;AAC5C,CAAC;AAED,SAAS,OAAO,CAAC,OAAe,EAAE,QAAgB;IACjD,MAAM,cAAc,GACnB,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC;QAC9D,CAAC,CAAC,OAAO;QACT,CAAC,CAAC,WAAW,OAAO,EAAE,CAAC;IAEzB,MAAM,IAAI,GAAG,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC;IACzF,MAAM,IAAI,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,EAAE,CAAC;IAClE,OAAO,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC;AACzB,CAAC;AAEM,KAAK,UAAU,cAAc,CAEnC,WAAsC;IAEtC,MAAM,QAAQ,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAExC,IAAI,MAAM,IAAI,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QAC3E,OAAO,MAAM,CAAC;IACf,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAC3D,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAEjD,MAAM,GAAG,GAAe;QACvB,KAAK;QACL,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,UAAU,EAAE,MAAM,CAAC,UAAU;KAC7B,CAAC;IAEF,IAAI,WAAW,CAAC,WAAW,KAAK,SAAS,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QACvE,MAAM,IAAI,iCAAkB,CAC3B,IAAI,CAAC,OAAO,EAAE,EACd,yEAAyE,GAAG,CAAC,MAAM,IAAI,WAAW,8DAA8D,CAChK,CAAC;IACH,CAAC;IAED,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IAC9B,OAAO,GAAG,CAAC;AACZ,CAAC;AAEM,KAAK,UAAU,cAAc,CAEnC,WAAsC;;IAEtC,MAAM,IAAI,GAAG,uDAAuD,kBAAkB,CACrF,WAAW,CAAC,QAAQ,CACpB,kBAAkB,kBAAkB,CAAC,WAAW,CAAC,YAAY,CAAC,EAAE,CAAC;IAElE,MAAM,OAAO,GAAwB;QACpC,MAAM,EAAE,MAAM;QACd,GAAG,EAAE,2CAA2C;QAChD,OAAO,EAAE;YACR,cAAc,EAAE,mCAAmC;SACnD;QACD,IAAI;QACJ,IAAI,EAAE,IAAI;KACV,CAAC;IAEF,IAAI,CAAC;QACJ,MAAM,QAAQ,GAAG,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAgB,CAAC;QAC1E,OAAO,QAAQ,CAAC,YAAsB,CAAC;IACxC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,MAAM,GAAG,GAAG,KAAoB,CAAC;QACjC,MAAM,aAAa,GAAG,CAAC,KAAK,IAAI,EAAE,CAAe,CAAC;QAClD,MAAM,IAAI,2BAAY,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE;YACrD,OAAO,EAAE,4CAA4C;YACrD,WAAW,EACV,CAAA,MAAA,GAAG,CAAC,iBAAiB,0CAAE,QAAQ,EAAE;iBACjC,MAAA,GAAG,CAAC,OAAO,0CAAE,QAAQ,EAAE,CAAA;gBACvB,4BAA4B;SAC7B,CAAC,CAAC;IACJ,CAAC;AACF,CAAC;AAEM,KAAK,UAAU,SAAS,CAE9B,KAAa;IAEb,MAAM,OAAO,GAAwB;QACpC,MAAM,EAAE,KAAK;QACb,GAAG,EAAE,0CAA0C;QAC/C,OAAO,EAAE;YACR,aAAa,EAAE,UAAU,KAAK,EAAE;SAChC;QACD,IAAI,EAAE,IAAI;KACV,CAAC;IAEF,IAAI,CAAC;QACJ,MAAM,QAAQ,GAAG,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAgB,CAAC;QAC1E,MAAM,QAAQ,GACZ,QAAwB,CAAC,QAAQ;YACjC,QAAwB,CAAC,WAAW,CAAC;YACrC,QAAwB,CAAC,SAAS,CAAC;QAErC,MAAM,UAAU,GACf,CAAC,QAAwB,aAAxB,QAAQ,uBAAR,QAAQ,CAAkB,UAAU;aACpC,QAAwB,aAAxB,QAAQ,uBAAR,QAAQ,CAAmB,aAAa,CAAC,CAAA;aACzC,QAAwB,aAAxB,QAAQ,uBAAR,QAAQ,CAAkB,MAAM,CAAA,CAAC;QAEnC,IAAI,CAAC,UAAU,EAAE,CAAC;YACjB,MAAM,IAAI,iCAAkB,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,6CAA6C,CAAC,CAAC;QAC7F,CAAC;QAED,OAAO;YACN,KAAK;YACL,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI;YACnC,SAAS,EAAG,QAAwB,CAAC,EAAY;YACjD,MAAM,EAAG,QAAwB,CAAC,MAA4B;YAC9D,UAAU,EAAE,UAAoB;SAChC,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,MAAM,aAAa,GAAG,CAAC,KAAK,IAAI,EAAE,CAAe,CAAC;QAClD,MAAM,IAAI,2BAAY,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE;YACrD,OAAO,EAAE,8CAA8C;YACvD,WAAW,EAAE,2DAA2D;SACxE,CAAC,CAAC;IACJ,CAAC;AACF,CAAC;AAED,SAAS,yBAAyB,CAAC,KAAc;;IAChD,MAAM,GAAG,GAAG,KAaX,CAAC;IACF,MAAM,OAAO,GAAG,CAAA,MAAA,GAAG,CAAC,QAAQ,0CAAE,IAAI,MAAI,MAAA,GAAG,CAAC,QAAQ,0CAAE,IAAI,CAAA,IAAI,GAAG,CAAC,KAAK,CAAC;IACtE,MAAM,OAAO,GAAG,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,OAAO,MAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK,CAAA,IAAI,GAAG,CAAC,OAAO,IAAI,eAAe,CAAC;IACrF,MAAM,aAAa,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,aAAa,CAAC;IAC7C,MAAM,IAAI,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,CAAC;IAE3B,OAAO;QACN,OAAO;QACP,IAAI,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS;QAClC,aAAa,CAAC,CAAC,CAAC,mBAAmB,aAAa,EAAE,CAAC,CAAC,CAAC,SAAS;KAC9D;SACC,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;SAClD,IAAI,CAAC,KAAK,CAAC,CAAC;AACf,CAAC;AAEM,KAAK,UAAU,gCAAgC,CAErD,QAAgB,EAChB,QAAqB,EAAE,EACvB,QAAiB;;IAEjB,MAAM,WAAW,GAAG,CAAC,MAAM,IAAI,CAAC,cAAc,CAC7C,kBAAkB,CAClB,CAAyC,CAAC;IAC3C,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IACzD,MAAM,iBAAiB,GACtB,QAAQ,IAAI,CAAC,WAAW,CAAC,WAAW,KAAK,cAAc,CAAC,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAC7F,MAAM,OAAO,GAA2B;QACvC,aAAa,EAAE,UAAU,GAAG,CAAC,KAAK,EAAE;QACpC,MAAM,EAAE,kBAAkB;KAC1B,CAAC;IAEF,IAAI,iBAAiB,EAAE,CAAC;QACvB,OAAO,CAAC,aAAa,CAAC,GAAG,iBAAiB,CAAC;IAC5C,CAAC;SAAM,IAAI,WAAW,CAAC,WAAW,KAAK,SAAS,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;QACnE,OAAO,CAAC,cAAc,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC;IACzC,CAAC;SAAM,CAAC;QACP,MAAM,IAAI,iCAAkB,CAC3B,IAAI,CAAC,OAAO,EAAE,EACd,yDAAyD,CACzD,CAAC;IACH,CAAC;IAED,IAAI,CAAC;QACJ,OAAO,MAAM,0BAA0B,CAAC,IAAI,CAAC,IAAI,EAAE;YAClD,MAAM,EAAE,KAAK;YACb,GAAG,EAAE,6CAA6C,QAAQ,EAAE;YAC5D,OAAO;YACP,EAAE,EAAE,KAAK;YACT,IAAI,EAAE,IAAI;SACV,CAAC,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,MAAM,GAAG,GAAG,KAOX,CAAC;QACF,MAAM,UAAU,GACf,GAAG,CAAC,UAAU,KAAI,MAAA,GAAG,CAAC,QAAQ,0CAAE,MAAM,CAAA,KAAI,MAAA,GAAG,CAAC,QAAQ,0CAAE,UAAU,CAAA,IAAI,SAAS,CAAC;QACjF,MAAM,KAAK,GAAG,iBAAiB,CAAC,CAAC,CAAC,UAAU,iBAAiB,EAAE,CAAC,CAAC,CAAC,WAAW,GAAG,CAAC,SAAS,EAAE,CAAC;QAC7F,MAAM,WAAW,GAAG,GAAG,yBAAyB,CAAC,KAAK,CAAC,qBAAqB,KAAK,EAAE,CAAC;QACpF,MAAM,aAAa,GAAG;YACrB,GAAI,KAAgB;YACpB,QAAQ,EAAE;gBACT,GAAG,GAAG,CAAC,QAAQ;gBACf,IAAI,EAAE;oBACL,GAAG,MAAA,GAAG,CAAC,QAAQ,0CAAE,IAAI;oBACrB,OAAO,EAAE,WAAW;iBACpB;aACD;SACa,CAAC;QAEhB,MAAM,IAAI,2BAAY,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE;YACrD,OAAO,EAAE,sCAAsC,UAAU,GAAG;YAC5D,WAAW;SACX,CAAC,CAAC;IACJ,CAAC;AACF,CAAC;AAEM,KAAK,UAAU,wCAAwC,CAE7D,QAAgB,EAChB,QAAiB;IAEjB,MAAM,KAAK,GAAkB,EAAE,CAAC;IAChC,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,UAAU,GAAG,CAAC,CAAC;IAEnB,GAAG,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,gCAAgC,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE;YAC5E,IAAI;YACJ,QAAQ,EAAE,GAAG;YACb,SAAS,EAAE,IAAI;SACf,EAAE,QAAQ,CAAC,CAAC;QACb,MAAM,SAAS,GAAI,QAAQ,CAAC,KAAuB,IAAI,EAAE,CAAC;QAC1D,KAAK,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC;QAEzB,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAgC,CAAC;QACxD,UAAU,GAAG,OAAO,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK,CAAA,KAAK,QAAQ,CAAC,CAAC,CAAE,KAAK,CAAC,KAAgB,CAAC,CAAC,CAAC,IAAI,CAAC;QAC/E,IAAI,IAAI,CAAC,CAAC;IACX,CAAC,QAAQ,IAAI,IAAI,UAAU,EAAE;IAE7B,OAAO,KAAK,CAAC;AACd,CAAC;AAEM,KAAK,UAAU,aAAa,CAElC,WAAsC;IAEtC,IAAI,WAAW,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;QAC3C,OAAO,EAAE,CAAC;IACX,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAEzD,MAAM,UAAU,GAAc,EAAE,CAAC;IACjC,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,MAAM,QAAQ,GAAG,GAAG,CAAC;IACrB,IAAI,UAAU,GAAG,CAAC,CAAC;IAEnB,GAAG,CAAC;QACH,MAAM,QAAQ,GAAG,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;YAChD,MAAM,EAAE,KAAK;YACb,GAAG,EAAE,mDAAmD;YACxD,OAAO,EAAE;gBACR,aAAa,EAAE,UAAU,GAAG,CAAC,KAAK,EAAE;gBACpC,cAAc,EAAE,GAAG,CAAC,SAAmB;aACvC;YACD,EAAE,EAAE;gBACH,IAAI;gBACJ,QAAQ;gBACR,SAAS,EAAE,IAAI;aACf;YACD,IAAI,EAAE,IAAI;SACV,CAAC,CAAgB,CAAC;QAEnB,MAAM,KAAK,GAAI,QAAwB,CAAC,KAA8B,CAAC;QACvE,IAAI,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,EAAE,CAAC;YACnB,UAAU,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;QAC3B,CAAC;QAED,MAAM,KAAK,GAAI,QAAwB,CAAC,KAAgC,CAAC;QACzE,UAAU,GAAG,OAAO,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK,CAAA,KAAK,QAAQ,CAAC,CAAC,CAAE,KAAK,CAAC,KAAgB,CAAC,CAAC,CAAC,IAAI,CAAC;QAC/E,IAAI,IAAI,CAAC,CAAC;IACX,CAAC,QAAQ,IAAI,IAAI,UAAU,EAAE;IAE7B,OAAO,UAAU,CAAC;AACnB,CAAC;AAEM,KAAK,UAAU,eAAe,CAEpC,sBAA0C;IAE1C,IAAI,sBAAsB,EAAE,CAAC;QAC5B,OAAO,sBAAsB,CAAC;IAC/B,CAAC;IAED,MAAM,WAAW,GAAG,CAAC,MAAM,IAAI,CAAC,cAAc,CAC7C,kBAAkB,CAClB,CAAyC,CAAC;IAE3C,IAAI,WAAW,CAAC,WAAW,KAAK,cAAc,IAAI,WAAW,CAAC,QAAQ,EAAE,CAAC;QACxE,OAAO,WAAW,CAAC,QAAQ,CAAC;IAC7B,CAAC;IAED,MAAM,IAAI,iCAAkB,CAC3B,IAAI,CAAC,OAAO,EAAE,EACd,8FAA8F,CAC9F,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,gBAAgB,CAErC,QAAgB;IAEhB,MAAM,WAAW,GAAG,CAAC,MAAM,IAAI,CAAC,cAAc,CAC7C,kBAAkB,CAClB,CAAyC,CAAC;IAE3C,IAAI,WAAW,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;QAE3C,MAAM,MAAM,GAAG,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7C,IAAI,MAAM,IAAI,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;YAC7C,OAAO,MAAM,CAAC,OAAO,CAAC;QACvB,CAAC;QAGD,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAEzD,IAAI,CAAC;YACJ,MAAM,QAAQ,GAAG,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;gBAChD,MAAM,EAAE,KAAK;gBACb,GAAG,EAAE,qDAAqD,QAAQ,EAAE;gBACpE,OAAO,EAAE;oBACR,aAAa,EAAE,UAAU,GAAG,CAAC,KAAK,EAAE;oBACpC,cAAc,EAAE,GAAG,CAAC,SAAmB;iBACvC;gBACD,IAAI,EAAE,IAAI;aACV,CAAC,CAAgB,CAAC;YAGnB,IAAI,OAAO,GAAG,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,UAAU,CAAC,CAAC;YAEvD,IAAI,CAAC,OAAO,EAAE,CAAC;gBAEd,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,IAAI,QAAQ,CAAC,aAAa,CAAC,CAAC;gBAClE,IAAI,UAAU,EAAE,CAAC;oBAChB,OAAO,GAAG,eAAe,UAAU,qBAAqB,CAAC;gBAC1D,CAAC;YACF,CAAC;YAED,IAAI,CAAC,OAAO,EAAE,CAAC;gBACd,MAAM,IAAI,iCAAkB,CAC3B,IAAI,CAAC,OAAO,EAAE,EACd,WAAW,QAAQ,mDAAmD,CACtE,CAAC;YACH,CAAC;YAGD,eAAe,CAAC,GAAG,CAAC,QAAQ,EAAE;gBAC7B,OAAO,EAAE,OAAiB;gBAC1B,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,qBAAqB;aAC7C,CAAC,CAAC;YAEH,OAAO,OAAiB,CAAC;QAC1B,CAAC;QAAC,MAAM,CAAC;YAER,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YACjC,MAAM,IAAI,iCAAkB,CAC3B,IAAI,CAAC,OAAO,EAAE,EACd,0BAA0B,QAAQ,gEAAgE,CAClG,CAAC;QACH,CAAC;IACF,CAAC;IAGD,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IACzD,OAAO,GAAG,CAAC,UAAU,CAAC;AACvB,CAAC;AAEM,KAAK,UAAU,uBAAuB,CAE5C,MAA2B,EAC3B,QAAgB,EAChB,OAAoB,EAAE,EACtB,QAAqB,EAAE,EACvB,QAAiB;;IAEjB,MAAM,WAAW,GAAG,CAAC,MAAM,IAAI,CAAC,cAAc,CAC7C,kBAAkB,CAClB,CAAyC,CAAC;IAE3C,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAEzD,MAAM,iBAAiB,GACtB,QAAQ,IAAI,CAAC,WAAW,CAAC,WAAW,KAAK,cAAc,CAAC,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAE7F,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACxB,MAAM,IAAI,iCAAkB,CAC3B,IAAI,CAAC,OAAO,EAAE,EACd,gEAAgE,CAChE,CAAC;IACH,CAAC;IAGD,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;IACrE,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAEvC,MAAM,OAAO,GAAwB;QACpC,MAAM;QACN,GAAG;QACH,OAAO,EAAE;YACR,aAAa,EAAE,UAAU,GAAG,CAAC,KAAK,EAAE;YACpC,MAAM,EAAE,kBAAkB;YAC1B,cAAc,EAAE,kBAAkB;YAClC,aAAa,EAAE,iBAAiB;SAChC;QACD,EAAE,EAAE,KAAK;QACT,IAAI,EAAE,IAAI;KACV,CAAC;IAEF,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IACrB,CAAC;IAED,IAAI,CAAC;QACJ,OAAO,MAAM,0BAA0B,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC7D,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACzB,MAAM,aAAa,GAAG,CAAC,KAAK,IAAI,EAAE,CAAe,CAAC;QAClD,MAAM,GAAG,GAAG,KAKX,CAAC;QAGF,MAAM,UAAU,GAAG,GAAG,CAAC,UAAU,KAAI,MAAA,GAAG,CAAC,QAAQ,0CAAE,MAAM,CAAA,KAAI,MAAA,GAAG,CAAC,QAAQ,0CAAE,UAAU,CAAA,CAAC;QAItF,MAAM,SAAS,GAAG,SAAS,GAAG,aAAa,iBAAiB,WAAW,OAAO,GAAG,CAAC;QAElF,IAAI,UAAU,KAAK,GAAG,EAAE,CAAC;YACxB,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC;YAC5C,MAAM,IAAI,2BAAY,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE;gBACrD,OAAO,EAAE,uBAAuB;gBAChC,WAAW,EACV,8FAA8F;aAC/F,CAAC,CAAC;QACJ,CAAC;QAED,IAAI,UAAU,KAAK,GAAG,EAAE,CAAC;YACxB,MAAM,IAAI,2BAAY,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE;gBACrD,OAAO,EAAE,mBAAmB;gBAC5B,WAAW,EAAE,qEAAqE;aAClF,CAAC,CAAC;QACJ,CAAC;QAED,IAAI,UAAU,KAAK,GAAG,EAAE,CAAC;YACxB,MAAM,IAAI,2BAAY,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE;gBACrD,OAAO,EAAE,sBAAsB,SAAS,EAAE;gBAC1C,WAAW,EAAE,CAAA,MAAA,GAAG,CAAC,KAAK,0CAAE,OAAO,KAAI,+FAA+F;aAClI,CAAC,CAAC;QACJ,CAAC;QAED,IAAI,UAAU,KAAK,GAAG,EAAE,CAAC;YACxB,MAAM,UAAU,GAAG,CAAA,MAAA,MAAA,GAAG,CAAC,QAAQ,0CAAE,OAAO,0CAAG,aAAa,CAAC,KAAI,EAAE,CAAC;YAChE,MAAM,IAAI,2BAAY,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE;gBACrD,OAAO,EAAE,qBAAqB;gBAC9B,WAAW,EAAE,sBAAsB,UAAU,WAAW;aACxD,CAAC,CAAC;QACJ,CAAC;QAED,MAAM,YAAY,GACjB,CAAA,MAAA,GAAG,CAAC,KAAK,0CAAE,OAAO,MAAI,MAAA,GAAG,CAAC,KAAK,0CAAE,iBAAiB,CAAA,IAAI,GAAG,CAAC,OAAO,IAAI,eAAe,CAAC;QAEtF,MAAM,IAAI,2BAAY,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE;YACrD,OAAO,EAAE,oCAAoC,UAAU,IAAI,SAAS,KAAK,SAAS,EAAE;YACpF,WAAW,EAAE,YAAY;SACzB,CAAC,CAAC;IACJ,CAAC;AACF,CAAC;AAEM,KAAK,UAAU,+BAA+B,CAEpD,MAA2B,EAC3B,QAAgB,EAChB,OAAoB,EAAE,EACtB,QAAqB,EAAE,EACvB,QAAiB;IAEjB,MAAM,UAAU,GAAkB,EAAE,CAAC;IACrC,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,MAAM,QAAQ,GAAG,GAAG,CAAC;IACrB,IAAI,UAAU,GAAG,CAAC,CAAC;IAEnB,GAAG,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,uBAAuB,CAAC,IAAI,CAClD,IAAI,EACJ,MAAM,EACN,QAAQ,EACR,IAAI,EACJ;YACC,GAAG,KAAK;YACR,IAAI;YACJ,QAAQ;YACR,SAAS,EAAE,IAAI;SACf,EACD,QAAQ,CACR,CAAC;QAEF,MAAM,KAAK,GAAI,QAAwB,CAAC,KAAkC,CAAC;QAC3E,IAAI,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,EAAE,CAAC;YACnB,UAAU,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;QAC3B,CAAC;QAED,MAAM,KAAK,GAAI,QAAwB,CAAC,KAAgC,CAAC;QACzE,UAAU,GAAG,OAAO,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK,CAAA,KAAK,QAAQ,CAAC,CAAC,CAAE,KAAK,CAAC,KAAgB,CAAC,CAAC,CAAC,IAAI,CAAC;QAC/E,IAAI,IAAI,CAAC,CAAC;IACX,CAAC,QAAQ,IAAI,IAAI,UAAU,EAAE;IAE7B,OAAO,UAAU,CAAC;AACnB,CAAC;AAGM,KAAK,UAAU,sBAAsB,CAE3C,WAAsC,EACtC,SAAkB,EAClB,KAAc;IAEd,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAC5D,MAAM,YAAY,GAAkB,EAAE,CAAC;IAEvC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC9B,IAAI,CAAC;YACJ,IAAI,eAA8B,CAAC;YACnC,IAAI,SAAS,EAAE,CAAC;gBACf,eAAe,GAAG,MAAM,+BAA+B,CAAC,IAAI,CAC3D,IAAI,EACJ,KAAK,EACL,wBAAwB,EACxB,EAAE,EACF,EAAE,EACF,MAAM,CAAC,EAAE,CACT,CAAC;YACH,CAAC;iBAAM,CAAC;gBACP,MAAM,QAAQ,GAAG,MAAM,uBAAuB,CAAC,IAAI,CAClD,IAAI,EACJ,KAAK,EACL,wBAAwB,EACxB,EAAE,EACF,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK,IAAI,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EACpD,MAAM,CAAC,EAAE,CACT,CAAC;gBACF,eAAe,GAAK,QAAwB,CAAC,KAAuB,IAAI,EAAE,CAAC;YAC5E,CAAC;YAGD,KAAK,MAAM,QAAQ,IAAI,eAAe,EAAE,CAAC;gBACxC,QAAQ,CAAC,QAAQ,GAAG,MAAM,CAAC,EAAE,CAAC;gBAC9B,QAAQ,CAAC,MAAM,GAAG;oBACjB,EAAE,EAAE,MAAM,CAAC,EAAE;oBACb,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,UAAU,EAAE,MAAM,CAAC,UAAU;iBAC7B,CAAC;YACH,CAAC;YAED,YAAY,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,CAAC;QACvC,CAAC;QAAC,MAAM,CAAC;YAER,SAAS;QACV,CAAC;IACF,CAAC;IAED,OAAO,YAAY,CAAC;AACrB,CAAC;AAID,SAAgB,KAAK,CAAC,EAAU;IAC/B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC9B,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -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: ['diagnostic'] } },
|
|
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
|
|
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
|
|
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
|
|
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
|
|
516
|
-
|
|
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
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
const
|
|
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
|
-
|
|
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
|
-
|
|
650
|
-
|
|
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
|
-
|
|
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
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
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
|
-
|
|
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
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
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
|
-
|
|
852
|
-
method: 'GET',
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
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);
|