airbyte-agent-orb 0.1.6__py3-none-any.whl → 0.1.8__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.
- airbyte_agent_orb/__init__.py +2 -2
- airbyte_agent_orb/_vendored/connector_sdk/connector_model_loader.py +0 -5
- airbyte_agent_orb/_vendored/connector_sdk/executor/local_executor.py +16 -20
- airbyte_agent_orb/_vendored/connector_sdk/schema/__init__.py +0 -2
- airbyte_agent_orb/_vendored/connector_sdk/schema/base.py +32 -1
- airbyte_agent_orb/_vendored/connector_sdk/schema/extensions.py +41 -3
- airbyte_agent_orb/_vendored/connector_sdk/schema/operations.py +3 -2
- airbyte_agent_orb/_vendored/connector_sdk/schema/security.py +33 -41
- airbyte_agent_orb/_vendored/connector_sdk/types.py +1 -1
- airbyte_agent_orb/_vendored/connector_sdk/validation.py +1 -1
- airbyte_agent_orb/models.py +16 -16
- {airbyte_agent_orb-0.1.6.dist-info → airbyte_agent_orb-0.1.8.dist-info}/METADATA +3 -3
- {airbyte_agent_orb-0.1.6.dist-info → airbyte_agent_orb-0.1.8.dist-info}/RECORD +14 -14
- {airbyte_agent_orb-0.1.6.dist-info → airbyte_agent_orb-0.1.8.dist-info}/WHEEL +0 -0
airbyte_agent_orb/__init__.py
CHANGED
|
@@ -20,9 +20,9 @@ from .models import (
|
|
|
20
20
|
PlanPricesItem,
|
|
21
21
|
Plan,
|
|
22
22
|
PlansList,
|
|
23
|
-
InvoiceLineItemsItem,
|
|
24
23
|
InvoiceSubscription,
|
|
25
24
|
InvoiceCustomer,
|
|
25
|
+
InvoiceLineItemsItem,
|
|
26
26
|
Invoice,
|
|
27
27
|
InvoicesList,
|
|
28
28
|
CustomersListResultMeta,
|
|
@@ -88,9 +88,9 @@ __all__ = [
|
|
|
88
88
|
"PlanPricesItem",
|
|
89
89
|
"Plan",
|
|
90
90
|
"PlansList",
|
|
91
|
-
"InvoiceLineItemsItem",
|
|
92
91
|
"InvoiceSubscription",
|
|
93
92
|
"InvoiceCustomer",
|
|
93
|
+
"InvoiceLineItemsItem",
|
|
94
94
|
"Invoice",
|
|
95
95
|
"InvoicesList",
|
|
96
96
|
"CustomersListResultMeta",
|
|
@@ -766,7 +766,6 @@ def _generate_default_auth_config(auth_type: AuthType) -> AirbyteAuthConfig:
|
|
|
766
766
|
)
|
|
767
767
|
},
|
|
768
768
|
auth_mapping={"token": "${token}"},
|
|
769
|
-
oneOf=None,
|
|
770
769
|
)
|
|
771
770
|
elif auth_type == AuthType.BASIC:
|
|
772
771
|
return AirbyteAuthConfig(
|
|
@@ -793,7 +792,6 @@ def _generate_default_auth_config(auth_type: AuthType) -> AirbyteAuthConfig:
|
|
|
793
792
|
),
|
|
794
793
|
},
|
|
795
794
|
auth_mapping={"username": "${username}", "password": "${password}"},
|
|
796
|
-
oneOf=None,
|
|
797
795
|
)
|
|
798
796
|
elif auth_type == AuthType.API_KEY:
|
|
799
797
|
return AirbyteAuthConfig(
|
|
@@ -812,7 +810,6 @@ def _generate_default_auth_config(auth_type: AuthType) -> AirbyteAuthConfig:
|
|
|
812
810
|
)
|
|
813
811
|
},
|
|
814
812
|
auth_mapping={"api_key": "${api_key}"},
|
|
815
|
-
oneOf=None,
|
|
816
813
|
)
|
|
817
814
|
elif auth_type == AuthType.OAUTH2:
|
|
818
815
|
# OAuth2: No fields are strictly required to support both modes:
|
|
@@ -865,7 +862,6 @@ def _generate_default_auth_config(auth_type: AuthType) -> AirbyteAuthConfig:
|
|
|
865
862
|
"client_id": "${client_id}",
|
|
866
863
|
"client_secret": "${client_secret}",
|
|
867
864
|
},
|
|
868
|
-
oneOf=None,
|
|
869
865
|
)
|
|
870
866
|
else:
|
|
871
867
|
# Unknown auth type - return minimal config
|
|
@@ -876,7 +872,6 @@ def _generate_default_auth_config(auth_type: AuthType) -> AirbyteAuthConfig:
|
|
|
876
872
|
required=None,
|
|
877
873
|
properties={},
|
|
878
874
|
auth_mapping={},
|
|
879
|
-
oneOf=None,
|
|
880
875
|
)
|
|
881
876
|
|
|
882
877
|
|
|
@@ -261,19 +261,10 @@ class LocalExecutor:
|
|
|
261
261
|
auth_mapping = None
|
|
262
262
|
required_fields: list[str] | None = None
|
|
263
263
|
|
|
264
|
-
#
|
|
264
|
+
# Get auth_mapping from the config
|
|
265
265
|
if user_config_spec.auth_mapping:
|
|
266
266
|
auth_mapping = user_config_spec.auth_mapping
|
|
267
267
|
required_fields = user_config_spec.required
|
|
268
|
-
# Check for oneOf (multiple auth options)
|
|
269
|
-
elif user_config_spec.one_of:
|
|
270
|
-
# Find the matching option based on which required fields are present
|
|
271
|
-
for option in user_config_spec.one_of:
|
|
272
|
-
option_required = option.required or []
|
|
273
|
-
if all(field in user_secrets for field in option_required):
|
|
274
|
-
auth_mapping = option.auth_mapping
|
|
275
|
-
required_fields = option_required
|
|
276
|
-
break
|
|
277
268
|
|
|
278
269
|
if not auth_mapping:
|
|
279
270
|
# No matching auth_mapping found, use secrets as-is
|
|
@@ -546,23 +537,25 @@ class LocalExecutor:
|
|
|
546
537
|
return ExecutionResult(success=False, data={}, error=str(e))
|
|
547
538
|
|
|
548
539
|
async def check(self) -> ExecutionResult:
|
|
549
|
-
"""Perform a health check by running a lightweight
|
|
540
|
+
"""Perform a health check by running a lightweight operation.
|
|
550
541
|
|
|
551
542
|
Finds the operation marked with preferred_for_check=True, or falls back
|
|
552
|
-
to the first list operation. Executes it
|
|
553
|
-
|
|
543
|
+
to the first list operation. Executes it to verify connectivity and credentials.
|
|
544
|
+
For list operations, uses limit=1 to minimize data transfer.
|
|
554
545
|
|
|
555
546
|
Returns:
|
|
556
547
|
ExecutionResult with data containing status, error, and checked operation details.
|
|
557
548
|
"""
|
|
558
549
|
check_entity = None
|
|
559
550
|
check_endpoint = None
|
|
551
|
+
check_action = None
|
|
560
552
|
|
|
561
|
-
# Look for preferred check operation
|
|
553
|
+
# Look for preferred check operation (can be any action type)
|
|
562
554
|
for (ent_name, op_action), endpoint in self._operation_index.items():
|
|
563
555
|
if getattr(endpoint, "preferred_for_check", False):
|
|
564
556
|
check_entity = ent_name
|
|
565
557
|
check_endpoint = endpoint
|
|
558
|
+
check_action = op_action
|
|
566
559
|
break
|
|
567
560
|
|
|
568
561
|
# Fallback to first list operation
|
|
@@ -571,18 +564,19 @@ class LocalExecutor:
|
|
|
571
564
|
if op_action == Action.LIST:
|
|
572
565
|
check_entity = ent_name
|
|
573
566
|
check_endpoint = endpoint
|
|
567
|
+
check_action = op_action
|
|
574
568
|
break
|
|
575
569
|
|
|
576
|
-
if check_endpoint is None or check_entity is None:
|
|
570
|
+
if check_endpoint is None or check_entity is None or check_action is None:
|
|
577
571
|
return ExecutionResult(
|
|
578
572
|
success=True,
|
|
579
573
|
data={
|
|
580
574
|
"status": "skipped",
|
|
581
|
-
"error": "No
|
|
575
|
+
"error": "No operation available for health check",
|
|
582
576
|
},
|
|
583
577
|
)
|
|
584
578
|
|
|
585
|
-
# Find the standard handler to execute the
|
|
579
|
+
# Find the standard handler to execute the operation
|
|
586
580
|
standard_handler = next(
|
|
587
581
|
(h for h in self._operation_handlers if isinstance(h, _StandardOperationHandler)),
|
|
588
582
|
None,
|
|
@@ -598,13 +592,15 @@ class LocalExecutor:
|
|
|
598
592
|
)
|
|
599
593
|
|
|
600
594
|
try:
|
|
601
|
-
|
|
595
|
+
# Use limit=1 for list operations to minimize data transfer
|
|
596
|
+
params = {"limit": 1} if check_action == Action.LIST else {}
|
|
597
|
+
await standard_handler.execute_operation(check_entity, check_action, params)
|
|
602
598
|
return ExecutionResult(
|
|
603
599
|
success=True,
|
|
604
600
|
data={
|
|
605
601
|
"status": "healthy",
|
|
606
602
|
"checked_entity": check_entity,
|
|
607
|
-
"checked_action":
|
|
603
|
+
"checked_action": check_action.value,
|
|
608
604
|
},
|
|
609
605
|
)
|
|
610
606
|
except Exception as e:
|
|
@@ -614,7 +610,7 @@ class LocalExecutor:
|
|
|
614
610
|
"status": "unhealthy",
|
|
615
611
|
"error": str(e),
|
|
616
612
|
"checked_entity": check_entity,
|
|
617
|
-
"checked_action":
|
|
613
|
+
"checked_action": check_action.value,
|
|
618
614
|
},
|
|
619
615
|
error=str(e),
|
|
620
616
|
)
|
|
@@ -31,7 +31,6 @@ from .operations import Operation, PathItem
|
|
|
31
31
|
from .security import (
|
|
32
32
|
AirbyteAuthConfig,
|
|
33
33
|
AuthConfigFieldSpec,
|
|
34
|
-
AuthConfigOption,
|
|
35
34
|
OAuth2Flow,
|
|
36
35
|
OAuth2Flows,
|
|
37
36
|
SecurityRequirement,
|
|
@@ -55,7 +54,6 @@ __all__ = [
|
|
|
55
54
|
"OAuth2Flow",
|
|
56
55
|
"OAuth2Flows",
|
|
57
56
|
"AirbyteAuthConfig",
|
|
58
|
-
"AuthConfigOption",
|
|
59
57
|
"AuthConfigFieldSpec",
|
|
60
58
|
# Component models
|
|
61
59
|
"Components",
|
|
@@ -10,7 +10,7 @@ from enum import StrEnum
|
|
|
10
10
|
from typing import Any, Dict
|
|
11
11
|
from uuid import UUID
|
|
12
12
|
|
|
13
|
-
from pydantic import BaseModel, ConfigDict, Field, field_validator
|
|
13
|
+
from pydantic import BaseModel, ConfigDict, Field, field_validator, model_validator
|
|
14
14
|
from pydantic_core import Url
|
|
15
15
|
|
|
16
16
|
from .extensions import CacheConfig, ReplicationConfig, RetryConfig
|
|
@@ -210,3 +210,34 @@ class Server(BaseModel):
|
|
|
210
210
|
raise ValueError("Server URL cannot be empty")
|
|
211
211
|
# Allow both absolute URLs and relative paths
|
|
212
212
|
return v
|
|
213
|
+
|
|
214
|
+
@model_validator(mode="after")
|
|
215
|
+
def validate_replication_environment_mapping(self) -> "Server":
|
|
216
|
+
"""Validate that x-airbyte-replication-environment-mapping sources exist in variables.
|
|
217
|
+
|
|
218
|
+
For simple mappings like {"subdomain": "subdomain"}, the key is the source variable.
|
|
219
|
+
For transform mappings like {"domain": {"source": "subdomain", "format": "..."}},
|
|
220
|
+
the "source" field is the source variable.
|
|
221
|
+
"""
|
|
222
|
+
env_mapping = self.x_airbyte_replication_environment_mapping
|
|
223
|
+
if not env_mapping or not self.variables:
|
|
224
|
+
return self
|
|
225
|
+
|
|
226
|
+
variable_names = set(self.variables.keys())
|
|
227
|
+
|
|
228
|
+
for env_key, mapping_value in env_mapping.items():
|
|
229
|
+
if isinstance(mapping_value, str):
|
|
230
|
+
source_var = env_key
|
|
231
|
+
elif isinstance(mapping_value, EnvironmentMappingTransform):
|
|
232
|
+
source_var = mapping_value.source
|
|
233
|
+
else:
|
|
234
|
+
continue
|
|
235
|
+
|
|
236
|
+
if source_var not in variable_names:
|
|
237
|
+
available = ", ".join(sorted(variable_names)) if variable_names else "(none)"
|
|
238
|
+
raise ValueError(
|
|
239
|
+
f"x-airbyte-replication-environment-mapping: source variable '{source_var}' "
|
|
240
|
+
f"not found in server variables. Available: {available}"
|
|
241
|
+
)
|
|
242
|
+
|
|
243
|
+
return self
|
|
@@ -14,7 +14,7 @@ are implemented.
|
|
|
14
14
|
|
|
15
15
|
from typing import Literal
|
|
16
16
|
|
|
17
|
-
from pydantic import BaseModel, ConfigDict, Field
|
|
17
|
+
from pydantic import BaseModel, ConfigDict, Field, model_validator
|
|
18
18
|
|
|
19
19
|
|
|
20
20
|
class PaginationConfig(BaseModel):
|
|
@@ -182,12 +182,25 @@ class CacheEntityConfig(BaseModel):
|
|
|
182
182
|
return self.x_airbyte_name or self.entity
|
|
183
183
|
|
|
184
184
|
|
|
185
|
+
class ReplicationConfigPropertyItems(BaseModel):
|
|
186
|
+
"""
|
|
187
|
+
Items definition for array-type replication configuration fields.
|
|
188
|
+
|
|
189
|
+
Defines the schema for items in an array-type replication config property.
|
|
190
|
+
"""
|
|
191
|
+
|
|
192
|
+
model_config = ConfigDict(populate_by_name=True, extra="forbid")
|
|
193
|
+
|
|
194
|
+
type: str
|
|
195
|
+
|
|
196
|
+
|
|
185
197
|
class ReplicationConfigProperty(BaseModel):
|
|
186
198
|
"""
|
|
187
199
|
Property definition for replication configuration fields.
|
|
188
200
|
|
|
189
201
|
Defines a single field in the replication configuration with its type,
|
|
190
|
-
description, and optional default value.
|
|
202
|
+
description, and optional default value. Supports both simple types
|
|
203
|
+
(string, integer, boolean) and array types.
|
|
191
204
|
|
|
192
205
|
Example YAML usage:
|
|
193
206
|
x-airbyte-replication-config:
|
|
@@ -197,6 +210,12 @@ class ReplicationConfigProperty(BaseModel):
|
|
|
197
210
|
title: Start Date
|
|
198
211
|
description: UTC date and time from which to replicate data
|
|
199
212
|
format: date-time
|
|
213
|
+
account_ids:
|
|
214
|
+
type: array
|
|
215
|
+
title: Account IDs
|
|
216
|
+
description: List of account IDs to replicate
|
|
217
|
+
items:
|
|
218
|
+
type: string
|
|
200
219
|
"""
|
|
201
220
|
|
|
202
221
|
model_config = ConfigDict(populate_by_name=True, extra="forbid")
|
|
@@ -205,8 +224,9 @@ class ReplicationConfigProperty(BaseModel):
|
|
|
205
224
|
title: str | None = None
|
|
206
225
|
description: str | None = None
|
|
207
226
|
format: str | None = None
|
|
208
|
-
default: str | int | float | bool | None = None
|
|
227
|
+
default: str | int | float | bool | list | None = None
|
|
209
228
|
enum: list[str] | None = None
|
|
229
|
+
items: ReplicationConfigPropertyItems | None = None
|
|
210
230
|
|
|
211
231
|
|
|
212
232
|
class ReplicationConfig(BaseModel):
|
|
@@ -252,6 +272,24 @@ class ReplicationConfig(BaseModel):
|
|
|
252
272
|
description="Mapping from replication_config field names to source_config field names",
|
|
253
273
|
)
|
|
254
274
|
|
|
275
|
+
@model_validator(mode="after")
|
|
276
|
+
def validate_replication_config_key_mapping(self) -> "ReplicationConfig":
|
|
277
|
+
"""Validate that replication_config_key_mapping keys exist in properties.
|
|
278
|
+
|
|
279
|
+
The mapping is: {local_key: airbyte_path}
|
|
280
|
+
We validate that local_key exists in our properties.
|
|
281
|
+
"""
|
|
282
|
+
if self.replication_config_key_mapping and self.properties:
|
|
283
|
+
property_names = set(self.properties.keys())
|
|
284
|
+
for local_key, airbyte_path in self.replication_config_key_mapping.items():
|
|
285
|
+
if local_key not in property_names:
|
|
286
|
+
available = ", ".join(sorted(property_names)) if property_names else "(none)"
|
|
287
|
+
raise ValueError(
|
|
288
|
+
f"replication_config_key_mapping: local key '{local_key}' "
|
|
289
|
+
f"(mapped to '{airbyte_path}') not found in properties. Available: {available}"
|
|
290
|
+
)
|
|
291
|
+
return self
|
|
292
|
+
|
|
255
293
|
|
|
256
294
|
class CacheConfig(BaseModel):
|
|
257
295
|
"""
|
|
@@ -90,9 +90,10 @@ class Operation(BaseModel):
|
|
|
90
90
|
None,
|
|
91
91
|
alias="x-airbyte-preferred-for-check",
|
|
92
92
|
description=(
|
|
93
|
-
"Mark this
|
|
93
|
+
"Mark this operation as the preferred operation for health checks. "
|
|
94
94
|
"When the CHECK action is executed, this operation will be used instead of "
|
|
95
|
-
"falling back to the first available list operation.
|
|
95
|
+
"falling back to the first available list operation. The operation's actual "
|
|
96
|
+
"action type (get, list, etc.) will be respected. Choose a lightweight, "
|
|
96
97
|
"always-available endpoint (e.g., users, accounts)."
|
|
97
98
|
),
|
|
98
99
|
)
|
|
@@ -58,30 +58,6 @@ class AuthConfigFieldSpec(BaseModel):
|
|
|
58
58
|
default: Any | None = None
|
|
59
59
|
|
|
60
60
|
|
|
61
|
-
class AuthConfigOption(BaseModel):
|
|
62
|
-
"""
|
|
63
|
-
A single authentication configuration option.
|
|
64
|
-
|
|
65
|
-
Defines user-facing fields and how they map to auth parameters.
|
|
66
|
-
"""
|
|
67
|
-
|
|
68
|
-
model_config = ConfigDict(populate_by_name=True, extra="forbid")
|
|
69
|
-
|
|
70
|
-
title: str | None = None
|
|
71
|
-
description: str | None = None
|
|
72
|
-
type: Literal["object"] = "object"
|
|
73
|
-
required: List[str] = Field(default_factory=list)
|
|
74
|
-
properties: Dict[str, AuthConfigFieldSpec] = Field(default_factory=dict)
|
|
75
|
-
auth_mapping: Dict[str, str] = Field(
|
|
76
|
-
default_factory=dict,
|
|
77
|
-
description="Mapping from auth parameters (e.g., 'username', 'password', 'token') to template strings using ${field} syntax",
|
|
78
|
-
)
|
|
79
|
-
replication_auth_key_mapping: Dict[str, str] | None = Field(
|
|
80
|
-
None,
|
|
81
|
-
description="Mapping from source config paths (e.g., 'credentials.api_key') to auth config keys for direct connectors",
|
|
82
|
-
)
|
|
83
|
-
|
|
84
|
-
|
|
85
61
|
class AirbyteAuthConfig(BaseModel):
|
|
86
62
|
"""
|
|
87
63
|
Airbyte auth configuration extension (x-airbyte-auth-config).
|
|
@@ -89,12 +65,12 @@ class AirbyteAuthConfig(BaseModel):
|
|
|
89
65
|
Defines user-facing authentication configuration and how it maps to
|
|
90
66
|
the underlying OpenAPI security scheme.
|
|
91
67
|
|
|
92
|
-
|
|
68
|
+
For multiple authentication methods, define separate security schemes
|
|
69
|
+
rather than using oneOf within a single scheme.
|
|
93
70
|
"""
|
|
94
71
|
|
|
95
72
|
model_config = ConfigDict(populate_by_name=True, extra="forbid")
|
|
96
73
|
|
|
97
|
-
# Single option fields
|
|
98
74
|
title: str | None = None
|
|
99
75
|
description: str | None = None
|
|
100
76
|
type: Literal["object"] | None = None
|
|
@@ -122,32 +98,48 @@ class AirbyteAuthConfig(BaseModel):
|
|
|
122
98
|
None,
|
|
123
99
|
description="Constant values to always inject at source config paths (e.g., 'credentials.auth_type': 'OAuth2.0')",
|
|
124
100
|
)
|
|
125
|
-
# Multiple options (oneOf)
|
|
126
|
-
one_of: List[AuthConfigOption] | None = Field(None, alias="oneOf")
|
|
127
101
|
|
|
128
102
|
@model_validator(mode="after")
|
|
129
103
|
def validate_config_structure(self) -> "AirbyteAuthConfig":
|
|
130
|
-
"""Validate that
|
|
131
|
-
|
|
132
|
-
has_one_of = self.one_of is not None and len(self.one_of) > 0
|
|
133
|
-
|
|
134
|
-
if not has_single and not has_one_of:
|
|
135
|
-
raise ValueError("Either single auth option (type/properties/auth_mapping) or oneOf must be provided")
|
|
104
|
+
"""Validate that required fields are provided for auth config."""
|
|
105
|
+
has_config = self.type is not None or self.properties is not None or self.auth_mapping is not None
|
|
136
106
|
|
|
137
|
-
if
|
|
138
|
-
raise ValueError("
|
|
107
|
+
if not has_config:
|
|
108
|
+
raise ValueError("Auth config must have type, properties, and auth_mapping")
|
|
139
109
|
|
|
140
|
-
if
|
|
141
|
-
# Validate
|
|
110
|
+
if has_config:
|
|
111
|
+
# Validate required fields
|
|
142
112
|
if self.type != "object":
|
|
143
|
-
raise ValueError("
|
|
113
|
+
raise ValueError("Auth config must have type='object'")
|
|
144
114
|
if not self.properties:
|
|
145
|
-
raise ValueError("
|
|
115
|
+
raise ValueError("Auth config must have properties")
|
|
146
116
|
if not self.auth_mapping:
|
|
147
|
-
raise ValueError("
|
|
117
|
+
raise ValueError("Auth config must have auth_mapping")
|
|
118
|
+
|
|
119
|
+
# Validate replication_auth_key_mapping targets exist in properties
|
|
120
|
+
if self.replication_auth_key_mapping and self.properties:
|
|
121
|
+
self._validate_replication_auth_key_mapping(self.replication_auth_key_mapping, self.properties, context="x-airbyte-auth-config")
|
|
148
122
|
|
|
149
123
|
return self
|
|
150
124
|
|
|
125
|
+
@staticmethod
|
|
126
|
+
def _validate_replication_auth_key_mapping(mapping: Dict[str, str], properties: Dict[str, AuthConfigFieldSpec], context: str) -> None:
|
|
127
|
+
"""Validate that replication_auth_key_mapping target keys exist in properties.
|
|
128
|
+
|
|
129
|
+
Args:
|
|
130
|
+
mapping: The replication_auth_key_mapping dict (airbyte_path -> our_key)
|
|
131
|
+
properties: The properties dict from x-airbyte-auth-config
|
|
132
|
+
context: Context string for error messages
|
|
133
|
+
"""
|
|
134
|
+
property_names = set(properties.keys())
|
|
135
|
+
for airbyte_path, our_key in mapping.items():
|
|
136
|
+
if our_key not in property_names:
|
|
137
|
+
available = ", ".join(sorted(property_names)) if property_names else "(none)"
|
|
138
|
+
raise ValueError(
|
|
139
|
+
f"replication_auth_key_mapping in {context}: target key '{our_key}' "
|
|
140
|
+
f"(mapped from '{airbyte_path}') not found in properties. Available: {available}"
|
|
141
|
+
)
|
|
142
|
+
|
|
151
143
|
|
|
152
144
|
class SecurityScheme(BaseModel):
|
|
153
145
|
"""
|
|
@@ -239,7 +239,7 @@ class EndpointDefinition(BaseModel):
|
|
|
239
239
|
# Health check support (Airbyte extension)
|
|
240
240
|
preferred_for_check: bool = Field(
|
|
241
241
|
False,
|
|
242
|
-
description="Mark this
|
|
242
|
+
description="Mark this operation as preferred for health checks (from x-airbyte-preferred-for-check extension)",
|
|
243
243
|
)
|
|
244
244
|
|
|
245
245
|
|
|
@@ -959,7 +959,7 @@ def validate_connector_readiness(connector_dir: str | Path) -> Dict[str, Any]:
|
|
|
959
959
|
if not has_preferred_check:
|
|
960
960
|
readiness_warnings.append(
|
|
961
961
|
"No operation has x-airbyte-preferred-for-check: true. "
|
|
962
|
-
"Add this extension to a lightweight
|
|
962
|
+
"Add this extension to a lightweight operation (e.g., users.list or accounts.get) "
|
|
963
963
|
"to enable reliable health checks."
|
|
964
964
|
)
|
|
965
965
|
|
airbyte_agent_orb/models.py
CHANGED
|
@@ -180,6 +180,22 @@ class PlansList(BaseModel):
|
|
|
180
180
|
data: Union[list[Plan], Any] = Field(default=None)
|
|
181
181
|
pagination_metadata: Union[PaginationMetadata, Any] = Field(default=None)
|
|
182
182
|
|
|
183
|
+
class InvoiceSubscription(BaseModel):
|
|
184
|
+
"""The subscription associated with the invoice"""
|
|
185
|
+
model_config = ConfigDict(extra="allow", populate_by_name=True)
|
|
186
|
+
|
|
187
|
+
id: Union[str | None, Any] = Field(default=None, description="The subscription ID")
|
|
188
|
+
"""The subscription ID"""
|
|
189
|
+
|
|
190
|
+
class InvoiceCustomer(BaseModel):
|
|
191
|
+
"""The customer associated with the invoice"""
|
|
192
|
+
model_config = ConfigDict(extra="allow", populate_by_name=True)
|
|
193
|
+
|
|
194
|
+
id: Union[str | None, Any] = Field(default=None, description="The customer ID")
|
|
195
|
+
"""The customer ID"""
|
|
196
|
+
external_customer_id: Union[str | None, Any] = Field(default=None, description="The external customer ID")
|
|
197
|
+
"""The external customer ID"""
|
|
198
|
+
|
|
183
199
|
class InvoiceLineItemsItem(BaseModel):
|
|
184
200
|
"""Nested schema for Invoice.line_items_item"""
|
|
185
201
|
model_config = ConfigDict(extra="allow", populate_by_name=True)
|
|
@@ -197,22 +213,6 @@ class InvoiceLineItemsItem(BaseModel):
|
|
|
197
213
|
end_date: Union[str | None, Any] = Field(default=None, description="The end date of the line item")
|
|
198
214
|
"""The end date of the line item"""
|
|
199
215
|
|
|
200
|
-
class InvoiceSubscription(BaseModel):
|
|
201
|
-
"""The subscription associated with the invoice"""
|
|
202
|
-
model_config = ConfigDict(extra="allow", populate_by_name=True)
|
|
203
|
-
|
|
204
|
-
id: Union[str | None, Any] = Field(default=None, description="The subscription ID")
|
|
205
|
-
"""The subscription ID"""
|
|
206
|
-
|
|
207
|
-
class InvoiceCustomer(BaseModel):
|
|
208
|
-
"""The customer associated with the invoice"""
|
|
209
|
-
model_config = ConfigDict(extra="allow", populate_by_name=True)
|
|
210
|
-
|
|
211
|
-
id: Union[str | None, Any] = Field(default=None, description="The customer ID")
|
|
212
|
-
"""The customer ID"""
|
|
213
|
-
external_customer_id: Union[str | None, Any] = Field(default=None, description="The external customer ID")
|
|
214
|
-
"""The external customer ID"""
|
|
215
|
-
|
|
216
216
|
class Invoice(BaseModel):
|
|
217
217
|
"""Invoice object"""
|
|
218
218
|
model_config = ConfigDict(extra="allow", populate_by_name=True)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: airbyte-agent-orb
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.8
|
|
4
4
|
Summary: Airbyte Orb Connector for AI platforms
|
|
5
5
|
Project-URL: Homepage, https://github.com/airbytehq/airbyte-agent-connectors
|
|
6
6
|
Project-URL: Documentation, https://docs.airbyte.com/ai-agents/
|
|
@@ -147,7 +147,7 @@ See the official [Orb API reference](https://docs.withorb.com/api-reference).
|
|
|
147
147
|
|
|
148
148
|
## Version information
|
|
149
149
|
|
|
150
|
-
- **Package version:** 0.1.
|
|
150
|
+
- **Package version:** 0.1.8
|
|
151
151
|
- **Connector version:** 0.1.1
|
|
152
|
-
- **Generated with Connector SDK commit SHA:**
|
|
152
|
+
- **Generated with Connector SDK commit SHA:** 5c6dbf883d3b057550333775bd83a78777527017
|
|
153
153
|
- **Changelog:** [View changelog](https://github.com/airbytehq/airbyte-agent-connectors/blob/main/connectors/orb/CHANGELOG.md)
|
|
@@ -1,28 +1,28 @@
|
|
|
1
|
-
airbyte_agent_orb/__init__.py,sha256=
|
|
1
|
+
airbyte_agent_orb/__init__.py,sha256=jHWqgCDpIiDZB1WLwcKo4aNXkp5ypSdV0WQWkCNJv_Y,3225
|
|
2
2
|
airbyte_agent_orb/connector.py,sha256=dCsSG2QFX4hdIyMJzNiP0sCj4xWoAKAKKrGxH83AVmc,41497
|
|
3
3
|
airbyte_agent_orb/connector_model.py,sha256=mhxwbi31hLA-oU2I8oQq7uMK4S0KV8XGjCELQRGth50,120056
|
|
4
|
-
airbyte_agent_orb/models.py,sha256=
|
|
4
|
+
airbyte_agent_orb/models.py,sha256=dFg7AeDxlgoGO8eU9ypRTLqULqSAHDA3cuaXKEKbsyk,22410
|
|
5
5
|
airbyte_agent_orb/types.py,sha256=O6Q2AOp8BYjYhpEFvOZXnzQDf-7GAKnpCorER2Puh2E,37077
|
|
6
6
|
airbyte_agent_orb/_vendored/__init__.py,sha256=ILl7AHXMui__swyrjxrh9yRa4dLiwBvV6axPWFWty80,38
|
|
7
7
|
airbyte_agent_orb/_vendored/connector_sdk/__init__.py,sha256=T5o7roU6NSpH-lCAGZ338sE5dlh4ZU6i6IkeG1zpems,1949
|
|
8
8
|
airbyte_agent_orb/_vendored/connector_sdk/auth_strategies.py,sha256=5Sb9moUp623o67Q2wMa8iZldJH08y4gQdoutoO_75Iw,42088
|
|
9
9
|
airbyte_agent_orb/_vendored/connector_sdk/auth_template.py,sha256=nju4jqlFC_KI82ILNumNIyiUtRJcy7J94INIZ0QraI4,4454
|
|
10
|
-
airbyte_agent_orb/_vendored/connector_sdk/connector_model_loader.py,sha256=
|
|
10
|
+
airbyte_agent_orb/_vendored/connector_sdk/connector_model_loader.py,sha256=83_wqiihOXj5bhszHvLhjENwvXnDl_-LhI-h3NeSd80,41641
|
|
11
11
|
airbyte_agent_orb/_vendored/connector_sdk/constants.py,sha256=AtzOvhDMWbRJgpsQNWl5tkogHD6mWgEY668PgRmgtOY,2737
|
|
12
12
|
airbyte_agent_orb/_vendored/connector_sdk/exceptions.py,sha256=ss5MGv9eVPmsbLcLWetuu3sDmvturwfo6Pw3M37Oq5k,481
|
|
13
13
|
airbyte_agent_orb/_vendored/connector_sdk/extensions.py,sha256=XWRRoJOOrwUHSKbuQt5DU7CCu8ePzhd_HuP7c_uD77w,21376
|
|
14
14
|
airbyte_agent_orb/_vendored/connector_sdk/http_client.py,sha256=09Fclbq4wrg38EM2Yh2kHiykQVXqdAGby024elcEz8E,28027
|
|
15
15
|
airbyte_agent_orb/_vendored/connector_sdk/introspection.py,sha256=e9uWn2ofpeehoBbzNgts_bjlKLn8ayA1Y3OpDC3b7ZA,19517
|
|
16
16
|
airbyte_agent_orb/_vendored/connector_sdk/secrets.py,sha256=J9ezMu4xNnLW11xY5RCre6DHP7YMKZCqwGJfk7ufHAM,6855
|
|
17
|
-
airbyte_agent_orb/_vendored/connector_sdk/types.py,sha256=
|
|
17
|
+
airbyte_agent_orb/_vendored/connector_sdk/types.py,sha256=aXiZxXzHvqPSOS7Dz_moyITT3EMybgjgPYgGuO7a_F4,9407
|
|
18
18
|
airbyte_agent_orb/_vendored/connector_sdk/utils.py,sha256=UYwYuSLhsDD-4C0dBs7Qy0E0gIcFZXb6VWadJORhQQU,4080
|
|
19
|
-
airbyte_agent_orb/_vendored/connector_sdk/validation.py,sha256=
|
|
19
|
+
airbyte_agent_orb/_vendored/connector_sdk/validation.py,sha256=LcbmBfGkWx0Xv4pWZYpFf4JlhFjvwqGcwvliRSalN8Y,39677
|
|
20
20
|
airbyte_agent_orb/_vendored/connector_sdk/validation_replication.py,sha256=v7F5YWd5m4diIF7_4m4nOkC9crg97vqRUUkt9ka9HZ4,36043
|
|
21
21
|
airbyte_agent_orb/_vendored/connector_sdk/cloud_utils/__init__.py,sha256=4799Hv9f2zxDVj1aLyQ8JpTEuFTp_oOZMRz-NZCdBJg,134
|
|
22
22
|
airbyte_agent_orb/_vendored/connector_sdk/cloud_utils/client.py,sha256=e0VLNCmesGGfo2uD0GiICgXsXTeTkh0GYiVgx_e4VEc,12296
|
|
23
23
|
airbyte_agent_orb/_vendored/connector_sdk/executor/__init__.py,sha256=EmG9YQNAjSuYCVB4D5VoLm4qpD1KfeiiOf7bpALj8p8,702
|
|
24
24
|
airbyte_agent_orb/_vendored/connector_sdk/executor/hosted_executor.py,sha256=tv0njAdy-gdHBg4izgcxhEWYbrNiBifEYEca9AWzaL0,8693
|
|
25
|
-
airbyte_agent_orb/_vendored/connector_sdk/executor/local_executor.py,sha256=
|
|
25
|
+
airbyte_agent_orb/_vendored/connector_sdk/executor/local_executor.py,sha256=chrTenrg1BRQ2ODPUcNj_KAY14UFiPmFT_mteUhyNRE,76440
|
|
26
26
|
airbyte_agent_orb/_vendored/connector_sdk/executor/models.py,sha256=mUUBnuShKXxVIfsTOhMiI2rn2a-50jJG7SFGKT_P6Jk,6281
|
|
27
27
|
airbyte_agent_orb/_vendored/connector_sdk/http/__init__.py,sha256=y8fbzZn-3yV9OxtYz8Dy6FFGI5v6TOqADd1G3xHH3Hw,911
|
|
28
28
|
airbyte_agent_orb/_vendored/connector_sdk/http/config.py,sha256=6J7YIIwHC6sRu9i-yKa5XvArwK2KU60rlnmxzDZq3lw,3283
|
|
@@ -42,17 +42,17 @@ airbyte_agent_orb/_vendored/connector_sdk/observability/session.py,sha256=WYRIB3
|
|
|
42
42
|
airbyte_agent_orb/_vendored/connector_sdk/performance/__init__.py,sha256=Sp5fSd1LvtIQkv-fnrKqPsM7-6IWp0sSZSK0mhzal_A,200
|
|
43
43
|
airbyte_agent_orb/_vendored/connector_sdk/performance/instrumentation.py,sha256=_dXvNiqdndIBwDjeDKNViWzn_M5FkSUsMmJtFldrmsM,1504
|
|
44
44
|
airbyte_agent_orb/_vendored/connector_sdk/performance/metrics.py,sha256=FRff7dKt4iwt_A7pxV5n9kAGBR756PC7q8-weWygPSM,2817
|
|
45
|
-
airbyte_agent_orb/_vendored/connector_sdk/schema/__init__.py,sha256=
|
|
46
|
-
airbyte_agent_orb/_vendored/connector_sdk/schema/base.py,sha256=
|
|
45
|
+
airbyte_agent_orb/_vendored/connector_sdk/schema/__init__.py,sha256=Mwz8gVdVaPTxmTMRzRXjtIRNgfbqtia5A1UoOrof1fg,1592
|
|
46
|
+
airbyte_agent_orb/_vendored/connector_sdk/schema/base.py,sha256=0R0aR4HjcJpu3vN0jZ4nPBEwVZ_7J9_XLQgWaQGT3Fs,8476
|
|
47
47
|
airbyte_agent_orb/_vendored/connector_sdk/schema/components.py,sha256=nJIPieavwX3o3ODvdtLHPk84d_V229xmg6LDfwEHjzc,8119
|
|
48
48
|
airbyte_agent_orb/_vendored/connector_sdk/schema/connector.py,sha256=mSZk1wr2YSdRj9tTRsPAuIlCzd_xZLw-Bzl1sMwE0rE,3731
|
|
49
|
-
airbyte_agent_orb/_vendored/connector_sdk/schema/extensions.py,sha256=
|
|
50
|
-
airbyte_agent_orb/_vendored/connector_sdk/schema/operations.py,sha256=
|
|
51
|
-
airbyte_agent_orb/_vendored/connector_sdk/schema/security.py,sha256=
|
|
49
|
+
airbyte_agent_orb/_vendored/connector_sdk/schema/extensions.py,sha256=OPqaaS8S9P_D_VGWqdEixhtgWxNtq8EXU_N5UktnXBA,11192
|
|
50
|
+
airbyte_agent_orb/_vendored/connector_sdk/schema/operations.py,sha256=vU1gW5AJ41ZXE_VK4TLe3qqR4e0I0_uWTjUkskWcVdk,6296
|
|
51
|
+
airbyte_agent_orb/_vendored/connector_sdk/schema/security.py,sha256=6BHOzH7GwDAifAlZdbLcrFpE2JQTdR5rMwitMQ2MQqI,9244
|
|
52
52
|
airbyte_agent_orb/_vendored/connector_sdk/telemetry/__init__.py,sha256=RaLgkBU4dfxn1LC5Y0Q9rr2PJbrwjxvPgBLmq8_WafE,211
|
|
53
53
|
airbyte_agent_orb/_vendored/connector_sdk/telemetry/config.py,sha256=tLmQwAFD0kP1WyBGWBS3ysaudN9H3e-3EopKZi6cGKg,885
|
|
54
54
|
airbyte_agent_orb/_vendored/connector_sdk/telemetry/events.py,sha256=8Y1NbXiwISX-V_wRofY7PqcwEXD0dLMnntKkY6XFU2s,1328
|
|
55
55
|
airbyte_agent_orb/_vendored/connector_sdk/telemetry/tracker.py,sha256=SginFQbHqVUVYG82NnNzG34O-tAQ_wZYjGDcuo0q4Kk,5584
|
|
56
|
-
airbyte_agent_orb-0.1.
|
|
57
|
-
airbyte_agent_orb-0.1.
|
|
58
|
-
airbyte_agent_orb-0.1.
|
|
56
|
+
airbyte_agent_orb-0.1.8.dist-info/METADATA,sha256=dHG3ahERGB9IMYwFDp0eM1dmoDqyzFzI2WkOEYZklpQ,5670
|
|
57
|
+
airbyte_agent_orb-0.1.8.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
58
|
+
airbyte_agent_orb-0.1.8.dist-info/RECORD,,
|
|
File without changes
|