anchorbrowser 0.1.0a3__py3-none-any.whl → 0.2.0__py3-none-any.whl

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 (80) hide show
  1. anchorbrowser/__init__.py +3 -1
  2. anchorbrowser/_base_client.py +16 -13
  3. anchorbrowser/_client.py +38 -9
  4. anchorbrowser/_compat.py +48 -48
  5. anchorbrowser/_files.py +4 -4
  6. anchorbrowser/_models.py +54 -45
  7. anchorbrowser/_qs.py +7 -7
  8. anchorbrowser/_types.py +53 -12
  9. anchorbrowser/_utils/__init__.py +9 -2
  10. anchorbrowser/_utils/_compat.py +45 -0
  11. anchorbrowser/_utils/_datetime_parse.py +136 -0
  12. anchorbrowser/_utils/_transform.py +13 -3
  13. anchorbrowser/_utils/_typing.py +6 -1
  14. anchorbrowser/_utils/_utils.py +4 -5
  15. anchorbrowser/_version.py +1 -1
  16. anchorbrowser/lib/browser.py +1 -1
  17. anchorbrowser/resources/__init__.py +42 -0
  18. anchorbrowser/resources/batch_sessions.py +288 -0
  19. anchorbrowser/resources/events.py +270 -0
  20. anchorbrowser/resources/extensions.py +9 -9
  21. anchorbrowser/resources/profiles.py +24 -150
  22. anchorbrowser/resources/sessions/__init__.py +14 -0
  23. anchorbrowser/resources/sessions/agent/__init__.py +33 -0
  24. anchorbrowser/resources/sessions/agent/agent.py +273 -0
  25. anchorbrowser/resources/sessions/agent/files.py +280 -0
  26. anchorbrowser/resources/sessions/all.py +5 -5
  27. anchorbrowser/resources/sessions/clipboard.py +5 -5
  28. anchorbrowser/resources/sessions/keyboard.py +11 -13
  29. anchorbrowser/resources/sessions/mouse.py +12 -244
  30. anchorbrowser/resources/sessions/recordings/primary.py +3 -3
  31. anchorbrowser/resources/sessions/recordings/recordings.py +7 -7
  32. anchorbrowser/resources/sessions/sessions.py +345 -30
  33. anchorbrowser/resources/task/__init__.py +33 -0
  34. anchorbrowser/resources/task/run.py +225 -0
  35. anchorbrowser/resources/task/task.py +358 -0
  36. anchorbrowser/resources/tools.py +107 -37
  37. anchorbrowser/types/__init__.py +14 -1
  38. anchorbrowser/types/batch_session_create_params.py +487 -0
  39. anchorbrowser/types/batch_session_create_response.py +27 -0
  40. anchorbrowser/types/batch_session_retrieve_response.py +90 -0
  41. anchorbrowser/types/event_signal_params.py +13 -0
  42. anchorbrowser/types/event_wait_for_params.py +14 -0
  43. anchorbrowser/types/event_wait_for_response.py +12 -0
  44. anchorbrowser/types/extension_manifest.py +6 -1
  45. anchorbrowser/types/profile_create_params.py +3 -6
  46. anchorbrowser/types/profile_list_response.py +0 -3
  47. anchorbrowser/types/profile_retrieve_response.py +0 -3
  48. anchorbrowser/types/session_create_params.py +308 -29
  49. anchorbrowser/types/session_list_pages_response.py +25 -0
  50. anchorbrowser/types/session_retrieve_response.py +46 -0
  51. anchorbrowser/types/session_scroll_params.py +3 -0
  52. anchorbrowser/types/session_upload_file_params.py +14 -0
  53. anchorbrowser/types/session_upload_file_response.py +17 -0
  54. anchorbrowser/types/sessions/__init__.py +0 -4
  55. anchorbrowser/types/sessions/agent/__init__.py +7 -0
  56. anchorbrowser/types/sessions/agent/file_list_response.py +32 -0
  57. anchorbrowser/types/sessions/agent/file_upload_params.py +14 -0
  58. anchorbrowser/types/sessions/agent/file_upload_response.py +17 -0
  59. anchorbrowser/types/sessions/keyboard_shortcut_params.py +2 -2
  60. anchorbrowser/types/sessions/recording_list_response.py +4 -8
  61. anchorbrowser/types/task/__init__.py +6 -0
  62. anchorbrowser/types/task/run_execute_params.py +324 -0
  63. anchorbrowser/types/task/run_execute_response.py +33 -0
  64. anchorbrowser/types/task_create_params.py +317 -0
  65. anchorbrowser/types/task_create_response.py +345 -0
  66. anchorbrowser/types/task_list_params.py +15 -0
  67. anchorbrowser/types/task_list_response.py +361 -0
  68. anchorbrowser/types/tool_fetch_webpage_params.py +15 -0
  69. anchorbrowser/types/tool_perform_web_task_params.py +17 -1
  70. anchorbrowser/types/tool_perform_web_task_response.py +3 -3
  71. {anchorbrowser-0.1.0a3.dist-info → anchorbrowser-0.2.0.dist-info}/METADATA +13 -14
  72. anchorbrowser-0.2.0.dist-info/RECORD +126 -0
  73. anchorbrowser/types/profile_update_params.py +0 -27
  74. anchorbrowser/types/sessions/mouse_down_params.py +0 -18
  75. anchorbrowser/types/sessions/mouse_down_response.py +0 -11
  76. anchorbrowser/types/sessions/mouse_up_params.py +0 -18
  77. anchorbrowser/types/sessions/mouse_up_response.py +0 -11
  78. anchorbrowser-0.1.0a3.dist-info/RECORD +0 -100
  79. {anchorbrowser-0.1.0a3.dist-info → anchorbrowser-0.2.0.dist-info}/WHEEL +0 -0
  80. {anchorbrowser-0.1.0a3.dist-info → anchorbrowser-0.2.0.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,345 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from typing import Union, Optional
4
+ from datetime import datetime
5
+ from typing_extensions import Literal, TypeAlias
6
+
7
+ from pydantic import Field as FieldInfo
8
+
9
+ from .._models import BaseModel
10
+
11
+ __all__ = [
12
+ "TaskCreateResponse",
13
+ "Data",
14
+ "DataBrowserConfiguration",
15
+ "DataBrowserConfigurationLiveView",
16
+ "DataBrowserConfigurationProxy",
17
+ "DataBrowserConfigurationProxyAnchorProxy",
18
+ "DataBrowserConfigurationProxyCustomProxy",
19
+ "DataBrowserConfigurationRecording",
20
+ "DataBrowserConfigurationTimeout",
21
+ ]
22
+
23
+
24
+ class DataBrowserConfigurationLiveView(BaseModel):
25
+ read_only: Optional[bool] = None
26
+ """Enable or disable read-only mode for live viewing. Defaults to `false`."""
27
+
28
+
29
+ class DataBrowserConfigurationProxyAnchorProxy(BaseModel):
30
+ active: bool
31
+
32
+ city: Optional[str] = None
33
+ """City name for precise geographic targeting.
34
+
35
+ Supported for anchor_proxy only. Can only be used when region is also provided.
36
+ """
37
+
38
+ country_code: Optional[
39
+ Literal[
40
+ "af",
41
+ "al",
42
+ "dz",
43
+ "ad",
44
+ "ao",
45
+ "as",
46
+ "ag",
47
+ "ar",
48
+ "am",
49
+ "aw",
50
+ "au",
51
+ "at",
52
+ "az",
53
+ "bs",
54
+ "bh",
55
+ "bb",
56
+ "by",
57
+ "be",
58
+ "bz",
59
+ "bj",
60
+ "bm",
61
+ "bo",
62
+ "ba",
63
+ "br",
64
+ "bg",
65
+ "bf",
66
+ "cm",
67
+ "ca",
68
+ "cv",
69
+ "td",
70
+ "cl",
71
+ "co",
72
+ "cg",
73
+ "cr",
74
+ "ci",
75
+ "hr",
76
+ "cu",
77
+ "cy",
78
+ "cz",
79
+ "dk",
80
+ "dm",
81
+ "do",
82
+ "ec",
83
+ "eg",
84
+ "sv",
85
+ "ee",
86
+ "et",
87
+ "fo",
88
+ "fi",
89
+ "fr",
90
+ "gf",
91
+ "pf",
92
+ "ga",
93
+ "gm",
94
+ "ge",
95
+ "de",
96
+ "gh",
97
+ "gi",
98
+ "gr",
99
+ "gd",
100
+ "gp",
101
+ "gt",
102
+ "gg",
103
+ "gn",
104
+ "gw",
105
+ "gy",
106
+ "ht",
107
+ "hn",
108
+ "hu",
109
+ "is",
110
+ "in",
111
+ "ir",
112
+ "iq",
113
+ "ie",
114
+ "il",
115
+ "it",
116
+ "jm",
117
+ "jp",
118
+ "jo",
119
+ "kz",
120
+ "kw",
121
+ "kg",
122
+ "lv",
123
+ "lb",
124
+ "ly",
125
+ "li",
126
+ "lt",
127
+ "lu",
128
+ "mk",
129
+ "ml",
130
+ "mt",
131
+ "mq",
132
+ "mr",
133
+ "mx",
134
+ "md",
135
+ "mc",
136
+ "me",
137
+ "ma",
138
+ "nl",
139
+ "nz",
140
+ "ni",
141
+ "ng",
142
+ "no",
143
+ "pk",
144
+ "pa",
145
+ "py",
146
+ "pe",
147
+ "ph",
148
+ "pl",
149
+ "pt",
150
+ "pr",
151
+ "qa",
152
+ "ro",
153
+ "lc",
154
+ "sm",
155
+ "sa",
156
+ "sn",
157
+ "rs",
158
+ "sc",
159
+ "sl",
160
+ "sk",
161
+ "si",
162
+ "so",
163
+ "za",
164
+ "kr",
165
+ "es",
166
+ "sr",
167
+ "se",
168
+ "ch",
169
+ "sy",
170
+ "st",
171
+ "tw",
172
+ "tj",
173
+ "tg",
174
+ "tt",
175
+ "tn",
176
+ "tr",
177
+ "tc",
178
+ "ua",
179
+ "ae",
180
+ "us",
181
+ "uy",
182
+ "uz",
183
+ "ve",
184
+ "ye",
185
+ "bd",
186
+ "bw",
187
+ "bn",
188
+ "bi",
189
+ "kh",
190
+ "cn",
191
+ "dj",
192
+ "gq",
193
+ "sz",
194
+ "fj",
195
+ "hk",
196
+ "id",
197
+ "ke",
198
+ "la",
199
+ "ls",
200
+ "lr",
201
+ "mg",
202
+ "mw",
203
+ "my",
204
+ "mv",
205
+ "mn",
206
+ "mz",
207
+ "mm",
208
+ "na",
209
+ "np",
210
+ "nc",
211
+ "ne",
212
+ "om",
213
+ "pg",
214
+ "ru",
215
+ "rw",
216
+ "ws",
217
+ "sg",
218
+ "ss",
219
+ "lk",
220
+ "sd",
221
+ "tz",
222
+ "th",
223
+ "tl",
224
+ "tm",
225
+ "ug",
226
+ "gb",
227
+ "vu",
228
+ "vn",
229
+ "zm",
230
+ "zw",
231
+ "bt",
232
+ "mu",
233
+ ]
234
+ ] = None
235
+ """Supported country codes ISO 2 lowercase
236
+
237
+ **On change make sure to update the Proxy type.**
238
+ """
239
+
240
+ region: Optional[str] = None
241
+ """
242
+ Region code for more specific geographic targeting. The city parameter can only
243
+ be used when region is also provided.
244
+ """
245
+
246
+ type: Optional[Literal["anchor_proxy", "anchor_residential", "anchor_mobile", "anchor_gov"]] = None
247
+ """**On change make sure to update the country_code.**"""
248
+
249
+
250
+ class DataBrowserConfigurationProxyCustomProxy(BaseModel):
251
+ active: bool
252
+
253
+ password: str
254
+ """Proxy password"""
255
+
256
+ server: str
257
+ """Proxy server address"""
258
+
259
+ type: Literal["custom"]
260
+
261
+ username: str
262
+ """Proxy username"""
263
+
264
+
265
+ DataBrowserConfigurationProxy: TypeAlias = Union[
266
+ DataBrowserConfigurationProxyAnchorProxy, DataBrowserConfigurationProxyCustomProxy
267
+ ]
268
+
269
+
270
+ class DataBrowserConfigurationRecording(BaseModel):
271
+ active: Optional[bool] = None
272
+ """Enable or disable video recording of the browser session. Defaults to `true`."""
273
+
274
+
275
+ class DataBrowserConfigurationTimeout(BaseModel):
276
+ idle_timeout: Optional[int] = None
277
+ """
278
+ The amount of time (in minutes) the browser session waits for new connections
279
+ after all others are closed before stopping. Defaults to `5`.
280
+ """
281
+
282
+ max_duration: Optional[int] = None
283
+ """Maximum amount of time (in minutes) for the browser to run before terminating.
284
+
285
+ Defaults to `20`.
286
+ """
287
+
288
+
289
+ class DataBrowserConfiguration(BaseModel):
290
+ initial_url: Optional[str] = None
291
+ """The URL to navigate to when the browser session starts.
292
+
293
+ If not provided, the browser will load an empty page.
294
+ """
295
+
296
+ live_view: Optional[DataBrowserConfigurationLiveView] = None
297
+ """Configuration for live viewing the browser session."""
298
+
299
+ proxy: Optional[DataBrowserConfigurationProxy] = None
300
+ """Proxy Documentation available at [Proxy Documentation](/advanced/proxy)"""
301
+
302
+ recording: Optional[DataBrowserConfigurationRecording] = None
303
+ """Configuration for session recording."""
304
+
305
+ timeout: Optional[DataBrowserConfigurationTimeout] = None
306
+ """Timeout configurations for the browser session."""
307
+
308
+
309
+ class Data(BaseModel):
310
+ id: str
311
+ """Unique identifier for the task"""
312
+
313
+ code: str
314
+ """Base64 encoded task code"""
315
+
316
+ created_at: datetime = FieldInfo(alias="createdAt")
317
+ """Task creation timestamp"""
318
+
319
+ deleted: bool
320
+ """Whether the task is soft deleted"""
321
+
322
+ language: Literal["typescript"]
323
+ """Programming language for the task"""
324
+
325
+ latest_version: str = FieldInfo(alias="latestVersion")
326
+ """Latest version identifier (draft, latest, or version number)"""
327
+
328
+ name: str
329
+ """Task name (letters, numbers, hyphens, and underscores only)"""
330
+
331
+ team_id: str = FieldInfo(alias="teamId")
332
+ """Team identifier that owns this task"""
333
+
334
+ updated_at: datetime = FieldInfo(alias="updatedAt")
335
+ """Task last update timestamp"""
336
+
337
+ browser_configuration: Optional[DataBrowserConfiguration] = FieldInfo(alias="browserConfiguration", default=None)
338
+ """Browser configuration for task execution"""
339
+
340
+ description: Optional[str] = None
341
+ """Optional description of the task"""
342
+
343
+
344
+ class TaskCreateResponse(BaseModel):
345
+ data: Optional[Data] = None
@@ -0,0 +1,15 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing_extensions import TypedDict
6
+
7
+ __all__ = ["TaskListParams"]
8
+
9
+
10
+ class TaskListParams(TypedDict, total=False):
11
+ limit: str
12
+ """Number of tasks per page"""
13
+
14
+ page: str
15
+ """Page number"""
@@ -0,0 +1,361 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from typing import List, Union, Optional
4
+ from datetime import datetime
5
+ from typing_extensions import Literal, TypeAlias
6
+
7
+ from pydantic import Field as FieldInfo
8
+
9
+ from .._models import BaseModel
10
+
11
+ __all__ = [
12
+ "TaskListResponse",
13
+ "Data",
14
+ "DataTask",
15
+ "DataTaskBrowserConfiguration",
16
+ "DataTaskBrowserConfigurationLiveView",
17
+ "DataTaskBrowserConfigurationProxy",
18
+ "DataTaskBrowserConfigurationProxyAnchorProxy",
19
+ "DataTaskBrowserConfigurationProxyCustomProxy",
20
+ "DataTaskBrowserConfigurationRecording",
21
+ "DataTaskBrowserConfigurationTimeout",
22
+ ]
23
+
24
+
25
+ class DataTaskBrowserConfigurationLiveView(BaseModel):
26
+ read_only: Optional[bool] = None
27
+ """Enable or disable read-only mode for live viewing. Defaults to `false`."""
28
+
29
+
30
+ class DataTaskBrowserConfigurationProxyAnchorProxy(BaseModel):
31
+ active: bool
32
+
33
+ city: Optional[str] = None
34
+ """City name for precise geographic targeting.
35
+
36
+ Supported for anchor_proxy only. Can only be used when region is also provided.
37
+ """
38
+
39
+ country_code: Optional[
40
+ Literal[
41
+ "af",
42
+ "al",
43
+ "dz",
44
+ "ad",
45
+ "ao",
46
+ "as",
47
+ "ag",
48
+ "ar",
49
+ "am",
50
+ "aw",
51
+ "au",
52
+ "at",
53
+ "az",
54
+ "bs",
55
+ "bh",
56
+ "bb",
57
+ "by",
58
+ "be",
59
+ "bz",
60
+ "bj",
61
+ "bm",
62
+ "bo",
63
+ "ba",
64
+ "br",
65
+ "bg",
66
+ "bf",
67
+ "cm",
68
+ "ca",
69
+ "cv",
70
+ "td",
71
+ "cl",
72
+ "co",
73
+ "cg",
74
+ "cr",
75
+ "ci",
76
+ "hr",
77
+ "cu",
78
+ "cy",
79
+ "cz",
80
+ "dk",
81
+ "dm",
82
+ "do",
83
+ "ec",
84
+ "eg",
85
+ "sv",
86
+ "ee",
87
+ "et",
88
+ "fo",
89
+ "fi",
90
+ "fr",
91
+ "gf",
92
+ "pf",
93
+ "ga",
94
+ "gm",
95
+ "ge",
96
+ "de",
97
+ "gh",
98
+ "gi",
99
+ "gr",
100
+ "gd",
101
+ "gp",
102
+ "gt",
103
+ "gg",
104
+ "gn",
105
+ "gw",
106
+ "gy",
107
+ "ht",
108
+ "hn",
109
+ "hu",
110
+ "is",
111
+ "in",
112
+ "ir",
113
+ "iq",
114
+ "ie",
115
+ "il",
116
+ "it",
117
+ "jm",
118
+ "jp",
119
+ "jo",
120
+ "kz",
121
+ "kw",
122
+ "kg",
123
+ "lv",
124
+ "lb",
125
+ "ly",
126
+ "li",
127
+ "lt",
128
+ "lu",
129
+ "mk",
130
+ "ml",
131
+ "mt",
132
+ "mq",
133
+ "mr",
134
+ "mx",
135
+ "md",
136
+ "mc",
137
+ "me",
138
+ "ma",
139
+ "nl",
140
+ "nz",
141
+ "ni",
142
+ "ng",
143
+ "no",
144
+ "pk",
145
+ "pa",
146
+ "py",
147
+ "pe",
148
+ "ph",
149
+ "pl",
150
+ "pt",
151
+ "pr",
152
+ "qa",
153
+ "ro",
154
+ "lc",
155
+ "sm",
156
+ "sa",
157
+ "sn",
158
+ "rs",
159
+ "sc",
160
+ "sl",
161
+ "sk",
162
+ "si",
163
+ "so",
164
+ "za",
165
+ "kr",
166
+ "es",
167
+ "sr",
168
+ "se",
169
+ "ch",
170
+ "sy",
171
+ "st",
172
+ "tw",
173
+ "tj",
174
+ "tg",
175
+ "tt",
176
+ "tn",
177
+ "tr",
178
+ "tc",
179
+ "ua",
180
+ "ae",
181
+ "us",
182
+ "uy",
183
+ "uz",
184
+ "ve",
185
+ "ye",
186
+ "bd",
187
+ "bw",
188
+ "bn",
189
+ "bi",
190
+ "kh",
191
+ "cn",
192
+ "dj",
193
+ "gq",
194
+ "sz",
195
+ "fj",
196
+ "hk",
197
+ "id",
198
+ "ke",
199
+ "la",
200
+ "ls",
201
+ "lr",
202
+ "mg",
203
+ "mw",
204
+ "my",
205
+ "mv",
206
+ "mn",
207
+ "mz",
208
+ "mm",
209
+ "na",
210
+ "np",
211
+ "nc",
212
+ "ne",
213
+ "om",
214
+ "pg",
215
+ "ru",
216
+ "rw",
217
+ "ws",
218
+ "sg",
219
+ "ss",
220
+ "lk",
221
+ "sd",
222
+ "tz",
223
+ "th",
224
+ "tl",
225
+ "tm",
226
+ "ug",
227
+ "gb",
228
+ "vu",
229
+ "vn",
230
+ "zm",
231
+ "zw",
232
+ "bt",
233
+ "mu",
234
+ ]
235
+ ] = None
236
+ """Supported country codes ISO 2 lowercase
237
+
238
+ **On change make sure to update the Proxy type.**
239
+ """
240
+
241
+ region: Optional[str] = None
242
+ """
243
+ Region code for more specific geographic targeting. The city parameter can only
244
+ be used when region is also provided.
245
+ """
246
+
247
+ type: Optional[Literal["anchor_proxy", "anchor_residential", "anchor_mobile", "anchor_gov"]] = None
248
+ """**On change make sure to update the country_code.**"""
249
+
250
+
251
+ class DataTaskBrowserConfigurationProxyCustomProxy(BaseModel):
252
+ active: bool
253
+
254
+ password: str
255
+ """Proxy password"""
256
+
257
+ server: str
258
+ """Proxy server address"""
259
+
260
+ type: Literal["custom"]
261
+
262
+ username: str
263
+ """Proxy username"""
264
+
265
+
266
+ DataTaskBrowserConfigurationProxy: TypeAlias = Union[
267
+ DataTaskBrowserConfigurationProxyAnchorProxy, DataTaskBrowserConfigurationProxyCustomProxy
268
+ ]
269
+
270
+
271
+ class DataTaskBrowserConfigurationRecording(BaseModel):
272
+ active: Optional[bool] = None
273
+ """Enable or disable video recording of the browser session. Defaults to `true`."""
274
+
275
+
276
+ class DataTaskBrowserConfigurationTimeout(BaseModel):
277
+ idle_timeout: Optional[int] = None
278
+ """
279
+ The amount of time (in minutes) the browser session waits for new connections
280
+ after all others are closed before stopping. Defaults to `5`.
281
+ """
282
+
283
+ max_duration: Optional[int] = None
284
+ """Maximum amount of time (in minutes) for the browser to run before terminating.
285
+
286
+ Defaults to `20`.
287
+ """
288
+
289
+
290
+ class DataTaskBrowserConfiguration(BaseModel):
291
+ initial_url: Optional[str] = None
292
+ """The URL to navigate to when the browser session starts.
293
+
294
+ If not provided, the browser will load an empty page.
295
+ """
296
+
297
+ live_view: Optional[DataTaskBrowserConfigurationLiveView] = None
298
+ """Configuration for live viewing the browser session."""
299
+
300
+ proxy: Optional[DataTaskBrowserConfigurationProxy] = None
301
+ """Proxy Documentation available at [Proxy Documentation](/advanced/proxy)"""
302
+
303
+ recording: Optional[DataTaskBrowserConfigurationRecording] = None
304
+ """Configuration for session recording."""
305
+
306
+ timeout: Optional[DataTaskBrowserConfigurationTimeout] = None
307
+ """Timeout configurations for the browser session."""
308
+
309
+
310
+ class DataTask(BaseModel):
311
+ id: str
312
+ """Unique identifier for the task"""
313
+
314
+ code: str
315
+ """Base64 encoded task code"""
316
+
317
+ created_at: datetime = FieldInfo(alias="createdAt")
318
+ """Task creation timestamp"""
319
+
320
+ deleted: bool
321
+ """Whether the task is soft deleted"""
322
+
323
+ language: Literal["typescript"]
324
+ """Programming language for the task"""
325
+
326
+ latest_version: str = FieldInfo(alias="latestVersion")
327
+ """Latest version identifier (draft, latest, or version number)"""
328
+
329
+ name: str
330
+ """Task name (letters, numbers, hyphens, and underscores only)"""
331
+
332
+ team_id: str = FieldInfo(alias="teamId")
333
+ """Team identifier that owns this task"""
334
+
335
+ updated_at: datetime = FieldInfo(alias="updatedAt")
336
+ """Task last update timestamp"""
337
+
338
+ browser_configuration: Optional[DataTaskBrowserConfiguration] = FieldInfo(
339
+ alias="browserConfiguration", default=None
340
+ )
341
+ """Browser configuration for task execution"""
342
+
343
+ description: Optional[str] = None
344
+ """Optional description of the task"""
345
+
346
+
347
+ class Data(BaseModel):
348
+ limit: int
349
+ """Number of tasks per page"""
350
+
351
+ page: int
352
+ """Current page number"""
353
+
354
+ tasks: List[DataTask]
355
+
356
+ total: int
357
+ """Total number of tasks"""
358
+
359
+
360
+ class TaskListResponse(BaseModel):
361
+ data: Optional[Data] = None