@epsilon-asi/actors 0.0.1

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 (381) hide show
  1. package/.ai/generators/_template.ts +37 -0
  2. package/.ai/generators/abstract.ts +24 -0
  3. package/.ai/generators/actor-task-form-filler.ts +140 -0
  4. package/.ai/generators/actor-task.ts +122 -0
  5. package/.ai/generators/auth-core.ts +126 -0
  6. package/.ai/generators/browser-runtime.ts +114 -0
  7. package/.ai/generators/cli-command.ts +96 -0
  8. package/.ai/generators/core-framework.ts +80 -0
  9. package/.ai/generators/docs.ts +92 -0
  10. package/.ai/generators/error-logging.ts +102 -0
  11. package/.ai/generators/extraction-helper.ts +96 -0
  12. package/.ai/generators/interaction-behavior.ts +129 -0
  13. package/.ai/generators/site-actor.ts +125 -0
  14. package/.ai/generators/site-login-flow.ts +117 -0
  15. package/.ai/generators/unit-test.ts +109 -0
  16. package/.ai/workflows/_template.ts +20 -0
  17. package/.ai/workflows/starter.ts +20 -0
  18. package/README.md +435 -0
  19. package/ai-gen.config.ts +67 -0
  20. package/dist/auth/AuthStateDetector.d.ts +6 -0
  21. package/dist/auth/AuthStateDetector.d.ts.map +1 -0
  22. package/dist/auth/AuthStateDetector.js +14 -0
  23. package/dist/auth/AuthStateDetector.js.map +1 -0
  24. package/dist/auth/CredentialsProvider.d.ts +22 -0
  25. package/dist/auth/CredentialsProvider.d.ts.map +1 -0
  26. package/dist/auth/CredentialsProvider.js +30 -0
  27. package/dist/auth/CredentialsProvider.js.map +1 -0
  28. package/dist/auth/LoginFlow.d.ts +27 -0
  29. package/dist/auth/LoginFlow.d.ts.map +1 -0
  30. package/dist/auth/LoginFlow.js +233 -0
  31. package/dist/auth/LoginFlow.js.map +1 -0
  32. package/dist/auth/LoginFlow.types.d.ts +123 -0
  33. package/dist/auth/LoginFlow.types.d.ts.map +1 -0
  34. package/dist/auth/LoginFlow.types.js +7 -0
  35. package/dist/auth/LoginFlow.types.js.map +1 -0
  36. package/dist/auth/SessionStore.d.ts +16 -0
  37. package/dist/auth/SessionStore.d.ts.map +1 -0
  38. package/dist/auth/SessionStore.js +8 -0
  39. package/dist/auth/SessionStore.js.map +1 -0
  40. package/dist/auth/index.d.ts +6 -0
  41. package/dist/auth/index.d.ts.map +1 -0
  42. package/dist/auth/index.js +6 -0
  43. package/dist/auth/index.js.map +1 -0
  44. package/dist/browser/BrowserFactory.d.ts +16 -0
  45. package/dist/browser/BrowserFactory.d.ts.map +1 -0
  46. package/dist/browser/BrowserFactory.js +209 -0
  47. package/dist/browser/BrowserFactory.js.map +1 -0
  48. package/dist/browser/BrowserSession.d.ts +15 -0
  49. package/dist/browser/BrowserSession.d.ts.map +1 -0
  50. package/dist/browser/BrowserSession.js +42 -0
  51. package/dist/browser/BrowserSession.js.map +1 -0
  52. package/dist/browser/PuppeteerLike.d.ts +45 -0
  53. package/dist/browser/PuppeteerLike.d.ts.map +1 -0
  54. package/dist/browser/PuppeteerLike.js +10 -0
  55. package/dist/browser/PuppeteerLike.js.map +1 -0
  56. package/dist/browser/RuntimeConfig.d.ts +82 -0
  57. package/dist/browser/RuntimeConfig.d.ts.map +1 -0
  58. package/dist/browser/RuntimeConfig.js +64 -0
  59. package/dist/browser/RuntimeConfig.js.map +1 -0
  60. package/dist/browser/index.d.ts +6 -0
  61. package/dist/browser/index.d.ts.map +1 -0
  62. package/dist/browser/index.js +6 -0
  63. package/dist/browser/index.js.map +1 -0
  64. package/dist/browser/profileValidation.d.ts +6 -0
  65. package/dist/browser/profileValidation.d.ts.map +1 -0
  66. package/dist/browser/profileValidation.js +59 -0
  67. package/dist/browser/profileValidation.js.map +1 -0
  68. package/dist/cli/run.d.ts +3 -0
  69. package/dist/cli/run.d.ts.map +1 -0
  70. package/dist/cli/run.js +103 -0
  71. package/dist/cli/run.js.map +1 -0
  72. package/dist/core/Actor.d.ts +54 -0
  73. package/dist/core/Actor.d.ts.map +1 -0
  74. package/dist/core/Actor.js +68 -0
  75. package/dist/core/Actor.js.map +1 -0
  76. package/dist/core/ActorContext.d.ts +32 -0
  77. package/dist/core/ActorContext.d.ts.map +1 -0
  78. package/dist/core/ActorContext.js +2 -0
  79. package/dist/core/ActorContext.js.map +1 -0
  80. package/dist/core/ActorRegistry.d.ts +8 -0
  81. package/dist/core/ActorRegistry.d.ts.map +1 -0
  82. package/dist/core/ActorRegistry.js +22 -0
  83. package/dist/core/ActorRegistry.js.map +1 -0
  84. package/dist/core/ActorRunner.d.ts +57 -0
  85. package/dist/core/ActorRunner.d.ts.map +1 -0
  86. package/dist/core/ActorRunner.js +157 -0
  87. package/dist/core/ActorRunner.js.map +1 -0
  88. package/dist/core/defineActor.d.ts +3 -0
  89. package/dist/core/defineActor.d.ts.map +1 -0
  90. package/dist/core/defineActor.js +4 -0
  91. package/dist/core/defineActor.js.map +1 -0
  92. package/dist/core/index.d.ts +6 -0
  93. package/dist/core/index.d.ts.map +1 -0
  94. package/dist/core/index.js +6 -0
  95. package/dist/core/index.js.map +1 -0
  96. package/dist/errors/AuthError.d.ts +5 -0
  97. package/dist/errors/AuthError.d.ts.map +1 -0
  98. package/dist/errors/AuthError.js +7 -0
  99. package/dist/errors/AuthError.js.map +1 -0
  100. package/dist/errors/AutomationError.d.ts +17 -0
  101. package/dist/errors/AutomationError.d.ts.map +1 -0
  102. package/dist/errors/AutomationError.js +17 -0
  103. package/dist/errors/AutomationError.js.map +1 -0
  104. package/dist/errors/ConfigError.d.ts +5 -0
  105. package/dist/errors/ConfigError.d.ts.map +1 -0
  106. package/dist/errors/ConfigError.js +7 -0
  107. package/dist/errors/ConfigError.js.map +1 -0
  108. package/dist/errors/ExtractionError.d.ts +5 -0
  109. package/dist/errors/ExtractionError.d.ts.map +1 -0
  110. package/dist/errors/ExtractionError.js +7 -0
  111. package/dist/errors/ExtractionError.js.map +1 -0
  112. package/dist/errors/NavigationError.d.ts +5 -0
  113. package/dist/errors/NavigationError.d.ts.map +1 -0
  114. package/dist/errors/NavigationError.js +7 -0
  115. package/dist/errors/NavigationError.js.map +1 -0
  116. package/dist/errors/SelectorError.d.ts +6 -0
  117. package/dist/errors/SelectorError.d.ts.map +1 -0
  118. package/dist/errors/SelectorError.js +9 -0
  119. package/dist/errors/SelectorError.js.map +1 -0
  120. package/dist/errors/index.d.ts +7 -0
  121. package/dist/errors/index.d.ts.map +1 -0
  122. package/dist/errors/index.js +7 -0
  123. package/dist/errors/index.js.map +1 -0
  124. package/dist/extraction/Extractor.d.ts +16 -0
  125. package/dist/extraction/Extractor.d.ts.map +1 -0
  126. package/dist/extraction/Extractor.js +54 -0
  127. package/dist/extraction/Extractor.js.map +1 -0
  128. package/dist/extraction/Pagination.d.ts +16 -0
  129. package/dist/extraction/Pagination.d.ts.map +1 -0
  130. package/dist/extraction/Pagination.js +36 -0
  131. package/dist/extraction/Pagination.js.map +1 -0
  132. package/dist/extraction/index.d.ts +3 -0
  133. package/dist/extraction/index.d.ts.map +1 -0
  134. package/dist/extraction/index.js +3 -0
  135. package/dist/extraction/index.js.map +1 -0
  136. package/dist/index.d.ts +10 -0
  137. package/dist/index.d.ts.map +1 -0
  138. package/dist/index.js +10 -0
  139. package/dist/index.js.map +1 -0
  140. package/dist/interaction/FieldClearer.d.ts +7 -0
  141. package/dist/interaction/FieldClearer.d.ts.map +1 -0
  142. package/dist/interaction/FieldClearer.js +53 -0
  143. package/dist/interaction/FieldClearer.js.map +1 -0
  144. package/dist/interaction/Forms.d.ts +13 -0
  145. package/dist/interaction/Forms.d.ts.map +1 -0
  146. package/dist/interaction/Forms.js +22 -0
  147. package/dist/interaction/Forms.js.map +1 -0
  148. package/dist/interaction/GhostCursorAdapter.d.ts +27 -0
  149. package/dist/interaction/GhostCursorAdapter.d.ts.map +1 -0
  150. package/dist/interaction/GhostCursorAdapter.js +51 -0
  151. package/dist/interaction/GhostCursorAdapter.js.map +1 -0
  152. package/dist/interaction/HumanInteractor.d.ts +29 -0
  153. package/dist/interaction/HumanInteractor.d.ts.map +1 -0
  154. package/dist/interaction/HumanInteractor.js +2 -0
  155. package/dist/interaction/HumanInteractor.js.map +1 -0
  156. package/dist/interaction/HumanTyping.d.ts +43 -0
  157. package/dist/interaction/HumanTyping.d.ts.map +1 -0
  158. package/dist/interaction/HumanTyping.js +85 -0
  159. package/dist/interaction/HumanTyping.js.map +1 -0
  160. package/dist/interaction/NativePuppeteerInteractor.d.ts +20 -0
  161. package/dist/interaction/NativePuppeteerInteractor.d.ts.map +1 -0
  162. package/dist/interaction/NativePuppeteerInteractor.js +47 -0
  163. package/dist/interaction/NativePuppeteerInteractor.js.map +1 -0
  164. package/dist/interaction/Navigation.d.ts +17 -0
  165. package/dist/interaction/Navigation.d.ts.map +1 -0
  166. package/dist/interaction/Navigation.js +28 -0
  167. package/dist/interaction/Navigation.js.map +1 -0
  168. package/dist/interaction/PageAdapter.d.ts +32 -0
  169. package/dist/interaction/PageAdapter.d.ts.map +1 -0
  170. package/dist/interaction/PageAdapter.js +62 -0
  171. package/dist/interaction/PageAdapter.js.map +1 -0
  172. package/dist/interaction/Waits.d.ts +3 -0
  173. package/dist/interaction/Waits.d.ts.map +1 -0
  174. package/dist/interaction/Waits.js +4 -0
  175. package/dist/interaction/Waits.js.map +1 -0
  176. package/dist/interaction/index.d.ts +10 -0
  177. package/dist/interaction/index.d.ts.map +1 -0
  178. package/dist/interaction/index.js +10 -0
  179. package/dist/interaction/index.js.map +1 -0
  180. package/dist/interaction/textToKeystrokeEvents.d.ts +13 -0
  181. package/dist/interaction/textToKeystrokeEvents.d.ts.map +1 -0
  182. package/dist/interaction/textToKeystrokeEvents.js +15 -0
  183. package/dist/interaction/textToKeystrokeEvents.js.map +1 -0
  184. package/dist/logging/ConsoleLogger.d.ts +12 -0
  185. package/dist/logging/ConsoleLogger.d.ts.map +1 -0
  186. package/dist/logging/ConsoleLogger.js +42 -0
  187. package/dist/logging/ConsoleLogger.js.map +1 -0
  188. package/dist/logging/Logger.d.ts +14 -0
  189. package/dist/logging/Logger.d.ts.map +1 -0
  190. package/dist/logging/Logger.js +2 -0
  191. package/dist/logging/Logger.js.map +1 -0
  192. package/dist/logging/MemoryLogger.d.ts +10 -0
  193. package/dist/logging/MemoryLogger.d.ts.map +1 -0
  194. package/dist/logging/MemoryLogger.js +28 -0
  195. package/dist/logging/MemoryLogger.js.map +1 -0
  196. package/dist/logging/NullLogger.d.ts +8 -0
  197. package/dist/logging/NullLogger.d.ts.map +1 -0
  198. package/dist/logging/NullLogger.js +7 -0
  199. package/dist/logging/NullLogger.js.map +1 -0
  200. package/dist/logging/index.d.ts +5 -0
  201. package/dist/logging/index.d.ts.map +1 -0
  202. package/dist/logging/index.js +5 -0
  203. package/dist/logging/index.js.map +1 -0
  204. package/dist/sites/example/example.actor.d.ts +6 -0
  205. package/dist/sites/example/example.actor.d.ts.map +1 -0
  206. package/dist/sites/example/example.actor.js +47 -0
  207. package/dist/sites/example/example.actor.js.map +1 -0
  208. package/dist/sites/example/example.selectors.d.ts +18 -0
  209. package/dist/sites/example/example.selectors.d.ts.map +1 -0
  210. package/dist/sites/example/example.selectors.js +18 -0
  211. package/dist/sites/example/example.selectors.js.map +1 -0
  212. package/dist/sites/example/example.types.d.ts +16 -0
  213. package/dist/sites/example/example.types.d.ts.map +1 -0
  214. package/dist/sites/example/example.types.js +2 -0
  215. package/dist/sites/example/example.types.js.map +1 -0
  216. package/dist/sites/example/index.d.ts +4 -0
  217. package/dist/sites/example/index.d.ts.map +1 -0
  218. package/dist/sites/example/index.js +4 -0
  219. package/dist/sites/example/index.js.map +1 -0
  220. package/dist/sites/index.d.ts +4 -0
  221. package/dist/sites/index.d.ts.map +1 -0
  222. package/dist/sites/index.js +4 -0
  223. package/dist/sites/index.js.map +1 -0
  224. package/dist/sites/myvistage-com/index.d.ts +4 -0
  225. package/dist/sites/myvistage-com/index.d.ts.map +1 -0
  226. package/dist/sites/myvistage-com/index.js +4 -0
  227. package/dist/sites/myvistage-com/index.js.map +1 -0
  228. package/dist/sites/myvistage-com/myvistage-com.actor.d.ts +6 -0
  229. package/dist/sites/myvistage-com/myvistage-com.actor.d.ts.map +1 -0
  230. package/dist/sites/myvistage-com/myvistage-com.actor.js +44 -0
  231. package/dist/sites/myvistage-com/myvistage-com.actor.js.map +1 -0
  232. package/dist/sites/myvistage-com/myvistage-com.selectors.d.ts +15 -0
  233. package/dist/sites/myvistage-com/myvistage-com.selectors.d.ts.map +1 -0
  234. package/dist/sites/myvistage-com/myvistage-com.selectors.js +15 -0
  235. package/dist/sites/myvistage-com/myvistage-com.selectors.js.map +1 -0
  236. package/dist/sites/myvistage-com/myvistage-com.types.d.ts +16 -0
  237. package/dist/sites/myvistage-com/myvistage-com.types.d.ts.map +1 -0
  238. package/dist/sites/myvistage-com/myvistage-com.types.js +2 -0
  239. package/dist/sites/myvistage-com/myvistage-com.types.js.map +1 -0
  240. package/dist/sites/upwork-com/index.d.ts +6 -0
  241. package/dist/sites/upwork-com/index.d.ts.map +1 -0
  242. package/dist/sites/upwork-com/index.js +6 -0
  243. package/dist/sites/upwork-com/index.js.map +1 -0
  244. package/dist/sites/upwork-com/upwork-com.actor.d.ts +6 -0
  245. package/dist/sites/upwork-com/upwork-com.actor.d.ts.map +1 -0
  246. package/dist/sites/upwork-com/upwork-com.actor.js +82 -0
  247. package/dist/sites/upwork-com/upwork-com.actor.js.map +1 -0
  248. package/dist/sites/upwork-com/upwork-com.runner.d.ts +2 -0
  249. package/dist/sites/upwork-com/upwork-com.runner.d.ts.map +1 -0
  250. package/dist/sites/upwork-com/upwork-com.runner.js +14 -0
  251. package/dist/sites/upwork-com/upwork-com.runner.js.map +1 -0
  252. package/dist/sites/upwork-com/upwork-com.selectors.d.ts +11 -0
  253. package/dist/sites/upwork-com/upwork-com.selectors.d.ts.map +1 -0
  254. package/dist/sites/upwork-com/upwork-com.selectors.js +11 -0
  255. package/dist/sites/upwork-com/upwork-com.selectors.js.map +1 -0
  256. package/dist/sites/upwork-com/upwork-com.types.d.ts +88 -0
  257. package/dist/sites/upwork-com/upwork-com.types.d.ts.map +1 -0
  258. package/dist/sites/upwork-com/upwork-com.types.js +63 -0
  259. package/dist/sites/upwork-com/upwork-com.types.js.map +1 -0
  260. package/dist/sites/upwork-com/upwork-com.util.d.ts +4 -0
  261. package/dist/sites/upwork-com/upwork-com.util.d.ts.map +1 -0
  262. package/dist/sites/upwork-com/upwork-com.util.js +43 -0
  263. package/dist/sites/upwork-com/upwork-com.util.js.map +1 -0
  264. package/dist/utils/delay.d.ts +2 -0
  265. package/dist/utils/delay.d.ts.map +1 -0
  266. package/dist/utils/delay.js +6 -0
  267. package/dist/utils/delay.js.map +1 -0
  268. package/dist/utils/index.d.ts +6 -0
  269. package/dist/utils/index.d.ts.map +1 -0
  270. package/dist/utils/index.js +6 -0
  271. package/dist/utils/index.js.map +1 -0
  272. package/dist/utils/invariant.d.ts +2 -0
  273. package/dist/utils/invariant.d.ts.map +1 -0
  274. package/dist/utils/invariant.js +7 -0
  275. package/dist/utils/invariant.js.map +1 -0
  276. package/dist/utils/redact.d.ts +6 -0
  277. package/dist/utils/redact.d.ts.map +1 -0
  278. package/dist/utils/redact.js +40 -0
  279. package/dist/utils/redact.js.map +1 -0
  280. package/dist/utils/retry.d.ts +8 -0
  281. package/dist/utils/retry.d.ts.map +1 -0
  282. package/dist/utils/retry.js +23 -0
  283. package/dist/utils/retry.js.map +1 -0
  284. package/dist/utils/url.d.ts +2 -0
  285. package/dist/utils/url.d.ts.map +1 -0
  286. package/dist/utils/url.js +9 -0
  287. package/dist/utils/url.js.map +1 -0
  288. package/package.json +39 -0
  289. package/src/auth/AuthStateDetector.ts +18 -0
  290. package/src/auth/CredentialsProvider.ts +48 -0
  291. package/src/auth/LoginFlow.ts +332 -0
  292. package/src/auth/LoginFlow.types.ts +141 -0
  293. package/src/auth/SessionStore.ts +21 -0
  294. package/src/auth/index.ts +5 -0
  295. package/src/browser/BrowserFactory.ts +253 -0
  296. package/src/browser/BrowserSession.ts +50 -0
  297. package/src/browser/PuppeteerLike.ts +65 -0
  298. package/src/browser/RuntimeConfig.ts +152 -0
  299. package/src/browser/index.ts +5 -0
  300. package/src/browser/profileValidation.ts +73 -0
  301. package/src/cli/run.ts +112 -0
  302. package/src/core/Actor.ts +167 -0
  303. package/src/core/ActorContext.ts +34 -0
  304. package/src/core/ActorRegistry.ts +26 -0
  305. package/src/core/ActorRunner.ts +240 -0
  306. package/src/core/defineActor.ts +5 -0
  307. package/src/core/index.ts +5 -0
  308. package/src/errors/AuthError.ts +7 -0
  309. package/src/errors/AutomationError.ts +26 -0
  310. package/src/errors/ConfigError.ts +7 -0
  311. package/src/errors/ExtractionError.ts +7 -0
  312. package/src/errors/NavigationError.ts +7 -0
  313. package/src/errors/SelectorError.ts +10 -0
  314. package/src/errors/index.ts +6 -0
  315. package/src/extraction/Extractor.ts +65 -0
  316. package/src/extraction/Pagination.ts +47 -0
  317. package/src/extraction/index.ts +2 -0
  318. package/src/index.ts +9 -0
  319. package/src/interaction/FieldClearer.ts +73 -0
  320. package/src/interaction/Forms.ts +27 -0
  321. package/src/interaction/GhostCursorAdapter.ts +79 -0
  322. package/src/interaction/HumanInteractor.ts +32 -0
  323. package/src/interaction/HumanTyping.ts +157 -0
  324. package/src/interaction/NativePuppeteerInteractor.ts +68 -0
  325. package/src/interaction/Navigation.ts +37 -0
  326. package/src/interaction/PageAdapter.ts +86 -0
  327. package/src/interaction/Waits.ts +5 -0
  328. package/src/interaction/index.ts +9 -0
  329. package/src/logging/ConsoleLogger.ts +44 -0
  330. package/src/logging/Logger.ts +15 -0
  331. package/src/logging/MemoryLogger.ts +34 -0
  332. package/src/logging/NullLogger.ts +8 -0
  333. package/src/logging/index.ts +4 -0
  334. package/src/sites/example/example.actor.ts +53 -0
  335. package/src/sites/example/example.selectors.ts +17 -0
  336. package/src/sites/example/example.types.ts +18 -0
  337. package/src/sites/example/index.ts +3 -0
  338. package/src/sites/index.ts +3 -0
  339. package/src/sites/myvistage-com/index.ts +3 -0
  340. package/src/sites/myvistage-com/login-action-list.json +349 -0
  341. package/src/sites/myvistage-com/myvistage-com.actor.ts +50 -0
  342. package/src/sites/myvistage-com/myvistage-com.selectors.ts +14 -0
  343. package/src/sites/myvistage-com/myvistage-com.types.ts +18 -0
  344. package/src/sites/myvistage-com/post-comment-action.json +81 -0
  345. package/src/sites/upwork-com/index.ts +6 -0
  346. package/src/sites/upwork-com/upwork-com.actor.ts +97 -0
  347. package/src/sites/upwork-com/upwork-com.runner.ts +17 -0
  348. package/src/sites/upwork-com/upwork-com.selectors.ts +10 -0
  349. package/src/sites/upwork-com/upwork-com.types.ts +102 -0
  350. package/src/sites/upwork-com/upwork-com.util.ts +41 -0
  351. package/src/utils/delay.ts +4 -0
  352. package/src/utils/index.ts +5 -0
  353. package/src/utils/invariant.ts +7 -0
  354. package/src/utils/redact.ts +53 -0
  355. package/src/utils/retry.ts +31 -0
  356. package/src/utils/url.ts +7 -0
  357. package/tests/fixtures/FakeCredentialsProvider.ts +12 -0
  358. package/tests/fixtures/FakeCursor.ts +48 -0
  359. package/tests/fixtures/FakePage.ts +266 -0
  360. package/tests/fixtures/makeContext.ts +76 -0
  361. package/tests/unit/auth/AuthStateDetector.test.ts +80 -0
  362. package/tests/unit/auth/LoginFlow.test.ts +296 -0
  363. package/tests/unit/browser/BrowserFactory.test.ts +370 -0
  364. package/tests/unit/core/ActorRunner.test.ts +370 -0
  365. package/tests/unit/core/defineActor.test.ts +112 -0
  366. package/tests/unit/extraction/Extractor.test.ts +48 -0
  367. package/tests/unit/extraction/Pagination.test.ts +54 -0
  368. package/tests/unit/interaction/FieldClearer.test.ts +29 -0
  369. package/tests/unit/interaction/Forms.test.ts +35 -0
  370. package/tests/unit/interaction/GhostCursorAdapter.test.ts +68 -0
  371. package/tests/unit/interaction/HumanTyping.test.ts +54 -0
  372. package/tests/unit/interaction/NativePuppeteerInteractor.test.ts +22 -0
  373. package/tests/unit/interaction/PageAdapter.test.ts +25 -0
  374. package/tests/unit/logging/redact.test.ts +36 -0
  375. package/tests/unit/sites/myvistage-com.actor.test.ts +19 -0
  376. package/tests/unit/sites/myvistage-com.login.test.ts +22 -0
  377. package/tests/unit/sites/myvistage-com.postComment.test.ts +70 -0
  378. package/tests/unit/sites/upwork-com.login.test.ts +52 -0
  379. package/tsconfig.build.json +9 -0
  380. package/tsconfig.json +22 -0
  381. package/vitest.config.ts +12 -0
@@ -0,0 +1,10 @@
1
+ import type { Logger, LogRecord } from './Logger.js';
2
+ export declare class MemoryLogger implements Logger {
3
+ readonly records: LogRecord[];
4
+ debug(message: string, meta?: Record<string, unknown>): void;
5
+ info(message: string, meta?: Record<string, unknown>): void;
6
+ warn(message: string, meta?: Record<string, unknown>): void;
7
+ error(message: string, meta?: Record<string, unknown>): void;
8
+ private write;
9
+ }
10
+ //# sourceMappingURL=MemoryLogger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MemoryLogger.d.ts","sourceRoot":"","sources":["../../src/logging/MemoryLogger.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAY,SAAS,EAAE,MAAM,aAAa,CAAC;AAE/D,qBAAa,YAAa,YAAW,MAAM;IACzC,QAAQ,CAAC,OAAO,EAAE,SAAS,EAAE,CAAM;IAEnC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI5D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI3D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI3D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI5D,OAAO,CAAC,KAAK;CAWd"}
@@ -0,0 +1,28 @@
1
+ import { redact } from '../utils/redact.js';
2
+ export class MemoryLogger {
3
+ records = [];
4
+ debug(message, meta) {
5
+ this.write('debug', message, meta);
6
+ }
7
+ info(message, meta) {
8
+ this.write('info', message, meta);
9
+ }
10
+ warn(message, meta) {
11
+ this.write('warn', message, meta);
12
+ }
13
+ error(message, meta) {
14
+ this.write('error', message, meta);
15
+ }
16
+ write(level, message, meta) {
17
+ const record = {
18
+ level,
19
+ message,
20
+ timestamp: new Date().toISOString()
21
+ };
22
+ if (meta !== undefined) {
23
+ record.meta = redact(meta);
24
+ }
25
+ this.records.push(record);
26
+ }
27
+ }
28
+ //# sourceMappingURL=MemoryLogger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MemoryLogger.js","sourceRoot":"","sources":["../../src/logging/MemoryLogger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAG5C,MAAM,OAAO,YAAY;IACd,OAAO,GAAgB,EAAE,CAAC;IAEnC,KAAK,CAAC,OAAe,EAAE,IAA8B;QACnD,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IACrC,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,IAA8B;QAClD,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IACpC,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,IAA8B;QAClD,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,IAA8B;QACnD,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IACrC,CAAC;IAEO,KAAK,CAAC,KAAe,EAAE,OAAe,EAAE,IAA8B;QAC5E,MAAM,MAAM,GAAc;YACxB,KAAK;YACL,OAAO;YACP,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC;QACF,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;CACF"}
@@ -0,0 +1,8 @@
1
+ import type { Logger } from './Logger.js';
2
+ export declare class NullLogger implements Logger {
3
+ debug(): void;
4
+ info(): void;
5
+ warn(): void;
6
+ error(): void;
7
+ }
8
+ //# sourceMappingURL=NullLogger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NullLogger.d.ts","sourceRoot":"","sources":["../../src/logging/NullLogger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,qBAAa,UAAW,YAAW,MAAM;IACvC,KAAK,IAAI,IAAI;IACb,IAAI,IAAI,IAAI;IACZ,IAAI,IAAI,IAAI;IACZ,KAAK,IAAI,IAAI;CACd"}
@@ -0,0 +1,7 @@
1
+ export class NullLogger {
2
+ debug() { }
3
+ info() { }
4
+ warn() { }
5
+ error() { }
6
+ }
7
+ //# sourceMappingURL=NullLogger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NullLogger.js","sourceRoot":"","sources":["../../src/logging/NullLogger.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,UAAU;IACrB,KAAK,KAAU,CAAC;IAChB,IAAI,KAAU,CAAC;IACf,IAAI,KAAU,CAAC;IACf,KAAK,KAAU,CAAC;CACjB"}
@@ -0,0 +1,5 @@
1
+ export * from './ConsoleLogger.js';
2
+ export * from './Logger.js';
3
+ export * from './MemoryLogger.js';
4
+ export * from './NullLogger.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/logging/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,5 @@
1
+ export * from './ConsoleLogger.js';
2
+ export * from './Logger.js';
3
+ export * from './MemoryLogger.js';
4
+ export * from './NullLogger.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/logging/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { DashboardRow, ScrapeDashboardInput, SubmitContactFormInput, SubmitContactFormOutput } from './example.types.js';
2
+ export declare const exampleActor: import("../../core/Actor.js").Actor<{
3
+ scrapeDashboard: (context: import("../../index.js").ActorContext, input?: ScrapeDashboardInput) => Promise<DashboardRow[]>;
4
+ submitContactForm: import("../../core/Actor.js").ActorTask<SubmitContactFormInput, SubmitContactFormOutput>;
5
+ }>;
6
+ //# sourceMappingURL=example.actor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"example.actor.d.ts","sourceRoot":"","sources":["../../../src/sites/example/example.actor.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,YAAY,EACZ,oBAAoB,EACpB,sBAAsB,EACtB,uBAAuB,EACxB,MAAM,oBAAoB,CAAC;AAE5B,eAAO,MAAM,YAAY;8EAmBmB,oBAAoB,KAAQ,OAAO,CAAC,YAAY,EAAE,CAAC;;EAsB7F,CAAC"}
@@ -0,0 +1,47 @@
1
+ import { defineLoginFlow } from '../../auth/LoginFlow.types.js';
2
+ import { defineActor } from '../../core/defineActor.js';
3
+ import { defineFormFillerTask } from '../../core/Actor.js';
4
+ import { exampleSelectors } from './example.selectors.js';
5
+ export const exampleActor = defineActor({
6
+ id: 'example',
7
+ baseUrl: 'https://example.com',
8
+ auth: defineLoginFlow({
9
+ loginUrl: '/login',
10
+ selectors: exampleSelectors.login,
11
+ credentials: { id: 'example' },
12
+ behavior: {
13
+ authCheckUrl: '/',
14
+ submitCausesNavigation: true,
15
+ loggedInTimeoutMs: 3_000,
16
+ clearFieldBeforeTyping: true,
17
+ typing: {
18
+ targetWordsPerMinute: 65,
19
+ intervalJitterMs: 18
20
+ }
21
+ }
22
+ }),
23
+ tasks: {
24
+ scrapeDashboard: async (context, input = {}) => {
25
+ await context.nav.goto('/dashboard');
26
+ const rows = await context.extract.textList(exampleSelectors.dashboardRows);
27
+ return rows.slice(0, input.limit ?? rows.length).map(text => ({ text }));
28
+ },
29
+ submitContactForm: defineFormFillerTask({
30
+ url: '/contact',
31
+ fields: [
32
+ { selector: exampleSelectors.contactForm.name, inputKey: 'name' },
33
+ { selector: exampleSelectors.contactForm.email, inputKey: 'email' },
34
+ { selector: exampleSelectors.contactForm.company, inputKey: 'company', required: false },
35
+ { selector: exampleSelectors.contactForm.message, inputKey: 'message' }
36
+ ],
37
+ submit: {
38
+ selector: exampleSelectors.contactForm.submit,
39
+ waitForNavigation: true
40
+ },
41
+ onComplete: (_context, input) => ({
42
+ submittedEmail: input.email
43
+ })
44
+ })
45
+ }
46
+ });
47
+ //# sourceMappingURL=example.actor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"example.actor.js","sourceRoot":"","sources":["../../../src/sites/example/example.actor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAQ1D,MAAM,CAAC,MAAM,YAAY,GAAG,WAAW,CAAC;IACtC,EAAE,EAAE,SAAS;IACb,OAAO,EAAE,qBAAqB;IAC9B,IAAI,EAAE,eAAe,CAAC;QACpB,QAAQ,EAAE,QAAQ;QAClB,SAAS,EAAE,gBAAgB,CAAC,KAAK;QACjC,WAAW,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE;QAC9B,QAAQ,EAAE;YACR,YAAY,EAAE,GAAG;YACjB,sBAAsB,EAAE,IAAI;YAC5B,iBAAiB,EAAE,KAAK;YACxB,sBAAsB,EAAE,IAAI;YAC5B,MAAM,EAAE;gBACN,oBAAoB,EAAE,EAAE;gBACxB,gBAAgB,EAAE,EAAE;aACrB;SACF;KACF,CAAC;IACF,KAAK,EAAE;QACL,eAAe,EAAE,KAAK,EAAE,OAAO,EAAE,QAA8B,EAAE,EAA2B,EAAE;YAC5F,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACrC,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;YAC5E,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAC3E,CAAC;QACD,iBAAiB,EAAE,oBAAoB,CAAkD;YACvF,GAAG,EAAE,UAAU;YACf,MAAM,EAAE;gBACN,EAAE,QAAQ,EAAE,gBAAgB,CAAC,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE;gBACjE,EAAE,QAAQ,EAAE,gBAAgB,CAAC,WAAW,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE;gBACnE,EAAE,QAAQ,EAAE,gBAAgB,CAAC,WAAW,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE;gBACxF,EAAE,QAAQ,EAAE,gBAAgB,CAAC,WAAW,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE;aACxE;YACD,MAAM,EAAE;gBACN,QAAQ,EAAE,gBAAgB,CAAC,WAAW,CAAC,MAAM;gBAC7C,iBAAiB,EAAE,IAAI;aACxB;YACD,UAAU,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;gBAChC,cAAc,EAAE,KAAK,CAAC,KAAK;aAC5B,CAAC;SACH,CAAC;KACH;CACF,CAAC,CAAC"}
@@ -0,0 +1,18 @@
1
+ export declare const exampleSelectors: {
2
+ readonly login: {
3
+ readonly username: "#email";
4
+ readonly password: "#password";
5
+ readonly submit: "button[type=\"submit\"]";
6
+ readonly loggedInSignal: "[data-testid=\"account-menu\"]";
7
+ readonly errorMessage: "[data-testid=\"login-error\"]";
8
+ };
9
+ readonly dashboardRows: "[data-testid=\"dashboard-row\"]";
10
+ readonly contactForm: {
11
+ readonly name: "#name";
12
+ readonly email: "#email";
13
+ readonly company: "#company";
14
+ readonly message: "#message";
15
+ readonly submit: "button[type=\"submit\"]";
16
+ };
17
+ };
18
+ //# sourceMappingURL=example.selectors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"example.selectors.d.ts","sourceRoot":"","sources":["../../../src/sites/example/example.selectors.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;CAgBnB,CAAC"}
@@ -0,0 +1,18 @@
1
+ export const exampleSelectors = {
2
+ login: {
3
+ username: '#email',
4
+ password: '#password',
5
+ submit: 'button[type="submit"]',
6
+ loggedInSignal: '[data-testid="account-menu"]',
7
+ errorMessage: '[data-testid="login-error"]'
8
+ },
9
+ dashboardRows: '[data-testid="dashboard-row"]',
10
+ contactForm: {
11
+ name: '#name',
12
+ email: '#email',
13
+ company: '#company',
14
+ message: '#message',
15
+ submit: 'button[type="submit"]'
16
+ }
17
+ };
18
+ //# sourceMappingURL=example.selectors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"example.selectors.js","sourceRoot":"","sources":["../../../src/sites/example/example.selectors.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,KAAK,EAAE;QACL,QAAQ,EAAE,QAAQ;QAClB,QAAQ,EAAE,WAAW;QACrB,MAAM,EAAE,uBAAuB;QAC/B,cAAc,EAAE,8BAA8B;QAC9C,YAAY,EAAE,6BAA6B;KAC5C;IACD,aAAa,EAAE,+BAA+B;IAC9C,WAAW,EAAE;QACX,IAAI,EAAE,OAAO;QACb,KAAK,EAAE,QAAQ;QACf,OAAO,EAAE,UAAU;QACnB,OAAO,EAAE,UAAU;QACnB,MAAM,EAAE,uBAAuB;KAChC;CACO,CAAC"}
@@ -0,0 +1,16 @@
1
+ export interface ScrapeDashboardInput {
2
+ limit?: number;
3
+ }
4
+ export interface DashboardRow {
5
+ text: string;
6
+ }
7
+ export interface SubmitContactFormInput extends Record<string, string | undefined> {
8
+ name: string;
9
+ email: string;
10
+ company?: string;
11
+ message: string;
12
+ }
13
+ export interface SubmitContactFormOutput {
14
+ submittedEmail: string;
15
+ }
16
+ //# sourceMappingURL=example.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"example.types.d.ts","sourceRoot":"","sources":["../../../src/sites/example/example.types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,sBAAuB,SAAQ,MAAM,CAAC,MAAM,EAAE,MAAM,GAAE,SAAS,CAAC;IAC/E,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,uBAAuB;IACtC,cAAc,EAAE,MAAM,CAAC;CACxB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=example.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"example.types.js","sourceRoot":"","sources":["../../../src/sites/example/example.types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ export * from './example.actor.js';
2
+ export * from './example.selectors.js';
3
+ export * from './example.types.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/sites/example/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from './example.actor.js';
2
+ export * from './example.selectors.js';
3
+ export * from './example.types.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/sites/example/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from './example/index.js';
2
+ export * from './myvistage-com/index.js';
3
+ export * from './upwork-com/index.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sites/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from './example/index.js';
2
+ export * from './myvistage-com/index.js';
3
+ export * from './upwork-com/index.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sites/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from './myvistage-com.actor.js';
2
+ export * from './myvistage-com.selectors.js';
3
+ export * from './myvistage-com.types.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/sites/myvistage-com/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0BAA0B,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from './myvistage-com.actor.js';
2
+ export * from './myvistage-com.selectors.js';
3
+ export * from './myvistage-com.types.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/sites/myvistage-com/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0BAA0B,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { PingInput, PingOutput, PostCommentInput, PostCommentOutput } from './myvistage-com.types.js';
2
+ export declare const myvistageComActor: import("../../core/Actor.js").Actor<{
3
+ ping: (_context: import("../../index.js").ActorContext, input?: PingInput) => Promise<PingOutput>;
4
+ postComment: import("../../core/Actor.js").ActorTask<PostCommentInput, PostCommentOutput>;
5
+ }>;
6
+ //# sourceMappingURL=myvistage-com.actor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"myvistage-com.actor.d.ts","sourceRoot":"","sources":["../../../src/sites/myvistage-com/myvistage-com.actor.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,SAAS,EACT,UAAU,EACV,gBAAgB,EAChB,iBAAiB,EAClB,MAAM,0BAA0B,CAAC;AAElC,eAAO,MAAM,iBAAiB;oEAmBI,SAAS,KAAQ,OAAO,CAAC,UAAU,CAAC;;EAmBpE,CAAC"}
@@ -0,0 +1,44 @@
1
+ import { defineLoginFlow } from '../../auth/LoginFlow.types.js';
2
+ import { defineFormFillerTask } from '../../core/Actor.js';
3
+ import { defineActor } from '../../core/defineActor.js';
4
+ import { myvistageComSelectors } from './myvistage-com.selectors.js';
5
+ export const myvistageComActor = defineActor({
6
+ id: 'myvistage-com',
7
+ baseUrl: 'https://myvistage.com',
8
+ auth: defineLoginFlow({
9
+ loginUrl: 'https://myvistage.com',
10
+ selectors: myvistageComSelectors.login,
11
+ credentials: { id: 'myvistage-com' },
12
+ behavior: {
13
+ authCheckUrl: '/',
14
+ submitCausesNavigation: true,
15
+ loggedInTimeoutMs: 5_000,
16
+ errorTimeoutMs: 1_500,
17
+ typing: {
18
+ targetWordsPerMinute: 65,
19
+ intervalJitterMs: 18
20
+ }
21
+ }
22
+ }),
23
+ tasks: {
24
+ ping: async (_context, input = {}) => ({
25
+ ok: true,
26
+ echo: input.message ?? null
27
+ }),
28
+ postComment: defineFormFillerTask({
29
+ url: '/?status/151341-151341-1779377493/',
30
+ fields: [
31
+ { selector: myvistageComSelectors.postComment.comment, inputKey: 'comment' },
32
+ { selector: myvistageComSelectors.postComment.subject, inputKey: 'subject', required: false }
33
+ ],
34
+ submit: {
35
+ selector: myvistageComSelectors.postComment.submit
36
+ },
37
+ onComplete: (_context, input) => ({
38
+ submittedComment: input.comment,
39
+ submittedSubject: input.subject ?? null
40
+ })
41
+ })
42
+ }
43
+ });
44
+ //# sourceMappingURL=myvistage-com.actor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"myvistage-com.actor.js","sourceRoot":"","sources":["../../../src/sites/myvistage-com/myvistage-com.actor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAQrE,MAAM,CAAC,MAAM,iBAAiB,GAAG,WAAW,CAAC;IAC3C,EAAE,EAAE,eAAe;IACnB,OAAO,EAAE,uBAAuB;IAChC,IAAI,EAAE,eAAe,CAAC;QACpB,QAAQ,EAAE,uBAAuB;QACjC,SAAS,EAAE,qBAAqB,CAAC,KAAK;QACtC,WAAW,EAAE,EAAE,EAAE,EAAE,eAAe,EAAE;QACpC,QAAQ,EAAE;YACR,YAAY,EAAE,GAAG;YACjB,sBAAsB,EAAE,IAAI;YAC5B,iBAAiB,EAAE,KAAK;YACxB,cAAc,EAAE,KAAK;YACrB,MAAM,EAAE;gBACN,oBAAoB,EAAE,EAAE;gBACxB,gBAAgB,EAAE,EAAE;aACrB;SACF;KACF,CAAC;IACF,KAAK,EAAE;QACL,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAmB,EAAE,EAAuB,EAAE,CAAC,CAAC;YACrE,EAAE,EAAE,IAAI;YACR,IAAI,EAAE,KAAK,CAAC,OAAO,IAAI,IAAI;SAC5B,CAAC;QACF,WAAW,EAAE,oBAAoB,CAAsC;YACrE,GAAG,EAAE,oCAAoC;YACzC,MAAM,EAAE;gBACN,EAAE,QAAQ,EAAE,qBAAqB,CAAC,WAAW,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE;gBAC5E,EAAE,QAAQ,EAAE,qBAAqB,CAAC,WAAW,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE;aAC9F;YACD,MAAM,EAAE;gBACN,QAAQ,EAAE,qBAAqB,CAAC,WAAW,CAAC,MAAM;aACnD;YACD,UAAU,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;gBAChC,gBAAgB,EAAE,KAAK,CAAC,OAAO;gBAC/B,gBAAgB,EAAE,KAAK,CAAC,OAAO,IAAI,IAAI;aACxC,CAAC;SACH,CAAC;KACH;CACF,CAAC,CAAC"}
@@ -0,0 +1,15 @@
1
+ export declare const myvistageComSelectors: {
2
+ readonly login: {
3
+ readonly username: "[name=\"username\"]";
4
+ readonly password: "[name=\"password\"]";
5
+ readonly submit: "#form-login button[type=\"submit\"]";
6
+ readonly loggedInSignal: "a[href*=\"logout\"], a[href*=\"signout\"]";
7
+ readonly errorMessage: "#mv3login [role=\"alert\"], #mv3login .error, #mv3login .woocommerce-error";
8
+ };
9
+ readonly postComment: {
10
+ readonly comment: "textarea[name=\"comment\"]";
11
+ readonly subject: "input[name=\"subject\"]";
12
+ readonly submit: "div:nth-of-type(2) > div:nth-of-type(2) > div:nth-of-type(1) > button:nth-of-type(2)";
13
+ };
14
+ };
15
+ //# sourceMappingURL=myvistage-com.selectors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"myvistage-com.selectors.d.ts","sourceRoot":"","sources":["../../../src/sites/myvistage-com/myvistage-com.selectors.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;CAaxB,CAAC"}
@@ -0,0 +1,15 @@
1
+ export const myvistageComSelectors = {
2
+ login: {
3
+ username: '[name="username"]',
4
+ password: '[name="password"]',
5
+ submit: '#form-login button[type="submit"]',
6
+ loggedInSignal: 'a[href*="logout"], a[href*="signout"]',
7
+ errorMessage: '#mv3login [role="alert"], #mv3login .error, #mv3login .woocommerce-error'
8
+ },
9
+ postComment: {
10
+ comment: 'textarea[name="comment"]',
11
+ subject: 'input[name="subject"]',
12
+ submit: 'div:nth-of-type(2) > div:nth-of-type(2) > div:nth-of-type(1) > button:nth-of-type(2)'
13
+ }
14
+ };
15
+ //# sourceMappingURL=myvistage-com.selectors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"myvistage-com.selectors.js","sourceRoot":"","sources":["../../../src/sites/myvistage-com/myvistage-com.selectors.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,KAAK,EAAE;QACL,QAAQ,EAAE,mBAAmB;QAC7B,QAAQ,EAAE,mBAAmB;QAC7B,MAAM,EAAE,mCAAmC;QAC3C,cAAc,EAAE,uCAAuC;QACvD,YAAY,EAAE,0EAA0E;KACzF;IACD,WAAW,EAAE;QACX,OAAO,EAAE,0BAA0B;QACnC,OAAO,EAAE,uBAAuB;QAChC,MAAM,EAAE,sFAAsF;KAC/F;CACO,CAAC"}
@@ -0,0 +1,16 @@
1
+ export interface PingInput {
2
+ message?: string;
3
+ }
4
+ export interface PingOutput {
5
+ ok: true;
6
+ echo: string | null;
7
+ }
8
+ export interface PostCommentInput extends Record<string, string | undefined> {
9
+ comment: string;
10
+ subject?: string;
11
+ }
12
+ export interface PostCommentOutput {
13
+ submittedComment: string;
14
+ submittedSubject: string | null;
15
+ }
16
+ //# sourceMappingURL=myvistage-com.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"myvistage-com.types.d.ts","sourceRoot":"","sources":["../../../src/sites/myvistage-com/myvistage-com.types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,IAAI,CAAC;IACT,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB;AAED,MAAM,WAAW,gBAAiB,SAAQ,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1E,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=myvistage-com.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"myvistage-com.types.js","sourceRoot":"","sources":["../../../src/sites/myvistage-com/myvistage-com.types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,6 @@
1
+ export * from './upwork-com.actor.js';
2
+ export * from './upwork-com.selectors.js';
3
+ export * from './upwork-com.types.js';
4
+ export { parseRate } from "./upwork-com.util.js";
5
+ export { buildSearchParams } from "./upwork-com.util.js";
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/sites/upwork-com/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,OAAO,EAAC,SAAS,EAAC,MAAM,sBAAsB,CAAC;AAE/C,OAAO,EAAC,iBAAiB,EAAC,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,6 @@
1
+ export * from './upwork-com.actor.js';
2
+ export * from './upwork-com.selectors.js';
3
+ export * from './upwork-com.types.js';
4
+ export { parseRate } from "./upwork-com.util.js";
5
+ export { buildSearchParams } from "./upwork-com.util.js";
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/sites/upwork-com/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,OAAO,EAAC,SAAS,EAAC,MAAM,sBAAsB,CAAC;AAE/C,OAAO,EAAC,iBAAiB,EAAC,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { UpworkApplyToJobInput, UpworkApplyToJobResult, UpworkJobSearchFields } from './upwork-com.types.js';
2
+ export declare const upworkComActor: import("../../index.js").Actor<{
3
+ searchJobs: (context: import("../../index.js").ActorContext, input?: UpworkJobSearchFields) => Promise<any>;
4
+ applyToJob: (_context: import("../../index.js").ActorContext, input: UpworkApplyToJobInput) => Promise<UpworkApplyToJobResult>;
5
+ }>;
6
+ //# sourceMappingURL=upwork-com.actor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upwork-com.actor.d.ts","sourceRoot":"","sources":["../../../src/sites/upwork-com/upwork-com.actor.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,qBAAqB,EACrB,sBAAsB,EACtB,qBAAqB,EAEtB,MAAM,uBAAuB,CAAC;AAG/B,eAAO,MAAM,cAAc;yEAkDY,qBAAqB,KAAQ,OAAO,CAAC,GAAG,CAAC;yEAYxC,qBAAqB,KAAG,OAAO,CAAC,sBAAsB,CAAC;EAiB7F,CAAC"}
@@ -0,0 +1,82 @@
1
+ import { defineLoginFlow } from '../../auth/LoginFlow.types.js';
2
+ import { defineActor } from '../../core/defineActor.js';
3
+ import { upworkComSelectors } from './upwork-com.selectors.js';
4
+ import { parseRate } from "./upwork-com.util.js";
5
+ export const upworkComActor = defineActor({
6
+ id: 'upwork-com',
7
+ baseUrl: 'https://upwork.com',
8
+ auth: defineLoginFlow({
9
+ loginUrl: 'https://www.upwork.com/ab/account-security/login',
10
+ selectors: {
11
+ loggedInSignal: upworkComSelectors.login.loggedInSignal,
12
+ errorMessage: upworkComSelectors.login.errorMessage
13
+ },
14
+ credentials: { id: 'upwork' },
15
+ behavior: {
16
+ authCheckUrl: '/',
17
+ loggedInTimeoutMs: 5_000,
18
+ errorTimeoutMs: 1_500,
19
+ typing: {
20
+ targetWordsPerMinute: 65,
21
+ intervalJitterMs: 18
22
+ }
23
+ },
24
+ steps: [
25
+ {
26
+ type: 'fill',
27
+ name: 'username',
28
+ selector: upworkComSelectors.login.username,
29
+ credential: 'username'
30
+ },
31
+ {
32
+ type: 'click',
33
+ name: 'continue to password',
34
+ selector: upworkComSelectors.login.continueToPassword,
35
+ waitForSelector: upworkComSelectors.login.password,
36
+ waitForSelectorTimeoutMs: 5_000
37
+ },
38
+ {
39
+ type: 'fill',
40
+ name: 'password',
41
+ selector: upworkComSelectors.login.password,
42
+ credential: 'password'
43
+ },
44
+ {
45
+ type: 'click',
46
+ name: 'submit password',
47
+ selector: upworkComSelectors.login.submit,
48
+ submit: true,
49
+ waitForNavigation: true,
50
+ checkForError: false
51
+ }
52
+ ]
53
+ }),
54
+ tasks: {
55
+ searchJobs: async (context, input = {}) => {
56
+ const path = '/nx/s/universal-search/jobs?client_hires=1-9,10-&payment_verified=1&q=%27rancher%27%20or%20%27terraform%27%20or%20%27gitops%27%20or%20%27azure%27%20or%20%27microsoft%20azure%27%20or%20%27cloud%20architect%27%20or%20%27ai%20architect%27%20or%20%27forward%20deployed%20engineer%27%20or%20%27aws%27%20or%20%27aks%27%20or%20%27eks%27%20or%20%27gke%27%20or%20%27cloud%20engineer%27%20or%20devops%20or%20kuberentes%20or%20%27platform%20engineer%27%20or%20%27infrastructure%20engineer%27%20or%20"google%20cloud%20platform"%20or%20"GCP"%20or%20"langsmith"%20or%20"langgraph"%20or%20"gemini%20enterprise"&sort=recency&user_location_match=1';
57
+ await context.nav.goto(path, {});
58
+ console.log(context.page.raw());
59
+ // Get by classname class="jobs-main-panel - get all children of article type
60
+ // loop through each. Check
61
+ //
62
+ //
63
+ },
64
+ applyToJob: async (_context, input) => {
65
+ const coverLetter = input.coverLetter.trim();
66
+ if (coverLetter.length === 0) {
67
+ throw new Error('coverLetter must be a non-empty string.');
68
+ }
69
+ const rate = parseRate(input.rate);
70
+ if (!Number.isFinite(rate) || rate <= 0) {
71
+ throw new Error('rate must be a positive number.');
72
+ }
73
+ return {
74
+ coverLetter,
75
+ rate
76
+ };
77
+ }
78
+ }
79
+ });
80
+ const likeScript = `reactions.action_reactions(this, 1632181); `;
81
+ const commentScript = `activity.comment_save(1630927, this);`;
82
+ //# sourceMappingURL=upwork-com.actor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upwork-com.actor.js","sourceRoot":"","sources":["../../../src/sites/upwork-com/upwork-com.actor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAC,WAAW,EAAC,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAC,kBAAkB,EAAC,MAAM,2BAA2B,CAAC;AAO7D,OAAO,EAAoB,SAAS,EAAC,MAAM,sBAAsB,CAAC;AAElE,MAAM,CAAC,MAAM,cAAc,GAAG,WAAW,CAAC;IACxC,EAAE,EAAE,YAAY;IAChB,OAAO,EAAE,oBAAoB;IAC7B,IAAI,EAAE,eAAe,CAAC;QACpB,QAAQ,EAAE,kDAAkD;QAC5D,SAAS,EAAE;YACT,cAAc,EAAE,kBAAkB,CAAC,KAAK,CAAC,cAAc;YACvD,YAAY,EAAE,kBAAkB,CAAC,KAAK,CAAC,YAAY;SACpD;QACD,WAAW,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE;QAC7B,QAAQ,EAAE;YACR,YAAY,EAAE,GAAG;YACjB,iBAAiB,EAAE,KAAK;YACxB,cAAc,EAAE,KAAK;YACrB,MAAM,EAAE;gBACN,oBAAoB,EAAE,EAAE;gBACxB,gBAAgB,EAAE,EAAE;aACrB;SACF;QACD,KAAK,EAAE;YACL;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,UAAU;gBAChB,QAAQ,EAAE,kBAAkB,CAAC,KAAK,CAAC,QAAQ;gBAC3C,UAAU,EAAE,UAAU;aACvB;YACD;gBACE,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,sBAAsB;gBAC5B,QAAQ,EAAE,kBAAkB,CAAC,KAAK,CAAC,kBAAkB;gBACrD,eAAe,EAAE,kBAAkB,CAAC,KAAK,CAAC,QAAQ;gBAClD,wBAAwB,EAAE,KAAK;aAChC;YACD;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,UAAU;gBAChB,QAAQ,EAAE,kBAAkB,CAAC,KAAK,CAAC,QAAQ;gBAC3C,UAAU,EAAE,UAAU;aACvB;YACD;gBACE,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,iBAAiB;gBACvB,QAAQ,EAAE,kBAAkB,CAAC,KAAK,CAAC,MAAM;gBACzC,MAAM,EAAE,IAAI;gBACZ,iBAAiB,EAAE,IAAI;gBACvB,aAAa,EAAE,KAAK;aACrB;SACF;KACF,CAAC;IACF,KAAK,EAAE;QACL,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,QAA+B,EAAE,EAAgB,EAAE;YAC7E,MAAM,IAAI,GAAG,wnBAAwnB,CAAC;YAEtoB,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAEjC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;YAEhC,6EAA6E;YAC7E,2BAA2B;YACzB,EAAE;YACJ,EAAE;QACJ,CAAC;QACD,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,KAA4B,EAAmC,EAAE;YAC5F,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;YAC7C,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC7B,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;YAC7D,CAAC;YAED,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACnC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC;gBACxC,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;YACrD,CAAC;YAED,OAAO;gBACL,WAAW;gBACX,IAAI;aACL,CAAC;QACJ,CAAC;KACF;CACF,CAAC,CAAC;AAGH,MAAM,UAAU,GAAG,6CAA6C,CAAA;AAChE,MAAM,aAAa,GAAG,uCAAuC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=upwork-com.runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upwork-com.runner.d.ts","sourceRoot":"","sources":["../../../src/sites/upwork-com/upwork-com.runner.ts"],"names":[],"mappings":""}
@@ -0,0 +1,14 @@
1
+ import { ActorRunner } from "../../core/index.js";
2
+ import { upworkComActor } from "./upwork-com.actor.js";
3
+ const runner = new ActorRunner({
4
+ config: {
5
+ browser: {
6
+ mode: 'remote-debugging',
7
+ }
8
+ }
9
+ });
10
+ const run = async () => {
11
+ await runner.run(upworkComActor, 'searchJobs', {});
12
+ };
13
+ run().catch(e => console.error(e)).then(r => console.log(r));
14
+ //# sourceMappingURL=upwork-com.runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upwork-com.runner.js","sourceRoot":"","sources":["../../../src/sites/upwork-com/upwork-com.runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAC,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAC,cAAc,EAAC,MAAM,uBAAuB,CAAC;AAErD,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC;IAC3B,MAAM,EAAE;QACJ,OAAO,EAAE;YACL,IAAI,EAAE,kBAAkB;SAC3B;KACJ;CACJ,CAAC,CAAC;AAGH,MAAM,GAAG,GAAG,KAAK,IAAI,EAAE;IACnB,MAAM,MAAM,CAAC,GAAG,CAAC,cAAc,EAAE,YAAY,EAAE,EAAS,CAAC,CAAA;AAC7D,CAAC,CAAA;AAED,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAA,EAAE,CAAA,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA,EAAE,CAAA,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA"}
@@ -0,0 +1,11 @@
1
+ export declare const upworkComSelectors: {
2
+ readonly login: {
3
+ readonly username: "#login_username";
4
+ readonly password: "#login_password";
5
+ readonly continueToPassword: "#login_password_continue";
6
+ readonly submit: "#login_control_continue";
7
+ readonly loggedInSignal: "[data-test=\"nav-user-dropdown\"]";
8
+ readonly errorMessage: "#login_error";
9
+ };
10
+ };
11
+ //# sourceMappingURL=upwork-com.selectors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upwork-com.selectors.d.ts","sourceRoot":"","sources":["../../../src/sites/upwork-com/upwork-com.selectors.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB;;;;;;;;;CASrB,CAAC"}
@@ -0,0 +1,11 @@
1
+ export const upworkComSelectors = {
2
+ login: {
3
+ username: '#login_username',
4
+ password: '#login_password',
5
+ continueToPassword: '#login_password_continue',
6
+ submit: '#login_control_continue',
7
+ loggedInSignal: '[data-test="nav-user-dropdown"]',
8
+ errorMessage: '#login_error'
9
+ }
10
+ };
11
+ //# sourceMappingURL=upwork-com.selectors.js.map