@corsair-dev/browseai 0.1.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.
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Browse AI uses HTTP status on JSON envelopes (`statusCode` / `messageCode`).
3
+ *
4
+ * Every handler returns `maxRetries: 0`. `corsair/http` already retries
5
+ * idempotent 429s; replaying POST would duplicate tasks, monitors, bulk
6
+ * runs, and webhooks.
7
+ *
8
+ * | status | meaning |
9
+ * | ------ | ---------------- |
10
+ * | 400 | validation |
11
+ * | 401 | bad API key |
12
+ * | 403 | forbidden |
13
+ * | 404 | missing resource |
14
+ * | 429 | rate limited |
15
+ *
16
+ * @see https://docs.browse.ai/api/
17
+ */
18
+ export declare const errorHandlers: {
19
+ RATE_LIMIT_ERROR: {
20
+ match: (error: Error) => boolean;
21
+ handler: (error: Error) => Promise<{
22
+ maxRetries: number;
23
+ headersRetryAfterMs: number | undefined;
24
+ }>;
25
+ };
26
+ AUTH_ERROR: {
27
+ match: (error: Error) => boolean;
28
+ handler: () => Promise<{
29
+ maxRetries: number;
30
+ }>;
31
+ };
32
+ PERMISSION_ERROR: {
33
+ match: (error: Error) => boolean;
34
+ handler: () => Promise<{
35
+ maxRetries: number;
36
+ }>;
37
+ };
38
+ NOT_FOUND_ERROR: {
39
+ match: (error: Error) => boolean;
40
+ handler: () => Promise<{
41
+ maxRetries: number;
42
+ }>;
43
+ };
44
+ BAD_REQUEST_ERROR: {
45
+ match: (error: Error) => boolean;
46
+ handler: () => Promise<{
47
+ maxRetries: number;
48
+ }>;
49
+ };
50
+ DEFAULT: {
51
+ match: () => true;
52
+ handler: () => Promise<{
53
+ maxRetries: number;
54
+ }>;
55
+ };
56
+ };
57
+ //# sourceMappingURL=error-handlers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-handlers.d.ts","sourceRoot":"","sources":["../error-handlers.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,aAAa;;uBAET,KAAK;yBAKG,KAAK;;;;;;uBASb,KAAK;;;;;;uBASL,KAAK;;;;;;uBAQL,KAAK;;;;;;uBAQL,KAAK;;;;;;;;;;;CAWS,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=error-handlers.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-handlers.test.d.ts","sourceRoot":"","sources":["../error-handlers.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,429 @@
1
+ import type { AuthTypes, BindEndpoints, CorsairEndpoint, CorsairErrorHandler, CorsairPlugin, CorsairPluginContext, KeyBuilderContext, PickAuth, PluginPermissionsConfig } from 'corsair/core';
2
+ import type { BrowseaiEndpointInputs, BrowseaiEndpointOutputs } from './endpoints/types';
3
+ import { BrowseaiSchema } from './schema';
4
+ export type BrowseaiPluginOptions = {
5
+ authType?: PickAuth<'api_key'>;
6
+ key?: string;
7
+ hooks?: InternalBrowseaiPlugin['hooks'];
8
+ errorHandlers?: CorsairErrorHandler;
9
+ permissions?: PluginPermissionsConfig<typeof browseaiEndpointsNested>;
10
+ };
11
+ /**
12
+ * Browse AI authenticates with an API key as `Authorization: Bearer`.
13
+ *
14
+ * @see https://docs.browse.ai/api/
15
+ */
16
+ export declare const browseaiAuthConfig: {
17
+ readonly api_key: {};
18
+ };
19
+ export type BrowseaiContext = CorsairPluginContext<typeof BrowseaiSchema, BrowseaiPluginOptions, undefined, typeof browseaiAuthConfig>;
20
+ export type BrowseaiKeyBuilderContext = KeyBuilderContext<BrowseaiPluginOptions>;
21
+ export type BrowseaiBoundEndpoints = BindEndpoints<typeof browseaiEndpointsNested>;
22
+ type BrowseaiEndpoint<K extends keyof BrowseaiEndpointOutputs> = CorsairEndpoint<BrowseaiContext, BrowseaiEndpointInputs[K], BrowseaiEndpointOutputs[K]>;
23
+ export type BrowseaiEndpoints = {
24
+ systemGetStatus: BrowseaiEndpoint<'systemGetStatus'>;
25
+ robotsList: BrowseaiEndpoint<'robotsList'>;
26
+ robotsRun: BrowseaiEndpoint<'robotsRun'>;
27
+ robotsBulkRun: BrowseaiEndpoint<'robotsBulkRun'>;
28
+ tasksList: BrowseaiEndpoint<'tasksList'>;
29
+ tasksGet: BrowseaiEndpoint<'tasksGet'>;
30
+ monitorsCreate: BrowseaiEndpoint<'monitorsCreate'>;
31
+ monitorsDelete: BrowseaiEndpoint<'monitorsDelete'>;
32
+ webhooksCreate: BrowseaiEndpoint<'webhooksCreate'>;
33
+ webhooksList: BrowseaiEndpoint<'webhooksList'>;
34
+ };
35
+ declare const browseaiEndpointsNested: {
36
+ readonly system: {
37
+ readonly getStatus: BrowseaiEndpoint<"systemGetStatus">;
38
+ };
39
+ readonly robots: {
40
+ readonly list: BrowseaiEndpoint<"robotsList">;
41
+ readonly run: BrowseaiEndpoint<"robotsRun">;
42
+ readonly bulkRun: BrowseaiEndpoint<"robotsBulkRun">;
43
+ };
44
+ readonly tasks: {
45
+ readonly list: BrowseaiEndpoint<"tasksList">;
46
+ readonly get: BrowseaiEndpoint<"tasksGet">;
47
+ };
48
+ readonly monitors: {
49
+ readonly create: BrowseaiEndpoint<"monitorsCreate">;
50
+ readonly delete: BrowseaiEndpoint<"monitorsDelete">;
51
+ };
52
+ readonly webhooks: {
53
+ readonly create: BrowseaiEndpoint<"webhooksCreate">;
54
+ readonly list: BrowseaiEndpoint<"webhooksList">;
55
+ };
56
+ };
57
+ export declare const browseaiEndpointSchemas: {
58
+ readonly 'system.getStatus': {
59
+ readonly input: import("zod").ZodObject<{}, import("zod/v4/core").$strip>;
60
+ readonly output: import("zod").ZodObject<{
61
+ statusCode: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
62
+ messageCode: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
63
+ tasksQueueStatus: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
64
+ }, import("zod/v4/core").$loose>;
65
+ };
66
+ readonly 'robots.list': {
67
+ readonly input: import("zod").ZodObject<{}, import("zod/v4/core").$strip>;
68
+ readonly output: import("zod").ZodObject<{
69
+ statusCode: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
70
+ messageCode: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
71
+ robots: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodObject<{
72
+ totalCount: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
73
+ items: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodArray<import("zod").ZodObject<{
74
+ id: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
75
+ name: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
76
+ createdAt: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
77
+ inputParameters: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodArray<import("zod").ZodObject<{
78
+ type: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
79
+ name: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
80
+ label: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
81
+ required: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodBoolean>>;
82
+ encrypted: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodBoolean>>;
83
+ defaultValue: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodUnion<readonly [import("zod").ZodString, import("zod").ZodNumber, import("zod").ZodArray<import("zod").ZodString>]>>>;
84
+ value: import("zod").ZodOptional<import("zod").ZodUnion<readonly [import("zod").ZodString, import("zod").ZodNumber, import("zod").ZodArray<import("zod").ZodString>, import("zod").ZodNull]>>;
85
+ min: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
86
+ max: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
87
+ pattern: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
88
+ options: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodArray<import("zod").ZodObject<{
89
+ label: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
90
+ value: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
91
+ }, import("zod/v4/core").$loose>>>>;
92
+ }, import("zod/v4/core").$loose>>>>;
93
+ }, import("zod/v4/core").$loose>>>>;
94
+ }, import("zod/v4/core").$loose>>>;
95
+ }, import("zod/v4/core").$loose>;
96
+ };
97
+ readonly 'robots.run': {
98
+ readonly input: import("zod").ZodObject<{
99
+ robotId: import("zod").ZodString;
100
+ recordVideo: import("zod").ZodOptional<import("zod").ZodBoolean>;
101
+ inputParameters: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnion<readonly [import("zod").ZodString, import("zod").ZodNumber, import("zod").ZodArray<import("zod").ZodString>]>>>;
102
+ }, import("zod/v4/core").$strip>;
103
+ readonly output: import("zod").ZodObject<{
104
+ statusCode: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
105
+ messageCode: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
106
+ result: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodObject<{
107
+ id: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
108
+ inputParameters: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnion<readonly [import("zod").ZodString, import("zod").ZodNumber, import("zod").ZodArray<import("zod").ZodString>]>>>>;
109
+ robotId: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
110
+ status: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
111
+ runByUserId: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
112
+ robotBulkRunId: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
113
+ runByTaskMonitorId: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
114
+ runByAPI: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodBoolean>>;
115
+ createdAt: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
116
+ startedAt: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
117
+ finishedAt: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
118
+ userFriendlyError: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
119
+ triedRecordingVideo: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodBoolean>>;
120
+ videoUrl: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
121
+ videoRemovedAt: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
122
+ retriedOriginalTaskId: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
123
+ retriedTaskId: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
124
+ retriedByTaskId: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
125
+ capturedDataTemporaryUrl: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
126
+ capturedTexts: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodNullable<import("zod").ZodUnion<readonly [import("zod").ZodString, import("zod").ZodNumber, import("zod").ZodBoolean]>>>>>;
127
+ capturedScreenshots: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodObject<{
128
+ id: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
129
+ name: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
130
+ src: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
131
+ width: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
132
+ height: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
133
+ x: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
134
+ y: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
135
+ deviceScaleFactor: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
136
+ full: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
137
+ comparedToScreenshotId: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
138
+ diffImageSrc: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
139
+ changePercentage: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
140
+ diffThreshold: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
141
+ fileRemovedAt: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
142
+ }, import("zod/v4/core").$loose>>>>;
143
+ capturedLists: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodArray<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodNullable<import("zod").ZodUnion<readonly [import("zod").ZodString, import("zod").ZodNumber, import("zod").ZodBoolean]>>>>>>>;
144
+ }, import("zod/v4/core").$loose>>>;
145
+ }, import("zod/v4/core").$loose>;
146
+ };
147
+ readonly 'robots.bulkRun': {
148
+ readonly input: import("zod").ZodObject<{
149
+ robotId: import("zod").ZodString;
150
+ title: import("zod").ZodOptional<import("zod").ZodString>;
151
+ inputParameters: import("zod").ZodArray<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnion<readonly [import("zod").ZodString, import("zod").ZodNumber, import("zod").ZodArray<import("zod").ZodString>]>>>;
152
+ }, import("zod/v4/core").$strip>;
153
+ readonly output: import("zod").ZodObject<{
154
+ statusCode: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
155
+ messageCode: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
156
+ result: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodObject<{
157
+ bulkRun: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodObject<{
158
+ id: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
159
+ title: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
160
+ status: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
161
+ tasksCount: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
162
+ successfulTasks: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
163
+ failedTasks: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
164
+ robotId: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
165
+ createdAt: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
166
+ }, import("zod/v4/core").$loose>>>;
167
+ }, import("zod/v4/core").$loose>>>;
168
+ }, import("zod/v4/core").$loose>;
169
+ };
170
+ readonly 'tasks.list': {
171
+ readonly input: import("zod").ZodObject<{
172
+ robotId: import("zod").ZodString;
173
+ page: import("zod").ZodOptional<import("zod").ZodNumber>;
174
+ pageSize: import("zod").ZodOptional<import("zod").ZodNumber>;
175
+ status: import("zod").ZodOptional<import("zod").ZodEnum<{
176
+ failed: "failed";
177
+ successful: "successful";
178
+ "in-progress": "in-progress";
179
+ }>>;
180
+ robotBulkRunId: import("zod").ZodOptional<import("zod").ZodString>;
181
+ sort: import("zod").ZodOptional<import("zod").ZodString>;
182
+ includeRetried: import("zod").ZodOptional<import("zod").ZodBoolean>;
183
+ fromDate: import("zod").ZodOptional<import("zod").ZodNumber>;
184
+ toDate: import("zod").ZodOptional<import("zod").ZodNumber>;
185
+ }, import("zod/v4/core").$strip>;
186
+ readonly output: import("zod").ZodObject<{
187
+ statusCode: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
188
+ messageCode: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
189
+ result: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodObject<{
190
+ robotTasks: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodObject<{
191
+ totalCount: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
192
+ pageNumber: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
193
+ hasMore: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodBoolean>>;
194
+ items: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodArray<import("zod").ZodObject<{
195
+ id: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
196
+ inputParameters: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnion<readonly [import("zod").ZodString, import("zod").ZodNumber, import("zod").ZodArray<import("zod").ZodString>]>>>>;
197
+ robotId: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
198
+ status: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
199
+ runByUserId: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
200
+ robotBulkRunId: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
201
+ runByTaskMonitorId: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
202
+ runByAPI: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodBoolean>>;
203
+ createdAt: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
204
+ startedAt: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
205
+ finishedAt: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
206
+ userFriendlyError: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
207
+ triedRecordingVideo: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodBoolean>>;
208
+ videoUrl: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
209
+ videoRemovedAt: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
210
+ retriedOriginalTaskId: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
211
+ retriedTaskId: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
212
+ retriedByTaskId: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
213
+ capturedDataTemporaryUrl: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
214
+ capturedTexts: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodNullable<import("zod").ZodUnion<readonly [import("zod").ZodString, import("zod").ZodNumber, import("zod").ZodBoolean]>>>>>;
215
+ capturedScreenshots: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodObject<{
216
+ id: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
217
+ name: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
218
+ src: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
219
+ width: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
220
+ height: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
221
+ x: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
222
+ y: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
223
+ deviceScaleFactor: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
224
+ full: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
225
+ comparedToScreenshotId: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
226
+ diffImageSrc: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
227
+ changePercentage: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
228
+ diffThreshold: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
229
+ fileRemovedAt: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
230
+ }, import("zod/v4/core").$loose>>>>;
231
+ capturedLists: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodArray<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodNullable<import("zod").ZodUnion<readonly [import("zod").ZodString, import("zod").ZodNumber, import("zod").ZodBoolean]>>>>>>>;
232
+ }, import("zod/v4/core").$loose>>>>;
233
+ }, import("zod/v4/core").$loose>>>;
234
+ }, import("zod/v4/core").$loose>>>;
235
+ }, import("zod/v4/core").$loose>;
236
+ };
237
+ readonly 'tasks.get': {
238
+ readonly input: import("zod").ZodObject<{
239
+ robotId: import("zod").ZodString;
240
+ taskId: import("zod").ZodString;
241
+ }, import("zod/v4/core").$strip>;
242
+ readonly output: import("zod").ZodObject<{
243
+ statusCode: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
244
+ messageCode: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
245
+ result: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodObject<{
246
+ id: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
247
+ inputParameters: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnion<readonly [import("zod").ZodString, import("zod").ZodNumber, import("zod").ZodArray<import("zod").ZodString>]>>>>;
248
+ robotId: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
249
+ status: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
250
+ runByUserId: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
251
+ robotBulkRunId: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
252
+ runByTaskMonitorId: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
253
+ runByAPI: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodBoolean>>;
254
+ createdAt: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
255
+ startedAt: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
256
+ finishedAt: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
257
+ userFriendlyError: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
258
+ triedRecordingVideo: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodBoolean>>;
259
+ videoUrl: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
260
+ videoRemovedAt: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
261
+ retriedOriginalTaskId: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
262
+ retriedTaskId: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
263
+ retriedByTaskId: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
264
+ capturedDataTemporaryUrl: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
265
+ capturedTexts: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodNullable<import("zod").ZodUnion<readonly [import("zod").ZodString, import("zod").ZodNumber, import("zod").ZodBoolean]>>>>>;
266
+ capturedScreenshots: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodObject<{
267
+ id: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
268
+ name: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
269
+ src: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
270
+ width: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
271
+ height: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
272
+ x: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
273
+ y: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
274
+ deviceScaleFactor: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
275
+ full: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
276
+ comparedToScreenshotId: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
277
+ diffImageSrc: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
278
+ changePercentage: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
279
+ diffThreshold: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
280
+ fileRemovedAt: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
281
+ }, import("zod/v4/core").$loose>>>>;
282
+ capturedLists: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodArray<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodNullable<import("zod").ZodUnion<readonly [import("zod").ZodString, import("zod").ZodNumber, import("zod").ZodBoolean]>>>>>>>;
283
+ }, import("zod/v4/core").$loose>>>;
284
+ }, import("zod/v4/core").$loose>;
285
+ };
286
+ readonly 'monitors.create': {
287
+ readonly input: import("zod").ZodObject<{
288
+ robotId: import("zod").ZodString;
289
+ name: import("zod").ZodString;
290
+ inputParameters: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnion<readonly [import("zod").ZodString, import("zod").ZodNumber, import("zod").ZodArray<import("zod").ZodString>]>>;
291
+ notifyOnCapturedScreenshotChange: import("zod").ZodBoolean;
292
+ notifyOnCapturedTextChange: import("zod").ZodBoolean;
293
+ capturedScreenshotNotificationThreshold: import("zod").ZodNumber;
294
+ schedule: import("zod").ZodOptional<import("zod").ZodString>;
295
+ schedules: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodObject<{
296
+ type: import("zod").ZodLiteral<"FIXED_INTERVAL">;
297
+ everyMinutes: import("zod").ZodNumber;
298
+ }, import("zod/v4/core").$strip>>>;
299
+ }, import("zod/v4/core").$strip>;
300
+ readonly output: import("zod").ZodObject<{
301
+ statusCode: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
302
+ messageCode: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
303
+ monitor: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodObject<{
304
+ id: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
305
+ name: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
306
+ status: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
307
+ pausedReason: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
308
+ inputParameters: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnion<readonly [import("zod").ZodString, import("zod").ZodNumber, import("zod").ZodArray<import("zod").ZodString>]>>>>;
309
+ schedules: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodArray<import("zod").ZodObject<{
310
+ type: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
311
+ everyMinutes: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
312
+ }, import("zod/v4/core").$loose>>>>;
313
+ schedule: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
314
+ notifyOnCapturedScreenshotChange: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodBoolean>>;
315
+ notifyOnCapturedTextChange: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodBoolean>>;
316
+ capturedScreenshotNotificationThreshold: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
317
+ createdAt: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
318
+ pausedAt: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
319
+ updatedAt: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
320
+ }, import("zod/v4/core").$loose>>>;
321
+ }, import("zod/v4/core").$loose>;
322
+ };
323
+ readonly 'monitors.delete': {
324
+ readonly input: import("zod").ZodObject<{
325
+ robotId: import("zod").ZodString;
326
+ monitorId: import("zod").ZodString;
327
+ }, import("zod/v4/core").$strip>;
328
+ readonly output: import("zod").ZodObject<{
329
+ statusCode: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
330
+ messageCode: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
331
+ }, import("zod/v4/core").$loose>;
332
+ };
333
+ readonly 'webhooks.create': {
334
+ readonly input: import("zod").ZodObject<{
335
+ robotId: import("zod").ZodString;
336
+ hookUrl: import("zod").ZodString;
337
+ eventType: import("zod").ZodEnum<{
338
+ taskCapturedDataChanged: "taskCapturedDataChanged";
339
+ taskFinished: "taskFinished";
340
+ taskFinishedSuccessfully: "taskFinishedSuccessfully";
341
+ taskFinishedWithError: "taskFinishedWithError";
342
+ tableExportFinishedSuccessfully: "tableExportFinishedSuccessfully";
343
+ }>;
344
+ }, import("zod/v4/core").$strip>;
345
+ readonly output: import("zod").ZodObject<{
346
+ statusCode: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
347
+ messageCode: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
348
+ webhook: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodObject<{
349
+ id: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
350
+ url: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
351
+ webhookEvent: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
352
+ createdAt: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
353
+ }, import("zod/v4/core").$loose>>>;
354
+ }, import("zod/v4/core").$loose>;
355
+ };
356
+ readonly 'webhooks.list': {
357
+ readonly input: import("zod").ZodObject<{
358
+ robotId: import("zod").ZodString;
359
+ }, import("zod/v4/core").$strip>;
360
+ readonly output: import("zod").ZodObject<{
361
+ statusCode: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
362
+ messageCode: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
363
+ webhooks: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodObject<{
364
+ totalCount: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
365
+ items: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodArray<import("zod").ZodObject<{
366
+ id: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
367
+ url: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
368
+ webhookEvent: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
369
+ createdAt: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
370
+ }, import("zod/v4/core").$loose>>>>;
371
+ }, import("zod/v4/core").$loose>>>;
372
+ }, import("zod/v4/core").$loose>;
373
+ };
374
+ };
375
+ declare const defaultAuthType: AuthTypes;
376
+ export declare const browseaiEndpointMeta: {
377
+ readonly 'system.getStatus': {
378
+ readonly riskLevel: "read";
379
+ readonly description: "Check Browse AI task-queue status";
380
+ };
381
+ readonly 'robots.list': {
382
+ readonly riskLevel: "read";
383
+ readonly description: "List robots on the account";
384
+ };
385
+ readonly 'robots.run': {
386
+ readonly riskLevel: "write";
387
+ readonly description: "Start a robot task";
388
+ };
389
+ readonly 'robots.bulkRun': {
390
+ readonly riskLevel: "write";
391
+ readonly description: "Start a bulk run of robot tasks";
392
+ };
393
+ readonly 'tasks.list': {
394
+ readonly riskLevel: "read";
395
+ readonly description: "List tasks for a robot";
396
+ };
397
+ readonly 'tasks.get': {
398
+ readonly riskLevel: "read";
399
+ readonly description: "Get a robot task by id";
400
+ };
401
+ readonly 'monitors.create': {
402
+ readonly riskLevel: "write";
403
+ readonly description: "Create a robot monitor";
404
+ };
405
+ readonly 'monitors.delete': {
406
+ readonly riskLevel: "write";
407
+ readonly description: "Delete a robot monitor";
408
+ };
409
+ readonly 'webhooks.create': {
410
+ readonly riskLevel: "write";
411
+ readonly description: "Create a robot webhook";
412
+ };
413
+ readonly 'webhooks.list': {
414
+ readonly riskLevel: "read";
415
+ readonly description: "List webhooks for a robot";
416
+ };
417
+ };
418
+ export type BaseBrowseaiPlugin<T extends BrowseaiPluginOptions> = CorsairPlugin<'browseai', typeof BrowseaiSchema, typeof browseaiEndpointsNested, Record<string, never>, T, typeof defaultAuthType>;
419
+ export type InternalBrowseaiPlugin = BaseBrowseaiPlugin<BrowseaiPluginOptions>;
420
+ export type ExternalBrowseaiPlugin<T extends BrowseaiPluginOptions> = BaseBrowseaiPlugin<T>;
421
+ /**
422
+ * Browse AI plugin.
423
+ *
424
+ * **No inbound webhooks.** Browse AI calls URLs you register on a robot;
425
+ * it does not POST events into Corsair.
426
+ */
427
+ export declare function browseai<const T extends BrowseaiPluginOptions>(incomingOptions?: BrowseaiPluginOptions & T): ExternalBrowseaiPlugin<T>;
428
+ export type { BrowseaiEndpointInputs, BrowseaiEndpointOutputs, } from './endpoints/types';
429
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,SAAS,EACT,aAAa,EACb,eAAe,EACf,mBAAmB,EACnB,aAAa,EACb,oBAAoB,EACpB,iBAAiB,EACjB,QAAQ,EAER,uBAAuB,EAGvB,MAAM,cAAc,CAAC;AActB,OAAO,KAAK,EACX,sBAAsB,EACtB,uBAAuB,EACvB,MAAM,mBAAmB,CAAC;AAM3B,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE1C,MAAM,MAAM,qBAAqB,GAAG;IACnC,QAAQ,CAAC,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC/B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,sBAAsB,CAAC,OAAO,CAAC,CAAC;IACxC,aAAa,CAAC,EAAE,mBAAmB,CAAC;IACpC,WAAW,CAAC,EAAE,uBAAuB,CAAC,OAAO,uBAAuB,CAAC,CAAC;CACtE,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,kBAAkB;;CAEM,CAAC;AAEtC,MAAM,MAAM,eAAe,GAAG,oBAAoB,CACjD,OAAO,cAAc,EACrB,qBAAqB,EACrB,SAAS,EACT,OAAO,kBAAkB,CACzB,CAAC;AAEF,MAAM,MAAM,yBAAyB,GACpC,iBAAiB,CAAC,qBAAqB,CAAC,CAAC;AAE1C,MAAM,MAAM,sBAAsB,GAAG,aAAa,CACjD,OAAO,uBAAuB,CAC9B,CAAC;AAEF,KAAK,gBAAgB,CAAC,CAAC,SAAS,MAAM,uBAAuB,IAC5D,eAAe,CACd,eAAe,EACf,sBAAsB,CAAC,CAAC,CAAC,EACzB,uBAAuB,CAAC,CAAC,CAAC,CAC1B,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG;IAC/B,eAAe,EAAE,gBAAgB,CAAC,iBAAiB,CAAC,CAAC;IACrD,UAAU,EAAE,gBAAgB,CAAC,YAAY,CAAC,CAAC;IAC3C,SAAS,EAAE,gBAAgB,CAAC,WAAW,CAAC,CAAC;IACzC,aAAa,EAAE,gBAAgB,CAAC,eAAe,CAAC,CAAC;IACjD,SAAS,EAAE,gBAAgB,CAAC,WAAW,CAAC,CAAC;IACzC,QAAQ,EAAE,gBAAgB,CAAC,UAAU,CAAC,CAAC;IACvC,cAAc,EAAE,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;IACnD,cAAc,EAAE,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;IACnD,cAAc,EAAE,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;IACnD,YAAY,EAAE,gBAAgB,CAAC,cAAc,CAAC,CAAC;CAC/C,CAAC;AAEF,QAAA,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;CAqBnB,CAAC;AAEX,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2CnC,CAAC;AAEF,QAAA,MAAM,eAAe,EAAE,SAA8B,CAAC;AAEtD,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyC8C,CAAC;AAEhF,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,qBAAqB,IAAI,aAAa,CAC9E,UAAU,EACV,OAAO,cAAc,EACrB,OAAO,uBAAuB,EAC9B,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EACrB,CAAC,EACD,OAAO,eAAe,CACtB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,kBAAkB,CAAC,qBAAqB,CAAC,CAAC;AAE/E,MAAM,MAAM,sBAAsB,CAAC,CAAC,SAAS,qBAAqB,IACjE,kBAAkB,CAAC,CAAC,CAAC,CAAC;AAEvB;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,KAAK,CAAC,CAAC,SAAS,qBAAqB,EAC7D,eAAe,GAAE,qBAAqB,GAAG,CAAmC,GAC1E,sBAAsB,CAAC,CAAC,CAAC,CAoC3B;AAED,YAAY,EACX,sBAAsB,EACtB,uBAAuB,GACvB,MAAM,mBAAmB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1 @@
1
+ import{AuthMissingError as H}from"corsair/core";import{logEventFromContext as b}from"corsair/core";import{request as Q}from"corsair/http";var Z="https://api.browse.ai/v2",v={enabled:!0,maxRetries:3,initialRetryDelay:1e3,backoffMultiplier:2,headerNames:{retryAfter:"retry-after"}},X={...v,enabled:!1,maxRetries:0};function Y(t){return{BASE:Z,VERSION:"2",WITH_CREDENTIALS:!1,CREDENTIALS:"omit",TOKEN:t,HEADERS:{Accept:"application/json"}}}function J(t){return t==="POST"||t==="PUT"||t==="PATCH"?X:v}async function G(t,s,e){let{schema:a,method:l="GET",body:F,query:K}=e,M=l==="POST"||l==="PUT"||l==="PATCH",V={method:l,url:t,body:M?F:void 0,mediaType:M?"application/json; charset=utf-8":void 0,query:K},$=await Q(Y(s),V,{rateLimitConfig:J(l)});return a.parse($)}async function d(t,s,e,a={}){return await G(s,t.key,{...a,schema:e})}function R(t){let s={};for(let e of Object.keys(t)){let a=t[e];a!==void 0&&(s[e]=a)}return s}function W(t){let s={};for(let e of Object.keys(t)){let a=t[e];a!==void 0&&(s[e]=a)}return s}function m(t,s=""){return`robots/${encodeURIComponent(t)}${s}`}function c(t,s){let e={};for(let l of s)t[l]!==void 0&&(e[l]=t[l]);let a=Object.keys(t).filter(l=>t[l]!==void 0);return a.length>0&&(e.fields=a),e}import{z as o}from"zod";import{z as r}from"zod";var n=r.string().nullable().optional(),i=r.number().nullable().optional(),h=r.boolean().nullable().optional(),tt=r.object({label:n,value:n}).loose(),et=r.object({type:n,name:n,label:n,required:h,encrypted:h,defaultValue:r.union([r.string(),r.number(),r.array(r.string())]).nullable().optional(),value:r.union([r.string(),r.number(),r.array(r.string()),r.null()]).optional(),min:i,max:i,pattern:n,options:r.array(tt).nullable().optional()}).loose(),y=r.record(r.string(),r.union([r.string(),r.number(),r.array(r.string())])),g=r.object({id:n,name:n,createdAt:i,inputParameters:r.array(et).nullable().optional()}).loose(),_=r.record(r.string(),r.union([r.string(),r.number(),r.boolean()]).nullable()),ot=r.object({id:n,name:n,src:n,width:i,height:i,x:i,y:i,deviceScaleFactor:i,full:n,comparedToScreenshotId:n,diffImageSrc:n,changePercentage:i,diffThreshold:i,fileRemovedAt:i}).loose(),k=r.object({id:n,inputParameters:y.nullable().optional(),robotId:n,status:n,runByUserId:n,robotBulkRunId:n,runByTaskMonitorId:n,runByAPI:h,createdAt:i,startedAt:i,finishedAt:i,userFriendlyError:n,triedRecordingVideo:h,videoUrl:n,videoRemovedAt:i,retriedOriginalTaskId:n,retriedTaskId:n,retriedByTaskId:n,capturedDataTemporaryUrl:n,capturedTexts:_.nullable().optional(),capturedScreenshots:r.record(r.string(),ot).nullable().optional(),capturedLists:r.record(r.string(),r.array(_)).nullable().optional()}).loose(),st=r.object({type:n,everyMinutes:i}).loose(),S=r.object({id:n,name:n,status:n,pausedReason:n,inputParameters:y.nullable().optional(),schedules:r.array(st).nullable().optional(),schedule:n,notifyOnCapturedScreenshotChange:h,notifyOnCapturedTextChange:h,capturedScreenshotNotificationThreshold:i,createdAt:i,pausedAt:i,updatedAt:i}).loose(),B=r.object({id:n,url:n,webhookEvent:n,createdAt:i}).loose(),T=r.object({id:n,title:n,status:n,tasksCount:i,successfulTasks:i,failedTasks:i,robotId:n,createdAt:i}).loose(),C=r.object({statusCode:i,messageCode:n,tasksQueueStatus:n}).loose();var rt=o.enum(["taskCapturedDataChanged","taskFinished","taskFinishedSuccessfully","taskFinishedWithError","tableExportFinishedSuccessfully"]),nt=o.enum(["failed","successful","in-progress"]),at=o.object({}),it=o.object({}),ut=o.object({robotId:o.string().min(1),recordVideo:o.boolean().optional(),inputParameters:y.optional()}),pt=o.object({robotId:o.string().min(1),title:o.string().min(1).max(200).optional(),inputParameters:o.array(y).min(1)}),lt=o.object({robotId:o.string().min(1),page:o.number().optional(),pageSize:o.number().optional(),status:nt.optional(),robotBulkRunId:o.string().optional(),sort:o.string().optional(),includeRetried:o.boolean().optional(),fromDate:o.number().optional(),toDate:o.number().optional()}),dt=o.object({robotId:o.string().min(1),taskId:o.string().min(1)}),ct=o.object({robotId:o.string().min(1),name:o.string().min(1).max(200),inputParameters:y,notifyOnCapturedScreenshotChange:o.boolean(),notifyOnCapturedTextChange:o.boolean(),capturedScreenshotNotificationThreshold:o.number(),schedule:o.string().optional(),schedules:o.array(o.object({type:o.literal("FIXED_INTERVAL"),everyMinutes:o.number()})).optional()}),bt=o.object({robotId:o.string().min(1),monitorId:o.string().min(1)}),mt=o.object({robotId:o.string().min(1),hookUrl:o.string().url(),eventType:rt}),wt=o.object({robotId:o.string().min(1)}),w=o.object({statusCode:o.number().nullable().optional(),messageCode:o.string().nullable().optional()}).loose(),ht=w.extend({robots:o.object({totalCount:o.number().nullable().optional(),items:o.array(g).nullable().optional()}).loose().nullable().optional()}),N=w.extend({result:k.nullable().optional()}),yt=w.extend({result:o.object({robotTasks:o.object({totalCount:o.number().nullable().optional(),pageNumber:o.number().nullable().optional(),hasMore:o.boolean().nullable().optional(),items:o.array(k).nullable().optional()}).loose().nullable().optional()}).loose().nullable().optional()}),ft=w.extend({result:o.object({bulkRun:T.nullable().optional()}).loose().nullable().optional()}),kt=w.extend({monitor:S.nullable().optional()}),Bt=w,Rt=w.extend({webhook:B.nullable().optional()}),gt=w.extend({webhooks:o.object({totalCount:o.number().nullable().optional(),items:o.array(B).nullable().optional()}).loose().nullable().optional()}),u={systemGetStatus:at,robotsList:it,robotsRun:ut,robotsBulkRun:pt,tasksList:lt,tasksGet:dt,monitorsCreate:ct,monitorsDelete:bt,webhooksCreate:mt,webhooksList:wt},p={systemGetStatus:C,robotsList:ht,robotsRun:N,robotsBulkRun:ft,tasksList:yt,tasksGet:N,monitorsCreate:kt,monitorsDelete:Bt,webhooksCreate:Rt,webhooksList:gt};var E=async(t,s)=>{u.systemGetStatus.parse(s);let e=await d(t,"status",p.systemGetStatus);return await b(t,"browseai.system.getStatus",c(s,[]),"completed"),e},I=async(t,s)=>{u.robotsList.parse(s);let e=await d(t,"robots",p.robotsList);return await b(t,"browseai.robots.list",{...c(s,[]),returned:e.robots?.items?.length??0},"completed"),e},x=async(t,s)=>{let e=u.robotsRun.parse(s),a=await d(t,m(e.robotId,"/tasks"),p.robotsRun,{method:"POST",body:R({recordVideo:e.recordVideo,inputParameters:e.inputParameters})});return await b(t,"browseai.robots.run",c(e,["robotId"]),"completed"),a},P=async(t,s)=>{let e=u.robotsBulkRun.parse(s),a=await d(t,m(e.robotId,"/bulk-runs"),p.robotsBulkRun,{method:"POST",body:R({title:e.title,inputParameters:e.inputParameters})});return await b(t,"browseai.robots.bulkRun",c(e,["robotId"]),"completed"),a},O=async(t,s)=>{let e=u.tasksList.parse(s),a=await d(t,m(e.robotId,"/tasks"),p.tasksList,{query:W({page:e.page,pageSize:e.pageSize,status:e.status,robotBulkRunId:e.robotBulkRunId,sort:e.sort,includeRetried:e.includeRetried,fromDate:e.fromDate,toDate:e.toDate})});return await b(t,"browseai.tasks.list",c(e,["robotId"]),"completed"),a},L=async(t,s)=>{let e=u.tasksGet.parse(s),a=await d(t,`${m(e.robotId,"/tasks")}/${encodeURIComponent(e.taskId)}`,p.tasksGet);return await b(t,"browseai.tasks.get",c(e,["robotId","taskId"]),"completed"),a},A=async(t,s)=>{let e=u.monitorsCreate.parse(s),a=await d(t,m(e.robotId,"/monitors"),p.monitorsCreate,{method:"POST",body:R({name:e.name,inputParameters:e.inputParameters,notifyOnCapturedScreenshotChange:e.notifyOnCapturedScreenshotChange,notifyOnCapturedTextChange:e.notifyOnCapturedTextChange,capturedScreenshotNotificationThreshold:e.capturedScreenshotNotificationThreshold,schedule:e.schedule,schedules:e.schedules})});return await b(t,"browseai.monitors.create",c(e,["robotId"]),"completed"),a},z=async(t,s)=>{let e=u.monitorsDelete.parse(s),a=await d(t,`${m(e.robotId,"/monitors")}/${encodeURIComponent(e.monitorId)}`,p.monitorsDelete,{method:"DELETE"});return await b(t,"browseai.monitors.delete",c(e,["robotId","monitorId"]),"completed"),a},j=async(t,s)=>{let e=u.webhooksCreate.parse(s),a=await d(t,m(e.robotId,"/webhooks"),p.webhooksCreate,{method:"POST",body:{hookUrl:e.hookUrl,eventType:e.eventType}});return await b(t,"browseai.webhooks.create",c(e,["robotId"]),"completed"),a},D=async(t,s)=>{let e=u.webhooksList.parse(s),a=await d(t,m(e.robotId,"/webhooks"),p.webhooksList);return await b(t,"browseai.webhooks.list",c(e,["robotId"]),"completed"),a};import{ApiError as f}from"corsair/http";var q={RATE_LIMIT_ERROR:{match:t=>{if(t instanceof f&&t.status===429)return!0;let s=t.message.toLowerCase();return s.includes("429")||s.includes("rate limit")},handler:async t=>({maxRetries:0,headersRetryAfterMs:t instanceof f?t.retryAfter:void 0})},AUTH_ERROR:{match:t=>{if(t instanceof f&&t.status===401)return!0;let s=t.message.toLowerCase();return s.includes("unauthorized")||s.includes("unauthenticated")},handler:async()=>({maxRetries:0})},PERMISSION_ERROR:{match:t=>t instanceof f&&t.status===403?!0:t.message.toLowerCase().includes("forbidden"),handler:async()=>({maxRetries:0})},NOT_FOUND_ERROR:{match:t=>t instanceof f&&t.status===404?!0:t.message.toLowerCase().includes("not found"),handler:async()=>({maxRetries:0})},BAD_REQUEST_ERROR:{match:t=>t instanceof f&&t.status===400?!0:t.message.toLowerCase().includes("bad request"),handler:async()=>({maxRetries:0})},DEFAULT:{match:()=>!0,handler:async()=>({maxRetries:0})}};var U={version:"1.0.0",entities:{bulkRun:T,monitor:S,robot:g,robotTask:k,systemStatus:C,webhook:B}};var St={api_key:{}},Tt={system:{getStatus:E},robots:{list:I,run:x,bulkRun:P},tasks:{list:O,get:L},monitors:{create:A,delete:z},webhooks:{create:j,list:D}},Ct={"system.getStatus":{input:u.systemGetStatus,output:p.systemGetStatus},"robots.list":{input:u.robotsList,output:p.robotsList},"robots.run":{input:u.robotsRun,output:p.robotsRun},"robots.bulkRun":{input:u.robotsBulkRun,output:p.robotsBulkRun},"tasks.list":{input:u.tasksList,output:p.tasksList},"tasks.get":{input:u.tasksGet,output:p.tasksGet},"monitors.create":{input:u.monitorsCreate,output:p.monitorsCreate},"monitors.delete":{input:u.monitorsDelete,output:p.monitorsDelete},"webhooks.create":{input:u.webhooksCreate,output:p.webhooksCreate},"webhooks.list":{input:u.webhooksList,output:p.webhooksList}},Et="api_key",It={"system.getStatus":{riskLevel:"read",description:"Check Browse AI task-queue status"},"robots.list":{riskLevel:"read",description:"List robots on the account"},"robots.run":{riskLevel:"write",description:"Start a robot task"},"robots.bulkRun":{riskLevel:"write",description:"Start a bulk run of robot tasks"},"tasks.list":{riskLevel:"read",description:"List tasks for a robot"},"tasks.get":{riskLevel:"read",description:"Get a robot task by id"},"monitors.create":{riskLevel:"write",description:"Create a robot monitor"},"monitors.delete":{riskLevel:"write",description:"Delete a robot monitor"},"webhooks.create":{riskLevel:"write",description:"Create a robot webhook"},"webhooks.list":{riskLevel:"read",description:"List webhooks for a robot"}};function Jt(t={}){let s={...t,authType:t.authType??Et};return{id:"browseai",authConfig:St,schema:U,options:s,hooks:s.hooks,endpoints:Tt,webhooks:{},endpointMeta:It,endpointSchemas:Ct,webhookSchemas:{},errorHandlers:{...q,...s.errorHandlers},keyBuilder:async(e,a)=>{if(a==="endpoint"&&s.key)return s.key;if(a==="endpoint"&&e.authType==="api_key"){let l=await e.keys.get_api_key();if(!l)throw new H("browseai","api_key");return l}throw new H("browseai",e.authType)}}}export{Jt as browseai,St as browseaiAuthConfig,It as browseaiEndpointMeta,Ct as browseaiEndpointSchemas};
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=plugin.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.test.d.ts","sourceRoot":"","sources":["../plugin.test.ts"],"names":[],"mappings":""}