bdy 1.12.8-beta → 1.12.8-dev-pipeline-run
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/distTs/package.json +1 -1
- package/package.json +1 -1
- package/distTs/bin/cli.js +0 -5
- package/distTs/src/agent/agent.js +0 -328
- package/distTs/src/agent/linux.js +0 -124
- package/distTs/src/agent/manager.js +0 -519
- package/distTs/src/agent/osx.js +0 -146
- package/distTs/src/agent/socket/client.js +0 -178
- package/distTs/src/agent/socket/tunnel.js +0 -237
- package/distTs/src/agent/socket.js +0 -242
- package/distTs/src/agent/system.js +0 -179
- package/distTs/src/agent/wait.js +0 -23
- package/distTs/src/agent/windows.js +0 -159
- package/distTs/src/agent.js +0 -302
- package/distTs/src/api/agent.js +0 -99
- package/distTs/src/api/buddy.js +0 -139
- package/distTs/src/api/socket.js +0 -159
- package/distTs/src/cfg.js +0 -234
- package/distTs/src/command/agent/disable.js +0 -27
- package/distTs/src/command/agent/enable.js +0 -27
- package/distTs/src/command/agent/install.js +0 -117
- package/distTs/src/command/agent/restart.js +0 -27
- package/distTs/src/command/agent/run.js +0 -19
- package/distTs/src/command/agent/start.js +0 -28
- package/distTs/src/command/agent/status.js +0 -34
- package/distTs/src/command/agent/stop.js +0 -28
- package/distTs/src/command/agent/target/disable.js +0 -27
- package/distTs/src/command/agent/target/enable.js +0 -27
- package/distTs/src/command/agent/target/status.js +0 -32
- package/distTs/src/command/agent/target.js +0 -15
- package/distTs/src/command/agent/tunnel/http.js +0 -43
- package/distTs/src/command/agent/tunnel/list.js +0 -27
- package/distTs/src/command/agent/tunnel/remove.js +0 -28
- package/distTs/src/command/agent/tunnel/start.js +0 -34
- package/distTs/src/command/agent/tunnel/status.js +0 -31
- package/distTs/src/command/agent/tunnel/tcp.js +0 -43
- package/distTs/src/command/agent/tunnel/tls.js +0 -43
- package/distTs/src/command/agent/tunnel.js +0 -23
- package/distTs/src/command/agent/uninstall.js +0 -44
- package/distTs/src/command/agent/update.js +0 -38
- package/distTs/src/command/agent/version.js +0 -21
- package/distTs/src/command/agent.js +0 -35
- package/distTs/src/command/config/add/http.js +0 -25
- package/distTs/src/command/config/add/tcp.js +0 -25
- package/distTs/src/command/config/add/tls.js +0 -25
- package/distTs/src/command/config/add.js +0 -15
- package/distTs/src/command/config/get/region.js +0 -15
- package/distTs/src/command/config/get/timeout.js +0 -15
- package/distTs/src/command/config/get/token.js +0 -15
- package/distTs/src/command/config/get/tunnel.js +0 -19
- package/distTs/src/command/config/get/tunnels.js +0 -15
- package/distTs/src/command/config/get/whitelist.js +0 -15
- package/distTs/src/command/config/get.js +0 -21
- package/distTs/src/command/config/remove/tunnel.js +0 -19
- package/distTs/src/command/config/remove.js +0 -11
- package/distTs/src/command/config/set/region.js +0 -17
- package/distTs/src/command/config/set/timeout.js +0 -17
- package/distTs/src/command/config/set/token.js +0 -16
- package/distTs/src/command/config/set/whitelist.js +0 -17
- package/distTs/src/command/config/set.js +0 -17
- package/distTs/src/command/config.js +0 -17
- package/distTs/src/command/http.js +0 -30
- package/distTs/src/command/pre.js +0 -49
- package/distTs/src/command/start.js +0 -28
- package/distTs/src/command/tcp.js +0 -30
- package/distTs/src/command/tls.js +0 -30
- package/distTs/src/command/tunnel/config.js +0 -17
- package/distTs/src/command/tunnel/http.js +0 -31
- package/distTs/src/command/tunnel/start.js +0 -28
- package/distTs/src/command/tunnel/tcp.js +0 -30
- package/distTs/src/command/tunnel/tls.js +0 -30
- package/distTs/src/command/tunnel.js +0 -19
- package/distTs/src/command/ut/upload.js +0 -108
- package/distTs/src/command/ut.js +0 -12
- package/distTs/src/command/version.js +0 -13
- package/distTs/src/command/vt/close.js +0 -27
- package/distTs/src/command/vt/compare/validation.js +0 -173
- package/distTs/src/command/vt/compare.js +0 -97
- package/distTs/src/command/vt/exec.js +0 -81
- package/distTs/src/command/vt/installBrowser.js +0 -20
- package/distTs/src/command/vt/scrap.js +0 -193
- package/distTs/src/command/vt/storybook.js +0 -92
- package/distTs/src/command/vt.js +0 -22
- package/distTs/src/format.js +0 -174
- package/distTs/src/index.js +0 -34
- package/distTs/src/input.js +0 -270
- package/distTs/src/logger.js +0 -95
- package/distTs/src/output/interactive/tunnel.js +0 -860
- package/distTs/src/output/noninteractive/agent/tunnels.js +0 -43
- package/distTs/src/output/noninteractive/config/tunnel.js +0 -65
- package/distTs/src/output/noninteractive/config/tunnels.js +0 -18
- package/distTs/src/output/noninteractive/tunnel.js +0 -59
- package/distTs/src/output.js +0 -143
- package/distTs/src/server/cert.js +0 -52
- package/distTs/src/server/http1.js +0 -75
- package/distTs/src/server/http2.js +0 -78
- package/distTs/src/server/sftp.js +0 -497
- package/distTs/src/server/ssh.js +0 -446
- package/distTs/src/server/tls.js +0 -41
- package/distTs/src/ssh/client.js +0 -197
- package/distTs/src/texts.js +0 -421
- package/distTs/src/tunnel/agent.js +0 -103
- package/distTs/src/tunnel/api/agent.js +0 -100
- package/distTs/src/tunnel/api/buddy.js +0 -141
- package/distTs/src/tunnel/cfg.js +0 -243
- package/distTs/src/tunnel/compression.js +0 -44
- package/distTs/src/tunnel/dns.js +0 -53
- package/distTs/src/tunnel/html/503.html +0 -338
- package/distTs/src/tunnel/html.js +0 -33
- package/distTs/src/tunnel/http/log.js +0 -218
- package/distTs/src/tunnel/http/serve.js +0 -133
- package/distTs/src/tunnel/http/stream.js +0 -34
- package/distTs/src/tunnel/http.js +0 -508
- package/distTs/src/tunnel/identification.js +0 -103
- package/distTs/src/tunnel/latency.js +0 -83
- package/distTs/src/tunnel/output/interactive/tunnel.js +0 -867
- package/distTs/src/tunnel/output/noninteractive/agent/tunnels.js +0 -45
- package/distTs/src/tunnel/output/noninteractive/config/tunnel.js +0 -67
- package/distTs/src/tunnel/output/noninteractive/config/tunnels.js +0 -20
- package/distTs/src/tunnel/output/noninteractive/tunnel.js +0 -61
- package/distTs/src/tunnel/server/cert.js +0 -54
- package/distTs/src/tunnel/server/http1.js +0 -80
- package/distTs/src/tunnel/server/http2.js +0 -84
- package/distTs/src/tunnel/server/sftp.js +0 -514
- package/distTs/src/tunnel/server/ssh.js +0 -464
- package/distTs/src/tunnel/server/tls.js +0 -47
- package/distTs/src/tunnel/ssh/client.js +0 -211
- package/distTs/src/tunnel/tcp.js +0 -113
- package/distTs/src/tunnel/tunnel.js +0 -1010
- package/distTs/src/tunnel.js +0 -656
- package/distTs/src/types/ciInfo.js +0 -10
- package/distTs/src/types/options.js +0 -2
- package/distTs/src/types/plugin.js +0 -2
- package/distTs/src/types/queue.js +0 -2
- package/distTs/src/types/requests.js +0 -2
- package/distTs/src/types/resources.js +0 -2
- package/distTs/src/types/schemas.js +0 -54
- package/distTs/src/types/scrape.js +0 -2
- package/distTs/src/types/snapshots.js +0 -2
- package/distTs/src/types/storybook.js +0 -2
- package/distTs/src/types/tunnel.js +0 -141
- package/distTs/src/unitTest/ci.js +0 -108
- package/distTs/src/unitTest/requests.js +0 -72
- package/distTs/src/utils.js +0 -378
- package/distTs/src/visualTest/browser.js +0 -39
- package/distTs/src/visualTest/ci.js +0 -241
- package/distTs/src/visualTest/context.js +0 -52
- package/distTs/src/visualTest/exec.js +0 -51
- package/distTs/src/visualTest/linkUtils.js +0 -21
- package/distTs/src/visualTest/queue.js +0 -43
- package/distTs/src/visualTest/requests.js +0 -365
- package/distTs/src/visualTest/resources.js +0 -259
- package/distTs/src/visualTest/server.js +0 -109
- package/distTs/src/visualTest/snapshots.js +0 -129
- package/distTs/src/visualTest/utils/parseDom.js +0 -238
- package/distTs/src/visualTest/validation.js +0 -18
|
@@ -1,259 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
-
};
|
|
28
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
-
exports.collectResources = collectResources;
|
|
30
|
-
const puppeteer_core_1 = __importStar(require("puppeteer-core"));
|
|
31
|
-
const context_1 = require("./context");
|
|
32
|
-
const output_1 = __importDefault(require("../output"));
|
|
33
|
-
const texts_1 = require("../texts");
|
|
34
|
-
const utils_1 = require("../utils");
|
|
35
|
-
const scrapedUrls = new Map();
|
|
36
|
-
const scrapedResources = new Map();
|
|
37
|
-
let showedBrowserVersionWarning = false;
|
|
38
|
-
async function collectResources({ url, devices, resourceDiscoveryTimeout = 0, cookies = [], }) {
|
|
39
|
-
const scrapedUrl = scrapedUrls.get(url);
|
|
40
|
-
const missingDevices = scrapedUrl
|
|
41
|
-
? devices.filter(({ viewport }) => !scrapedUrl.widths.includes(viewport.width))
|
|
42
|
-
: [];
|
|
43
|
-
if (scrapedUrl && missingDevices.length === 0) {
|
|
44
|
-
return getResourceUrlsData({
|
|
45
|
-
duplicatedResourcesUrls: scrapedUrl.resources,
|
|
46
|
-
});
|
|
47
|
-
}
|
|
48
|
-
else if (scrapedUrl && missingDevices.length > 0) {
|
|
49
|
-
const { scrapedResourcesUrls, duplicatedResourcesUrls } = await output_1.default.debugAction((0, texts_1.DEBUG_RESOURCE_SCRAPPING_URL)(url), scrapeResources({
|
|
50
|
-
url,
|
|
51
|
-
devices: missingDevices,
|
|
52
|
-
resourceDiscoveryTimeout,
|
|
53
|
-
cookies,
|
|
54
|
-
}));
|
|
55
|
-
const duplicatedScrapedResourceUrls = [...scrapedUrl.resources];
|
|
56
|
-
scrapedUrls.set(url, {
|
|
57
|
-
widths: [
|
|
58
|
-
...scrapedUrl.widths,
|
|
59
|
-
...missingDevices.map(({ viewport }) => viewport.width),
|
|
60
|
-
],
|
|
61
|
-
resources: [
|
|
62
|
-
...new Set([
|
|
63
|
-
...scrapedUrl.resources,
|
|
64
|
-
...scrapedResourcesUrls,
|
|
65
|
-
...duplicatedResourcesUrls,
|
|
66
|
-
]),
|
|
67
|
-
],
|
|
68
|
-
});
|
|
69
|
-
return getResourceUrlsData({
|
|
70
|
-
resourcesUrls: scrapedResourcesUrls,
|
|
71
|
-
duplicatedResourcesUrls: [
|
|
72
|
-
...new Set([
|
|
73
|
-
...duplicatedResourcesUrls,
|
|
74
|
-
...duplicatedScrapedResourceUrls,
|
|
75
|
-
]),
|
|
76
|
-
],
|
|
77
|
-
});
|
|
78
|
-
}
|
|
79
|
-
else {
|
|
80
|
-
const { scrapedResourcesUrls, duplicatedResourcesUrls } = await output_1.default.debugAction((0, texts_1.DEBUG_RESOURCE_SCRAPPING_URL)(url), scrapeResources({
|
|
81
|
-
url,
|
|
82
|
-
devices,
|
|
83
|
-
resourceDiscoveryTimeout,
|
|
84
|
-
cookies,
|
|
85
|
-
}));
|
|
86
|
-
scrapedUrls.set(url, {
|
|
87
|
-
widths: devices.map(({ viewport }) => viewport.width),
|
|
88
|
-
resources: [...scrapedResourcesUrls, ...duplicatedResourcesUrls],
|
|
89
|
-
});
|
|
90
|
-
return getResourceUrlsData({
|
|
91
|
-
resourcesUrls: scrapedResourcesUrls,
|
|
92
|
-
duplicatedResourcesUrls,
|
|
93
|
-
});
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
function getResourceUrlsData({ resourcesUrls = [], duplicatedResourcesUrls = [], }) {
|
|
97
|
-
const resources = [];
|
|
98
|
-
for (const resourceUrl of resourcesUrls) {
|
|
99
|
-
const scrapedResource = scrapedResources.get(resourceUrl);
|
|
100
|
-
if (scrapedResource) {
|
|
101
|
-
resources.push({
|
|
102
|
-
url: resourceUrl,
|
|
103
|
-
status: scrapedResource.status,
|
|
104
|
-
headers: scrapedResource.headers,
|
|
105
|
-
body: scrapedResource.body,
|
|
106
|
-
});
|
|
107
|
-
}
|
|
108
|
-
else {
|
|
109
|
-
throw new Error((0, texts_1.ERR_RESOURCE_NOT_FOUND)(resourceUrl));
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
for (const resourceUrl of duplicatedResourcesUrls) {
|
|
113
|
-
const scrapedResource = scrapedResources.get(resourceUrl);
|
|
114
|
-
if (scrapedResource) {
|
|
115
|
-
resources.push({
|
|
116
|
-
url: resourceUrl,
|
|
117
|
-
status: scrapedResource.status,
|
|
118
|
-
headers: scrapedResource.headers,
|
|
119
|
-
duplicate: true,
|
|
120
|
-
});
|
|
121
|
-
}
|
|
122
|
-
else {
|
|
123
|
-
throw new Error((0, texts_1.ERR_RESOURCE_NOT_FOUND)(resourceUrl));
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
return resources;
|
|
127
|
-
}
|
|
128
|
-
async function scrapeResources({ url, devices, resourceDiscoveryTimeout, cookies = [], }) {
|
|
129
|
-
const scrapedResourcesUrls = [];
|
|
130
|
-
const duplicatedResourcesUrls = [];
|
|
131
|
-
const launchOptions = {
|
|
132
|
-
headless: 'shell',
|
|
133
|
-
args: ['--no-sandbox'],
|
|
134
|
-
acceptInsecureCerts: true,
|
|
135
|
-
timeout: 120_000,
|
|
136
|
-
executablePath: context_1.browserPath,
|
|
137
|
-
};
|
|
138
|
-
const browser = await puppeteer_core_1.default.launch(launchOptions);
|
|
139
|
-
if (!showedBrowserVersionWarning) {
|
|
140
|
-
const version = await browser.version();
|
|
141
|
-
if (!version.endsWith(utils_1.SUGGESTED_BROWSER_VERSION)) {
|
|
142
|
-
output_1.default.warning((0, texts_1.WARN_BROWSER_VERSION)(version));
|
|
143
|
-
showedBrowserVersionWarning = true;
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
const page = await browser.newPage();
|
|
147
|
-
page.setDefaultTimeout(context_1.defaultTimeout);
|
|
148
|
-
const initWidth = devices[0].viewport.width;
|
|
149
|
-
await page.setViewport({
|
|
150
|
-
width: initWidth,
|
|
151
|
-
height: devices[0].viewport.height,
|
|
152
|
-
deviceScaleFactor: devices[0].devicePixelRatio,
|
|
153
|
-
});
|
|
154
|
-
const preparedCookies = cookies.map((cookie) => {
|
|
155
|
-
const cookieMustBeSecure = ['__Secure-', '__Host-'].some((prefix) => cookie.name.startsWith(prefix));
|
|
156
|
-
return {
|
|
157
|
-
...cookie,
|
|
158
|
-
secure: cookieMustBeSecure ? true : cookie.secure,
|
|
159
|
-
};
|
|
160
|
-
});
|
|
161
|
-
await page.setCookie(...preparedCookies);
|
|
162
|
-
page.on('response', async (response) => {
|
|
163
|
-
const request = response.request();
|
|
164
|
-
const requestUrl = request.url();
|
|
165
|
-
const isCollected = scrapedResources.has(requestUrl);
|
|
166
|
-
if (isCollected && !scrapedResourcesUrls.includes(requestUrl)) {
|
|
167
|
-
duplicatedResourcesUrls.push(requestUrl);
|
|
168
|
-
}
|
|
169
|
-
else {
|
|
170
|
-
let responseError;
|
|
171
|
-
let body;
|
|
172
|
-
const requestUrl = request.url();
|
|
173
|
-
const headers = response.headers();
|
|
174
|
-
const contentType = headers['content-type'];
|
|
175
|
-
const status = response.status();
|
|
176
|
-
try {
|
|
177
|
-
if ((status < 300 || status > 399) &&
|
|
178
|
-
!contentType.startsWith('text/html')) {
|
|
179
|
-
body = new Blob([await response.buffer()]);
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
catch (error) {
|
|
183
|
-
responseError = error;
|
|
184
|
-
}
|
|
185
|
-
if (!responseError && body) {
|
|
186
|
-
scrapedResourcesUrls.push(requestUrl);
|
|
187
|
-
scrapedResources.set(requestUrl, {
|
|
188
|
-
status,
|
|
189
|
-
headers: { 'content-type': contentType },
|
|
190
|
-
body,
|
|
191
|
-
});
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
});
|
|
195
|
-
try {
|
|
196
|
-
await page.goto(url);
|
|
197
|
-
}
|
|
198
|
-
catch (error) {
|
|
199
|
-
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
200
|
-
output_1.default.exitError((0, texts_1.ERR_RESOURCE_DISCOVERY)(errorMessage));
|
|
201
|
-
}
|
|
202
|
-
await output_1.default.debugAction(texts_1.DEBUG_AUTO_SCROLL, autoScroll(page));
|
|
203
|
-
await output_1.default.debugAction(texts_1.DEBUG_AUTO_WIDTH, autoWidths(page, devices));
|
|
204
|
-
if (resourceDiscoveryTimeout > 0) {
|
|
205
|
-
await new Promise((resolve) => setTimeout(resolve, resourceDiscoveryTimeout));
|
|
206
|
-
if (context_1.debug) {
|
|
207
|
-
output_1.default.warning((0, texts_1.DEBUG_RESOURCE_DISCOVERY_TIMEOUT)(resourceDiscoveryTimeout));
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
try {
|
|
211
|
-
await output_1.default.debugAction(texts_1.DEBUG_WAIT_FOR_IDLE, page.waitForNetworkIdle());
|
|
212
|
-
}
|
|
213
|
-
catch (error) {
|
|
214
|
-
if (error instanceof puppeteer_core_1.TimeoutError) {
|
|
215
|
-
output_1.default.warning((0, texts_1.DEBUG_WAIT_FOR_IDLE_TIMEOUT)(context_1.defaultTimeout));
|
|
216
|
-
}
|
|
217
|
-
else {
|
|
218
|
-
throw error;
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
await browser.close();
|
|
222
|
-
return { scrapedResourcesUrls, duplicatedResourcesUrls };
|
|
223
|
-
}
|
|
224
|
-
async function autoScroll(page) {
|
|
225
|
-
await page.evaluate(async () => {
|
|
226
|
-
await new Promise((resolve) => {
|
|
227
|
-
const resourceDiscoveryMaxHeight = 30_000;
|
|
228
|
-
const step = 100;
|
|
229
|
-
let currentScroll = 0;
|
|
230
|
-
const timer = setInterval(() => {
|
|
231
|
-
const pageHeight = Math.max(document.body.scrollHeight, document.body.offsetHeight, document.documentElement.clientHeight, document.documentElement.scrollHeight, document.documentElement.offsetHeight);
|
|
232
|
-
const newScrollPosition = currentScroll + step;
|
|
233
|
-
window.scrollTo({
|
|
234
|
-
top: newScrollPosition,
|
|
235
|
-
left: 0,
|
|
236
|
-
behavior: 'instant',
|
|
237
|
-
});
|
|
238
|
-
currentScroll = newScrollPosition;
|
|
239
|
-
if (newScrollPosition >= pageHeight ||
|
|
240
|
-
newScrollPosition >= resourceDiscoveryMaxHeight) {
|
|
241
|
-
clearInterval(timer);
|
|
242
|
-
resolve('done');
|
|
243
|
-
}
|
|
244
|
-
}, 10);
|
|
245
|
-
});
|
|
246
|
-
});
|
|
247
|
-
}
|
|
248
|
-
async function autoWidths(page, devices) {
|
|
249
|
-
for (const device of devices) {
|
|
250
|
-
if (device.viewport.width !== devices[0].viewport.width) {
|
|
251
|
-
await page.setViewport({
|
|
252
|
-
width: device.viewport.width,
|
|
253
|
-
height: device.viewport.height,
|
|
254
|
-
deviceScaleFactor: device.devicePixelRatio,
|
|
255
|
-
});
|
|
256
|
-
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
}
|
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.createServer = createServer;
|
|
7
|
-
const fastify_1 = __importDefault(require("fastify"));
|
|
8
|
-
const cors_1 = __importDefault(require("@fastify/cors"));
|
|
9
|
-
const snapshots_1 = require("./snapshots");
|
|
10
|
-
const promises_1 = __importDefault(require("node:fs/promises"));
|
|
11
|
-
const node_path_1 = __importDefault(require("node:path"));
|
|
12
|
-
const node_sea_1 = require("node:sea");
|
|
13
|
-
const utils_1 = require("../utils");
|
|
14
|
-
const output_1 = __importDefault(require("../output"));
|
|
15
|
-
const schemas_1 = require("../types/schemas");
|
|
16
|
-
const zod_1 = require("zod");
|
|
17
|
-
const texts_1 = require("../texts");
|
|
18
|
-
const port = 1337;
|
|
19
|
-
let cachedParseDom = '';
|
|
20
|
-
function prepareParseDom(parseDom) {
|
|
21
|
-
return parseDom
|
|
22
|
-
.replaceAll('"use strict";', '')
|
|
23
|
-
.replaceAll('Object.defineProperty(exports, "__esModule", { value: true });', '');
|
|
24
|
-
}
|
|
25
|
-
async function getParseDom() {
|
|
26
|
-
if (!cachedParseDom) {
|
|
27
|
-
if ((0, node_sea_1.isSea)()) {
|
|
28
|
-
cachedParseDom = await prepareParseDom((0, node_sea_1.getAsset)('parseDom.js', 'utf8'));
|
|
29
|
-
}
|
|
30
|
-
else {
|
|
31
|
-
const filePath = node_path_1.default.resolve((0, utils_1.getRootDir)(), 'parseDom.js');
|
|
32
|
-
cachedParseDom = await prepareParseDom(await promises_1.default.readFile(filePath, 'utf-8'));
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
return cachedParseDom;
|
|
36
|
-
}
|
|
37
|
-
function prepareSnapshotPlugin(data) {
|
|
38
|
-
try {
|
|
39
|
-
const validatedData = schemas_1.snapshotSchema.parse(data);
|
|
40
|
-
const { version, ...snapshot } = validatedData;
|
|
41
|
-
const cookies = snapshot.cookies.map((cookie) => {
|
|
42
|
-
if (cookie.domain) {
|
|
43
|
-
return cookie;
|
|
44
|
-
}
|
|
45
|
-
else if (cookie.path) {
|
|
46
|
-
return cookie;
|
|
47
|
-
}
|
|
48
|
-
else {
|
|
49
|
-
const domain = new URL(snapshot.url).hostname;
|
|
50
|
-
return {
|
|
51
|
-
...cookie,
|
|
52
|
-
domain,
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
|
-
});
|
|
56
|
-
return {
|
|
57
|
-
...snapshot,
|
|
58
|
-
resources: snapshot.resources ?? [],
|
|
59
|
-
devices: snapshot.devices ?? [],
|
|
60
|
-
enableJavaScript: snapshot.enableJavaScript ?? false,
|
|
61
|
-
resourceDiscoveryTimeout: snapshot.resourceDiscoveryTimeout ?? 0,
|
|
62
|
-
cookies,
|
|
63
|
-
};
|
|
64
|
-
}
|
|
65
|
-
catch (error) {
|
|
66
|
-
const name = data &&
|
|
67
|
-
typeof data === 'object' &&
|
|
68
|
-
'name' in data &&
|
|
69
|
-
typeof data.name === 'string'
|
|
70
|
-
? data.name
|
|
71
|
-
: 'Unknown name';
|
|
72
|
-
if (error instanceof zod_1.ZodError) {
|
|
73
|
-
output_1.default.error((0, texts_1.ERR_INVALID_SNAPSHOT)(name, error.errors
|
|
74
|
-
.map((e) => `${e.path.join('.')} - ${e.message}`)
|
|
75
|
-
.join(', ')));
|
|
76
|
-
}
|
|
77
|
-
else {
|
|
78
|
-
throw error;
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
return undefined;
|
|
82
|
-
}
|
|
83
|
-
async function createServer() {
|
|
84
|
-
const app = (0, fastify_1.default)({
|
|
85
|
-
// logger: true,
|
|
86
|
-
bodyLimit: 50 * 1024 * 1024, //50 MB,
|
|
87
|
-
});
|
|
88
|
-
app.register(cors_1.default);
|
|
89
|
-
app.get('/parseDom.js', async (request, reply) => {
|
|
90
|
-
const parseDomFile = await getParseDom();
|
|
91
|
-
reply.type('text/javascript').send(parseDomFile);
|
|
92
|
-
});
|
|
93
|
-
app.post('/snapshot', (request, reply) => {
|
|
94
|
-
const data = request.body;
|
|
95
|
-
const preparedSnapshot = prepareSnapshotPlugin(data);
|
|
96
|
-
if (preparedSnapshot) {
|
|
97
|
-
(0, snapshots_1.addSnapshot)(preparedSnapshot);
|
|
98
|
-
reply.send('Snapshot received');
|
|
99
|
-
}
|
|
100
|
-
else {
|
|
101
|
-
reply.send('Invalid snapshot format');
|
|
102
|
-
}
|
|
103
|
-
});
|
|
104
|
-
app.get('*', (request, reply) => {
|
|
105
|
-
reply.send('Wrong path');
|
|
106
|
-
});
|
|
107
|
-
await app.listen({ port });
|
|
108
|
-
return app;
|
|
109
|
-
}
|
|
@@ -1,129 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.setDefaultSettings = setDefaultSettings;
|
|
7
|
-
exports.addSnapshot = addSnapshot;
|
|
8
|
-
exports.finishProcessingSnapshots = finishProcessingSnapshots;
|
|
9
|
-
exports.showSessionLink = showSessionLink;
|
|
10
|
-
const resources_1 = require("./resources");
|
|
11
|
-
const context_1 = require("./context");
|
|
12
|
-
const requests_1 = require("./requests");
|
|
13
|
-
const queue_1 = require("./queue");
|
|
14
|
-
const output_1 = __importDefault(require("../output"));
|
|
15
|
-
const texts_1 = require("../texts");
|
|
16
|
-
const snapshots = [];
|
|
17
|
-
let defaultDevices = [];
|
|
18
|
-
let firstSnapshot = true;
|
|
19
|
-
let sessionLink = '';
|
|
20
|
-
function setDefaultSettings(defaultSettings) {
|
|
21
|
-
defaultDevices = defaultSettings.defaultDevices;
|
|
22
|
-
}
|
|
23
|
-
function addSnapshot(snapshot) {
|
|
24
|
-
const preparedSnapshot = {
|
|
25
|
-
...snapshot,
|
|
26
|
-
devices: snapshot.devices.length > 0 ? snapshot.devices : defaultDevices,
|
|
27
|
-
};
|
|
28
|
-
if (context_1.oneByOne) {
|
|
29
|
-
(0, queue_1.addToQueue)(() => processSnapshot(preparedSnapshot, firstSnapshot));
|
|
30
|
-
}
|
|
31
|
-
else {
|
|
32
|
-
snapshots.push(preparedSnapshot);
|
|
33
|
-
}
|
|
34
|
-
if (firstSnapshot) {
|
|
35
|
-
firstSnapshot = false;
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
async function finishProcessingSnapshots(spawnedProcessExitCode) {
|
|
39
|
-
if (context_1.oneByOne) {
|
|
40
|
-
return await (0, queue_1.isQueueEmpty)();
|
|
41
|
-
}
|
|
42
|
-
if (spawnedProcessExitCode === 0) {
|
|
43
|
-
return await processSnapshots();
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
function showSessionLink() {
|
|
47
|
-
if (sessionLink) {
|
|
48
|
-
output_1.default.normal((0, texts_1.LOG_SESSION_LINK)(sessionLink));
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
async function processSnapshot(snapshot, firstSnapshot) {
|
|
52
|
-
let t1;
|
|
53
|
-
if (context_1.debug) {
|
|
54
|
-
t1 = performance.now();
|
|
55
|
-
}
|
|
56
|
-
const preparedSnapshot = context_1.skipDiscovery
|
|
57
|
-
? snapshot
|
|
58
|
-
: await getSnapshotWithResources(snapshot);
|
|
59
|
-
try {
|
|
60
|
-
output_1.default.normal(texts_1.LOG_SENDING_DATA);
|
|
61
|
-
const { message } = await (0, requests_1.sendSnapshot)(preparedSnapshot, firstSnapshot);
|
|
62
|
-
sessionLink = message;
|
|
63
|
-
}
|
|
64
|
-
catch (error) {
|
|
65
|
-
output_1.default.error(`${error}`);
|
|
66
|
-
}
|
|
67
|
-
if (context_1.debug && t1) {
|
|
68
|
-
const t2 = performance.now();
|
|
69
|
-
output_1.default.normal((0, texts_1.DEBUG_SNAPSHOT_PROCESSING)(snapshot.name, t2 - t1));
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
async function processSnapshots() {
|
|
73
|
-
let t1;
|
|
74
|
-
if (context_1.debug) {
|
|
75
|
-
t1 = performance.now();
|
|
76
|
-
}
|
|
77
|
-
output_1.default.normal((0, texts_1.LOG_PROCESSING_SNAPSHOTS)(snapshots.length));
|
|
78
|
-
const preparedSnapshots = context_1.skipDiscovery
|
|
79
|
-
? snapshots
|
|
80
|
-
: await getSnapshotsWithResources(snapshots);
|
|
81
|
-
if (preparedSnapshots.length === 0) {
|
|
82
|
-
output_1.default.error(texts_1.ERR_NO_SNAPSHOTS_TO_SEND);
|
|
83
|
-
}
|
|
84
|
-
else {
|
|
85
|
-
try {
|
|
86
|
-
output_1.default.normal(texts_1.LOG_SENDING_DATA);
|
|
87
|
-
const { message } = await (0, requests_1.sendSnapshots)(preparedSnapshots);
|
|
88
|
-
sessionLink = message;
|
|
89
|
-
}
|
|
90
|
-
catch (error) {
|
|
91
|
-
output_1.default.error(`${error}`);
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
if (context_1.debug && t1) {
|
|
95
|
-
const t2 = performance.now();
|
|
96
|
-
output_1.default.normal((0, texts_1.DEBUG_SNAPSHOTS_PROCESSING)(t2 - t1));
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
async function getSnapshotWithResources(snapshot) {
|
|
100
|
-
const { url, devices, resourceDiscoveryTimeout, cookies } = snapshot;
|
|
101
|
-
const resources = await (0, resources_1.collectResources)({
|
|
102
|
-
url,
|
|
103
|
-
devices,
|
|
104
|
-
resourceDiscoveryTimeout,
|
|
105
|
-
cookies,
|
|
106
|
-
});
|
|
107
|
-
if (context_1.debug) {
|
|
108
|
-
output_1.default.normal(`Collected resources for snapshot: ${snapshot.name}`);
|
|
109
|
-
for (const resource of resources) {
|
|
110
|
-
output_1.default.normal(`- url: ${resource.url} status: ${resource.status} headers: ${JSON.stringify(resource.headers)} duplicate: ${resource.duplicate} hasBody: ${!!resource.body} bodySize: ${typeof resource.body === 'string' ? resource.body.length : resource.body?.size}`);
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
return {
|
|
114
|
-
...snapshot,
|
|
115
|
-
resources: [...snapshot.resources, ...resources],
|
|
116
|
-
};
|
|
117
|
-
}
|
|
118
|
-
async function getSnapshotsWithResources(snapshots) {
|
|
119
|
-
const snapshotsWithResources = [];
|
|
120
|
-
const prepareSnapshots = filterDuplicates(snapshots);
|
|
121
|
-
for (const snapshot of prepareSnapshots) {
|
|
122
|
-
const snapshotWithResources = await getSnapshotWithResources(snapshot);
|
|
123
|
-
snapshotsWithResources.push(snapshotWithResources);
|
|
124
|
-
}
|
|
125
|
-
return snapshotsWithResources;
|
|
126
|
-
}
|
|
127
|
-
function filterDuplicates(snapshots) {
|
|
128
|
-
return snapshots.filter((snapshot, index) => snapshots.findIndex((item) => item.name === snapshot.name) === index);
|
|
129
|
-
}
|