@stubber/virtual-worker 1.4.2 → 1.5.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.
@@ -0,0 +1,25 @@
1
+ import { create_error_conceptual } from "#app/functions/create_error_conceptual.js";
2
+ import { clear_chromium_sessions, list_chromium_sessions } from "../../helpers/get_chromium_page.js";
3
+
4
+ /**
5
+ *
6
+ * @param {Object} params
7
+ * @param {string} params.operation - The operation to perform: "list" or "delete"
8
+ * @param {string} [params.session_ids] - The session IDs to delete (required for "delete" operation)
9
+ */
10
+ export const browser_manage_sessions = async (params, stubber_context) => {
11
+ const { operation: operation, session_ids } = params || {};
12
+
13
+ if (operation === "list") {
14
+ return await list_chromium_sessions();
15
+ } else if (operation === "delete") {
16
+ if (!session_ids || !Array.isArray(session_ids)) {
17
+ return create_error_conceptual({
18
+ message: "session_ids is required and must be an array for 'delete' operation.",
19
+ });
20
+ }
21
+ return await clear_chromium_sessions(session_ids);
22
+ } else {
23
+ return create_error_conceptual({ message: "Invalid operation. Must be 'list' or 'delete'." });
24
+ }
25
+ };
@@ -7,6 +7,7 @@ import { browser_press_key } from "./browser/browser_press_key.js";
7
7
  import { browser_extract_html } from "./browser/browser_extract_html.js";
8
8
  import { browser_screenshot } from "./browser/browser_screenshot.js";
9
9
  import { browser_get_clipboard_text } from "./browser/browser_get_clipboard_text.js";
10
+ import { browser_manage_sessions } from "./browser/browser_manage_sessions.js";
10
11
  import { cli_run } from "./cli/cli_run.js";
11
12
 
12
13
  import { upload_files } from "./file-server/upload_files.js";
@@ -24,6 +25,7 @@ const all_commands = {
24
25
  browser_extract_html,
25
26
  browser_screenshot,
26
27
  browser_get_clipboard_text,
28
+ browser_manage_sessions,
27
29
 
28
30
  cli_run,
29
31
 
@@ -31,11 +31,12 @@ export const get_chromium_page = async (params, stubber_context) => {
31
31
  }
32
32
 
33
33
  // console.log(`get_chromium_page: session_id=${session_id}, slow_mo=${slow_mo}`);
34
+ const headless = params?.headless ?? process.env.HEADLESS_CHROMIUM ?? false;
34
35
 
35
36
  // Launch the browser once and reuse it
36
37
  if (!browser) {
37
38
  browser = await chromium.launch({
38
- headless: false,
39
+ headless: headless === true || headless === "true",
39
40
  // eslint-disable-next-line id-match
40
41
  slowMo: slow_mo,
41
42
  });
@@ -65,3 +66,35 @@ export const get_chromium_page = async (params, stubber_context) => {
65
66
 
66
67
  return create_success({ message: "Successfully retrieved Chromium page.", payload: page });
67
68
  };
69
+
70
+ export const list_chromium_sessions = () => {
71
+ return create_success({
72
+ message: "Successfully listed Chromium sessions.",
73
+ payload: {
74
+ sessions: Object.keys(contexts),
75
+ },
76
+ });
77
+ };
78
+
79
+ export const clear_chromium_sessions = async (session_ids) => {
80
+ try {
81
+ let cleared_sessions = [];
82
+ for (const session_id of session_ids) {
83
+ const context_entry = contexts[session_id];
84
+ if (context_entry) {
85
+ await context_entry.context.close();
86
+ delete contexts[session_id];
87
+ cleared_sessions.push(session_id);
88
+ }
89
+ }
90
+ return create_success({
91
+ message: "Successfully cleared specified Chromium sessions.",
92
+ payload: {
93
+ cleared_sessions,
94
+ sessions: Object.keys(contexts),
95
+ },
96
+ });
97
+ } catch (error) {
98
+ return create_error_technical({ message: "Failed to clear Chromium sessions.", error });
99
+ }
100
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stubber/virtual-worker",
3
- "version": "1.4.2",
3
+ "version": "1.5.0",
4
4
  "description": "Template to easily create a node app and keep development standards",
5
5
  "main": "app.js",
6
6
  "directories": {