donobu 2.18.3 → 2.18.4
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/assets/generated/version +1 -1
- package/dist/esm/assets/generated/version +1 -1
- package/dist/esm/tools/SolveMfaChallenge.d.ts +2 -1
- package/dist/esm/tools/SolveMfaChallenge.d.ts.map +1 -1
- package/dist/esm/tools/SolveMfaChallenge.js +51 -25
- package/dist/esm/tools/SolveMfaChallenge.js.map +1 -1
- package/dist/tools/SolveMfaChallenge.d.ts +2 -1
- package/dist/tools/SolveMfaChallenge.d.ts.map +1 -1
- package/dist/tools/SolveMfaChallenge.js +51 -25
- package/dist/tools/SolveMfaChallenge.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
1163
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
1163
|
|
@@ -29,7 +29,8 @@ export declare class SolveMfaChallengeTool extends ReplayableInteraction<SolveMf
|
|
|
29
29
|
constructor();
|
|
30
30
|
invoke(context: ToolCallContext, parameters: SolveMfaChallengeToolCoreParameters, element: Locator): Promise<string>;
|
|
31
31
|
private getMfaCodeFromEmails;
|
|
32
|
-
private
|
|
32
|
+
private fetchLatestMfaEmail;
|
|
33
|
+
private extractBody;
|
|
33
34
|
private extractMfaCodeWithGpt;
|
|
34
35
|
private decodeBase64Url;
|
|
35
36
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SolveMfaChallenge.d.ts","sourceRoot":"","sources":["../../../src/tools/SolveMfaChallenge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EACL,qBAAqB,EACrB,yBAAyB,EACzB,uBAAuB,EACxB,MAAM,yBAAyB,CAAC;AAOjC,MAAM,WAAW,mCAAmC;IAClD;;;OAGG;IACH,aAAa,EAAE,MAAM,CAAC;IAEtB;;;OAGG;IACH,iBAAiB,EAAE,MAAM,CAAC;IAE1B;;;OAGG;IACH,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,4CACf,SAAQ,uBAAuB,EAC7B,mCAAmC;CAAG;AAE1C,MAAM,WAAW,8CACf,SAAQ,yBAAyB,EAC/B,mCAAmC;CAAG;AAE1C,qBAAa,qBAAsB,SAAQ,qBAAqB,CAC9D,mCAAmC,EACnC,4CAA4C,EAC5C,8CAA8C,CAC/C;IACC,gBAAuB,IAAI,uBAAuB;IAClD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAK;IACxC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAS;;IAYzC,MAAM,CACV,OAAO,EAAE,eAAe,EACxB,UAAU,EAAE,mCAAmC,EAC/C,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"SolveMfaChallenge.d.ts","sourceRoot":"","sources":["../../../src/tools/SolveMfaChallenge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EACL,qBAAqB,EACrB,yBAAyB,EACzB,uBAAuB,EACxB,MAAM,yBAAyB,CAAC;AAOjC,MAAM,WAAW,mCAAmC;IAClD;;;OAGG;IACH,aAAa,EAAE,MAAM,CAAC;IAEtB;;;OAGG;IACH,iBAAiB,EAAE,MAAM,CAAC;IAE1B;;;OAGG;IACH,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,4CACf,SAAQ,uBAAuB,EAC7B,mCAAmC;CAAG;AAE1C,MAAM,WAAW,8CACf,SAAQ,yBAAyB,EAC/B,mCAAmC;CAAG;AAE1C,qBAAa,qBAAsB,SAAQ,qBAAqB,CAC9D,mCAAmC,EACnC,4CAA4C,EAC5C,8CAA8C,CAC/C;IACC,gBAAuB,IAAI,uBAAuB;IAClD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAK;IACxC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAS;;IAYzC,MAAM,CACV,OAAO,EAAE,eAAe,EACxB,UAAU,EAAE,mCAAmC,EAC/C,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,MAAM,CAAC;YAoDJ,oBAAoB;YAyCpB,mBAAmB;IA2DjC,OAAO,CAAC,WAAW;YA6BL,qBAAqB;IAwCnC,OAAO,CAAC,eAAe;CAKxB"}
|
|
@@ -22,19 +22,22 @@ class SolveMfaChallengeTool extends ReplayableInteraction_1.ReplayableInteractio
|
|
|
22
22
|
if (!mfaCode) {
|
|
23
23
|
throw new Error('Could not find MFA code in emails after multiple attempts');
|
|
24
24
|
}
|
|
25
|
-
// Input the MFA code into the element
|
|
25
|
+
// Input the MFA code into the element.
|
|
26
|
+
//
|
|
27
|
+
// Note: We focus the element then send raw keyboard events rather than
|
|
28
|
+
// doing 'element.press' since some MFA systems automatically progress
|
|
29
|
+
// focus across input fields when each character is entered.
|
|
30
|
+
await element.focus();
|
|
26
31
|
for (const char of mfaCode) {
|
|
27
|
-
await
|
|
32
|
+
await context.page.current.keyboard.press(char, {
|
|
28
33
|
delay: MiscUtils_1.MiscUtils.generateHumanLikeKeyPressDurationInMs(char),
|
|
29
|
-
timeout: 3000,
|
|
30
34
|
});
|
|
31
35
|
}
|
|
32
36
|
// Submit the form if necessary
|
|
33
37
|
try {
|
|
34
38
|
const char = 'Enter';
|
|
35
|
-
await
|
|
39
|
+
await context.page.current.keyboard.press(char, {
|
|
36
40
|
delay: MiscUtils_1.MiscUtils.generateHumanLikeKeyPressDurationInMs(char),
|
|
37
|
-
timeout: 3000,
|
|
38
41
|
});
|
|
39
42
|
}
|
|
40
43
|
catch (_error) {
|
|
@@ -44,6 +47,7 @@ class SolveMfaChallengeTool extends ReplayableInteraction_1.ReplayableInteractio
|
|
|
44
47
|
return `Successfully retrieved and inputted MFA code: ${mfaCode}`;
|
|
45
48
|
}
|
|
46
49
|
async getMfaCodeFromEmails(context, gmail, waitTimeSeconds) {
|
|
50
|
+
const seenIds = new Set();
|
|
47
51
|
const startTime = Date.now();
|
|
48
52
|
const endTime = startTime + waitTimeSeconds * 1000;
|
|
49
53
|
let attempt = 0;
|
|
@@ -53,7 +57,7 @@ class SolveMfaChallengeTool extends ReplayableInteraction_1.ReplayableInteractio
|
|
|
53
57
|
attempt++;
|
|
54
58
|
Logger_1.appLogger.info(`Attempt ${attempt} of ${SolveMfaChallengeTool.MAX_RETRIES} to find MFA code in emails`);
|
|
55
59
|
// Get the body of the latest email for the user.
|
|
56
|
-
const emailBody = await this.
|
|
60
|
+
const emailBody = await this.fetchLatestMfaEmail(gmail, seenIds);
|
|
57
61
|
// Only process if the email body has changed.
|
|
58
62
|
if (emailBody && emailBody !== lastEmailBody) {
|
|
59
63
|
lastEmailBody = emailBody;
|
|
@@ -71,29 +75,51 @@ class SolveMfaChallengeTool extends ReplayableInteraction_1.ReplayableInteractio
|
|
|
71
75
|
}
|
|
72
76
|
return null;
|
|
73
77
|
}
|
|
74
|
-
async
|
|
75
|
-
|
|
76
|
-
const
|
|
77
|
-
|
|
78
|
-
const res = await gmail.users.messages.list({
|
|
78
|
+
async fetchLatestMfaEmail(gmail, seenIds) {
|
|
79
|
+
const lookbackMinutes = 2;
|
|
80
|
+
const cutoff = Date.now() - lookbackMinutes * 60000;
|
|
81
|
+
const threadRes = await gmail.users.threads.list({
|
|
79
82
|
userId: 'me',
|
|
80
|
-
q:
|
|
81
|
-
|
|
83
|
+
q: 'subject:(code OR security OR authentication OR verification OR confirm OR verify) ' +
|
|
84
|
+
'is:unread in:inbox',
|
|
85
|
+
maxResults: 25,
|
|
86
|
+
fields: 'threads(id)',
|
|
82
87
|
});
|
|
83
|
-
|
|
84
|
-
|
|
88
|
+
const candidates = [];
|
|
89
|
+
for (const th of threadRes.data.threads ?? []) {
|
|
90
|
+
const t = await gmail.users.threads.get({
|
|
91
|
+
userId: 'me',
|
|
92
|
+
id: th.id,
|
|
93
|
+
format: 'metadata',
|
|
94
|
+
fields: 'messages(id,internalDate,labelIds)',
|
|
95
|
+
});
|
|
96
|
+
const m = t.data.messages.at(-1); // newest in that thread
|
|
97
|
+
if (!m || seenIds.has(m.id)) {
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
else if (!m.labelIds?.includes('UNREAD')) {
|
|
101
|
+
continue;
|
|
102
|
+
}
|
|
103
|
+
const ts = Number(m.internalDate);
|
|
104
|
+
if (ts < cutoff) {
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
candidates.push({ id: m.id, ts });
|
|
108
|
+
}
|
|
109
|
+
if (!candidates.length) {
|
|
85
110
|
return null;
|
|
86
111
|
}
|
|
87
|
-
|
|
88
|
-
|
|
112
|
+
const winner = candidates.sort((a, b) => b.ts - a.ts)[0];
|
|
113
|
+
seenIds.add(winner.id);
|
|
114
|
+
const full = await gmail.users.messages.get({
|
|
89
115
|
userId: 'me',
|
|
90
|
-
id:
|
|
116
|
+
id: winner.id,
|
|
91
117
|
format: 'full',
|
|
92
|
-
})
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
const parts = email.
|
|
118
|
+
});
|
|
119
|
+
return this.extractBody(full.data);
|
|
120
|
+
}
|
|
121
|
+
extractBody(email) {
|
|
122
|
+
const parts = email.payload?.parts;
|
|
97
123
|
let body = '';
|
|
98
124
|
if (parts) {
|
|
99
125
|
// Try to find plain text part first
|
|
@@ -109,9 +135,9 @@ class SolveMfaChallengeTool extends ReplayableInteraction_1.ReplayableInteractio
|
|
|
109
135
|
}
|
|
110
136
|
}
|
|
111
137
|
}
|
|
112
|
-
else if (email.
|
|
138
|
+
else if (email.payload?.body?.data) {
|
|
113
139
|
// Handle case where email has no parts
|
|
114
|
-
body = this.decodeBase64Url(email.
|
|
140
|
+
body = this.decodeBase64Url(email.payload.body.data);
|
|
115
141
|
}
|
|
116
142
|
if (!body) {
|
|
117
143
|
Logger_1.appLogger.warn('Email found but body could not be decoded');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SolveMfaChallenge.js","sourceRoot":"","sources":["../../../src/tools/SolveMfaChallenge.ts"],"names":[],"mappings":";;;AAEA,mEAIiC;AACjC,kDAA+C;AAC/C,2CAAoC;AACpC,4CAA4C;AAgC5C,MAAa,qBAAsB,SAAQ,6CAI1C;IAKC;QACE,KAAK,CACH,qBAAqB,CAAC,IAAI,EAC1B,2GAA2G,EAC3G,8CAA8C,EAC9C,gDAAgD,EAChD,IAAI,CACL,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,MAAM,CACV,OAAwB,EACxB,UAA+C,EAC/C,OAAgB;QAEhB,MAAM,eAAe,GAAG,EAAE,CAAC;QAC3B,sBAAsB;QACtB,MAAM,YAAY,GAAG,IAAI,mBAAM,CAAC,IAAI,CAAC,MAAM,CACzC,UAAU,CAAC,aAAa,EACxB,UAAU,CAAC,iBAAiB,CAC7B,CAAC;QACF,YAAY,CAAC,cAAc,CAAC;YAC1B,aAAa,EAAE,UAAU,CAAC,iBAAiB;SAC5C,CAAC,CAAC;QACH,MAAM,KAAK,GAAG,mBAAM,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;QAElE,mCAAmC;QACnC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAC7C,OAAO,EACP,KAAK,EACL,eAAe,CAChB,CAAC;QAEF,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CACb,2DAA2D,CAC5D,CAAC;QACJ,CAAC;QAED,
|
|
1
|
+
{"version":3,"file":"SolveMfaChallenge.js","sourceRoot":"","sources":["../../../src/tools/SolveMfaChallenge.ts"],"names":[],"mappings":";;;AAEA,mEAIiC;AACjC,kDAA+C;AAC/C,2CAAoC;AACpC,4CAA4C;AAgC5C,MAAa,qBAAsB,SAAQ,6CAI1C;IAKC;QACE,KAAK,CACH,qBAAqB,CAAC,IAAI,EAC1B,2GAA2G,EAC3G,8CAA8C,EAC9C,gDAAgD,EAChD,IAAI,CACL,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,MAAM,CACV,OAAwB,EACxB,UAA+C,EAC/C,OAAgB;QAEhB,MAAM,eAAe,GAAG,EAAE,CAAC;QAC3B,sBAAsB;QACtB,MAAM,YAAY,GAAG,IAAI,mBAAM,CAAC,IAAI,CAAC,MAAM,CACzC,UAAU,CAAC,aAAa,EACxB,UAAU,CAAC,iBAAiB,CAC7B,CAAC;QACF,YAAY,CAAC,cAAc,CAAC;YAC1B,aAAa,EAAE,UAAU,CAAC,iBAAiB;SAC5C,CAAC,CAAC;QACH,MAAM,KAAK,GAAG,mBAAM,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;QAElE,mCAAmC;QACnC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAC7C,OAAO,EACP,KAAK,EACL,eAAe,CAChB,CAAC;QAEF,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CACb,2DAA2D,CAC5D,CAAC;QACJ,CAAC;QAED,uCAAuC;QACvC,EAAE;QACF,uEAAuE;QACvE,sEAAsE;QACtE,4DAA4D;QAC5D,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;QAEtB,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;YAC3B,MAAM,OAAO,CAAC,IAAI,CAAC,OAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE;gBAC/C,KAAK,EAAE,qBAAS,CAAC,qCAAqC,CAAC,IAAI,CAAC;aAC7D,CAAC,CAAC;QACL,CAAC;QAED,+BAA+B;QAC/B,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,OAAO,CAAC;YACrB,MAAM,OAAO,CAAC,IAAI,CAAC,OAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE;gBAC/C,KAAK,EAAE,qBAAS,CAAC,qCAAqC,CAAC,IAAI,CAAC;aAC7D,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,MAAM,EAAE,CAAC;YAChB,kEAAkE;YAClE,iEAAiE;QACnE,CAAC;QAED,OAAO,iDAAiD,OAAO,EAAE,CAAC;IACpE,CAAC;IAEO,KAAK,CAAC,oBAAoB,CAChC,OAAwB,EACxB,KAAqB,EACrB,eAAuB;QAEvB,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QAClC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,SAAS,GAAG,eAAe,GAAG,IAAI,CAAC;QACnD,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,IAAI,aAAa,GAAkB,IAAI,CAAC;QAExC,OACE,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO;YACpB,OAAO,GAAG,qBAAqB,CAAC,WAAW,EAC3C,CAAC;YACD,OAAO,EAAE,CAAC;YACV,kBAAS,CAAC,IAAI,CACZ,WAAW,OAAO,OAAO,qBAAqB,CAAC,WAAW,6BAA6B,CACxF,CAAC;YACF,iDAAiD;YACjD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YACjE,8CAA8C;YAC9C,IAAI,SAAS,IAAI,SAAS,KAAK,aAAa,EAAE,CAAC;gBAC7C,aAAa,GAAG,SAAS,CAAC;gBAC1B,8CAA8C;gBAC9C,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;gBAErE,IAAI,OAAO,EAAE,CAAC;oBACZ,kBAAS,CAAC,IAAI,CAAC,gCAAgC,OAAO,EAAE,CAAC,CAAC;oBAC1D,OAAO,OAAO,CAAC;gBACjB,CAAC;YACH,CAAC;YACD,wBAAwB;YACxB,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;gBAC5B,UAAU,CAAC,OAAO,EAAE,qBAAqB,CAAC,cAAc,CAAC,CAAC;YAC5D,CAAC,CAAC,CAAC;QACL,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,KAAK,CAAC,mBAAmB,CAC/B,KAAqB,EACrB,OAAoB;QAEpB,MAAM,eAAe,GAAG,CAAC,CAAC;QAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,eAAe,GAAG,KAAM,CAAC;QAErD,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;YAC/C,MAAM,EAAE,IAAI;YACZ,CAAC,EACC,oFAAoF;gBACpF,oBAAoB;YACtB,UAAU,EAAE,EAAE;YACd,MAAM,EAAE,aAAa;SACtB,CAAC,CAAC;QAEH,MAAM,UAAU,GAAiC,EAAE,CAAC;QAEpD,KAAK,MAAM,EAAE,IAAI,SAAS,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;YAC9C,MAAM,CAAC,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;gBACtC,MAAM,EAAE,IAAI;gBACZ,EAAE,EAAE,EAAE,CAAC,EAAG;gBACV,MAAM,EAAE,UAAU;gBAClB,MAAM,EAAE,oCAAoC;aAC7C,CAAC,CAAC;YAEH,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,QAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,wBAAwB;YAE3D,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAG,CAAC,EAAE,CAAC;gBAC7B,SAAS;YACX,CAAC;iBAAM,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC3C,SAAS;YACX,CAAC;YAED,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;YAElC,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC;gBAChB,SAAS;YACX,CAAC;YAED,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAG,EAAE,EAAE,EAAE,CAAC,CAAC;QACrC,CAAC;QAED,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAEvB,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;YAC1C,MAAM,EAAE,IAAI;YACZ,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,MAAM,EAAE,MAAM;SACf,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;IAEO,WAAW,CAAC,KAA8B;QAChD,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC;QACnC,IAAI,IAAI,GAAG,EAAE,CAAC;QAEd,IAAI,KAAK,EAAE,CAAC;YACV,oCAAoC;YACpC,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,KAAK,YAAY,CAAC,CAAC;YACtE,IAAI,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;gBACpC,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClD,CAAC;iBAAM,CAAC;gBACN,0CAA0C;gBAC1C,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,KAAK,WAAW,CAAC,CAAC;gBACrE,IAAI,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;oBACpC,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAClD,CAAC;YACH,CAAC;QACH,CAAC;aAAM,IAAI,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;YACrC,uCAAuC;YACvC,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvD,CAAC;QAED,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,kBAAS,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;YAC5D,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,KAAK,CAAC,qBAAqB,CACjC,OAAwB,EACxB,SAAiB;QAEjB,sDAAsD;QACtD,MAAM,aAAa,GAAkB;YACnC,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE;;;;uDAI2C;SAClD,CAAC;QAEF,MAAM,WAAW,GAAgB;YAC/B,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE;gBACL;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE;;EAEd,SAAS;OACJ;iBACE;aACF;SACF,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,SAAU,CAAC,UAAU,CAAC;YACnD,aAAa;YACb,WAAW;SACZ,CAAC,CAAC;QACH,MAAM,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAE3C,IAAI,aAAa,KAAK,eAAe,EAAE,CAAC;YACtC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,aAAa,CAAC;IACvB,CAAC;IAEO,eAAe,CAAC,IAAY;QAClC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC9D,MAAM,MAAM,GAAG,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1E,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACzD,CAAC;;AAxPH,sDAyPC;AApPwB,0BAAI,GAAG,mBAAmB,CAAC;AAC1B,iCAAW,GAAG,CAAC,CAAC;AAChB,oCAAc,GAAG,KAAK,CAAC"}
|
|
@@ -29,7 +29,8 @@ export declare class SolveMfaChallengeTool extends ReplayableInteraction<SolveMf
|
|
|
29
29
|
constructor();
|
|
30
30
|
invoke(context: ToolCallContext, parameters: SolveMfaChallengeToolCoreParameters, element: Locator): Promise<string>;
|
|
31
31
|
private getMfaCodeFromEmails;
|
|
32
|
-
private
|
|
32
|
+
private fetchLatestMfaEmail;
|
|
33
|
+
private extractBody;
|
|
33
34
|
private extractMfaCodeWithGpt;
|
|
34
35
|
private decodeBase64Url;
|
|
35
36
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SolveMfaChallenge.d.ts","sourceRoot":"","sources":["../../src/tools/SolveMfaChallenge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EACL,qBAAqB,EACrB,yBAAyB,EACzB,uBAAuB,EACxB,MAAM,yBAAyB,CAAC;AAOjC,MAAM,WAAW,mCAAmC;IAClD;;;OAGG;IACH,aAAa,EAAE,MAAM,CAAC;IAEtB;;;OAGG;IACH,iBAAiB,EAAE,MAAM,CAAC;IAE1B;;;OAGG;IACH,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,4CACf,SAAQ,uBAAuB,EAC7B,mCAAmC;CAAG;AAE1C,MAAM,WAAW,8CACf,SAAQ,yBAAyB,EAC/B,mCAAmC;CAAG;AAE1C,qBAAa,qBAAsB,SAAQ,qBAAqB,CAC9D,mCAAmC,EACnC,4CAA4C,EAC5C,8CAA8C,CAC/C;IACC,gBAAuB,IAAI,uBAAuB;IAClD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAK;IACxC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAS;;IAYzC,MAAM,CACV,OAAO,EAAE,eAAe,EACxB,UAAU,EAAE,mCAAmC,EAC/C,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"SolveMfaChallenge.d.ts","sourceRoot":"","sources":["../../src/tools/SolveMfaChallenge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EACL,qBAAqB,EACrB,yBAAyB,EACzB,uBAAuB,EACxB,MAAM,yBAAyB,CAAC;AAOjC,MAAM,WAAW,mCAAmC;IAClD;;;OAGG;IACH,aAAa,EAAE,MAAM,CAAC;IAEtB;;;OAGG;IACH,iBAAiB,EAAE,MAAM,CAAC;IAE1B;;;OAGG;IACH,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,4CACf,SAAQ,uBAAuB,EAC7B,mCAAmC;CAAG;AAE1C,MAAM,WAAW,8CACf,SAAQ,yBAAyB,EAC/B,mCAAmC;CAAG;AAE1C,qBAAa,qBAAsB,SAAQ,qBAAqB,CAC9D,mCAAmC,EACnC,4CAA4C,EAC5C,8CAA8C,CAC/C;IACC,gBAAuB,IAAI,uBAAuB;IAClD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAK;IACxC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAS;;IAYzC,MAAM,CACV,OAAO,EAAE,eAAe,EACxB,UAAU,EAAE,mCAAmC,EAC/C,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,MAAM,CAAC;YAoDJ,oBAAoB;YAyCpB,mBAAmB;IA2DjC,OAAO,CAAC,WAAW;YA6BL,qBAAqB;IAwCnC,OAAO,CAAC,eAAe;CAKxB"}
|
|
@@ -22,19 +22,22 @@ class SolveMfaChallengeTool extends ReplayableInteraction_1.ReplayableInteractio
|
|
|
22
22
|
if (!mfaCode) {
|
|
23
23
|
throw new Error('Could not find MFA code in emails after multiple attempts');
|
|
24
24
|
}
|
|
25
|
-
// Input the MFA code into the element
|
|
25
|
+
// Input the MFA code into the element.
|
|
26
|
+
//
|
|
27
|
+
// Note: We focus the element then send raw keyboard events rather than
|
|
28
|
+
// doing 'element.press' since some MFA systems automatically progress
|
|
29
|
+
// focus across input fields when each character is entered.
|
|
30
|
+
await element.focus();
|
|
26
31
|
for (const char of mfaCode) {
|
|
27
|
-
await
|
|
32
|
+
await context.page.current.keyboard.press(char, {
|
|
28
33
|
delay: MiscUtils_1.MiscUtils.generateHumanLikeKeyPressDurationInMs(char),
|
|
29
|
-
timeout: 3000,
|
|
30
34
|
});
|
|
31
35
|
}
|
|
32
36
|
// Submit the form if necessary
|
|
33
37
|
try {
|
|
34
38
|
const char = 'Enter';
|
|
35
|
-
await
|
|
39
|
+
await context.page.current.keyboard.press(char, {
|
|
36
40
|
delay: MiscUtils_1.MiscUtils.generateHumanLikeKeyPressDurationInMs(char),
|
|
37
|
-
timeout: 3000,
|
|
38
41
|
});
|
|
39
42
|
}
|
|
40
43
|
catch (_error) {
|
|
@@ -44,6 +47,7 @@ class SolveMfaChallengeTool extends ReplayableInteraction_1.ReplayableInteractio
|
|
|
44
47
|
return `Successfully retrieved and inputted MFA code: ${mfaCode}`;
|
|
45
48
|
}
|
|
46
49
|
async getMfaCodeFromEmails(context, gmail, waitTimeSeconds) {
|
|
50
|
+
const seenIds = new Set();
|
|
47
51
|
const startTime = Date.now();
|
|
48
52
|
const endTime = startTime + waitTimeSeconds * 1000;
|
|
49
53
|
let attempt = 0;
|
|
@@ -53,7 +57,7 @@ class SolveMfaChallengeTool extends ReplayableInteraction_1.ReplayableInteractio
|
|
|
53
57
|
attempt++;
|
|
54
58
|
Logger_1.appLogger.info(`Attempt ${attempt} of ${SolveMfaChallengeTool.MAX_RETRIES} to find MFA code in emails`);
|
|
55
59
|
// Get the body of the latest email for the user.
|
|
56
|
-
const emailBody = await this.
|
|
60
|
+
const emailBody = await this.fetchLatestMfaEmail(gmail, seenIds);
|
|
57
61
|
// Only process if the email body has changed.
|
|
58
62
|
if (emailBody && emailBody !== lastEmailBody) {
|
|
59
63
|
lastEmailBody = emailBody;
|
|
@@ -71,29 +75,51 @@ class SolveMfaChallengeTool extends ReplayableInteraction_1.ReplayableInteractio
|
|
|
71
75
|
}
|
|
72
76
|
return null;
|
|
73
77
|
}
|
|
74
|
-
async
|
|
75
|
-
|
|
76
|
-
const
|
|
77
|
-
|
|
78
|
-
const res = await gmail.users.messages.list({
|
|
78
|
+
async fetchLatestMfaEmail(gmail, seenIds) {
|
|
79
|
+
const lookbackMinutes = 2;
|
|
80
|
+
const cutoff = Date.now() - lookbackMinutes * 60000;
|
|
81
|
+
const threadRes = await gmail.users.threads.list({
|
|
79
82
|
userId: 'me',
|
|
80
|
-
q:
|
|
81
|
-
|
|
83
|
+
q: 'subject:(code OR security OR authentication OR verification OR confirm OR verify) ' +
|
|
84
|
+
'is:unread in:inbox',
|
|
85
|
+
maxResults: 25,
|
|
86
|
+
fields: 'threads(id)',
|
|
82
87
|
});
|
|
83
|
-
|
|
84
|
-
|
|
88
|
+
const candidates = [];
|
|
89
|
+
for (const th of threadRes.data.threads ?? []) {
|
|
90
|
+
const t = await gmail.users.threads.get({
|
|
91
|
+
userId: 'me',
|
|
92
|
+
id: th.id,
|
|
93
|
+
format: 'metadata',
|
|
94
|
+
fields: 'messages(id,internalDate,labelIds)',
|
|
95
|
+
});
|
|
96
|
+
const m = t.data.messages.at(-1); // newest in that thread
|
|
97
|
+
if (!m || seenIds.has(m.id)) {
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
else if (!m.labelIds?.includes('UNREAD')) {
|
|
101
|
+
continue;
|
|
102
|
+
}
|
|
103
|
+
const ts = Number(m.internalDate);
|
|
104
|
+
if (ts < cutoff) {
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
candidates.push({ id: m.id, ts });
|
|
108
|
+
}
|
|
109
|
+
if (!candidates.length) {
|
|
85
110
|
return null;
|
|
86
111
|
}
|
|
87
|
-
|
|
88
|
-
|
|
112
|
+
const winner = candidates.sort((a, b) => b.ts - a.ts)[0];
|
|
113
|
+
seenIds.add(winner.id);
|
|
114
|
+
const full = await gmail.users.messages.get({
|
|
89
115
|
userId: 'me',
|
|
90
|
-
id:
|
|
116
|
+
id: winner.id,
|
|
91
117
|
format: 'full',
|
|
92
|
-
})
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
const parts = email.
|
|
118
|
+
});
|
|
119
|
+
return this.extractBody(full.data);
|
|
120
|
+
}
|
|
121
|
+
extractBody(email) {
|
|
122
|
+
const parts = email.payload?.parts;
|
|
97
123
|
let body = '';
|
|
98
124
|
if (parts) {
|
|
99
125
|
// Try to find plain text part first
|
|
@@ -109,9 +135,9 @@ class SolveMfaChallengeTool extends ReplayableInteraction_1.ReplayableInteractio
|
|
|
109
135
|
}
|
|
110
136
|
}
|
|
111
137
|
}
|
|
112
|
-
else if (email.
|
|
138
|
+
else if (email.payload?.body?.data) {
|
|
113
139
|
// Handle case where email has no parts
|
|
114
|
-
body = this.decodeBase64Url(email.
|
|
140
|
+
body = this.decodeBase64Url(email.payload.body.data);
|
|
115
141
|
}
|
|
116
142
|
if (!body) {
|
|
117
143
|
Logger_1.appLogger.warn('Email found but body could not be decoded');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SolveMfaChallenge.js","sourceRoot":"","sources":["../../src/tools/SolveMfaChallenge.ts"],"names":[],"mappings":";;;AAEA,mEAIiC;AACjC,kDAA+C;AAC/C,2CAAoC;AACpC,4CAA4C;AAgC5C,MAAa,qBAAsB,SAAQ,6CAI1C;IAKC;QACE,KAAK,CACH,qBAAqB,CAAC,IAAI,EAC1B,2GAA2G,EAC3G,8CAA8C,EAC9C,gDAAgD,EAChD,IAAI,CACL,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,MAAM,CACV,OAAwB,EACxB,UAA+C,EAC/C,OAAgB;QAEhB,MAAM,eAAe,GAAG,EAAE,CAAC;QAC3B,sBAAsB;QACtB,MAAM,YAAY,GAAG,IAAI,mBAAM,CAAC,IAAI,CAAC,MAAM,CACzC,UAAU,CAAC,aAAa,EACxB,UAAU,CAAC,iBAAiB,CAC7B,CAAC;QACF,YAAY,CAAC,cAAc,CAAC;YAC1B,aAAa,EAAE,UAAU,CAAC,iBAAiB;SAC5C,CAAC,CAAC;QACH,MAAM,KAAK,GAAG,mBAAM,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;QAElE,mCAAmC;QACnC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAC7C,OAAO,EACP,KAAK,EACL,eAAe,CAChB,CAAC;QAEF,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CACb,2DAA2D,CAC5D,CAAC;QACJ,CAAC;QAED,
|
|
1
|
+
{"version":3,"file":"SolveMfaChallenge.js","sourceRoot":"","sources":["../../src/tools/SolveMfaChallenge.ts"],"names":[],"mappings":"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"}
|