airbyte-agent-zendesk-support 0.18.42__py3-none-any.whl → 0.18.47__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.
@@ -519,13 +519,14 @@ def _parse_oauth2_config(scheme: Any) -> dict[str, str]:
519
519
  config["refresh_url"] = refresh_url
520
520
 
521
521
  # Extract custom refresh configuration from x-airbyte-token-refresh extension
522
+ # Note: x_token_refresh is a Dict[str, Any], not a Pydantic model, so use .get()
522
523
  x_token_refresh = getattr(scheme, "x_token_refresh", None)
523
524
  if x_token_refresh:
524
- auth_style = getattr(x_token_refresh, "auth_style", None)
525
+ auth_style = x_token_refresh.get("auth_style")
525
526
  if auth_style:
526
527
  config["auth_style"] = auth_style
527
528
 
528
- body_format = getattr(x_token_refresh, "body_format", None)
529
+ body_format = x_token_refresh.get("body_format")
529
530
  if body_format:
530
531
  config["body_format"] = body_format
531
532
 
@@ -495,6 +495,14 @@ class LocalExecutor:
495
495
  print(result.data)
496
496
  """
497
497
  try:
498
+ # Check for hosted-only actions before converting to Action enum
499
+ if config.action == "search":
500
+ raise NotImplementedError(
501
+ "search is only available in hosted execution mode. "
502
+ "Initialize the connector with external_user_id, airbyte_client_id, "
503
+ "and airbyte_client_secret to use this feature."
504
+ )
505
+
498
506
  # Convert config to internal format
499
507
  action = Action(config.action) if isinstance(config.action, str) else config.action
500
508
  params = config.params or {}
@@ -13,7 +13,7 @@ from uuid import UUID
13
13
  from pydantic import BaseModel, ConfigDict, Field, field_validator
14
14
  from pydantic_core import Url
15
15
 
16
- from .extensions import RetryConfig
16
+ from .extensions import CacheConfig, RetryConfig
17
17
 
18
18
 
19
19
  class ExampleQuestions(BaseModel):
@@ -105,6 +105,7 @@ class Info(BaseModel):
105
105
  - x-airbyte-external-documentation-urls: List of external documentation URLs (Airbyte extension)
106
106
  - x-airbyte-retry-config: Retry configuration for transient errors (Airbyte extension)
107
107
  - x-airbyte-example-questions: Example questions for AI connector README (Airbyte extension)
108
+ - x-airbyte-cache: Cache configuration for field mapping between API and cache schemas (Airbyte extension)
108
109
  """
109
110
 
110
111
  model_config = ConfigDict(populate_by_name=True, extra="forbid")
@@ -122,6 +123,7 @@ class Info(BaseModel):
122
123
  x_airbyte_external_documentation_urls: list[DocUrl] = Field(..., alias="x-airbyte-external-documentation-urls")
123
124
  x_airbyte_retry_config: RetryConfig | None = Field(None, alias="x-airbyte-retry-config")
124
125
  x_airbyte_example_questions: ExampleQuestions | None = Field(None, alias="x-airbyte-example-questions")
126
+ x_airbyte_cache: CacheConfig | None = Field(None, alias="x-airbyte-cache")
125
127
 
126
128
 
127
129
  class ServerVariable(BaseModel):
@@ -150,6 +152,7 @@ class Server(BaseModel):
150
152
  url: str
151
153
  description: str | None = None
152
154
  variables: Dict[str, ServerVariable] = Field(default_factory=dict)
155
+ x_airbyte_replication_user_config_mapping: Dict[str, str] | None = Field(default=None, alias="x-airbyte-replication-user-config-mapping")
153
156
 
154
157
  @field_validator("url")
155
158
  @classmethod
@@ -14,7 +14,7 @@ are implemented.
14
14
 
15
15
  from typing import Literal
16
16
 
17
- from pydantic import BaseModel, ConfigDict
17
+ from pydantic import BaseModel, ConfigDict, Field
18
18
 
19
19
 
20
20
  class PaginationConfig(BaseModel):
@@ -107,3 +107,124 @@ class RetryConfig(BaseModel):
107
107
  # Header-based delay extraction
108
108
  retry_after_header: str = "Retry-After"
109
109
  retry_after_format: Literal["seconds", "milliseconds", "unix_timestamp"] = "seconds"
110
+
111
+
112
+ class CacheFieldProperty(BaseModel):
113
+ """
114
+ Nested property definition for object-type cache fields.
115
+
116
+ Supports recursive nesting to represent complex nested schemas in cache field definitions.
117
+ Used when a cache field has type 'object' and needs to define its internal structure.
118
+
119
+ Example YAML usage:
120
+ - name: collaboration
121
+ type: ['null', 'object']
122
+ description: "Collaboration data"
123
+ properties:
124
+ brief:
125
+ type: ['null', 'string']
126
+ comments:
127
+ type: ['null', 'array']
128
+ """
129
+
130
+ model_config = ConfigDict(populate_by_name=True, extra="forbid")
131
+
132
+ type: str | list[str]
133
+ properties: dict[str, "CacheFieldProperty"] | None = None
134
+
135
+
136
+ class CacheFieldConfig(BaseModel):
137
+ """
138
+ Field configuration for cache mapping.
139
+
140
+ Defines a single field in a cache entity, with optional name aliasing
141
+ to map between user-facing field names and cache storage names.
142
+
143
+ For object-type fields, supports nested properties to define the internal structure
144
+ of complex nested schemas.
145
+
146
+ Used in x-airbyte-cache extension for api_search operations.
147
+ """
148
+
149
+ model_config = ConfigDict(populate_by_name=True, extra="forbid")
150
+
151
+ name: str
152
+ x_airbyte_name: str | None = Field(default=None, alias="x-airbyte-name")
153
+ type: str | list[str]
154
+ description: str
155
+ properties: dict[str, CacheFieldProperty] | None = None
156
+
157
+ @property
158
+ def cache_name(self) -> str:
159
+ """Return cache name, falling back to name if alias not specified."""
160
+ return self.x_airbyte_name or self.name
161
+
162
+
163
+ class CacheEntityConfig(BaseModel):
164
+ """
165
+ Entity configuration for cache mapping.
166
+
167
+ Defines a cache-enabled entity with its fields and optional name aliasing
168
+ to map between user-facing entity names and cache storage names.
169
+
170
+ Used in x-airbyte-cache extension for api_search operations.
171
+ """
172
+
173
+ model_config = ConfigDict(populate_by_name=True, extra="forbid")
174
+
175
+ entity: str
176
+ x_airbyte_name: str | None = Field(default=None, alias="x-airbyte-name")
177
+ fields: list[CacheFieldConfig]
178
+
179
+ @property
180
+ def cache_name(self) -> str:
181
+ """Return cache entity name, falling back to entity if alias not specified."""
182
+ return self.x_airbyte_name or self.entity
183
+
184
+
185
+ class CacheConfig(BaseModel):
186
+ """
187
+ Cache configuration extension (x-airbyte-cache).
188
+
189
+ Defines cache-enabled entities and their field mappings for api_search operations.
190
+ Supports optional name aliasing via x-airbyte-name for both entities and fields,
191
+ enabling bidirectional mapping between user-facing names and cache storage names.
192
+
193
+ This extension is added to the Info model and provides field-level mapping for
194
+ search operations that use cached data.
195
+
196
+ Example YAML usage:
197
+ info:
198
+ title: Stripe API
199
+ x-airbyte-cache:
200
+ entities:
201
+ - entity: customers
202
+ stream: customers
203
+ fields:
204
+ - name: email
205
+ type: ["null", "string"]
206
+ description: "Customer email address"
207
+ - name: customer_name
208
+ x-airbyte-name: name
209
+ type: ["null", "string"]
210
+ description: "Customer full name"
211
+ """
212
+
213
+ model_config = ConfigDict(populate_by_name=True, extra="forbid")
214
+
215
+ entities: list[CacheEntityConfig]
216
+
217
+ def get_entity_mapping(self, user_entity: str) -> CacheEntityConfig | None:
218
+ """
219
+ Get entity config by user-facing name.
220
+
221
+ Args:
222
+ user_entity: User-facing entity name to look up
223
+
224
+ Returns:
225
+ CacheEntityConfig if found, None otherwise
226
+ """
227
+ for entity in self.entities:
228
+ if entity.entity == user_entity:
229
+ return entity
230
+ return None
@@ -112,6 +112,7 @@ from .models import (
112
112
  _F = TypeVar("_F", bound=Callable[..., Any])
113
113
 
114
114
 
115
+
115
116
  class ZendeskSupportConnector:
116
117
  """
117
118
  Type-safe Zendesk-Support API connector.
@@ -120,7 +121,7 @@ class ZendeskSupportConnector:
120
121
  """
121
122
 
122
123
  connector_name = "zendesk-support"
123
- connector_version = "0.1.4"
124
+ connector_version = "0.1.5"
124
125
  vendored_sdk_version = "0.1.0" # Version of vendored connector-sdk
125
126
 
126
127
  # Map of (entity, action) -> needs_envelope for envelope wrapping decision
@@ -30,7 +30,7 @@ from uuid import (
30
30
  ZendeskSupportConnectorModel: ConnectorModel = ConnectorModel(
31
31
  id=UUID('79c1aa37-dae3-42ae-b333-d1c105477715'),
32
32
  name='zendesk-support',
33
- version='0.1.4',
33
+ version='0.1.5',
34
34
  base_url='https://{subdomain}.zendesk.com/api/v2',
35
35
  auth=AuthConfig(
36
36
  options=[
@@ -60,7 +60,7 @@ ZendeskSupportConnectorModel: ConnectorModel = ConnectorModel(
60
60
  ),
61
61
  },
62
62
  auth_mapping={'access_token': '${access_token}', 'refresh_token': '${refresh_token}'},
63
- replication_auth_key_mapping={'access_token': 'access_token'},
63
+ replication_auth_key_mapping={'credentials.access_token': 'access_token'},
64
64
  ),
65
65
  ),
66
66
  AuthOption(
@@ -84,7 +84,7 @@ ZendeskSupportConnectorModel: ConnectorModel = ConnectorModel(
84
84
  ),
85
85
  },
86
86
  auth_mapping={'username': '${email}/token', 'password': '${api_token}'},
87
- replication_auth_key_mapping={'email': 'email', 'api_token': 'api_token'},
87
+ replication_auth_key_mapping={'credentials.email': 'email', 'credentials.api_token': 'api_token'},
88
88
  ),
89
89
  ),
90
90
  ],
@@ -669,6 +669,7 @@ class ZendeskSupportExecuteResultWithMeta(ZendeskSupportExecuteResult[T], Generi
669
669
  """Metadata about the response (e.g., pagination cursors, record counts)."""
670
670
 
671
671
 
672
+
672
673
  # ===== OPERATION RESULT TYPE ALIASES =====
673
674
 
674
675
  # Concrete type aliases for each operation result.
@@ -214,3 +214,4 @@ class ArticleAttachmentsDownloadParams(TypedDict):
214
214
  article_id: str
215
215
  attachment_id: str
216
216
  range_header: NotRequired[str]
217
+
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: airbyte-agent-zendesk-support
3
- Version: 0.18.42
3
+ Version: 0.18.47
4
4
  Summary: Airbyte Zendesk-Support 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/
@@ -140,6 +140,6 @@ For the service's official API docs, see the [Zendesk-Support API reference](htt
140
140
 
141
141
  ## Version information
142
142
 
143
- - **Package version:** 0.18.42
144
- - **Connector version:** 0.1.4
145
- - **Generated with Connector SDK commit SHA:** 20b3afd9215174bb084af41e3174b78f114d86b5
143
+ - **Package version:** 0.18.47
144
+ - **Connector version:** 0.1.5
145
+ - **Generated with Connector SDK commit SHA:** ca5acdda8030d8292c059c82f498a95b2227c106
@@ -1,13 +1,13 @@
1
1
  airbyte_agent_zendesk_support/__init__.py,sha256=Xf_SLbAydieq_2ADq5k0QJ4TTseP5laq0F4A95_pEsQ,5899
2
- airbyte_agent_zendesk_support/connector.py,sha256=Ptrms0QrEAmNzo1KtHCALpNNf70agpBZxFMSRTagGYE,64801
3
- airbyte_agent_zendesk_support/connector_model.py,sha256=M1phs0lN_6nxKgEF4enlA2znIMIDOMPkQiHY6BYszeE,241309
4
- airbyte_agent_zendesk_support/models.py,sha256=1GLCb9q_AKuV8ky43wuDtnlyCobbTWwoBoSxVkUquyU,34791
5
- airbyte_agent_zendesk_support/types.py,sha256=vaWdcxDIJ8_nH7sv9PBsdWOKuTPVkskLur7fQF5Ln94,6320
2
+ airbyte_agent_zendesk_support/connector.py,sha256=sSPZK_scEn1oX7wgnEmcXUv4juKRrnvo1E-ubvi2xLI,64802
3
+ airbyte_agent_zendesk_support/connector_model.py,sha256=_GphemzgMit3Qw5yIcdlfgGuH2Z17ZigAS0ymnkW4zo,241345
4
+ airbyte_agent_zendesk_support/models.py,sha256=5Agm0g4Q7bB-vxllGXgEx75s-x6vkkJi8zSoknVTYwI,34792
5
+ airbyte_agent_zendesk_support/types.py,sha256=pl2Nj-yFSv6pH2j7Rfo2X6waXDFZB4Z0_DhyG_Go2cc,6321
6
6
  airbyte_agent_zendesk_support/_vendored/__init__.py,sha256=ILl7AHXMui__swyrjxrh9yRa4dLiwBvV6axPWFWty80,38
7
7
  airbyte_agent_zendesk_support/_vendored/connector_sdk/__init__.py,sha256=T5o7roU6NSpH-lCAGZ338sE5dlh4ZU6i6IkeG1zpems,1949
8
8
  airbyte_agent_zendesk_support/_vendored/connector_sdk/auth_strategies.py,sha256=BdjAzFRTwXCmLFqYWqZ4Dx9RsqtI7pAkw-8NynSK4sQ,39914
9
9
  airbyte_agent_zendesk_support/_vendored/connector_sdk/auth_template.py,sha256=nju4jqlFC_KI82ILNumNIyiUtRJcy7J94INIZ0QraI4,4454
10
- airbyte_agent_zendesk_support/_vendored/connector_sdk/connector_model_loader.py,sha256=Cx9wPhKwWfzkc8i63IevL0EsN3iWUl_OA-_jA9EKNcE,34877
10
+ airbyte_agent_zendesk_support/_vendored/connector_sdk/connector_model_loader.py,sha256=b88aoMynHxtG2dhzclkWrLiJbefTiKMzReyj3lOiwJI,34940
11
11
  airbyte_agent_zendesk_support/_vendored/connector_sdk/constants.py,sha256=AtzOvhDMWbRJgpsQNWl5tkogHD6mWgEY668PgRmgtOY,2737
12
12
  airbyte_agent_zendesk_support/_vendored/connector_sdk/exceptions.py,sha256=ss5MGv9eVPmsbLcLWetuu3sDmvturwfo6Pw3M37Oq5k,481
13
13
  airbyte_agent_zendesk_support/_vendored/connector_sdk/extensions.py,sha256=XWRRoJOOrwUHSKbuQt5DU7CCu8ePzhd_HuP7c_uD77w,21376
@@ -21,7 +21,7 @@ airbyte_agent_zendesk_support/_vendored/connector_sdk/cloud_utils/__init__.py,sh
21
21
  airbyte_agent_zendesk_support/_vendored/connector_sdk/cloud_utils/client.py,sha256=YxdRpQr9XjDzih6csSseBVGn9kfMtaqbOCXP0TPuzFY,7189
22
22
  airbyte_agent_zendesk_support/_vendored/connector_sdk/executor/__init__.py,sha256=EmG9YQNAjSuYCVB4D5VoLm4qpD1KfeiiOf7bpALj8p8,702
23
23
  airbyte_agent_zendesk_support/_vendored/connector_sdk/executor/hosted_executor.py,sha256=ydHcG-biRS1ITT5ELwPShdJW-KYpvK--Fos1ipNgHho,6995
24
- airbyte_agent_zendesk_support/_vendored/connector_sdk/executor/local_executor.py,sha256=CMuknflYNY6_f83xrxvqewfI52MLYdPin3Rvz6HS3wU,67610
24
+ airbyte_agent_zendesk_support/_vendored/connector_sdk/executor/local_executor.py,sha256=qbvarouUD61Dqg6v3hiWnK9scf3At3CvtZzcYcUcT0M,68024
25
25
  airbyte_agent_zendesk_support/_vendored/connector_sdk/executor/models.py,sha256=lYVT_bNcw-PoIks4WHNyl2VY-lJVf2FntzINSOBIheE,5845
26
26
  airbyte_agent_zendesk_support/_vendored/connector_sdk/http/__init__.py,sha256=y8fbzZn-3yV9OxtYz8Dy6FFGI5v6TOqADd1G3xHH3Hw,911
27
27
  airbyte_agent_zendesk_support/_vendored/connector_sdk/http/config.py,sha256=6J7YIIwHC6sRu9i-yKa5XvArwK2KU60rlnmxzDZq3lw,3283
@@ -42,16 +42,16 @@ airbyte_agent_zendesk_support/_vendored/connector_sdk/performance/__init__.py,sh
42
42
  airbyte_agent_zendesk_support/_vendored/connector_sdk/performance/instrumentation.py,sha256=_dXvNiqdndIBwDjeDKNViWzn_M5FkSUsMmJtFldrmsM,1504
43
43
  airbyte_agent_zendesk_support/_vendored/connector_sdk/performance/metrics.py,sha256=FRff7dKt4iwt_A7pxV5n9kAGBR756PC7q8-weWygPSM,2817
44
44
  airbyte_agent_zendesk_support/_vendored/connector_sdk/schema/__init__.py,sha256=Uymu-QuzGJuMxexBagIvUxpVAigIuIhz3KeBl_Vu4Ko,1638
45
- airbyte_agent_zendesk_support/_vendored/connector_sdk/schema/base.py,sha256=swe27f6sWuuGmG54VAW9K8P5USuhmncpIqAliFcB-OU,4741
45
+ airbyte_agent_zendesk_support/_vendored/connector_sdk/schema/base.py,sha256=4RYTkCWgyS5Z75z9TKj9vXySfO00HJ03QDtbdVYeHYM,5086
46
46
  airbyte_agent_zendesk_support/_vendored/connector_sdk/schema/components.py,sha256=x3YCM1p2n_xHi50fMeOX0mXUiPqjGlLHs3Go8jXokb0,7895
47
47
  airbyte_agent_zendesk_support/_vendored/connector_sdk/schema/connector.py,sha256=mSZk1wr2YSdRj9tTRsPAuIlCzd_xZLw-Bzl1sMwE0rE,3731
48
- airbyte_agent_zendesk_support/_vendored/connector_sdk/schema/extensions.py,sha256=0SKtv1WaW2sHaSZF-gi5dI3p0heGbegphjU2PAyIe-M,3277
48
+ airbyte_agent_zendesk_support/_vendored/connector_sdk/schema/extensions.py,sha256=f7VhHrcIYxaPOJHMc4g0lpy04pZTbx5nlroNzAu5B9Q,7135
49
49
  airbyte_agent_zendesk_support/_vendored/connector_sdk/schema/operations.py,sha256=RpzGtAI4yvAtMHAfMUMcUwgHv_qJojnKlNb75_agUF8,5729
50
50
  airbyte_agent_zendesk_support/_vendored/connector_sdk/schema/security.py,sha256=zQ9RRuF3LBgLQi_4cItmjXbG_5WKlmCNM3nCil30H90,8470
51
51
  airbyte_agent_zendesk_support/_vendored/connector_sdk/telemetry/__init__.py,sha256=RaLgkBU4dfxn1LC5Y0Q9rr2PJbrwjxvPgBLmq8_WafE,211
52
52
  airbyte_agent_zendesk_support/_vendored/connector_sdk/telemetry/config.py,sha256=tLmQwAFD0kP1WyBGWBS3ysaudN9H3e-3EopKZi6cGKg,885
53
53
  airbyte_agent_zendesk_support/_vendored/connector_sdk/telemetry/events.py,sha256=8Y1NbXiwISX-V_wRofY7PqcwEXD0dLMnntKkY6XFU2s,1328
54
54
  airbyte_agent_zendesk_support/_vendored/connector_sdk/telemetry/tracker.py,sha256=Ftrk0_ddfM7dZG8hF9xBuPwhbc9D6JZ7Q9qs5o3LEyA,5579
55
- airbyte_agent_zendesk_support-0.18.42.dist-info/METADATA,sha256=bGDUotYicC0e_GhCB7MUV3G2TFe_I1nXMkb7WWr5kWo,6246
56
- airbyte_agent_zendesk_support-0.18.42.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
57
- airbyte_agent_zendesk_support-0.18.42.dist-info/RECORD,,
55
+ airbyte_agent_zendesk_support-0.18.47.dist-info/METADATA,sha256=PuAEqU4E10UUc47O2-WpTS3P33I39R1eohTdhCobrMo,6246
56
+ airbyte_agent_zendesk_support-0.18.47.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
57
+ airbyte_agent_zendesk_support-0.18.47.dist-info/RECORD,,