airbyte-agent-zendesk-chat 0.1.1__py3-none-any.whl → 0.1.4__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_zendesk_chat/__init__.py +2 -2
- airbyte_agent_zendesk_chat/_vendored/connector_sdk/auth_strategies.py +57 -4
- airbyte_agent_zendesk_chat/_vendored/connector_sdk/connector_model_loader.py +29 -8
- airbyte_agent_zendesk_chat/_vendored/connector_sdk/executor/local_executor.py +50 -1
- airbyte_agent_zendesk_chat/_vendored/connector_sdk/schema/base.py +7 -2
- airbyte_agent_zendesk_chat/_vendored/connector_sdk/schema/security.py +14 -0
- airbyte_agent_zendesk_chat/_vendored/connector_sdk/types.py +9 -0
- airbyte_agent_zendesk_chat/connector.py +1 -1
- airbyte_agent_zendesk_chat/connector_model.py +1 -1
- airbyte_agent_zendesk_chat/models.py +17 -17
- {airbyte_agent_zendesk_chat-0.1.1.dist-info → airbyte_agent_zendesk_chat-0.1.4.dist-info}/METADATA +4 -4
- {airbyte_agent_zendesk_chat-0.1.1.dist-info → airbyte_agent_zendesk_chat-0.1.4.dist-info}/RECORD +13 -13
- {airbyte_agent_zendesk_chat-0.1.1.dist-info → airbyte_agent_zendesk_chat-0.1.4.dist-info}/WHEEL +0 -0
|
@@ -15,9 +15,9 @@ from .models import (
|
|
|
15
15
|
AgentTimeline,
|
|
16
16
|
Ban,
|
|
17
17
|
ChatHistoryItem,
|
|
18
|
+
ChatEngagement,
|
|
18
19
|
ChatConversion,
|
|
19
20
|
WebpathItem,
|
|
20
|
-
ChatEngagement,
|
|
21
21
|
Chat,
|
|
22
22
|
Visitor,
|
|
23
23
|
ChatSession,
|
|
@@ -110,9 +110,9 @@ __all__ = [
|
|
|
110
110
|
"AgentTimeline",
|
|
111
111
|
"Ban",
|
|
112
112
|
"ChatHistoryItem",
|
|
113
|
+
"ChatEngagement",
|
|
113
114
|
"ChatConversion",
|
|
114
115
|
"WebpathItem",
|
|
115
|
-
"ChatEngagement",
|
|
116
116
|
"Chat",
|
|
117
117
|
"Visitor",
|
|
118
118
|
"ChatSession",
|
|
@@ -152,6 +152,11 @@ class OAuth2AuthConfig(TypedDict, total=False):
|
|
|
152
152
|
Note: Any config key can be used as a template variable in refresh_url.
|
|
153
153
|
Common patterns: subdomain (Zendesk), shop (Shopify), region (AWS-style APIs).
|
|
154
154
|
|
|
155
|
+
additional_headers: Extra headers to inject alongside the OAuth2 Bearer token.
|
|
156
|
+
Useful for APIs that require both OAuth and an API key/client ID header.
|
|
157
|
+
Values support Jinja2 {{ variable }} template syntax to reference secrets.
|
|
158
|
+
Example: {"Amazon-Advertising-API-ClientId": "{{ client_id }}"}
|
|
159
|
+
|
|
155
160
|
Examples:
|
|
156
161
|
GitHub (simple):
|
|
157
162
|
{"header": "Authorization", "prefix": "Bearer"}
|
|
@@ -169,6 +174,14 @@ class OAuth2AuthConfig(TypedDict, total=False):
|
|
|
169
174
|
"auth_style": "basic",
|
|
170
175
|
"body_format": "json"
|
|
171
176
|
}
|
|
177
|
+
|
|
178
|
+
Amazon Ads (OAuth + additional client ID header):
|
|
179
|
+
{
|
|
180
|
+
"refresh_url": "https://api.amazon.com/auth/o2/token",
|
|
181
|
+
"additional_headers": {
|
|
182
|
+
"Amazon-Advertising-API-ClientId": "{{ client_id }}"
|
|
183
|
+
}
|
|
184
|
+
}
|
|
172
185
|
"""
|
|
173
186
|
|
|
174
187
|
header: str
|
|
@@ -177,6 +190,7 @@ class OAuth2AuthConfig(TypedDict, total=False):
|
|
|
177
190
|
auth_style: AuthStyle
|
|
178
191
|
body_format: BodyFormat
|
|
179
192
|
subdomain: str
|
|
193
|
+
additional_headers: dict[str, str]
|
|
180
194
|
|
|
181
195
|
|
|
182
196
|
class OAuth2AuthSecrets(TypedDict):
|
|
@@ -552,9 +566,10 @@ class OAuth2AuthStrategy(AuthStrategy):
|
|
|
552
566
|
config: OAuth2AuthConfig,
|
|
553
567
|
secrets: OAuth2AuthSecrets,
|
|
554
568
|
) -> dict[str, str]:
|
|
555
|
-
"""Inject OAuth2 access token
|
|
569
|
+
"""Inject OAuth2 access token and additional headers.
|
|
556
570
|
|
|
557
|
-
Creates a copy of the headers dict with the OAuth2 token added
|
|
571
|
+
Creates a copy of the headers dict with the OAuth2 token added,
|
|
572
|
+
plus any additional headers configured via additional_headers.
|
|
558
573
|
The original headers dict is not modified.
|
|
559
574
|
|
|
560
575
|
Args:
|
|
@@ -563,7 +578,7 @@ class OAuth2AuthStrategy(AuthStrategy):
|
|
|
563
578
|
secrets: OAuth2 credentials including access_token
|
|
564
579
|
|
|
565
580
|
Returns:
|
|
566
|
-
New headers dict with OAuth2 token
|
|
581
|
+
New headers dict with OAuth2 token and additional headers injected
|
|
567
582
|
|
|
568
583
|
Raises:
|
|
569
584
|
AuthenticationError: If access_token is missing
|
|
@@ -589,8 +604,46 @@ class OAuth2AuthStrategy(AuthStrategy):
|
|
|
589
604
|
# Extract secret value (handle both SecretStr and plain str)
|
|
590
605
|
token_value = extract_secret_value(access_token)
|
|
591
606
|
|
|
592
|
-
# Inject
|
|
607
|
+
# Inject OAuth2 Bearer token
|
|
593
608
|
headers[header_name] = f"{prefix} {token_value}"
|
|
609
|
+
|
|
610
|
+
# Inject additional headers if configured
|
|
611
|
+
additional_headers = config.get("additional_headers")
|
|
612
|
+
if additional_headers:
|
|
613
|
+
headers = self._inject_additional_headers(headers, additional_headers, secrets)
|
|
614
|
+
|
|
615
|
+
return headers
|
|
616
|
+
|
|
617
|
+
def _inject_additional_headers(
|
|
618
|
+
self,
|
|
619
|
+
headers: dict[str, str],
|
|
620
|
+
additional_headers: dict[str, str],
|
|
621
|
+
secrets: dict[str, Any],
|
|
622
|
+
) -> dict[str, str]:
|
|
623
|
+
"""Inject additional headers with Jinja2 template variable substitution.
|
|
624
|
+
|
|
625
|
+
Processes additional_headers config, substituting {{ variable }} patterns
|
|
626
|
+
with values from secrets using Jinja2 templating.
|
|
627
|
+
|
|
628
|
+
Args:
|
|
629
|
+
headers: Headers dict to add to (modified in place)
|
|
630
|
+
additional_headers: Header name -> value template mapping
|
|
631
|
+
secrets: Secrets dict for variable substitution
|
|
632
|
+
|
|
633
|
+
Returns:
|
|
634
|
+
Headers dict with additional headers added
|
|
635
|
+
"""
|
|
636
|
+
# Build template context with extracted secret values
|
|
637
|
+
template_context = {
|
|
638
|
+
key: extract_secret_value(value) for key, value in secrets.items()
|
|
639
|
+
}
|
|
640
|
+
|
|
641
|
+
for header_name, value_template in additional_headers.items():
|
|
642
|
+
# Use Jinja2 templating for variable substitution
|
|
643
|
+
template = Template(value_template)
|
|
644
|
+
header_value = template.render(**template_context)
|
|
645
|
+
headers[header_name] = header_value
|
|
646
|
+
|
|
594
647
|
return headers
|
|
595
648
|
|
|
596
649
|
def validate_credentials(self, secrets: OAuth2AuthSecrets) -> None: # type: ignore[override]
|
|
@@ -188,7 +188,7 @@ def parse_openapi_spec(raw_config: dict) -> OpenAPIConnector:
|
|
|
188
188
|
|
|
189
189
|
def _extract_request_body_config(
|
|
190
190
|
request_body: RequestBody | None, spec_dict: dict[str, Any]
|
|
191
|
-
) -> tuple[list[str], dict[str, Any] | None, dict[str, Any] | None]:
|
|
191
|
+
) -> tuple[list[str], dict[str, Any] | None, dict[str, Any] | None, dict[str, Any]]:
|
|
192
192
|
"""Extract request body configuration (GraphQL or standard).
|
|
193
193
|
|
|
194
194
|
Args:
|
|
@@ -196,17 +196,19 @@ def _extract_request_body_config(
|
|
|
196
196
|
spec_dict: Full OpenAPI spec dict for $ref resolution
|
|
197
197
|
|
|
198
198
|
Returns:
|
|
199
|
-
Tuple of (body_fields, request_schema, graphql_body)
|
|
199
|
+
Tuple of (body_fields, request_schema, graphql_body, request_body_defaults)
|
|
200
200
|
- body_fields: List of field names for standard JSON/form bodies
|
|
201
201
|
- request_schema: Resolved request schema dict (for standard bodies)
|
|
202
202
|
- graphql_body: GraphQL body configuration dict (for GraphQL bodies)
|
|
203
|
+
- request_body_defaults: Default values for request body fields
|
|
203
204
|
"""
|
|
204
205
|
body_fields: list[str] = []
|
|
205
206
|
request_schema: dict[str, Any] | None = None
|
|
206
207
|
graphql_body: dict[str, Any] | None = None
|
|
208
|
+
request_body_defaults: dict[str, Any] = {}
|
|
207
209
|
|
|
208
210
|
if not request_body:
|
|
209
|
-
return body_fields, request_schema, graphql_body
|
|
211
|
+
return body_fields, request_schema, graphql_body, request_body_defaults
|
|
210
212
|
|
|
211
213
|
# Check for GraphQL extension and extract GraphQL body configuration
|
|
212
214
|
if request_body.x_airbyte_body_type:
|
|
@@ -216,7 +218,7 @@ def _extract_request_body_config(
|
|
|
216
218
|
if isinstance(body_type_config, GraphQLBodyConfig):
|
|
217
219
|
# Convert Pydantic model to dict, excluding None values
|
|
218
220
|
graphql_body = body_type_config.model_dump(exclude_none=True, by_alias=False)
|
|
219
|
-
return body_fields, request_schema, graphql_body
|
|
221
|
+
return body_fields, request_schema, graphql_body, request_body_defaults
|
|
220
222
|
|
|
221
223
|
# Parse standard request body
|
|
222
224
|
for content_type_key, media_type in request_body.content.items():
|
|
@@ -226,11 +228,15 @@ def _extract_request_body_config(
|
|
|
226
228
|
# Resolve all $refs in the schema using jsonref
|
|
227
229
|
request_schema = resolve_schema_refs(schema, spec_dict)
|
|
228
230
|
|
|
229
|
-
# Extract body field names from resolved schema
|
|
231
|
+
# Extract body field names and defaults from resolved schema
|
|
230
232
|
if isinstance(request_schema, dict) and "properties" in request_schema:
|
|
231
233
|
body_fields = list(request_schema["properties"].keys())
|
|
234
|
+
# Extract default values for each property
|
|
235
|
+
for field_name, field_schema in request_schema["properties"].items():
|
|
236
|
+
if isinstance(field_schema, dict) and "default" in field_schema:
|
|
237
|
+
request_body_defaults[field_name] = field_schema["default"]
|
|
232
238
|
|
|
233
|
-
return body_fields, request_schema, graphql_body
|
|
239
|
+
return body_fields, request_schema, graphql_body, request_body_defaults
|
|
234
240
|
|
|
235
241
|
|
|
236
242
|
def convert_openapi_to_connector_model(spec: OpenAPIConnector) -> ConnectorModel:
|
|
@@ -315,6 +321,8 @@ def convert_openapi_to_connector_model(spec: OpenAPIConnector) -> ConnectorModel
|
|
|
315
321
|
query_params: list[str] = []
|
|
316
322
|
query_params_schema: dict[str, dict[str, Any]] = {}
|
|
317
323
|
deep_object_params: list[str] = []
|
|
324
|
+
header_params: list[str] = []
|
|
325
|
+
header_params_schema: dict[str, dict[str, Any]] = {}
|
|
318
326
|
|
|
319
327
|
if operation.parameters:
|
|
320
328
|
for param in operation.parameters:
|
|
@@ -336,9 +344,12 @@ def convert_openapi_to_connector_model(spec: OpenAPIConnector) -> ConnectorModel
|
|
|
336
344
|
# Check if this is a deepObject style parameter
|
|
337
345
|
if hasattr(param, "style") and param.style == "deepObject":
|
|
338
346
|
deep_object_params.append(param.name)
|
|
347
|
+
elif param.in_ == "header":
|
|
348
|
+
header_params.append(param.name)
|
|
349
|
+
header_params_schema[param.name] = schema_info
|
|
339
350
|
|
|
340
|
-
# Extract body fields from request schema
|
|
341
|
-
body_fields, request_schema, graphql_body = _extract_request_body_config(operation.request_body, spec_dict)
|
|
351
|
+
# Extract body fields and defaults from request schema
|
|
352
|
+
body_fields, request_schema, graphql_body, request_body_defaults = _extract_request_body_config(operation.request_body, spec_dict)
|
|
342
353
|
|
|
343
354
|
# Extract response schema
|
|
344
355
|
response_schema = None
|
|
@@ -372,6 +383,9 @@ def convert_openapi_to_connector_model(spec: OpenAPIConnector) -> ConnectorModel
|
|
|
372
383
|
deep_object_params=deep_object_params,
|
|
373
384
|
path_params=path_params,
|
|
374
385
|
path_params_schema=path_params_schema,
|
|
386
|
+
header_params=header_params,
|
|
387
|
+
header_params_schema=header_params_schema,
|
|
388
|
+
request_body_defaults=request_body_defaults,
|
|
375
389
|
content_type=content_type,
|
|
376
390
|
request_schema=request_schema,
|
|
377
391
|
response_schema=response_schema,
|
|
@@ -535,6 +549,13 @@ def _parse_oauth2_config(scheme: Any) -> dict[str, str]:
|
|
|
535
549
|
if x_token_extract:
|
|
536
550
|
config["token_extract"] = x_token_extract
|
|
537
551
|
|
|
552
|
+
# Extract additional_headers from x-airbyte-auth-config extension
|
|
553
|
+
x_auth_config = getattr(scheme, "x_airbyte_auth_config", None)
|
|
554
|
+
if x_auth_config:
|
|
555
|
+
additional_headers = getattr(x_auth_config, "additional_headers", None)
|
|
556
|
+
if additional_headers:
|
|
557
|
+
config["additional_headers"] = additional_headers
|
|
558
|
+
|
|
538
559
|
return config
|
|
539
560
|
|
|
540
561
|
|
|
@@ -64,6 +64,7 @@ class _OperationContext:
|
|
|
64
64
|
self.build_path = executor._build_path
|
|
65
65
|
self.extract_query_params = executor._extract_query_params
|
|
66
66
|
self.extract_body = executor._extract_body
|
|
67
|
+
self.extract_header_params = executor._extract_header_params
|
|
67
68
|
self.build_request_body = executor._build_request_body
|
|
68
69
|
self.determine_request_format = executor._determine_request_format
|
|
69
70
|
self.validate_required_body_fields = executor._validate_required_body_fields
|
|
@@ -693,6 +694,42 @@ class LocalExecutor:
|
|
|
693
694
|
"""
|
|
694
695
|
return {key: value for key, value in params.items() if key in allowed_fields and value is not None}
|
|
695
696
|
|
|
697
|
+
def _extract_header_params(
|
|
698
|
+
self, endpoint: EndpointDefinition, params: dict[str, Any], body: dict[str, Any] | None = None
|
|
699
|
+
) -> dict[str, str]:
|
|
700
|
+
"""Extract header parameters from params and schema defaults.
|
|
701
|
+
|
|
702
|
+
Also adds Content-Type header when there's a request body (unless already specified
|
|
703
|
+
as a header parameter in the OpenAPI spec).
|
|
704
|
+
|
|
705
|
+
Args:
|
|
706
|
+
endpoint: Endpoint definition with header_params and header_params_schema
|
|
707
|
+
params: All parameters
|
|
708
|
+
body: Request body (if any) - used to determine if Content-Type should be added
|
|
709
|
+
|
|
710
|
+
Returns:
|
|
711
|
+
Dictionary of header name -> value
|
|
712
|
+
"""
|
|
713
|
+
headers: dict[str, str] = {}
|
|
714
|
+
|
|
715
|
+
for header_name in endpoint.header_params:
|
|
716
|
+
# Check if value is provided in params
|
|
717
|
+
if header_name in params and params[header_name] is not None:
|
|
718
|
+
headers[header_name] = str(params[header_name])
|
|
719
|
+
# Otherwise, use default from schema if available
|
|
720
|
+
elif header_name in endpoint.header_params_schema:
|
|
721
|
+
default_value = endpoint.header_params_schema[header_name].get("default")
|
|
722
|
+
if default_value is not None:
|
|
723
|
+
headers[header_name] = str(default_value)
|
|
724
|
+
|
|
725
|
+
# Add Content-Type header when there's a request body, but only if not already
|
|
726
|
+
# specified as a header parameter (which allows custom content types like
|
|
727
|
+
# application/vnd.spCampaign.v3+json)
|
|
728
|
+
if body is not None and endpoint.content_type and "Content-Type" not in headers:
|
|
729
|
+
headers["Content-Type"] = endpoint.content_type.value
|
|
730
|
+
|
|
731
|
+
return headers
|
|
732
|
+
|
|
696
733
|
def _serialize_deep_object_params(self, params: dict[str, Any], deep_object_param_names: list[str]) -> dict[str, Any]:
|
|
697
734
|
"""Serialize deepObject parameters to bracket notation format.
|
|
698
735
|
|
|
@@ -848,7 +885,15 @@ class LocalExecutor:
|
|
|
848
885
|
param_defaults = {name: schema.get("default") for name, schema in endpoint.query_params_schema.items() if "default" in schema}
|
|
849
886
|
return self._build_graphql_body(endpoint.graphql_body, params, param_defaults)
|
|
850
887
|
elif endpoint.body_fields:
|
|
851
|
-
|
|
888
|
+
# Start with defaults from request body schema
|
|
889
|
+
body = dict(endpoint.request_body_defaults)
|
|
890
|
+
# Override with user-provided params (filtering out None values)
|
|
891
|
+
user_body = self._extract_body(endpoint.body_fields, params)
|
|
892
|
+
body.update(user_body)
|
|
893
|
+
return body if body else None
|
|
894
|
+
elif endpoint.request_body_defaults:
|
|
895
|
+
# If no body_fields but we have defaults, return the defaults
|
|
896
|
+
return dict(endpoint.request_body_defaults)
|
|
852
897
|
return None
|
|
853
898
|
|
|
854
899
|
def _flatten_form_data(self, data: dict[str, Any], parent_key: str = "") -> dict[str, Any]:
|
|
@@ -1484,6 +1529,9 @@ class _StandardOperationHandler:
|
|
|
1484
1529
|
# Determine request format (json/data parameters)
|
|
1485
1530
|
request_kwargs = self.ctx.determine_request_format(endpoint, body)
|
|
1486
1531
|
|
|
1532
|
+
# Extract header parameters from OpenAPI operation (pass body to add Content-Type)
|
|
1533
|
+
header_params = self.ctx.extract_header_params(endpoint, params, body)
|
|
1534
|
+
|
|
1487
1535
|
# Execute async HTTP request
|
|
1488
1536
|
response_data, response_headers = await self.ctx.http_client.request(
|
|
1489
1537
|
method=endpoint.method,
|
|
@@ -1491,6 +1539,7 @@ class _StandardOperationHandler:
|
|
|
1491
1539
|
params=query_params if query_params else None,
|
|
1492
1540
|
json=request_kwargs.get("json"),
|
|
1493
1541
|
data=request_kwargs.get("data"),
|
|
1542
|
+
headers=header_params if header_params else None,
|
|
1494
1543
|
)
|
|
1495
1544
|
|
|
1496
1545
|
# Extract metadata from original response (before record extraction)
|
|
@@ -7,7 +7,7 @@ References:
|
|
|
7
7
|
"""
|
|
8
8
|
|
|
9
9
|
from enum import StrEnum
|
|
10
|
-
from typing import Dict
|
|
10
|
+
from typing import Any, Dict
|
|
11
11
|
from uuid import UUID
|
|
12
12
|
|
|
13
13
|
from pydantic import BaseModel, ConfigDict, Field, field_validator
|
|
@@ -152,7 +152,12 @@ class Server(BaseModel):
|
|
|
152
152
|
url: str
|
|
153
153
|
description: str | None = None
|
|
154
154
|
variables: Dict[str, ServerVariable] = Field(default_factory=dict)
|
|
155
|
-
|
|
155
|
+
x_airbyte_replication_environment_mapping: Dict[str, str] | None = Field(default=None, alias="x-airbyte-replication-environment-mapping")
|
|
156
|
+
x_airbyte_replication_environment_constants: Dict[str, Any] | None = Field(
|
|
157
|
+
default=None,
|
|
158
|
+
alias="x-airbyte-replication-environment-constants",
|
|
159
|
+
description="Constant values to always inject at environment config paths (e.g., 'region': 'us-east-1')",
|
|
160
|
+
)
|
|
156
161
|
|
|
157
162
|
@field_validator("url")
|
|
158
163
|
@classmethod
|
|
@@ -109,6 +109,20 @@ class AirbyteAuthConfig(BaseModel):
|
|
|
109
109
|
description="Mapping from source config paths (e.g., 'credentials.api_key') to auth config keys for direct connectors",
|
|
110
110
|
)
|
|
111
111
|
|
|
112
|
+
# Additional headers to inject alongside OAuth2 Bearer token
|
|
113
|
+
additional_headers: Dict[str, str] | None = Field(
|
|
114
|
+
None,
|
|
115
|
+
description=(
|
|
116
|
+
"Extra headers to inject with auth. Values support Jinja2 {{ variable }} template syntax "
|
|
117
|
+
"to reference secrets. Example: {'Amazon-Advertising-API-ClientId': '{{ client_id }}'}"
|
|
118
|
+
),
|
|
119
|
+
)
|
|
120
|
+
|
|
121
|
+
# Replication connector auth constants
|
|
122
|
+
replication_auth_key_constants: Dict[str, Any] | None = Field(
|
|
123
|
+
None,
|
|
124
|
+
description="Constant values to always inject at source config paths (e.g., 'credentials.auth_type': 'OAuth2.0')",
|
|
125
|
+
)
|
|
112
126
|
# Multiple options (oneOf)
|
|
113
127
|
one_of: List[AuthConfigOption] | None = Field(None, alias="oneOf")
|
|
114
128
|
|
|
@@ -180,6 +180,15 @@ class EndpointDefinition(BaseModel):
|
|
|
180
180
|
default_factory=dict,
|
|
181
181
|
description="Schema for path params including defaults: {name: {type, default, required}}",
|
|
182
182
|
)
|
|
183
|
+
header_params: list[str] = Field(default_factory=list) # Header parameters from OpenAPI
|
|
184
|
+
header_params_schema: dict[str, dict[str, Any]] = Field(
|
|
185
|
+
default_factory=dict,
|
|
186
|
+
description="Schema for header params including defaults: {name: {type, default, required}}",
|
|
187
|
+
)
|
|
188
|
+
request_body_defaults: dict[str, Any] = Field(
|
|
189
|
+
default_factory=dict,
|
|
190
|
+
description="Default values for request body fields from OpenAPI schema",
|
|
191
|
+
)
|
|
183
192
|
content_type: ContentType = ContentType.JSON
|
|
184
193
|
request_schema: dict[str, Any] | None = None
|
|
185
194
|
response_schema: dict[str, Any] | None = None
|
|
@@ -101,7 +101,7 @@ class ZendeskChatConnector:
|
|
|
101
101
|
"""
|
|
102
102
|
|
|
103
103
|
connector_name = "zendesk-chat"
|
|
104
|
-
connector_version = "0.1.
|
|
104
|
+
connector_version = "0.1.3"
|
|
105
105
|
vendored_sdk_version = "0.1.0" # Version of vendored connector-sdk
|
|
106
106
|
|
|
107
107
|
# Map of (entity, action) -> needs_envelope for envelope wrapping decision
|
|
@@ -26,7 +26,7 @@ from uuid import (
|
|
|
26
26
|
ZendeskChatConnectorModel: ConnectorModel = ConnectorModel(
|
|
27
27
|
id=UUID('40d24d0f-b8f9-4fe0-9e6c-b06c0f3f45e4'),
|
|
28
28
|
name='zendesk-chat',
|
|
29
|
-
version='0.1.
|
|
29
|
+
version='0.1.3',
|
|
30
30
|
base_url='https://{subdomain}.zendesk.com/api/v2/chat',
|
|
31
31
|
auth=AuthConfig(
|
|
32
32
|
type=AuthType.BEARER,
|
|
@@ -151,23 +151,6 @@ class ChatHistoryItem(BaseModel):
|
|
|
151
151
|
new_tags: Union[list[str] | None, Any] = Field(default=None)
|
|
152
152
|
options: Union[str | None, Any] = Field(default=None)
|
|
153
153
|
|
|
154
|
-
class ChatConversion(BaseModel):
|
|
155
|
-
"""ChatConversion type definition"""
|
|
156
|
-
model_config = ConfigDict(extra="allow", populate_by_name=True)
|
|
157
|
-
|
|
158
|
-
id: Union[str | None, Any] = Field(default=None)
|
|
159
|
-
goal_id: Union[int | None, Any] = Field(default=None)
|
|
160
|
-
goal_name: Union[str | None, Any] = Field(default=None)
|
|
161
|
-
timestamp: Union[str | None, Any] = Field(default=None)
|
|
162
|
-
attribution: Union[Any, Any] = Field(default=None)
|
|
163
|
-
|
|
164
|
-
class WebpathItem(BaseModel):
|
|
165
|
-
"""WebpathItem type definition"""
|
|
166
|
-
model_config = ConfigDict(extra="allow", populate_by_name=True)
|
|
167
|
-
|
|
168
|
-
from_: Union[str | None, Any] = Field(default=None, alias="from")
|
|
169
|
-
timestamp: Union[str | None, Any] = Field(default=None)
|
|
170
|
-
|
|
171
154
|
class ChatEngagement(BaseModel):
|
|
172
155
|
"""ChatEngagement type definition"""
|
|
173
156
|
model_config = ConfigDict(extra="allow", populate_by_name=True)
|
|
@@ -189,6 +172,23 @@ class ChatEngagement(BaseModel):
|
|
|
189
172
|
skills_requested: Union[list[int] | None, Any] = Field(default=None)
|
|
190
173
|
skills_fulfilled: Union[bool | None, Any] = Field(default=None)
|
|
191
174
|
|
|
175
|
+
class ChatConversion(BaseModel):
|
|
176
|
+
"""ChatConversion type definition"""
|
|
177
|
+
model_config = ConfigDict(extra="allow", populate_by_name=True)
|
|
178
|
+
|
|
179
|
+
id: Union[str | None, Any] = Field(default=None)
|
|
180
|
+
goal_id: Union[int | None, Any] = Field(default=None)
|
|
181
|
+
goal_name: Union[str | None, Any] = Field(default=None)
|
|
182
|
+
timestamp: Union[str | None, Any] = Field(default=None)
|
|
183
|
+
attribution: Union[Any, Any] = Field(default=None)
|
|
184
|
+
|
|
185
|
+
class WebpathItem(BaseModel):
|
|
186
|
+
"""WebpathItem type definition"""
|
|
187
|
+
model_config = ConfigDict(extra="allow", populate_by_name=True)
|
|
188
|
+
|
|
189
|
+
from_: Union[str | None, Any] = Field(default=None, alias="from")
|
|
190
|
+
timestamp: Union[str | None, Any] = Field(default=None)
|
|
191
|
+
|
|
192
192
|
class Chat(BaseModel):
|
|
193
193
|
"""Chat conversation transcript"""
|
|
194
194
|
model_config = ConfigDict(extra="allow", populate_by_name=True)
|
{airbyte_agent_zendesk_chat-0.1.1.dist-info → airbyte_agent_zendesk_chat-0.1.4.dist-info}/METADATA
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: airbyte-agent-zendesk-chat
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.4
|
|
4
4
|
Summary: Airbyte Zendesk-Chat 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/
|
|
@@ -125,6 +125,6 @@ For the service's official API docs, see the [Zendesk-Chat API reference](https:
|
|
|
125
125
|
|
|
126
126
|
## Version information
|
|
127
127
|
|
|
128
|
-
- **Package version:** 0.1.
|
|
129
|
-
- **Connector version:** 0.1.
|
|
130
|
-
- **Generated with Connector SDK commit SHA:**
|
|
128
|
+
- **Package version:** 0.1.4
|
|
129
|
+
- **Connector version:** 0.1.3
|
|
130
|
+
- **Generated with Connector SDK commit SHA:** c713ec4833c2b52dc89926ec68caa343423884cd
|
{airbyte_agent_zendesk_chat-0.1.1.dist-info → airbyte_agent_zendesk_chat-0.1.4.dist-info}/RECORD
RENAMED
|
@@ -1,27 +1,27 @@
|
|
|
1
|
-
airbyte_agent_zendesk_chat/__init__.py,sha256=
|
|
2
|
-
airbyte_agent_zendesk_chat/connector.py,sha256=
|
|
3
|
-
airbyte_agent_zendesk_chat/connector_model.py,sha256=
|
|
4
|
-
airbyte_agent_zendesk_chat/models.py,sha256=
|
|
1
|
+
airbyte_agent_zendesk_chat/__init__.py,sha256=9j8dwvCgWylg210rlYlCcgmZoAUL8Fh_-FyMxXqYkzE,4292
|
|
2
|
+
airbyte_agent_zendesk_chat/connector.py,sha256=a_xt5L6rMOcW2DjUCNvsjCCSDrHPAfxhd7pLp_znsPo,43092
|
|
3
|
+
airbyte_agent_zendesk_chat/connector_model.py,sha256=Z0Q2nmk8jl3rJH5FWkUlDbuL00ACnxQWBGN7DaPdUM4,121081
|
|
4
|
+
airbyte_agent_zendesk_chat/models.py,sha256=Bt_x6PyWx6RzFX6NhkjfT0gSuaed-j1Gt75IDpPWs6A,23905
|
|
5
5
|
airbyte_agent_zendesk_chat/types.py,sha256=C5laH7V__abYm0F1Jck49Az6SCJQdnXLgtahxponDgM,28925
|
|
6
6
|
airbyte_agent_zendesk_chat/_vendored/__init__.py,sha256=ILl7AHXMui__swyrjxrh9yRa4dLiwBvV6axPWFWty80,38
|
|
7
7
|
airbyte_agent_zendesk_chat/_vendored/connector_sdk/__init__.py,sha256=T5o7roU6NSpH-lCAGZ338sE5dlh4ZU6i6IkeG1zpems,1949
|
|
8
|
-
airbyte_agent_zendesk_chat/_vendored/connector_sdk/auth_strategies.py,sha256=
|
|
8
|
+
airbyte_agent_zendesk_chat/_vendored/connector_sdk/auth_strategies.py,sha256=Ve7ObJc_A0N99b8ouuicQzVauDunOvFNG1SRKDfV4ag,42110
|
|
9
9
|
airbyte_agent_zendesk_chat/_vendored/connector_sdk/auth_template.py,sha256=nju4jqlFC_KI82ILNumNIyiUtRJcy7J94INIZ0QraI4,4454
|
|
10
|
-
airbyte_agent_zendesk_chat/_vendored/connector_sdk/connector_model_loader.py,sha256=
|
|
10
|
+
airbyte_agent_zendesk_chat/_vendored/connector_sdk/connector_model_loader.py,sha256=SY_Juqw-cap156MsdgrMfe5MAuFdX0vUcSbH5LUYNK0,36295
|
|
11
11
|
airbyte_agent_zendesk_chat/_vendored/connector_sdk/constants.py,sha256=AtzOvhDMWbRJgpsQNWl5tkogHD6mWgEY668PgRmgtOY,2737
|
|
12
12
|
airbyte_agent_zendesk_chat/_vendored/connector_sdk/exceptions.py,sha256=ss5MGv9eVPmsbLcLWetuu3sDmvturwfo6Pw3M37Oq5k,481
|
|
13
13
|
airbyte_agent_zendesk_chat/_vendored/connector_sdk/extensions.py,sha256=XWRRoJOOrwUHSKbuQt5DU7CCu8ePzhd_HuP7c_uD77w,21376
|
|
14
14
|
airbyte_agent_zendesk_chat/_vendored/connector_sdk/http_client.py,sha256=yucwu3OvJh5wLQa1mk-gTKjtqjKKucMw5ltmlE7mk1c,28000
|
|
15
15
|
airbyte_agent_zendesk_chat/_vendored/connector_sdk/introspection.py,sha256=2CyKXZHT74-1Id97uw1RLeyOi6TV24_hoNbQ6-6y7uI,10335
|
|
16
16
|
airbyte_agent_zendesk_chat/_vendored/connector_sdk/secrets.py,sha256=J9ezMu4xNnLW11xY5RCre6DHP7YMKZCqwGJfk7ufHAM,6855
|
|
17
|
-
airbyte_agent_zendesk_chat/_vendored/connector_sdk/types.py,sha256=
|
|
17
|
+
airbyte_agent_zendesk_chat/_vendored/connector_sdk/types.py,sha256=d8PidSD5nzhSSgFwUeYtRKw8pTm0Gft_IHsGeELifuk,8748
|
|
18
18
|
airbyte_agent_zendesk_chat/_vendored/connector_sdk/utils.py,sha256=G4LUXOC2HzPoND2v4tQW68R9uuPX9NQyCjaGxb7Kpl0,1958
|
|
19
19
|
airbyte_agent_zendesk_chat/_vendored/connector_sdk/validation.py,sha256=4MPrxYmQh8TbCU0KdvvRKe35Lg1YYLEBd0u4aKySl_E,32122
|
|
20
20
|
airbyte_agent_zendesk_chat/_vendored/connector_sdk/cloud_utils/__init__.py,sha256=4799Hv9f2zxDVj1aLyQ8JpTEuFTp_oOZMRz-NZCdBJg,134
|
|
21
21
|
airbyte_agent_zendesk_chat/_vendored/connector_sdk/cloud_utils/client.py,sha256=YxdRpQr9XjDzih6csSseBVGn9kfMtaqbOCXP0TPuzFY,7189
|
|
22
22
|
airbyte_agent_zendesk_chat/_vendored/connector_sdk/executor/__init__.py,sha256=EmG9YQNAjSuYCVB4D5VoLm4qpD1KfeiiOf7bpALj8p8,702
|
|
23
23
|
airbyte_agent_zendesk_chat/_vendored/connector_sdk/executor/hosted_executor.py,sha256=ydHcG-biRS1ITT5ELwPShdJW-KYpvK--Fos1ipNgHho,6995
|
|
24
|
-
airbyte_agent_zendesk_chat/_vendored/connector_sdk/executor/local_executor.py,sha256=
|
|
24
|
+
airbyte_agent_zendesk_chat/_vendored/connector_sdk/executor/local_executor.py,sha256=AgBQBlYIra7kyWcZtRRWSJLqrPbuDq38j13hoVoWJJA,73863
|
|
25
25
|
airbyte_agent_zendesk_chat/_vendored/connector_sdk/executor/models.py,sha256=lYVT_bNcw-PoIks4WHNyl2VY-lJVf2FntzINSOBIheE,5845
|
|
26
26
|
airbyte_agent_zendesk_chat/_vendored/connector_sdk/http/__init__.py,sha256=y8fbzZn-3yV9OxtYz8Dy6FFGI5v6TOqADd1G3xHH3Hw,911
|
|
27
27
|
airbyte_agent_zendesk_chat/_vendored/connector_sdk/http/config.py,sha256=6J7YIIwHC6sRu9i-yKa5XvArwK2KU60rlnmxzDZq3lw,3283
|
|
@@ -42,16 +42,16 @@ airbyte_agent_zendesk_chat/_vendored/connector_sdk/performance/__init__.py,sha25
|
|
|
42
42
|
airbyte_agent_zendesk_chat/_vendored/connector_sdk/performance/instrumentation.py,sha256=_dXvNiqdndIBwDjeDKNViWzn_M5FkSUsMmJtFldrmsM,1504
|
|
43
43
|
airbyte_agent_zendesk_chat/_vendored/connector_sdk/performance/metrics.py,sha256=FRff7dKt4iwt_A7pxV5n9kAGBR756PC7q8-weWygPSM,2817
|
|
44
44
|
airbyte_agent_zendesk_chat/_vendored/connector_sdk/schema/__init__.py,sha256=Uymu-QuzGJuMxexBagIvUxpVAigIuIhz3KeBl_Vu4Ko,1638
|
|
45
|
-
airbyte_agent_zendesk_chat/_vendored/connector_sdk/schema/base.py,sha256=
|
|
45
|
+
airbyte_agent_zendesk_chat/_vendored/connector_sdk/schema/base.py,sha256=zBW5svQohGCdn46Snc8DG4PsqfmZDovp693vRgugDFE,5374
|
|
46
46
|
airbyte_agent_zendesk_chat/_vendored/connector_sdk/schema/components.py,sha256=x3YCM1p2n_xHi50fMeOX0mXUiPqjGlLHs3Go8jXokb0,7895
|
|
47
47
|
airbyte_agent_zendesk_chat/_vendored/connector_sdk/schema/connector.py,sha256=mSZk1wr2YSdRj9tTRsPAuIlCzd_xZLw-Bzl1sMwE0rE,3731
|
|
48
48
|
airbyte_agent_zendesk_chat/_vendored/connector_sdk/schema/extensions.py,sha256=f7VhHrcIYxaPOJHMc4g0lpy04pZTbx5nlroNzAu5B9Q,7135
|
|
49
49
|
airbyte_agent_zendesk_chat/_vendored/connector_sdk/schema/operations.py,sha256=RpzGtAI4yvAtMHAfMUMcUwgHv_qJojnKlNb75_agUF8,5729
|
|
50
|
-
airbyte_agent_zendesk_chat/_vendored/connector_sdk/schema/security.py,sha256=
|
|
50
|
+
airbyte_agent_zendesk_chat/_vendored/connector_sdk/schema/security.py,sha256=6ljzf_JHs4amnQX9AhePcEsT8P3ZnTSC4xeg7-cvsNQ,9100
|
|
51
51
|
airbyte_agent_zendesk_chat/_vendored/connector_sdk/telemetry/__init__.py,sha256=RaLgkBU4dfxn1LC5Y0Q9rr2PJbrwjxvPgBLmq8_WafE,211
|
|
52
52
|
airbyte_agent_zendesk_chat/_vendored/connector_sdk/telemetry/config.py,sha256=tLmQwAFD0kP1WyBGWBS3ysaudN9H3e-3EopKZi6cGKg,885
|
|
53
53
|
airbyte_agent_zendesk_chat/_vendored/connector_sdk/telemetry/events.py,sha256=8Y1NbXiwISX-V_wRofY7PqcwEXD0dLMnntKkY6XFU2s,1328
|
|
54
54
|
airbyte_agent_zendesk_chat/_vendored/connector_sdk/telemetry/tracker.py,sha256=Ftrk0_ddfM7dZG8hF9xBuPwhbc9D6JZ7Q9qs5o3LEyA,5579
|
|
55
|
-
airbyte_agent_zendesk_chat-0.1.
|
|
56
|
-
airbyte_agent_zendesk_chat-0.1.
|
|
57
|
-
airbyte_agent_zendesk_chat-0.1.
|
|
55
|
+
airbyte_agent_zendesk_chat-0.1.4.dist-info/METADATA,sha256=lmfeZpEmZXYO427bwkkHhayQJNEuomqF6p74O10WJ-E,4942
|
|
56
|
+
airbyte_agent_zendesk_chat-0.1.4.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
57
|
+
airbyte_agent_zendesk_chat-0.1.4.dist-info/RECORD,,
|
{airbyte_agent_zendesk_chat-0.1.1.dist-info → airbyte_agent_zendesk_chat-0.1.4.dist-info}/WHEEL
RENAMED
|
File without changes
|