@scopieflows/apps-common 0.12.5 → 0.15.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +2 -2
- package/src/index.d.ts +3 -0
- package/src/index.d.ts.map +1 -1
- package/src/index.js +6 -0
- package/src/index.js.map +1 -1
- package/src/lib/http/axios/axios-http-client.d.ts.map +1 -1
- package/src/lib/http/axios/axios-http-client.js +2 -0
- package/src/lib/http/axios/axios-http-client.js.map +1 -1
- package/src/lib/http/core/http-error.d.ts +3 -0
- package/src/lib/http/core/http-error.d.ts.map +1 -1
- package/src/lib/http/core/http-error.js +12 -1
- package/src/lib/http/core/http-error.js.map +1 -1
- package/src/lib/http/observation-sanitize.d.ts +16 -0
- package/src/lib/http/observation-sanitize.d.ts.map +1 -0
- package/src/lib/http/observation-sanitize.js +187 -0
- package/src/lib/http/observation-sanitize.js.map +1 -0
- package/src/lib/http/observation-transport.d.ts +3 -0
- package/src/lib/http/observation-transport.d.ts.map +1 -0
- package/src/lib/http/observation-transport.js +214 -0
- package/src/lib/http/observation-transport.js.map +1 -0
- package/src/lib/http/provider-broker.d.ts +6 -0
- package/src/lib/http/provider-broker.d.ts.map +1 -0
- package/src/lib/http/provider-broker.js +144 -0
- package/src/lib/http/provider-broker.js.map +1 -0
- package/src/lib/http/provider-observation.d.ts +85 -0
- package/src/lib/http/provider-observation.d.ts.map +1 -0
- package/src/lib/http/provider-observation.js +193 -0
- package/src/lib/http/provider-observation.js.map +1 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@scopieflows/apps-common",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.15.3",
|
|
4
4
|
"type": "commonjs",
|
|
5
5
|
"main": "./src/index.js",
|
|
6
6
|
"types": "./src/index.d.ts",
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
},
|
|
12
12
|
"dependencies": {
|
|
13
13
|
"@scopieflows/apps-framework": "^0.28.4",
|
|
14
|
-
"@scopieflows/shared": "^0.
|
|
14
|
+
"@scopieflows/shared": "^0.63.0",
|
|
15
15
|
"axios": "1.19.0",
|
|
16
16
|
"axios-retry": "4.4.1",
|
|
17
17
|
"form-data": "4.0.4",
|
package/src/index.d.ts
CHANGED
|
@@ -3,4 +3,7 @@ export * from './lib/helpers';
|
|
|
3
3
|
export * from './lib/http';
|
|
4
4
|
export * from './lib/polling';
|
|
5
5
|
export * from './lib/validation';
|
|
6
|
+
export { SCOPIEN_PROVIDER_BROKER_PROTOCOL, providerBrokerAdapter } from './lib/http/provider-broker';
|
|
7
|
+
export * from './lib/http/provider-observation';
|
|
8
|
+
export * from './lib/http/observation-transport';
|
|
6
9
|
//# sourceMappingURL=index.d.ts.map
|
package/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,gCAAgC,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAErG,cAAc,iCAAiC,CAAC;AAChD,cAAc,kCAAkC,CAAC"}
|
package/src/index.js
CHANGED
|
@@ -1,9 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.providerBrokerAdapter = exports.SCOPIEN_PROVIDER_BROKER_PROTOCOL = void 0;
|
|
3
4
|
const tslib_1 = require("tslib");
|
|
4
5
|
tslib_1.__exportStar(require("./lib/authentication"), exports);
|
|
5
6
|
tslib_1.__exportStar(require("./lib/helpers"), exports);
|
|
6
7
|
tslib_1.__exportStar(require("./lib/http"), exports);
|
|
7
8
|
tslib_1.__exportStar(require("./lib/polling"), exports);
|
|
8
9
|
tslib_1.__exportStar(require("./lib/validation"), exports);
|
|
10
|
+
var provider_broker_1 = require("./lib/http/provider-broker");
|
|
11
|
+
Object.defineProperty(exports, "SCOPIEN_PROVIDER_BROKER_PROTOCOL", { enumerable: true, get: function () { return provider_broker_1.SCOPIEN_PROVIDER_BROKER_PROTOCOL; } });
|
|
12
|
+
Object.defineProperty(exports, "providerBrokerAdapter", { enumerable: true, get: function () { return provider_broker_1.providerBrokerAdapter; } });
|
|
13
|
+
tslib_1.__exportStar(require("./lib/http/provider-observation"), exports);
|
|
14
|
+
tslib_1.__exportStar(require("./lib/http/observation-transport"), exports);
|
|
9
15
|
//# sourceMappingURL=index.js.map
|
package/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;AAAA,+DAAqC;AACrC,wDAA8B;AAC9B,qDAA2B;AAC3B,wDAA8B;AAC9B,2DAAiC;AACjC,8DAAqG;AAA5F,mIAAA,gCAAgC,OAAA;AAAE,wHAAA,qBAAqB,OAAA;AAEhE,0EAAgD;AAChD,2EAAiD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"axios-http-client.d.ts","sourceRoot":"","sources":["../../../../../src/lib/http/axios/axios-http-client.ts"],"names":[],"mappings":"AACA,OAAc,EAAE,aAAa,EAAsB,MAAM,OAAO,CAAC;AAIjE,OAAO,EAAE,iCAAiC,EAAE,MAAM,6CAA6C,CAAC;AAChG,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAG1D,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAE5D,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"axios-http-client.d.ts","sourceRoot":"","sources":["../../../../../src/lib/http/axios/axios-http-client.ts"],"names":[],"mappings":"AACA,OAAc,EAAE,aAAa,EAAsB,MAAM,OAAO,CAAC;AAIjE,OAAO,EAAE,iCAAiC,EAAE,MAAM,6CAA6C,CAAC;AAChG,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAG1D,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAE5D,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AA2B5D,qBAAa,eAAgB,SAAQ,cAAc;gBAE/C,OAAO,SAAK,EACZ,uBAAuB,GAAE,iCAA2E;IAKhG,WAAW,CAAC,YAAY,SAAS,eAAe,GAAG,GAAG,EAC1D,OAAO,EAAE,WAAW,CAAC,eAAe,CAAC,EACrC,WAAW,CAAC,EAAE,aAAa,GAC1B,OAAO,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;IAwFtC,OAAO,CAAC,qBAAqB;CAG9B"}
|
|
@@ -10,6 +10,7 @@ const https_proxy_agent_1 = require("https-proxy-agent");
|
|
|
10
10
|
const delegating_authentication_converter_1 = require("../core/delegating-authentication-converter");
|
|
11
11
|
const base_http_client_1 = require("../core/base-http-client");
|
|
12
12
|
const http_error_1 = require("../core/http-error");
|
|
13
|
+
const provider_broker_1 = require("../provider-broker");
|
|
13
14
|
// TLS certificate validation is ON by default. Historically this client set
|
|
14
15
|
// NODE_TLS_REJECT_UNAUTHORIZED='0' on every request (inherited from upstream
|
|
15
16
|
// Activepieces, commit 4465202a "fix: accept unauthorized requests"), which
|
|
@@ -55,6 +56,7 @@ class AxiosHttpClient extends base_http_client_1.BaseHttpClient {
|
|
|
55
56
|
data: request.body,
|
|
56
57
|
timeout,
|
|
57
58
|
responseType,
|
|
59
|
+
adapter: (0, provider_broker_1.providerBrokerAdapter)(headers),
|
|
58
60
|
};
|
|
59
61
|
const insecureTls = insecureTlsOptedIn();
|
|
60
62
|
const httpProxy = (_a = process.env['HTTP_PROXY']) !== null && _a !== void 0 ? _a : process.env['http_proxy'];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"axios-http-client.js","sourceRoot":"","sources":["../../../../../src/lib/http/axios/axios-http-client.ts"],"names":[],"mappings":";;;;AAAA,oEAA+B;AAC/B,0DAAiE;AACjE,sEAAqC;AACrC,uDAAkD;AAClD,yDAAoD;AACpD,qGAAgG;AAChG,+DAA0D;AAC1D,mDAA+C;
|
|
1
|
+
{"version":3,"file":"axios-http-client.js","sourceRoot":"","sources":["../../../../../src/lib/http/axios/axios-http-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,12 +2,14 @@ import { AxiosError } from 'axios';
|
|
|
2
2
|
export declare class HttpError extends Error {
|
|
3
3
|
private readonly status;
|
|
4
4
|
private readonly responseBody;
|
|
5
|
+
private readonly responseHeaders;
|
|
5
6
|
private readonly safeRequestBody;
|
|
6
7
|
constructor(requestBody: unknown, err: AxiosError);
|
|
7
8
|
errorMessage(): {
|
|
8
9
|
response: {
|
|
9
10
|
status: number;
|
|
10
11
|
body: unknown;
|
|
12
|
+
headers: unknown;
|
|
11
13
|
};
|
|
12
14
|
request: {
|
|
13
15
|
body: unknown;
|
|
@@ -16,6 +18,7 @@ export declare class HttpError extends Error {
|
|
|
16
18
|
get response(): {
|
|
17
19
|
status: number;
|
|
18
20
|
body: unknown;
|
|
21
|
+
headers: unknown;
|
|
19
22
|
};
|
|
20
23
|
/**
|
|
21
24
|
* The request body with credentials removed.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-error.d.ts","sourceRoot":"","sources":["../../../../../src/lib/http/core/http-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"http-error.d.ts","sourceRoot":"","sources":["../../../../../src/lib/http/core/http-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAgB,MAAM,OAAO,CAAC;AAmFjD,qBAAa,SAAU,SAAQ,KAAK;IAClC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAU;IACvC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAU;IAC1C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAU;gBAK9B,WAAW,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU;IAwB1C,YAAY;;;;;;;;;;IAanB,IAAI,QAAQ;;;;MAMX;IAED;;;;;OAKG;IACH,IAAI,OAAO;;MAIV;CACF"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.HttpError = void 0;
|
|
4
|
+
const axios_1 = require("axios");
|
|
4
5
|
/**
|
|
5
6
|
* Keys whose values are credentials rather than debuggable input.
|
|
6
7
|
*
|
|
@@ -21,6 +22,12 @@ const SENSITIVE_KEYS = new Set([
|
|
|
21
22
|
'refreshtoken',
|
|
22
23
|
'idtoken',
|
|
23
24
|
'authorization',
|
|
25
|
+
'proxyauthorization',
|
|
26
|
+
'cookie',
|
|
27
|
+
'setcookie',
|
|
28
|
+
'xapikey',
|
|
29
|
+
'xauthtoken',
|
|
30
|
+
'xaccesstoken',
|
|
24
31
|
'auth',
|
|
25
32
|
'totp',
|
|
26
33
|
'otp',
|
|
@@ -77,7 +84,7 @@ class HttpError extends Error {
|
|
|
77
84
|
// the raw body would leave credentials on the instance for anything that
|
|
78
85
|
// enumerates it, and TypeScript's `private` is compile-time only.
|
|
79
86
|
constructor(requestBody, err) {
|
|
80
|
-
var _a, _b, _c, _d;
|
|
87
|
+
var _a, _b, _c, _d, _e;
|
|
81
88
|
const status = ((_a = err === null || err === void 0 ? void 0 : err.response) === null || _a === void 0 ? void 0 : _a.status) || 500;
|
|
82
89
|
const responseBody = Buffer.isBuffer((_b = err === null || err === void 0 ? void 0 : err.response) === null || _b === void 0 ? void 0 : _b.data) ? (_c = err === null || err === void 0 ? void 0 : err.response) === null || _c === void 0 ? void 0 : _c.data.toString() : (_d = err === null || err === void 0 ? void 0 : err.response) === null || _d === void 0 ? void 0 : _d.data;
|
|
83
90
|
const safeRequestBody = redact(requestBody);
|
|
@@ -92,6 +99,8 @@ class HttpError extends Error {
|
|
|
92
99
|
}));
|
|
93
100
|
this.status = status;
|
|
94
101
|
this.responseBody = responseBody;
|
|
102
|
+
const responseHeaders = (_e = err === null || err === void 0 ? void 0 : err.response) === null || _e === void 0 ? void 0 : _e.headers;
|
|
103
|
+
this.responseHeaders = redact(responseHeaders instanceof axios_1.AxiosHeaders ? responseHeaders.toJSON() : responseHeaders);
|
|
95
104
|
this.safeRequestBody = safeRequestBody;
|
|
96
105
|
}
|
|
97
106
|
errorMessage() {
|
|
@@ -99,6 +108,7 @@ class HttpError extends Error {
|
|
|
99
108
|
response: {
|
|
100
109
|
status: this.status,
|
|
101
110
|
body: this.responseBody,
|
|
111
|
+
headers: this.responseHeaders,
|
|
102
112
|
},
|
|
103
113
|
request: {
|
|
104
114
|
body: this.safeRequestBody,
|
|
@@ -109,6 +119,7 @@ class HttpError extends Error {
|
|
|
109
119
|
return {
|
|
110
120
|
status: this.status,
|
|
111
121
|
body: this.responseBody,
|
|
122
|
+
headers: this.responseHeaders,
|
|
112
123
|
};
|
|
113
124
|
}
|
|
114
125
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-error.js","sourceRoot":"","sources":["../../../../../src/lib/http/core/http-error.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"http-error.js","sourceRoot":"","sources":["../../../../../src/lib/http/core/http-error.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export declare function credentialValues(value: unknown): string[];
|
|
2
|
+
/** All saved auth strings are scrubbed, but only credentialValues may establish attribution. */
|
|
3
|
+
export declare function savedAuthValues(value: unknown): string[];
|
|
4
|
+
export declare function credentialKey(key: string): boolean;
|
|
5
|
+
export declare function observationCredentialValues(raw: string): string[];
|
|
6
|
+
export declare function isMultipartObservationBody(raw: string, contentType?: string): boolean;
|
|
7
|
+
export declare function sanitizeObservationText(raw: string, secrets: string[]): string;
|
|
8
|
+
export declare function removeSecrets(raw: string, secrets: string[]): string;
|
|
9
|
+
export declare function sanitizeObservationHeaders(headers: Record<string, string>, secrets: string[]): Record<string, string>;
|
|
10
|
+
export declare function sanitizeObservationUrl(raw: string, secrets: string[]): string;
|
|
11
|
+
export declare function sanitizeObservationBytes(bytes: Buffer, secrets: string[], complete: boolean, contentType?: string): ObservationBody | null;
|
|
12
|
+
export type ObservationBody = {
|
|
13
|
+
encoding: 'utf8' | 'base64';
|
|
14
|
+
data: string;
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=observation-sanitize.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observation-sanitize.d.ts","sourceRoot":"","sources":["../../../../src/lib/http/observation-sanitize.ts"],"names":[],"mappings":"AAAA,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,EAAE,CAiBzD;AAED,gGAAgG;AAChG,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,EAAE,CAgBxD;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAElD;AAED,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAQjE;AAID,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,SAAK,GAAG,OAAO,CAGjF;AAED,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,CAiC9E;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,CAMpE;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAErH;AAED,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,CAO7E;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,SAAK,GAAG,eAAe,GAAG,IAAI,CAQtI;AAUD,MAAM,MAAM,eAAe,GAAG;IAAE,QAAQ,EAAE,MAAM,GAAG,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC"}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.credentialValues = credentialValues;
|
|
4
|
+
exports.savedAuthValues = savedAuthValues;
|
|
5
|
+
exports.credentialKey = credentialKey;
|
|
6
|
+
exports.observationCredentialValues = observationCredentialValues;
|
|
7
|
+
exports.isMultipartObservationBody = isMultipartObservationBody;
|
|
8
|
+
exports.sanitizeObservationText = sanitizeObservationText;
|
|
9
|
+
exports.removeSecrets = removeSecrets;
|
|
10
|
+
exports.sanitizeObservationHeaders = sanitizeObservationHeaders;
|
|
11
|
+
exports.sanitizeObservationUrl = sanitizeObservationUrl;
|
|
12
|
+
exports.sanitizeObservationBytes = sanitizeObservationBytes;
|
|
13
|
+
function credentialValues(value) {
|
|
14
|
+
const found = new Set();
|
|
15
|
+
const visit = (item, sensitive = false) => {
|
|
16
|
+
if (typeof item === 'string') {
|
|
17
|
+
if (sensitive && item && !item.startsWith('scopien-broker:') && !item.startsWith('scopien-provider-broker:'))
|
|
18
|
+
found.add(item);
|
|
19
|
+
if (sensitive && item.startsWith('{')) {
|
|
20
|
+
try {
|
|
21
|
+
visit(JSON.parse(item));
|
|
22
|
+
}
|
|
23
|
+
catch ( /* Opaque credentials need no JSON interpretation. */_a) { /* Opaque credentials need no JSON interpretation. */ }
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
else if (item && typeof item === 'object') {
|
|
27
|
+
for (const [key, nested] of Object.entries(item))
|
|
28
|
+
visit(nested, sensitive || credentialKey(key) || key === 'serviceAccount');
|
|
29
|
+
const username = Reflect.get(item, 'username');
|
|
30
|
+
const password = Reflect.get(item, 'password');
|
|
31
|
+
if (typeof username === 'string' && typeof password === 'string')
|
|
32
|
+
found.add(Buffer.from(`${username}:${password}`).toString('base64')); // pragma: allowlist secret — credential type check, not a literal secret
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
visit(value, typeof value === 'string');
|
|
36
|
+
return [...found].sort((a, b) => b.length - a.length);
|
|
37
|
+
}
|
|
38
|
+
/** All saved auth strings are scrubbed, but only credentialValues may establish attribution. */
|
|
39
|
+
function savedAuthValues(value) {
|
|
40
|
+
const found = new Set();
|
|
41
|
+
const seen = new WeakSet();
|
|
42
|
+
const visit = (item) => {
|
|
43
|
+
if (typeof item === 'string') {
|
|
44
|
+
if (item)
|
|
45
|
+
found.add(item);
|
|
46
|
+
if (item.startsWith('{') || item.startsWith('[')) {
|
|
47
|
+
try {
|
|
48
|
+
visit(JSON.parse(item));
|
|
49
|
+
}
|
|
50
|
+
catch ( /* Retain opaque auth text as a single secret. */_a) { /* Retain opaque auth text as a single secret. */ }
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
else if (item && typeof item === 'object' && !seen.has(item)) {
|
|
54
|
+
seen.add(item);
|
|
55
|
+
for (const nested of Object.values(item))
|
|
56
|
+
visit(nested);
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
visit(value);
|
|
60
|
+
return [...found].sort((a, b) => b.length - a.length);
|
|
61
|
+
}
|
|
62
|
+
function credentialKey(key) {
|
|
63
|
+
return /^(?:token|securitytoken|sessionid|assertion|idtoken|apitoken|privatekey|authorization|proxyauthorization|cookie|setcookie|xapikey|apikey|accesstoken|refreshtoken|clientsecret|secrettext|password|secret|key|apisecret|authtoken|apipassword|apikeysecret|clientkey|clienttoken|accesskey|accesskeyid|secretaccesskey)$/.test(key.toLowerCase().replace(/[^a-z0-9]/g, ''));
|
|
64
|
+
}
|
|
65
|
+
function observationCredentialValues(raw) {
|
|
66
|
+
try {
|
|
67
|
+
const value = JSON.parse(raw);
|
|
68
|
+
return value && typeof value === 'object' ? credentialValues(value) : [];
|
|
69
|
+
}
|
|
70
|
+
catch ( /* Form and SOAP authentication are not JSON. */_a) { /* Form and SOAP authentication are not JSON. */ }
|
|
71
|
+
const found = new Set();
|
|
72
|
+
for (const [key, value] of new URLSearchParams(raw))
|
|
73
|
+
if (credentialKey(key))
|
|
74
|
+
found.add(value);
|
|
75
|
+
for (const match of raw.matchAll(/<(?:[\w.-]+:)?([\w.-]+)(?:\s[^>]*)?>([^<]*)<\/(?:[\w.-]+:)?[\w.-]+>/g)) {
|
|
76
|
+
if (credentialKey(match[1]))
|
|
77
|
+
found.add(match[2]);
|
|
78
|
+
}
|
|
79
|
+
return [...found];
|
|
80
|
+
}
|
|
81
|
+
// MIME bodies are deliberately omitted rather than partially parsed: field
|
|
82
|
+
// names can be encoded/folded and binary file parts are not safe audit text.
|
|
83
|
+
function isMultipartObservationBody(raw, contentType = '') {
|
|
84
|
+
return /(?:^|,)\s*multipart\//i.test(contentType)
|
|
85
|
+
|| /(?:^|\r?\n)[ \t]*content-disposition[ \t]*:/i.test(raw);
|
|
86
|
+
}
|
|
87
|
+
function sanitizeObservationText(raw, secrets) {
|
|
88
|
+
var _a;
|
|
89
|
+
if (isMultipartObservationBody(raw))
|
|
90
|
+
return '[multipart body omitted]';
|
|
91
|
+
secrets = [...secrets, ...observationCredentialValues(raw)];
|
|
92
|
+
let json;
|
|
93
|
+
try {
|
|
94
|
+
json = JSON.parse(raw);
|
|
95
|
+
}
|
|
96
|
+
catch (_b) {
|
|
97
|
+
const scrubbed = raw.replace(/([?&]|^)([^=&\s]+)=([^&\s]*)/g, (part, separator, key) => credentialKey(decodedFormKey(key)) ? `${separator}${key}=[credential omitted]` : part);
|
|
98
|
+
return removeSecrets(scrubbed, secrets);
|
|
99
|
+
}
|
|
100
|
+
if (!json || typeof json !== 'object')
|
|
101
|
+
return removeSecrets(raw, secrets);
|
|
102
|
+
const tokens = [...raw.matchAll(/"(?:\\.|[^"\\])*"|[{}\[\],:]|true|false|null|-?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?/g)];
|
|
103
|
+
const edits = [];
|
|
104
|
+
for (let i = 0; i < tokens.length; i++) {
|
|
105
|
+
const token = tokens[i];
|
|
106
|
+
if (!token[0].startsWith('"'))
|
|
107
|
+
continue;
|
|
108
|
+
const value = JSON.parse(token[0]);
|
|
109
|
+
if (typeof value !== 'string')
|
|
110
|
+
continue;
|
|
111
|
+
const safe = removeSecrets(value, secrets);
|
|
112
|
+
if (safe !== value)
|
|
113
|
+
edits.push({ start: token.index, end: token.index + token[0].length, value: JSON.stringify(safe) });
|
|
114
|
+
if (((_a = tokens[i + 1]) === null || _a === void 0 ? void 0 : _a[0]) !== ':' || !credentialKey(value))
|
|
115
|
+
continue;
|
|
116
|
+
let end = i + 2;
|
|
117
|
+
if (['{', '['].includes(tokens[end][0])) {
|
|
118
|
+
let depth = 1;
|
|
119
|
+
while (depth > 0 && ++end < tokens.length) {
|
|
120
|
+
if (['{', '['].includes(tokens[end][0]))
|
|
121
|
+
depth++;
|
|
122
|
+
if (['}', ']'].includes(tokens[end][0]))
|
|
123
|
+
depth--;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
edits.push({ start: tokens[i + 2].index, end: tokens[end].index + tokens[end][0].length, value: '"[credential omitted]"' });
|
|
127
|
+
i = end;
|
|
128
|
+
}
|
|
129
|
+
let result = '', cursor = 0;
|
|
130
|
+
for (const edit of edits) {
|
|
131
|
+
result += raw.slice(cursor, edit.start) + edit.value;
|
|
132
|
+
cursor = edit.end;
|
|
133
|
+
}
|
|
134
|
+
return result + raw.slice(cursor);
|
|
135
|
+
}
|
|
136
|
+
function removeSecrets(raw, secrets) {
|
|
137
|
+
let safe = raw;
|
|
138
|
+
for (const secret of secrets.filter(Boolean)) {
|
|
139
|
+
for (const encoded of [secret, encodeCredential(secret), JSON.stringify(secret).slice(1, -1)])
|
|
140
|
+
safe = safe.split(encoded).join('[credential omitted]');
|
|
141
|
+
}
|
|
142
|
+
return safe;
|
|
143
|
+
}
|
|
144
|
+
function sanitizeObservationHeaders(headers, secrets) {
|
|
145
|
+
return Object.fromEntries(Object.entries(headers).filter(([key]) => !credentialKey(key) && removeSecrets(key, secrets) === key).map(([key, value]) => [key, removeSecrets(value, secrets)]));
|
|
146
|
+
}
|
|
147
|
+
function sanitizeObservationUrl(raw, secrets) {
|
|
148
|
+
const url = new URL(raw);
|
|
149
|
+
url.username = '';
|
|
150
|
+
url.password = '';
|
|
151
|
+
const query = [...url.searchParams];
|
|
152
|
+
url.search = '';
|
|
153
|
+
for (const [key, value] of query)
|
|
154
|
+
url.searchParams.append(removeSecrets(key, secrets), credentialKey(key) ? '[credential omitted]' : removeSecrets(value, secrets));
|
|
155
|
+
url.pathname = removeSecrets(url.pathname, secrets);
|
|
156
|
+
return url.toString();
|
|
157
|
+
}
|
|
158
|
+
function sanitizeObservationBytes(bytes, secrets, complete, contentType = '') {
|
|
159
|
+
// Truncated text may split a credential or a JSON property; don't retain fragments.
|
|
160
|
+
if (!complete)
|
|
161
|
+
return null;
|
|
162
|
+
const text = bytes.toString('utf8');
|
|
163
|
+
if (isMultipartObservationBody(text, contentType))
|
|
164
|
+
return null;
|
|
165
|
+
if (Buffer.from(text).equals(bytes))
|
|
166
|
+
return { encoding: 'utf8', data: sanitizeObservationText(text, secrets) };
|
|
167
|
+
if (secrets.some(secret => bytes.includes(Buffer.from(secret))))
|
|
168
|
+
return null;
|
|
169
|
+
return { encoding: 'base64', data: bytes.toString('base64') };
|
|
170
|
+
}
|
|
171
|
+
function encodeCredential(value) {
|
|
172
|
+
try {
|
|
173
|
+
return encodeURIComponent(value);
|
|
174
|
+
}
|
|
175
|
+
catch (_a) {
|
|
176
|
+
return value;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
function decodedFormKey(value) {
|
|
180
|
+
try {
|
|
181
|
+
return decodeURIComponent(value);
|
|
182
|
+
}
|
|
183
|
+
catch (_a) {
|
|
184
|
+
return value;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=observation-sanitize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observation-sanitize.js","sourceRoot":"","sources":["../../../../src/lib/http/observation-sanitize.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observation-transport.d.ts","sourceRoot":"","sources":["../../../../src/lib/http/observation-transport.ts"],"names":[],"mappings":"AAOA,wBAAgB,mCAAmC,IAAI,IAAI,CAW1D;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAG/D"}
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.installProviderObservationTransport = installProviderObservationTransport;
|
|
4
|
+
exports.observeProviderFetchModule = observeProviderFetchModule;
|
|
5
|
+
const tslib_1 = require("tslib");
|
|
6
|
+
const node_async_hooks_1 = require("node:async_hooks");
|
|
7
|
+
const node_http_1 = tslib_1.__importDefault(require("node:http"));
|
|
8
|
+
const node_https_1 = tslib_1.__importDefault(require("node:https"));
|
|
9
|
+
const node_module_1 = require("node:module");
|
|
10
|
+
const node_stream_1 = require("node:stream");
|
|
11
|
+
const provider_observation_1 = require("./provider-observation");
|
|
12
|
+
function installProviderObservationTransport() {
|
|
13
|
+
const state = (0, provider_observation_1.observationBootstrapState)();
|
|
14
|
+
if (state.installed)
|
|
15
|
+
return;
|
|
16
|
+
state.installed = true;
|
|
17
|
+
node_http_1.default.request = observeRequest(node_http_1.default.request, 'http:');
|
|
18
|
+
node_https_1.default.request = observeRequest(node_https_1.default.request, 'https:');
|
|
19
|
+
// get() closes over Node's original request(), so it needs its own wrapper.
|
|
20
|
+
node_http_1.default.get = observeRequest(node_http_1.default.get, 'http:');
|
|
21
|
+
node_https_1.default.get = observeRequest(node_https_1.default.get, 'https:');
|
|
22
|
+
(0, node_module_1.syncBuiltinESMExports)();
|
|
23
|
+
globalThis.fetch = observedFetch(globalThis.fetch);
|
|
24
|
+
}
|
|
25
|
+
function observeProviderFetchModule(value) {
|
|
26
|
+
if (!(0, provider_observation_1.observationBootstrapState)().installed)
|
|
27
|
+
return;
|
|
28
|
+
if (hasFetch(value))
|
|
29
|
+
value.fetch = observedFetch(value.fetch);
|
|
30
|
+
}
|
|
31
|
+
function hasFetch(value) {
|
|
32
|
+
return !!value && typeof value === 'object' && typeof Reflect.get(value, 'fetch') === 'function';
|
|
33
|
+
}
|
|
34
|
+
function observedFetch(originalFetch) {
|
|
35
|
+
const wrappedKey = Symbol.for('scopien.provider-observed-fetch.v1');
|
|
36
|
+
if (Reflect.get(originalFetch, wrappedKey) === true)
|
|
37
|
+
return originalFetch;
|
|
38
|
+
const wrapped = (input, init) => tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
39
|
+
var _a, _b, _c, _d;
|
|
40
|
+
const request = input instanceof Request ? input : undefined;
|
|
41
|
+
const url = (_a = request === null || request === void 0 ? void 0 : request.url) !== null && _a !== void 0 ? _a : String(input);
|
|
42
|
+
const headers = fetchHeaders(new Headers((_b = init === null || init === void 0 ? void 0 : init.headers) !== null && _b !== void 0 ? _b : request === null || request === void 0 ? void 0 : request.headers));
|
|
43
|
+
const method = (_d = (_c = init === null || init === void 0 ? void 0 : init.method) !== null && _c !== void 0 ? _c : request === null || request === void 0 ? void 0 : request.method) !== null && _d !== void 0 ? _d : 'GET';
|
|
44
|
+
const body = init === null || init === void 0 ? void 0 : init.body;
|
|
45
|
+
const stream = body instanceof node_stream_1.Readable ? body : undefined;
|
|
46
|
+
let observation;
|
|
47
|
+
let streamStarted = false;
|
|
48
|
+
if (stream) {
|
|
49
|
+
// Undici-based SDKs expose uploads as Node streams. Observe emitted chunks
|
|
50
|
+
// without attaching a flowing listener or changing the stream's consumer.
|
|
51
|
+
const observeStreamEvent = node_async_hooks_1.AsyncResource.bind((values) => {
|
|
52
|
+
if (values[0] === 'data') {
|
|
53
|
+
if (!streamStarted) {
|
|
54
|
+
streamStarted = true;
|
|
55
|
+
observation = safelyBegin(method, url, headers, 'fetch', values[1]);
|
|
56
|
+
}
|
|
57
|
+
observation === null || observation === void 0 ? void 0 : observation.requestBody.append(values[1]);
|
|
58
|
+
}
|
|
59
|
+
if (values[0] === 'error')
|
|
60
|
+
observation === null || observation === void 0 ? void 0 : observation.requestBody.incomplete('stream_error');
|
|
61
|
+
});
|
|
62
|
+
stream.emit = new Proxy(stream.emit, { apply(emit, receiver, values) { observeStreamEvent(values); return Reflect.apply(emit, receiver, values); } });
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
observation = safelyBegin(method, url, headers, 'fetch', body instanceof URLSearchParams ? body.toString() : body);
|
|
66
|
+
if (!observation)
|
|
67
|
+
return originalFetch(input, init);
|
|
68
|
+
if (body != null) {
|
|
69
|
+
if (typeof body === 'string' || Buffer.isBuffer(body) || body instanceof Uint8Array)
|
|
70
|
+
observation.requestBody.append(body);
|
|
71
|
+
else if (body instanceof URLSearchParams)
|
|
72
|
+
observation.requestBody.append(body.toString());
|
|
73
|
+
else if (body instanceof ArrayBuffer)
|
|
74
|
+
observation.requestBody.append(new Uint8Array(body));
|
|
75
|
+
else
|
|
76
|
+
observation.requestBody.incomplete('unsupported');
|
|
77
|
+
}
|
|
78
|
+
else if (request === null || request === void 0 ? void 0 : request.body)
|
|
79
|
+
observation.requestBody.incomplete('unsupported');
|
|
80
|
+
}
|
|
81
|
+
try {
|
|
82
|
+
const response = yield (0, provider_observation_1.withoutProviderObservation)(() => originalFetch(input, init));
|
|
83
|
+
if (stream && !streamStarted)
|
|
84
|
+
observation = safelyBegin(method, url, headers, 'fetch');
|
|
85
|
+
if (observation) {
|
|
86
|
+
const responseHeaders = fetchHeaders(response.headers);
|
|
87
|
+
if (hasContentEncoding(responseHeaders))
|
|
88
|
+
observation.responseBody.incomplete('unsupported');
|
|
89
|
+
if (response.redirected)
|
|
90
|
+
observation.redirected();
|
|
91
|
+
if (!response.body)
|
|
92
|
+
observation.finish(response.status, responseHeaders);
|
|
93
|
+
else
|
|
94
|
+
void readResponse(response.clone(), observation, responseHeaders);
|
|
95
|
+
}
|
|
96
|
+
return response;
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
if (stream && !streamStarted)
|
|
100
|
+
observation = safelyBegin(method, url, headers, 'fetch');
|
|
101
|
+
if (stream)
|
|
102
|
+
observation === null || observation === void 0 ? void 0 : observation.requestBody.incomplete('aborted');
|
|
103
|
+
observation === null || observation === void 0 ? void 0 : observation.responseBody.incomplete('aborted');
|
|
104
|
+
observation === null || observation === void 0 ? void 0 : observation.finish(undefined, {}, error instanceof Error ? error.message : 'Provider transport failed');
|
|
105
|
+
throw error;
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
Reflect.defineProperty(wrapped, wrappedKey, { value: true });
|
|
109
|
+
return wrapped;
|
|
110
|
+
}
|
|
111
|
+
function observeRequest(original, protocol) {
|
|
112
|
+
return new Proxy(original, {
|
|
113
|
+
apply(target, thisArg, args) {
|
|
114
|
+
const request = Reflect.apply(target, thisArg, args);
|
|
115
|
+
let observation;
|
|
116
|
+
let started = false;
|
|
117
|
+
const begin = (body) => {
|
|
118
|
+
if (started)
|
|
119
|
+
return observation;
|
|
120
|
+
started = true;
|
|
121
|
+
const headers = normalizedHeaders(request.getHeaders());
|
|
122
|
+
const url = actualRequestUrl(request, args, protocol);
|
|
123
|
+
observation = safelyBegin(request.method, url, headers, 'node_http', body);
|
|
124
|
+
return observation;
|
|
125
|
+
};
|
|
126
|
+
request.write = new Proxy(request.write, { apply(write, receiver, values) { var _a; if (values[0] != null)
|
|
127
|
+
(_a = begin(values[0])) === null || _a === void 0 ? void 0 : _a.requestBody.append(values[0], values[1]); return Reflect.apply(write, receiver, values); } });
|
|
128
|
+
request.end = new Proxy(request.end, { apply(end, receiver, values) { const current = begin(values[0]); if (values[0] != null && typeof values[0] !== 'function')
|
|
129
|
+
current === null || current === void 0 ? void 0 : current.requestBody.append(values[0], values[1]); return Reflect.apply(end, receiver, values); } });
|
|
130
|
+
request.prependListener('response', (response) => {
|
|
131
|
+
const current = begin();
|
|
132
|
+
if (!current)
|
|
133
|
+
return;
|
|
134
|
+
// Consumers such as Axios delete encoding headers while decoding their own stream.
|
|
135
|
+
const responseHeaders = normalizedHeaders(response.headers);
|
|
136
|
+
if (hasContentEncoding(responseHeaders))
|
|
137
|
+
current.responseBody.incomplete('unsupported');
|
|
138
|
+
// Observing emitted chunks preserves the consumer's pause/backpressure.
|
|
139
|
+
response.emit = new Proxy(response.emit, { apply(emit, receiver, values) { if (values[0] === 'data')
|
|
140
|
+
current.responseBody.append(values[1]); return Reflect.apply(emit, receiver, values); } });
|
|
141
|
+
response.once('end', () => current.finish(response.statusCode, responseHeaders));
|
|
142
|
+
response.once('aborted', () => { current.responseBody.incomplete('aborted'); current.finish(response.statusCode, responseHeaders, 'Provider response aborted'); });
|
|
143
|
+
response.once('error', () => { current.responseBody.incomplete('stream_error'); current.finish(response.statusCode, responseHeaders, 'Provider response stream failed'); });
|
|
144
|
+
});
|
|
145
|
+
request.once('error', (error) => { const current = begin(); current === null || current === void 0 ? void 0 : current.responseBody.incomplete('aborted'); current === null || current === void 0 ? void 0 : current.finish(undefined, {}, error.message); });
|
|
146
|
+
// http.get() may already have ended before the wrapper receives it.
|
|
147
|
+
if (request.writableEnded)
|
|
148
|
+
begin();
|
|
149
|
+
return request;
|
|
150
|
+
},
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
function safelyBegin(method, url, headers, transport, body) {
|
|
154
|
+
try {
|
|
155
|
+
const observation = (0, provider_observation_1.beginHttpObservation)(method, url, headers, transport, body);
|
|
156
|
+
if (hasContentEncoding(headers))
|
|
157
|
+
observation === null || observation === void 0 ? void 0 : observation.requestBody.incomplete('unsupported');
|
|
158
|
+
return observation;
|
|
159
|
+
}
|
|
160
|
+
catch (_a) {
|
|
161
|
+
return undefined;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
function hasContentEncoding(headers) {
|
|
165
|
+
return Object.entries(headers).some(([name, value]) => name.toLowerCase() === 'content-encoding' && value.split(',').some(encoding => encoding.trim() && encoding.trim().toLowerCase() !== 'identity'));
|
|
166
|
+
}
|
|
167
|
+
function actualRequestUrl(request, args, protocol) {
|
|
168
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
169
|
+
const first = args[0];
|
|
170
|
+
const original = typeof first === 'string' || first instanceof URL ? new URL(first) : undefined;
|
|
171
|
+
const options = original ? args[1] : first;
|
|
172
|
+
const option = (name) => options && typeof options === 'object' ? Reflect.get(options, name) : undefined;
|
|
173
|
+
const host = String((_d = (_c = (_b = (_a = option('hostname')) !== null && _a !== void 0 ? _a : option('host')) !== null && _b !== void 0 ? _b : original === null || original === void 0 ? void 0 : original.hostname) !== null && _c !== void 0 ? _c : request.host) !== null && _d !== void 0 ? _d : 'localhost');
|
|
174
|
+
const authority = host.includes(':') && !host.startsWith('[') ? `[${host}]` : host;
|
|
175
|
+
const port = (_e = option('port')) !== null && _e !== void 0 ? _e : original === null || original === void 0 ? void 0 : original.port;
|
|
176
|
+
const base = `${String((_g = (_f = option('protocol')) !== null && _f !== void 0 ? _f : original === null || original === void 0 ? void 0 : original.protocol) !== null && _g !== void 0 ? _g : protocol)}//${authority}${port ? `:${String(port)}` : ''}`;
|
|
177
|
+
// Origin-form //paths are literal paths; only absolute-form proxy targets replace the authority.
|
|
178
|
+
return request.path.startsWith('/') ? new URL(base + request.path).toString() : new URL(request.path, base).toString();
|
|
179
|
+
}
|
|
180
|
+
function readResponse(response, observation, headers) {
|
|
181
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
182
|
+
var _a;
|
|
183
|
+
const reader = (_a = response.body) === null || _a === void 0 ? void 0 : _a.getReader();
|
|
184
|
+
if (!reader) {
|
|
185
|
+
observation.finish(response.status, headers);
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
let bytes = 0;
|
|
189
|
+
try {
|
|
190
|
+
while (true) {
|
|
191
|
+
const chunk = yield reader.read();
|
|
192
|
+
if (chunk.done)
|
|
193
|
+
break;
|
|
194
|
+
bytes += chunk.value.length;
|
|
195
|
+
observation.responseBody.append(chunk.value);
|
|
196
|
+
if (bytes > provider_observation_1.MAX_OBSERVATION_BODY_BYTES) {
|
|
197
|
+
observation.responseBody.incomplete('limit');
|
|
198
|
+
void reader.cancel().catch(() => undefined);
|
|
199
|
+
break;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
observation.finish(response.status, headers);
|
|
203
|
+
}
|
|
204
|
+
catch (_b) {
|
|
205
|
+
observation.responseBody.incomplete('stream_error');
|
|
206
|
+
observation.finish(response.status, headers, 'Provider response stream failed');
|
|
207
|
+
}
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
function normalizedHeaders(headers) {
|
|
211
|
+
return Object.fromEntries(Object.entries(headers).filter(([, value]) => value !== undefined).map(([key, value]) => [key, Array.isArray(value) ? value.join(', ') : String(value)]));
|
|
212
|
+
}
|
|
213
|
+
function fetchHeaders(headers) { const values = {}; headers.forEach((value, key) => { values[key] = value; }); return values; }
|
|
214
|
+
//# sourceMappingURL=observation-transport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observation-transport.js","sourceRoot":"","sources":["../../../../src/lib/http/observation-transport.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { AxiosAdapter } from 'axios';
|
|
2
|
+
import { HttpHeaders } from './core/http-headers';
|
|
3
|
+
/** A serialized protocol, not a registered singleton: npm-cached pieces can load different SDK copies. */
|
|
4
|
+
export declare function providerBrokerAdapter(headers: HttpHeaders): AxiosAdapter | undefined;
|
|
5
|
+
export declare const SCOPIEN_PROVIDER_BROKER_PROTOCOL = 2;
|
|
6
|
+
//# sourceMappingURL=provider-broker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-broker.d.ts","sourceRoot":"","sources":["../../../../src/lib/http/provider-broker.ts"],"names":[],"mappings":"AACA,OAAc,EAAE,YAAY,EAA2C,MAAM,OAAO,CAAC;AAErF,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD,0GAA0G;AAC1G,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,WAAW,GAAG,YAAY,GAAG,SAAS,CA+CpF;AAoED,eAAO,MAAM,gCAAgC,IAAI,CAAC"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SCOPIEN_PROVIDER_BROKER_PROTOCOL = void 0;
|
|
4
|
+
exports.providerBrokerAdapter = providerBrokerAdapter;
|
|
5
|
+
const tslib_1 = require("tslib");
|
|
6
|
+
const node_crypto_1 = require("node:crypto");
|
|
7
|
+
const axios_1 = tslib_1.__importStar(require("axios"));
|
|
8
|
+
const zod_1 = require("zod");
|
|
9
|
+
/** A serialized protocol, not a registered singleton: npm-cached pieces can load different SDK copies. */
|
|
10
|
+
function providerBrokerAdapter(headers) {
|
|
11
|
+
const value = Object.entries(headers)
|
|
12
|
+
.filter(([key]) => /^(x-api-key|api-key|authorization)$/i.test(key))
|
|
13
|
+
.map(([, item]) => typeof item === 'string' ? item.replace(/^Bearer\s+/i, '') : item)
|
|
14
|
+
.find((item) => typeof item === 'string' && /^(scopien-provider-broker:|scopien-broker:)/.test(item));
|
|
15
|
+
if (typeof value !== 'string')
|
|
16
|
+
return undefined;
|
|
17
|
+
if (!value.startsWith(PREFIX))
|
|
18
|
+
throw new Error('PROVIDER_BROKER_UPGRADE_REQUIRED: unsupported provider credential. Upgrade the CLI and cached app.');
|
|
19
|
+
const credential = decodeCredential(value);
|
|
20
|
+
return (config) => tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
21
|
+
const url = new URL(axios_1.default.getUri(config));
|
|
22
|
+
if (!credential.allowedOrigins.includes(url.origin) || url.username || url.password) {
|
|
23
|
+
throw new Error('PROVIDER_BROKER_INVALID_TARGET: Broker credentials may only target their registered provider origin.');
|
|
24
|
+
}
|
|
25
|
+
const forwardedHeaders = {};
|
|
26
|
+
for (const [name, headerValue] of Object.entries(config.headers.toJSON())) {
|
|
27
|
+
if (/^(authorization|x-api-key|api-key|host|content-length|cookie)$/i.test(name))
|
|
28
|
+
continue;
|
|
29
|
+
if (typeof headerValue === 'string' && !headerValue.includes('scopien-provider-broker:'))
|
|
30
|
+
forwardedHeaders[name] = headerValue;
|
|
31
|
+
else if (Array.isArray(headerValue))
|
|
32
|
+
forwardedHeaders[name] = headerValue.join(', ');
|
|
33
|
+
}
|
|
34
|
+
// A new adapter attempt means a new upstream attempt. Delivery retries inside
|
|
35
|
+
// postEnvelope keep this exact requestId, so an uncertain response is not billed twice.
|
|
36
|
+
const requestId = (0, node_crypto_1.randomUUID)();
|
|
37
|
+
const envelope = {
|
|
38
|
+
requestId,
|
|
39
|
+
connectionExternalId: credential.connectionExternalId,
|
|
40
|
+
actionName: credential.actionName,
|
|
41
|
+
context: credential.context,
|
|
42
|
+
request: {
|
|
43
|
+
method: (config.method || 'GET').toUpperCase(),
|
|
44
|
+
url: url.toString(),
|
|
45
|
+
headers: forwardedHeaders,
|
|
46
|
+
body: encodeBody(config.data),
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
for (const name of ['authorization', 'x-api-key', 'api-key'])
|
|
50
|
+
config.headers.delete(name);
|
|
51
|
+
const result = yield postEnvelope(credential, JSON.stringify(envelope), config.timeout || (credential.provider === 'apify' && ['POST', 'GET'].includes(envelope.request.method) && /^\/v2\/(?:acts|actors|actor-tasks)\/[^/]+\/run-sync(?:-get-dataset-items)?$/.test(url.pathname) ? 330000 : 120000));
|
|
52
|
+
const response = {
|
|
53
|
+
status: result.status,
|
|
54
|
+
statusText: '',
|
|
55
|
+
headers: axios_1.AxiosHeaders.from(result.headers),
|
|
56
|
+
data: config.responseType === 'arraybuffer' ? Buffer.from(result.body.data, result.body.encoding) : Buffer.from(result.body.data, result.body.encoding).toString('utf8'),
|
|
57
|
+
config,
|
|
58
|
+
};
|
|
59
|
+
if (!config.validateStatus || config.validateStatus(response.status))
|
|
60
|
+
return response;
|
|
61
|
+
throw new axios_1.AxiosError(`Request failed with status code ${response.status}`, response.status >= 500 ? axios_1.AxiosError.ERR_BAD_RESPONSE : axios_1.AxiosError.ERR_BAD_REQUEST, config, undefined, response);
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
function decodeCredential(value) {
|
|
65
|
+
try {
|
|
66
|
+
const parsed = JSON.parse(Buffer.from(value.slice(PREFIX.length), 'base64url').toString('utf8'));
|
|
67
|
+
const credential = credentialSchema.parse(parsed);
|
|
68
|
+
const endpoint = new URL(credential.gatewayUrl);
|
|
69
|
+
if (!['http:', 'https:'].includes(endpoint.protocol) || endpoint.username || endpoint.password || !endpoint.pathname.endsWith('/v1/worker/provider-requests'))
|
|
70
|
+
throw new Error('endpoint');
|
|
71
|
+
return credential;
|
|
72
|
+
}
|
|
73
|
+
catch (_a) {
|
|
74
|
+
// Never include the opaque value: it contains the short-lived engine credential.
|
|
75
|
+
throw new Error('PROVIDER_BROKER_INVALID: malformed provider broker credential. Upgrade the CLI and cached app.');
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
function encodeBody(value) {
|
|
79
|
+
if (value === undefined || value === null)
|
|
80
|
+
return null;
|
|
81
|
+
if (typeof value === 'string')
|
|
82
|
+
return { encoding: 'utf8', data: value };
|
|
83
|
+
if (Buffer.isBuffer(value) && Buffer.from(value.toString('utf8')).equals(value))
|
|
84
|
+
return { encoding: 'utf8', data: value.toString('utf8') };
|
|
85
|
+
if (Buffer.isBuffer(value))
|
|
86
|
+
return { encoding: 'base64', data: value.toString('base64') };
|
|
87
|
+
throw new Error('PROVIDER_BROKER_UNSUPPORTED_BODY: Provider requests must contain text or buffered bytes; streams are not supported.');
|
|
88
|
+
}
|
|
89
|
+
function postEnvelope(credential, body, timeout) {
|
|
90
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
91
|
+
for (let delivery = 0;; delivery++) {
|
|
92
|
+
let response;
|
|
93
|
+
try {
|
|
94
|
+
response = yield fetch(credential.gatewayUrl, {
|
|
95
|
+
method: 'POST',
|
|
96
|
+
headers: { authorization: `Bearer ${credential.engineToken}`, 'content-type': 'application/json', 'x-scopien-provider-broker': '1' },
|
|
97
|
+
body,
|
|
98
|
+
redirect: 'error',
|
|
99
|
+
signal: AbortSignal.timeout(timeout),
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
catch (_a) {
|
|
103
|
+
if (delivery < 1)
|
|
104
|
+
continue;
|
|
105
|
+
throw new Error('PROVIDER_BROKER_UNAVAILABLE: provider delivery could not be confirmed. Request identity was retained for the delivery retry.');
|
|
106
|
+
}
|
|
107
|
+
if (!response.ok) {
|
|
108
|
+
if (delivery < 1 && [502, 503, 504].includes(response.status))
|
|
109
|
+
continue;
|
|
110
|
+
throw new Error(`PROVIDER_BROKER_REJECTED: gateway HTTP ${response.status}; use a saved provider connection and a compatible CLI/server.`);
|
|
111
|
+
}
|
|
112
|
+
let raw;
|
|
113
|
+
try {
|
|
114
|
+
raw = yield response.json();
|
|
115
|
+
}
|
|
116
|
+
catch (_b) {
|
|
117
|
+
throw new Error('PROVIDER_BROKER_INVALID_RESPONSE: gateway returned non-JSON.');
|
|
118
|
+
}
|
|
119
|
+
const parsed = responseSchema.safeParse(raw);
|
|
120
|
+
if (!parsed.success)
|
|
121
|
+
throw new Error('PROVIDER_BROKER_INVALID_RESPONSE: gateway did not return an HTTP envelope.');
|
|
122
|
+
return parsed.data;
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
const PREFIX = 'scopien-provider-broker:v1:';
|
|
127
|
+
const credentialSchema = zod_1.z.object({
|
|
128
|
+
version: zod_1.z.literal(1),
|
|
129
|
+
provider: zod_1.z.string().min(1),
|
|
130
|
+
allowedOrigins: zod_1.z.array(zod_1.z.url()).min(1).default(['https://api.apollo.io']),
|
|
131
|
+
gatewayUrl: zod_1.z.url(),
|
|
132
|
+
engineToken: zod_1.z.string().min(1),
|
|
133
|
+
projectId: zod_1.z.string().min(1),
|
|
134
|
+
connectionExternalId: zod_1.z.string().min(1),
|
|
135
|
+
actionName: zod_1.z.string().min(1),
|
|
136
|
+
context: zod_1.z.record(zod_1.z.string(), zod_1.z.string()),
|
|
137
|
+
});
|
|
138
|
+
const responseSchema = zod_1.z.object({
|
|
139
|
+
status: zod_1.z.number().int().min(100).max(599),
|
|
140
|
+
headers: zod_1.z.record(zod_1.z.string(), zod_1.z.string()),
|
|
141
|
+
body: zod_1.z.object({ encoding: zod_1.z.enum(['utf8', 'base64']), data: zod_1.z.string() }),
|
|
142
|
+
});
|
|
143
|
+
exports.SCOPIEN_PROVIDER_BROKER_PROTOCOL = 2;
|
|
144
|
+
//# sourceMappingURL=provider-broker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-broker.js","sourceRoot":"","sources":["../../../../src/lib/http/provider-broker.ts"],"names":[],"mappings":";;;AAMA,sDA+CC;;AArDD,6CAAyC;AACzC,uDAAqF;AACrF,6BAAwB;AAGxB,0GAA0G;AAC1G,SAAgB,qBAAqB,CAAC,OAAoB;IACxD,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;SAClC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,sCAAsC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SACnE,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;SACpF,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,IAAI,6CAA6C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACxG,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAChD,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,oGAAoG,CAAC,CAAC;IACrJ,MAAM,UAAU,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAE3C,OAAO,CAAO,MAAM,EAAE,EAAE;QACtB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QAC1C,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;YACpF,MAAM,IAAI,KAAK,CAAC,sGAAsG,CAAC,CAAC;QAC1H,CAAC;QACD,MAAM,gBAAgB,GAA2B,EAAE,CAAC;QACpD,KAAK,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;YAC1E,IAAI,iEAAiE,CAAC,IAAI,CAAC,IAAI,CAAC;gBAAE,SAAS;YAC3F,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,0BAA0B,CAAC;gBAAE,gBAAgB,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC;iBAC1H,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC;gBAAE,gBAAgB,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvF,CAAC;QACD,8EAA8E;QAC9E,wFAAwF;QACxF,MAAM,SAAS,GAAG,IAAA,wBAAU,GAAE,CAAC;QAC/B,MAAM,QAAQ,GAAG;YACf,SAAS;YACT,oBAAoB,EAAE,UAAU,CAAC,oBAAoB;YACrD,UAAU,EAAE,UAAU,CAAC,UAAU;YACjC,OAAO,EAAE,UAAU,CAAC,OAAO;YAC3B,OAAO,EAAE;gBACP,MAAM,EAAE,CAAC,MAAM,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC,WAAW,EAAE;gBAC9C,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE;gBACnB,OAAO,EAAE,gBAAgB;gBACzB,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC;aAC9B;SACF,CAAC;QACF,KAAK,MAAM,IAAI,IAAI,CAAC,eAAe,EAAE,WAAW,EAAE,SAAS,CAAC;YAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC1F,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,KAAK,OAAO,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,6EAA6E,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAO,CAAC,CAAC,CAAC,MAAO,CAAC,CAAC,CAAC;QAC1S,MAAM,QAAQ,GAAkB;YAC9B,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,UAAU,EAAE,EAAE;YACd,OAAO,EAAE,oBAAY,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;YAC1C,IAAI,EAAE,MAAM,CAAC,YAAY,KAAK,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;YACxK,MAAM;SACP,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,OAAO,QAAQ,CAAC;QACtF,MAAM,IAAI,kBAAU,CAAC,mCAAmC,QAAQ,CAAC,MAAM,EAAE,EAAE,QAAQ,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,kBAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC,kBAAU,CAAC,eAAe,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC7L,CAAC,CAAA,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAa;IACrC,IAAI,CAAC;QACH,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;QAC1G,MAAM,UAAU,GAAG,gBAAgB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAClD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAChD,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,8BAA8B,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC;QAC3L,OAAO,UAAU,CAAC;IACpB,CAAC;IAAC,WAAM,CAAC;QACP,iFAAiF;QACjF,MAAM,IAAI,KAAK,CAAC,gGAAgG,CAAC,CAAC;IACpH,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,KAAc;IAChC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACvD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IACxE,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;IAC3I,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;IAC1F,MAAM,IAAI,KAAK,CAAC,qHAAqH,CAAC,CAAC;AACzI,CAAC;AAED,SAAe,YAAY,CAAC,UAA4C,EAAE,IAAY,EAAE,OAAe;;QACrG,KAAK,IAAI,QAAQ,GAAG,CAAC,GAAI,QAAQ,EAAE,EAAE,CAAC;YACpC,IAAI,QAAkB,CAAC;YACvB,IAAI,CAAC;gBACH,QAAQ,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,UAAU,EAAE;oBAC5C,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,UAAU,CAAC,WAAW,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,2BAA2B,EAAE,GAAG,EAAE;oBACpI,IAAI;oBACJ,QAAQ,EAAE,OAAO;oBACjB,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC;iBACrC,CAAC,CAAC;YACL,CAAC;YAAC,WAAM,CAAC;gBACP,IAAI,QAAQ,GAAG,CAAC;oBAAE,SAAS;gBAC3B,MAAM,IAAI,KAAK,CAAC,8HAA8H,CAAC,CAAC;YAClJ,CAAC;YACD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,IAAI,QAAQ,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;oBAAE,SAAS;gBACxE,MAAM,IAAI,KAAK,CAAC,0CAA0C,QAAQ,CAAC,MAAM,gEAAgE,CAAC,CAAC;YAC7I,CAAC;YACD,IAAI,GAAY,CAAC;YACjB,IAAI,CAAC;gBAAC,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YAAC,CAAC;YAAC,WAAM,CAAC;gBAAC,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;YAAC,CAAC;YAC/H,MAAM,MAAM,GAAG,cAAc,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YAC7C,IAAI,CAAC,MAAM,CAAC,OAAO;gBAAE,MAAM,IAAI,KAAK,CAAC,4EAA4E,CAAC,CAAC;YACnH,OAAO,MAAM,CAAC,IAAI,CAAC;QACrB,CAAC;IACH,CAAC;CAAA;AAED,MAAM,MAAM,GAAG,6BAA6B,CAAC;AAC7C,MAAM,gBAAgB,GAAG,OAAC,CAAC,MAAM,CAAC;IAChC,OAAO,EAAE,OAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACrB,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3B,cAAc,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,uBAAuB,CAAC,CAAC;IAC1E,UAAU,EAAE,OAAC,CAAC,GAAG,EAAE;IACnB,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9B,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5B,oBAAoB,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvC,UAAU,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7B,OAAO,EAAE,OAAC,CAAC,MAAM,CAAC,OAAC,CAAC,MAAM,EAAE,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC;CAC1C,CAAC,CAAC;AACH,MAAM,cAAc,GAAG,OAAC,CAAC,MAAM,CAAC;IAC9B,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IAC1C,OAAO,EAAE,OAAC,CAAC,MAAM,CAAC,OAAC,CAAC,MAAM,EAAE,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC;IACzC,IAAI,EAAE,OAAC,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,OAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,EAAE,CAAC;CAC3E,CAAC,CAAC;AAEU,QAAA,gCAAgC,GAAG,CAAC,CAAC"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import type { ObservationBody } from './observation-sanitize';
|
|
2
|
+
export declare function withProviderObservationScope<T>(context: Record<string, string>, fn: () => Promise<T>): Promise<T>;
|
|
3
|
+
export declare function registerProviderObservation(params: ObservationBinding): void;
|
|
4
|
+
export declare function providerDerivedCredentialReceiver(auth: unknown): (token: unknown) => void;
|
|
5
|
+
export declare function flushProviderObservations(timeoutMs?: number): Promise<ObservationCoverage>;
|
|
6
|
+
export declare function withoutProviderObservation<T>(fn: () => T): T;
|
|
7
|
+
export declare function beginHttpObservation(method: string, url: string, headers: Record<string, string>, transport: 'node_http' | 'fetch', body?: unknown): HttpObservation | undefined;
|
|
8
|
+
export declare function observationBootstrapState(): {
|
|
9
|
+
installed: boolean;
|
|
10
|
+
};
|
|
11
|
+
export declare class ObservationBuffer {
|
|
12
|
+
private readonly enabled;
|
|
13
|
+
private readonly multipartInput;
|
|
14
|
+
private chunks;
|
|
15
|
+
private bytes;
|
|
16
|
+
private reason;
|
|
17
|
+
constructor(enabled: boolean, multipartInput?: boolean);
|
|
18
|
+
append(value: unknown, encoding?: unknown): void;
|
|
19
|
+
incomplete(reason: ObservationReason): void;
|
|
20
|
+
credentials(): string[];
|
|
21
|
+
snapshot(secrets: string[], headers?: Record<string, string>): {
|
|
22
|
+
bytes: number;
|
|
23
|
+
complete: boolean;
|
|
24
|
+
body: ObservationBody | null;
|
|
25
|
+
multipart: boolean;
|
|
26
|
+
reason?: ObservationReason;
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
export declare const MAX_OBSERVATION_BODY_BYTES: number;
|
|
30
|
+
export type ObservationCoverage = {
|
|
31
|
+
unattributedRequests: number;
|
|
32
|
+
unsupportedBodies: number;
|
|
33
|
+
pendingRequests: number;
|
|
34
|
+
unsupportedRedirects?: number;
|
|
35
|
+
};
|
|
36
|
+
export type ObservationPolicy = {
|
|
37
|
+
version: number;
|
|
38
|
+
captureBodies: boolean;
|
|
39
|
+
transportTypes: string[];
|
|
40
|
+
};
|
|
41
|
+
export type ObservationBinding = {
|
|
42
|
+
connectionExternalId: string;
|
|
43
|
+
actionName: string;
|
|
44
|
+
serverUrl: string;
|
|
45
|
+
engineToken: string;
|
|
46
|
+
auth: unknown;
|
|
47
|
+
observation?: ObservationPolicy;
|
|
48
|
+
managed?: boolean;
|
|
49
|
+
};
|
|
50
|
+
type ObservationReason = 'limit' | 'stream_error' | 'aborted' | 'unsupported' | 'fetch_redirect_hops_unobserved';
|
|
51
|
+
export type HttpObservation = {
|
|
52
|
+
requestBody: ObservationBuffer;
|
|
53
|
+
responseBody: ObservationBuffer;
|
|
54
|
+
redirected(): void;
|
|
55
|
+
finish(status: number | undefined, headers: Record<string, string>, error?: string): void;
|
|
56
|
+
};
|
|
57
|
+
export type ObservedHttpEnvelope = {
|
|
58
|
+
requestId: string;
|
|
59
|
+
connectionExternalId: string;
|
|
60
|
+
actionName: string;
|
|
61
|
+
context: Record<string, string>;
|
|
62
|
+
transport: 'node_http' | 'fetch';
|
|
63
|
+
request: {
|
|
64
|
+
method: string;
|
|
65
|
+
url: string;
|
|
66
|
+
headers: Record<string, string>;
|
|
67
|
+
body: ObservationBody | null;
|
|
68
|
+
};
|
|
69
|
+
response: {
|
|
70
|
+
status: number;
|
|
71
|
+
headers: Record<string, string>;
|
|
72
|
+
body: ObservationBody | null;
|
|
73
|
+
} | null;
|
|
74
|
+
error?: string;
|
|
75
|
+
durationMs: number;
|
|
76
|
+
capture: {
|
|
77
|
+
requestComplete: boolean;
|
|
78
|
+
responseComplete: boolean;
|
|
79
|
+
requestBytes: number;
|
|
80
|
+
responseBytes: number;
|
|
81
|
+
reason?: ObservationReason;
|
|
82
|
+
};
|
|
83
|
+
};
|
|
84
|
+
export {};
|
|
85
|
+
//# sourceMappingURL=provider-observation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-observation.d.ts","sourceRoot":"","sources":["../../../../src/lib/http/provider-observation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MAX_OBSERVATION_BODY_BYTES = exports.ObservationBuffer = void 0;
|
|
4
|
+
exports.withProviderObservationScope = withProviderObservationScope;
|
|
5
|
+
exports.registerProviderObservation = registerProviderObservation;
|
|
6
|
+
exports.providerDerivedCredentialReceiver = providerDerivedCredentialReceiver;
|
|
7
|
+
exports.flushProviderObservations = flushProviderObservations;
|
|
8
|
+
exports.withoutProviderObservation = withoutProviderObservation;
|
|
9
|
+
exports.beginHttpObservation = beginHttpObservation;
|
|
10
|
+
exports.observationBootstrapState = observationBootstrapState;
|
|
11
|
+
const tslib_1 = require("tslib");
|
|
12
|
+
const node_async_hooks_1 = require("node:async_hooks");
|
|
13
|
+
const node_crypto_1 = require("node:crypto");
|
|
14
|
+
const observation_sanitize_1 = require("./observation-sanitize");
|
|
15
|
+
const stateKey = Symbol.for('scopien.provider-observation.v1');
|
|
16
|
+
const prior = Reflect.get(globalThis, stateKey);
|
|
17
|
+
const state = isState(prior) ? prior : { scope: new node_async_hooks_1.AsyncLocalStorage(), suppression: new node_async_hooks_1.AsyncLocalStorage(), installed: false };
|
|
18
|
+
Reflect.set(globalThis, stateKey, state);
|
|
19
|
+
function withProviderObservationScope(context, fn) {
|
|
20
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
21
|
+
const scope = { context, bindings: new Map(), pending: new Set(), coverage: { unattributedRequests: 0, unsupportedBodies: 0, pendingRequests: 0 }, closed: false };
|
|
22
|
+
return state.scope.run(scope, fn);
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
function registerProviderObservation(params) {
|
|
26
|
+
const scope = state.scope.getStore();
|
|
27
|
+
if (!scope)
|
|
28
|
+
return;
|
|
29
|
+
if (params.managed || !params.observation || params.observation.version !== 1) {
|
|
30
|
+
scope.bindings.delete(params.connectionExternalId);
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
scope.bindings.set(params.connectionExternalId, Object.assign(Object.assign({}, params), { secrets: (0, observation_sanitize_1.credentialValues)(params.auth), sanitizationSecrets: (0, observation_sanitize_1.savedAuthValues)(params.auth) }));
|
|
34
|
+
}
|
|
35
|
+
function providerDerivedCredentialReceiver(auth) {
|
|
36
|
+
var _a;
|
|
37
|
+
const scope = state.scope.getStore();
|
|
38
|
+
const source = (0, observation_sanitize_1.credentialValues)(auth);
|
|
39
|
+
const matches = [...(_a = scope === null || scope === void 0 ? void 0 : scope.bindings.values()) !== null && _a !== void 0 ? _a : []].filter(binding => binding.secrets.some(secret => source.includes(secret)));
|
|
40
|
+
return (token) => {
|
|
41
|
+
if (matches.length !== 1)
|
|
42
|
+
return;
|
|
43
|
+
for (const secret of (0, observation_sanitize_1.credentialValues)(token))
|
|
44
|
+
if (!matches[0].secrets.includes(secret))
|
|
45
|
+
matches[0].secrets.push(secret);
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
function flushProviderObservations() {
|
|
49
|
+
return tslib_1.__awaiter(this, arguments, void 0, function* (timeoutMs = 5000) {
|
|
50
|
+
const scope = state.scope.getStore();
|
|
51
|
+
if (!scope)
|
|
52
|
+
return { unattributedRequests: 0, unsupportedBodies: 0, pendingRequests: 0 };
|
|
53
|
+
let timer;
|
|
54
|
+
yield Promise.race([Promise.allSettled([...scope.pending]), new Promise(resolve => { timer = setTimeout(resolve, timeoutMs); })]);
|
|
55
|
+
if (timer)
|
|
56
|
+
clearTimeout(timer);
|
|
57
|
+
scope.coverage.pendingRequests += scope.pending.size;
|
|
58
|
+
scope.closed = true;
|
|
59
|
+
return Object.assign({}, scope.coverage);
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
function withoutProviderObservation(fn) { return state.suppression.run(true, fn); }
|
|
63
|
+
function beginHttpObservation(method, url, headers, transport, body) {
|
|
64
|
+
var _a;
|
|
65
|
+
const scope = state.scope.getStore();
|
|
66
|
+
if (!scope || scope.closed || state.suppression.getStore() || scope.bindings.size === 0)
|
|
67
|
+
return;
|
|
68
|
+
const bindings = [...scope.bindings.values()];
|
|
69
|
+
// Opaque broker traffic is recorded by the enforcing gateway, never here too.
|
|
70
|
+
if (Object.values(headers).some(value => value.includes('scopien-provider-broker:')))
|
|
71
|
+
return;
|
|
72
|
+
// Control bodies may contain saved credentials as data. Authenticate the
|
|
73
|
+
// control request before attempting provider attribution from those bodies.
|
|
74
|
+
if (bindings.some(binding => isEngineControlRequest(url, headers, binding)))
|
|
75
|
+
return;
|
|
76
|
+
const bodyTokens = typeof body === 'string' ? (0, observation_sanitize_1.observationCredentialValues)(body) : Buffer.isBuffer(body) ? (0, observation_sanitize_1.observationCredentialValues)(body.toString('utf8')) : [];
|
|
77
|
+
const candidates = bindings.filter(binding => binding.secrets.some(secret => Object.entries(headers).some(([key, value]) => (0, observation_sanitize_1.credentialKey)(key) && (value === secret || value === `Bearer ${secret}` || value === `Basic ${secret}`)) || [...new URL(url).searchParams].some(([key, value]) => (0, observation_sanitize_1.credentialKey)(key) && value === secret) || bodyTokens.includes(secret)));
|
|
78
|
+
if (candidates.length !== 1) {
|
|
79
|
+
scope.coverage.unattributedRequests++;
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
const binding = candidates[0];
|
|
83
|
+
if (!((_a = binding.observation) === null || _a === void 0 ? void 0 : _a.transportTypes.includes(transport))) {
|
|
84
|
+
scope.coverage.unattributedRequests++;
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
let done = false;
|
|
88
|
+
let redirected = false;
|
|
89
|
+
let finishPending = () => undefined;
|
|
90
|
+
const pending = new Promise(resolve => { finishPending = resolve; });
|
|
91
|
+
scope.pending.add(pending);
|
|
92
|
+
void pending.finally(() => scope.pending.delete(pending));
|
|
93
|
+
const startedAt = Date.now();
|
|
94
|
+
const requestId = (0, node_crypto_1.randomUUID)();
|
|
95
|
+
const requestBody = new ObservationBuffer(binding.observation.captureBodies, typeof FormData !== 'undefined' && body instanceof FormData);
|
|
96
|
+
const responseBody = new ObservationBuffer(binding.observation.captureBodies);
|
|
97
|
+
return {
|
|
98
|
+
requestBody, responseBody,
|
|
99
|
+
redirected() { var _a; if (!redirected)
|
|
100
|
+
scope.coverage.unsupportedRedirects = ((_a = scope.coverage.unsupportedRedirects) !== null && _a !== void 0 ? _a : 0) + 1; redirected = true; },
|
|
101
|
+
finish(status, responseHeaders, error) {
|
|
102
|
+
if (done)
|
|
103
|
+
return;
|
|
104
|
+
done = true;
|
|
105
|
+
const secrets = [...bindings.flatMap(item => [...item.secrets, ...item.sanitizationSecrets]), ...requestBody.credentials(), ...responseBody.credentials()];
|
|
106
|
+
const request = requestBody.snapshot(secrets, headers);
|
|
107
|
+
// Unsupported multipart fields may be reflected under innocent names in
|
|
108
|
+
// the response. Keep only transport metadata in that audit envelope.
|
|
109
|
+
const unsafeRequest = request.multipart || !request.complete;
|
|
110
|
+
if (unsafeRequest)
|
|
111
|
+
responseBody.incomplete('unsupported');
|
|
112
|
+
const response = responseBody.snapshot(secrets, responseHeaders);
|
|
113
|
+
if (request.reason || response.reason)
|
|
114
|
+
scope.coverage.unsupportedBodies++;
|
|
115
|
+
const envelope = Object.assign(Object.assign({ requestId, connectionExternalId: binding.connectionExternalId, actionName: binding.actionName, context: scope.context, transport, request: { method, url: (0, observation_sanitize_1.sanitizeObservationUrl)(url, secrets), headers: (0, observation_sanitize_1.sanitizeObservationHeaders)(headers, secrets), body: request.body }, response: status === undefined ? null : { status, headers: unsafeRequest ? {} : (0, observation_sanitize_1.sanitizeObservationHeaders)(responseHeaders, secrets), body: response.body } }, (error ? { error: unsafeRequest ? 'Provider request did not complete.' : (0, observation_sanitize_1.removeSecrets)(error, secrets).slice(0, 4096) } : {})), { durationMs: Date.now() - startedAt, capture: Object.assign({ requestComplete: request.complete, responseComplete: response.complete && status !== undefined, requestBytes: request.bytes, responseBytes: response.bytes }, (request.reason || response.reason || redirected ? { reason: request.reason || response.reason || 'fetch_redirect_hops_unobserved' } : {})) });
|
|
116
|
+
void deliver(binding, envelope).catch(() => { scope.coverage.pendingRequests++; }).finally(finishPending);
|
|
117
|
+
},
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
function observationBootstrapState() { return state; }
|
|
121
|
+
function deliver(binding, envelope) {
|
|
122
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
123
|
+
const body = JSON.stringify(envelope);
|
|
124
|
+
yield withoutProviderObservation(() => tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
125
|
+
for (let attempt = 0; attempt < 2; attempt++) {
|
|
126
|
+
try {
|
|
127
|
+
const result = yield fetch(`${binding.serverUrl}v1/worker/provider-observations`, { method: 'POST', redirect: 'error', headers: { authorization: `Bearer ${binding.engineToken}`, 'content-type': 'application/json' }, body, signal: AbortSignal.timeout(2000) });
|
|
128
|
+
if (result.ok) {
|
|
129
|
+
const ack = yield result.json();
|
|
130
|
+
if (ack && typeof ack === 'object' && Reflect.get(ack, 'ok') === true && [undefined, 'pending'].includes(Reflect.get(ack, 'auditStatus')))
|
|
131
|
+
return;
|
|
132
|
+
// A successful HTTP response alone does not confirm durable audit storage.
|
|
133
|
+
continue;
|
|
134
|
+
}
|
|
135
|
+
if (result.status < 500)
|
|
136
|
+
break;
|
|
137
|
+
}
|
|
138
|
+
catch ( /* Retry only observation delivery with its original request identity. */_a) { /* Retry only observation delivery with its original request identity. */ }
|
|
139
|
+
}
|
|
140
|
+
throw new Error('Provider observation delivery was not confirmed');
|
|
141
|
+
}));
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
function isEngineControlRequest(url, headers, binding) {
|
|
145
|
+
if (!Object.entries(headers).some(([key, value]) => key.toLowerCase() === 'authorization' && value === `Bearer ${binding.engineToken}`))
|
|
146
|
+
return false;
|
|
147
|
+
const target = new URL(url);
|
|
148
|
+
const server = new URL(binding.serverUrl);
|
|
149
|
+
const prefix = server.pathname.endsWith('/') ? server.pathname : `${server.pathname}/`;
|
|
150
|
+
return target.origin === server.origin && (target.pathname === server.pathname || target.pathname.startsWith(prefix));
|
|
151
|
+
}
|
|
152
|
+
function isState(value) {
|
|
153
|
+
return !!value && typeof value === 'object' && Reflect.get(value, 'scope') instanceof node_async_hooks_1.AsyncLocalStorage && Reflect.get(value, 'suppression') instanceof node_async_hooks_1.AsyncLocalStorage && typeof Reflect.get(value, 'installed') === 'boolean';
|
|
154
|
+
}
|
|
155
|
+
class ObservationBuffer {
|
|
156
|
+
constructor(enabled, multipartInput = false) {
|
|
157
|
+
this.enabled = enabled;
|
|
158
|
+
this.multipartInput = multipartInput;
|
|
159
|
+
this.chunks = [];
|
|
160
|
+
this.bytes = 0;
|
|
161
|
+
}
|
|
162
|
+
append(value, encoding) {
|
|
163
|
+
const chunk = Buffer.isBuffer(value) ? value : typeof value === 'string' ? Buffer.from(value, typeof encoding === 'string' && Buffer.isEncoding(encoding) ? encoding : 'utf8') : value instanceof Uint8Array ? Buffer.from(value) : undefined;
|
|
164
|
+
if (!chunk) {
|
|
165
|
+
this.reason = 'unsupported';
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
this.bytes += chunk.length;
|
|
169
|
+
if (!this.enabled)
|
|
170
|
+
return;
|
|
171
|
+
if (this.bytes > exports.MAX_OBSERVATION_BODY_BYTES) {
|
|
172
|
+
this.reason = 'limit';
|
|
173
|
+
this.chunks = [];
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
if (!this.reason)
|
|
177
|
+
this.chunks.push(Buffer.from(chunk));
|
|
178
|
+
}
|
|
179
|
+
incomplete(reason) { this.reason = reason; this.chunks = []; }
|
|
180
|
+
credentials() { return this.enabled && !this.reason ? (0, observation_sanitize_1.observationCredentialValues)(Buffer.concat(this.chunks).toString('utf8')) : []; }
|
|
181
|
+
snapshot(secrets, headers = {}) {
|
|
182
|
+
const contentType = Object.entries(headers).filter(([name]) => name.toLowerCase() === 'content-type').map(([, value]) => value).join(',');
|
|
183
|
+
const bytes = Buffer.concat(this.chunks);
|
|
184
|
+
const multipart = this.multipartInput || (0, observation_sanitize_1.isMultipartObservationBody)(bytes.toString('utf8'), contentType);
|
|
185
|
+
const body = this.enabled && !multipart ? (0, observation_sanitize_1.sanitizeObservationBytes)(bytes, secrets, !this.reason, contentType) : null;
|
|
186
|
+
if (this.enabled && !this.reason && body === null)
|
|
187
|
+
this.reason = 'unsupported';
|
|
188
|
+
return Object.assign({ bytes: this.bytes, complete: !this.reason, body, multipart }, (this.reason ? { reason: this.reason } : {}));
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
exports.ObservationBuffer = ObservationBuffer;
|
|
192
|
+
exports.MAX_OBSERVATION_BODY_BYTES = 1024 * 1024;
|
|
193
|
+
//# sourceMappingURL=provider-observation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-observation.js","sourceRoot":"","sources":["../../../../src/lib/http/provider-observation.ts"],"names":[],"mappings":";;;AAUA,oEAGC;AAED,kEAQC;AAED,8EAQC;AAED,8DASC;AAED,gEAAyG;AAEzG,oDAgDC;AAED,8DAAqF;;AAlGrF,uDAAqD;AACrD,6CAAyC;AACzC,iEAAgP;AAGhP,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;AAC/D,MAAM,KAAK,GAAY,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;AACzD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,oCAAiB,EAAoB,EAAE,WAAW,EAAE,IAAI,oCAAiB,EAAW,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AAC7J,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;AAEzC,SAAsB,4BAA4B,CAAI,OAA+B,EAAE,EAAoB;;QACzG,MAAM,KAAK,GAAqB,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,EAAE,QAAQ,EAAE,EAAE,oBAAoB,EAAE,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;QACrL,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACpC,CAAC;CAAA;AAED,SAAgB,2BAA2B,CAAC,MAA0B;IACpE,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;IACrC,IAAI,CAAC,KAAK;QAAE,OAAO;IACnB,IAAI,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,WAAW,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;QAC9E,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACnD,OAAO;IACT,CAAC;IACD,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,oBAAoB,kCAAO,MAAM,KAAE,OAAO,EAAE,IAAA,uCAAgB,EAAC,MAAM,CAAC,IAAI,CAAC,EAAE,mBAAmB,EAAE,IAAA,sCAAe,EAAC,MAAM,CAAC,IAAI,CAAC,IAAG,CAAC;AAC5J,CAAC;AAED,SAAgB,iCAAiC,CAAC,IAAa;;IAC7D,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;IACrC,MAAM,MAAM,GAAG,IAAA,uCAAgB,EAAC,IAAI,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,CAAC,GAAG,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,QAAQ,CAAC,MAAM,EAAE,mCAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC/H,OAAO,CAAC,KAAc,EAAE,EAAE;QACxB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QACjC,KAAK,MAAM,MAAM,IAAI,IAAA,uCAAgB,EAAC,KAAK,CAAC;YAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAAE,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1H,CAAC,CAAC;AACJ,CAAC;AAED,SAAsB,yBAAyB;iEAAC,SAAS,GAAG,IAAI;QAC9D,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QACrC,IAAI,CAAC,KAAK;YAAE,OAAO,EAAE,oBAAoB,EAAE,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,CAAC;QACzF,IAAI,KAAgD,CAAC;QACrD,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,OAAO,CAAO,OAAO,CAAC,EAAE,GAAG,KAAK,GAAG,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxI,IAAI,KAAK;YAAE,YAAY,CAAC,KAAK,CAAC,CAAC;QAC/B,KAAK,CAAC,QAAQ,CAAC,eAAe,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QACrD,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;QACpB,yBAAY,KAAK,CAAC,QAAQ,EAAG;IAC/B,CAAC;CAAA;AAED,SAAgB,0BAA0B,CAAI,EAAW,IAAO,OAAO,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AAEzG,SAAgB,oBAAoB,CAAC,MAAc,EAAE,GAAW,EAAE,OAA+B,EAAE,SAAgC,EAAE,IAAc;;IACjJ,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;IACrC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,WAAW,CAAC,QAAQ,EAAE,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO;IAChG,MAAM,QAAQ,GAAG,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAC9C,8EAA8E;IAC9E,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,0BAA0B,CAAC,CAAC;QAAE,OAAO;IAC7F,yEAAyE;IACzE,4EAA4E;IAC5E,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,sBAAsB,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAAE,OAAO;IACpF,MAAM,UAAU,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAA,kDAA2B,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAA,kDAA2B,EAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAClK,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,IAAA,oCAAa,EAAC,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,UAAU,MAAM,EAAE,IAAI,KAAK,KAAK,SAAS,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,IAAA,oCAAa,EAAC,GAAG,CAAC,IAAI,KAAK,KAAK,MAAM,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACvW,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAAC,KAAK,CAAC,QAAQ,CAAC,oBAAoB,EAAE,CAAC;QAAC,OAAO;IAAC,CAAC;IAC/E,MAAM,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;IAC9B,IAAI,CAAC,CAAA,MAAA,OAAO,CAAC,WAAW,0CAAE,cAAc,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA,EAAE,CAAC;QAAC,KAAK,CAAC,QAAQ,CAAC,oBAAoB,EAAE,CAAC;QAAC,OAAO;IAAC,CAAC;IAChH,IAAI,IAAI,GAAG,KAAK,CAAC;IACjB,IAAI,UAAU,GAAG,KAAK,CAAC;IACvB,IAAI,aAAa,GAAe,GAAG,EAAE,CAAC,SAAS,CAAC;IAChD,MAAM,OAAO,GAAG,IAAI,OAAO,CAAO,OAAO,CAAC,EAAE,GAAG,aAAa,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3E,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC3B,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IAC1D,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,SAAS,GAAG,IAAA,wBAAU,GAAE,CAAC;IAC/B,MAAM,WAAW,GAAG,IAAI,iBAAiB,CAAC,OAAO,CAAC,WAAW,CAAC,aAAa,EAAE,OAAO,QAAQ,KAAK,WAAW,IAAI,IAAI,YAAY,QAAQ,CAAC,CAAC;IAC1I,MAAM,YAAY,GAAG,IAAI,iBAAiB,CAAC,OAAO,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;IAC9E,OAAO;QACL,WAAW,EAAE,YAAY;QACzB,UAAU,aAAK,IAAI,CAAC,UAAU;YAAE,KAAK,CAAC,QAAQ,CAAC,oBAAoB,GAAG,CAAC,MAAA,KAAK,CAAC,QAAQ,CAAC,oBAAoB,mCAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC;QAC1I,MAAM,CAAC,MAAM,EAAE,eAAe,EAAE,KAAK;YACnC,IAAI,IAAI;gBAAE,OAAO;YACjB,IAAI,GAAG,IAAI,CAAC;YACZ,MAAM,OAAO,GAAG,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,EAAE,GAAG,WAAW,CAAC,WAAW,EAAE,EAAE,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC,CAAC;YAC3J,MAAM,OAAO,GAAG,WAAW,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACvD,wEAAwE;YACxE,qEAAqE;YACrE,MAAM,aAAa,GAAG,OAAO,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;YAC7D,IAAI,aAAa;gBAAE,YAAY,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;YAC1D,MAAM,QAAQ,GAAG,YAAY,CAAC,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;YACjE,IAAI,OAAO,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM;gBAAE,KAAK,CAAC,QAAQ,CAAC,iBAAiB,EAAE,CAAC;YAC1E,MAAM,QAAQ,iCACZ,SAAS,EAAE,oBAAoB,EAAE,OAAO,CAAC,oBAAoB,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,SAAS,EAChI,OAAO,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,IAAA,6CAAsB,EAAC,GAAG,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,IAAA,iDAA0B,EAAC,OAAO,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,EACzI,QAAQ,EAAE,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAA,iDAA0B,EAAC,eAAe,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,IACxJ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,oCAAoC,CAAC,CAAC,CAAC,IAAA,oCAAa,EAAC,KAAK,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,EACpK,OAAO,kBAAI,eAAe,EAAE,OAAO,CAAC,QAAQ,EAAE,gBAAgB,EAAE,QAAQ,CAAC,QAAQ,IAAI,MAAM,KAAK,SAAS,EAAE,YAAY,EAAE,OAAO,CAAC,KAAK,EAAE,aAAa,EAAE,QAAQ,CAAC,KAAK,IAAK,CAAC,OAAO,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,IAAI,gCAAgC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IACrT,CAAC;YACF,KAAK,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QAC5G,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAgB,yBAAyB,KAA6B,OAAO,KAAK,CAAC,CAAC,CAAC;AAErF,SAAe,OAAO,CAAC,OAA2B,EAAE,QAA8B;;QAChF,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACtC,MAAM,0BAA0B,CAAC,GAAS,EAAE;YAC1C,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC;gBAC7C,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,CAAC,SAAS,iCAAiC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,OAAO,CAAC,WAAW,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBACnQ,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;wBACd,MAAM,GAAG,GAAY,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;wBACzC,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;4BAAE,OAAO;wBAClJ,2EAA2E;wBAC3E,SAAS;oBACX,CAAC;oBACD,IAAI,MAAM,CAAC,MAAM,GAAG,GAAG;wBAAE,MAAM;gBACjC,CAAC;gBAAC,QAAQ,yEAAyE,IAA3E,CAAC,CAAC,yEAAyE,CAAC,CAAC;YACvF,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACrE,CAAC,CAAA,CAAC,CAAC;IACL,CAAC;CAAA;AAED,SAAS,sBAAsB,CAAC,GAAW,EAAE,OAA+B,EAAE,OAA2B;IACvG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,eAAe,IAAI,KAAK,KAAK,UAAU,OAAO,CAAC,WAAW,EAAE,CAAC;QAAE,OAAO,KAAK,CAAC;IACtJ,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IAC5B,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,GAAG,CAAC;IACvF,OAAO,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,KAAK,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;AACxH,CAAC;AAED,SAAS,OAAO,CAAC,KAAc;IAC7B,OAAO,CAAC,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,YAAY,oCAAiB,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,aAAa,CAAC,YAAY,oCAAiB,IAAI,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,WAAW,CAAC,KAAK,SAAS,CAAC;AACpO,CAAC;AAED,MAAa,iBAAiB;IAI5B,YAA6B,OAAgB,EAAmB,iBAAiB,KAAK;QAAzD,YAAO,GAAP,OAAO,CAAS;QAAmB,mBAAc,GAAd,cAAc,CAAQ;QAH9E,WAAM,GAAa,EAAE,CAAC;QACtB,UAAK,GAAG,CAAC,CAAC;IAEuE,CAAC;IAC1F,MAAM,CAAC,KAAc,EAAE,QAAkB;QACvC,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,QAAQ,KAAK,QAAQ,IAAI,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,YAAY,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC9O,IAAI,CAAC,KAAK,EAAE,CAAC;YAAC,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC;YAAC,OAAO;QAAC,CAAC;QACpD,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC;QAC3B,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO;QAC1B,IAAI,IAAI,CAAC,KAAK,GAAG,kCAA0B,EAAE,CAAC;YAAC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC;YAAC,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;YAAC,OAAO;QAAC,CAAC;QACjG,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACzD,CAAC;IACD,UAAU,CAAC,MAAyB,IAAU,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC;IACvF,WAAW,KAAe,OAAO,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAA,kDAA2B,EAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAChJ,QAAQ,CAAC,OAAiB,EAAE,UAAkC,EAAE;QAC9D,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC1I,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACzC,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,IAAI,IAAA,iDAA0B,EAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC,CAAC;QACzG,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAA,+CAAwB,EAAC,KAAK,EAAE,OAAO,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACrH,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,KAAK,IAAI;YAAE,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC;QAC/E,uBAAS,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,IAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAG;IACzH,CAAC;CACF;AAvBD,8CAuBC;AAEY,QAAA,0BAA0B,GAAG,IAAI,GAAG,IAAI,CAAC"}
|