imperium-crawl 2.5.3 → 2.6.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.
Files changed (235) hide show
  1. package/README.md +15 -14
  2. package/dist/batch/job-store.js +1 -1
  3. package/dist/batch/job-store.js.map +1 -1
  4. package/dist/brave-api/index.js +1 -1
  5. package/dist/brave-api/index.js.map +1 -1
  6. package/dist/cli/config.d.ts +21 -0
  7. package/dist/cli/config.d.ts.map +1 -0
  8. package/dist/cli/config.js +51 -0
  9. package/dist/cli/config.js.map +1 -0
  10. package/dist/cli/engine.d.ts +17 -0
  11. package/dist/cli/engine.d.ts.map +1 -0
  12. package/dist/cli/engine.js +440 -0
  13. package/dist/cli/engine.js.map +1 -0
  14. package/dist/cli/explore.d.ts +30 -0
  15. package/dist/cli/explore.d.ts.map +1 -0
  16. package/dist/cli/explore.js +427 -0
  17. package/dist/cli/explore.js.map +1 -0
  18. package/dist/cli/onboarding.d.ts +10 -0
  19. package/dist/cli/onboarding.d.ts.map +1 -0
  20. package/dist/cli/onboarding.js +128 -0
  21. package/dist/cli/onboarding.js.map +1 -0
  22. package/dist/cli/recorder.d.ts +44 -0
  23. package/dist/cli/recorder.d.ts.map +1 -0
  24. package/dist/cli/recorder.js +67 -0
  25. package/dist/cli/recorder.js.map +1 -0
  26. package/dist/cli/tui.d.ts +12 -0
  27. package/dist/cli/tui.d.ts.map +1 -0
  28. package/dist/cli/tui.js +945 -0
  29. package/dist/cli/tui.js.map +1 -0
  30. package/dist/cli/ui.d.ts +26 -0
  31. package/dist/cli/ui.d.ts.map +1 -0
  32. package/dist/cli/ui.js +58 -0
  33. package/dist/cli/ui.js.map +1 -0
  34. package/dist/core/action-executor.d.ts +66 -0
  35. package/dist/core/action-executor.d.ts.map +1 -0
  36. package/dist/core/action-executor.js +403 -0
  37. package/dist/core/action-executor.js.map +1 -0
  38. package/dist/core/config.d.ts +16 -0
  39. package/dist/core/config.d.ts.map +1 -0
  40. package/dist/core/config.js +56 -0
  41. package/dist/core/config.js.map +1 -0
  42. package/dist/core/constants.d.ts +40 -0
  43. package/dist/core/constants.d.ts.map +1 -0
  44. package/dist/core/constants.js +86 -0
  45. package/dist/core/constants.js.map +1 -0
  46. package/dist/core/formatters.d.ts +36 -0
  47. package/dist/core/formatters.d.ts.map +1 -0
  48. package/dist/core/formatters.js +147 -0
  49. package/dist/core/formatters.js.map +1 -0
  50. package/dist/engines/camofox.d.ts +27 -0
  51. package/dist/engines/camofox.d.ts.map +1 -0
  52. package/dist/engines/camofox.js +432 -0
  53. package/dist/engines/camofox.js.map +1 -0
  54. package/dist/engines/index.d.ts +13 -0
  55. package/dist/engines/index.d.ts.map +1 -0
  56. package/dist/engines/index.js +41 -0
  57. package/dist/engines/index.js.map +1 -0
  58. package/dist/engines/types.d.ts +63 -0
  59. package/dist/engines/types.d.ts.map +1 -0
  60. package/dist/engines/types.js +8 -0
  61. package/dist/engines/types.js.map +1 -0
  62. package/dist/flows/engine.js +3 -3
  63. package/dist/flows/engine.js.map +1 -1
  64. package/dist/flows/storage.js +1 -1
  65. package/dist/flows/storage.js.map +1 -1
  66. package/dist/flows/templates.js +1 -1
  67. package/dist/flows/templates.js.map +1 -1
  68. package/dist/flows/types.d.ts +405 -405
  69. package/dist/index.js +4 -4
  70. package/dist/index.js.map +1 -1
  71. package/dist/knowledge/store.js +1 -1
  72. package/dist/knowledge/store.js.map +1 -1
  73. package/dist/network/index.d.ts +3 -0
  74. package/dist/network/index.d.ts.map +1 -0
  75. package/dist/network/index.js +2 -0
  76. package/dist/network/index.js.map +1 -0
  77. package/dist/recipes/data/crypto-websocket.json +11 -0
  78. package/dist/recipes/data/ecommerce-product.json +25 -0
  79. package/dist/recipes/data/github-trending.json +19 -0
  80. package/dist/recipes/data/hn-top-stories.json +22 -0
  81. package/dist/recipes/data/influencer-competitor-spy.json +14 -0
  82. package/dist/recipes/data/influencer-content-scout.json +14 -0
  83. package/dist/recipes/data/influencer-hashtag-scout.json +14 -0
  84. package/dist/recipes/data/influencer-niche-discovery.json +14 -0
  85. package/dist/recipes/data/job-listings-greenhouse.json +17 -0
  86. package/dist/recipes/data/news-article-reader.json +9 -0
  87. package/dist/recipes/data/product-reviews.json +33 -0
  88. package/dist/recipes/data/reddit-posts.json +8 -0
  89. package/dist/recipes/data/seo-page-audit.json +26 -0
  90. package/dist/recipes/data/social-media-mentions.json +31 -0
  91. package/dist/recipes/index.d.ts +1 -1
  92. package/dist/recipes/index.d.ts.map +1 -1
  93. package/dist/recipes/index.js +14 -14
  94. package/dist/recipes/index.js.map +1 -1
  95. package/dist/security/auth-vault.js +1 -1
  96. package/dist/security/auth-vault.js.map +1 -1
  97. package/dist/security/index.d.ts +6 -0
  98. package/dist/security/index.d.ts.map +1 -0
  99. package/dist/security/index.js +4 -0
  100. package/dist/security/index.js.map +1 -0
  101. package/dist/sessions/browser-state.js +1 -1
  102. package/dist/sessions/browser-state.js.map +1 -1
  103. package/dist/sessions/encryption.js +1 -1
  104. package/dist/sessions/encryption.js.map +1 -1
  105. package/dist/sessions/manager.js +1 -1
  106. package/dist/sessions/manager.js.map +1 -1
  107. package/dist/skills/detector.js +1 -1
  108. package/dist/skills/detector.js.map +1 -1
  109. package/dist/skills/index.d.ts +9 -0
  110. package/dist/skills/index.d.ts.map +1 -0
  111. package/dist/skills/index.js +6 -0
  112. package/dist/skills/index.js.map +1 -0
  113. package/dist/skills/manager.js +1 -1
  114. package/dist/skills/manager.js.map +1 -1
  115. package/dist/snapshot/store.js +1 -1
  116. package/dist/snapshot/store.js.map +1 -1
  117. package/dist/social/index.d.ts +7 -0
  118. package/dist/social/index.d.ts.map +1 -0
  119. package/dist/social/index.js +4 -0
  120. package/dist/social/index.js.map +1 -0
  121. package/dist/stealth/browser-pool.js +1 -1
  122. package/dist/stealth/browser-pool.js.map +1 -1
  123. package/dist/stealth/browser.js +2 -2
  124. package/dist/stealth/browser.js.map +1 -1
  125. package/dist/stealth/chrome-profile.js +2 -2
  126. package/dist/stealth/chrome-profile.js.map +1 -1
  127. package/dist/stealth/index.js +2 -2
  128. package/dist/stealth/index.js.map +1 -1
  129. package/dist/tools/ai-extract.js +1 -1
  130. package/dist/tools/ai-extract.js.map +1 -1
  131. package/dist/tools/batch-download.d.ts +1 -1
  132. package/dist/tools/batch-download.js +1 -1
  133. package/dist/tools/batch-download.js.map +1 -1
  134. package/dist/tools/batch-scrape.d.ts +2 -2
  135. package/dist/tools/batch-scrape.js +1 -1
  136. package/dist/tools/batch-scrape.js.map +1 -1
  137. package/dist/tools/browser.d.ts +8 -8
  138. package/dist/tools/browser.js +4 -4
  139. package/dist/tools/browser.js.map +1 -1
  140. package/dist/tools/camofox-status.d.ts +14 -0
  141. package/dist/tools/camofox-status.d.ts.map +1 -0
  142. package/dist/tools/camofox-status.js +61 -0
  143. package/dist/tools/camofox-status.js.map +1 -0
  144. package/dist/tools/camofox-update.d.ts +29 -0
  145. package/dist/tools/camofox-update.d.ts.map +1 -0
  146. package/dist/tools/camofox-update.js +108 -0
  147. package/dist/tools/camofox-update.js.map +1 -0
  148. package/dist/tools/crawl.d.ts +2 -2
  149. package/dist/tools/crawl.js +1 -1
  150. package/dist/tools/crawl.js.map +1 -1
  151. package/dist/tools/create-skill.js +3 -3
  152. package/dist/tools/create-skill.js.map +1 -1
  153. package/dist/tools/discover-apis.d.ts +1 -1
  154. package/dist/tools/discover-apis.js +1 -1
  155. package/dist/tools/discover-apis.js.map +1 -1
  156. package/dist/tools/download.d.ts +7 -7
  157. package/dist/tools/download.js +1 -1
  158. package/dist/tools/download.js.map +1 -1
  159. package/dist/tools/extract.d.ts +1 -1
  160. package/dist/tools/extract.js +1 -1
  161. package/dist/tools/extract.js.map +1 -1
  162. package/dist/tools/image-search.d.ts +1 -1
  163. package/dist/tools/image-search.js +2 -2
  164. package/dist/tools/image-search.js.map +1 -1
  165. package/dist/tools/index.d.ts.map +1 -1
  166. package/dist/tools/index.js +5 -0
  167. package/dist/tools/index.js.map +1 -1
  168. package/dist/tools/instagram.d.ts +1 -1
  169. package/dist/tools/instagram.js +3 -3
  170. package/dist/tools/instagram.js.map +1 -1
  171. package/dist/tools/interact.d.ts +86 -86
  172. package/dist/tools/interact.js +5 -5
  173. package/dist/tools/interact.js.map +1 -1
  174. package/dist/tools/knowledge.js +1 -1
  175. package/dist/tools/knowledge.js.map +1 -1
  176. package/dist/tools/list-skills.js +1 -1
  177. package/dist/tools/list-skills.js.map +1 -1
  178. package/dist/tools/manifest.d.ts.map +1 -1
  179. package/dist/tools/manifest.js +9 -0
  180. package/dist/tools/manifest.js.map +1 -1
  181. package/dist/tools/map.js +1 -1
  182. package/dist/tools/map.js.map +1 -1
  183. package/dist/tools/monitor-websocket.d.ts +1 -1
  184. package/dist/tools/monitor-websocket.js +1 -1
  185. package/dist/tools/monitor-websocket.js.map +1 -1
  186. package/dist/tools/monitor.d.ts +2 -2
  187. package/dist/tools/news-search.d.ts +1 -1
  188. package/dist/tools/news-search.js +2 -2
  189. package/dist/tools/news-search.js.map +1 -1
  190. package/dist/tools/query-api.d.ts +5 -5
  191. package/dist/tools/query-api.js +1 -1
  192. package/dist/tools/query-api.js.map +1 -1
  193. package/dist/tools/readability.js +1 -1
  194. package/dist/tools/readability.js.map +1 -1
  195. package/dist/tools/record-flow.d.ts +2 -2
  196. package/dist/tools/record-flow.js +3 -3
  197. package/dist/tools/record-flow.js.map +1 -1
  198. package/dist/tools/reddit.d.ts +2 -2
  199. package/dist/tools/reddit.js +3 -3
  200. package/dist/tools/reddit.js.map +1 -1
  201. package/dist/tools/rss.js +1 -1
  202. package/dist/tools/rss.js.map +1 -1
  203. package/dist/tools/run-flow.d.ts +6 -6
  204. package/dist/tools/run-skill.d.ts +6 -6
  205. package/dist/tools/run-skill.js +2 -2
  206. package/dist/tools/run-skill.js.map +1 -1
  207. package/dist/tools/scrape.d.ts +4 -4
  208. package/dist/tools/scrape.js +1 -1
  209. package/dist/tools/scrape.js.map +1 -1
  210. package/dist/tools/screenshot.js +1 -1
  211. package/dist/tools/screenshot.js.map +1 -1
  212. package/dist/tools/search.d.ts +1 -1
  213. package/dist/tools/search.js +2 -2
  214. package/dist/tools/search.js.map +1 -1
  215. package/dist/tools/snapshot.d.ts +5 -5
  216. package/dist/tools/snapshot.js +2 -2
  217. package/dist/tools/snapshot.js.map +1 -1
  218. package/dist/tools/video-search.d.ts +1 -1
  219. package/dist/tools/video-search.js +2 -2
  220. package/dist/tools/video-search.js.map +1 -1
  221. package/dist/tools/watch.d.ts +2 -2
  222. package/dist/tools/watch.js +1 -1
  223. package/dist/tools/watch.js.map +1 -1
  224. package/dist/tools/youtube.d.ts +1 -1
  225. package/dist/tools/youtube.js +4 -4
  226. package/dist/tools/youtube.js.map +1 -1
  227. package/dist/types.d.ts +14 -0
  228. package/dist/types.d.ts.map +1 -0
  229. package/dist/types.js +5 -0
  230. package/dist/types.js.map +1 -0
  231. package/dist/utils/fetcher.js +1 -1
  232. package/dist/utils/fetcher.js.map +1 -1
  233. package/dist/utils/robots.js +1 -1
  234. package/dist/utils/robots.js.map +1 -1
  235. package/package.json +7 -3
@@ -0,0 +1,403 @@
1
+ /**
2
+ * Action Executor — extracted from interact.ts.
3
+ *
4
+ * Shared between:
5
+ * - interact tool (automated action sequences)
6
+ * - explore REPL (interactive CLI browser session)
7
+ *
8
+ * All browser action handlers live here. interact.ts and cli-explore.ts
9
+ * import executeAction from this module.
10
+ *
11
+ * Note: evaluate and paginate actions use new Function() intentionally —
12
+ * the user explicitly provides JS scripts for browser-side execution.
13
+ * This is the same pattern used in the original interact.ts.
14
+ */
15
+ import { HUMAN_DELAY_MIN_MS, HUMAN_DELAY_MAX_MS, } from "../core/constants.js";
16
+ import { getSnapshotStore } from "../snapshot/index.js";
17
+ import { getAuthProfile, updateLastLogin } from "../security/index.js";
18
+ // ── Helpers ──
19
+ export function humanDelay() {
20
+ return (HUMAN_DELAY_MIN_MS +
21
+ Math.floor(Math.random() * (HUMAN_DELAY_MAX_MS - HUMAN_DELAY_MIN_MS)));
22
+ }
23
+ export function resolveRefToLocator(page, refEntry) {
24
+ const locator = refEntry.name
25
+ ? page.getByRole(refEntry.role, {
26
+ name: refEntry.name,
27
+ exact: true,
28
+ })
29
+ : page.getByRole(refEntry.role);
30
+ return refEntry.nth !== undefined ? locator.nth(refEntry.nth) : locator;
31
+ }
32
+ export function getTargetSelector(action, sessionId) {
33
+ if (action.ref && action.selector) {
34
+ return { error: "ref and selector are mutually exclusive — provide one, not both" };
35
+ }
36
+ if (action.ref && sessionId) {
37
+ const entry = getSnapshotStore().resolveRef(sessionId, action.ref);
38
+ if (!entry) {
39
+ return { error: `ref '${action.ref}' not found. Take a snapshot first to get valid refs.` };
40
+ }
41
+ return { refEntry: entry };
42
+ }
43
+ if (action.ref && !sessionId) {
44
+ return { error: "ref requires session_id to resolve. Provide session_id or use selector instead." };
45
+ }
46
+ return { selector: action.selector };
47
+ }
48
+ export function buildCssSelectorFromRef(refEntry) {
49
+ const roleMap = {
50
+ button: "button",
51
+ link: "a",
52
+ textbox: "input",
53
+ searchbox: "input[type=search]",
54
+ checkbox: "input[type=checkbox]",
55
+ radio: "input[type=radio]",
56
+ };
57
+ const tag = roleMap[refEntry.role] ?? `[role="${refEntry.role}"]`;
58
+ return refEntry.name ? `${tag}:has-text("${refEntry.name.replace(/"/g, '\\"')}")` : tag;
59
+ }
60
+ // ── Core Action Executor ──
61
+ export async function executeAction(page, action, screenshots, timeout, sessionId) {
62
+ try {
63
+ const needsTarget = ["click", "type", "hover", "select", "press", "wait", "drag", "upload"].includes(action.type);
64
+ let refEntry;
65
+ let cssSelector;
66
+ if (needsTarget && (action.ref || action.selector)) {
67
+ const target = getTargetSelector(action, sessionId);
68
+ if (target.error)
69
+ return { type: action.type, success: false, error: target.error };
70
+ refEntry = target.refEntry;
71
+ cssSelector = target.selector;
72
+ }
73
+ switch (action.type) {
74
+ case "click": {
75
+ if (!refEntry && !cssSelector)
76
+ return { type: "click", success: false, error: "selector or ref required" };
77
+ if (refEntry) {
78
+ await resolveRefToLocator(page, refEntry).click({ timeout });
79
+ }
80
+ else {
81
+ await page.click(cssSelector, { timeout });
82
+ }
83
+ await page.waitForLoadState("networkidle", { timeout: 5000 }).catch(() => { });
84
+ return { type: "click", success: true };
85
+ }
86
+ case "type": {
87
+ if (!refEntry && !cssSelector)
88
+ return { type: "type", success: false, error: "selector or ref required" };
89
+ if (action.text === undefined)
90
+ return { type: "type", success: false, error: "text required" };
91
+ if (refEntry) {
92
+ await resolveRefToLocator(page, refEntry).fill(action.text, { timeout });
93
+ }
94
+ else {
95
+ await page.fill(cssSelector, action.text, { timeout });
96
+ }
97
+ return { type: "type", success: true };
98
+ }
99
+ case "scroll": {
100
+ const x = action.x ?? 0;
101
+ const y = action.y ?? 500;
102
+ await page.evaluate(({ dx, dy }) => window.scrollBy(dx, dy), { dx: x, dy: y });
103
+ return { type: "scroll", success: true };
104
+ }
105
+ case "wait": {
106
+ if (refEntry) {
107
+ await resolveRefToLocator(page, refEntry).waitFor({ timeout });
108
+ }
109
+ else if (cssSelector) {
110
+ await page.waitForSelector(cssSelector, { timeout });
111
+ }
112
+ else {
113
+ await page.waitForTimeout(action.duration ?? 1000);
114
+ }
115
+ return { type: "wait", success: true };
116
+ }
117
+ case "screenshot": {
118
+ const buf = await page.screenshot({ fullPage: false });
119
+ screenshots.push(buf.toString("base64"));
120
+ return { type: "screenshot", success: true };
121
+ }
122
+ case "evaluate": {
123
+ if (!action.script)
124
+ return { type: "evaluate", success: false, error: "script required" };
125
+ const evalFn = new Function(action.script);
126
+ const result = await page.evaluate(evalFn);
127
+ return { type: "evaluate", success: true, result };
128
+ }
129
+ case "select": {
130
+ if (!refEntry && !cssSelector)
131
+ return { type: "select", success: false, error: "selector or ref required" };
132
+ if (action.value === undefined)
133
+ return { type: "select", success: false, error: "value required" };
134
+ if (refEntry) {
135
+ await resolveRefToLocator(page, refEntry).selectOption(action.value, { timeout });
136
+ }
137
+ else {
138
+ await page.selectOption(cssSelector, action.value, { timeout });
139
+ }
140
+ return { type: "select", success: true };
141
+ }
142
+ case "hover": {
143
+ if (!refEntry && !cssSelector)
144
+ return { type: "hover", success: false, error: "selector or ref required" };
145
+ if (refEntry) {
146
+ await resolveRefToLocator(page, refEntry).hover({ timeout });
147
+ }
148
+ else {
149
+ await page.hover(cssSelector, { timeout });
150
+ }
151
+ return { type: "hover", success: true };
152
+ }
153
+ case "press": {
154
+ if (!action.key)
155
+ return { type: "press", success: false, error: "key required" };
156
+ if (refEntry) {
157
+ await resolveRefToLocator(page, refEntry).press(action.key, { timeout });
158
+ }
159
+ else if (cssSelector) {
160
+ await page.press(cssSelector, action.key, { timeout });
161
+ }
162
+ else {
163
+ await page.keyboard.press(action.key);
164
+ }
165
+ return { type: "press", success: true };
166
+ }
167
+ case "navigate": {
168
+ if (!action.url)
169
+ return { type: "navigate", success: false, error: "url required" };
170
+ await page.goto(action.url, { waitUntil: "load", timeout });
171
+ return { type: "navigate", success: true };
172
+ }
173
+ case "drag": {
174
+ if (!refEntry && !cssSelector)
175
+ return { type: "drag", success: false, error: "selector or ref required for source" };
176
+ if (!action.target_selector && !action.target_ref)
177
+ return { type: "drag", success: false, error: "target_selector or target_ref required" };
178
+ const sourceSelector = refEntry ? buildCssSelectorFromRef(refEntry) : cssSelector;
179
+ let targetSelector;
180
+ if (action.target_ref && sessionId) {
181
+ const targetEntry = getSnapshotStore().resolveRef(sessionId, action.target_ref);
182
+ if (!targetEntry)
183
+ return { type: "drag", success: false, error: `target ref '${action.target_ref}' not found` };
184
+ targetSelector = buildCssSelectorFromRef(targetEntry);
185
+ }
186
+ else if (action.target_selector) {
187
+ targetSelector = action.target_selector;
188
+ }
189
+ else {
190
+ return { type: "drag", success: false, error: "target_selector or target_ref required" };
191
+ }
192
+ await page.dragAndDrop(sourceSelector, targetSelector, { timeout });
193
+ return { type: "drag", success: true };
194
+ }
195
+ case "upload": {
196
+ if (!refEntry && !cssSelector)
197
+ return { type: "upload", success: false, error: "selector or ref required" };
198
+ if (!action.file_paths?.length)
199
+ return { type: "upload", success: false, error: "file_paths required" };
200
+ if (refEntry) {
201
+ await resolveRefToLocator(page, refEntry).setInputFiles(action.file_paths, { timeout });
202
+ }
203
+ else {
204
+ await page.setInputFiles(cssSelector, action.file_paths, { timeout });
205
+ }
206
+ return { type: "upload", success: true };
207
+ }
208
+ case "storage_get": {
209
+ if (!action.storage)
210
+ return { type: "storage_get", success: false, error: "storage type required (local or session)" };
211
+ const storageObj = action.storage === "local" ? "localStorage" : "sessionStorage";
212
+ const storageKey = action.key;
213
+ const storageResult = await page.evaluate(({ obj, k }) => {
214
+ const storage = obj === "localStorage" ? localStorage : sessionStorage;
215
+ if (k)
216
+ return storage.getItem(k);
217
+ const all = {};
218
+ for (let i = 0; i < storage.length; i++) {
219
+ const key = storage.key(i);
220
+ if (key)
221
+ all[key] = storage.getItem(key);
222
+ }
223
+ return all;
224
+ }, { obj: storageObj, k: storageKey });
225
+ return { type: "storage_get", success: true, result: storageResult };
226
+ }
227
+ case "storage_set": {
228
+ if (!action.storage)
229
+ return { type: "storage_set", success: false, error: "storage type required" };
230
+ if (!action.key)
231
+ return { type: "storage_set", success: false, error: "key required" };
232
+ if (action.value === undefined)
233
+ return { type: "storage_set", success: false, error: "value required" };
234
+ const storageTarget = action.storage === "local" ? "localStorage" : "sessionStorage";
235
+ await page.evaluate(({ obj, k, v }) => {
236
+ const storage = obj === "localStorage" ? localStorage : sessionStorage;
237
+ storage.setItem(k, v);
238
+ }, { obj: storageTarget, k: action.key, v: action.value });
239
+ return { type: "storage_set", success: true };
240
+ }
241
+ case "cookie_get": {
242
+ const allCookies = await page.context().cookies();
243
+ const filtered = action.key ? allCookies.filter((c) => c.name === action.key) : allCookies;
244
+ return { type: "cookie_get", success: true, result: filtered };
245
+ }
246
+ case "cookie_set": {
247
+ if (!action.cookies?.length)
248
+ return { type: "cookie_set", success: false, error: "cookies array required" };
249
+ const pageUrl = page.url();
250
+ const cookiesToSet = action.cookies.map((c) => ({ ...c, url: c.domain ? undefined : pageUrl }));
251
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
252
+ await page.context().addCookies(cookiesToSet);
253
+ return { type: "cookie_set", success: true };
254
+ }
255
+ case "pdf": {
256
+ const pdfBuf = await page.pdf();
257
+ screenshots.push(pdfBuf.toString("base64"));
258
+ return { type: "pdf", success: true, result: "PDF saved to screenshots array as base64" };
259
+ }
260
+ case "refresh": {
261
+ await page.reload({ waitUntil: "load", timeout });
262
+ return { type: "refresh", success: true };
263
+ }
264
+ case "paginate": {
265
+ if (!action.extract_script)
266
+ return { type: "paginate", success: false, error: "extract_script required" };
267
+ if (!action.next_selector && !action.next_ref)
268
+ return { type: "paginate", success: false, error: "next_selector or next_ref required" };
269
+ const maxPages = action.max_pages ?? 10;
270
+ const waitMs = action.wait_after_click ?? 2000;
271
+ const allData = [];
272
+ let nextRefEntry;
273
+ let nextCss;
274
+ if (action.next_ref && sessionId) {
275
+ const entry = getSnapshotStore().resolveRef(sessionId, action.next_ref);
276
+ if (!entry)
277
+ return { type: "paginate", success: false, error: `next_ref '${action.next_ref}' not found` };
278
+ nextRefEntry = entry;
279
+ }
280
+ else {
281
+ nextCss = action.next_selector;
282
+ }
283
+ const extractFn = action.extract_script;
284
+ for (let pg = 0; pg < maxPages; pg++) {
285
+ const extracted = await page.evaluate((script) => (new Function(script))(), extractFn);
286
+ if (extracted !== null && extracted !== undefined) {
287
+ if (Array.isArray(extracted)) {
288
+ allData.push(...extracted);
289
+ }
290
+ else if (typeof extracted === "string") {
291
+ try {
292
+ const parsed = JSON.parse(extracted);
293
+ Array.isArray(parsed) ? allData.push(...parsed) : allData.push(parsed);
294
+ }
295
+ catch {
296
+ allData.push(extracted);
297
+ }
298
+ }
299
+ else {
300
+ allData.push(extracted);
301
+ }
302
+ }
303
+ if (pg >= maxPages - 1)
304
+ break;
305
+ try {
306
+ if (nextRefEntry) {
307
+ const loc = resolveRefToLocator(page, nextRefEntry);
308
+ if (!await loc.isVisible().catch(() => false))
309
+ break;
310
+ await loc.click({ timeout });
311
+ }
312
+ else if (nextCss) {
313
+ const el = page.locator(nextCss);
314
+ if (!await el.isVisible().catch(() => false))
315
+ break;
316
+ const isDisabled = await el.evaluate((node) => {
317
+ const htmlEl = node;
318
+ return htmlEl.classList.contains("disabled") ||
319
+ htmlEl.getAttribute("aria-disabled") === "true" ||
320
+ htmlEl.disabled === true;
321
+ }).catch(() => false);
322
+ if (isDisabled)
323
+ break;
324
+ await el.click({ timeout });
325
+ }
326
+ }
327
+ catch {
328
+ break;
329
+ }
330
+ await page.waitForTimeout(waitMs);
331
+ await page.waitForLoadState("networkidle", { timeout: 5000 }).catch(() => { });
332
+ }
333
+ return { type: "paginate", success: true, result: allData };
334
+ }
335
+ case "auto_click": {
336
+ const defaultKeywords = [
337
+ "show more", "load more", "gallery", "view images", "view photos",
338
+ "prikaži više", "učitaj još", "galerija", "slike", "fotografije",
339
+ "photos", "images", "see more", "more images", "more photos",
340
+ "expand", "prikazi jos", "jos slika", "vise slika",
341
+ "ucitaj vise", "prikazi vise", "prikaži još", "učitaj više",
342
+ ];
343
+ const keywords = action.keywords ?? defaultKeywords;
344
+ const maxClicks = action.max_clicks ?? 5;
345
+ const clicked = [];
346
+ for (let round = 0; round < maxClicks; round++) {
347
+ const found = await page.evaluate((kw) => {
348
+ const clickedTexts = [];
349
+ const buttons = Array.from(document.querySelectorAll("button, a, [role=button], .btn, .button, [class*=gallery], [class*=image], [class*=photo], [class*=more], [class*=load], [class*=expand], [id*=gallery], [id*=image], [id*=photo], [id*=more]"));
350
+ for (const btn of buttons) {
351
+ const el = btn;
352
+ const text = (el.textContent || el.title || el.getAttribute("aria-label") || "").toLowerCase();
353
+ const matched = kw.some((k) => text.includes(k.toLowerCase()));
354
+ if (matched && el.offsetParent !== null) {
355
+ try {
356
+ el.click();
357
+ el.scrollIntoView({ behavior: "instant", block: "center" });
358
+ clickedTexts.push(text.slice(0, 100));
359
+ }
360
+ catch { }
361
+ }
362
+ }
363
+ return clickedTexts;
364
+ }, keywords);
365
+ if (found.length === 0)
366
+ break;
367
+ clicked.push(...found);
368
+ await page.waitForTimeout(action.wait_after_click ?? 2500);
369
+ await page.waitForLoadState("networkidle", { timeout: 5000 }).catch(() => { });
370
+ }
371
+ return { type: "auto_click", success: true, result: { clicked: clicked.length, buttons: clicked } };
372
+ }
373
+ case "auth_login": {
374
+ if (!action.auth_profile)
375
+ return { type: "auth_login", success: false, error: "auth_profile name required" };
376
+ const profile = await getAuthProfile(action.auth_profile);
377
+ if (!profile)
378
+ return { type: "auth_login", success: false, error: `Auth profile '${action.auth_profile}' not found` };
379
+ if (profile.url) {
380
+ await page.goto(profile.url, { waitUntil: "load", timeout });
381
+ }
382
+ await page.fill(profile.selectors.username, profile.username, { timeout });
383
+ await page.waitForTimeout(humanDelay());
384
+ await page.fill(profile.selectors.password, profile.password, { timeout });
385
+ await page.waitForTimeout(humanDelay());
386
+ await page.click(profile.selectors.submit, { timeout });
387
+ await page.waitForLoadState("networkidle", { timeout: 10000 }).catch(() => { });
388
+ await updateLastLogin(action.auth_profile);
389
+ return { type: "auth_login", success: true, result: `Logged in as ${profile.username}` };
390
+ }
391
+ default:
392
+ return { type: action.type, success: false, error: "unknown action type" };
393
+ }
394
+ }
395
+ catch (err) {
396
+ return {
397
+ type: action.type,
398
+ success: false,
399
+ error: err instanceof Error ? err.message : String(err),
400
+ };
401
+ }
402
+ }
403
+ //# sourceMappingURL=action-executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action-executor.js","sourceRoot":"","sources":["../../src/core/action-executor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ export declare function hasBraveApiKey(): boolean;
2
+ export declare function hasTwoCaptchaApiKey(): boolean;
3
+ export declare function getTwoCaptchaApiKey(): string | undefined;
4
+ export declare function hasProxyConfigured(): boolean;
5
+ export declare function getBrowserPoolSize(): number;
6
+ export declare function getSkillsDir(): string;
7
+ export declare function getKnowledgeFilePath(): string;
8
+ export declare function getSessionsDir(): string;
9
+ export declare function getJobsDir(): string;
10
+ export declare function getChromeProfilePath(): string | undefined;
11
+ export declare function hasChromeProfileConfigured(): boolean;
12
+ export declare function getLLMProvider(): "anthropic" | "openai" | "minimax";
13
+ export declare function getLLMApiKey(): string | undefined;
14
+ export declare function getLLMModel(): string | undefined;
15
+ export declare function hasLLMConfigured(): boolean;
16
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAIA,wBAAgB,cAAc,IAAI,OAAO,CAExC;AAED,wBAAgB,mBAAmB,IAAI,OAAO,CAE7C;AAED,wBAAgB,mBAAmB,IAAI,MAAM,GAAG,SAAS,CAExD;AAED,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAI3C;AAED,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED,wBAAgB,oBAAoB,IAAI,MAAM,CAK7C;AAED,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED,wBAAgB,oBAAoB,IAAI,MAAM,GAAG,SAAS,CAEzD;AAED,wBAAgB,0BAA0B,IAAI,OAAO,CAEpD;AAED,wBAAgB,cAAc,IAAI,WAAW,GAAG,QAAQ,GAAG,SAAS,CAGnE;AAED,wBAAgB,YAAY,IAAI,MAAM,GAAG,SAAS,CAEjD;AAED,wBAAgB,WAAW,IAAI,MAAM,GAAG,SAAS,CAEhD;AAED,wBAAgB,gBAAgB,IAAI,OAAO,CAE1C"}
@@ -0,0 +1,56 @@
1
+ import path from "node:path";
2
+ import os from "node:os";
3
+ import { SKILLS_DIR_NAME, SKILLS_SUBDIR, SESSIONS_SUBDIR, JOBS_SUBDIR, DEFAULT_BROWSER_POOL_SIZE, KNOWLEDGE_FILE } from "./constants.js";
4
+ export function hasBraveApiKey() {
5
+ return !!process.env.BRAVE_API_KEY;
6
+ }
7
+ export function hasTwoCaptchaApiKey() {
8
+ return !!(process.env.TWOCAPTCHA_API_KEY || process.env.TWO_CAPTCHA_API_KEY);
9
+ }
10
+ export function getTwoCaptchaApiKey() {
11
+ return process.env.TWOCAPTCHA_API_KEY || process.env.TWO_CAPTCHA_API_KEY || undefined;
12
+ }
13
+ export function hasProxyConfigured() {
14
+ return !!(process.env.PROXY_URL?.trim() || process.env.PROXY_URLS?.trim());
15
+ }
16
+ export function getBrowserPoolSize() {
17
+ const size = parseInt(process.env.BROWSER_POOL_SIZE || "", 10);
18
+ if (isNaN(size) || size < 1 || size > 20)
19
+ return DEFAULT_BROWSER_POOL_SIZE;
20
+ return size;
21
+ }
22
+ export function getSkillsDir() {
23
+ return path.join(os.homedir(), SKILLS_DIR_NAME, SKILLS_SUBDIR);
24
+ }
25
+ export function getKnowledgeFilePath() {
26
+ if (process.env.IMPERIUM_DATA_DIR) {
27
+ return path.join(process.env.IMPERIUM_DATA_DIR, KNOWLEDGE_FILE);
28
+ }
29
+ return path.join(os.homedir(), SKILLS_DIR_NAME, KNOWLEDGE_FILE);
30
+ }
31
+ export function getSessionsDir() {
32
+ return path.join(os.homedir(), SKILLS_DIR_NAME, SESSIONS_SUBDIR);
33
+ }
34
+ export function getJobsDir() {
35
+ return path.join(os.homedir(), SKILLS_DIR_NAME, JOBS_SUBDIR);
36
+ }
37
+ export function getChromeProfilePath() {
38
+ return process.env.CHROME_PROFILE_PATH?.trim() || undefined;
39
+ }
40
+ export function hasChromeProfileConfigured() {
41
+ return !!getChromeProfilePath();
42
+ }
43
+ export function getLLMProvider() {
44
+ const raw = (process.env.LLM_PROVIDER || "anthropic").toLowerCase();
45
+ return raw === "openai" ? "openai" : raw === "minimax" ? "minimax" : "anthropic";
46
+ }
47
+ export function getLLMApiKey() {
48
+ return process.env.LLM_API_KEY?.trim() || undefined;
49
+ }
50
+ export function getLLMModel() {
51
+ return process.env.LLM_MODEL?.trim() || undefined;
52
+ }
53
+ export function hasLLMConfigured() {
54
+ return !!getLLMApiKey();
55
+ }
56
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ export declare const PACKAGE_NAME = "imperium-crawl";
2
+ export declare const PACKAGE_VERSION = "2.5.0";
3
+ export declare const DEFAULT_TIMEOUT_MS = 30000;
4
+ export declare const DEFAULT_MAX_PAGES = 10;
5
+ export declare const DEFAULT_MAX_DEPTH = 2;
6
+ export declare const DEFAULT_CONCURRENCY = 3;
7
+ export declare const DEFAULT_ROBOTS_CACHE_TTL_MS: number;
8
+ export declare const SKILLS_DIR_NAME = ".imperium-crawl";
9
+ export declare const SKILLS_SUBDIR = "skills";
10
+ export declare const SESSIONS_SUBDIR = "sessions";
11
+ export declare const JOBS_SUBDIR = "jobs";
12
+ export declare const BRAVE_API_BASE = "https://api.search.brave.com/res/v1";
13
+ export declare const DEFAULT_BROWSER_POOL_SIZE = 3;
14
+ export declare const DEFAULT_BROWSER_IDLE_TIMEOUT_MS = 300000;
15
+ export declare const KNOWLEDGE_FILE = "knowledge.json";
16
+ export declare const STEALTH_ARGS: string[];
17
+ export declare const DEFAULT_VIEWPORT: {
18
+ width: number;
19
+ height: number;
20
+ };
21
+ export declare const HUMAN_DELAY_MIN_MS = 800;
22
+ export declare const HUMAN_DELAY_MAX_MS = 2500;
23
+ export declare const MIN_REPEATING_ELEMENTS = 3;
24
+ export declare const MAX_STRING_LENGTH = 10000;
25
+ export declare const MAX_BODY_LENGTH = 1048576;
26
+ export declare const MAX_QUERY_LENGTH = 2000;
27
+ export declare const MAX_SELECTOR_LENGTH = 1000;
28
+ export declare const MAX_URL_LENGTH = 8192;
29
+ export declare const MAX_PAGES = 100;
30
+ export declare const MAX_URLS = 10000;
31
+ export declare const MAX_ITEMS = 1000;
32
+ export declare const MAX_MESSAGES = 1000;
33
+ export declare const MAX_CONCURRENCY = 20;
34
+ export declare const MAX_WAIT_SECONDS = 300;
35
+ export declare const MAX_DURATION_SECONDS = 300;
36
+ export declare const MAX_TIMEOUT_MS = 300000;
37
+ export declare const MAX_SELECTOR_KEYS = 50;
38
+ export declare const MAX_CRAWL_CONTENT_PER_PAGE = 102400;
39
+ export declare const MAX_STORED_SNAPSHOTS = 100;
40
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/core/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY,mBAAmB,CAAC;AAC7C,eAAO,MAAM,eAAe,UAAU,CAAC;AAEvC,eAAO,MAAM,kBAAkB,QAAS,CAAC;AACzC,eAAO,MAAM,iBAAiB,KAAK,CAAC;AACpC,eAAO,MAAM,iBAAiB,IAAI,CAAC;AACnC,eAAO,MAAM,mBAAmB,IAAI,CAAC;AACrC,eAAO,MAAM,2BAA2B,QAAiB,CAAC;AAE1D,eAAO,MAAM,eAAe,oBAAoB,CAAC;AACjD,eAAO,MAAM,aAAa,WAAW,CAAC;AACtC,eAAO,MAAM,eAAe,aAAa,CAAC;AAC1C,eAAO,MAAM,WAAW,SAAS,CAAC;AAElC,eAAO,MAAM,cAAc,wCAAwC,CAAC;AAEpE,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAC3C,eAAO,MAAM,+BAA+B,SAAU,CAAC;AAEvD,eAAO,MAAM,cAAc,mBAAmB,CAAC;AAQ/C,eAAO,MAAM,YAAY,EAAE,MAAM,EA2ChC,CAAC;AAEF,eAAO,MAAM,gBAAgB;;;CAAgC,CAAC;AAE9D,eAAO,MAAM,kBAAkB,MAAM,CAAC;AACtC,eAAO,MAAM,kBAAkB,OAAO,CAAC;AAEvC,eAAO,MAAM,sBAAsB,IAAI,CAAC;AAIxC,eAAO,MAAM,iBAAiB,QAAS,CAAC;AACxC,eAAO,MAAM,eAAe,UAAY,CAAC;AACzC,eAAO,MAAM,gBAAgB,OAAQ,CAAC;AACtC,eAAO,MAAM,mBAAmB,OAAQ,CAAC;AACzC,eAAO,MAAM,cAAc,OAAQ,CAAC;AACpC,eAAO,MAAM,SAAS,MAAM,CAAC;AAC7B,eAAO,MAAM,QAAQ,QAAS,CAAC;AAC/B,eAAO,MAAM,SAAS,OAAQ,CAAC;AAC/B,eAAO,MAAM,YAAY,OAAQ,CAAC;AAClC,eAAO,MAAM,eAAe,KAAK,CAAC;AAClC,eAAO,MAAM,gBAAgB,MAAM,CAAC;AACpC,eAAO,MAAM,oBAAoB,MAAM,CAAC;AACxC,eAAO,MAAM,cAAc,SAAU,CAAC;AACtC,eAAO,MAAM,iBAAiB,KAAK,CAAC;AACpC,eAAO,MAAM,0BAA0B,SAAU,CAAC;AAIlD,eAAO,MAAM,oBAAoB,MAAM,CAAC"}