@epsilon-asi/actors 0.0.46 → 0.0.48
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/sites/upwork-com/upwork-com.actor.d.ts.map +1 -1
- package/dist/sites/upwork-com/upwork-com.actor.js +27 -3
- package/dist/sites/upwork-com/upwork-com.actor.js.map +1 -1
- package/package.json +1 -1
- package/src/core/ActorContext.ts +1 -1
- package/src/sites/upwork-com/upwork-com.actor.ts +26 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upwork-com.actor.d.ts","sourceRoot":"","sources":["../../../src/sites/upwork-com/upwork-com.actor.ts"],"names":[],"mappings":"AAGA,OAAO,EACH,qBAAqB,EACrB,sBAAsB,EACtB,qBAAqB,EACrB,iBAAiB,EACpB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EAA2B,gBAAgB,EAAC,MAAM,4BAA4B,CAAC;AAEtF,OAAO,EAE2B,qBAAqB,EACnD,uBAAuB,EAC1B,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAA4B,gBAAgB,EAAC,MAAM,2BAA2B,CAAC;AAEtF,eAAO,MAAM,cAAc;;
|
|
1
|
+
{"version":3,"file":"upwork-com.actor.d.ts","sourceRoot":"","sources":["../../../src/sites/upwork-com/upwork-com.actor.ts"],"names":[],"mappings":"AAGA,OAAO,EACH,qBAAqB,EACrB,sBAAsB,EACtB,qBAAqB,EACrB,iBAAiB,EACpB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EAA2B,gBAAgB,EAAC,MAAM,4BAA4B,CAAC;AAEtF,OAAO,EAE2B,qBAAqB,EACnD,uBAAuB,EAC1B,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAA4B,gBAAgB,EAAC,MAAM,2BAA2B,CAAC;AAEtF,eAAO,MAAM,cAAc;;yEA0DgB,qBAAqB,KAAQ,OAAO,CAAC,gBAAgB,EAAE,CAAC;qEAY3D,iBAAiB,KAAG,OAAO,CAAC;QACxD,UAAU,EAAE,gBAAgB,CAAC;QAC7B,YAAY,EAAE,uBAAuB,CAAA;KACxC,CAAC;yEAmBkC,qBAAqB,GAAG,qBAAqB,KAAG,OAAO,CAAC,sBAAsB,CAAC;EAwCzH,CAAC"}
|
|
@@ -56,41 +56,65 @@ export const upworkComActor = defineActor({
|
|
|
56
56
|
}),
|
|
57
57
|
tasks: {
|
|
58
58
|
test: async (context, input) => {
|
|
59
|
+
console.log('starting test task');
|
|
59
60
|
//@ts-ignore
|
|
60
61
|
await context.native.fileDialogs.selectFile(process.env.TEST);
|
|
62
|
+
console.log('moving mouse in test task');
|
|
61
63
|
await context.native.mouse.moveTo({ x: 100, y: 200 });
|
|
64
|
+
console.log('finished test task');
|
|
62
65
|
},
|
|
63
66
|
searchJobs: async (context, input = {}) => {
|
|
67
|
+
console.log('starting job search task');
|
|
64
68
|
const path = '/nx/s/universal-search/jobs?category2_uid=531770282580668420,531770282580668419,531770282580668418&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';
|
|
69
|
+
console.log('navigating to jobs search page');
|
|
65
70
|
await context.nav.goto(path, {});
|
|
66
|
-
|
|
71
|
+
console.log('parsing jobs search results');
|
|
72
|
+
const results = await parseUpworkSearchResults(context.session.page);
|
|
73
|
+
console.log('finished job search task');
|
|
74
|
+
return results;
|
|
67
75
|
},
|
|
68
76
|
getJob: async (_context, input) => {
|
|
69
|
-
|
|
77
|
+
console.log('starting get job task');
|
|
78
|
+
console.log('opening job details page');
|
|
79
|
+
await _context.nav.goto(`/jobs/~02${input.jobId}/`);
|
|
80
|
+
console.log('parsing job details content');
|
|
70
81
|
const jobDetails = parseUpworkJobDetailsPage(await _context.session.page.content());
|
|
71
|
-
|
|
82
|
+
console.log('opening job application page');
|
|
83
|
+
await _context.nav.goto(`/nx/proposals/job/~02${input.jobId}/apply/`);
|
|
84
|
+
console.log('parsing proposal questions');
|
|
72
85
|
const jobQuestions = await parseUpworkProposalQuestions(_context.session.page);
|
|
86
|
+
console.log('finished get job task');
|
|
73
87
|
return {
|
|
74
88
|
jobDetails,
|
|
75
89
|
jobQuestions
|
|
76
90
|
};
|
|
77
91
|
},
|
|
78
92
|
applyToJob: async (_context, input) => {
|
|
93
|
+
console.log('starting apply to job task');
|
|
94
|
+
console.log('opening apply page');
|
|
79
95
|
await _context.nav.goto(`/nx/proposals/job/~02${input.jobId}/apply/`);
|
|
96
|
+
console.log('opening agency selector');
|
|
80
97
|
await _context.cursor.move('.up-fe-agency-member-selector > [data-test="dropdown-toggle"]');
|
|
81
98
|
await _context.cursor.click('.up-fe-agency-member-selector > [data-test="dropdown-toggle"]');
|
|
99
|
+
console.log('selecting agency option');
|
|
82
100
|
await _context.cursor.move('li[role="option"][tabindex="0"]');
|
|
83
101
|
await _context.cursor.click('li[role="option"][tabindex="0"]');
|
|
102
|
+
console.log('opening contractor selector');
|
|
84
103
|
await _context.cursor.move('.up-fe-contractor-selector > [data-test="dropdown-toggle"]');
|
|
85
104
|
await _context.cursor.click('.up-fe-contractor-selector > [data-test="dropdown-toggle"]');
|
|
105
|
+
console.log('selecting contractor option');
|
|
86
106
|
await _context.cursor.move('li[role="option"][tabindex="0"]');
|
|
87
107
|
await _context.cursor.click('li[role="option"][tabindex="0"]');
|
|
108
|
+
console.log('scrolling to rate increase selector');
|
|
88
109
|
await _context.cursor.scrollIntoView('[data-test="sri-form-card"] > [data-test="dropdown-toggle"] > [aria-label="How often do you want a rate increase?"]');
|
|
110
|
+
console.log('opening rate increase selector');
|
|
89
111
|
await _context.cursor.move('[data-test="sri-form-card"] > [data-test="dropdown-toggle"] > [aria-label="How often do you want a rate increase?"]');
|
|
90
112
|
await _context.cursor.click('[data-test="sri-form-card"] > [data-test="dropdown-toggle"] > [aria-label="How often do you want a rate increase?"]');
|
|
91
113
|
await _context.cursor.move('li[role="option"][tabindex="0"]');
|
|
92
114
|
await _context.cursor.click('li[role="option"][tabindex="0"]');
|
|
115
|
+
console.log('filling proposal answers');
|
|
93
116
|
await fillUpworkProposalQuestions(_context.session.page, input.answers);
|
|
117
|
+
console.log('building apply result payload');
|
|
94
118
|
return {
|
|
95
119
|
coverLetter: input.answers.coverLetter ?? '',
|
|
96
120
|
rate: parseRate(input.rate)
|
|
@@ -1 +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,EAAC,SAAS,EAAC,MAAM,sBAAsB,CAAC;AAE/C,OAAO,EAAC,wBAAwB,EAAmB,MAAM,4BAA4B,CAAC;AAEtF,OAAO,EACH,2BAA2B,EAC3B,4BAA4B,EAE/B,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAC,yBAAyB,EAAmB,MAAM,2BAA2B,CAAC;AAEtF,MAAM,CAAC,MAAM,cAAc,GAAG,WAAW,CAAC;IACtC,EAAE,EAAE,YAAY;IAChB,OAAO,EAAE,oBAAoB;IAC7B,IAAI,EAAE,eAAe,CAAC;QAClB,QAAQ,EAAE,yBAAyB;QACnC,SAAS,EAAE;YACP,cAAc,EAAE,kBAAkB,CAAC,KAAK,CAAC,cAAc;YACvD,YAAY,EAAE,kBAAkB,CAAC,KAAK,CAAC,YAAY;SACtD;QACD,WAAW,EAAE,EAAC,EAAE,EAAE,QAAQ,EAAC;QAC3B,QAAQ,EAAE;YACN,YAAY,EAAE,iBAAiB;YAC/B,iBAAiB,EAAE,KAAK;YACxB,cAAc,EAAE,KAAK;YACrB,MAAM,EAAE;gBACJ,oBAAoB,EAAE,EAAE;gBACxB,gBAAgB,EAAE,EAAE;aACvB;SACJ;QACD,KAAK,EAAE;YACH;gBACI,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,UAAU;gBAChB,QAAQ,EAAE,kBAAkB,CAAC,KAAK,CAAC,QAAQ;gBAC3C,UAAU,EAAE,UAAU;aACzB;YACD;gBACI,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;aAClC;YACD;gBACI,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,UAAU;gBAChB,QAAQ,EAAE,kBAAkB,CAAC,KAAK,CAAC,QAAQ;gBAC3C,UAAU,EAAE,UAAU;aACzB;YACD;gBACI,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;aACvB;SACJ;KACJ,CAAC;IACF,KAAK,EAAE;QACH,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;YAC3B,YAAY;YACZ,MAAM,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"upwork-com.actor.js","sourceRoot":"","sources":["../../../src/sites/upwork-com/upwork-com.actor.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/core/ActorContext.ts
CHANGED
|
@@ -69,58 +69,81 @@ export const upworkComActor = defineActor({
|
|
|
69
69
|
}),
|
|
70
70
|
tasks: {
|
|
71
71
|
test: async (context, input) => {
|
|
72
|
+
console.log('starting test task');
|
|
72
73
|
//@ts-ignore
|
|
73
74
|
await context.native.fileDialogs.selectFile(process.env.TEST)
|
|
74
|
-
|
|
75
|
+
console.log('moving mouse in test task');
|
|
76
|
+
await context.native.mouse.moveTo({x: 100, y: 200})
|
|
77
|
+
console.log('finished test task');
|
|
75
78
|
},
|
|
76
79
|
searchJobs: async (context, input: UpworkJobSearchFields = {}): Promise<UpworkJobListing[]> => {
|
|
80
|
+
console.log('starting job search task');
|
|
77
81
|
const path = '/nx/s/universal-search/jobs?category2_uid=531770282580668420,531770282580668419,531770282580668418&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';
|
|
78
82
|
|
|
83
|
+
console.log('navigating to jobs search page');
|
|
79
84
|
await context.nav.goto(path, {});
|
|
80
85
|
|
|
81
|
-
|
|
86
|
+
console.log('parsing jobs search results');
|
|
87
|
+
const results = await parseUpworkSearchResults(context.session.page as Page);
|
|
88
|
+
console.log('finished job search task');
|
|
89
|
+
return results;
|
|
82
90
|
},
|
|
83
91
|
getJob: async (_context, input: UpworkJobSelector): Promise<{
|
|
84
92
|
jobDetails: UpworkJobDetails,
|
|
85
93
|
jobQuestions: UpworkProposalQuestions
|
|
86
94
|
}> => {
|
|
95
|
+
console.log('starting get job task');
|
|
96
|
+
console.log('opening job details page');
|
|
87
97
|
await _context.nav.goto(`/jobs/~02${input.jobId}/`);
|
|
88
98
|
|
|
99
|
+
console.log('parsing job details content');
|
|
89
100
|
const jobDetails = parseUpworkJobDetailsPage(await _context.session.page.content());
|
|
90
101
|
|
|
102
|
+
console.log('opening job application page');
|
|
91
103
|
await _context.nav.goto(`/nx/proposals/job/~02${input.jobId}/apply/`);
|
|
92
104
|
|
|
105
|
+
console.log('parsing proposal questions');
|
|
93
106
|
const jobQuestions = await parseUpworkProposalQuestions(_context.session.page as Page);
|
|
107
|
+
console.log('finished get job task');
|
|
94
108
|
return {
|
|
95
109
|
jobDetails,
|
|
96
110
|
jobQuestions
|
|
97
111
|
}
|
|
98
112
|
},
|
|
99
113
|
applyToJob: async (_context, input: UpworkApplyToJobInput & UpworkProposalAnswers): Promise<UpworkApplyToJobResult> => {
|
|
100
|
-
|
|
114
|
+
console.log('starting apply to job task');
|
|
115
|
+
console.log('opening apply page');
|
|
101
116
|
await _context.nav.goto(`/nx/proposals/job/~02${input.jobId}/apply/`);
|
|
102
117
|
|
|
118
|
+
console.log('opening agency selector');
|
|
103
119
|
await _context.cursor.move('.up-fe-agency-member-selector > [data-test="dropdown-toggle"]')
|
|
104
120
|
await _context.cursor.click('.up-fe-agency-member-selector > [data-test="dropdown-toggle"]')
|
|
105
121
|
|
|
122
|
+
console.log('selecting agency option');
|
|
106
123
|
await _context.cursor.move('li[role="option"][tabindex="0"]')
|
|
107
124
|
await _context.cursor.click('li[role="option"][tabindex="0"]')
|
|
108
125
|
|
|
126
|
+
console.log('opening contractor selector');
|
|
109
127
|
await _context.cursor.move('.up-fe-contractor-selector > [data-test="dropdown-toggle"]')
|
|
110
128
|
await _context.cursor.click('.up-fe-contractor-selector > [data-test="dropdown-toggle"]')
|
|
111
129
|
|
|
130
|
+
console.log('selecting contractor option');
|
|
112
131
|
await _context.cursor.move('li[role="option"][tabindex="0"]')
|
|
113
132
|
await _context.cursor.click('li[role="option"][tabindex="0"]')
|
|
114
133
|
|
|
134
|
+
console.log('scrolling to rate increase selector');
|
|
115
135
|
await _context.cursor.scrollIntoView('[data-test="sri-form-card"] > [data-test="dropdown-toggle"] > [aria-label="How often do you want a rate increase?"]')
|
|
116
136
|
|
|
137
|
+
console.log('opening rate increase selector');
|
|
117
138
|
await _context.cursor.move('[data-test="sri-form-card"] > [data-test="dropdown-toggle"] > [aria-label="How often do you want a rate increase?"]')
|
|
118
139
|
await _context.cursor.click('[data-test="sri-form-card"] > [data-test="dropdown-toggle"] > [aria-label="How often do you want a rate increase?"]')
|
|
119
140
|
await _context.cursor.move('li[role="option"][tabindex="0"]')
|
|
120
141
|
await _context.cursor.click('li[role="option"][tabindex="0"]')
|
|
121
142
|
|
|
143
|
+
console.log('filling proposal answers');
|
|
122
144
|
await fillUpworkProposalQuestions(_context.session.page as Page, input.answers)
|
|
123
145
|
|
|
146
|
+
console.log('building apply result payload');
|
|
124
147
|
return {
|
|
125
148
|
coverLetter: input.answers.coverLetter ?? '',
|
|
126
149
|
rate: parseRate(input.rate)
|