donobu 3.19.3 → 3.20.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/apis/ToolsApi.d.ts.map +1 -1
- package/dist/apis/ToolsApi.js +0 -4
- package/dist/apis/ToolsApi.js.map +1 -1
- package/dist/cli/install-donobu-plugin.js +1 -1
- package/dist/cli/install-donobu-plugin.js.map +1 -1
- package/dist/envVars.d.ts +2 -8
- package/dist/envVars.d.ts.map +1 -1
- package/dist/envVars.js +5 -5
- package/dist/envVars.js.map +1 -1
- package/dist/esm/apis/ToolsApi.d.ts.map +1 -1
- package/dist/esm/apis/ToolsApi.js +0 -4
- package/dist/esm/apis/ToolsApi.js.map +1 -1
- package/dist/esm/cli/install-donobu-plugin.js +1 -1
- package/dist/esm/cli/install-donobu-plugin.js.map +1 -1
- package/dist/esm/envVars.d.ts +2 -8
- package/dist/esm/envVars.d.ts.map +1 -1
- package/dist/esm/envVars.js +5 -5
- package/dist/esm/envVars.js.map +1 -1
- package/dist/esm/lib/page/extendPage.d.ts.map +1 -1
- package/dist/esm/lib/page/extendPage.js +2 -2
- package/dist/esm/lib/page/extendPage.js.map +1 -1
- package/dist/esm/lib/test/testExtension.js +2 -2
- package/dist/esm/lib/test/testExtension.js.map +1 -1
- package/dist/esm/lib/test/utils/donobuTestStack.d.ts.map +1 -1
- package/dist/esm/lib/test/utils/donobuTestStack.js +1 -1
- package/dist/esm/lib/test/utils/donobuTestStack.js.map +1 -1
- package/dist/esm/lib/test/utils/selfHealing.d.ts.map +1 -1
- package/dist/esm/lib/test/utils/selfHealing.js +0 -2
- package/dist/esm/lib/test/utils/selfHealing.js.map +1 -1
- package/dist/esm/main.d.ts +9 -1
- package/dist/esm/main.d.ts.map +1 -1
- package/dist/esm/main.js +14 -4
- package/dist/esm/main.js.map +1 -1
- package/dist/esm/managers/AdminApiController.d.ts +1 -1
- package/dist/esm/managers/AdminApiController.d.ts.map +1 -1
- package/dist/esm/managers/AdminApiController.js.map +1 -1
- package/dist/esm/managers/DonobuFlowsManager.d.ts.map +1 -1
- package/dist/esm/managers/DonobuFlowsManager.js +2 -2
- package/dist/esm/managers/DonobuFlowsManager.js.map +1 -1
- package/dist/esm/managers/DonobuStack.d.ts +2 -16
- package/dist/esm/managers/DonobuStack.d.ts.map +1 -1
- package/dist/esm/managers/DonobuStack.js +1 -1
- package/dist/esm/managers/DonobuStack.js.map +1 -1
- package/dist/esm/managers/PluginLoader.d.ts +9 -4
- package/dist/esm/managers/PluginLoader.d.ts.map +1 -1
- package/dist/esm/managers/PluginLoader.js +24 -9
- package/dist/esm/managers/PluginLoader.js.map +1 -1
- package/dist/esm/managers/ToolManager.d.ts +5 -0
- package/dist/esm/managers/ToolManager.d.ts.map +1 -1
- package/dist/esm/managers/ToolManager.js +9 -5
- package/dist/esm/managers/ToolManager.js.map +1 -1
- package/dist/esm/persistence/PersistencePlugin.d.ts +29 -0
- package/dist/esm/persistence/PersistencePlugin.d.ts.map +1 -0
- package/dist/esm/persistence/PersistencePlugin.js +21 -0
- package/dist/esm/persistence/PersistencePlugin.js.map +1 -0
- package/dist/esm/persistence/env/EnvPersistenceRegistry.d.ts +1 -1
- package/dist/esm/persistence/env/EnvPersistenceRegistry.d.ts.map +1 -1
- package/dist/esm/persistence/env/EnvPersistenceRegistry.js +11 -15
- package/dist/esm/persistence/env/EnvPersistenceRegistry.js.map +1 -1
- package/dist/esm/persistence/flows/FlowsPersistenceRegistry.d.ts +1 -1
- package/dist/esm/persistence/flows/FlowsPersistenceRegistry.d.ts.map +1 -1
- package/dist/esm/persistence/flows/FlowsPersistenceRegistry.js +11 -15
- package/dist/esm/persistence/flows/FlowsPersistenceRegistry.js.map +1 -1
- package/dist/esm/utils/MiscUtils.js +2 -2
- package/dist/esm/utils/MiscUtils.js.map +1 -1
- package/dist/lib/page/extendPage.d.ts.map +1 -1
- package/dist/lib/page/extendPage.js +2 -2
- package/dist/lib/page/extendPage.js.map +1 -1
- package/dist/lib/test/testExtension.js +2 -2
- package/dist/lib/test/testExtension.js.map +1 -1
- package/dist/lib/test/utils/donobuTestStack.d.ts.map +1 -1
- package/dist/lib/test/utils/donobuTestStack.js +1 -1
- package/dist/lib/test/utils/donobuTestStack.js.map +1 -1
- package/dist/lib/test/utils/selfHealing.d.ts.map +1 -1
- package/dist/lib/test/utils/selfHealing.js +0 -2
- package/dist/lib/test/utils/selfHealing.js.map +1 -1
- package/dist/main.d.ts +9 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +14 -4
- package/dist/main.js.map +1 -1
- package/dist/managers/AdminApiController.d.ts +1 -1
- package/dist/managers/AdminApiController.d.ts.map +1 -1
- package/dist/managers/AdminApiController.js.map +1 -1
- package/dist/managers/DonobuFlowsManager.d.ts.map +1 -1
- package/dist/managers/DonobuFlowsManager.js +2 -2
- package/dist/managers/DonobuFlowsManager.js.map +1 -1
- package/dist/managers/DonobuStack.d.ts +2 -16
- package/dist/managers/DonobuStack.d.ts.map +1 -1
- package/dist/managers/DonobuStack.js +1 -1
- package/dist/managers/DonobuStack.js.map +1 -1
- package/dist/managers/PluginLoader.d.ts +9 -4
- package/dist/managers/PluginLoader.d.ts.map +1 -1
- package/dist/managers/PluginLoader.js +24 -9
- package/dist/managers/PluginLoader.js.map +1 -1
- package/dist/managers/ToolManager.d.ts +5 -0
- package/dist/managers/ToolManager.d.ts.map +1 -1
- package/dist/managers/ToolManager.js +9 -5
- package/dist/managers/ToolManager.js.map +1 -1
- package/dist/persistence/PersistencePlugin.d.ts +29 -0
- package/dist/persistence/PersistencePlugin.d.ts.map +1 -0
- package/dist/persistence/PersistencePlugin.js +21 -0
- package/dist/persistence/PersistencePlugin.js.map +1 -0
- package/dist/persistence/env/EnvPersistenceRegistry.d.ts +1 -1
- package/dist/persistence/env/EnvPersistenceRegistry.d.ts.map +1 -1
- package/dist/persistence/env/EnvPersistenceRegistry.js +11 -15
- package/dist/persistence/env/EnvPersistenceRegistry.js.map +1 -1
- package/dist/persistence/flows/FlowsPersistenceRegistry.d.ts +1 -1
- package/dist/persistence/flows/FlowsPersistenceRegistry.d.ts.map +1 -1
- package/dist/persistence/flows/FlowsPersistenceRegistry.js +11 -15
- package/dist/persistence/flows/FlowsPersistenceRegistry.js.map +1 -1
- package/dist/utils/MiscUtils.js +2 -2
- package/dist/utils/MiscUtils.js.map +1 -1
- package/package.json +2 -7
- package/dist/esm/persistence/env/EnvPersistenceAwsS3.d.ts +0 -31
- package/dist/esm/persistence/env/EnvPersistenceAwsS3.d.ts.map +0 -1
- package/dist/esm/persistence/env/EnvPersistenceAwsS3.js +0 -117
- package/dist/esm/persistence/env/EnvPersistenceAwsS3.js.map +0 -1
- package/dist/esm/persistence/env/EnvPersistenceGoogleCloudStorage.d.ts +0 -30
- package/dist/esm/persistence/env/EnvPersistenceGoogleCloudStorage.d.ts.map +0 -1
- package/dist/esm/persistence/env/EnvPersistenceGoogleCloudStorage.js +0 -131
- package/dist/esm/persistence/env/EnvPersistenceGoogleCloudStorage.js.map +0 -1
- package/dist/esm/persistence/flows/FlowsPersistenceAwsS3.d.ts +0 -71
- package/dist/esm/persistence/flows/FlowsPersistenceAwsS3.d.ts.map +0 -1
- package/dist/esm/persistence/flows/FlowsPersistenceAwsS3.js +0 -487
- package/dist/esm/persistence/flows/FlowsPersistenceAwsS3.js.map +0 -1
- package/dist/esm/persistence/flows/FlowsPersistenceGoogleCloudStorage.d.ts +0 -71
- package/dist/esm/persistence/flows/FlowsPersistenceGoogleCloudStorage.d.ts.map +0 -1
- package/dist/esm/persistence/flows/FlowsPersistenceGoogleCloudStorage.js +0 -444
- package/dist/esm/persistence/flows/FlowsPersistenceGoogleCloudStorage.js.map +0 -1
- package/dist/esm/tools/SolveCaptcha.d.ts +0 -19
- package/dist/esm/tools/SolveCaptcha.d.ts.map +0 -1
- package/dist/esm/tools/SolveCaptcha.js +0 -36
- package/dist/esm/tools/SolveCaptcha.js.map +0 -1
- package/dist/esm/tools/SolveMfaChallenge.d.ts +0 -45
- package/dist/esm/tools/SolveMfaChallenge.d.ts.map +0 -1
- package/dist/esm/tools/SolveMfaChallenge.js +0 -214
- package/dist/esm/tools/SolveMfaChallenge.js.map +0 -1
- package/dist/persistence/env/EnvPersistenceAwsS3.d.ts +0 -31
- package/dist/persistence/env/EnvPersistenceAwsS3.d.ts.map +0 -1
- package/dist/persistence/env/EnvPersistenceAwsS3.js +0 -117
- package/dist/persistence/env/EnvPersistenceAwsS3.js.map +0 -1
- package/dist/persistence/env/EnvPersistenceGoogleCloudStorage.d.ts +0 -30
- package/dist/persistence/env/EnvPersistenceGoogleCloudStorage.d.ts.map +0 -1
- package/dist/persistence/env/EnvPersistenceGoogleCloudStorage.js +0 -131
- package/dist/persistence/env/EnvPersistenceGoogleCloudStorage.js.map +0 -1
- package/dist/persistence/flows/FlowsPersistenceAwsS3.d.ts +0 -71
- package/dist/persistence/flows/FlowsPersistenceAwsS3.d.ts.map +0 -1
- package/dist/persistence/flows/FlowsPersistenceAwsS3.js +0 -487
- package/dist/persistence/flows/FlowsPersistenceAwsS3.js.map +0 -1
- package/dist/persistence/flows/FlowsPersistenceGoogleCloudStorage.d.ts +0 -71
- package/dist/persistence/flows/FlowsPersistenceGoogleCloudStorage.d.ts.map +0 -1
- package/dist/persistence/flows/FlowsPersistenceGoogleCloudStorage.js +0 -444
- package/dist/persistence/flows/FlowsPersistenceGoogleCloudStorage.js.map +0 -1
- package/dist/tools/SolveCaptcha.d.ts +0 -19
- package/dist/tools/SolveCaptcha.d.ts.map +0 -1
- package/dist/tools/SolveCaptcha.js +0 -36
- package/dist/tools/SolveCaptcha.js.map +0 -1
- package/dist/tools/SolveMfaChallenge.d.ts +0 -45
- package/dist/tools/SolveMfaChallenge.d.ts.map +0 -1
- package/dist/tools/SolveMfaChallenge.js +0 -214
- package/dist/tools/SolveMfaChallenge.js.map +0 -1
|
@@ -1,214 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.SolveMfaChallengeTool = exports.AnnotationBasedSolveMfaChallengeSchema = exports.SelectorBasedSolveMfaChallengeSchema = exports.SolveMfaChallengeCoreSchema = void 0;
|
|
4
|
-
const gmail_1 = require("@googleapis/gmail");
|
|
5
|
-
const googleapis_common_1 = require("googleapis-common");
|
|
6
|
-
const v4_1 = require("zod/v4");
|
|
7
|
-
const Logger_1 = require("../utils/Logger");
|
|
8
|
-
const MiscUtils_1 = require("../utils/MiscUtils");
|
|
9
|
-
const ReplayableInteraction_1 = require("./ReplayableInteraction");
|
|
10
|
-
exports.SolveMfaChallengeCoreSchema = v4_1.z.object({
|
|
11
|
-
gmailClientId: v4_1.z
|
|
12
|
-
.string()
|
|
13
|
-
.describe('The Gmail client ID. This should be passed using an environment variable reference like {{$.env.GMAIL_CLIENT_ID}} or similar.'),
|
|
14
|
-
gmailClientSecret: v4_1.z
|
|
15
|
-
.string()
|
|
16
|
-
.describe('The Gmail client secret. This should be passed using an environment variable reference like {{$.env.GMAIL_CLIENT_SECRET}} or similar.'),
|
|
17
|
-
gmailRefreshToken: v4_1.z
|
|
18
|
-
.string()
|
|
19
|
-
.describe('The Gmail refresh token. This should be passed using an environment variable reference like {{$.env.GMAIL_REFRESH_TOKEN}} or similar.'),
|
|
20
|
-
email: v4_1.z
|
|
21
|
-
.string()
|
|
22
|
-
.describe('The specific email address to filter MFA emails for. This can include variants like someemail+variant@gmail.com to target specific logins.'),
|
|
23
|
-
});
|
|
24
|
-
exports.SelectorBasedSolveMfaChallengeSchema = v4_1.z.object({
|
|
25
|
-
...ReplayableInteraction_1.SelectorBasedSchema.shape,
|
|
26
|
-
...exports.SolveMfaChallengeCoreSchema.shape,
|
|
27
|
-
});
|
|
28
|
-
exports.AnnotationBasedSolveMfaChallengeSchema = v4_1.z.object({
|
|
29
|
-
...ReplayableInteraction_1.AnnotationBasedSchema.shape,
|
|
30
|
-
...exports.SolveMfaChallengeCoreSchema.shape,
|
|
31
|
-
});
|
|
32
|
-
class SolveMfaChallengeTool extends ReplayableInteraction_1.ReplayableInteraction {
|
|
33
|
-
constructor() {
|
|
34
|
-
super(SolveMfaChallengeTool.NAME, 'Scan Gmail-based emails for MFA verification codes and automatically input them into the specified field.', exports.SolveMfaChallengeCoreSchema, exports.SelectorBasedSolveMfaChallengeSchema, exports.AnnotationBasedSolveMfaChallengeSchema, true);
|
|
35
|
-
}
|
|
36
|
-
async invoke(context, parameters, handles) {
|
|
37
|
-
const waitTimeSeconds = 60;
|
|
38
|
-
// Create OAuth client
|
|
39
|
-
const oAuth2Client = new googleapis_common_1.OAuth2Client(parameters.gmailClientId, parameters.gmailClientSecret);
|
|
40
|
-
oAuth2Client.setCredentials({
|
|
41
|
-
refresh_token: parameters.gmailRefreshToken,
|
|
42
|
-
});
|
|
43
|
-
const gmailClient = (0, gmail_1.gmail)({ version: 'v1', auth: oAuth2Client });
|
|
44
|
-
// Extract the MFA code from emails
|
|
45
|
-
const mfaCode = await this.getMfaCodeFromEmails(context, gmailClient, waitTimeSeconds, parameters.email);
|
|
46
|
-
if (!mfaCode) {
|
|
47
|
-
throw new Error(`Could not find MFA code in emails for ${parameters.email} after multiple attempts`);
|
|
48
|
-
}
|
|
49
|
-
// Input the MFA code into the element.
|
|
50
|
-
//
|
|
51
|
-
// Note: We focus the element then send raw keyboard events rather than
|
|
52
|
-
// doing 'element.press' since some MFA systems automatically progress
|
|
53
|
-
// focus across input fields when each character is entered.
|
|
54
|
-
await handles.target.focus();
|
|
55
|
-
for (const char of mfaCode) {
|
|
56
|
-
await context.page.current.keyboard.press(char, {
|
|
57
|
-
delay: MiscUtils_1.MiscUtils.generateHumanLikeKeyPressDurationInMs(char),
|
|
58
|
-
});
|
|
59
|
-
}
|
|
60
|
-
// Submit the form if necessary
|
|
61
|
-
try {
|
|
62
|
-
const char = 'Enter';
|
|
63
|
-
await context.page.current.keyboard.press(char, {
|
|
64
|
-
delay: MiscUtils_1.MiscUtils.generateHumanLikeKeyPressDurationInMs(char),
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
catch (_error) {
|
|
68
|
-
// Some MFA systems automatically submit themselves, so if we have
|
|
69
|
-
// gotten this far, do not fail if the 'Enter' key fails to land.
|
|
70
|
-
}
|
|
71
|
-
return `Successfully retrieved and inputted MFA code "${mfaCode}" into field for ${parameters.email}`;
|
|
72
|
-
}
|
|
73
|
-
async getMfaCodeFromEmails(context, gmail, waitTimeSeconds, targetEmail) {
|
|
74
|
-
const seenIds = new Set();
|
|
75
|
-
const startTime = Date.now();
|
|
76
|
-
const endTime = startTime + waitTimeSeconds * 1000;
|
|
77
|
-
let attempt = 0;
|
|
78
|
-
let lastEmailBody = null;
|
|
79
|
-
while (Date.now() < endTime &&
|
|
80
|
-
attempt < SolveMfaChallengeTool.MAX_RETRIES) {
|
|
81
|
-
attempt++;
|
|
82
|
-
Logger_1.appLogger.info(`Attempt ${attempt} of ${SolveMfaChallengeTool.MAX_RETRIES} to find MFA code in emails for ${targetEmail}`);
|
|
83
|
-
// Get the body of the latest email for the user.
|
|
84
|
-
const emailBody = await this.fetchLatestMfaEmail(gmail, seenIds, targetEmail);
|
|
85
|
-
// Only process if the email body has changed.
|
|
86
|
-
if (emailBody && emailBody !== lastEmailBody) {
|
|
87
|
-
lastEmailBody = emailBody;
|
|
88
|
-
// Use the GPT client to extract the MFA code.
|
|
89
|
-
const mfaCode = await this.extractMfaCodeWithGpt(context, emailBody);
|
|
90
|
-
if (mfaCode) {
|
|
91
|
-
Logger_1.appLogger.info(`Successfully found MFA code: ${mfaCode} for ${targetEmail}`);
|
|
92
|
-
return mfaCode;
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
// Wait before retrying.
|
|
96
|
-
await new Promise((resolve) => {
|
|
97
|
-
setTimeout(resolve, SolveMfaChallengeTool.RETRY_DELAY_MS);
|
|
98
|
-
});
|
|
99
|
-
}
|
|
100
|
-
return null;
|
|
101
|
-
}
|
|
102
|
-
async fetchLatestMfaEmail(gmail, seenIds, targetEmail) {
|
|
103
|
-
const lookbackMinutes = 2;
|
|
104
|
-
const cutoff = Date.now() - lookbackMinutes * 60_000;
|
|
105
|
-
const searchQuery = `to:${targetEmail} subject:(code OR security OR authentication OR verification OR confirm OR verify) is:unread in:inbox`;
|
|
106
|
-
const threadRes = await gmail.users.threads.list({
|
|
107
|
-
userId: 'me',
|
|
108
|
-
q: searchQuery,
|
|
109
|
-
maxResults: 25,
|
|
110
|
-
fields: 'threads(id)',
|
|
111
|
-
});
|
|
112
|
-
const candidates = [];
|
|
113
|
-
for (const th of threadRes.data.threads ?? []) {
|
|
114
|
-
const t = await gmail.users.threads.get({
|
|
115
|
-
userId: 'me',
|
|
116
|
-
id: th.id,
|
|
117
|
-
format: 'metadata',
|
|
118
|
-
fields: 'messages(id,internalDate,labelIds,payload)',
|
|
119
|
-
});
|
|
120
|
-
const m = t.data.messages.at(-1); // newest in that thread
|
|
121
|
-
if (!m || seenIds.has(m.id)) {
|
|
122
|
-
continue;
|
|
123
|
-
}
|
|
124
|
-
else if (!m.labelIds?.includes('UNREAD')) {
|
|
125
|
-
continue;
|
|
126
|
-
}
|
|
127
|
-
const ts = Number(m.internalDate);
|
|
128
|
-
if (ts >= cutoff) {
|
|
129
|
-
candidates.push({ id: m.id, ts });
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
if (!candidates.length) {
|
|
133
|
-
Logger_1.appLogger.info(`No MFA email candidates found for ${targetEmail}`);
|
|
134
|
-
return null;
|
|
135
|
-
}
|
|
136
|
-
const winner = candidates.sort((a, b) => b.ts - a.ts)[0];
|
|
137
|
-
seenIds.add(winner.id);
|
|
138
|
-
const full = await gmail.users.messages.get({
|
|
139
|
-
userId: 'me',
|
|
140
|
-
id: winner.id,
|
|
141
|
-
format: 'full',
|
|
142
|
-
});
|
|
143
|
-
return this.extractBody(full.data);
|
|
144
|
-
}
|
|
145
|
-
extractBody(email) {
|
|
146
|
-
const parts = email.payload?.parts;
|
|
147
|
-
let body = '';
|
|
148
|
-
if (parts) {
|
|
149
|
-
// Try to find plain text part first
|
|
150
|
-
const textPart = parts.find((part) => part.mimeType === 'text/plain');
|
|
151
|
-
if (textPart?.body?.data) {
|
|
152
|
-
body = this.decodeBase64Url(textPart.body.data);
|
|
153
|
-
}
|
|
154
|
-
else {
|
|
155
|
-
// Fall back to HTML part if no plain text
|
|
156
|
-
const htmlPart = parts.find((part) => part.mimeType === 'text/html');
|
|
157
|
-
if (htmlPart?.body?.data) {
|
|
158
|
-
body = this.decodeBase64Url(htmlPart.body.data);
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
else if (email.payload?.body?.data) {
|
|
163
|
-
// Handle case where email has no parts
|
|
164
|
-
body = this.decodeBase64Url(email.payload.body.data);
|
|
165
|
-
}
|
|
166
|
-
if (!body) {
|
|
167
|
-
Logger_1.appLogger.warn('Email found but body could not be decoded');
|
|
168
|
-
return null;
|
|
169
|
-
}
|
|
170
|
-
return body;
|
|
171
|
-
}
|
|
172
|
-
async extractMfaCodeWithGpt(context, emailBody) {
|
|
173
|
-
// Use GPT to extract the MFA code from the email body
|
|
174
|
-
const systemMessage = {
|
|
175
|
-
type: 'system',
|
|
176
|
-
text: `You are a tool that extracts MFA (Multi-Factor Authentication) verification codes from emails.
|
|
177
|
-
Your task is to identify and extract ONLY the verification code from the email.
|
|
178
|
-
If multiple potential codes exist, choose the most likely one based on context (usually near phrases like "verification code", "security code", etc.)
|
|
179
|
-
Return ONLY the code with no additional text, punctuation, or explanation.
|
|
180
|
-
If no code can be found, respond with "NO_CODE_FOUND".`,
|
|
181
|
-
};
|
|
182
|
-
const userMessage = {
|
|
183
|
-
type: 'user',
|
|
184
|
-
items: [
|
|
185
|
-
{
|
|
186
|
-
type: 'text',
|
|
187
|
-
text: `Extract the verification code from this email:
|
|
188
|
-
\`\`\`
|
|
189
|
-
${emailBody}
|
|
190
|
-
\`\`\``,
|
|
191
|
-
},
|
|
192
|
-
],
|
|
193
|
-
};
|
|
194
|
-
const response = await context.gptClient.getMessage([
|
|
195
|
-
systemMessage,
|
|
196
|
-
userMessage,
|
|
197
|
-
]);
|
|
198
|
-
const extractedCode = response.text.trim();
|
|
199
|
-
if (extractedCode === 'NO_CODE_FOUND') {
|
|
200
|
-
return null;
|
|
201
|
-
}
|
|
202
|
-
return extractedCode;
|
|
203
|
-
}
|
|
204
|
-
decodeBase64Url(data) {
|
|
205
|
-
const normalized = data.replace(/-/g, '+').replace(/_/g, '/');
|
|
206
|
-
const padded = normalized + '='.repeat((4 - (normalized.length % 4)) % 4);
|
|
207
|
-
return Buffer.from(padded, 'base64').toString('utf-8');
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
exports.SolveMfaChallengeTool = SolveMfaChallengeTool;
|
|
211
|
-
SolveMfaChallengeTool.NAME = 'solveMfaChallenge';
|
|
212
|
-
SolveMfaChallengeTool.MAX_RETRIES = 6;
|
|
213
|
-
SolveMfaChallengeTool.RETRY_DELAY_MS = 10000;
|
|
214
|
-
//# sourceMappingURL=SolveMfaChallenge.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SolveMfaChallenge.js","sourceRoot":"","sources":["../../../src/tools/SolveMfaChallenge.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import type { EnvPersistence } from './EnvPersistence';
|
|
2
|
-
/**
|
|
3
|
-
* A persistence implementation that uses AWS S3.
|
|
4
|
-
* Ensure AWS credentials are properly configured in your environment,
|
|
5
|
-
* or provide them directly in the constructor.
|
|
6
|
-
*/
|
|
7
|
-
export declare class EnvPersistenceAwsS3 implements EnvPersistence {
|
|
8
|
-
private static readonly ENVIRONMENT_DATA_PREFIX;
|
|
9
|
-
private readonly s3Client;
|
|
10
|
-
private readonly bucketName;
|
|
11
|
-
/**
|
|
12
|
-
* Creates a new instance of the AWS S3 persistence layer.
|
|
13
|
-
*
|
|
14
|
-
* @param bucketName The name of the S3 bucket to use for storage
|
|
15
|
-
* @param region AWS region (defaults to 'us-east-1')
|
|
16
|
-
* @param credentials Optional AWS credentials (if not provided, will use environment variables)
|
|
17
|
-
*/
|
|
18
|
-
constructor(bucketName: string, region: string, credentials?: {
|
|
19
|
-
accessKeyId: string;
|
|
20
|
-
secretAccessKey: string;
|
|
21
|
-
});
|
|
22
|
-
setEnvironmentDatum(key: string, value: string): Promise<void>;
|
|
23
|
-
deleteEnvironmentDatum(key: string): Promise<void>;
|
|
24
|
-
getEnvironmentDatum(key: string): Promise<string | undefined>;
|
|
25
|
-
getEnvironmentData(): Promise<Record<string, string>>;
|
|
26
|
-
/**
|
|
27
|
-
* Utility method to stream S3 object data to a Buffer
|
|
28
|
-
*/
|
|
29
|
-
private streamToBuffer;
|
|
30
|
-
}
|
|
31
|
-
//# sourceMappingURL=EnvPersistenceAwsS3.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"EnvPersistenceAwsS3.d.ts","sourceRoot":"","sources":["../../../src/persistence/env/EnvPersistenceAwsS3.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD;;;;GAIG;AACH,qBAAa,mBAAoB,YAAW,cAAc;IACxD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,uBAAuB,CAAkB;IAEjE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAW;IACpC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IAEpC;;;;;;OAMG;gBAED,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,WAAW,CAAC,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,CAAA;KAAE;IASnD,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB9D,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBlD,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAqB7D,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAmDlE;;OAEG;YACW,cAAc;CAQ7B"}
|
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.EnvPersistenceAwsS3 = void 0;
|
|
4
|
-
const client_s3_1 = require("@aws-sdk/client-s3");
|
|
5
|
-
const Logger_1 = require("../../utils/Logger");
|
|
6
|
-
/**
|
|
7
|
-
* A persistence implementation that uses AWS S3.
|
|
8
|
-
* Ensure AWS credentials are properly configured in your environment,
|
|
9
|
-
* or provide them directly in the constructor.
|
|
10
|
-
*/
|
|
11
|
-
class EnvPersistenceAwsS3 {
|
|
12
|
-
/**
|
|
13
|
-
* Creates a new instance of the AWS S3 persistence layer.
|
|
14
|
-
*
|
|
15
|
-
* @param bucketName The name of the S3 bucket to use for storage
|
|
16
|
-
* @param region AWS region (defaults to 'us-east-1')
|
|
17
|
-
* @param credentials Optional AWS credentials (if not provided, will use environment variables)
|
|
18
|
-
*/
|
|
19
|
-
constructor(bucketName, region, credentials) {
|
|
20
|
-
this.bucketName = bucketName;
|
|
21
|
-
this.s3Client = new client_s3_1.S3Client({
|
|
22
|
-
region,
|
|
23
|
-
credentials,
|
|
24
|
-
});
|
|
25
|
-
}
|
|
26
|
-
async setEnvironmentDatum(key, value) {
|
|
27
|
-
if (!key) {
|
|
28
|
-
throw new Error('Key cannot be empty');
|
|
29
|
-
}
|
|
30
|
-
const objectKey = `${EnvPersistenceAwsS3.ENVIRONMENT_DATA_PREFIX}${encodeURIComponent(key)}`;
|
|
31
|
-
await this.s3Client.send(new client_s3_1.PutObjectCommand({
|
|
32
|
-
Bucket: this.bucketName,
|
|
33
|
-
Key: objectKey,
|
|
34
|
-
Body: value,
|
|
35
|
-
ContentType: 'text/plain',
|
|
36
|
-
}));
|
|
37
|
-
}
|
|
38
|
-
async deleteEnvironmentDatum(key) {
|
|
39
|
-
if (!key) {
|
|
40
|
-
return; // No-op if key is empty
|
|
41
|
-
}
|
|
42
|
-
const objectKey = `${EnvPersistenceAwsS3.ENVIRONMENT_DATA_PREFIX}${encodeURIComponent(key)}`;
|
|
43
|
-
try {
|
|
44
|
-
await this.s3Client.send(new client_s3_1.DeleteObjectCommand({
|
|
45
|
-
Bucket: this.bucketName,
|
|
46
|
-
Key: objectKey,
|
|
47
|
-
}));
|
|
48
|
-
}
|
|
49
|
-
catch (error) {
|
|
50
|
-
// Ignore errors if the object doesn't exist
|
|
51
|
-
Logger_1.appLogger.warn(`Failed to delete environment data for key: ${key}`, error);
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
async getEnvironmentDatum(key) {
|
|
55
|
-
if (!key) {
|
|
56
|
-
return undefined;
|
|
57
|
-
}
|
|
58
|
-
const objectKey = `${EnvPersistenceAwsS3.ENVIRONMENT_DATA_PREFIX}${encodeURIComponent(key)}`;
|
|
59
|
-
const response = await this.s3Client.send(new client_s3_1.GetObjectCommand({
|
|
60
|
-
Bucket: this.bucketName,
|
|
61
|
-
Key: objectKey,
|
|
62
|
-
}));
|
|
63
|
-
if (!response.Body) {
|
|
64
|
-
return undefined;
|
|
65
|
-
}
|
|
66
|
-
const data = await this.streamToBuffer(response.Body);
|
|
67
|
-
return data.toString('utf-8');
|
|
68
|
-
}
|
|
69
|
-
async getEnvironmentData() {
|
|
70
|
-
const result = {};
|
|
71
|
-
// List all objects with the environment prefix
|
|
72
|
-
const response = await this.s3Client.send(new client_s3_1.ListObjectsV2Command({
|
|
73
|
-
Bucket: this.bucketName,
|
|
74
|
-
Prefix: EnvPersistenceAwsS3.ENVIRONMENT_DATA_PREFIX,
|
|
75
|
-
}));
|
|
76
|
-
if (!response.Contents || response.Contents.length === 0) {
|
|
77
|
-
return result;
|
|
78
|
-
}
|
|
79
|
-
// Process each object
|
|
80
|
-
for (const object of response.Contents) {
|
|
81
|
-
if (object.Key) {
|
|
82
|
-
try {
|
|
83
|
-
// Extract the key from the object path
|
|
84
|
-
const encodedKey = object.Key.substring(EnvPersistenceAwsS3.ENVIRONMENT_DATA_PREFIX.length);
|
|
85
|
-
const key = decodeURIComponent(encodedKey);
|
|
86
|
-
// Get the object content
|
|
87
|
-
const getResponse = await this.s3Client.send(new client_s3_1.GetObjectCommand({
|
|
88
|
-
Bucket: this.bucketName,
|
|
89
|
-
Key: object.Key,
|
|
90
|
-
}));
|
|
91
|
-
if (getResponse.Body) {
|
|
92
|
-
const data = await this.streamToBuffer(getResponse.Body);
|
|
93
|
-
result[key] = data.toString('utf-8');
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
catch (error) {
|
|
97
|
-
Logger_1.appLogger.warn(`Failed to get environment data for key: ${object.Key}`, error);
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
return result;
|
|
102
|
-
}
|
|
103
|
-
/**
|
|
104
|
-
* Utility method to stream S3 object data to a Buffer
|
|
105
|
-
*/
|
|
106
|
-
async streamToBuffer(stream) {
|
|
107
|
-
return new Promise((resolve, reject) => {
|
|
108
|
-
const chunks = [];
|
|
109
|
-
stream.on('data', (chunk) => chunks.push(Buffer.from(chunk)));
|
|
110
|
-
stream.on('error', reject);
|
|
111
|
-
stream.on('end', () => resolve(Buffer.concat(chunks)));
|
|
112
|
-
});
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
exports.EnvPersistenceAwsS3 = EnvPersistenceAwsS3;
|
|
116
|
-
EnvPersistenceAwsS3.ENVIRONMENT_DATA_PREFIX = 'environment/';
|
|
117
|
-
//# sourceMappingURL=EnvPersistenceAwsS3.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"EnvPersistenceAwsS3.js","sourceRoot":"","sources":["../../../src/persistence/env/EnvPersistenceAwsS3.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import type { EnvPersistence } from './EnvPersistence';
|
|
2
|
-
/**
|
|
3
|
-
* A persistence implementation that uses Google Cloud Storage.
|
|
4
|
-
*
|
|
5
|
-
* If you are running locally, be sure to have the Google Cloud CLI installed
|
|
6
|
-
* so that you can authenticate using `gcloud auth application-default login`
|
|
7
|
-
* before running Donobu.
|
|
8
|
-
*
|
|
9
|
-
* If Donobu is being run in the Google cloud, be sure that the service account
|
|
10
|
-
* in which it is being run has permissions to read and write the Google Cloud
|
|
11
|
-
* Storage bucket specified as a constructor argument.
|
|
12
|
-
*/
|
|
13
|
-
export declare class EnvPersistenceGoogleCloudStorage implements EnvPersistence {
|
|
14
|
-
private readonly bucket;
|
|
15
|
-
private static readonly ENVIRONMENT_DATA_PREFIX;
|
|
16
|
-
/**
|
|
17
|
-
* Dynamically imports the Google Cloud Storage library.
|
|
18
|
-
* This helps to delay loading the library until it's actually needed.
|
|
19
|
-
*/
|
|
20
|
-
private static importGoogleCloudStorage;
|
|
21
|
-
static create(bucketName: string): Promise<EnvPersistenceGoogleCloudStorage>;
|
|
22
|
-
private constructor();
|
|
23
|
-
setEnvironmentDatum(key: string, value: string): Promise<void>;
|
|
24
|
-
deleteEnvironmentDatum(key: string): Promise<void>;
|
|
25
|
-
getEnvironmentDatum(key: string): Promise<string | undefined>;
|
|
26
|
-
getEnvironmentData(): Promise<Record<string, string>>;
|
|
27
|
-
private uploadString;
|
|
28
|
-
private downloadString;
|
|
29
|
-
}
|
|
30
|
-
//# sourceMappingURL=EnvPersistenceGoogleCloudStorage.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"EnvPersistenceGoogleCloudStorage.d.ts","sourceRoot":"","sources":["../../../src/persistence/env/EnvPersistenceGoogleCloudStorage.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AASvD;;;;;;;;;;GAUG;AACH,qBAAa,gCAAiC,YAAW,cAAc;IA6CjD,OAAO,CAAC,QAAQ,CAAC,MAAM;IA5C3C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,uBAAuB,CAAkB;IAEjE;;;OAGG;mBACkB,wBAAwB;WAezB,MAAM,CACxB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,gCAAgC,CAAC;IAqB5C,OAAO;IAEM,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAS9D,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBlD,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAS7D,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YA+BpD,YAAY;YAYZ,cAAc;CAW7B"}
|
|
@@ -1,131 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.EnvPersistenceGoogleCloudStorage = void 0;
|
|
4
|
-
const Logger_1 = require("../../utils/Logger");
|
|
5
|
-
/**
|
|
6
|
-
* A persistence implementation that uses Google Cloud Storage.
|
|
7
|
-
*
|
|
8
|
-
* If you are running locally, be sure to have the Google Cloud CLI installed
|
|
9
|
-
* so that you can authenticate using `gcloud auth application-default login`
|
|
10
|
-
* before running Donobu.
|
|
11
|
-
*
|
|
12
|
-
* If Donobu is being run in the Google cloud, be sure that the service account
|
|
13
|
-
* in which it is being run has permissions to read and write the Google Cloud
|
|
14
|
-
* Storage bucket specified as a constructor argument.
|
|
15
|
-
*/
|
|
16
|
-
class EnvPersistenceGoogleCloudStorage {
|
|
17
|
-
/**
|
|
18
|
-
* Dynamically imports the Google Cloud Storage library.
|
|
19
|
-
* This helps to delay loading the library until it's actually needed.
|
|
20
|
-
*/
|
|
21
|
-
static async importGoogleCloudStorage() {
|
|
22
|
-
try {
|
|
23
|
-
// Dynamic import to delay loading until needed
|
|
24
|
-
const module = await import('@google-cloud/storage');
|
|
25
|
-
return {
|
|
26
|
-
Storage: module.Storage,
|
|
27
|
-
};
|
|
28
|
-
}
|
|
29
|
-
catch (error) {
|
|
30
|
-
Logger_1.appLogger.error('Failed to import Google Cloud Storage', error);
|
|
31
|
-
throw new Error('Failed to import Google Cloud Storage library');
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
static async create(bucketName) {
|
|
35
|
-
// Only import the Google Cloud Storage library when creating an instance
|
|
36
|
-
const { Storage } = await EnvPersistenceGoogleCloudStorage.importGoogleCloudStorage();
|
|
37
|
-
const storage = new Storage();
|
|
38
|
-
const bucket = storage.bucket(bucketName);
|
|
39
|
-
return bucket
|
|
40
|
-
.exists()
|
|
41
|
-
.then(([exists]) => {
|
|
42
|
-
if (!exists) {
|
|
43
|
-
throw new Error(`Bucket ${bucketName} does not exist.`);
|
|
44
|
-
}
|
|
45
|
-
else {
|
|
46
|
-
return bucket;
|
|
47
|
-
}
|
|
48
|
-
})
|
|
49
|
-
.then((bucket) => {
|
|
50
|
-
return new EnvPersistenceGoogleCloudStorage(bucket);
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
|
-
constructor(bucket) {
|
|
54
|
-
this.bucket = bucket;
|
|
55
|
-
}
|
|
56
|
-
async setEnvironmentDatum(key, value) {
|
|
57
|
-
if (!key) {
|
|
58
|
-
throw new Error('Key cannot be empty');
|
|
59
|
-
}
|
|
60
|
-
const objectName = `${EnvPersistenceGoogleCloudStorage.ENVIRONMENT_DATA_PREFIX}${encodeURIComponent(key)}`;
|
|
61
|
-
await this.uploadString(objectName, value, 'text/plain');
|
|
62
|
-
}
|
|
63
|
-
async deleteEnvironmentDatum(key) {
|
|
64
|
-
if (!key) {
|
|
65
|
-
return; // No-op if key is empty
|
|
66
|
-
}
|
|
67
|
-
const objectName = `${EnvPersistenceGoogleCloudStorage.ENVIRONMENT_DATA_PREFIX}${encodeURIComponent(key)}`;
|
|
68
|
-
const file = this.bucket.file(objectName);
|
|
69
|
-
try {
|
|
70
|
-
const [exists] = await file.exists();
|
|
71
|
-
if (exists) {
|
|
72
|
-
await file.delete();
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
catch (error) {
|
|
76
|
-
// Ignore errors if the object doesn't exist
|
|
77
|
-
Logger_1.appLogger.warn(`Failed to delete environment data for key: ${key}`, error);
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
async getEnvironmentDatum(key) {
|
|
81
|
-
if (!key) {
|
|
82
|
-
return undefined;
|
|
83
|
-
}
|
|
84
|
-
const objectName = `${EnvPersistenceGoogleCloudStorage.ENVIRONMENT_DATA_PREFIX}${encodeURIComponent(key)}`;
|
|
85
|
-
return (await this.downloadString(objectName)) ?? undefined;
|
|
86
|
-
}
|
|
87
|
-
async getEnvironmentData() {
|
|
88
|
-
const result = {};
|
|
89
|
-
try {
|
|
90
|
-
const prefix = EnvPersistenceGoogleCloudStorage.ENVIRONMENT_DATA_PREFIX;
|
|
91
|
-
const [files] = await this.bucket.getFiles({ prefix });
|
|
92
|
-
// Process each file
|
|
93
|
-
for (const file of files) {
|
|
94
|
-
try {
|
|
95
|
-
// Extract the key from the file path
|
|
96
|
-
const encodedKey = file.name.substring(prefix.length);
|
|
97
|
-
const key = decodeURIComponent(encodedKey);
|
|
98
|
-
// Get the file content
|
|
99
|
-
const [content] = await file.download();
|
|
100
|
-
result[key] = content.toString('utf-8');
|
|
101
|
-
}
|
|
102
|
-
catch (error) {
|
|
103
|
-
Logger_1.appLogger.warn(`Failed to get environment data for key: ${file.name}`, error);
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
catch (error) {
|
|
108
|
-
Logger_1.appLogger.error('Failed to list environment data files', error);
|
|
109
|
-
}
|
|
110
|
-
return result;
|
|
111
|
-
}
|
|
112
|
-
async uploadString(objectName, data, contentType) {
|
|
113
|
-
const file = this.bucket.file(objectName);
|
|
114
|
-
await file.save(data, {
|
|
115
|
-
contentType,
|
|
116
|
-
metadata: { contentType },
|
|
117
|
-
});
|
|
118
|
-
}
|
|
119
|
-
async downloadString(objectName) {
|
|
120
|
-
const file = this.bucket.file(objectName);
|
|
121
|
-
const [exists] = await file.exists();
|
|
122
|
-
if (!exists) {
|
|
123
|
-
return null;
|
|
124
|
-
}
|
|
125
|
-
const [content] = await file.download();
|
|
126
|
-
return content.toString();
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
exports.EnvPersistenceGoogleCloudStorage = EnvPersistenceGoogleCloudStorage;
|
|
130
|
-
EnvPersistenceGoogleCloudStorage.ENVIRONMENT_DATA_PREFIX = 'environment/';
|
|
131
|
-
//# sourceMappingURL=EnvPersistenceGoogleCloudStorage.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"EnvPersistenceGoogleCloudStorage.js","sourceRoot":"","sources":["../../../src/persistence/env/EnvPersistenceGoogleCloudStorage.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
import { type BrowserStorageState } from '../../models/BrowserStorageState';
|
|
2
|
-
import type { FlowMetadata, FlowsQuery } from '../../models/FlowMetadata';
|
|
3
|
-
import type { PaginatedResult } from '../../models/PaginatedResult';
|
|
4
|
-
import type { ToolCall } from '../../models/ToolCall';
|
|
5
|
-
import type { VideoSegment } from '../../models/VideoSegment';
|
|
6
|
-
import type { FlowsPersistence } from './FlowsPersistence';
|
|
7
|
-
/**
|
|
8
|
-
* A persistence implementation that uses AWS S3.
|
|
9
|
-
* Ensure AWS credentials are properly configured in your environment,
|
|
10
|
-
* or provide them directly in the constructor.
|
|
11
|
-
*/
|
|
12
|
-
export declare class FlowsPersistenceAwsS3 implements FlowsPersistence {
|
|
13
|
-
private static readonly NAME_INDEX_PREFIX;
|
|
14
|
-
private static readonly RUN_MODE_INDEX_PREFIX;
|
|
15
|
-
private static readonly STATE_INDEX_PREFIX;
|
|
16
|
-
private static readonly RUN_MODE_STATE_INDEX_PREFIX;
|
|
17
|
-
private static readonly METADATA_FILENAME;
|
|
18
|
-
private static readonly BROWSER_STATE_FILENAME;
|
|
19
|
-
private static readonly TOOL_CALL_FILENAME_SUFFIX;
|
|
20
|
-
private static readonly VIDEO_FILENAME;
|
|
21
|
-
private readonly s3Client;
|
|
22
|
-
private readonly bucketName;
|
|
23
|
-
/**
|
|
24
|
-
* Creates a new instance of the AWS S3 persistence layer.
|
|
25
|
-
*
|
|
26
|
-
* @param bucketName The name of the S3 bucket to use for storage
|
|
27
|
-
* @param region AWS region (defaults to 'us-east-1')
|
|
28
|
-
* @param credentials Optional AWS credentials (if not provided, will use environment variables)
|
|
29
|
-
*/
|
|
30
|
-
constructor(bucketName: string, region: string, credentials?: {
|
|
31
|
-
accessKeyId: string;
|
|
32
|
-
secretAccessKey: string;
|
|
33
|
-
});
|
|
34
|
-
setFlowMetadata(flowMetadata: FlowMetadata): Promise<void>;
|
|
35
|
-
getFlowMetadataById(flowId: string): Promise<FlowMetadata>;
|
|
36
|
-
getFlowMetadataByName(flowName: string): Promise<FlowMetadata>;
|
|
37
|
-
getFlowsMetadata(query: FlowsQuery): Promise<PaginatedResult<FlowMetadata>>;
|
|
38
|
-
saveScreenShot(flowId: string, bytes: Buffer): Promise<string>;
|
|
39
|
-
getScreenShot(flowId: string, screenShotId: string): Promise<Buffer | null>;
|
|
40
|
-
setToolCall(flowId: string, toolCall: ToolCall): Promise<void>;
|
|
41
|
-
getToolCalls(flowId: string): Promise<ToolCall[]>;
|
|
42
|
-
deleteToolCall(flowId: string, toolCallId: string): Promise<void>;
|
|
43
|
-
setVideo(flowId: string, bytes: Buffer): Promise<void>;
|
|
44
|
-
getVideoSegment(flowId: string, startOffset: number, length: number): Promise<VideoSegment | null>;
|
|
45
|
-
getFlowFile(flowId: string, fileId: string): Promise<Buffer | null>;
|
|
46
|
-
setFlowFile(flowId: string, fileId: string, fileBytes: Buffer): Promise<void>;
|
|
47
|
-
setBrowserState(flowId: string, browserState: BrowserStorageState): Promise<void>;
|
|
48
|
-
getBrowserState(flowId: string): Promise<BrowserStorageState | null>;
|
|
49
|
-
deleteFlow(flowId: string): Promise<void>;
|
|
50
|
-
/**
|
|
51
|
-
* Utility method to stream S3 object data to a Buffer
|
|
52
|
-
*/
|
|
53
|
-
private streamToBuffer;
|
|
54
|
-
/**
|
|
55
|
-
* Update name-to-id index.
|
|
56
|
-
*/
|
|
57
|
-
private updateNameIndex;
|
|
58
|
-
/**
|
|
59
|
-
* Update runMode-to-id index.
|
|
60
|
-
*/
|
|
61
|
-
private updateRunModeIndex;
|
|
62
|
-
/**
|
|
63
|
-
* Update state-to-id index.
|
|
64
|
-
*/
|
|
65
|
-
private updateStateIndex;
|
|
66
|
-
/**
|
|
67
|
-
* Update combined runMode+state-to-id index.
|
|
68
|
-
*/
|
|
69
|
-
private updateRunModeStateIndex;
|
|
70
|
-
}
|
|
71
|
-
//# sourceMappingURL=FlowsPersistenceAwsS3.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"FlowsPersistenceAwsS3.d.ts","sourceRoot":"","sources":["../../../src/persistence/flows/FlowsPersistenceAwsS3.ts"],"names":[],"mappings":"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"}
|