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.
Files changed (161) hide show
  1. package/dist/apis/ToolsApi.d.ts.map +1 -1
  2. package/dist/apis/ToolsApi.js +0 -4
  3. package/dist/apis/ToolsApi.js.map +1 -1
  4. package/dist/cli/install-donobu-plugin.js +1 -1
  5. package/dist/cli/install-donobu-plugin.js.map +1 -1
  6. package/dist/envVars.d.ts +2 -8
  7. package/dist/envVars.d.ts.map +1 -1
  8. package/dist/envVars.js +5 -5
  9. package/dist/envVars.js.map +1 -1
  10. package/dist/esm/apis/ToolsApi.d.ts.map +1 -1
  11. package/dist/esm/apis/ToolsApi.js +0 -4
  12. package/dist/esm/apis/ToolsApi.js.map +1 -1
  13. package/dist/esm/cli/install-donobu-plugin.js +1 -1
  14. package/dist/esm/cli/install-donobu-plugin.js.map +1 -1
  15. package/dist/esm/envVars.d.ts +2 -8
  16. package/dist/esm/envVars.d.ts.map +1 -1
  17. package/dist/esm/envVars.js +5 -5
  18. package/dist/esm/envVars.js.map +1 -1
  19. package/dist/esm/lib/page/extendPage.d.ts.map +1 -1
  20. package/dist/esm/lib/page/extendPage.js +2 -2
  21. package/dist/esm/lib/page/extendPage.js.map +1 -1
  22. package/dist/esm/lib/test/testExtension.js +2 -2
  23. package/dist/esm/lib/test/testExtension.js.map +1 -1
  24. package/dist/esm/lib/test/utils/donobuTestStack.d.ts.map +1 -1
  25. package/dist/esm/lib/test/utils/donobuTestStack.js +1 -1
  26. package/dist/esm/lib/test/utils/donobuTestStack.js.map +1 -1
  27. package/dist/esm/lib/test/utils/selfHealing.d.ts.map +1 -1
  28. package/dist/esm/lib/test/utils/selfHealing.js +0 -2
  29. package/dist/esm/lib/test/utils/selfHealing.js.map +1 -1
  30. package/dist/esm/main.d.ts +9 -1
  31. package/dist/esm/main.d.ts.map +1 -1
  32. package/dist/esm/main.js +14 -4
  33. package/dist/esm/main.js.map +1 -1
  34. package/dist/esm/managers/AdminApiController.d.ts +1 -1
  35. package/dist/esm/managers/AdminApiController.d.ts.map +1 -1
  36. package/dist/esm/managers/AdminApiController.js.map +1 -1
  37. package/dist/esm/managers/DonobuFlowsManager.d.ts.map +1 -1
  38. package/dist/esm/managers/DonobuFlowsManager.js +2 -2
  39. package/dist/esm/managers/DonobuFlowsManager.js.map +1 -1
  40. package/dist/esm/managers/DonobuStack.d.ts +2 -16
  41. package/dist/esm/managers/DonobuStack.d.ts.map +1 -1
  42. package/dist/esm/managers/DonobuStack.js +1 -1
  43. package/dist/esm/managers/DonobuStack.js.map +1 -1
  44. package/dist/esm/managers/PluginLoader.d.ts +9 -4
  45. package/dist/esm/managers/PluginLoader.d.ts.map +1 -1
  46. package/dist/esm/managers/PluginLoader.js +24 -9
  47. package/dist/esm/managers/PluginLoader.js.map +1 -1
  48. package/dist/esm/managers/ToolManager.d.ts +5 -0
  49. package/dist/esm/managers/ToolManager.d.ts.map +1 -1
  50. package/dist/esm/managers/ToolManager.js +9 -5
  51. package/dist/esm/managers/ToolManager.js.map +1 -1
  52. package/dist/esm/persistence/PersistencePlugin.d.ts +29 -0
  53. package/dist/esm/persistence/PersistencePlugin.d.ts.map +1 -0
  54. package/dist/esm/persistence/PersistencePlugin.js +21 -0
  55. package/dist/esm/persistence/PersistencePlugin.js.map +1 -0
  56. package/dist/esm/persistence/env/EnvPersistenceRegistry.d.ts +1 -1
  57. package/dist/esm/persistence/env/EnvPersistenceRegistry.d.ts.map +1 -1
  58. package/dist/esm/persistence/env/EnvPersistenceRegistry.js +11 -15
  59. package/dist/esm/persistence/env/EnvPersistenceRegistry.js.map +1 -1
  60. package/dist/esm/persistence/flows/FlowsPersistenceRegistry.d.ts +1 -1
  61. package/dist/esm/persistence/flows/FlowsPersistenceRegistry.d.ts.map +1 -1
  62. package/dist/esm/persistence/flows/FlowsPersistenceRegistry.js +11 -15
  63. package/dist/esm/persistence/flows/FlowsPersistenceRegistry.js.map +1 -1
  64. package/dist/esm/utils/MiscUtils.js +2 -2
  65. package/dist/esm/utils/MiscUtils.js.map +1 -1
  66. package/dist/lib/page/extendPage.d.ts.map +1 -1
  67. package/dist/lib/page/extendPage.js +2 -2
  68. package/dist/lib/page/extendPage.js.map +1 -1
  69. package/dist/lib/test/testExtension.js +2 -2
  70. package/dist/lib/test/testExtension.js.map +1 -1
  71. package/dist/lib/test/utils/donobuTestStack.d.ts.map +1 -1
  72. package/dist/lib/test/utils/donobuTestStack.js +1 -1
  73. package/dist/lib/test/utils/donobuTestStack.js.map +1 -1
  74. package/dist/lib/test/utils/selfHealing.d.ts.map +1 -1
  75. package/dist/lib/test/utils/selfHealing.js +0 -2
  76. package/dist/lib/test/utils/selfHealing.js.map +1 -1
  77. package/dist/main.d.ts +9 -1
  78. package/dist/main.d.ts.map +1 -1
  79. package/dist/main.js +14 -4
  80. package/dist/main.js.map +1 -1
  81. package/dist/managers/AdminApiController.d.ts +1 -1
  82. package/dist/managers/AdminApiController.d.ts.map +1 -1
  83. package/dist/managers/AdminApiController.js.map +1 -1
  84. package/dist/managers/DonobuFlowsManager.d.ts.map +1 -1
  85. package/dist/managers/DonobuFlowsManager.js +2 -2
  86. package/dist/managers/DonobuFlowsManager.js.map +1 -1
  87. package/dist/managers/DonobuStack.d.ts +2 -16
  88. package/dist/managers/DonobuStack.d.ts.map +1 -1
  89. package/dist/managers/DonobuStack.js +1 -1
  90. package/dist/managers/DonobuStack.js.map +1 -1
  91. package/dist/managers/PluginLoader.d.ts +9 -4
  92. package/dist/managers/PluginLoader.d.ts.map +1 -1
  93. package/dist/managers/PluginLoader.js +24 -9
  94. package/dist/managers/PluginLoader.js.map +1 -1
  95. package/dist/managers/ToolManager.d.ts +5 -0
  96. package/dist/managers/ToolManager.d.ts.map +1 -1
  97. package/dist/managers/ToolManager.js +9 -5
  98. package/dist/managers/ToolManager.js.map +1 -1
  99. package/dist/persistence/PersistencePlugin.d.ts +29 -0
  100. package/dist/persistence/PersistencePlugin.d.ts.map +1 -0
  101. package/dist/persistence/PersistencePlugin.js +21 -0
  102. package/dist/persistence/PersistencePlugin.js.map +1 -0
  103. package/dist/persistence/env/EnvPersistenceRegistry.d.ts +1 -1
  104. package/dist/persistence/env/EnvPersistenceRegistry.d.ts.map +1 -1
  105. package/dist/persistence/env/EnvPersistenceRegistry.js +11 -15
  106. package/dist/persistence/env/EnvPersistenceRegistry.js.map +1 -1
  107. package/dist/persistence/flows/FlowsPersistenceRegistry.d.ts +1 -1
  108. package/dist/persistence/flows/FlowsPersistenceRegistry.d.ts.map +1 -1
  109. package/dist/persistence/flows/FlowsPersistenceRegistry.js +11 -15
  110. package/dist/persistence/flows/FlowsPersistenceRegistry.js.map +1 -1
  111. package/dist/utils/MiscUtils.js +2 -2
  112. package/dist/utils/MiscUtils.js.map +1 -1
  113. package/package.json +2 -7
  114. package/dist/esm/persistence/env/EnvPersistenceAwsS3.d.ts +0 -31
  115. package/dist/esm/persistence/env/EnvPersistenceAwsS3.d.ts.map +0 -1
  116. package/dist/esm/persistence/env/EnvPersistenceAwsS3.js +0 -117
  117. package/dist/esm/persistence/env/EnvPersistenceAwsS3.js.map +0 -1
  118. package/dist/esm/persistence/env/EnvPersistenceGoogleCloudStorage.d.ts +0 -30
  119. package/dist/esm/persistence/env/EnvPersistenceGoogleCloudStorage.d.ts.map +0 -1
  120. package/dist/esm/persistence/env/EnvPersistenceGoogleCloudStorage.js +0 -131
  121. package/dist/esm/persistence/env/EnvPersistenceGoogleCloudStorage.js.map +0 -1
  122. package/dist/esm/persistence/flows/FlowsPersistenceAwsS3.d.ts +0 -71
  123. package/dist/esm/persistence/flows/FlowsPersistenceAwsS3.d.ts.map +0 -1
  124. package/dist/esm/persistence/flows/FlowsPersistenceAwsS3.js +0 -487
  125. package/dist/esm/persistence/flows/FlowsPersistenceAwsS3.js.map +0 -1
  126. package/dist/esm/persistence/flows/FlowsPersistenceGoogleCloudStorage.d.ts +0 -71
  127. package/dist/esm/persistence/flows/FlowsPersistenceGoogleCloudStorage.d.ts.map +0 -1
  128. package/dist/esm/persistence/flows/FlowsPersistenceGoogleCloudStorage.js +0 -444
  129. package/dist/esm/persistence/flows/FlowsPersistenceGoogleCloudStorage.js.map +0 -1
  130. package/dist/esm/tools/SolveCaptcha.d.ts +0 -19
  131. package/dist/esm/tools/SolveCaptcha.d.ts.map +0 -1
  132. package/dist/esm/tools/SolveCaptcha.js +0 -36
  133. package/dist/esm/tools/SolveCaptcha.js.map +0 -1
  134. package/dist/esm/tools/SolveMfaChallenge.d.ts +0 -45
  135. package/dist/esm/tools/SolveMfaChallenge.d.ts.map +0 -1
  136. package/dist/esm/tools/SolveMfaChallenge.js +0 -214
  137. package/dist/esm/tools/SolveMfaChallenge.js.map +0 -1
  138. package/dist/persistence/env/EnvPersistenceAwsS3.d.ts +0 -31
  139. package/dist/persistence/env/EnvPersistenceAwsS3.d.ts.map +0 -1
  140. package/dist/persistence/env/EnvPersistenceAwsS3.js +0 -117
  141. package/dist/persistence/env/EnvPersistenceAwsS3.js.map +0 -1
  142. package/dist/persistence/env/EnvPersistenceGoogleCloudStorage.d.ts +0 -30
  143. package/dist/persistence/env/EnvPersistenceGoogleCloudStorage.d.ts.map +0 -1
  144. package/dist/persistence/env/EnvPersistenceGoogleCloudStorage.js +0 -131
  145. package/dist/persistence/env/EnvPersistenceGoogleCloudStorage.js.map +0 -1
  146. package/dist/persistence/flows/FlowsPersistenceAwsS3.d.ts +0 -71
  147. package/dist/persistence/flows/FlowsPersistenceAwsS3.d.ts.map +0 -1
  148. package/dist/persistence/flows/FlowsPersistenceAwsS3.js +0 -487
  149. package/dist/persistence/flows/FlowsPersistenceAwsS3.js.map +0 -1
  150. package/dist/persistence/flows/FlowsPersistenceGoogleCloudStorage.d.ts +0 -71
  151. package/dist/persistence/flows/FlowsPersistenceGoogleCloudStorage.d.ts.map +0 -1
  152. package/dist/persistence/flows/FlowsPersistenceGoogleCloudStorage.js +0 -444
  153. package/dist/persistence/flows/FlowsPersistenceGoogleCloudStorage.js.map +0 -1
  154. package/dist/tools/SolveCaptcha.d.ts +0 -19
  155. package/dist/tools/SolveCaptcha.d.ts.map +0 -1
  156. package/dist/tools/SolveCaptcha.js +0 -36
  157. package/dist/tools/SolveCaptcha.js.map +0 -1
  158. package/dist/tools/SolveMfaChallenge.d.ts +0 -45
  159. package/dist/tools/SolveMfaChallenge.d.ts.map +0 -1
  160. package/dist/tools/SolveMfaChallenge.js +0 -214
  161. package/dist/tools/SolveMfaChallenge.js.map +0 -1
@@ -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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"}
@@ -1,487 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.FlowsPersistenceAwsS3 = void 0;
4
- const client_s3_1 = require("@aws-sdk/client-s3");
5
- const FlowNotFoundException_1 = require("../../exceptions/FlowNotFoundException");
6
- const BrowserStorageState_1 = require("../../models/BrowserStorageState");
7
- const Logger_1 = require("../../utils/Logger");
8
- const MiscUtils_1 = require("../../utils/MiscUtils");
9
- /**
10
- * A persistence implementation that uses AWS S3.
11
- * Ensure AWS credentials are properly configured in your environment,
12
- * or provide them directly in the constructor.
13
- */
14
- class FlowsPersistenceAwsS3 {
15
- /**
16
- * Creates a new instance of the AWS S3 persistence layer.
17
- *
18
- * @param bucketName The name of the S3 bucket to use for storage
19
- * @param region AWS region (defaults to 'us-east-1')
20
- * @param credentials Optional AWS credentials (if not provided, will use environment variables)
21
- */
22
- constructor(bucketName, region, credentials) {
23
- this.bucketName = bucketName;
24
- this.s3Client = new client_s3_1.S3Client({
25
- region,
26
- credentials,
27
- });
28
- }
29
- async setFlowMetadata(flowMetadata) {
30
- const objectKey = `${flowMetadata.id}/${FlowsPersistenceAwsS3.METADATA_FILENAME}`;
31
- // Save the main metadata file.
32
- await this.s3Client.send(new client_s3_1.PutObjectCommand({
33
- Bucket: this.bucketName,
34
- Key: objectKey,
35
- Body: JSON.stringify(flowMetadata, null, 2),
36
- ContentType: 'application/json',
37
- }));
38
- // Update the name index if a name exists.
39
- if (flowMetadata.name) {
40
- await this.updateNameIndex(flowMetadata.id, flowMetadata.name);
41
- }
42
- // Update runMode index
43
- await this.updateRunModeIndex(flowMetadata.id, flowMetadata.runMode);
44
- // Update state index
45
- await this.updateStateIndex(flowMetadata.id, flowMetadata.state);
46
- // Update combined runMode+state index
47
- await this.updateRunModeStateIndex(flowMetadata.id, flowMetadata.runMode, flowMetadata.state);
48
- }
49
- async getFlowMetadataById(flowId) {
50
- const objectKey = `${flowId}/${FlowsPersistenceAwsS3.METADATA_FILENAME}`;
51
- const response = await this.s3Client.send(new client_s3_1.GetObjectCommand({
52
- Bucket: this.bucketName,
53
- Key: objectKey,
54
- }));
55
- if (!response.Body) {
56
- throw FlowNotFoundException_1.FlowNotFoundException.forId(flowId);
57
- }
58
- const data = await this.streamToBuffer(response.Body);
59
- return JSON.parse(data.toString('utf-8'));
60
- }
61
- async getFlowMetadataByName(flowName) {
62
- if (!flowName) {
63
- throw FlowNotFoundException_1.FlowNotFoundException.forName('null');
64
- }
65
- const indexKey = `${FlowsPersistenceAwsS3.NAME_INDEX_PREFIX}${encodeURIComponent(flowName)}`;
66
- // Look up the flow ID in the name index
67
- const response = await this.s3Client.send(new client_s3_1.GetObjectCommand({
68
- Bucket: this.bucketName,
69
- Key: indexKey,
70
- }));
71
- if (!response.Body) {
72
- throw FlowNotFoundException_1.FlowNotFoundException.forName(flowName);
73
- }
74
- // Extract the flow ID from the index entry
75
- const data = await this.streamToBuffer(response.Body);
76
- const flowId = data.toString('utf-8');
77
- // Get the flow metadata using the ID
78
- return await this.getFlowMetadataById(flowId);
79
- }
80
- async getFlowsMetadata(query) {
81
- const { limit = 20, pageToken, name, runMode, state, startedAfter, startedBefore, } = query || {};
82
- const validLimit = Math.min(Math.max(1, limit), 100);
83
- // Determine which index to use based on query params
84
- let prefix = '';
85
- let usedIndex = false;
86
- if (name) {
87
- // If querying by name, directly fetch that specific flow
88
- try {
89
- const flow = await this.getFlowMetadataByName(name);
90
- // Apply other filters
91
- let includeFlow = true;
92
- if (runMode && flow.runMode !== runMode) {
93
- includeFlow = false;
94
- }
95
- if (state && flow.state !== state) {
96
- includeFlow = false;
97
- }
98
- // Apply date range filters
99
- if (startedAfter !== undefined &&
100
- (flow.startedAt || 0) < startedAfter) {
101
- includeFlow = false;
102
- }
103
- if (startedBefore !== undefined &&
104
- (flow.startedAt || 0) > startedBefore) {
105
- includeFlow = false;
106
- }
107
- if (includeFlow) {
108
- return { items: [flow], nextPageToken: undefined };
109
- }
110
- else {
111
- return { items: [], nextPageToken: undefined };
112
- }
113
- }
114
- catch (_error) {
115
- return { items: [], nextPageToken: undefined };
116
- }
117
- }
118
- else if (runMode && state) {
119
- // Use combined index if both runMode and state are specified
120
- prefix = `${FlowsPersistenceAwsS3.RUN_MODE_STATE_INDEX_PREFIX}${runMode}_${state}/`;
121
- usedIndex = true;
122
- }
123
- else if (runMode) {
124
- // Use runMode index
125
- prefix = `${FlowsPersistenceAwsS3.RUN_MODE_INDEX_PREFIX}${runMode}/`;
126
- usedIndex = true;
127
- }
128
- else if (state) {
129
- // Use state index
130
- prefix = `${FlowsPersistenceAwsS3.STATE_INDEX_PREFIX}${state}/`;
131
- usedIndex = true;
132
- }
133
- // Configure the list command
134
- const listCommand = new client_s3_1.ListObjectsV2Command({
135
- Bucket: this.bucketName,
136
- MaxKeys: validLimit * 2, // Request more than needed for filtering
137
- ContinuationToken: pageToken,
138
- Prefix: usedIndex ? prefix : undefined,
139
- });
140
- const response = await this.s3Client.send(listCommand);
141
- if (!response.Contents) {
142
- return { items: [] };
143
- }
144
- // Process objects based on whether we're using an index or not
145
- let flowIds = [];
146
- if (usedIndex) {
147
- // If using an index, extract flow IDs from index file keys
148
- flowIds = response.Contents.filter((item) => item.Key).map((item) => {
149
- const key = item.Key;
150
- return key.substring(prefix.length);
151
- });
152
- }
153
- else {
154
- // If not using an index, filter to metadata files
155
- const metadataFiles = response.Contents.filter((item) => item.Key?.endsWith(`/${FlowsPersistenceAwsS3.METADATA_FILENAME}`));
156
- // Extract flow IDs from metadata file paths
157
- flowIds = metadataFiles.map((file) => {
158
- const key = file.Key;
159
- return key.substring(0, key.indexOf('/'));
160
- });
161
- }
162
- // Fetch metadata for each flow and apply remaining filters
163
- const flows = [];
164
- for (const flowId of flowIds) {
165
- try {
166
- const flowMetadata = await this.getFlowMetadataById(flowId);
167
- // Apply remaining filters
168
- let includeFlow = true;
169
- // Apply date range filters
170
- if (startedAfter !== undefined &&
171
- (flowMetadata.startedAt || 0) < startedAfter) {
172
- includeFlow = false;
173
- }
174
- if (startedBefore !== undefined &&
175
- (flowMetadata.startedAt || 0) > startedBefore) {
176
- includeFlow = false;
177
- }
178
- // Double-check indexed fields (in case index is out of sync)
179
- if (runMode && flowMetadata.runMode !== runMode) {
180
- includeFlow = false;
181
- }
182
- if (state && flowMetadata.state !== state) {
183
- includeFlow = false;
184
- }
185
- if (includeFlow) {
186
- flows.push(flowMetadata);
187
- }
188
- }
189
- catch (e) {
190
- Logger_1.appLogger.warn(`Flow not found: ${flowId}`, e);
191
- }
192
- }
193
- // Sort by creation date (newest first) - fixing the sort order
194
- flows.sort((a, b) => (b.startedAt || 0) - (a.startedAt || 0));
195
- // Apply limit
196
- const limitedFlows = flows.slice(0, validLimit);
197
- const hasMore = flows.length > validLimit;
198
- return {
199
- items: limitedFlows,
200
- nextPageToken: hasMore ? response.NextContinuationToken : undefined,
201
- };
202
- }
203
- async saveScreenShot(flowId, bytes) {
204
- const imageType = MiscUtils_1.MiscUtils.detectImageType(bytes);
205
- const mimeType = `image/${imageType}`;
206
- const filename = `${new Date().toISOString()}.screenshot.${imageType}`;
207
- const objectKey = `${flowId}/${filename}`;
208
- await this.s3Client.send(new client_s3_1.PutObjectCommand({
209
- Bucket: this.bucketName,
210
- Key: objectKey,
211
- Body: bytes,
212
- ContentType: mimeType,
213
- }));
214
- return filename;
215
- }
216
- async getScreenShot(flowId, screenShotId) {
217
- const objectKey = `${flowId}/${screenShotId}`;
218
- try {
219
- const response = await this.s3Client.send(new client_s3_1.GetObjectCommand({
220
- Bucket: this.bucketName,
221
- Key: objectKey,
222
- }));
223
- if (!response.Body || !response.ContentType?.startsWith('image')) {
224
- return null;
225
- }
226
- return await this.streamToBuffer(response.Body);
227
- }
228
- catch (_error) {
229
- return null;
230
- }
231
- }
232
- async setToolCall(flowId, toolCall) {
233
- const filename = `${toolCall.startedAt}${FlowsPersistenceAwsS3.TOOL_CALL_FILENAME_SUFFIX}`;
234
- const objectKey = `${flowId}/${filename}`;
235
- await this.s3Client.send(new client_s3_1.PutObjectCommand({
236
- Bucket: this.bucketName,
237
- Key: objectKey,
238
- Body: JSON.stringify(toolCall, null, 2),
239
- ContentType: 'application/json',
240
- }));
241
- }
242
- async getToolCalls(flowId) {
243
- const prefix = `${flowId}/`;
244
- const response = await this.s3Client.send(new client_s3_1.ListObjectsV2Command({
245
- Bucket: this.bucketName,
246
- Prefix: prefix,
247
- }));
248
- if (!response.Contents || response.Contents.length === 0) {
249
- throw FlowNotFoundException_1.FlowNotFoundException.forId(flowId);
250
- }
251
- const toolCallFiles = response.Contents.filter((item) => item.Key?.endsWith(FlowsPersistenceAwsS3.TOOL_CALL_FILENAME_SUFFIX));
252
- if (toolCallFiles.length === 0) {
253
- return [];
254
- }
255
- const toolCalls = await Promise.all(toolCallFiles.map(async (file) => {
256
- const response = await this.s3Client.send(new client_s3_1.GetObjectCommand({
257
- Bucket: this.bucketName,
258
- Key: file.Key,
259
- }));
260
- if (!response.Body) {
261
- return null;
262
- }
263
- const data = await this.streamToBuffer(response.Body);
264
- return JSON.parse(data.toString('utf-8'));
265
- }));
266
- return toolCalls
267
- .filter((toolCall) => toolCall !== null)
268
- .sort((a, b) => (a.startedAt || 0) - (b.startedAt || 0));
269
- }
270
- async deleteToolCall(flowId, toolCallId) {
271
- const prefix = `${flowId}/`;
272
- let continuationToken = undefined;
273
- let hasFlowData = false;
274
- do {
275
- const response = await this.s3Client.send(new client_s3_1.ListObjectsV2Command({
276
- Bucket: this.bucketName,
277
- Prefix: prefix,
278
- ContinuationToken: continuationToken,
279
- }));
280
- if (response.Contents && response.Contents.length > 0) {
281
- hasFlowData = true;
282
- for (const object of response.Contents) {
283
- const key = object.Key;
284
- if (!key?.endsWith(FlowsPersistenceAwsS3.TOOL_CALL_FILENAME_SUFFIX)) {
285
- continue;
286
- }
287
- try {
288
- const existingToolCall = await this.s3Client.send(new client_s3_1.GetObjectCommand({
289
- Bucket: this.bucketName,
290
- Key: key,
291
- }));
292
- if (!existingToolCall.Body) {
293
- continue;
294
- }
295
- const data = await this.streamToBuffer(existingToolCall.Body);
296
- const toolCall = JSON.parse(data.toString('utf-8'));
297
- if (toolCall.id === toolCallId) {
298
- await this.s3Client.send(new client_s3_1.DeleteObjectCommand({
299
- Bucket: this.bucketName,
300
- Key: key,
301
- }));
302
- return;
303
- }
304
- }
305
- catch (error) {
306
- Logger_1.appLogger.warn(`Failed to inspect tool call object ${key} for deletion`, error);
307
- }
308
- }
309
- }
310
- continuationToken = response.IsTruncated
311
- ? response.NextContinuationToken
312
- : undefined;
313
- } while (continuationToken);
314
- if (!hasFlowData) {
315
- throw FlowNotFoundException_1.FlowNotFoundException.forId(flowId);
316
- }
317
- }
318
- async setVideo(flowId, bytes) {
319
- const objectKey = `${flowId}/${FlowsPersistenceAwsS3.VIDEO_FILENAME}`;
320
- await this.s3Client.send(new client_s3_1.PutObjectCommand({
321
- Bucket: this.bucketName,
322
- Key: objectKey,
323
- Body: bytes,
324
- ContentType: 'video/webm',
325
- }));
326
- }
327
- async getVideoSegment(flowId, startOffset, length) {
328
- const objectKey = `${flowId}/${FlowsPersistenceAwsS3.VIDEO_FILENAME}`;
329
- // First, get the total size of the video file
330
- const headResponse = await this.s3Client.send(new client_s3_1.HeadObjectCommand({
331
- Bucket: this.bucketName,
332
- Key: objectKey,
333
- }));
334
- const totalLength = headResponse.ContentLength || 0;
335
- const adjustedLength = Math.min(length, totalLength - startOffset);
336
- if (adjustedLength <= 0) {
337
- return null;
338
- }
339
- const range = `bytes=${startOffset}-${startOffset + adjustedLength - 1}`;
340
- const response = await this.s3Client.send(new client_s3_1.GetObjectCommand({
341
- Bucket: this.bucketName,
342
- Key: objectKey,
343
- Range: range,
344
- }));
345
- if (!response.Body) {
346
- return null;
347
- }
348
- const buffer = await this.streamToBuffer(response.Body);
349
- return {
350
- bytes: buffer,
351
- totalLength: totalLength,
352
- startOffset: startOffset,
353
- };
354
- }
355
- async getFlowFile(flowId, fileId) {
356
- const objectKey = `${flowId}/${fileId}`;
357
- const response = await this.s3Client.send(new client_s3_1.GetObjectCommand({
358
- Bucket: this.bucketName,
359
- Key: objectKey,
360
- }));
361
- if (!response.Body) {
362
- return null;
363
- }
364
- return await this.streamToBuffer(response.Body);
365
- }
366
- async setFlowFile(flowId, fileId, fileBytes) {
367
- const objectKey = `${flowId}/${fileId}`;
368
- await this.s3Client.send(new client_s3_1.PutObjectCommand({
369
- Bucket: this.bucketName,
370
- Key: objectKey,
371
- Body: fileBytes,
372
- ContentType: 'application/octet-stream',
373
- }));
374
- }
375
- async setBrowserState(flowId, browserState) {
376
- const serializedBrowserState = Buffer.from(JSON.stringify(browserState), 'utf-8');
377
- await this.setFlowFile(flowId, FlowsPersistenceAwsS3.BROWSER_STATE_FILENAME, serializedBrowserState);
378
- }
379
- async getBrowserState(flowId) {
380
- const browserStateRaw = await this.getFlowFile(flowId, FlowsPersistenceAwsS3.BROWSER_STATE_FILENAME);
381
- if (browserStateRaw) {
382
- return BrowserStorageState_1.BrowserStorageStateSchema.parse(JSON.parse(browserStateRaw.toString('utf-8')));
383
- }
384
- else {
385
- return null;
386
- }
387
- }
388
- async deleteFlow(flowId) {
389
- // Get flow metadata to find its name.
390
- const metadata = await this.getFlowMetadataById(flowId);
391
- // Delete the name index entry if name exists.
392
- if (metadata.name) {
393
- const indexKey = `${FlowsPersistenceAwsS3.NAME_INDEX_PREFIX}${encodeURIComponent(metadata.name)}`;
394
- await this.s3Client.send(new client_s3_1.DeleteObjectCommand({
395
- Bucket: this.bucketName,
396
- Key: indexKey,
397
- }));
398
- }
399
- const prefix = `${flowId}/`;
400
- // List all objects with the flow prefix.
401
- const response = await this.s3Client.send(new client_s3_1.ListObjectsV2Command({
402
- Bucket: this.bucketName,
403
- Prefix: prefix,
404
- }));
405
- if (!response.Contents || response.Contents.length === 0) {
406
- return;
407
- }
408
- // Delete each object.
409
- for (const object of response.Contents) {
410
- if (object.Key) {
411
- await this.s3Client.send(new client_s3_1.DeleteObjectCommand({
412
- Bucket: this.bucketName,
413
- Key: object.Key,
414
- }));
415
- }
416
- }
417
- }
418
- /**
419
- * Utility method to stream S3 object data to a Buffer
420
- */
421
- async streamToBuffer(stream) {
422
- return new Promise((resolve, reject) => {
423
- const chunks = [];
424
- stream.on('data', (chunk) => chunks.push(Buffer.from(chunk)));
425
- stream.on('error', reject);
426
- stream.on('end', () => resolve(Buffer.concat(chunks)));
427
- });
428
- }
429
- /**
430
- * Update name-to-id index.
431
- */
432
- async updateNameIndex(flowId, flowName) {
433
- const indexKey = `${FlowsPersistenceAwsS3.NAME_INDEX_PREFIX}${encodeURIComponent(flowName)}`;
434
- await this.s3Client.send(new client_s3_1.PutObjectCommand({
435
- Bucket: this.bucketName,
436
- Key: indexKey,
437
- Body: flowId,
438
- ContentType: 'text/plain',
439
- }));
440
- }
441
- /**
442
- * Update runMode-to-id index.
443
- */
444
- async updateRunModeIndex(flowId, runMode) {
445
- const indexKey = `${FlowsPersistenceAwsS3.RUN_MODE_INDEX_PREFIX}${runMode}/${flowId}`;
446
- await this.s3Client.send(new client_s3_1.PutObjectCommand({
447
- Bucket: this.bucketName,
448
- Key: indexKey,
449
- Body: flowId,
450
- ContentType: 'text/plain',
451
- }));
452
- }
453
- /**
454
- * Update state-to-id index.
455
- */
456
- async updateStateIndex(flowId, state) {
457
- const indexKey = `${FlowsPersistenceAwsS3.STATE_INDEX_PREFIX}${state}/${flowId}`;
458
- await this.s3Client.send(new client_s3_1.PutObjectCommand({
459
- Bucket: this.bucketName,
460
- Key: indexKey,
461
- Body: flowId,
462
- ContentType: 'text/plain',
463
- }));
464
- }
465
- /**
466
- * Update combined runMode+state-to-id index.
467
- */
468
- async updateRunModeStateIndex(flowId, runMode, state) {
469
- const indexKey = `${FlowsPersistenceAwsS3.RUN_MODE_STATE_INDEX_PREFIX}${runMode}_${state}/${flowId}`;
470
- await this.s3Client.send(new client_s3_1.PutObjectCommand({
471
- Bucket: this.bucketName,
472
- Key: indexKey,
473
- Body: flowId,
474
- ContentType: 'text/plain',
475
- }));
476
- }
477
- }
478
- exports.FlowsPersistenceAwsS3 = FlowsPersistenceAwsS3;
479
- FlowsPersistenceAwsS3.NAME_INDEX_PREFIX = '_name-index/';
480
- FlowsPersistenceAwsS3.RUN_MODE_INDEX_PREFIX = '_run-mode-index/';
481
- FlowsPersistenceAwsS3.STATE_INDEX_PREFIX = '_state-index/';
482
- FlowsPersistenceAwsS3.RUN_MODE_STATE_INDEX_PREFIX = '_run-mode-state-index/';
483
- FlowsPersistenceAwsS3.METADATA_FILENAME = 'metadata.json';
484
- FlowsPersistenceAwsS3.BROWSER_STATE_FILENAME = 'browserstate.json';
485
- FlowsPersistenceAwsS3.TOOL_CALL_FILENAME_SUFFIX = '.tool-call.json';
486
- FlowsPersistenceAwsS3.VIDEO_FILENAME = 'video.webm';
487
- //# sourceMappingURL=FlowsPersistenceAwsS3.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"FlowsPersistenceAwsS3.js","sourceRoot":"","sources":["../../../../src/persistence/flows/FlowsPersistenceAwsS3.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 Google Cloud Storage.
9
- *
10
- * If you are running locally, be sure to have the Google Cloud CLI installed
11
- * so that you can authenticate using `gcloud auth application-default login`
12
- * before running Donobu.
13
- *
14
- * If Donobu is being run in the Google cloud, be sure that the service account
15
- * in which it is being run has permissions to read and write the Google Cloud
16
- * Storage bucket specified as a constructor argument.
17
- */
18
- export declare class FlowsPersistenceGoogleCloudStorage implements FlowsPersistence {
19
- private readonly bucket;
20
- private static readonly NAME_INDEX_PREFIX;
21
- private static readonly RUN_MODE_INDEX_PREFIX;
22
- private static readonly STATE_INDEX_PREFIX;
23
- private static readonly RUN_MODE_STATE_INDEX_PREFIX;
24
- private static readonly METADATA_FILENAME;
25
- private static readonly BROWSER_STATE_FILENAME;
26
- private static readonly TOOL_CALL_FILENAME_SUFFIX;
27
- private static readonly VIDEO_FILENAME;
28
- /**
29
- * Dynamically imports the Google Cloud Storage library.
30
- * This helps to delay loading the library until it's actually needed.
31
- */
32
- private static importGoogleCloudStorage;
33
- static create(bucketName: string): Promise<FlowsPersistenceGoogleCloudStorage>;
34
- private constructor();
35
- setFlowMetadata(flowMetadata: FlowMetadata): Promise<void>;
36
- getFlowMetadataById(flowId: string): Promise<FlowMetadata>;
37
- getFlowMetadataByName(flowName: string): Promise<FlowMetadata>;
38
- getFlowsMetadata(query: FlowsQuery): Promise<PaginatedResult<FlowMetadata>>;
39
- saveScreenShot(flowId: string, bytes: Buffer): Promise<string>;
40
- getScreenShot(flowId: string, screenShotId: string): Promise<Buffer | null>;
41
- setToolCall(flowId: string, toolCall: ToolCall): Promise<void>;
42
- getToolCalls(flowId: string): Promise<ToolCall[]>;
43
- deleteToolCall(flowId: string, toolCallId: string): Promise<void>;
44
- setVideo(flowId: string, bytes: Buffer): Promise<void>;
45
- getVideoSegment(flowId: string, startOffset: number, length: number): Promise<VideoSegment | null>;
46
- getFlowFile(flowId: string, fileId: string): Promise<Buffer | null>;
47
- setFlowFile(flowId: string, fileId: string, fileBytes: Buffer): Promise<void>;
48
- setBrowserState(flowId: string, browserState: BrowserStorageState): Promise<void>;
49
- getBrowserState(flowId: string): Promise<BrowserStorageState | null>;
50
- deleteFlow(flowId: string): Promise<void>;
51
- private uploadString;
52
- private uploadBytes;
53
- private downloadString;
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=FlowsPersistenceGoogleCloudStorage.d.ts.map