@elastic/synthetics 1.24.4 → 1.25.0
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 +67 -0
- package/dist/common_types.d.ts +17 -0
- package/dist/common_types.d.ts.map +1 -1
- package/dist/core/gatherer.d.ts +4 -4
- package/dist/core/gatherer.d.ts.map +1 -1
- package/dist/core/gatherer.js +28 -7
- package/dist/core/gatherer.js.map +1 -1
- package/dist/core/globals.js +1 -1
- package/dist/core/index.d.ts +2 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +16 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/runner.d.ts +1 -1
- package/dist/core/runner.d.ts.map +1 -1
- package/dist/core/runner.js +86 -58
- package/dist/core/runner.js.map +1 -1
- package/dist/dsl/api-journey.d.ts +62 -0
- package/dist/dsl/api-journey.d.ts.map +1 -0
- package/dist/dsl/api-journey.js +55 -0
- package/dist/dsl/api-journey.js.map +1 -0
- package/dist/dsl/index.d.ts +1 -0
- package/dist/dsl/index.d.ts.map +1 -1
- package/dist/dsl/index.js +1 -0
- package/dist/dsl/index.js.map +1 -1
- package/dist/dsl/journey.d.ts +10 -2
- package/dist/dsl/journey.d.ts.map +1 -1
- package/dist/dsl/journey.js +11 -2
- package/dist/dsl/journey.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/loader.d.ts.map +1 -1
- package/dist/loader.js +66 -1
- package/dist/loader.js.map +1 -1
- package/dist/network-timings.d.ts +55 -0
- package/dist/network-timings.d.ts.map +1 -0
- package/dist/network-timings.js +107 -0
- package/dist/network-timings.js.map +1 -0
- package/dist/plugins/api-network.d.ts +39 -0
- package/dist/plugins/api-network.d.ts.map +1 -0
- package/dist/plugins/api-network.js +235 -0
- package/dist/plugins/api-network.js.map +1 -0
- package/dist/plugins/network.d.ts +0 -6
- package/dist/plugins/network.d.ts.map +1 -1
- package/dist/plugins/network.js +5 -70
- package/dist/plugins/network.js.map +1 -1
- package/dist/plugins/plugin-manager.d.ts +11 -4
- package/dist/plugins/plugin-manager.d.ts.map +1 -1
- package/dist/plugins/plugin-manager.js +36 -16
- package/dist/plugins/plugin-manager.js.map +1 -1
- package/dist/push/index.d.ts.map +1 -1
- package/dist/push/index.js +4 -0
- package/dist/push/index.js.map +1 -1
- package/dist/push/monitor.d.ts.map +1 -1
- package/dist/push/monitor.js +1 -1
- package/dist/push/monitor.js.map +1 -1
- package/dist/push/run-local.d.ts.map +1 -1
- package/dist/push/run-local.js +2 -1
- package/dist/push/run-local.js.map +1 -1
- package/dist/push/utils.d.ts +7 -0
- package/dist/push/utils.d.ts.map +1 -1
- package/dist/push/utils.js +15 -1
- package/dist/push/utils.js.map +1 -1
- package/dist/reporters/base.d.ts +2 -2
- package/dist/reporters/base.d.ts.map +1 -1
- package/dist/reporters/base.js.map +1 -1
- package/dist/reporters/index.d.ts +2 -2
- package/dist/reporters/index.d.ts.map +1 -1
- package/dist/reporters/index.js.map +1 -1
- package/dist/reporters/json.d.ts +6 -2
- package/dist/reporters/json.d.ts.map +1 -1
- package/dist/reporters/json.js +68 -33
- package/dist/reporters/json.js.map +1 -1
- package/package.json +5 -5
- package/src/common_types.ts +22 -0
- package/src/core/gatherer.ts +41 -10
- package/src/core/globals.ts +1 -1
- package/src/core/index.ts +28 -0
- package/src/core/runner.ts +93 -67
- package/src/dsl/api-journey.ts +93 -0
- package/src/dsl/index.ts +1 -0
- package/src/dsl/journey.ts +21 -9
- package/src/index.ts +6 -0
- package/src/loader.ts +78 -2
- package/src/network-timings.ts +130 -0
- package/src/plugins/api-network.ts +252 -0
- package/src/plugins/network.ts +5 -87
- package/src/plugins/plugin-manager.ts +60 -19
- package/src/push/index.ts +11 -0
- package/src/push/monitor.ts +6 -2
- package/src/push/run-local.ts +2 -1
- package/src/push/utils.ts +15 -0
- package/src/reporters/base.ts +2 -1
- package/src/reporters/index.ts +2 -1
- package/src/reporters/json.ts +74 -41
- package/templates/README.md +3 -1
- package/templates/journeys/advanced-api-example-helpers.ts +79 -0
- package/templates/journeys/advanced-api-example.journey.ts +52 -0
- package/templates/journeys/api-example.journey.ts +35 -0
- package/templates/synthetics.config.ts +2 -0
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* MIT License
|
|
4
|
+
*
|
|
5
|
+
* Copyright (c) 2020-present, Elastic NV
|
|
6
|
+
*
|
|
7
|
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
8
|
+
* of this software and associated documentation files (the "Software"), to deal
|
|
9
|
+
* in the Software without restriction, including without limitation the rights
|
|
10
|
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
11
|
+
* copies of the Software, and to permit persons to whom the Software is
|
|
12
|
+
* furnished to do so, subject to the following conditions:
|
|
13
|
+
*
|
|
14
|
+
* The above copyright notice and this permission notice shall be included in
|
|
15
|
+
* all copies or substantial portions of the Software.
|
|
16
|
+
*
|
|
17
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
18
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
19
|
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
20
|
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
21
|
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
22
|
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
23
|
+
* THE SOFTWARE.
|
|
24
|
+
*
|
|
25
|
+
*/
|
|
26
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
27
|
+
exports.calcTotalTime = exports.getResourceTimings = exports.firstPositive = exports.roundMilliSecs = void 0;
|
|
28
|
+
const roundMilliSecs = (value) => {
|
|
29
|
+
return Math.floor(value * 1000) / 1000;
|
|
30
|
+
};
|
|
31
|
+
exports.roundMilliSecs = roundMilliSecs;
|
|
32
|
+
/**
|
|
33
|
+
* First positive number in the list, used to derive the `blocked` phase from
|
|
34
|
+
* whichever Resource Timing marker fired first.
|
|
35
|
+
*/
|
|
36
|
+
const firstPositive = (numbers) => {
|
|
37
|
+
for (let i = 0; i < numbers.length; ++i) {
|
|
38
|
+
if (numbers[i] > 0) {
|
|
39
|
+
return numbers[i];
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return null;
|
|
43
|
+
};
|
|
44
|
+
exports.firstPositive = firstPositive;
|
|
45
|
+
/**
|
|
46
|
+
* Maps a Playwright Resource Timing object into the per-phase `NetworkInfo`
|
|
47
|
+
* timings. `total` is left at `-1` for the caller to fill via `calcTotalTime`
|
|
48
|
+
* once `loadEndTime`/`requestSentTime` are known. `receive` resolves to `-1`
|
|
49
|
+
* until `responseEnd` is available (browser journeys learn it on
|
|
50
|
+
* `requestfinished`); API journeys have the full timing up front.
|
|
51
|
+
*/
|
|
52
|
+
function getResourceTimings(rtiming) {
|
|
53
|
+
const blocked = (0, exports.roundMilliSecs)((0, exports.firstPositive)([
|
|
54
|
+
rtiming.domainLookupStart,
|
|
55
|
+
rtiming.connectStart,
|
|
56
|
+
rtiming.requestStart,
|
|
57
|
+
])) || -1;
|
|
58
|
+
const dns = rtiming.domainLookupEnd !== -1
|
|
59
|
+
? (0, exports.roundMilliSecs)(rtiming.domainLookupEnd - rtiming.domainLookupStart)
|
|
60
|
+
: -1;
|
|
61
|
+
const connect = rtiming.connectEnd !== -1
|
|
62
|
+
? (0, exports.roundMilliSecs)(rtiming.connectEnd - rtiming.connectStart)
|
|
63
|
+
: -1;
|
|
64
|
+
const ssl = rtiming.secureConnectionStart !== -1
|
|
65
|
+
? (0, exports.roundMilliSecs)(rtiming.connectEnd - rtiming.secureConnectionStart)
|
|
66
|
+
: -1;
|
|
67
|
+
const wait = rtiming.responseStart !== -1
|
|
68
|
+
? (0, exports.roundMilliSecs)(rtiming.responseStart - rtiming.requestStart)
|
|
69
|
+
: -1;
|
|
70
|
+
const receive = rtiming.responseEnd !== -1
|
|
71
|
+
? (0, exports.roundMilliSecs)(rtiming.responseEnd - rtiming.responseStart)
|
|
72
|
+
: -1;
|
|
73
|
+
return {
|
|
74
|
+
blocked,
|
|
75
|
+
dns,
|
|
76
|
+
ssl,
|
|
77
|
+
connect,
|
|
78
|
+
send: 0,
|
|
79
|
+
wait,
|
|
80
|
+
receive,
|
|
81
|
+
total: -1,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
exports.getResourceTimings = getResourceTimings;
|
|
85
|
+
/**
|
|
86
|
+
* Returns the `total` phase by summing the positive phases. Falls back to the
|
|
87
|
+
* wall-clock span between `requestSentTime` and `loadEndTime` when Resource
|
|
88
|
+
* Timing data is unavailable (`startTime <= 0`, e.g. HAR replay or aborted
|
|
89
|
+
* requests). Pure — the caller assigns the result onto `timings.total`.
|
|
90
|
+
*/
|
|
91
|
+
function calcTotalTime(entry, rtiming) {
|
|
92
|
+
if (rtiming.startTime <= 0) {
|
|
93
|
+
const end = entry.loadEndTime || entry.responseReceivedTime || entry.requestSentTime;
|
|
94
|
+
const total = (0, exports.roundMilliSecs)((end - entry.requestSentTime) * 1000);
|
|
95
|
+
return total <= 0 ? -1 : total;
|
|
96
|
+
}
|
|
97
|
+
const { timings } = entry;
|
|
98
|
+
return [
|
|
99
|
+
timings.blocked,
|
|
100
|
+
timings.dns,
|
|
101
|
+
timings.connect,
|
|
102
|
+
timings.wait,
|
|
103
|
+
timings.receive,
|
|
104
|
+
].reduce((pre, cur) => ((cur || -1) > 0 ? cur + pre : pre), 0);
|
|
105
|
+
}
|
|
106
|
+
exports.calcTotalTime = calcTotalTime;
|
|
107
|
+
//# sourceMappingURL=network-timings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network-timings.js","sourceRoot":"","sources":["../src/network-timings.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;;;AAaI,MAAM,cAAc,GAAG,CAAC,KAAa,EAAU,EAAE;IACtD,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;AACzC,CAAC,CAAC;AAFW,QAAA,cAAc,kBAEzB;AAEF;;;GAGG;AACI,MAAM,aAAa,GAAG,CAAC,OAAiB,EAAiB,EAAE;IAChE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;QACvC,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;YAClB,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC;SACnB;KACF;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAPW,QAAA,aAAa,iBAOxB;AAEF;;;;;;GAMG;AACH,SAAgB,kBAAkB,CAChC,OAAuB;IAEvB,MAAM,OAAO,GACX,IAAA,sBAAc,EACZ,IAAA,qBAAa,EAAC;QACZ,OAAO,CAAC,iBAAiB;QACzB,OAAO,CAAC,YAAY;QACpB,OAAO,CAAC,YAAY;KACrB,CAAC,CACH,IAAI,CAAC,CAAC,CAAC;IACV,MAAM,GAAG,GACP,OAAO,CAAC,eAAe,KAAK,CAAC,CAAC;QAC5B,CAAC,CAAC,IAAA,sBAAc,EAAC,OAAO,CAAC,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC;QACrE,CAAC,CAAC,CAAC,CAAC,CAAC;IACT,MAAM,OAAO,GACX,OAAO,CAAC,UAAU,KAAK,CAAC,CAAC;QACvB,CAAC,CAAC,IAAA,sBAAc,EAAC,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC;QAC3D,CAAC,CAAC,CAAC,CAAC,CAAC;IACT,MAAM,GAAG,GACP,OAAO,CAAC,qBAAqB,KAAK,CAAC,CAAC;QAClC,CAAC,CAAC,IAAA,sBAAc,EAAC,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,qBAAqB,CAAC;QACpE,CAAC,CAAC,CAAC,CAAC,CAAC;IACT,MAAM,IAAI,GACR,OAAO,CAAC,aAAa,KAAK,CAAC,CAAC;QAC1B,CAAC,CAAC,IAAA,sBAAc,EAAC,OAAO,CAAC,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;QAC9D,CAAC,CAAC,CAAC,CAAC,CAAC;IACT,MAAM,OAAO,GACX,OAAO,CAAC,WAAW,KAAK,CAAC,CAAC;QACxB,CAAC,CAAC,IAAA,sBAAc,EAAC,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC;QAC7D,CAAC,CAAC,CAAC,CAAC,CAAC;IAET,OAAO;QACL,OAAO;QACP,GAAG;QACH,GAAG;QACH,OAAO;QACP,IAAI,EAAE,CAAC;QACP,IAAI;QACJ,OAAO;QACP,KAAK,EAAE,CAAC,CAAC;KACV,CAAC;AACJ,CAAC;AA1CD,gDA0CC;AAED;;;;;GAKG;AACH,SAAgB,aAAa,CAC3B,KAAkB,EAClB,OAAuB;IAEvB,IAAI,OAAO,CAAC,SAAS,IAAI,CAAC,EAAE;QAC1B,MAAM,GAAG,GACP,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,oBAAoB,IAAI,KAAK,CAAC,eAAe,CAAC;QAC3E,MAAM,KAAK,GAAG,IAAA,sBAAc,EAAC,CAAC,GAAG,GAAG,KAAK,CAAC,eAAe,CAAC,GAAG,IAAI,CAAC,CAAC;QACnE,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;KAChC;IAED,MAAM,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;IAC1B,OAAO;QACL,OAAO,CAAC,OAAO;QACf,OAAO,CAAC,GAAG;QACX,OAAO,CAAC,OAAO;QACf,OAAO,CAAC,IAAI;QACZ,OAAO,CAAC,OAAO;KAChB,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AACjE,CAAC;AAnBD,sCAmBC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MIT License
|
|
3
|
+
*
|
|
4
|
+
* Copyright (c) 2020-present, Elastic NV
|
|
5
|
+
*
|
|
6
|
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
7
|
+
* of this software and associated documentation files (the "Software"), to deal
|
|
8
|
+
* in the Software without restriction, including without limitation the rights
|
|
9
|
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
10
|
+
* copies of the Software, and to permit persons to whom the Software is
|
|
11
|
+
* furnished to do so, subject to the following conditions:
|
|
12
|
+
*
|
|
13
|
+
* The above copyright notice and this permission notice shall be included in
|
|
14
|
+
* all copies or substantial portions of the Software.
|
|
15
|
+
*
|
|
16
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
17
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
18
|
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
19
|
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
20
|
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
21
|
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
22
|
+
* THE SOFTWARE.
|
|
23
|
+
*
|
|
24
|
+
*/
|
|
25
|
+
import { NetworkInfo, APIDriver } from '../common_types';
|
|
26
|
+
import { Step } from '../dsl';
|
|
27
|
+
export declare class APINetworkManager {
|
|
28
|
+
private driver;
|
|
29
|
+
results: Array<NetworkInfo>;
|
|
30
|
+
_currentStep: Partial<Step> | null;
|
|
31
|
+
private _originalFetch?;
|
|
32
|
+
private _patched;
|
|
33
|
+
constructor(driver: APIDriver);
|
|
34
|
+
start(): Promise<void>;
|
|
35
|
+
private _interceptRequest;
|
|
36
|
+
private _restore;
|
|
37
|
+
stop(): Promise<NetworkInfo[]>;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=api-network.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-network.d.ts","sourceRoot":"","sources":["../../src/plugins/api-network.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAGH,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEzD,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAuD9B,qBAAa,iBAAiB;IAMhB,OAAO,CAAC,MAAM;IAL1B,OAAO,EAAE,KAAK,CAAC,WAAW,CAAC,CAAM;IACjC,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAQ;IAC1C,OAAO,CAAC,cAAc,CAAC,CAA6B;IACpD,OAAO,CAAC,QAAQ,CAAS;gBAEL,MAAM,EAAE,SAAS;IAE/B,KAAK;YAUG,iBAAiB;IA0H/B,OAAO,CAAC,QAAQ;IAOV,IAAI;CAKX"}
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* MIT License
|
|
4
|
+
*
|
|
5
|
+
* Copyright (c) 2020-present, Elastic NV
|
|
6
|
+
*
|
|
7
|
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
8
|
+
* of this software and associated documentation files (the "Software"), to deal
|
|
9
|
+
* in the Software without restriction, including without limitation the rights
|
|
10
|
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
11
|
+
* copies of the Software, and to permit persons to whom the Software is
|
|
12
|
+
* furnished to do so, subject to the following conditions:
|
|
13
|
+
*
|
|
14
|
+
* The above copyright notice and this permission notice shall be included in
|
|
15
|
+
* all copies or substantial portions of the Software.
|
|
16
|
+
*
|
|
17
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
18
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
19
|
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
20
|
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
21
|
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
22
|
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
23
|
+
* THE SOFTWARE.
|
|
24
|
+
*
|
|
25
|
+
*/
|
|
26
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
27
|
+
exports.APINetworkManager = void 0;
|
|
28
|
+
const logger_1 = require("../core/logger");
|
|
29
|
+
const helpers_1 = require("../helpers");
|
|
30
|
+
const network_timings_1 = require("../network-timings");
|
|
31
|
+
/**
|
|
32
|
+
* Kibana UI expects the requestStartTime and loadEndTime to be baseline
|
|
33
|
+
* in seconds as they have the logic to convert it to milliseconds before
|
|
34
|
+
* using for offset calculation
|
|
35
|
+
*/
|
|
36
|
+
function epochTimeInSeconds() {
|
|
37
|
+
return (0, helpers_1.getTimestamp)() / 1e6;
|
|
38
|
+
}
|
|
39
|
+
function normalizeUrl(urlOrRequest) {
|
|
40
|
+
if (typeof urlOrRequest === 'string')
|
|
41
|
+
return urlOrRequest;
|
|
42
|
+
try {
|
|
43
|
+
return urlOrRequest.url();
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
return String(urlOrRequest);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
// Best-effort request body size; returns 0 for shapes we can't measure.
|
|
50
|
+
function bodyBytes(body) {
|
|
51
|
+
if (body == null)
|
|
52
|
+
return 0;
|
|
53
|
+
if (typeof body === 'string')
|
|
54
|
+
return Buffer.byteLength(body);
|
|
55
|
+
if (Buffer.isBuffer(body))
|
|
56
|
+
return body.byteLength;
|
|
57
|
+
if (body instanceof Uint8Array)
|
|
58
|
+
return body.byteLength;
|
|
59
|
+
if (typeof body === 'object') {
|
|
60
|
+
try {
|
|
61
|
+
return Buffer.byteLength(JSON.stringify(body));
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
return 0;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return 0;
|
|
68
|
+
}
|
|
69
|
+
// Wire size of headers (`name: value\r\n`) for ECS `*.bytes`.
|
|
70
|
+
function headersBytes(headers) {
|
|
71
|
+
let total = 0;
|
|
72
|
+
for (const [k, v] of Object.entries(headers ?? {})) {
|
|
73
|
+
total += Buffer.byteLength(k) + Buffer.byteLength(String(v)) + 4; // ": " + CRLF
|
|
74
|
+
}
|
|
75
|
+
return total;
|
|
76
|
+
}
|
|
77
|
+
class APINetworkManager {
|
|
78
|
+
driver;
|
|
79
|
+
results = [];
|
|
80
|
+
_currentStep = null;
|
|
81
|
+
_originalFetch;
|
|
82
|
+
_patched = false;
|
|
83
|
+
constructor(driver) {
|
|
84
|
+
this.driver = driver;
|
|
85
|
+
}
|
|
86
|
+
async start() {
|
|
87
|
+
if (this._patched)
|
|
88
|
+
return;
|
|
89
|
+
(0, logger_1.log)(`Plugins: started collecting API network events`);
|
|
90
|
+
const request = this.driver.request;
|
|
91
|
+
this._originalFetch = request.fetch.bind(request);
|
|
92
|
+
request.fetch = (urlOrRequest, options) => this._interceptRequest(urlOrRequest, options);
|
|
93
|
+
this._patched = true;
|
|
94
|
+
}
|
|
95
|
+
async _interceptRequest(urlOrRequest, options) {
|
|
96
|
+
const url = normalizeUrl(urlOrRequest);
|
|
97
|
+
const timestamp = (0, helpers_1.getTimestamp)();
|
|
98
|
+
const requestSentTime = epochTimeInSeconds();
|
|
99
|
+
const httpMethod = (options?.method ?? 'GET').toUpperCase();
|
|
100
|
+
(0, logger_1.log)(`API network: ${httpMethod} ${url}`);
|
|
101
|
+
const requestBody = options?.postData ?? options?.data;
|
|
102
|
+
const requestBodyBytes = bodyBytes(requestBody);
|
|
103
|
+
const requestHeaders = options?.headers ?? {};
|
|
104
|
+
const entry = {
|
|
105
|
+
step: this._currentStep,
|
|
106
|
+
timestamp,
|
|
107
|
+
url,
|
|
108
|
+
type: 'fetch',
|
|
109
|
+
isNavigationRequest: false,
|
|
110
|
+
browser: { name: 'api', version: '' },
|
|
111
|
+
request: {
|
|
112
|
+
url,
|
|
113
|
+
method: httpMethod,
|
|
114
|
+
headers: requestHeaders,
|
|
115
|
+
bytes: headersBytes(requestHeaders) + requestBodyBytes,
|
|
116
|
+
body: requestBodyBytes > 0 ? { bytes: requestBodyBytes } : undefined,
|
|
117
|
+
},
|
|
118
|
+
response: {
|
|
119
|
+
status: -1,
|
|
120
|
+
headers: {},
|
|
121
|
+
mimeType: 'x-unknown',
|
|
122
|
+
},
|
|
123
|
+
requestSentTime,
|
|
124
|
+
loadEndTime: -1,
|
|
125
|
+
responseReceivedTime: -1,
|
|
126
|
+
resourceSize: 0,
|
|
127
|
+
transferSize: 0,
|
|
128
|
+
timings: {
|
|
129
|
+
blocked: -1,
|
|
130
|
+
dns: -1,
|
|
131
|
+
ssl: -1,
|
|
132
|
+
connect: -1,
|
|
133
|
+
send: -1,
|
|
134
|
+
wait: -1,
|
|
135
|
+
receive: -1,
|
|
136
|
+
total: -1,
|
|
137
|
+
},
|
|
138
|
+
};
|
|
139
|
+
this.results.push(entry);
|
|
140
|
+
const startTime = (0, helpers_1.now)();
|
|
141
|
+
try {
|
|
142
|
+
const response = (await this._originalFetch(urlOrRequest, options));
|
|
143
|
+
const headers = response.headers();
|
|
144
|
+
// Prefer `Content-Length`; fall back to the body buffer (chunked
|
|
145
|
+
// responses omit the header).
|
|
146
|
+
const contentLength = parseContentLength(headers['content-length']);
|
|
147
|
+
let responseBodyBytes = contentLength;
|
|
148
|
+
if (responseBodyBytes < 0) {
|
|
149
|
+
try {
|
|
150
|
+
const buf = await response.body();
|
|
151
|
+
responseBodyBytes = buf?.byteLength ?? 0;
|
|
152
|
+
}
|
|
153
|
+
catch {
|
|
154
|
+
responseBodyBytes = 0;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
const responseHeaderBytes = headersBytes(headers);
|
|
158
|
+
const transferBytes = responseHeaderBytes + responseBodyBytes;
|
|
159
|
+
entry.response = {
|
|
160
|
+
url: response.url(),
|
|
161
|
+
status: response.status(),
|
|
162
|
+
statusText: response.statusText(),
|
|
163
|
+
headers,
|
|
164
|
+
mimeType: headers['content-type'] ?? 'x-unknown',
|
|
165
|
+
bytes: transferBytes,
|
|
166
|
+
body: { bytes: responseBodyBytes },
|
|
167
|
+
};
|
|
168
|
+
entry.transferSize = transferBytes;
|
|
169
|
+
entry.resourceSize = responseBodyBytes;
|
|
170
|
+
entry.responseReceivedTime = epochTimeInSeconds();
|
|
171
|
+
entry.loadEndTime = entry.responseReceivedTime;
|
|
172
|
+
// Per-phase Resource Timing (Playwright >= 1.62). Phases that did not
|
|
173
|
+
// happen (reused keep-alive socket) or are unknown (HAR replay) come
|
|
174
|
+
// back as `-1`; `calcTotalTime` then falls back to the wall-clock span.
|
|
175
|
+
const timing = response.timing();
|
|
176
|
+
entry.timings = (0, network_timings_1.getResourceTimings)(timing);
|
|
177
|
+
entry.timings.total = (0, network_timings_1.calcTotalTime)(entry, timing);
|
|
178
|
+
// Native (Playwright >= 1.61) TLS/socket info for the final hop;
|
|
179
|
+
// both resolve to `null` for non-HTTPS or unknown addresses.
|
|
180
|
+
const [serverAddr, securityDetails] = await Promise.all([
|
|
181
|
+
response.serverAddr(),
|
|
182
|
+
response.securityDetails(),
|
|
183
|
+
]);
|
|
184
|
+
if (serverAddr) {
|
|
185
|
+
entry.response.remoteIPAddress = serverAddr.ipAddress;
|
|
186
|
+
entry.response.remotePort = serverAddr.port;
|
|
187
|
+
}
|
|
188
|
+
if (securityDetails) {
|
|
189
|
+
entry.response.securityDetails = {
|
|
190
|
+
...securityDetails,
|
|
191
|
+
protocol: normalizeTLSProtocol(securityDetails.protocol),
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
return response;
|
|
195
|
+
}
|
|
196
|
+
catch (error) {
|
|
197
|
+
entry.responseReceivedTime = epochTimeInSeconds();
|
|
198
|
+
entry.loadEndTime = entry.responseReceivedTime;
|
|
199
|
+
entry.timings.total = (0, network_timings_1.roundMilliSecs)((0, helpers_1.now)() - startTime);
|
|
200
|
+
throw error;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
// Drop the own-property `fetch` so the prototype method is reachable
|
|
204
|
+
// again, keeping the context usable after the plugin stops.
|
|
205
|
+
_restore() {
|
|
206
|
+
if (!this._patched)
|
|
207
|
+
return;
|
|
208
|
+
delete this.driver.request.fetch;
|
|
209
|
+
this._originalFetch = undefined;
|
|
210
|
+
this._patched = false;
|
|
211
|
+
}
|
|
212
|
+
async stop() {
|
|
213
|
+
this._restore();
|
|
214
|
+
(0, logger_1.log)(`Plugins: stopped collecting API network events`);
|
|
215
|
+
return this.results;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
exports.APINetworkManager = APINetworkManager;
|
|
219
|
+
function parseContentLength(raw) {
|
|
220
|
+
if (!raw)
|
|
221
|
+
return -1;
|
|
222
|
+
const n = Number(raw);
|
|
223
|
+
return Number.isFinite(n) && n >= 0 ? n : -1;
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* `securityDetails()` reports `"TLSv1.3"` but the reporter splits on a
|
|
227
|
+
* space to derive `tls.version_protocol`/`tls.version`. Normalize to the
|
|
228
|
+
* spaced `"TLS 1.3"` shape so both journey types emit consistent fields.
|
|
229
|
+
*/
|
|
230
|
+
function normalizeTLSProtocol(raw) {
|
|
231
|
+
if (!raw)
|
|
232
|
+
return undefined;
|
|
233
|
+
return raw.replace(/\s*v(?=\d)/i, ' ');
|
|
234
|
+
}
|
|
235
|
+
//# sourceMappingURL=api-network.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-network.js","sourceRoot":"","sources":["../../src/plugins/api-network.ts"],"names":[],"mappings":"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"}
|
|
@@ -49,12 +49,6 @@ export declare class NetworkManager {
|
|
|
49
49
|
private _onRequest;
|
|
50
50
|
private _onResponse;
|
|
51
51
|
private _onRequestCompleted;
|
|
52
|
-
/**
|
|
53
|
-
* Calculates the total time for the network request based on the ResourceTiming
|
|
54
|
-
* data from Playwright. Fallbacks to the event timings if ResourceTiming data
|
|
55
|
-
* is not available.
|
|
56
|
-
*/
|
|
57
|
-
private _calcTotalTime;
|
|
58
52
|
stop(): Promise<NetworkInfo[]>;
|
|
59
53
|
}
|
|
60
54
|
//# sourceMappingURL=network.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../../src/plugins/network.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAGH,OAAO,EAAE,WAAW,EAAe,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEnE,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../../src/plugins/network.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAGH,OAAO,EAAE,WAAW,EAAe,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEnE,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAa9B;;;GAGG;AACH,eAAO,MAAM,oBAAoB,eAA6B,CAAC;AAM/D,qBAAa,cAAc;IAMb,OAAO,CAAC,MAAM;IAL1B,OAAO,CAAC,QAAQ,CAAc;IAC9B,OAAO,CAAC,gBAAgB,CAA4B;IACpD,OAAO,EAAE,KAAK,CAAC,WAAW,CAAC,CAAM;IACjC,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC,CAAQ;gBAEf,MAAM,EAAE,MAAM;IAElC;;;;;OAKG;IACH,OAAO,CAAC,WAAW;IAenB,OAAO,CAAC,qBAAqB;IAWvB,KAAK;IAeX,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,UAAU;YAyDJ,WAAW;YAuDX,mBAAmB;IAmC3B,IAAI;CAkBX"}
|
package/dist/plugins/network.js
CHANGED
|
@@ -27,6 +27,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
27
27
|
exports.NetworkManager = exports.NETWORK_ENTRY_SUMBOL = void 0;
|
|
28
28
|
const logger_1 = require("../core/logger");
|
|
29
29
|
const helpers_1 = require("../helpers");
|
|
30
|
+
const network_timings_1 = require("../network-timings");
|
|
30
31
|
/**
|
|
31
32
|
* Kibana UI expects the requestStartTime and loadEndTime to be baseline
|
|
32
33
|
* in seconds as they have the logic to convert it to milliseconds before
|
|
@@ -35,20 +36,6 @@ const helpers_1 = require("../helpers");
|
|
|
35
36
|
function epochTimeInSeconds() {
|
|
36
37
|
return (0, helpers_1.getTimestamp)() / 1e6;
|
|
37
38
|
}
|
|
38
|
-
/**
|
|
39
|
-
* Find the first positive number in an array for Resource timing data
|
|
40
|
-
*/
|
|
41
|
-
const firstPositive = (numbers) => {
|
|
42
|
-
for (let i = 0; i < numbers.length; ++i) {
|
|
43
|
-
if (numbers[i] > 0) {
|
|
44
|
-
return numbers[i];
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
return null;
|
|
48
|
-
};
|
|
49
|
-
const roundMilliSecs = (value) => {
|
|
50
|
-
return Math.floor(value * 1000) / 1000;
|
|
51
|
-
};
|
|
52
39
|
/**
|
|
53
40
|
* Used as a key in each Network Request to identify the
|
|
54
41
|
* associated request across distinct lifecycle events
|
|
@@ -181,34 +168,8 @@ class NetworkManager {
|
|
|
181
168
|
// Gather all resource timing information up until the
|
|
182
169
|
// TTFB(Time to first byte) is received
|
|
183
170
|
const timing = request.timing();
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
timing.connectStart,
|
|
187
|
-
timing.requestStart,
|
|
188
|
-
])) || -1;
|
|
189
|
-
const dns = timing.domainLookupEnd !== -1
|
|
190
|
-
? roundMilliSecs(timing.domainLookupEnd - timing.domainLookupStart)
|
|
191
|
-
: -1;
|
|
192
|
-
const connect = timing.connectEnd !== -1
|
|
193
|
-
? roundMilliSecs(timing.connectEnd - timing.connectStart)
|
|
194
|
-
: -1;
|
|
195
|
-
const ssl = timing.secureConnectionStart !== -1
|
|
196
|
-
? roundMilliSecs(timing.connectEnd - timing.secureConnectionStart)
|
|
197
|
-
: -1;
|
|
198
|
-
const wait = timing.responseStart !== -1
|
|
199
|
-
? roundMilliSecs(timing.responseStart - timing.requestStart)
|
|
200
|
-
: -1;
|
|
201
|
-
networkEntry.timings = {
|
|
202
|
-
blocked,
|
|
203
|
-
dns,
|
|
204
|
-
ssl,
|
|
205
|
-
connect,
|
|
206
|
-
send: 0,
|
|
207
|
-
wait,
|
|
208
|
-
receive: -1,
|
|
209
|
-
total: -1,
|
|
210
|
-
};
|
|
211
|
-
this._calcTotalTime(networkEntry, timing);
|
|
171
|
+
networkEntry.timings = (0, network_timings_1.getResourceTimings)(timing);
|
|
172
|
+
networkEntry.timings.total = (0, network_timings_1.calcTotalTime)(networkEntry, timing);
|
|
212
173
|
const frame = this._nullableFrameBarrier(request);
|
|
213
174
|
const page = frame?.page();
|
|
214
175
|
this._addBarrier(page, request.allHeaders().then(reqHeaders => {
|
|
@@ -237,11 +198,8 @@ class NetworkManager {
|
|
|
237
198
|
networkEntry.loadEndTime = epochTimeInSeconds();
|
|
238
199
|
// responseEnd is fired after the last byte of the response is received.
|
|
239
200
|
const timing = request.timing();
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
: -1;
|
|
243
|
-
networkEntry.timings.receive = receive;
|
|
244
|
-
this._calcTotalTime(networkEntry, timing);
|
|
201
|
+
networkEntry.timings = (0, network_timings_1.getResourceTimings)(timing);
|
|
202
|
+
networkEntry.timings.total = (0, network_timings_1.calcTotalTime)(networkEntry, timing);
|
|
245
203
|
// For aborted/failed requests sizes will not be present
|
|
246
204
|
if (timing.startTime <= 0) {
|
|
247
205
|
return;
|
|
@@ -262,29 +220,6 @@ class NetworkManager {
|
|
|
262
220
|
};
|
|
263
221
|
}));
|
|
264
222
|
}
|
|
265
|
-
/**
|
|
266
|
-
* Calculates the total time for the network request based on the ResourceTiming
|
|
267
|
-
* data from Playwright. Fallbacks to the event timings if ResourceTiming data
|
|
268
|
-
* is not available.
|
|
269
|
-
*/
|
|
270
|
-
_calcTotalTime(entry, rtiming) {
|
|
271
|
-
const timings = entry.timings;
|
|
272
|
-
entry.timings.total = [
|
|
273
|
-
timings.blocked,
|
|
274
|
-
timings.dns,
|
|
275
|
-
timings.connect,
|
|
276
|
-
timings.wait,
|
|
277
|
-
timings.receive,
|
|
278
|
-
].reduce((pre, cur) => ((cur || -1) > 0 ? cur + pre : pre), 0);
|
|
279
|
-
// fallback when ResourceTiming data is not available
|
|
280
|
-
if (rtiming.startTime <= 0) {
|
|
281
|
-
const end = entry.loadEndTime ||
|
|
282
|
-
entry.responseReceivedTime ||
|
|
283
|
-
entry.requestSentTime;
|
|
284
|
-
const total = roundMilliSecs((end - entry.requestSentTime) * 1000);
|
|
285
|
-
entry.timings.total = total <= 0 ? -1 : total;
|
|
286
|
-
}
|
|
287
|
-
}
|
|
288
223
|
async stop() {
|
|
289
224
|
/**
|
|
290
225
|
* Waiting for all network events is error prone and might hang the tests
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"network.js","sourceRoot":"","sources":["../../src/plugins/network.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;;;AAIH,2CAAqC;AAErC,wCAA0C;
|
|
1
|
+
{"version":3,"file":"network.js","sourceRoot":"","sources":["../../src/plugins/network.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,21 +22,28 @@
|
|
|
22
22
|
* THE SOFTWARE.
|
|
23
23
|
*
|
|
24
24
|
*/
|
|
25
|
-
import { PluginOutput, Driver } from '../common_types';
|
|
25
|
+
import { PluginOutput, Driver, APIDriver, NetworkInfo } from '../common_types';
|
|
26
26
|
import { BrowserConsole, NetworkManager, PerformanceManager, Tracing, TraceOptions } from './';
|
|
27
27
|
import { Step } from '../dsl';
|
|
28
|
+
import { APINetworkManager } from './api-network';
|
|
28
29
|
type PluginType = 'network' | 'trace' | 'performance' | 'browserconsole';
|
|
29
|
-
type
|
|
30
|
+
export type NetworkPlugin = {
|
|
31
|
+
results: Array<NetworkInfo>;
|
|
32
|
+
_currentStep: Partial<Step> | null;
|
|
33
|
+
start(): Promise<void>;
|
|
34
|
+
stop(): Promise<Array<NetworkInfo>>;
|
|
35
|
+
};
|
|
36
|
+
type Plugin = NetworkManager | Tracing | PerformanceManager | BrowserConsole | APINetworkManager;
|
|
30
37
|
type PluginOptions = TraceOptions;
|
|
31
38
|
export declare class PluginManager {
|
|
32
39
|
private driver;
|
|
33
40
|
protected plugins: Map<PluginType, Plugin>;
|
|
34
41
|
PLUGIN_TYPES: Array<PluginType>;
|
|
35
|
-
constructor(driver: Driver);
|
|
42
|
+
constructor(driver: Driver | APIDriver);
|
|
36
43
|
register(type: PluginType, options: PluginOptions): Plugin;
|
|
37
44
|
registerAll(options: PluginOptions): void;
|
|
38
45
|
unregisterAll(): void;
|
|
39
|
-
stop(type: PluginType): Promise<void |
|
|
46
|
+
stop(type: PluginType): Promise<void | NetworkInfo[] | import("../common_types").BrowserMessage[] | Partial<PluginOutput>>;
|
|
40
47
|
start(type: PluginType): Promise<Plugin>;
|
|
41
48
|
get(type: PluginType): Plugin;
|
|
42
49
|
onStep(step: Step): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-manager.d.ts","sourceRoot":"","sources":["../../src/plugins/plugin-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"plugin-manager.d.ts","sourceRoot":"","sources":["../../src/plugins/plugin-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC/E,OAAO,EACL,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,OAAO,EACP,YAAY,EACb,MAAM,IAAI,CAAC;AACZ,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAElD,KAAK,UAAU,GAAG,SAAS,GAAG,OAAO,GAAG,aAAa,GAAG,gBAAgB,CAAC;AAIzE,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;IAC5B,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACnC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;CACrC,CAAC;AAEF,KAAK,MAAM,GACP,cAAc,GACd,OAAO,GACP,kBAAkB,GAClB,cAAc,GACd,iBAAiB,CAAC;AACtB,KAAK,aAAa,GAAG,YAAY,CAAC;AAclC,qBAAa,aAAa;IAQZ,OAAO,CAAC,MAAM;IAP1B,SAAS,CAAC,OAAO,0BAAiC;IAC3C,YAAY,EAAE,KAAK,CAAC,UAAU,CAAC,CAKpC;gBACkB,MAAM,EAAE,MAAM,GAAG,SAAS;IAE9C,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa;IA4BjD,WAAW,CAAC,OAAO,EAAE,aAAa;IAMlC,aAAa;IAMP,IAAI,CAAC,IAAI,EAAE,UAAU;IAQrB,KAAK,CAAC,IAAI,EAAE,UAAU;IAM5B,GAAG,CAAC,IAAI,EAAE,UAAU;IAKpB,MAAM,CAAC,IAAI,EAAE,IAAI;IASX,MAAM;CAWb"}
|