automation_model 1.0.463-dev → 1.0.463

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.
Files changed (77) hide show
  1. package/README.md +133 -0
  2. package/lib/analyze_helper.js.map +1 -1
  3. package/lib/api.d.ts +43 -2
  4. package/lib/api.js +240 -49
  5. package/lib/api.js.map +1 -1
  6. package/lib/auto_page.d.ts +7 -2
  7. package/lib/auto_page.js +282 -26
  8. package/lib/auto_page.js.map +1 -1
  9. package/lib/browser_manager.d.ts +6 -3
  10. package/lib/browser_manager.js +163 -47
  11. package/lib/browser_manager.js.map +1 -1
  12. package/lib/bruno.d.ts +2 -0
  13. package/lib/bruno.js +381 -0
  14. package/lib/bruno.js.map +1 -0
  15. package/lib/check_performance.d.ts +1 -0
  16. package/lib/check_performance.js +57 -0
  17. package/lib/check_performance.js.map +1 -0
  18. package/lib/command_common.d.ts +6 -0
  19. package/lib/command_common.js +218 -0
  20. package/lib/command_common.js.map +1 -0
  21. package/lib/date_time.js.map +1 -1
  22. package/lib/drawRect.js.map +1 -1
  23. package/lib/environment.d.ts +1 -0
  24. package/lib/environment.js +6 -3
  25. package/lib/environment.js.map +1 -1
  26. package/lib/error-messages.d.ts +6 -0
  27. package/lib/error-messages.js +206 -0
  28. package/lib/error-messages.js.map +1 -0
  29. package/lib/file_checker.d.ts +1 -0
  30. package/lib/file_checker.js +165 -0
  31. package/lib/file_checker.js.map +1 -0
  32. package/lib/find_function.js.map +1 -1
  33. package/lib/generation_scripts.d.ts +4 -0
  34. package/lib/generation_scripts.js +2 -0
  35. package/lib/generation_scripts.js.map +1 -0
  36. package/lib/index.d.ts +3 -0
  37. package/lib/index.js +4 -0
  38. package/lib/index.js.map +1 -1
  39. package/lib/init_browser.d.ts +4 -3
  40. package/lib/init_browser.js +159 -82
  41. package/lib/init_browser.js.map +1 -1
  42. package/lib/locate_element.d.ts +7 -0
  43. package/lib/locate_element.js +215 -0
  44. package/lib/locate_element.js.map +1 -0
  45. package/lib/locator.d.ts +37 -0
  46. package/lib/locator.js +172 -0
  47. package/lib/locator.js.map +1 -1
  48. package/lib/locator_log.d.ts +26 -0
  49. package/lib/locator_log.js +69 -0
  50. package/lib/locator_log.js.map +1 -0
  51. package/lib/network.d.ts +5 -0
  52. package/lib/network.js +471 -0
  53. package/lib/network.js.map +1 -0
  54. package/lib/route.d.ts +21 -0
  55. package/lib/route.js +535 -0
  56. package/lib/route.js.map +1 -0
  57. package/lib/scripts/axe.mini.js +12 -0
  58. package/lib/snapshot_validation.d.ts +37 -0
  59. package/lib/snapshot_validation.js +357 -0
  60. package/lib/snapshot_validation.js.map +1 -0
  61. package/lib/stable_browser.d.ts +157 -55
  62. package/lib/stable_browser.js +2760 -1296
  63. package/lib/stable_browser.js.map +1 -1
  64. package/lib/table.d.ts +15 -0
  65. package/lib/table.js +257 -0
  66. package/lib/table.js.map +1 -0
  67. package/lib/table_analyze.js.map +1 -1
  68. package/lib/table_helper.d.ts +19 -0
  69. package/lib/table_helper.js +130 -0
  70. package/lib/table_helper.js.map +1 -0
  71. package/lib/test_context.d.ts +6 -0
  72. package/lib/test_context.js +16 -12
  73. package/lib/test_context.js.map +1 -1
  74. package/lib/utils.d.ts +36 -2
  75. package/lib/utils.js +709 -13
  76. package/lib/utils.js.map +1 -1
  77. package/package.json +22 -12
package/lib/network.js ADDED
@@ -0,0 +1,471 @@
1
+ import path from "path";
2
+ import fs from "fs";
3
+ import { _stepNameToTemplate } from "./route.js";
4
+ import crypto from "crypto";
5
+ import { tmpdir } from "os";
6
+ function _getNetworkFile(world = null, web = null, context = null) {
7
+ let networkFile = null;
8
+ if (world && world.reportFolder) {
9
+ networkFile = path.join(world.reportFolder, "network.json");
10
+ }
11
+ else if (web.reportFolder) {
12
+ networkFile = path.join(web.reportFolder, "network.json");
13
+ }
14
+ else if (context && context.reportFolder) {
15
+ networkFile = path.join(context.reportFolder, "network.json");
16
+ }
17
+ else {
18
+ networkFile = "network.json";
19
+ }
20
+ return networkFile;
21
+ }
22
+ function registerDownloadEvent(page, world, context) {
23
+ if (page) {
24
+ let downloadPath = "./downloads";
25
+ if (world && world.downloadsPath) {
26
+ downloadPath = world.downloadsPath;
27
+ }
28
+ else if (context && context.downloadsPath) {
29
+ downloadPath = context.downloadsPath;
30
+ }
31
+ if (!fs.existsSync(downloadPath)) {
32
+ try {
33
+ fs.mkdirSync(downloadPath);
34
+ }
35
+ catch (e) {
36
+ // ignore
37
+ }
38
+ }
39
+ page.on("download", async (download) => {
40
+ const suggestedFilename = download.suggestedFilename(); // Get the original file name
41
+ const filePath = `${downloadPath}/${suggestedFilename}`;
42
+ // Save the download with the original name
43
+ await download.saveAs(filePath);
44
+ console.log(`Downloaded file saved as: ${filePath}`);
45
+ });
46
+ }
47
+ }
48
+ function registerNetworkEvents(world, web, context, page) {
49
+ // Map to hold request start times and IDs
50
+ const networkFile = _getNetworkFile(world, web, context);
51
+ function saveNetworkData() {
52
+ if (context && context.networkData) {
53
+ fs.writeFileSync(networkFile, JSON.stringify(context.networkData, null, 2), "utf8");
54
+ }
55
+ }
56
+ if (!context) {
57
+ console.error("No context found to register network events");
58
+ return;
59
+ }
60
+ const requestTimes = new Map();
61
+ let requestIdCounter = 0;
62
+ if (page) {
63
+ if (!context.networkData) {
64
+ context.networkData = [];
65
+ const networkData = context.networkData;
66
+ // Event listener for when a request is made
67
+ page.on("request", (request) => {
68
+ try {
69
+ // console.log("Request started:", request.url());
70
+ const requestId = requestIdCounter++;
71
+ request.requestId = requestId; // Assign a unique ID to the request
72
+ handleRequest(request);
73
+ const startTime = Date.now();
74
+ requestTimes.set(requestId, startTime);
75
+ // Initialize data for this request
76
+ networkData.push({
77
+ requestId,
78
+ requestStart: startTime,
79
+ requestUrl: request.url(),
80
+ method: request.method(),
81
+ status: "Pending",
82
+ responseTime: null,
83
+ responseReceived: null,
84
+ responseEnd: null,
85
+ size: null,
86
+ });
87
+ saveNetworkData();
88
+ }
89
+ catch (error) {
90
+ // console.error("Error handling request:", error);
91
+ }
92
+ });
93
+ // Event listener for when a response is received
94
+ page.on("response", async (response) => {
95
+ try {
96
+ const request = response.request();
97
+ const requestId = request.requestId;
98
+ const receivedTime = Date.now();
99
+ // await handleRequestFinishedOrFailed(request, false);
100
+ // Find the corresponding data object
101
+ const data = networkData.find((item) => item.requestId === requestId);
102
+ if (data) {
103
+ data.status = response.status();
104
+ data.responseReceived = receivedTime;
105
+ saveNetworkData();
106
+ }
107
+ else {
108
+ // console.error("No data found for request ID", requestId);
109
+ }
110
+ }
111
+ catch (error) {
112
+ // console.error("Error handling response:", error);
113
+ }
114
+ });
115
+ // Event listener for when a request is finished
116
+ page.on("requestfinished", async (request) => {
117
+ try {
118
+ const requestId = request.requestId;
119
+ const endTime = Date.now();
120
+ const startTime = requestTimes.get(requestId);
121
+ await handleRequestFinishedOrFailed(request, false);
122
+ const response = await request.response();
123
+ const timing = request.timing();
124
+ // Find the corresponding data object
125
+ const data = networkData.find((item) => item.requestId === requestId);
126
+ if (data) {
127
+ data.responseEnd = endTime;
128
+ data.responseTime = endTime - startTime;
129
+ // Get response size
130
+ try {
131
+ let size = 0;
132
+ if (responseHasBody(response)) {
133
+ const buf = await response.body();
134
+ size = buf?.length ?? 0;
135
+ }
136
+ data.size = size;
137
+ }
138
+ catch {
139
+ data.size = 0;
140
+ }
141
+ const type = request.resourceType();
142
+ /*
143
+ domainLookupStart: 80.655,
144
+ domainLookupEnd: 80.668,
145
+ connectStart: 80.668,
146
+ secureConnectionStart: 106.688,
147
+ connectEnd: 129.69,
148
+ requestStart: 129.81,
149
+ responseStart: 187.006,
150
+ responseEnd: 188.209
151
+ */
152
+ data.type = type;
153
+ data.domainLookupStart = timing.domainLookupStart;
154
+ data.domainLookupEnd = timing.domainLookupEnd;
155
+ data.connectStart = timing.connectStart;
156
+ data.secureConnectionStart = timing.secureConnectionStart;
157
+ data.connectEnd = timing.connectEnd;
158
+ data.requestStart = timing.requestStart;
159
+ data.responseStart = timing.responseStart;
160
+ data.responseEnd = timing.responseEnd;
161
+ saveNetworkData();
162
+ if (world && world.attach) {
163
+ world.attach(JSON.stringify(data), { mediaType: "application/json+network" });
164
+ }
165
+ }
166
+ else {
167
+ // console.error("No data found for request ID", requestId);
168
+ }
169
+ }
170
+ catch (error) {
171
+ // console.error("Error handling request finished:", error);
172
+ }
173
+ });
174
+ // Event listener for when a request fails
175
+ page.on("requestfailed", async (request) => {
176
+ try {
177
+ const requestId = request.requestId;
178
+ const endTime = Date.now();
179
+ const startTime = requestTimes.get(requestId);
180
+ await handleRequestFinishedOrFailed(request, true);
181
+ try {
182
+ const res = await request.response();
183
+ const statusCode = res ? res.status() : request.failure().errorText;
184
+ // Find the corresponding data object
185
+ const data = networkData.find((item) => item.requestId === requestId);
186
+ if (data) {
187
+ data.responseEnd = endTime;
188
+ data.responseTime = endTime - startTime;
189
+ data.status = statusCode;
190
+ data.size = 0;
191
+ saveNetworkData();
192
+ if (world && world.attach) {
193
+ world.attach(JSON.stringify(data), { mediaType: "application/json+network" });
194
+ }
195
+ }
196
+ else {
197
+ // console.error("No data found for request ID", requestId);
198
+ }
199
+ }
200
+ catch (error) {
201
+ // ignore
202
+ }
203
+ }
204
+ catch (error) {
205
+ // console.error("Error handling request failed:", error);
206
+ }
207
+ });
208
+ }
209
+ }
210
+ else {
211
+ console.error("No page found to register network events");
212
+ }
213
+ }
214
+ async function appendEntryToStepFile(stepHash, entry) {
215
+ const file = path.join(detailedNetworkFolder, `${stepHash}.json`);
216
+ let data = [];
217
+ try {
218
+ /* read if it already exists */
219
+ const txt = await fs.promises.readFile(file, "utf8");
220
+ data = JSON.parse(txt);
221
+ }
222
+ catch {
223
+ /* ignore – file does not exist or cannot be parsed */
224
+ }
225
+ data.push(entry);
226
+ await fs.promises.writeFile(file, JSON.stringify(data, null, 2), "utf8");
227
+ }
228
+ const detailedNetworkFolder = path.join(tmpdir(), "blinq_network_events");
229
+ let outOfStep = true;
230
+ const executionState = {
231
+ currentStepHash: null,
232
+ previousStepHash: null,
233
+ liveRequestsMap: new Map(),
234
+ liveRequestsMapPrevious: new Map(),
235
+ };
236
+ export function networkBeforeStep(stepName) {
237
+ outOfStep = false;
238
+ const storeDetailedNetworkData = process.env.STORE_DETAILED_NETWORK_DATA === "true";
239
+ if (!storeDetailedNetworkData) {
240
+ return;
241
+ }
242
+ // check if the folder exists, if not create it
243
+ if (!fs.existsSync(detailedNetworkFolder)) {
244
+ fs.mkdirSync(detailedNetworkFolder, { recursive: true });
245
+ }
246
+ // const stepHash = stepNameToHash(stepName);
247
+ let stepHash = "";
248
+ executionState.liveRequestsMapPrevious = executionState.liveRequestsMap;
249
+ executionState.liveRequestsMap = new Map();
250
+ stepHash = stepNameToHash(stepName);
251
+ executionState.previousStepHash = executionState.currentStepHash; // ➊ NEW
252
+ executionState.currentStepHash = stepHash;
253
+ // check if the file exists, if exists delete it
254
+ const networkFile = path.join(detailedNetworkFolder, `${stepHash}.json`);
255
+ try {
256
+ fs.rmSync(path.join(networkFile), { force: true });
257
+ }
258
+ catch (err) {
259
+ // Ignore error if file does not exist
260
+ }
261
+ }
262
+ async function saveMap(current) {
263
+ if (current) {
264
+ const entries = Array.from(executionState.liveRequestsMap.values());
265
+ const file = path.join(detailedNetworkFolder, `${executionState.currentStepHash}.json`);
266
+ await fs.promises.writeFile(file, JSON.stringify(entries, null, 2), "utf8");
267
+ }
268
+ else {
269
+ const entries = Array.from(executionState.liveRequestsMapPrevious.values());
270
+ const file = path.join(detailedNetworkFolder, `${executionState.previousStepHash}.json`);
271
+ await fs.promises.writeFile(file, JSON.stringify(entries, null, 2), "utf8");
272
+ }
273
+ }
274
+ export async function networkAfterStep(stepName) {
275
+ const storeDetailedNetworkData = process.env.STORE_DETAILED_NETWORK_DATA === "true";
276
+ if (!storeDetailedNetworkData) {
277
+ return;
278
+ }
279
+ //await new Promise((r) => setTimeout(r, 1000));
280
+ await saveMap(true);
281
+ /* reset for next step */
282
+ //executionState.previousStepHash = executionState.currentStepHash; // ➋ NEW
283
+ //executionState.liveRequestsMap.clear();
284
+ outOfStep = true;
285
+ }
286
+ function stepNameToHash(stepName) {
287
+ const templateName = _stepNameToTemplate(stepName);
288
+ // create hash from the template name
289
+ return crypto.createHash("sha256").update(templateName).digest("hex");
290
+ }
291
+ function handleRequest(request) {
292
+ const storeDetailedNetworkData = process.env.STORE_DETAILED_NETWORK_DATA === "true";
293
+ if (!storeDetailedNetworkData || !executionState.currentStepHash) {
294
+ return;
295
+ }
296
+ const entry = {
297
+ requestId: request.requestId,
298
+ url: request.url(),
299
+ method: request.method(),
300
+ headers: request.headers(),
301
+ postData: request.postData(),
302
+ requestTimestamp: Date.now(),
303
+ stepHash: executionState.currentStepHash,
304
+ };
305
+ executionState.liveRequestsMap.set(request, entry);
306
+ // console.log("Request started:", entry);
307
+ }
308
+ function saveNetworkDataToFile(requestData) {
309
+ const storeDetailedNetworkData = process.env.STORE_DETAILED_NETWORK_DATA === "true";
310
+ if (!storeDetailedNetworkData) {
311
+ return;
312
+ }
313
+ const networkFile = path.join(detailedNetworkFolder, `${requestData.stepHash}.json`);
314
+ // read the existing data if it exists (should be an array)
315
+ let existingData = [];
316
+ if (fs.existsSync(networkFile)) {
317
+ const data = fs.readFileSync(networkFile, "utf8");
318
+ try {
319
+ existingData = JSON.parse(data);
320
+ }
321
+ catch (e) {
322
+ // console.error("Failed to parse existing network data:", e);
323
+ }
324
+ }
325
+ // Add the live requests to the existing data
326
+ existingData.push(requestData);
327
+ // Save the updated data back to the file
328
+ // console.log("Saving network data to file:", networkFile);
329
+ fs.writeFileSync(networkFile, JSON.stringify(existingData, null, 2), "utf8");
330
+ }
331
+ async function handleRequestFinishedOrFailed(request, failed) {
332
+ const storeDetailedNetworkData = process.env.STORE_DETAILED_NETWORK_DATA === "true";
333
+ if (!storeDetailedNetworkData) {
334
+ return;
335
+ }
336
+ // const response = await request.response(); // This may be null if the request failed
337
+ let entry = executionState.liveRequestsMap.get(request);
338
+ if (!entry) {
339
+ // check if the request is in the previous step's map
340
+ entry = executionState.liveRequestsMapPrevious.get(request);
341
+ if (!entry) {
342
+ entry = {
343
+ requestId: request.requestId,
344
+ url: request.url(),
345
+ method: request.method?.() ?? "GET",
346
+ headers: request.headers?.() ?? {},
347
+ postData: request.postData?.() ?? undefined,
348
+ stepHash: executionState.previousStepHash ?? "unknown",
349
+ requestTimestamp: Date.now(),
350
+ };
351
+ }
352
+ }
353
+ // Remove the request from the live requests map
354
+ let respData;
355
+ // executionState.liveRequestsMap.delete(request);
356
+ if (failed) {
357
+ // Handle failed request
358
+ respData = {
359
+ status: null,
360
+ headers: {},
361
+ url: request.url(),
362
+ timestamp: Date.now(),
363
+ body: null,
364
+ contentType: null,
365
+ error: "Request failed",
366
+ };
367
+ }
368
+ else {
369
+ const response = await request.response();
370
+ const headers = response?.headers?.() || {};
371
+ let contentType = headers["content-type"] || null;
372
+ let body = null;
373
+ try {
374
+ if (responseHasBody(response)) {
375
+ if (contentType && contentType.includes("application/json")) {
376
+ body = JSON.parse(await response.text());
377
+ }
378
+ else if ((contentType && contentType.includes("text")) ||
379
+ (contentType && contentType.includes("application/csv"))) {
380
+ body = await response.text();
381
+ if (contentType.includes("application/csv"))
382
+ contentType = "text/csv";
383
+ }
384
+ else {
385
+ // If you want binary, you could read it here—but only when responseHasBody(response) is true
386
+ // const buffer = await response.body();
387
+ // body = buffer.toString("base64");
388
+ }
389
+ }
390
+ else {
391
+ // For redirects / no-body statuses, it's useful to keep redirect info
392
+ // e.g., include Location header if present
393
+ // body stays null
394
+ }
395
+ }
396
+ catch (err) {
397
+ console.error("Error reading response body:", err);
398
+ }
399
+ respData = {
400
+ status: response.status(),
401
+ headers,
402
+ url: response.url(),
403
+ timestamp: Date.now(),
404
+ body,
405
+ contentType,
406
+ };
407
+ }
408
+ if (executionState.liveRequestsMap.has(request)) {
409
+ /* “normal” path – keep it in the buffer */
410
+ entry.response = respData;
411
+ if (outOfStep && executionState.currentStepHash) {
412
+ await saveMap(true);
413
+ }
414
+ }
415
+ else {
416
+ if (executionState.liveRequestsMapPrevious.has(request)) {
417
+ entry.response = respData;
418
+ await saveMap(false);
419
+ }
420
+ else {
421
+ /* orphan response – append directly to the previous step file */
422
+ entry.response = respData;
423
+ await appendEntryToStepFile(entry.stepHash, entry); // ➍ NEW
424
+ }
425
+ }
426
+ entry.response = respData;
427
+ return;
428
+ }
429
+ function responseHasBody(response) {
430
+ if (!response)
431
+ return false;
432
+ const s = response.status?.() ?? 0;
433
+ // RFC 7231: 1xx, 204, 205, 304 have no body. Playwright: 3xx (redirect) body is unavailable.
434
+ if ((s >= 100 && s < 200) || s === 204 || s === 205 || s === 304 || (s >= 300 && s < 400))
435
+ return false;
436
+ // HEAD responses have no body by definition
437
+ const method = response.request?.().method?.() ?? "GET";
438
+ if (method === "HEAD")
439
+ return false;
440
+ return true;
441
+ }
442
+ // Handle successful request with a response
443
+ // const headers = response.headers();
444
+ // const contentType = headers["content-type"] || "";
445
+ // let body = null;
446
+ // try {
447
+ // if (contentType.includes("application/json")) {
448
+ // const text = await response.text();
449
+ // body = JSON.parse(text);
450
+ // } else if (contentType.includes("text")) {
451
+ // body = await response.text();
452
+ // } else {
453
+ // // Optionally handle binary here
454
+ // // const buffer = await response.body();
455
+ // // body = buffer.toString("base64"); // if you want to store binary safely
456
+ // }
457
+ // } catch (err) {
458
+ // console.error("Error reading response body:", err);
459
+ // }
460
+ // requestData.response = {
461
+ // status: response.status(),
462
+ // headers,
463
+ // url: response.url(),
464
+ // timestamp: Date.now(),
465
+ // body,
466
+ // contentType,
467
+ // };
468
+ // saveNetworkDataToFile(requestData);
469
+ // }
470
+ export { registerNetworkEvents, registerDownloadEvent };
471
+ //# sourceMappingURL=network.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network.js","sourceRoot":"","sources":["../../src/network.ts"],"names":[],"mappings":"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"}
package/lib/route.d.ts ADDED
@@ -0,0 +1,21 @@
1
+ export interface Route {
2
+ template: string;
3
+ routes: RouteItem[];
4
+ }
5
+ export interface RouteItem {
6
+ filters: {
7
+ path: string;
8
+ queryParams: Record<string, string> | null;
9
+ method: string | null;
10
+ };
11
+ actions: Action[];
12
+ mandatory: boolean;
13
+ timeout: number;
14
+ }
15
+ export interface Action {
16
+ type: string;
17
+ config: any;
18
+ }
19
+ export declare function registerBeforeStepRoutes(context: any, stepName: string, world: any): Promise<void>;
20
+ export declare function registerAfterStepRoutes(context: any, world: any): Promise<any>;
21
+ export declare function _stepNameToTemplate(stepName: string): string;