airbyte-agent-facebook-marketing 0.1.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 (57) hide show
  1. airbyte_agent_facebook_marketing/__init__.py +221 -0
  2. airbyte_agent_facebook_marketing/_vendored/__init__.py +1 -0
  3. airbyte_agent_facebook_marketing/_vendored/connector_sdk/__init__.py +82 -0
  4. airbyte_agent_facebook_marketing/_vendored/connector_sdk/auth_strategies.py +1171 -0
  5. airbyte_agent_facebook_marketing/_vendored/connector_sdk/auth_template.py +135 -0
  6. airbyte_agent_facebook_marketing/_vendored/connector_sdk/cloud_utils/__init__.py +5 -0
  7. airbyte_agent_facebook_marketing/_vendored/connector_sdk/cloud_utils/client.py +213 -0
  8. airbyte_agent_facebook_marketing/_vendored/connector_sdk/connector_model_loader.py +1120 -0
  9. airbyte_agent_facebook_marketing/_vendored/connector_sdk/constants.py +78 -0
  10. airbyte_agent_facebook_marketing/_vendored/connector_sdk/exceptions.py +23 -0
  11. airbyte_agent_facebook_marketing/_vendored/connector_sdk/executor/__init__.py +31 -0
  12. airbyte_agent_facebook_marketing/_vendored/connector_sdk/executor/hosted_executor.py +201 -0
  13. airbyte_agent_facebook_marketing/_vendored/connector_sdk/executor/local_executor.py +1854 -0
  14. airbyte_agent_facebook_marketing/_vendored/connector_sdk/executor/models.py +202 -0
  15. airbyte_agent_facebook_marketing/_vendored/connector_sdk/extensions.py +693 -0
  16. airbyte_agent_facebook_marketing/_vendored/connector_sdk/http/__init__.py +37 -0
  17. airbyte_agent_facebook_marketing/_vendored/connector_sdk/http/adapters/__init__.py +9 -0
  18. airbyte_agent_facebook_marketing/_vendored/connector_sdk/http/adapters/httpx_adapter.py +251 -0
  19. airbyte_agent_facebook_marketing/_vendored/connector_sdk/http/config.py +98 -0
  20. airbyte_agent_facebook_marketing/_vendored/connector_sdk/http/exceptions.py +119 -0
  21. airbyte_agent_facebook_marketing/_vendored/connector_sdk/http/protocols.py +114 -0
  22. airbyte_agent_facebook_marketing/_vendored/connector_sdk/http/response.py +104 -0
  23. airbyte_agent_facebook_marketing/_vendored/connector_sdk/http_client.py +693 -0
  24. airbyte_agent_facebook_marketing/_vendored/connector_sdk/introspection.py +481 -0
  25. airbyte_agent_facebook_marketing/_vendored/connector_sdk/logging/__init__.py +11 -0
  26. airbyte_agent_facebook_marketing/_vendored/connector_sdk/logging/logger.py +273 -0
  27. airbyte_agent_facebook_marketing/_vendored/connector_sdk/logging/types.py +93 -0
  28. airbyte_agent_facebook_marketing/_vendored/connector_sdk/observability/__init__.py +11 -0
  29. airbyte_agent_facebook_marketing/_vendored/connector_sdk/observability/config.py +179 -0
  30. airbyte_agent_facebook_marketing/_vendored/connector_sdk/observability/models.py +19 -0
  31. airbyte_agent_facebook_marketing/_vendored/connector_sdk/observability/redactor.py +81 -0
  32. airbyte_agent_facebook_marketing/_vendored/connector_sdk/observability/session.py +103 -0
  33. airbyte_agent_facebook_marketing/_vendored/connector_sdk/performance/__init__.py +6 -0
  34. airbyte_agent_facebook_marketing/_vendored/connector_sdk/performance/instrumentation.py +57 -0
  35. airbyte_agent_facebook_marketing/_vendored/connector_sdk/performance/metrics.py +93 -0
  36. airbyte_agent_facebook_marketing/_vendored/connector_sdk/schema/__init__.py +75 -0
  37. airbyte_agent_facebook_marketing/_vendored/connector_sdk/schema/base.py +201 -0
  38. airbyte_agent_facebook_marketing/_vendored/connector_sdk/schema/components.py +244 -0
  39. airbyte_agent_facebook_marketing/_vendored/connector_sdk/schema/connector.py +120 -0
  40. airbyte_agent_facebook_marketing/_vendored/connector_sdk/schema/extensions.py +301 -0
  41. airbyte_agent_facebook_marketing/_vendored/connector_sdk/schema/operations.py +156 -0
  42. airbyte_agent_facebook_marketing/_vendored/connector_sdk/schema/security.py +236 -0
  43. airbyte_agent_facebook_marketing/_vendored/connector_sdk/secrets.py +182 -0
  44. airbyte_agent_facebook_marketing/_vendored/connector_sdk/telemetry/__init__.py +10 -0
  45. airbyte_agent_facebook_marketing/_vendored/connector_sdk/telemetry/config.py +32 -0
  46. airbyte_agent_facebook_marketing/_vendored/connector_sdk/telemetry/events.py +59 -0
  47. airbyte_agent_facebook_marketing/_vendored/connector_sdk/telemetry/tracker.py +155 -0
  48. airbyte_agent_facebook_marketing/_vendored/connector_sdk/types.py +270 -0
  49. airbyte_agent_facebook_marketing/_vendored/connector_sdk/utils.py +60 -0
  50. airbyte_agent_facebook_marketing/_vendored/connector_sdk/validation.py +848 -0
  51. airbyte_agent_facebook_marketing/connector.py +1553 -0
  52. airbyte_agent_facebook_marketing/connector_model.py +3120 -0
  53. airbyte_agent_facebook_marketing/models.py +814 -0
  54. airbyte_agent_facebook_marketing/types.py +1957 -0
  55. airbyte_agent_facebook_marketing-0.1.0.dist-info/METADATA +148 -0
  56. airbyte_agent_facebook_marketing-0.1.0.dist-info/RECORD +57 -0
  57. airbyte_agent_facebook_marketing-0.1.0.dist-info/WHEEL +4 -0
@@ -0,0 +1,1957 @@
1
+ """
2
+ Type definitions for facebook-marketing connector.
3
+ """
4
+ from __future__ import annotations
5
+
6
+ # Use typing_extensions.TypedDict for Pydantic compatibility
7
+ try:
8
+ from typing_extensions import TypedDict, NotRequired
9
+ except ImportError:
10
+ from typing import TypedDict, NotRequired # type: ignore[attr-defined]
11
+
12
+ from typing import Any, Literal
13
+
14
+
15
+ # ===== NESTED PARAM TYPE DEFINITIONS =====
16
+ # Nested parameter schemas discovered during parameter extraction
17
+
18
+ # ===== OPERATION PARAMS TYPE DEFINITIONS =====
19
+
20
+ class CampaignsListParams(TypedDict):
21
+ """Parameters for campaigns.list operation"""
22
+ account_id: str
23
+ fields: NotRequired[str]
24
+ limit: NotRequired[int]
25
+ after: NotRequired[str]
26
+
27
+ class AdSetsListParams(TypedDict):
28
+ """Parameters for ad_sets.list operation"""
29
+ account_id: str
30
+ fields: NotRequired[str]
31
+ limit: NotRequired[int]
32
+ after: NotRequired[str]
33
+
34
+ class AdsListParams(TypedDict):
35
+ """Parameters for ads.list operation"""
36
+ account_id: str
37
+ fields: NotRequired[str]
38
+ limit: NotRequired[int]
39
+ after: NotRequired[str]
40
+
41
+ class AdCreativesListParams(TypedDict):
42
+ """Parameters for ad_creatives.list operation"""
43
+ account_id: str
44
+ fields: NotRequired[str]
45
+ limit: NotRequired[int]
46
+ after: NotRequired[str]
47
+
48
+ class AdsInsightsListParams(TypedDict):
49
+ """Parameters for ads_insights.list operation"""
50
+ account_id: str
51
+ fields: NotRequired[str]
52
+ date_preset: NotRequired[str]
53
+ time_range: NotRequired[str]
54
+ level: NotRequired[str]
55
+ limit: NotRequired[int]
56
+ after: NotRequired[str]
57
+
58
+ class CustomConversionsListParams(TypedDict):
59
+ """Parameters for custom_conversions.list operation"""
60
+ account_id: str
61
+ fields: NotRequired[str]
62
+ limit: NotRequired[int]
63
+ after: NotRequired[str]
64
+
65
+ class ImagesListParams(TypedDict):
66
+ """Parameters for images.list operation"""
67
+ account_id: str
68
+ fields: NotRequired[str]
69
+ limit: NotRequired[int]
70
+ after: NotRequired[str]
71
+
72
+ class VideosListParams(TypedDict):
73
+ """Parameters for videos.list operation"""
74
+ account_id: str
75
+ fields: NotRequired[str]
76
+ limit: NotRequired[int]
77
+ after: NotRequired[str]
78
+
79
+ class CampaignsGetParams(TypedDict):
80
+ """Parameters for campaigns.get operation"""
81
+ campaign_id: str
82
+ fields: NotRequired[str]
83
+
84
+ class AdSetsGetParams(TypedDict):
85
+ """Parameters for ad_sets.get operation"""
86
+ adset_id: str
87
+ fields: NotRequired[str]
88
+
89
+ class AdsGetParams(TypedDict):
90
+ """Parameters for ads.get operation"""
91
+ ad_id: str
92
+ fields: NotRequired[str]
93
+
94
+ # ===== SEARCH TYPES =====
95
+
96
+ # Sort specification
97
+ AirbyteSortOrder = Literal["asc", "desc"]
98
+
99
+ # ===== CAMPAIGNS SEARCH TYPES =====
100
+
101
+ class CampaignsSearchFilter(TypedDict, total=False):
102
+ """Available fields for filtering campaigns search queries."""
103
+ id: str | None
104
+ """Campaign ID"""
105
+ name: str | None
106
+ """Campaign name"""
107
+ account_id: str | None
108
+ """Ad account ID"""
109
+ status: str | None
110
+ """Campaign status"""
111
+ effective_status: str | None
112
+ """Effective status"""
113
+ objective: str | None
114
+ """Campaign objective"""
115
+ daily_budget: float | None
116
+ """Daily budget in account currency"""
117
+ lifetime_budget: float | None
118
+ """Lifetime budget"""
119
+ budget_remaining: float | None
120
+ """Remaining budget"""
121
+ created_time: str | None
122
+ """Campaign creation time"""
123
+ start_time: str | None
124
+ """Campaign start time"""
125
+ stop_time: str | None
126
+ """Campaign stop time"""
127
+ updated_time: str | None
128
+ """Last update time"""
129
+
130
+
131
+ class CampaignsInFilter(TypedDict, total=False):
132
+ """Available fields for 'in' condition (values are lists)."""
133
+ id: list[str]
134
+ """Campaign ID"""
135
+ name: list[str]
136
+ """Campaign name"""
137
+ account_id: list[str]
138
+ """Ad account ID"""
139
+ status: list[str]
140
+ """Campaign status"""
141
+ effective_status: list[str]
142
+ """Effective status"""
143
+ objective: list[str]
144
+ """Campaign objective"""
145
+ daily_budget: list[float]
146
+ """Daily budget in account currency"""
147
+ lifetime_budget: list[float]
148
+ """Lifetime budget"""
149
+ budget_remaining: list[float]
150
+ """Remaining budget"""
151
+ created_time: list[str]
152
+ """Campaign creation time"""
153
+ start_time: list[str]
154
+ """Campaign start time"""
155
+ stop_time: list[str]
156
+ """Campaign stop time"""
157
+ updated_time: list[str]
158
+ """Last update time"""
159
+
160
+
161
+ class CampaignsAnyValueFilter(TypedDict, total=False):
162
+ """Available fields with Any value type. Used for 'contains' and 'any' conditions."""
163
+ id: Any
164
+ """Campaign ID"""
165
+ name: Any
166
+ """Campaign name"""
167
+ account_id: Any
168
+ """Ad account ID"""
169
+ status: Any
170
+ """Campaign status"""
171
+ effective_status: Any
172
+ """Effective status"""
173
+ objective: Any
174
+ """Campaign objective"""
175
+ daily_budget: Any
176
+ """Daily budget in account currency"""
177
+ lifetime_budget: Any
178
+ """Lifetime budget"""
179
+ budget_remaining: Any
180
+ """Remaining budget"""
181
+ created_time: Any
182
+ """Campaign creation time"""
183
+ start_time: Any
184
+ """Campaign start time"""
185
+ stop_time: Any
186
+ """Campaign stop time"""
187
+ updated_time: Any
188
+ """Last update time"""
189
+
190
+
191
+ class CampaignsStringFilter(TypedDict, total=False):
192
+ """String fields for text search conditions (like, fuzzy, keyword)."""
193
+ id: str
194
+ """Campaign ID"""
195
+ name: str
196
+ """Campaign name"""
197
+ account_id: str
198
+ """Ad account ID"""
199
+ status: str
200
+ """Campaign status"""
201
+ effective_status: str
202
+ """Effective status"""
203
+ objective: str
204
+ """Campaign objective"""
205
+ daily_budget: str
206
+ """Daily budget in account currency"""
207
+ lifetime_budget: str
208
+ """Lifetime budget"""
209
+ budget_remaining: str
210
+ """Remaining budget"""
211
+ created_time: str
212
+ """Campaign creation time"""
213
+ start_time: str
214
+ """Campaign start time"""
215
+ stop_time: str
216
+ """Campaign stop time"""
217
+ updated_time: str
218
+ """Last update time"""
219
+
220
+
221
+ class CampaignsSortFilter(TypedDict, total=False):
222
+ """Available fields for sorting campaigns search results."""
223
+ id: AirbyteSortOrder
224
+ """Campaign ID"""
225
+ name: AirbyteSortOrder
226
+ """Campaign name"""
227
+ account_id: AirbyteSortOrder
228
+ """Ad account ID"""
229
+ status: AirbyteSortOrder
230
+ """Campaign status"""
231
+ effective_status: AirbyteSortOrder
232
+ """Effective status"""
233
+ objective: AirbyteSortOrder
234
+ """Campaign objective"""
235
+ daily_budget: AirbyteSortOrder
236
+ """Daily budget in account currency"""
237
+ lifetime_budget: AirbyteSortOrder
238
+ """Lifetime budget"""
239
+ budget_remaining: AirbyteSortOrder
240
+ """Remaining budget"""
241
+ created_time: AirbyteSortOrder
242
+ """Campaign creation time"""
243
+ start_time: AirbyteSortOrder
244
+ """Campaign start time"""
245
+ stop_time: AirbyteSortOrder
246
+ """Campaign stop time"""
247
+ updated_time: AirbyteSortOrder
248
+ """Last update time"""
249
+
250
+
251
+ # Entity-specific condition types for campaigns
252
+ class CampaignsEqCondition(TypedDict, total=False):
253
+ """Equal to: field equals value."""
254
+ eq: CampaignsSearchFilter
255
+
256
+
257
+ class CampaignsNeqCondition(TypedDict, total=False):
258
+ """Not equal to: field does not equal value."""
259
+ neq: CampaignsSearchFilter
260
+
261
+
262
+ class CampaignsGtCondition(TypedDict, total=False):
263
+ """Greater than: field > value."""
264
+ gt: CampaignsSearchFilter
265
+
266
+
267
+ class CampaignsGteCondition(TypedDict, total=False):
268
+ """Greater than or equal: field >= value."""
269
+ gte: CampaignsSearchFilter
270
+
271
+
272
+ class CampaignsLtCondition(TypedDict, total=False):
273
+ """Less than: field < value."""
274
+ lt: CampaignsSearchFilter
275
+
276
+
277
+ class CampaignsLteCondition(TypedDict, total=False):
278
+ """Less than or equal: field <= value."""
279
+ lte: CampaignsSearchFilter
280
+
281
+
282
+ class CampaignsLikeCondition(TypedDict, total=False):
283
+ """Partial string match with % wildcards."""
284
+ like: CampaignsStringFilter
285
+
286
+
287
+ class CampaignsFuzzyCondition(TypedDict, total=False):
288
+ """Ordered word text match (case-insensitive)."""
289
+ fuzzy: CampaignsStringFilter
290
+
291
+
292
+ class CampaignsKeywordCondition(TypedDict, total=False):
293
+ """Keyword text match (any word present)."""
294
+ keyword: CampaignsStringFilter
295
+
296
+
297
+ class CampaignsContainsCondition(TypedDict, total=False):
298
+ """Check if value exists in array field. Example: {"contains": {"tags": "premium"}}"""
299
+ contains: CampaignsAnyValueFilter
300
+
301
+
302
+ # Reserved keyword conditions using functional TypedDict syntax
303
+ CampaignsInCondition = TypedDict("CampaignsInCondition", {"in": CampaignsInFilter}, total=False)
304
+ """In list: field value is in list. Example: {"in": {"status": ["active", "pending"]}}"""
305
+
306
+ CampaignsNotCondition = TypedDict("CampaignsNotCondition", {"not": "CampaignsCondition"}, total=False)
307
+ """Negates the nested condition."""
308
+
309
+ CampaignsAndCondition = TypedDict("CampaignsAndCondition", {"and": "list[CampaignsCondition]"}, total=False)
310
+ """True if all nested conditions are true."""
311
+
312
+ CampaignsOrCondition = TypedDict("CampaignsOrCondition", {"or": "list[CampaignsCondition]"}, total=False)
313
+ """True if any nested condition is true."""
314
+
315
+ CampaignsAnyCondition = TypedDict("CampaignsAnyCondition", {"any": CampaignsAnyValueFilter}, total=False)
316
+ """Match if ANY element in array field matches nested condition. Example: {"any": {"addresses": {"eq": {"state": "CA"}}}}"""
317
+
318
+ # Union of all campaigns condition types
319
+ CampaignsCondition = (
320
+ CampaignsEqCondition
321
+ | CampaignsNeqCondition
322
+ | CampaignsGtCondition
323
+ | CampaignsGteCondition
324
+ | CampaignsLtCondition
325
+ | CampaignsLteCondition
326
+ | CampaignsInCondition
327
+ | CampaignsLikeCondition
328
+ | CampaignsFuzzyCondition
329
+ | CampaignsKeywordCondition
330
+ | CampaignsContainsCondition
331
+ | CampaignsNotCondition
332
+ | CampaignsAndCondition
333
+ | CampaignsOrCondition
334
+ | CampaignsAnyCondition
335
+ )
336
+
337
+
338
+ class CampaignsSearchQuery(TypedDict, total=False):
339
+ """Search query for campaigns entity."""
340
+ filter: CampaignsCondition
341
+ sort: list[CampaignsSortFilter]
342
+
343
+
344
+ # ===== AD_SETS SEARCH TYPES =====
345
+
346
+ class AdSetsSearchFilter(TypedDict, total=False):
347
+ """Available fields for filtering ad_sets search queries."""
348
+ id: str | None
349
+ """Ad Set ID"""
350
+ name: str | None
351
+ """Ad Set name"""
352
+ account_id: str | None
353
+ """Ad account ID"""
354
+ campaign_id: str | None
355
+ """Parent campaign ID"""
356
+ effective_status: str | None
357
+ """Effective status"""
358
+ daily_budget: float | None
359
+ """Daily budget"""
360
+ lifetime_budget: float | None
361
+ """Lifetime budget"""
362
+ budget_remaining: float | None
363
+ """Remaining budget"""
364
+ bid_amount: float | None
365
+ """Bid amount"""
366
+ bid_strategy: str | None
367
+ """Bid strategy"""
368
+ created_time: str | None
369
+ """Ad set creation time"""
370
+ start_time: str | None
371
+ """Ad set start time"""
372
+ end_time: str | None
373
+ """Ad set end time"""
374
+ updated_time: str | None
375
+ """Last update time"""
376
+
377
+
378
+ class AdSetsInFilter(TypedDict, total=False):
379
+ """Available fields for 'in' condition (values are lists)."""
380
+ id: list[str]
381
+ """Ad Set ID"""
382
+ name: list[str]
383
+ """Ad Set name"""
384
+ account_id: list[str]
385
+ """Ad account ID"""
386
+ campaign_id: list[str]
387
+ """Parent campaign ID"""
388
+ effective_status: list[str]
389
+ """Effective status"""
390
+ daily_budget: list[float]
391
+ """Daily budget"""
392
+ lifetime_budget: list[float]
393
+ """Lifetime budget"""
394
+ budget_remaining: list[float]
395
+ """Remaining budget"""
396
+ bid_amount: list[float]
397
+ """Bid amount"""
398
+ bid_strategy: list[str]
399
+ """Bid strategy"""
400
+ created_time: list[str]
401
+ """Ad set creation time"""
402
+ start_time: list[str]
403
+ """Ad set start time"""
404
+ end_time: list[str]
405
+ """Ad set end time"""
406
+ updated_time: list[str]
407
+ """Last update time"""
408
+
409
+
410
+ class AdSetsAnyValueFilter(TypedDict, total=False):
411
+ """Available fields with Any value type. Used for 'contains' and 'any' conditions."""
412
+ id: Any
413
+ """Ad Set ID"""
414
+ name: Any
415
+ """Ad Set name"""
416
+ account_id: Any
417
+ """Ad account ID"""
418
+ campaign_id: Any
419
+ """Parent campaign ID"""
420
+ effective_status: Any
421
+ """Effective status"""
422
+ daily_budget: Any
423
+ """Daily budget"""
424
+ lifetime_budget: Any
425
+ """Lifetime budget"""
426
+ budget_remaining: Any
427
+ """Remaining budget"""
428
+ bid_amount: Any
429
+ """Bid amount"""
430
+ bid_strategy: Any
431
+ """Bid strategy"""
432
+ created_time: Any
433
+ """Ad set creation time"""
434
+ start_time: Any
435
+ """Ad set start time"""
436
+ end_time: Any
437
+ """Ad set end time"""
438
+ updated_time: Any
439
+ """Last update time"""
440
+
441
+
442
+ class AdSetsStringFilter(TypedDict, total=False):
443
+ """String fields for text search conditions (like, fuzzy, keyword)."""
444
+ id: str
445
+ """Ad Set ID"""
446
+ name: str
447
+ """Ad Set name"""
448
+ account_id: str
449
+ """Ad account ID"""
450
+ campaign_id: str
451
+ """Parent campaign ID"""
452
+ effective_status: str
453
+ """Effective status"""
454
+ daily_budget: str
455
+ """Daily budget"""
456
+ lifetime_budget: str
457
+ """Lifetime budget"""
458
+ budget_remaining: str
459
+ """Remaining budget"""
460
+ bid_amount: str
461
+ """Bid amount"""
462
+ bid_strategy: str
463
+ """Bid strategy"""
464
+ created_time: str
465
+ """Ad set creation time"""
466
+ start_time: str
467
+ """Ad set start time"""
468
+ end_time: str
469
+ """Ad set end time"""
470
+ updated_time: str
471
+ """Last update time"""
472
+
473
+
474
+ class AdSetsSortFilter(TypedDict, total=False):
475
+ """Available fields for sorting ad_sets search results."""
476
+ id: AirbyteSortOrder
477
+ """Ad Set ID"""
478
+ name: AirbyteSortOrder
479
+ """Ad Set name"""
480
+ account_id: AirbyteSortOrder
481
+ """Ad account ID"""
482
+ campaign_id: AirbyteSortOrder
483
+ """Parent campaign ID"""
484
+ effective_status: AirbyteSortOrder
485
+ """Effective status"""
486
+ daily_budget: AirbyteSortOrder
487
+ """Daily budget"""
488
+ lifetime_budget: AirbyteSortOrder
489
+ """Lifetime budget"""
490
+ budget_remaining: AirbyteSortOrder
491
+ """Remaining budget"""
492
+ bid_amount: AirbyteSortOrder
493
+ """Bid amount"""
494
+ bid_strategy: AirbyteSortOrder
495
+ """Bid strategy"""
496
+ created_time: AirbyteSortOrder
497
+ """Ad set creation time"""
498
+ start_time: AirbyteSortOrder
499
+ """Ad set start time"""
500
+ end_time: AirbyteSortOrder
501
+ """Ad set end time"""
502
+ updated_time: AirbyteSortOrder
503
+ """Last update time"""
504
+
505
+
506
+ # Entity-specific condition types for ad_sets
507
+ class AdSetsEqCondition(TypedDict, total=False):
508
+ """Equal to: field equals value."""
509
+ eq: AdSetsSearchFilter
510
+
511
+
512
+ class AdSetsNeqCondition(TypedDict, total=False):
513
+ """Not equal to: field does not equal value."""
514
+ neq: AdSetsSearchFilter
515
+
516
+
517
+ class AdSetsGtCondition(TypedDict, total=False):
518
+ """Greater than: field > value."""
519
+ gt: AdSetsSearchFilter
520
+
521
+
522
+ class AdSetsGteCondition(TypedDict, total=False):
523
+ """Greater than or equal: field >= value."""
524
+ gte: AdSetsSearchFilter
525
+
526
+
527
+ class AdSetsLtCondition(TypedDict, total=False):
528
+ """Less than: field < value."""
529
+ lt: AdSetsSearchFilter
530
+
531
+
532
+ class AdSetsLteCondition(TypedDict, total=False):
533
+ """Less than or equal: field <= value."""
534
+ lte: AdSetsSearchFilter
535
+
536
+
537
+ class AdSetsLikeCondition(TypedDict, total=False):
538
+ """Partial string match with % wildcards."""
539
+ like: AdSetsStringFilter
540
+
541
+
542
+ class AdSetsFuzzyCondition(TypedDict, total=False):
543
+ """Ordered word text match (case-insensitive)."""
544
+ fuzzy: AdSetsStringFilter
545
+
546
+
547
+ class AdSetsKeywordCondition(TypedDict, total=False):
548
+ """Keyword text match (any word present)."""
549
+ keyword: AdSetsStringFilter
550
+
551
+
552
+ class AdSetsContainsCondition(TypedDict, total=False):
553
+ """Check if value exists in array field. Example: {"contains": {"tags": "premium"}}"""
554
+ contains: AdSetsAnyValueFilter
555
+
556
+
557
+ # Reserved keyword conditions using functional TypedDict syntax
558
+ AdSetsInCondition = TypedDict("AdSetsInCondition", {"in": AdSetsInFilter}, total=False)
559
+ """In list: field value is in list. Example: {"in": {"status": ["active", "pending"]}}"""
560
+
561
+ AdSetsNotCondition = TypedDict("AdSetsNotCondition", {"not": "AdSetsCondition"}, total=False)
562
+ """Negates the nested condition."""
563
+
564
+ AdSetsAndCondition = TypedDict("AdSetsAndCondition", {"and": "list[AdSetsCondition]"}, total=False)
565
+ """True if all nested conditions are true."""
566
+
567
+ AdSetsOrCondition = TypedDict("AdSetsOrCondition", {"or": "list[AdSetsCondition]"}, total=False)
568
+ """True if any nested condition is true."""
569
+
570
+ AdSetsAnyCondition = TypedDict("AdSetsAnyCondition", {"any": AdSetsAnyValueFilter}, total=False)
571
+ """Match if ANY element in array field matches nested condition. Example: {"any": {"addresses": {"eq": {"state": "CA"}}}}"""
572
+
573
+ # Union of all ad_sets condition types
574
+ AdSetsCondition = (
575
+ AdSetsEqCondition
576
+ | AdSetsNeqCondition
577
+ | AdSetsGtCondition
578
+ | AdSetsGteCondition
579
+ | AdSetsLtCondition
580
+ | AdSetsLteCondition
581
+ | AdSetsInCondition
582
+ | AdSetsLikeCondition
583
+ | AdSetsFuzzyCondition
584
+ | AdSetsKeywordCondition
585
+ | AdSetsContainsCondition
586
+ | AdSetsNotCondition
587
+ | AdSetsAndCondition
588
+ | AdSetsOrCondition
589
+ | AdSetsAnyCondition
590
+ )
591
+
592
+
593
+ class AdSetsSearchQuery(TypedDict, total=False):
594
+ """Search query for ad_sets entity."""
595
+ filter: AdSetsCondition
596
+ sort: list[AdSetsSortFilter]
597
+
598
+
599
+ # ===== ADS SEARCH TYPES =====
600
+
601
+ class AdsSearchFilter(TypedDict, total=False):
602
+ """Available fields for filtering ads search queries."""
603
+ id: str | None
604
+ """Ad ID"""
605
+ name: str | None
606
+ """Ad name"""
607
+ account_id: str | None
608
+ """Ad account ID"""
609
+ adset_id: str | None
610
+ """Parent ad set ID"""
611
+ campaign_id: str | None
612
+ """Parent campaign ID"""
613
+ status: str | None
614
+ """Ad status"""
615
+ effective_status: str | None
616
+ """Effective status"""
617
+ created_time: str | None
618
+ """Ad creation time"""
619
+ updated_time: str | None
620
+ """Last update time"""
621
+
622
+
623
+ class AdsInFilter(TypedDict, total=False):
624
+ """Available fields for 'in' condition (values are lists)."""
625
+ id: list[str]
626
+ """Ad ID"""
627
+ name: list[str]
628
+ """Ad name"""
629
+ account_id: list[str]
630
+ """Ad account ID"""
631
+ adset_id: list[str]
632
+ """Parent ad set ID"""
633
+ campaign_id: list[str]
634
+ """Parent campaign ID"""
635
+ status: list[str]
636
+ """Ad status"""
637
+ effective_status: list[str]
638
+ """Effective status"""
639
+ created_time: list[str]
640
+ """Ad creation time"""
641
+ updated_time: list[str]
642
+ """Last update time"""
643
+
644
+
645
+ class AdsAnyValueFilter(TypedDict, total=False):
646
+ """Available fields with Any value type. Used for 'contains' and 'any' conditions."""
647
+ id: Any
648
+ """Ad ID"""
649
+ name: Any
650
+ """Ad name"""
651
+ account_id: Any
652
+ """Ad account ID"""
653
+ adset_id: Any
654
+ """Parent ad set ID"""
655
+ campaign_id: Any
656
+ """Parent campaign ID"""
657
+ status: Any
658
+ """Ad status"""
659
+ effective_status: Any
660
+ """Effective status"""
661
+ created_time: Any
662
+ """Ad creation time"""
663
+ updated_time: Any
664
+ """Last update time"""
665
+
666
+
667
+ class AdsStringFilter(TypedDict, total=False):
668
+ """String fields for text search conditions (like, fuzzy, keyword)."""
669
+ id: str
670
+ """Ad ID"""
671
+ name: str
672
+ """Ad name"""
673
+ account_id: str
674
+ """Ad account ID"""
675
+ adset_id: str
676
+ """Parent ad set ID"""
677
+ campaign_id: str
678
+ """Parent campaign ID"""
679
+ status: str
680
+ """Ad status"""
681
+ effective_status: str
682
+ """Effective status"""
683
+ created_time: str
684
+ """Ad creation time"""
685
+ updated_time: str
686
+ """Last update time"""
687
+
688
+
689
+ class AdsSortFilter(TypedDict, total=False):
690
+ """Available fields for sorting ads search results."""
691
+ id: AirbyteSortOrder
692
+ """Ad ID"""
693
+ name: AirbyteSortOrder
694
+ """Ad name"""
695
+ account_id: AirbyteSortOrder
696
+ """Ad account ID"""
697
+ adset_id: AirbyteSortOrder
698
+ """Parent ad set ID"""
699
+ campaign_id: AirbyteSortOrder
700
+ """Parent campaign ID"""
701
+ status: AirbyteSortOrder
702
+ """Ad status"""
703
+ effective_status: AirbyteSortOrder
704
+ """Effective status"""
705
+ created_time: AirbyteSortOrder
706
+ """Ad creation time"""
707
+ updated_time: AirbyteSortOrder
708
+ """Last update time"""
709
+
710
+
711
+ # Entity-specific condition types for ads
712
+ class AdsEqCondition(TypedDict, total=False):
713
+ """Equal to: field equals value."""
714
+ eq: AdsSearchFilter
715
+
716
+
717
+ class AdsNeqCondition(TypedDict, total=False):
718
+ """Not equal to: field does not equal value."""
719
+ neq: AdsSearchFilter
720
+
721
+
722
+ class AdsGtCondition(TypedDict, total=False):
723
+ """Greater than: field > value."""
724
+ gt: AdsSearchFilter
725
+
726
+
727
+ class AdsGteCondition(TypedDict, total=False):
728
+ """Greater than or equal: field >= value."""
729
+ gte: AdsSearchFilter
730
+
731
+
732
+ class AdsLtCondition(TypedDict, total=False):
733
+ """Less than: field < value."""
734
+ lt: AdsSearchFilter
735
+
736
+
737
+ class AdsLteCondition(TypedDict, total=False):
738
+ """Less than or equal: field <= value."""
739
+ lte: AdsSearchFilter
740
+
741
+
742
+ class AdsLikeCondition(TypedDict, total=False):
743
+ """Partial string match with % wildcards."""
744
+ like: AdsStringFilter
745
+
746
+
747
+ class AdsFuzzyCondition(TypedDict, total=False):
748
+ """Ordered word text match (case-insensitive)."""
749
+ fuzzy: AdsStringFilter
750
+
751
+
752
+ class AdsKeywordCondition(TypedDict, total=False):
753
+ """Keyword text match (any word present)."""
754
+ keyword: AdsStringFilter
755
+
756
+
757
+ class AdsContainsCondition(TypedDict, total=False):
758
+ """Check if value exists in array field. Example: {"contains": {"tags": "premium"}}"""
759
+ contains: AdsAnyValueFilter
760
+
761
+
762
+ # Reserved keyword conditions using functional TypedDict syntax
763
+ AdsInCondition = TypedDict("AdsInCondition", {"in": AdsInFilter}, total=False)
764
+ """In list: field value is in list. Example: {"in": {"status": ["active", "pending"]}}"""
765
+
766
+ AdsNotCondition = TypedDict("AdsNotCondition", {"not": "AdsCondition"}, total=False)
767
+ """Negates the nested condition."""
768
+
769
+ AdsAndCondition = TypedDict("AdsAndCondition", {"and": "list[AdsCondition]"}, total=False)
770
+ """True if all nested conditions are true."""
771
+
772
+ AdsOrCondition = TypedDict("AdsOrCondition", {"or": "list[AdsCondition]"}, total=False)
773
+ """True if any nested condition is true."""
774
+
775
+ AdsAnyCondition = TypedDict("AdsAnyCondition", {"any": AdsAnyValueFilter}, total=False)
776
+ """Match if ANY element in array field matches nested condition. Example: {"any": {"addresses": {"eq": {"state": "CA"}}}}"""
777
+
778
+ # Union of all ads condition types
779
+ AdsCondition = (
780
+ AdsEqCondition
781
+ | AdsNeqCondition
782
+ | AdsGtCondition
783
+ | AdsGteCondition
784
+ | AdsLtCondition
785
+ | AdsLteCondition
786
+ | AdsInCondition
787
+ | AdsLikeCondition
788
+ | AdsFuzzyCondition
789
+ | AdsKeywordCondition
790
+ | AdsContainsCondition
791
+ | AdsNotCondition
792
+ | AdsAndCondition
793
+ | AdsOrCondition
794
+ | AdsAnyCondition
795
+ )
796
+
797
+
798
+ class AdsSearchQuery(TypedDict, total=False):
799
+ """Search query for ads entity."""
800
+ filter: AdsCondition
801
+ sort: list[AdsSortFilter]
802
+
803
+
804
+ # ===== AD_CREATIVES SEARCH TYPES =====
805
+
806
+ class AdCreativesSearchFilter(TypedDict, total=False):
807
+ """Available fields for filtering ad_creatives search queries."""
808
+ id: str | None
809
+ """Ad Creative ID"""
810
+ name: str | None
811
+ """Ad Creative name"""
812
+ account_id: str | None
813
+ """Ad account ID"""
814
+ body: str | None
815
+ """Ad body text"""
816
+ title: str | None
817
+ """Ad title"""
818
+ status: str | None
819
+ """Creative status"""
820
+ image_url: str | None
821
+ """Image URL"""
822
+ thumbnail_url: str | None
823
+ """Thumbnail URL"""
824
+ link_url: str | None
825
+ """Link URL"""
826
+ call_to_action_type: str | None
827
+ """Call to action type"""
828
+
829
+
830
+ class AdCreativesInFilter(TypedDict, total=False):
831
+ """Available fields for 'in' condition (values are lists)."""
832
+ id: list[str]
833
+ """Ad Creative ID"""
834
+ name: list[str]
835
+ """Ad Creative name"""
836
+ account_id: list[str]
837
+ """Ad account ID"""
838
+ body: list[str]
839
+ """Ad body text"""
840
+ title: list[str]
841
+ """Ad title"""
842
+ status: list[str]
843
+ """Creative status"""
844
+ image_url: list[str]
845
+ """Image URL"""
846
+ thumbnail_url: list[str]
847
+ """Thumbnail URL"""
848
+ link_url: list[str]
849
+ """Link URL"""
850
+ call_to_action_type: list[str]
851
+ """Call to action type"""
852
+
853
+
854
+ class AdCreativesAnyValueFilter(TypedDict, total=False):
855
+ """Available fields with Any value type. Used for 'contains' and 'any' conditions."""
856
+ id: Any
857
+ """Ad Creative ID"""
858
+ name: Any
859
+ """Ad Creative name"""
860
+ account_id: Any
861
+ """Ad account ID"""
862
+ body: Any
863
+ """Ad body text"""
864
+ title: Any
865
+ """Ad title"""
866
+ status: Any
867
+ """Creative status"""
868
+ image_url: Any
869
+ """Image URL"""
870
+ thumbnail_url: Any
871
+ """Thumbnail URL"""
872
+ link_url: Any
873
+ """Link URL"""
874
+ call_to_action_type: Any
875
+ """Call to action type"""
876
+
877
+
878
+ class AdCreativesStringFilter(TypedDict, total=False):
879
+ """String fields for text search conditions (like, fuzzy, keyword)."""
880
+ id: str
881
+ """Ad Creative ID"""
882
+ name: str
883
+ """Ad Creative name"""
884
+ account_id: str
885
+ """Ad account ID"""
886
+ body: str
887
+ """Ad body text"""
888
+ title: str
889
+ """Ad title"""
890
+ status: str
891
+ """Creative status"""
892
+ image_url: str
893
+ """Image URL"""
894
+ thumbnail_url: str
895
+ """Thumbnail URL"""
896
+ link_url: str
897
+ """Link URL"""
898
+ call_to_action_type: str
899
+ """Call to action type"""
900
+
901
+
902
+ class AdCreativesSortFilter(TypedDict, total=False):
903
+ """Available fields for sorting ad_creatives search results."""
904
+ id: AirbyteSortOrder
905
+ """Ad Creative ID"""
906
+ name: AirbyteSortOrder
907
+ """Ad Creative name"""
908
+ account_id: AirbyteSortOrder
909
+ """Ad account ID"""
910
+ body: AirbyteSortOrder
911
+ """Ad body text"""
912
+ title: AirbyteSortOrder
913
+ """Ad title"""
914
+ status: AirbyteSortOrder
915
+ """Creative status"""
916
+ image_url: AirbyteSortOrder
917
+ """Image URL"""
918
+ thumbnail_url: AirbyteSortOrder
919
+ """Thumbnail URL"""
920
+ link_url: AirbyteSortOrder
921
+ """Link URL"""
922
+ call_to_action_type: AirbyteSortOrder
923
+ """Call to action type"""
924
+
925
+
926
+ # Entity-specific condition types for ad_creatives
927
+ class AdCreativesEqCondition(TypedDict, total=False):
928
+ """Equal to: field equals value."""
929
+ eq: AdCreativesSearchFilter
930
+
931
+
932
+ class AdCreativesNeqCondition(TypedDict, total=False):
933
+ """Not equal to: field does not equal value."""
934
+ neq: AdCreativesSearchFilter
935
+
936
+
937
+ class AdCreativesGtCondition(TypedDict, total=False):
938
+ """Greater than: field > value."""
939
+ gt: AdCreativesSearchFilter
940
+
941
+
942
+ class AdCreativesGteCondition(TypedDict, total=False):
943
+ """Greater than or equal: field >= value."""
944
+ gte: AdCreativesSearchFilter
945
+
946
+
947
+ class AdCreativesLtCondition(TypedDict, total=False):
948
+ """Less than: field < value."""
949
+ lt: AdCreativesSearchFilter
950
+
951
+
952
+ class AdCreativesLteCondition(TypedDict, total=False):
953
+ """Less than or equal: field <= value."""
954
+ lte: AdCreativesSearchFilter
955
+
956
+
957
+ class AdCreativesLikeCondition(TypedDict, total=False):
958
+ """Partial string match with % wildcards."""
959
+ like: AdCreativesStringFilter
960
+
961
+
962
+ class AdCreativesFuzzyCondition(TypedDict, total=False):
963
+ """Ordered word text match (case-insensitive)."""
964
+ fuzzy: AdCreativesStringFilter
965
+
966
+
967
+ class AdCreativesKeywordCondition(TypedDict, total=False):
968
+ """Keyword text match (any word present)."""
969
+ keyword: AdCreativesStringFilter
970
+
971
+
972
+ class AdCreativesContainsCondition(TypedDict, total=False):
973
+ """Check if value exists in array field. Example: {"contains": {"tags": "premium"}}"""
974
+ contains: AdCreativesAnyValueFilter
975
+
976
+
977
+ # Reserved keyword conditions using functional TypedDict syntax
978
+ AdCreativesInCondition = TypedDict("AdCreativesInCondition", {"in": AdCreativesInFilter}, total=False)
979
+ """In list: field value is in list. Example: {"in": {"status": ["active", "pending"]}}"""
980
+
981
+ AdCreativesNotCondition = TypedDict("AdCreativesNotCondition", {"not": "AdCreativesCondition"}, total=False)
982
+ """Negates the nested condition."""
983
+
984
+ AdCreativesAndCondition = TypedDict("AdCreativesAndCondition", {"and": "list[AdCreativesCondition]"}, total=False)
985
+ """True if all nested conditions are true."""
986
+
987
+ AdCreativesOrCondition = TypedDict("AdCreativesOrCondition", {"or": "list[AdCreativesCondition]"}, total=False)
988
+ """True if any nested condition is true."""
989
+
990
+ AdCreativesAnyCondition = TypedDict("AdCreativesAnyCondition", {"any": AdCreativesAnyValueFilter}, total=False)
991
+ """Match if ANY element in array field matches nested condition. Example: {"any": {"addresses": {"eq": {"state": "CA"}}}}"""
992
+
993
+ # Union of all ad_creatives condition types
994
+ AdCreativesCondition = (
995
+ AdCreativesEqCondition
996
+ | AdCreativesNeqCondition
997
+ | AdCreativesGtCondition
998
+ | AdCreativesGteCondition
999
+ | AdCreativesLtCondition
1000
+ | AdCreativesLteCondition
1001
+ | AdCreativesInCondition
1002
+ | AdCreativesLikeCondition
1003
+ | AdCreativesFuzzyCondition
1004
+ | AdCreativesKeywordCondition
1005
+ | AdCreativesContainsCondition
1006
+ | AdCreativesNotCondition
1007
+ | AdCreativesAndCondition
1008
+ | AdCreativesOrCondition
1009
+ | AdCreativesAnyCondition
1010
+ )
1011
+
1012
+
1013
+ class AdCreativesSearchQuery(TypedDict, total=False):
1014
+ """Search query for ad_creatives entity."""
1015
+ filter: AdCreativesCondition
1016
+ sort: list[AdCreativesSortFilter]
1017
+
1018
+
1019
+ # ===== ADS_INSIGHTS SEARCH TYPES =====
1020
+
1021
+ class AdsInsightsSearchFilter(TypedDict, total=False):
1022
+ """Available fields for filtering ads_insights search queries."""
1023
+ account_id: str | None
1024
+ """Ad account ID"""
1025
+ account_name: str | None
1026
+ """Ad account name"""
1027
+ campaign_id: str | None
1028
+ """Campaign ID"""
1029
+ campaign_name: str | None
1030
+ """Campaign name"""
1031
+ adset_id: str | None
1032
+ """Ad set ID"""
1033
+ adset_name: str | None
1034
+ """Ad set name"""
1035
+ ad_id: str | None
1036
+ """Ad ID"""
1037
+ ad_name: str | None
1038
+ """Ad name"""
1039
+ clicks: int | None
1040
+ """Number of clicks"""
1041
+ impressions: int | None
1042
+ """Number of impressions"""
1043
+ reach: int | None
1044
+ """Number of unique people reached"""
1045
+ spend: float | None
1046
+ """Amount spent"""
1047
+ cpc: float | None
1048
+ """Cost per click"""
1049
+ cpm: float | None
1050
+ """Cost per 1000 impressions"""
1051
+ ctr: float | None
1052
+ """Click-through rate"""
1053
+ date_start: str | None
1054
+ """Start date of the reporting period"""
1055
+ date_stop: str | None
1056
+ """End date of the reporting period"""
1057
+
1058
+
1059
+ class AdsInsightsInFilter(TypedDict, total=False):
1060
+ """Available fields for 'in' condition (values are lists)."""
1061
+ account_id: list[str]
1062
+ """Ad account ID"""
1063
+ account_name: list[str]
1064
+ """Ad account name"""
1065
+ campaign_id: list[str]
1066
+ """Campaign ID"""
1067
+ campaign_name: list[str]
1068
+ """Campaign name"""
1069
+ adset_id: list[str]
1070
+ """Ad set ID"""
1071
+ adset_name: list[str]
1072
+ """Ad set name"""
1073
+ ad_id: list[str]
1074
+ """Ad ID"""
1075
+ ad_name: list[str]
1076
+ """Ad name"""
1077
+ clicks: list[int]
1078
+ """Number of clicks"""
1079
+ impressions: list[int]
1080
+ """Number of impressions"""
1081
+ reach: list[int]
1082
+ """Number of unique people reached"""
1083
+ spend: list[float]
1084
+ """Amount spent"""
1085
+ cpc: list[float]
1086
+ """Cost per click"""
1087
+ cpm: list[float]
1088
+ """Cost per 1000 impressions"""
1089
+ ctr: list[float]
1090
+ """Click-through rate"""
1091
+ date_start: list[str]
1092
+ """Start date of the reporting period"""
1093
+ date_stop: list[str]
1094
+ """End date of the reporting period"""
1095
+
1096
+
1097
+ class AdsInsightsAnyValueFilter(TypedDict, total=False):
1098
+ """Available fields with Any value type. Used for 'contains' and 'any' conditions."""
1099
+ account_id: Any
1100
+ """Ad account ID"""
1101
+ account_name: Any
1102
+ """Ad account name"""
1103
+ campaign_id: Any
1104
+ """Campaign ID"""
1105
+ campaign_name: Any
1106
+ """Campaign name"""
1107
+ adset_id: Any
1108
+ """Ad set ID"""
1109
+ adset_name: Any
1110
+ """Ad set name"""
1111
+ ad_id: Any
1112
+ """Ad ID"""
1113
+ ad_name: Any
1114
+ """Ad name"""
1115
+ clicks: Any
1116
+ """Number of clicks"""
1117
+ impressions: Any
1118
+ """Number of impressions"""
1119
+ reach: Any
1120
+ """Number of unique people reached"""
1121
+ spend: Any
1122
+ """Amount spent"""
1123
+ cpc: Any
1124
+ """Cost per click"""
1125
+ cpm: Any
1126
+ """Cost per 1000 impressions"""
1127
+ ctr: Any
1128
+ """Click-through rate"""
1129
+ date_start: Any
1130
+ """Start date of the reporting period"""
1131
+ date_stop: Any
1132
+ """End date of the reporting period"""
1133
+
1134
+
1135
+ class AdsInsightsStringFilter(TypedDict, total=False):
1136
+ """String fields for text search conditions (like, fuzzy, keyword)."""
1137
+ account_id: str
1138
+ """Ad account ID"""
1139
+ account_name: str
1140
+ """Ad account name"""
1141
+ campaign_id: str
1142
+ """Campaign ID"""
1143
+ campaign_name: str
1144
+ """Campaign name"""
1145
+ adset_id: str
1146
+ """Ad set ID"""
1147
+ adset_name: str
1148
+ """Ad set name"""
1149
+ ad_id: str
1150
+ """Ad ID"""
1151
+ ad_name: str
1152
+ """Ad name"""
1153
+ clicks: str
1154
+ """Number of clicks"""
1155
+ impressions: str
1156
+ """Number of impressions"""
1157
+ reach: str
1158
+ """Number of unique people reached"""
1159
+ spend: str
1160
+ """Amount spent"""
1161
+ cpc: str
1162
+ """Cost per click"""
1163
+ cpm: str
1164
+ """Cost per 1000 impressions"""
1165
+ ctr: str
1166
+ """Click-through rate"""
1167
+ date_start: str
1168
+ """Start date of the reporting period"""
1169
+ date_stop: str
1170
+ """End date of the reporting period"""
1171
+
1172
+
1173
+ class AdsInsightsSortFilter(TypedDict, total=False):
1174
+ """Available fields for sorting ads_insights search results."""
1175
+ account_id: AirbyteSortOrder
1176
+ """Ad account ID"""
1177
+ account_name: AirbyteSortOrder
1178
+ """Ad account name"""
1179
+ campaign_id: AirbyteSortOrder
1180
+ """Campaign ID"""
1181
+ campaign_name: AirbyteSortOrder
1182
+ """Campaign name"""
1183
+ adset_id: AirbyteSortOrder
1184
+ """Ad set ID"""
1185
+ adset_name: AirbyteSortOrder
1186
+ """Ad set name"""
1187
+ ad_id: AirbyteSortOrder
1188
+ """Ad ID"""
1189
+ ad_name: AirbyteSortOrder
1190
+ """Ad name"""
1191
+ clicks: AirbyteSortOrder
1192
+ """Number of clicks"""
1193
+ impressions: AirbyteSortOrder
1194
+ """Number of impressions"""
1195
+ reach: AirbyteSortOrder
1196
+ """Number of unique people reached"""
1197
+ spend: AirbyteSortOrder
1198
+ """Amount spent"""
1199
+ cpc: AirbyteSortOrder
1200
+ """Cost per click"""
1201
+ cpm: AirbyteSortOrder
1202
+ """Cost per 1000 impressions"""
1203
+ ctr: AirbyteSortOrder
1204
+ """Click-through rate"""
1205
+ date_start: AirbyteSortOrder
1206
+ """Start date of the reporting period"""
1207
+ date_stop: AirbyteSortOrder
1208
+ """End date of the reporting period"""
1209
+
1210
+
1211
+ # Entity-specific condition types for ads_insights
1212
+ class AdsInsightsEqCondition(TypedDict, total=False):
1213
+ """Equal to: field equals value."""
1214
+ eq: AdsInsightsSearchFilter
1215
+
1216
+
1217
+ class AdsInsightsNeqCondition(TypedDict, total=False):
1218
+ """Not equal to: field does not equal value."""
1219
+ neq: AdsInsightsSearchFilter
1220
+
1221
+
1222
+ class AdsInsightsGtCondition(TypedDict, total=False):
1223
+ """Greater than: field > value."""
1224
+ gt: AdsInsightsSearchFilter
1225
+
1226
+
1227
+ class AdsInsightsGteCondition(TypedDict, total=False):
1228
+ """Greater than or equal: field >= value."""
1229
+ gte: AdsInsightsSearchFilter
1230
+
1231
+
1232
+ class AdsInsightsLtCondition(TypedDict, total=False):
1233
+ """Less than: field < value."""
1234
+ lt: AdsInsightsSearchFilter
1235
+
1236
+
1237
+ class AdsInsightsLteCondition(TypedDict, total=False):
1238
+ """Less than or equal: field <= value."""
1239
+ lte: AdsInsightsSearchFilter
1240
+
1241
+
1242
+ class AdsInsightsLikeCondition(TypedDict, total=False):
1243
+ """Partial string match with % wildcards."""
1244
+ like: AdsInsightsStringFilter
1245
+
1246
+
1247
+ class AdsInsightsFuzzyCondition(TypedDict, total=False):
1248
+ """Ordered word text match (case-insensitive)."""
1249
+ fuzzy: AdsInsightsStringFilter
1250
+
1251
+
1252
+ class AdsInsightsKeywordCondition(TypedDict, total=False):
1253
+ """Keyword text match (any word present)."""
1254
+ keyword: AdsInsightsStringFilter
1255
+
1256
+
1257
+ class AdsInsightsContainsCondition(TypedDict, total=False):
1258
+ """Check if value exists in array field. Example: {"contains": {"tags": "premium"}}"""
1259
+ contains: AdsInsightsAnyValueFilter
1260
+
1261
+
1262
+ # Reserved keyword conditions using functional TypedDict syntax
1263
+ AdsInsightsInCondition = TypedDict("AdsInsightsInCondition", {"in": AdsInsightsInFilter}, total=False)
1264
+ """In list: field value is in list. Example: {"in": {"status": ["active", "pending"]}}"""
1265
+
1266
+ AdsInsightsNotCondition = TypedDict("AdsInsightsNotCondition", {"not": "AdsInsightsCondition"}, total=False)
1267
+ """Negates the nested condition."""
1268
+
1269
+ AdsInsightsAndCondition = TypedDict("AdsInsightsAndCondition", {"and": "list[AdsInsightsCondition]"}, total=False)
1270
+ """True if all nested conditions are true."""
1271
+
1272
+ AdsInsightsOrCondition = TypedDict("AdsInsightsOrCondition", {"or": "list[AdsInsightsCondition]"}, total=False)
1273
+ """True if any nested condition is true."""
1274
+
1275
+ AdsInsightsAnyCondition = TypedDict("AdsInsightsAnyCondition", {"any": AdsInsightsAnyValueFilter}, total=False)
1276
+ """Match if ANY element in array field matches nested condition. Example: {"any": {"addresses": {"eq": {"state": "CA"}}}}"""
1277
+
1278
+ # Union of all ads_insights condition types
1279
+ AdsInsightsCondition = (
1280
+ AdsInsightsEqCondition
1281
+ | AdsInsightsNeqCondition
1282
+ | AdsInsightsGtCondition
1283
+ | AdsInsightsGteCondition
1284
+ | AdsInsightsLtCondition
1285
+ | AdsInsightsLteCondition
1286
+ | AdsInsightsInCondition
1287
+ | AdsInsightsLikeCondition
1288
+ | AdsInsightsFuzzyCondition
1289
+ | AdsInsightsKeywordCondition
1290
+ | AdsInsightsContainsCondition
1291
+ | AdsInsightsNotCondition
1292
+ | AdsInsightsAndCondition
1293
+ | AdsInsightsOrCondition
1294
+ | AdsInsightsAnyCondition
1295
+ )
1296
+
1297
+
1298
+ class AdsInsightsSearchQuery(TypedDict, total=False):
1299
+ """Search query for ads_insights entity."""
1300
+ filter: AdsInsightsCondition
1301
+ sort: list[AdsInsightsSortFilter]
1302
+
1303
+
1304
+ # ===== CUSTOM_CONVERSIONS SEARCH TYPES =====
1305
+
1306
+ class CustomConversionsSearchFilter(TypedDict, total=False):
1307
+ """Available fields for filtering custom_conversions search queries."""
1308
+ id: str | None
1309
+ """Custom Conversion ID"""
1310
+ name: str | None
1311
+ """Custom Conversion name"""
1312
+ account_id: str | None
1313
+ """Ad account ID"""
1314
+ description: str | None
1315
+ """Description"""
1316
+ custom_event_type: str | None
1317
+ """Custom event type"""
1318
+ creation_time: str | None
1319
+ """Creation time"""
1320
+ first_fired_time: str | None
1321
+ """First fired time"""
1322
+ last_fired_time: str | None
1323
+ """Last fired time"""
1324
+ is_archived: bool | None
1325
+ """Whether the conversion is archived"""
1326
+
1327
+
1328
+ class CustomConversionsInFilter(TypedDict, total=False):
1329
+ """Available fields for 'in' condition (values are lists)."""
1330
+ id: list[str]
1331
+ """Custom Conversion ID"""
1332
+ name: list[str]
1333
+ """Custom Conversion name"""
1334
+ account_id: list[str]
1335
+ """Ad account ID"""
1336
+ description: list[str]
1337
+ """Description"""
1338
+ custom_event_type: list[str]
1339
+ """Custom event type"""
1340
+ creation_time: list[str]
1341
+ """Creation time"""
1342
+ first_fired_time: list[str]
1343
+ """First fired time"""
1344
+ last_fired_time: list[str]
1345
+ """Last fired time"""
1346
+ is_archived: list[bool]
1347
+ """Whether the conversion is archived"""
1348
+
1349
+
1350
+ class CustomConversionsAnyValueFilter(TypedDict, total=False):
1351
+ """Available fields with Any value type. Used for 'contains' and 'any' conditions."""
1352
+ id: Any
1353
+ """Custom Conversion ID"""
1354
+ name: Any
1355
+ """Custom Conversion name"""
1356
+ account_id: Any
1357
+ """Ad account ID"""
1358
+ description: Any
1359
+ """Description"""
1360
+ custom_event_type: Any
1361
+ """Custom event type"""
1362
+ creation_time: Any
1363
+ """Creation time"""
1364
+ first_fired_time: Any
1365
+ """First fired time"""
1366
+ last_fired_time: Any
1367
+ """Last fired time"""
1368
+ is_archived: Any
1369
+ """Whether the conversion is archived"""
1370
+
1371
+
1372
+ class CustomConversionsStringFilter(TypedDict, total=False):
1373
+ """String fields for text search conditions (like, fuzzy, keyword)."""
1374
+ id: str
1375
+ """Custom Conversion ID"""
1376
+ name: str
1377
+ """Custom Conversion name"""
1378
+ account_id: str
1379
+ """Ad account ID"""
1380
+ description: str
1381
+ """Description"""
1382
+ custom_event_type: str
1383
+ """Custom event type"""
1384
+ creation_time: str
1385
+ """Creation time"""
1386
+ first_fired_time: str
1387
+ """First fired time"""
1388
+ last_fired_time: str
1389
+ """Last fired time"""
1390
+ is_archived: str
1391
+ """Whether the conversion is archived"""
1392
+
1393
+
1394
+ class CustomConversionsSortFilter(TypedDict, total=False):
1395
+ """Available fields for sorting custom_conversions search results."""
1396
+ id: AirbyteSortOrder
1397
+ """Custom Conversion ID"""
1398
+ name: AirbyteSortOrder
1399
+ """Custom Conversion name"""
1400
+ account_id: AirbyteSortOrder
1401
+ """Ad account ID"""
1402
+ description: AirbyteSortOrder
1403
+ """Description"""
1404
+ custom_event_type: AirbyteSortOrder
1405
+ """Custom event type"""
1406
+ creation_time: AirbyteSortOrder
1407
+ """Creation time"""
1408
+ first_fired_time: AirbyteSortOrder
1409
+ """First fired time"""
1410
+ last_fired_time: AirbyteSortOrder
1411
+ """Last fired time"""
1412
+ is_archived: AirbyteSortOrder
1413
+ """Whether the conversion is archived"""
1414
+
1415
+
1416
+ # Entity-specific condition types for custom_conversions
1417
+ class CustomConversionsEqCondition(TypedDict, total=False):
1418
+ """Equal to: field equals value."""
1419
+ eq: CustomConversionsSearchFilter
1420
+
1421
+
1422
+ class CustomConversionsNeqCondition(TypedDict, total=False):
1423
+ """Not equal to: field does not equal value."""
1424
+ neq: CustomConversionsSearchFilter
1425
+
1426
+
1427
+ class CustomConversionsGtCondition(TypedDict, total=False):
1428
+ """Greater than: field > value."""
1429
+ gt: CustomConversionsSearchFilter
1430
+
1431
+
1432
+ class CustomConversionsGteCondition(TypedDict, total=False):
1433
+ """Greater than or equal: field >= value."""
1434
+ gte: CustomConversionsSearchFilter
1435
+
1436
+
1437
+ class CustomConversionsLtCondition(TypedDict, total=False):
1438
+ """Less than: field < value."""
1439
+ lt: CustomConversionsSearchFilter
1440
+
1441
+
1442
+ class CustomConversionsLteCondition(TypedDict, total=False):
1443
+ """Less than or equal: field <= value."""
1444
+ lte: CustomConversionsSearchFilter
1445
+
1446
+
1447
+ class CustomConversionsLikeCondition(TypedDict, total=False):
1448
+ """Partial string match with % wildcards."""
1449
+ like: CustomConversionsStringFilter
1450
+
1451
+
1452
+ class CustomConversionsFuzzyCondition(TypedDict, total=False):
1453
+ """Ordered word text match (case-insensitive)."""
1454
+ fuzzy: CustomConversionsStringFilter
1455
+
1456
+
1457
+ class CustomConversionsKeywordCondition(TypedDict, total=False):
1458
+ """Keyword text match (any word present)."""
1459
+ keyword: CustomConversionsStringFilter
1460
+
1461
+
1462
+ class CustomConversionsContainsCondition(TypedDict, total=False):
1463
+ """Check if value exists in array field. Example: {"contains": {"tags": "premium"}}"""
1464
+ contains: CustomConversionsAnyValueFilter
1465
+
1466
+
1467
+ # Reserved keyword conditions using functional TypedDict syntax
1468
+ CustomConversionsInCondition = TypedDict("CustomConversionsInCondition", {"in": CustomConversionsInFilter}, total=False)
1469
+ """In list: field value is in list. Example: {"in": {"status": ["active", "pending"]}}"""
1470
+
1471
+ CustomConversionsNotCondition = TypedDict("CustomConversionsNotCondition", {"not": "CustomConversionsCondition"}, total=False)
1472
+ """Negates the nested condition."""
1473
+
1474
+ CustomConversionsAndCondition = TypedDict("CustomConversionsAndCondition", {"and": "list[CustomConversionsCondition]"}, total=False)
1475
+ """True if all nested conditions are true."""
1476
+
1477
+ CustomConversionsOrCondition = TypedDict("CustomConversionsOrCondition", {"or": "list[CustomConversionsCondition]"}, total=False)
1478
+ """True if any nested condition is true."""
1479
+
1480
+ CustomConversionsAnyCondition = TypedDict("CustomConversionsAnyCondition", {"any": CustomConversionsAnyValueFilter}, total=False)
1481
+ """Match if ANY element in array field matches nested condition. Example: {"any": {"addresses": {"eq": {"state": "CA"}}}}"""
1482
+
1483
+ # Union of all custom_conversions condition types
1484
+ CustomConversionsCondition = (
1485
+ CustomConversionsEqCondition
1486
+ | CustomConversionsNeqCondition
1487
+ | CustomConversionsGtCondition
1488
+ | CustomConversionsGteCondition
1489
+ | CustomConversionsLtCondition
1490
+ | CustomConversionsLteCondition
1491
+ | CustomConversionsInCondition
1492
+ | CustomConversionsLikeCondition
1493
+ | CustomConversionsFuzzyCondition
1494
+ | CustomConversionsKeywordCondition
1495
+ | CustomConversionsContainsCondition
1496
+ | CustomConversionsNotCondition
1497
+ | CustomConversionsAndCondition
1498
+ | CustomConversionsOrCondition
1499
+ | CustomConversionsAnyCondition
1500
+ )
1501
+
1502
+
1503
+ class CustomConversionsSearchQuery(TypedDict, total=False):
1504
+ """Search query for custom_conversions entity."""
1505
+ filter: CustomConversionsCondition
1506
+ sort: list[CustomConversionsSortFilter]
1507
+
1508
+
1509
+ # ===== IMAGES SEARCH TYPES =====
1510
+
1511
+ class ImagesSearchFilter(TypedDict, total=False):
1512
+ """Available fields for filtering images search queries."""
1513
+ id: str | None
1514
+ """Image ID"""
1515
+ name: str | None
1516
+ """Image name"""
1517
+ account_id: str | None
1518
+ """Ad account ID"""
1519
+ hash: str | None
1520
+ """Image hash"""
1521
+ url: str | None
1522
+ """Image URL"""
1523
+ permalink_url: str | None
1524
+ """Permalink URL"""
1525
+ width: int | None
1526
+ """Image width"""
1527
+ height: int | None
1528
+ """Image height"""
1529
+ status: str | None
1530
+ """Image status"""
1531
+ created_time: str | None
1532
+ """Creation time"""
1533
+ updated_time: str | None
1534
+ """Last update time"""
1535
+
1536
+
1537
+ class ImagesInFilter(TypedDict, total=False):
1538
+ """Available fields for 'in' condition (values are lists)."""
1539
+ id: list[str]
1540
+ """Image ID"""
1541
+ name: list[str]
1542
+ """Image name"""
1543
+ account_id: list[str]
1544
+ """Ad account ID"""
1545
+ hash: list[str]
1546
+ """Image hash"""
1547
+ url: list[str]
1548
+ """Image URL"""
1549
+ permalink_url: list[str]
1550
+ """Permalink URL"""
1551
+ width: list[int]
1552
+ """Image width"""
1553
+ height: list[int]
1554
+ """Image height"""
1555
+ status: list[str]
1556
+ """Image status"""
1557
+ created_time: list[str]
1558
+ """Creation time"""
1559
+ updated_time: list[str]
1560
+ """Last update time"""
1561
+
1562
+
1563
+ class ImagesAnyValueFilter(TypedDict, total=False):
1564
+ """Available fields with Any value type. Used for 'contains' and 'any' conditions."""
1565
+ id: Any
1566
+ """Image ID"""
1567
+ name: Any
1568
+ """Image name"""
1569
+ account_id: Any
1570
+ """Ad account ID"""
1571
+ hash: Any
1572
+ """Image hash"""
1573
+ url: Any
1574
+ """Image URL"""
1575
+ permalink_url: Any
1576
+ """Permalink URL"""
1577
+ width: Any
1578
+ """Image width"""
1579
+ height: Any
1580
+ """Image height"""
1581
+ status: Any
1582
+ """Image status"""
1583
+ created_time: Any
1584
+ """Creation time"""
1585
+ updated_time: Any
1586
+ """Last update time"""
1587
+
1588
+
1589
+ class ImagesStringFilter(TypedDict, total=False):
1590
+ """String fields for text search conditions (like, fuzzy, keyword)."""
1591
+ id: str
1592
+ """Image ID"""
1593
+ name: str
1594
+ """Image name"""
1595
+ account_id: str
1596
+ """Ad account ID"""
1597
+ hash: str
1598
+ """Image hash"""
1599
+ url: str
1600
+ """Image URL"""
1601
+ permalink_url: str
1602
+ """Permalink URL"""
1603
+ width: str
1604
+ """Image width"""
1605
+ height: str
1606
+ """Image height"""
1607
+ status: str
1608
+ """Image status"""
1609
+ created_time: str
1610
+ """Creation time"""
1611
+ updated_time: str
1612
+ """Last update time"""
1613
+
1614
+
1615
+ class ImagesSortFilter(TypedDict, total=False):
1616
+ """Available fields for sorting images search results."""
1617
+ id: AirbyteSortOrder
1618
+ """Image ID"""
1619
+ name: AirbyteSortOrder
1620
+ """Image name"""
1621
+ account_id: AirbyteSortOrder
1622
+ """Ad account ID"""
1623
+ hash: AirbyteSortOrder
1624
+ """Image hash"""
1625
+ url: AirbyteSortOrder
1626
+ """Image URL"""
1627
+ permalink_url: AirbyteSortOrder
1628
+ """Permalink URL"""
1629
+ width: AirbyteSortOrder
1630
+ """Image width"""
1631
+ height: AirbyteSortOrder
1632
+ """Image height"""
1633
+ status: AirbyteSortOrder
1634
+ """Image status"""
1635
+ created_time: AirbyteSortOrder
1636
+ """Creation time"""
1637
+ updated_time: AirbyteSortOrder
1638
+ """Last update time"""
1639
+
1640
+
1641
+ # Entity-specific condition types for images
1642
+ class ImagesEqCondition(TypedDict, total=False):
1643
+ """Equal to: field equals value."""
1644
+ eq: ImagesSearchFilter
1645
+
1646
+
1647
+ class ImagesNeqCondition(TypedDict, total=False):
1648
+ """Not equal to: field does not equal value."""
1649
+ neq: ImagesSearchFilter
1650
+
1651
+
1652
+ class ImagesGtCondition(TypedDict, total=False):
1653
+ """Greater than: field > value."""
1654
+ gt: ImagesSearchFilter
1655
+
1656
+
1657
+ class ImagesGteCondition(TypedDict, total=False):
1658
+ """Greater than or equal: field >= value."""
1659
+ gte: ImagesSearchFilter
1660
+
1661
+
1662
+ class ImagesLtCondition(TypedDict, total=False):
1663
+ """Less than: field < value."""
1664
+ lt: ImagesSearchFilter
1665
+
1666
+
1667
+ class ImagesLteCondition(TypedDict, total=False):
1668
+ """Less than or equal: field <= value."""
1669
+ lte: ImagesSearchFilter
1670
+
1671
+
1672
+ class ImagesLikeCondition(TypedDict, total=False):
1673
+ """Partial string match with % wildcards."""
1674
+ like: ImagesStringFilter
1675
+
1676
+
1677
+ class ImagesFuzzyCondition(TypedDict, total=False):
1678
+ """Ordered word text match (case-insensitive)."""
1679
+ fuzzy: ImagesStringFilter
1680
+
1681
+
1682
+ class ImagesKeywordCondition(TypedDict, total=False):
1683
+ """Keyword text match (any word present)."""
1684
+ keyword: ImagesStringFilter
1685
+
1686
+
1687
+ class ImagesContainsCondition(TypedDict, total=False):
1688
+ """Check if value exists in array field. Example: {"contains": {"tags": "premium"}}"""
1689
+ contains: ImagesAnyValueFilter
1690
+
1691
+
1692
+ # Reserved keyword conditions using functional TypedDict syntax
1693
+ ImagesInCondition = TypedDict("ImagesInCondition", {"in": ImagesInFilter}, total=False)
1694
+ """In list: field value is in list. Example: {"in": {"status": ["active", "pending"]}}"""
1695
+
1696
+ ImagesNotCondition = TypedDict("ImagesNotCondition", {"not": "ImagesCondition"}, total=False)
1697
+ """Negates the nested condition."""
1698
+
1699
+ ImagesAndCondition = TypedDict("ImagesAndCondition", {"and": "list[ImagesCondition]"}, total=False)
1700
+ """True if all nested conditions are true."""
1701
+
1702
+ ImagesOrCondition = TypedDict("ImagesOrCondition", {"or": "list[ImagesCondition]"}, total=False)
1703
+ """True if any nested condition is true."""
1704
+
1705
+ ImagesAnyCondition = TypedDict("ImagesAnyCondition", {"any": ImagesAnyValueFilter}, total=False)
1706
+ """Match if ANY element in array field matches nested condition. Example: {"any": {"addresses": {"eq": {"state": "CA"}}}}"""
1707
+
1708
+ # Union of all images condition types
1709
+ ImagesCondition = (
1710
+ ImagesEqCondition
1711
+ | ImagesNeqCondition
1712
+ | ImagesGtCondition
1713
+ | ImagesGteCondition
1714
+ | ImagesLtCondition
1715
+ | ImagesLteCondition
1716
+ | ImagesInCondition
1717
+ | ImagesLikeCondition
1718
+ | ImagesFuzzyCondition
1719
+ | ImagesKeywordCondition
1720
+ | ImagesContainsCondition
1721
+ | ImagesNotCondition
1722
+ | ImagesAndCondition
1723
+ | ImagesOrCondition
1724
+ | ImagesAnyCondition
1725
+ )
1726
+
1727
+
1728
+ class ImagesSearchQuery(TypedDict, total=False):
1729
+ """Search query for images entity."""
1730
+ filter: ImagesCondition
1731
+ sort: list[ImagesSortFilter]
1732
+
1733
+
1734
+ # ===== VIDEOS SEARCH TYPES =====
1735
+
1736
+ class VideosSearchFilter(TypedDict, total=False):
1737
+ """Available fields for filtering videos search queries."""
1738
+ id: str | None
1739
+ """Video ID"""
1740
+ title: str | None
1741
+ """Video title"""
1742
+ account_id: str | None
1743
+ """Ad account ID"""
1744
+ description: str | None
1745
+ """Video description"""
1746
+ length: float | None
1747
+ """Video length in seconds"""
1748
+ source: str | None
1749
+ """Video source URL"""
1750
+ permalink_url: str | None
1751
+ """Permalink URL"""
1752
+ views: int | None
1753
+ """Number of views"""
1754
+ created_time: str | None
1755
+ """Creation time"""
1756
+ updated_time: str | None
1757
+ """Last update time"""
1758
+
1759
+
1760
+ class VideosInFilter(TypedDict, total=False):
1761
+ """Available fields for 'in' condition (values are lists)."""
1762
+ id: list[str]
1763
+ """Video ID"""
1764
+ title: list[str]
1765
+ """Video title"""
1766
+ account_id: list[str]
1767
+ """Ad account ID"""
1768
+ description: list[str]
1769
+ """Video description"""
1770
+ length: list[float]
1771
+ """Video length in seconds"""
1772
+ source: list[str]
1773
+ """Video source URL"""
1774
+ permalink_url: list[str]
1775
+ """Permalink URL"""
1776
+ views: list[int]
1777
+ """Number of views"""
1778
+ created_time: list[str]
1779
+ """Creation time"""
1780
+ updated_time: list[str]
1781
+ """Last update time"""
1782
+
1783
+
1784
+ class VideosAnyValueFilter(TypedDict, total=False):
1785
+ """Available fields with Any value type. Used for 'contains' and 'any' conditions."""
1786
+ id: Any
1787
+ """Video ID"""
1788
+ title: Any
1789
+ """Video title"""
1790
+ account_id: Any
1791
+ """Ad account ID"""
1792
+ description: Any
1793
+ """Video description"""
1794
+ length: Any
1795
+ """Video length in seconds"""
1796
+ source: Any
1797
+ """Video source URL"""
1798
+ permalink_url: Any
1799
+ """Permalink URL"""
1800
+ views: Any
1801
+ """Number of views"""
1802
+ created_time: Any
1803
+ """Creation time"""
1804
+ updated_time: Any
1805
+ """Last update time"""
1806
+
1807
+
1808
+ class VideosStringFilter(TypedDict, total=False):
1809
+ """String fields for text search conditions (like, fuzzy, keyword)."""
1810
+ id: str
1811
+ """Video ID"""
1812
+ title: str
1813
+ """Video title"""
1814
+ account_id: str
1815
+ """Ad account ID"""
1816
+ description: str
1817
+ """Video description"""
1818
+ length: str
1819
+ """Video length in seconds"""
1820
+ source: str
1821
+ """Video source URL"""
1822
+ permalink_url: str
1823
+ """Permalink URL"""
1824
+ views: str
1825
+ """Number of views"""
1826
+ created_time: str
1827
+ """Creation time"""
1828
+ updated_time: str
1829
+ """Last update time"""
1830
+
1831
+
1832
+ class VideosSortFilter(TypedDict, total=False):
1833
+ """Available fields for sorting videos search results."""
1834
+ id: AirbyteSortOrder
1835
+ """Video ID"""
1836
+ title: AirbyteSortOrder
1837
+ """Video title"""
1838
+ account_id: AirbyteSortOrder
1839
+ """Ad account ID"""
1840
+ description: AirbyteSortOrder
1841
+ """Video description"""
1842
+ length: AirbyteSortOrder
1843
+ """Video length in seconds"""
1844
+ source: AirbyteSortOrder
1845
+ """Video source URL"""
1846
+ permalink_url: AirbyteSortOrder
1847
+ """Permalink URL"""
1848
+ views: AirbyteSortOrder
1849
+ """Number of views"""
1850
+ created_time: AirbyteSortOrder
1851
+ """Creation time"""
1852
+ updated_time: AirbyteSortOrder
1853
+ """Last update time"""
1854
+
1855
+
1856
+ # Entity-specific condition types for videos
1857
+ class VideosEqCondition(TypedDict, total=False):
1858
+ """Equal to: field equals value."""
1859
+ eq: VideosSearchFilter
1860
+
1861
+
1862
+ class VideosNeqCondition(TypedDict, total=False):
1863
+ """Not equal to: field does not equal value."""
1864
+ neq: VideosSearchFilter
1865
+
1866
+
1867
+ class VideosGtCondition(TypedDict, total=False):
1868
+ """Greater than: field > value."""
1869
+ gt: VideosSearchFilter
1870
+
1871
+
1872
+ class VideosGteCondition(TypedDict, total=False):
1873
+ """Greater than or equal: field >= value."""
1874
+ gte: VideosSearchFilter
1875
+
1876
+
1877
+ class VideosLtCondition(TypedDict, total=False):
1878
+ """Less than: field < value."""
1879
+ lt: VideosSearchFilter
1880
+
1881
+
1882
+ class VideosLteCondition(TypedDict, total=False):
1883
+ """Less than or equal: field <= value."""
1884
+ lte: VideosSearchFilter
1885
+
1886
+
1887
+ class VideosLikeCondition(TypedDict, total=False):
1888
+ """Partial string match with % wildcards."""
1889
+ like: VideosStringFilter
1890
+
1891
+
1892
+ class VideosFuzzyCondition(TypedDict, total=False):
1893
+ """Ordered word text match (case-insensitive)."""
1894
+ fuzzy: VideosStringFilter
1895
+
1896
+
1897
+ class VideosKeywordCondition(TypedDict, total=False):
1898
+ """Keyword text match (any word present)."""
1899
+ keyword: VideosStringFilter
1900
+
1901
+
1902
+ class VideosContainsCondition(TypedDict, total=False):
1903
+ """Check if value exists in array field. Example: {"contains": {"tags": "premium"}}"""
1904
+ contains: VideosAnyValueFilter
1905
+
1906
+
1907
+ # Reserved keyword conditions using functional TypedDict syntax
1908
+ VideosInCondition = TypedDict("VideosInCondition", {"in": VideosInFilter}, total=False)
1909
+ """In list: field value is in list. Example: {"in": {"status": ["active", "pending"]}}"""
1910
+
1911
+ VideosNotCondition = TypedDict("VideosNotCondition", {"not": "VideosCondition"}, total=False)
1912
+ """Negates the nested condition."""
1913
+
1914
+ VideosAndCondition = TypedDict("VideosAndCondition", {"and": "list[VideosCondition]"}, total=False)
1915
+ """True if all nested conditions are true."""
1916
+
1917
+ VideosOrCondition = TypedDict("VideosOrCondition", {"or": "list[VideosCondition]"}, total=False)
1918
+ """True if any nested condition is true."""
1919
+
1920
+ VideosAnyCondition = TypedDict("VideosAnyCondition", {"any": VideosAnyValueFilter}, total=False)
1921
+ """Match if ANY element in array field matches nested condition. Example: {"any": {"addresses": {"eq": {"state": "CA"}}}}"""
1922
+
1923
+ # Union of all videos condition types
1924
+ VideosCondition = (
1925
+ VideosEqCondition
1926
+ | VideosNeqCondition
1927
+ | VideosGtCondition
1928
+ | VideosGteCondition
1929
+ | VideosLtCondition
1930
+ | VideosLteCondition
1931
+ | VideosInCondition
1932
+ | VideosLikeCondition
1933
+ | VideosFuzzyCondition
1934
+ | VideosKeywordCondition
1935
+ | VideosContainsCondition
1936
+ | VideosNotCondition
1937
+ | VideosAndCondition
1938
+ | VideosOrCondition
1939
+ | VideosAnyCondition
1940
+ )
1941
+
1942
+
1943
+ class VideosSearchQuery(TypedDict, total=False):
1944
+ """Search query for videos entity."""
1945
+ filter: VideosCondition
1946
+ sort: list[VideosSortFilter]
1947
+
1948
+
1949
+
1950
+ # ===== SEARCH PARAMS =====
1951
+
1952
+ class AirbyteSearchParams(TypedDict, total=False):
1953
+ """Parameters for Airbyte cache search operations (generic, use entity-specific query types for better type hints)."""
1954
+ query: dict[str, Any]
1955
+ limit: int
1956
+ cursor: str
1957
+ fields: list[list[str]]