donobu 2.23.4 → 2.24.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.
- package/dist/assets/generated/version +1 -1
- package/dist/assets/playwright-json-to-markdown.js +26 -12
- package/dist/esm/assets/generated/version +1 -1
- package/dist/esm/assets/playwright-json-to-markdown.js +26 -12
- package/dist/esm/tools/SolveMfaChallenge.d.ts +9 -0
- package/dist/esm/tools/SolveMfaChallenge.d.ts.map +1 -1
- package/dist/esm/tools/SolveMfaChallenge.js +15 -12
- package/dist/esm/tools/SolveMfaChallenge.js.map +1 -1
- package/dist/tools/SolveMfaChallenge.d.ts +9 -0
- package/dist/tools/SolveMfaChallenge.d.ts.map +1 -1
- package/dist/tools/SolveMfaChallenge.js +15 -12
- package/dist/tools/SolveMfaChallenge.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
1261
|
|
@@ -94,7 +94,12 @@ function generateMarkdown(jsonData) {
|
|
|
94
94
|
test.annotations &&
|
|
95
95
|
test.annotations.some((a) => a.type === 'self-healed');
|
|
96
96
|
|
|
97
|
-
if (
|
|
97
|
+
if (
|
|
98
|
+
test.status === 'skipped' ||
|
|
99
|
+
(!result && test.status === undefined)
|
|
100
|
+
) {
|
|
101
|
+
skipped++;
|
|
102
|
+
} else if (result) {
|
|
98
103
|
if (isSelfHealed) {
|
|
99
104
|
selfHealed++;
|
|
100
105
|
} else {
|
|
@@ -131,13 +136,8 @@ function generateMarkdown(jsonData) {
|
|
|
131
136
|
totalInterrupted += interrupted;
|
|
132
137
|
totalSelfHealed += selfHealed;
|
|
133
138
|
totalDuration += fileDuration;
|
|
134
|
-
const anchor = suite.file
|
|
135
|
-
.replace(/[^\w\s-]/g, '') // remove non-alphanumeric
|
|
136
|
-
.trim()
|
|
137
|
-
.replace(/\s+/g, '-') // spaces to dashes
|
|
138
|
-
.toLowerCase();
|
|
139
139
|
|
|
140
|
-
markdown += `|
|
|
140
|
+
markdown += `| ${suite.file} | ${passed ? passed + ' ✅' : ''} | ${selfHealed ? selfHealed + ' ❤️🩹' : ''} | ${failed ? failed + ' ❌' : ''} | ${timedOut ? timedOut + ' ⏰' : ''} | ${skipped ? skipped + ' ⏭️' : ''} | ${interrupted ? interrupted + ' ⚡' : ''} | ${formatDuration(fileDuration)} |\n`;
|
|
141
141
|
});
|
|
142
142
|
|
|
143
143
|
// Add totals row
|
|
@@ -156,11 +156,25 @@ function generateMarkdown(jsonData) {
|
|
|
156
156
|
spec.tests.forEach((test) => {
|
|
157
157
|
const result = test.results && test.results.at(-1);
|
|
158
158
|
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
markdown += `**
|
|
162
|
-
|
|
163
|
-
|
|
159
|
+
if (test.status === 'skipped' || !result || test.status !== undefined) {
|
|
160
|
+
markdown += `**Status**: ⏭️ Skipped \n`;
|
|
161
|
+
markdown += `**Duration**: N/A \n`;
|
|
162
|
+
// Get objective from annotations if available
|
|
163
|
+
let objective = 'No objective provided';
|
|
164
|
+
|
|
165
|
+
if (test.annotations) {
|
|
166
|
+
const objectiveAnnotation = test.annotations.find(
|
|
167
|
+
(a) => a.type === 'objective',
|
|
168
|
+
);
|
|
169
|
+
if (objectiveAnnotation) {
|
|
170
|
+
objective =
|
|
171
|
+
objectiveAnnotation.description || 'No objective provided';
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
// Escape any existing triple backticks in the objective
|
|
176
|
+
objective = objective.replace(/```/g, '\\`\\`\\`');
|
|
177
|
+
markdown += `**Objective**:\n\`\`\`\n${objective}\n\`\`\`\n`;
|
|
164
178
|
markdown += `---\n\n`;
|
|
165
179
|
return;
|
|
166
180
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
1261
|
|
@@ -94,7 +94,12 @@ function generateMarkdown(jsonData) {
|
|
|
94
94
|
test.annotations &&
|
|
95
95
|
test.annotations.some((a) => a.type === 'self-healed');
|
|
96
96
|
|
|
97
|
-
if (
|
|
97
|
+
if (
|
|
98
|
+
test.status === 'skipped' ||
|
|
99
|
+
(!result && test.status === undefined)
|
|
100
|
+
) {
|
|
101
|
+
skipped++;
|
|
102
|
+
} else if (result) {
|
|
98
103
|
if (isSelfHealed) {
|
|
99
104
|
selfHealed++;
|
|
100
105
|
} else {
|
|
@@ -131,13 +136,8 @@ function generateMarkdown(jsonData) {
|
|
|
131
136
|
totalInterrupted += interrupted;
|
|
132
137
|
totalSelfHealed += selfHealed;
|
|
133
138
|
totalDuration += fileDuration;
|
|
134
|
-
const anchor = suite.file
|
|
135
|
-
.replace(/[^\w\s-]/g, '') // remove non-alphanumeric
|
|
136
|
-
.trim()
|
|
137
|
-
.replace(/\s+/g, '-') // spaces to dashes
|
|
138
|
-
.toLowerCase();
|
|
139
139
|
|
|
140
|
-
markdown += `|
|
|
140
|
+
markdown += `| ${suite.file} | ${passed ? passed + ' ✅' : ''} | ${selfHealed ? selfHealed + ' ❤️🩹' : ''} | ${failed ? failed + ' ❌' : ''} | ${timedOut ? timedOut + ' ⏰' : ''} | ${skipped ? skipped + ' ⏭️' : ''} | ${interrupted ? interrupted + ' ⚡' : ''} | ${formatDuration(fileDuration)} |\n`;
|
|
141
141
|
});
|
|
142
142
|
|
|
143
143
|
// Add totals row
|
|
@@ -156,11 +156,25 @@ function generateMarkdown(jsonData) {
|
|
|
156
156
|
spec.tests.forEach((test) => {
|
|
157
157
|
const result = test.results && test.results.at(-1);
|
|
158
158
|
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
markdown += `**
|
|
162
|
-
|
|
163
|
-
|
|
159
|
+
if (test.status === 'skipped' || !result || test.status !== undefined) {
|
|
160
|
+
markdown += `**Status**: ⏭️ Skipped \n`;
|
|
161
|
+
markdown += `**Duration**: N/A \n`;
|
|
162
|
+
// Get objective from annotations if available
|
|
163
|
+
let objective = 'No objective provided';
|
|
164
|
+
|
|
165
|
+
if (test.annotations) {
|
|
166
|
+
const objectiveAnnotation = test.annotations.find(
|
|
167
|
+
(a) => a.type === 'objective',
|
|
168
|
+
);
|
|
169
|
+
if (objectiveAnnotation) {
|
|
170
|
+
objective =
|
|
171
|
+
objectiveAnnotation.description || 'No objective provided';
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
// Escape any existing triple backticks in the objective
|
|
176
|
+
objective = objective.replace(/```/g, '\\`\\`\\`');
|
|
177
|
+
markdown += `**Objective**:\n\`\`\`\n${objective}\n\`\`\`\n`;
|
|
164
178
|
markdown += `---\n\n`;
|
|
165
179
|
return;
|
|
166
180
|
}
|
|
@@ -6,11 +6,14 @@ export declare const SolveMfaChallengeCoreSchema: z.ZodObject<{
|
|
|
6
6
|
gmailClientId: z.ZodString;
|
|
7
7
|
gmailClientSecret: z.ZodString;
|
|
8
8
|
gmailRefreshToken: z.ZodString;
|
|
9
|
+
email: z.ZodString;
|
|
9
10
|
}, "strip", z.ZodTypeAny, {
|
|
11
|
+
email: string;
|
|
10
12
|
gmailClientId: string;
|
|
11
13
|
gmailClientSecret: string;
|
|
12
14
|
gmailRefreshToken: string;
|
|
13
15
|
}, {
|
|
16
|
+
email: string;
|
|
14
17
|
gmailClientId: string;
|
|
15
18
|
gmailClientSecret: string;
|
|
16
19
|
gmailRefreshToken: string;
|
|
@@ -30,11 +33,13 @@ export declare const SelectorBasedSolveMfaChallengeSchema: z.ZodObject<z.objectU
|
|
|
30
33
|
gmailClientId: z.ZodString;
|
|
31
34
|
gmailClientSecret: z.ZodString;
|
|
32
35
|
gmailRefreshToken: z.ZodString;
|
|
36
|
+
email: z.ZodString;
|
|
33
37
|
}>, "strip", z.ZodTypeAny, {
|
|
34
38
|
selector: {
|
|
35
39
|
frame: string | null;
|
|
36
40
|
element: string[];
|
|
37
41
|
};
|
|
42
|
+
email: string;
|
|
38
43
|
gmailClientId: string;
|
|
39
44
|
gmailClientSecret: string;
|
|
40
45
|
gmailRefreshToken: string;
|
|
@@ -43,6 +48,7 @@ export declare const SelectorBasedSolveMfaChallengeSchema: z.ZodObject<z.objectU
|
|
|
43
48
|
frame: string | null;
|
|
44
49
|
element: string[];
|
|
45
50
|
};
|
|
51
|
+
email: string;
|
|
46
52
|
gmailClientId: string;
|
|
47
53
|
gmailClientSecret: string;
|
|
48
54
|
gmailRefreshToken: string;
|
|
@@ -56,10 +62,12 @@ export declare const AnnotationBasedSolveMfaChallengeSchema: z.ZodObject<z.objec
|
|
|
56
62
|
gmailClientId: z.ZodString;
|
|
57
63
|
gmailClientSecret: z.ZodString;
|
|
58
64
|
gmailRefreshToken: z.ZodString;
|
|
65
|
+
email: z.ZodString;
|
|
59
66
|
}>, "strip", z.ZodTypeAny, {
|
|
60
67
|
annotation: string;
|
|
61
68
|
rationale: string;
|
|
62
69
|
whyThisAnnotation: string;
|
|
70
|
+
email: string;
|
|
63
71
|
gmailClientId: string;
|
|
64
72
|
gmailClientSecret: string;
|
|
65
73
|
gmailRefreshToken: string;
|
|
@@ -67,6 +75,7 @@ export declare const AnnotationBasedSolveMfaChallengeSchema: z.ZodObject<z.objec
|
|
|
67
75
|
annotation: string;
|
|
68
76
|
rationale: string;
|
|
69
77
|
whyThisAnnotation: string;
|
|
78
|
+
email: string;
|
|
70
79
|
gmailClientId: string;
|
|
71
80
|
gmailClientSecret: string;
|
|
72
81
|
gmailRefreshToken: string;
|
|
@@ -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,EAGtB,MAAM,yBAAyB,CAAC;AAMjC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,2BAA2B
|
|
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,EAGtB,MAAM,yBAAyB,CAAC;AAMjC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;EAqBtC,CAAC;AACH,eAAO,MAAM,oCAAoC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAEhD,CAAC;AACF,eAAO,MAAM,sCAAsC;;;;;;;;;;;;;;;;;;;;;;;;;;EACO,CAAC;AAE3D,qBAAa,qBAAsB,SAAQ,qBAAqB,CAC9D,OAAO,2BAA2B,EAClC,OAAO,oCAAoC,EAC3C,OAAO,sCAAsC,CAC9C;IACC,gBAAuB,IAAI,uBAAuB;IAClD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAK;IACxC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAS;;IAazC,MAAM,CACV,OAAO,EAAE,eAAe,EACxB,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,EACvD,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,MAAM,CAAC;YAqDJ,oBAAoB;YAgDpB,mBAAmB;IAwDjC,OAAO,CAAC,WAAW;YA6BL,qBAAqB;IAwCnC,OAAO,CAAC,eAAe;CAKxB"}
|
|
@@ -16,6 +16,9 @@ exports.SolveMfaChallengeCoreSchema = zod_1.z.object({
|
|
|
16
16
|
gmailRefreshToken: zod_1.z
|
|
17
17
|
.string()
|
|
18
18
|
.describe('The Gmail refresh token. This should be passed using an environment variable reference like {{$.env.GMAIL_REFRESH_TOKEN}} or similar.'),
|
|
19
|
+
email: zod_1.z
|
|
20
|
+
.string()
|
|
21
|
+
.describe('The specific email address to filter MFA emails for. This can include variants like someemail+variant@gmail.com to target specific logins.'),
|
|
19
22
|
});
|
|
20
23
|
exports.SelectorBasedSolveMfaChallengeSchema = ReplayableInteraction_1.SelectorBasedSchema.merge(exports.SolveMfaChallengeCoreSchema);
|
|
21
24
|
exports.AnnotationBasedSolveMfaChallengeSchema = ReplayableInteraction_1.AnnotationBasedSchema.merge(exports.SolveMfaChallengeCoreSchema);
|
|
@@ -32,9 +35,9 @@ class SolveMfaChallengeTool extends ReplayableInteraction_1.ReplayableInteractio
|
|
|
32
35
|
});
|
|
33
36
|
const gmail = googleapis_1.google.gmail({ version: 'v1', auth: oAuth2Client });
|
|
34
37
|
// Extract the MFA code from emails
|
|
35
|
-
const mfaCode = await this.getMfaCodeFromEmails(context, gmail, waitTimeSeconds);
|
|
38
|
+
const mfaCode = await this.getMfaCodeFromEmails(context, gmail, waitTimeSeconds, parameters.email);
|
|
36
39
|
if (!mfaCode) {
|
|
37
|
-
throw new Error(
|
|
40
|
+
throw new Error(`Could not find MFA code in emails for ${parameters.email} after multiple attempts`);
|
|
38
41
|
}
|
|
39
42
|
// Input the MFA code into the element.
|
|
40
43
|
//
|
|
@@ -58,9 +61,9 @@ class SolveMfaChallengeTool extends ReplayableInteraction_1.ReplayableInteractio
|
|
|
58
61
|
// Some MFA systems automatically submit themselves, so if we have
|
|
59
62
|
// gotten this far, do not fail if the 'Enter' key fails to land.
|
|
60
63
|
}
|
|
61
|
-
return `Successfully retrieved and inputted MFA code "${mfaCode}" into
|
|
64
|
+
return `Successfully retrieved and inputted MFA code "${mfaCode}" into field for ${parameters.email}`;
|
|
62
65
|
}
|
|
63
|
-
async getMfaCodeFromEmails(context, gmail, waitTimeSeconds) {
|
|
66
|
+
async getMfaCodeFromEmails(context, gmail, waitTimeSeconds, targetEmail) {
|
|
64
67
|
const seenIds = new Set();
|
|
65
68
|
const startTime = Date.now();
|
|
66
69
|
const endTime = startTime + waitTimeSeconds * 1000;
|
|
@@ -69,16 +72,16 @@ class SolveMfaChallengeTool extends ReplayableInteraction_1.ReplayableInteractio
|
|
|
69
72
|
while (Date.now() < endTime &&
|
|
70
73
|
attempt < SolveMfaChallengeTool.MAX_RETRIES) {
|
|
71
74
|
attempt++;
|
|
72
|
-
Logger_1.appLogger.info(`Attempt ${attempt} of ${SolveMfaChallengeTool.MAX_RETRIES} to find MFA code in emails`);
|
|
75
|
+
Logger_1.appLogger.info(`Attempt ${attempt} of ${SolveMfaChallengeTool.MAX_RETRIES} to find MFA code in emails for ${targetEmail}`);
|
|
73
76
|
// Get the body of the latest email for the user.
|
|
74
|
-
const emailBody = await this.fetchLatestMfaEmail(gmail, seenIds);
|
|
77
|
+
const emailBody = await this.fetchLatestMfaEmail(gmail, seenIds, targetEmail);
|
|
75
78
|
// Only process if the email body has changed.
|
|
76
79
|
if (emailBody && emailBody !== lastEmailBody) {
|
|
77
80
|
lastEmailBody = emailBody;
|
|
78
81
|
// Use the GPT client to extract the MFA code.
|
|
79
82
|
const mfaCode = await this.extractMfaCodeWithGpt(context, emailBody);
|
|
80
83
|
if (mfaCode) {
|
|
81
|
-
Logger_1.appLogger.info(`Successfully found MFA code: ${mfaCode}`);
|
|
84
|
+
Logger_1.appLogger.info(`Successfully found MFA code: ${mfaCode} for ${targetEmail}`);
|
|
82
85
|
return mfaCode;
|
|
83
86
|
}
|
|
84
87
|
}
|
|
@@ -89,13 +92,13 @@ class SolveMfaChallengeTool extends ReplayableInteraction_1.ReplayableInteractio
|
|
|
89
92
|
}
|
|
90
93
|
return null;
|
|
91
94
|
}
|
|
92
|
-
async fetchLatestMfaEmail(gmail, seenIds) {
|
|
95
|
+
async fetchLatestMfaEmail(gmail, seenIds, targetEmail) {
|
|
93
96
|
const lookbackMinutes = 2;
|
|
94
97
|
const cutoff = Date.now() - lookbackMinutes * 60000;
|
|
98
|
+
const searchQuery = `to:${targetEmail} subject:(code OR security OR authentication OR verification OR confirm OR verify) is:unread in:inbox`;
|
|
95
99
|
const threadRes = await gmail.users.threads.list({
|
|
96
100
|
userId: 'me',
|
|
97
|
-
q:
|
|
98
|
-
'is:unread in:inbox',
|
|
101
|
+
q: searchQuery,
|
|
99
102
|
maxResults: 25,
|
|
100
103
|
fields: 'threads(id)',
|
|
101
104
|
});
|
|
@@ -105,7 +108,7 @@ class SolveMfaChallengeTool extends ReplayableInteraction_1.ReplayableInteractio
|
|
|
105
108
|
userId: 'me',
|
|
106
109
|
id: th.id,
|
|
107
110
|
format: 'metadata',
|
|
108
|
-
fields: 'messages(id,internalDate,labelIds)',
|
|
111
|
+
fields: 'messages(id,internalDate,labelIds,payload)',
|
|
109
112
|
});
|
|
110
113
|
const m = t.data.messages.at(-1); // newest in that thread
|
|
111
114
|
if (!m || seenIds.has(m.id)) {
|
|
@@ -118,9 +121,9 @@ class SolveMfaChallengeTool extends ReplayableInteraction_1.ReplayableInteractio
|
|
|
118
121
|
if (ts < cutoff) {
|
|
119
122
|
continue;
|
|
120
123
|
}
|
|
121
|
-
candidates.push({ id: m.id, ts });
|
|
122
124
|
}
|
|
123
125
|
if (!candidates.length) {
|
|
126
|
+
Logger_1.appLogger.info(`No MFA email candidates found for ${targetEmail}`);
|
|
124
127
|
return null;
|
|
125
128
|
}
|
|
126
129
|
const winner = candidates.sort((a, b) => b.ts - a.ts)[0];
|
|
@@ -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;AAG5C,6BAAwB;AAEX,QAAA,2BAA2B,GAAG,OAAC,CAAC,MAAM,CAAC;IAClD,aAAa,EAAE,OAAC;SACb,MAAM,EAAE;SACR,QAAQ,CACP,+HAA+H,CAChI;IACH,iBAAiB,EAAE,OAAC;SACjB,MAAM,EAAE;SACR,QAAQ,CACP,uIAAuI,CACxI;IACH,iBAAiB,EAAE,OAAC;SACjB,MAAM,EAAE;SACR,QAAQ,CACP,uIAAuI,CACxI;CACJ,CAAC,CAAC;AACU,QAAA,oCAAoC,GAAG,2CAAmB,CAAC,KAAK,CAC3E,mCAA2B,CAC5B,CAAC;AACW,QAAA,sCAAsC,GACjD,6CAAqB,CAAC,KAAK,CAAC,mCAA2B,CAAC,CAAC;AAE3D,MAAa,qBAAsB,SAAQ,6CAI1C;IAKC;QACE,KAAK,CACH,qBAAqB,CAAC,IAAI,EAC1B,2GAA2G,EAC3G,mCAA2B,EAC3B,4CAAoC,EACpC,8CAAsC,EACtC,IAAI,CACL,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,MAAM,CACV,OAAwB,EACxB,UAAuD,EACvD,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,
|
|
1
|
+
{"version":3,"file":"SolveMfaChallenge.js","sourceRoot":"","sources":["../../../src/tools/SolveMfaChallenge.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,11 +6,14 @@ export declare const SolveMfaChallengeCoreSchema: z.ZodObject<{
|
|
|
6
6
|
gmailClientId: z.ZodString;
|
|
7
7
|
gmailClientSecret: z.ZodString;
|
|
8
8
|
gmailRefreshToken: z.ZodString;
|
|
9
|
+
email: z.ZodString;
|
|
9
10
|
}, "strip", z.ZodTypeAny, {
|
|
11
|
+
email: string;
|
|
10
12
|
gmailClientId: string;
|
|
11
13
|
gmailClientSecret: string;
|
|
12
14
|
gmailRefreshToken: string;
|
|
13
15
|
}, {
|
|
16
|
+
email: string;
|
|
14
17
|
gmailClientId: string;
|
|
15
18
|
gmailClientSecret: string;
|
|
16
19
|
gmailRefreshToken: string;
|
|
@@ -30,11 +33,13 @@ export declare const SelectorBasedSolveMfaChallengeSchema: z.ZodObject<z.objectU
|
|
|
30
33
|
gmailClientId: z.ZodString;
|
|
31
34
|
gmailClientSecret: z.ZodString;
|
|
32
35
|
gmailRefreshToken: z.ZodString;
|
|
36
|
+
email: z.ZodString;
|
|
33
37
|
}>, "strip", z.ZodTypeAny, {
|
|
34
38
|
selector: {
|
|
35
39
|
frame: string | null;
|
|
36
40
|
element: string[];
|
|
37
41
|
};
|
|
42
|
+
email: string;
|
|
38
43
|
gmailClientId: string;
|
|
39
44
|
gmailClientSecret: string;
|
|
40
45
|
gmailRefreshToken: string;
|
|
@@ -43,6 +48,7 @@ export declare const SelectorBasedSolveMfaChallengeSchema: z.ZodObject<z.objectU
|
|
|
43
48
|
frame: string | null;
|
|
44
49
|
element: string[];
|
|
45
50
|
};
|
|
51
|
+
email: string;
|
|
46
52
|
gmailClientId: string;
|
|
47
53
|
gmailClientSecret: string;
|
|
48
54
|
gmailRefreshToken: string;
|
|
@@ -56,10 +62,12 @@ export declare const AnnotationBasedSolveMfaChallengeSchema: z.ZodObject<z.objec
|
|
|
56
62
|
gmailClientId: z.ZodString;
|
|
57
63
|
gmailClientSecret: z.ZodString;
|
|
58
64
|
gmailRefreshToken: z.ZodString;
|
|
65
|
+
email: z.ZodString;
|
|
59
66
|
}>, "strip", z.ZodTypeAny, {
|
|
60
67
|
annotation: string;
|
|
61
68
|
rationale: string;
|
|
62
69
|
whyThisAnnotation: string;
|
|
70
|
+
email: string;
|
|
63
71
|
gmailClientId: string;
|
|
64
72
|
gmailClientSecret: string;
|
|
65
73
|
gmailRefreshToken: string;
|
|
@@ -67,6 +75,7 @@ export declare const AnnotationBasedSolveMfaChallengeSchema: z.ZodObject<z.objec
|
|
|
67
75
|
annotation: string;
|
|
68
76
|
rationale: string;
|
|
69
77
|
whyThisAnnotation: string;
|
|
78
|
+
email: string;
|
|
70
79
|
gmailClientId: string;
|
|
71
80
|
gmailClientSecret: string;
|
|
72
81
|
gmailRefreshToken: string;
|
|
@@ -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,EAGtB,MAAM,yBAAyB,CAAC;AAMjC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,2BAA2B
|
|
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,EAGtB,MAAM,yBAAyB,CAAC;AAMjC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;EAqBtC,CAAC;AACH,eAAO,MAAM,oCAAoC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAEhD,CAAC;AACF,eAAO,MAAM,sCAAsC;;;;;;;;;;;;;;;;;;;;;;;;;;EACO,CAAC;AAE3D,qBAAa,qBAAsB,SAAQ,qBAAqB,CAC9D,OAAO,2BAA2B,EAClC,OAAO,oCAAoC,EAC3C,OAAO,sCAAsC,CAC9C;IACC,gBAAuB,IAAI,uBAAuB;IAClD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAK;IACxC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAS;;IAazC,MAAM,CACV,OAAO,EAAE,eAAe,EACxB,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,EACvD,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,MAAM,CAAC;YAqDJ,oBAAoB;YAgDpB,mBAAmB;IAwDjC,OAAO,CAAC,WAAW;YA6BL,qBAAqB;IAwCnC,OAAO,CAAC,eAAe;CAKxB"}
|
|
@@ -16,6 +16,9 @@ exports.SolveMfaChallengeCoreSchema = zod_1.z.object({
|
|
|
16
16
|
gmailRefreshToken: zod_1.z
|
|
17
17
|
.string()
|
|
18
18
|
.describe('The Gmail refresh token. This should be passed using an environment variable reference like {{$.env.GMAIL_REFRESH_TOKEN}} or similar.'),
|
|
19
|
+
email: zod_1.z
|
|
20
|
+
.string()
|
|
21
|
+
.describe('The specific email address to filter MFA emails for. This can include variants like someemail+variant@gmail.com to target specific logins.'),
|
|
19
22
|
});
|
|
20
23
|
exports.SelectorBasedSolveMfaChallengeSchema = ReplayableInteraction_1.SelectorBasedSchema.merge(exports.SolveMfaChallengeCoreSchema);
|
|
21
24
|
exports.AnnotationBasedSolveMfaChallengeSchema = ReplayableInteraction_1.AnnotationBasedSchema.merge(exports.SolveMfaChallengeCoreSchema);
|
|
@@ -32,9 +35,9 @@ class SolveMfaChallengeTool extends ReplayableInteraction_1.ReplayableInteractio
|
|
|
32
35
|
});
|
|
33
36
|
const gmail = googleapis_1.google.gmail({ version: 'v1', auth: oAuth2Client });
|
|
34
37
|
// Extract the MFA code from emails
|
|
35
|
-
const mfaCode = await this.getMfaCodeFromEmails(context, gmail, waitTimeSeconds);
|
|
38
|
+
const mfaCode = await this.getMfaCodeFromEmails(context, gmail, waitTimeSeconds, parameters.email);
|
|
36
39
|
if (!mfaCode) {
|
|
37
|
-
throw new Error(
|
|
40
|
+
throw new Error(`Could not find MFA code in emails for ${parameters.email} after multiple attempts`);
|
|
38
41
|
}
|
|
39
42
|
// Input the MFA code into the element.
|
|
40
43
|
//
|
|
@@ -58,9 +61,9 @@ class SolveMfaChallengeTool extends ReplayableInteraction_1.ReplayableInteractio
|
|
|
58
61
|
// Some MFA systems automatically submit themselves, so if we have
|
|
59
62
|
// gotten this far, do not fail if the 'Enter' key fails to land.
|
|
60
63
|
}
|
|
61
|
-
return `Successfully retrieved and inputted MFA code "${mfaCode}" into
|
|
64
|
+
return `Successfully retrieved and inputted MFA code "${mfaCode}" into field for ${parameters.email}`;
|
|
62
65
|
}
|
|
63
|
-
async getMfaCodeFromEmails(context, gmail, waitTimeSeconds) {
|
|
66
|
+
async getMfaCodeFromEmails(context, gmail, waitTimeSeconds, targetEmail) {
|
|
64
67
|
const seenIds = new Set();
|
|
65
68
|
const startTime = Date.now();
|
|
66
69
|
const endTime = startTime + waitTimeSeconds * 1000;
|
|
@@ -69,16 +72,16 @@ class SolveMfaChallengeTool extends ReplayableInteraction_1.ReplayableInteractio
|
|
|
69
72
|
while (Date.now() < endTime &&
|
|
70
73
|
attempt < SolveMfaChallengeTool.MAX_RETRIES) {
|
|
71
74
|
attempt++;
|
|
72
|
-
Logger_1.appLogger.info(`Attempt ${attempt} of ${SolveMfaChallengeTool.MAX_RETRIES} to find MFA code in emails`);
|
|
75
|
+
Logger_1.appLogger.info(`Attempt ${attempt} of ${SolveMfaChallengeTool.MAX_RETRIES} to find MFA code in emails for ${targetEmail}`);
|
|
73
76
|
// Get the body of the latest email for the user.
|
|
74
|
-
const emailBody = await this.fetchLatestMfaEmail(gmail, seenIds);
|
|
77
|
+
const emailBody = await this.fetchLatestMfaEmail(gmail, seenIds, targetEmail);
|
|
75
78
|
// Only process if the email body has changed.
|
|
76
79
|
if (emailBody && emailBody !== lastEmailBody) {
|
|
77
80
|
lastEmailBody = emailBody;
|
|
78
81
|
// Use the GPT client to extract the MFA code.
|
|
79
82
|
const mfaCode = await this.extractMfaCodeWithGpt(context, emailBody);
|
|
80
83
|
if (mfaCode) {
|
|
81
|
-
Logger_1.appLogger.info(`Successfully found MFA code: ${mfaCode}`);
|
|
84
|
+
Logger_1.appLogger.info(`Successfully found MFA code: ${mfaCode} for ${targetEmail}`);
|
|
82
85
|
return mfaCode;
|
|
83
86
|
}
|
|
84
87
|
}
|
|
@@ -89,13 +92,13 @@ class SolveMfaChallengeTool extends ReplayableInteraction_1.ReplayableInteractio
|
|
|
89
92
|
}
|
|
90
93
|
return null;
|
|
91
94
|
}
|
|
92
|
-
async fetchLatestMfaEmail(gmail, seenIds) {
|
|
95
|
+
async fetchLatestMfaEmail(gmail, seenIds, targetEmail) {
|
|
93
96
|
const lookbackMinutes = 2;
|
|
94
97
|
const cutoff = Date.now() - lookbackMinutes * 60000;
|
|
98
|
+
const searchQuery = `to:${targetEmail} subject:(code OR security OR authentication OR verification OR confirm OR verify) is:unread in:inbox`;
|
|
95
99
|
const threadRes = await gmail.users.threads.list({
|
|
96
100
|
userId: 'me',
|
|
97
|
-
q:
|
|
98
|
-
'is:unread in:inbox',
|
|
101
|
+
q: searchQuery,
|
|
99
102
|
maxResults: 25,
|
|
100
103
|
fields: 'threads(id)',
|
|
101
104
|
});
|
|
@@ -105,7 +108,7 @@ class SolveMfaChallengeTool extends ReplayableInteraction_1.ReplayableInteractio
|
|
|
105
108
|
userId: 'me',
|
|
106
109
|
id: th.id,
|
|
107
110
|
format: 'metadata',
|
|
108
|
-
fields: 'messages(id,internalDate,labelIds)',
|
|
111
|
+
fields: 'messages(id,internalDate,labelIds,payload)',
|
|
109
112
|
});
|
|
110
113
|
const m = t.data.messages.at(-1); // newest in that thread
|
|
111
114
|
if (!m || seenIds.has(m.id)) {
|
|
@@ -118,9 +121,9 @@ class SolveMfaChallengeTool extends ReplayableInteraction_1.ReplayableInteractio
|
|
|
118
121
|
if (ts < cutoff) {
|
|
119
122
|
continue;
|
|
120
123
|
}
|
|
121
|
-
candidates.push({ id: m.id, ts });
|
|
122
124
|
}
|
|
123
125
|
if (!candidates.length) {
|
|
126
|
+
Logger_1.appLogger.info(`No MFA email candidates found for ${targetEmail}`);
|
|
124
127
|
return null;
|
|
125
128
|
}
|
|
126
129
|
const winner = candidates.sort((a, b) => b.ts - a.ts)[0];
|
|
@@ -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;AAG5C,6BAAwB;AAEX,QAAA,2BAA2B,GAAG,OAAC,CAAC,MAAM,CAAC;IAClD,aAAa,EAAE,OAAC;SACb,MAAM,EAAE;SACR,QAAQ,CACP,+HAA+H,CAChI;IACH,iBAAiB,EAAE,OAAC;SACjB,MAAM,EAAE;SACR,QAAQ,CACP,uIAAuI,CACxI;IACH,iBAAiB,EAAE,OAAC;SACjB,MAAM,EAAE;SACR,QAAQ,CACP,uIAAuI,CACxI;CACJ,CAAC,CAAC;AACU,QAAA,oCAAoC,GAAG,2CAAmB,CAAC,KAAK,CAC3E,mCAA2B,CAC5B,CAAC;AACW,QAAA,sCAAsC,GACjD,6CAAqB,CAAC,KAAK,CAAC,mCAA2B,CAAC,CAAC;AAE3D,MAAa,qBAAsB,SAAQ,6CAI1C;IAKC;QACE,KAAK,CACH,qBAAqB,CAAC,IAAI,EAC1B,2GAA2G,EAC3G,mCAA2B,EAC3B,4CAAoC,EACpC,8CAAsC,EACtC,IAAI,CACL,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,MAAM,CACV,OAAwB,EACxB,UAAuD,EACvD,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,
|
|
1
|
+
{"version":3,"file":"SolveMfaChallenge.js","sourceRoot":"","sources":["../../src/tools/SolveMfaChallenge.ts"],"names":[],"mappings":";;;AAEA,mEAIiC;AACjC,kDAA+C;AAC/C,2CAAoC;AACpC,4CAA4C;AAG5C,6BAAwB;AAEX,QAAA,2BAA2B,GAAG,OAAC,CAAC,MAAM,CAAC;IAClD,aAAa,EAAE,OAAC;SACb,MAAM,EAAE;SACR,QAAQ,CACP,+HAA+H,CAChI;IACH,iBAAiB,EAAE,OAAC;SACjB,MAAM,EAAE;SACR,QAAQ,CACP,uIAAuI,CACxI;IACH,iBAAiB,EAAE,OAAC;SACjB,MAAM,EAAE;SACR,QAAQ,CACP,uIAAuI,CACxI;IACH,KAAK,EAAE,OAAC;SACL,MAAM,EAAE;SACR,QAAQ,CACP,4IAA4I,CAC7I;CACJ,CAAC,CAAC;AACU,QAAA,oCAAoC,GAAG,2CAAmB,CAAC,KAAK,CAC3E,mCAA2B,CAC5B,CAAC;AACW,QAAA,sCAAsC,GACjD,6CAAqB,CAAC,KAAK,CAAC,mCAA2B,CAAC,CAAC;AAE3D,MAAa,qBAAsB,SAAQ,6CAI1C;IAKC;QACE,KAAK,CACH,qBAAqB,CAAC,IAAI,EAC1B,2GAA2G,EAC3G,mCAA2B,EAC3B,4CAAoC,EACpC,8CAAsC,EACtC,IAAI,CACL,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,MAAM,CACV,OAAwB,EACxB,UAAuD,EACvD,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,EACf,UAAU,CAAC,KAAK,CACjB,CAAC;QAEF,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CACb,yCAAyC,UAAU,CAAC,KAAK,0BAA0B,CACpF,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,oBAAoB,UAAU,CAAC,KAAK,EAAE,CAAC;IACxG,CAAC;IAEO,KAAK,CAAC,oBAAoB,CAChC,OAAwB,EACxB,KAAqB,EACrB,eAAuB,EACvB,WAAmB;QAEnB,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,mCAAmC,WAAW,EAAE,CAC3G,CAAC;YACF,iDAAiD;YACjD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAC9C,KAAK,EACL,OAAO,EACP,WAAW,CACZ,CAAC;YACF,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,CACZ,gCAAgC,OAAO,QAAQ,WAAW,EAAE,CAC7D,CAAC;oBACF,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,EACpB,WAAmB;QAEnB,MAAM,eAAe,GAAG,CAAC,CAAC;QAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,eAAe,GAAG,KAAM,CAAC;QACrD,MAAM,WAAW,GAAG,MAAM,WAAW,uGAAuG,CAAC;QAC7I,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;YAC/C,MAAM,EAAE,IAAI;YACZ,CAAC,EAAE,WAAW;YACd,UAAU,EAAE,EAAE;YACd,MAAM,EAAE,aAAa;SACtB,CAAC,CAAC;QACH,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,4CAA4C;aACrD,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;QACH,CAAC;QAED,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;YACvB,kBAAS,CAAC,IAAI,CAAC,qCAAqC,WAAW,EAAE,CAAC,CAAC;YACnE,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;;AA9PH,sDA+PC;AA1PwB,0BAAI,GAAG,mBAAmB,CAAC;AAC1B,iCAAW,GAAG,CAAC,CAAC;AAChB,oCAAc,GAAG,KAAK,CAAC"}
|