airbyte-agent-zendesk-support 0.18.59__tar.gz → 0.18.62__tar.gz
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_support-0.18.59 → airbyte_agent_zendesk_support-0.18.62}/AUTH.md +1 -1
- {airbyte_agent_zendesk_support-0.18.59 → airbyte_agent_zendesk_support-0.18.62}/CHANGELOG.md +15 -0
- {airbyte_agent_zendesk_support-0.18.59 → airbyte_agent_zendesk_support-0.18.62}/PKG-INFO +7 -6
- {airbyte_agent_zendesk_support-0.18.59 → airbyte_agent_zendesk_support-0.18.62}/README.md +6 -5
- {airbyte_agent_zendesk_support-0.18.59 → airbyte_agent_zendesk_support-0.18.62}/REFERENCE.md +15 -14
- {airbyte_agent_zendesk_support-0.18.59 → airbyte_agent_zendesk_support-0.18.62}/airbyte_agent_zendesk_support/_vendored/connector_sdk/connector_model_loader.py +138 -0
- {airbyte_agent_zendesk_support-0.18.59 → airbyte_agent_zendesk_support-0.18.62}/airbyte_agent_zendesk_support/_vendored/connector_sdk/executor/local_executor.py +3 -1
- {airbyte_agent_zendesk_support-0.18.59 → airbyte_agent_zendesk_support-0.18.62}/airbyte_agent_zendesk_support/_vendored/connector_sdk/introspection.py +222 -10
- {airbyte_agent_zendesk_support-0.18.59 → airbyte_agent_zendesk_support-0.18.62}/airbyte_agent_zendesk_support/_vendored/connector_sdk/schema/base.py +3 -1
- {airbyte_agent_zendesk_support-0.18.59 → airbyte_agent_zendesk_support-0.18.62}/airbyte_agent_zendesk_support/_vendored/connector_sdk/schema/components.py +5 -0
- {airbyte_agent_zendesk_support-0.18.59 → airbyte_agent_zendesk_support-0.18.62}/airbyte_agent_zendesk_support/_vendored/connector_sdk/schema/extensions.py +71 -0
- {airbyte_agent_zendesk_support-0.18.59 → airbyte_agent_zendesk_support-0.18.62}/airbyte_agent_zendesk_support/_vendored/connector_sdk/types.py +1 -0
- {airbyte_agent_zendesk_support-0.18.59 → airbyte_agent_zendesk_support-0.18.62}/airbyte_agent_zendesk_support/connector.py +101 -39
- {airbyte_agent_zendesk_support-0.18.59 → airbyte_agent_zendesk_support-0.18.62}/airbyte_agent_zendesk_support/connector_model.py +287 -1
- {airbyte_agent_zendesk_support-0.18.59 → airbyte_agent_zendesk_support-0.18.62}/airbyte_agent_zendesk_support/models.py +7 -7
- {airbyte_agent_zendesk_support-0.18.59 → airbyte_agent_zendesk_support-0.18.62}/airbyte_agent_zendesk_support/types.py +35 -35
- {airbyte_agent_zendesk_support-0.18.59 → airbyte_agent_zendesk_support-0.18.62}/pyproject.toml +1 -1
- {airbyte_agent_zendesk_support-0.18.59 → airbyte_agent_zendesk_support-0.18.62}/.gitignore +0 -0
- {airbyte_agent_zendesk_support-0.18.59 → airbyte_agent_zendesk_support-0.18.62}/airbyte_agent_zendesk_support/__init__.py +0 -0
- {airbyte_agent_zendesk_support-0.18.59 → airbyte_agent_zendesk_support-0.18.62}/airbyte_agent_zendesk_support/_vendored/__init__.py +0 -0
- {airbyte_agent_zendesk_support-0.18.59 → airbyte_agent_zendesk_support-0.18.62}/airbyte_agent_zendesk_support/_vendored/connector_sdk/__init__.py +0 -0
- {airbyte_agent_zendesk_support-0.18.59 → airbyte_agent_zendesk_support-0.18.62}/airbyte_agent_zendesk_support/_vendored/connector_sdk/auth_strategies.py +0 -0
- {airbyte_agent_zendesk_support-0.18.59 → airbyte_agent_zendesk_support-0.18.62}/airbyte_agent_zendesk_support/_vendored/connector_sdk/auth_template.py +0 -0
- {airbyte_agent_zendesk_support-0.18.59 → airbyte_agent_zendesk_support-0.18.62}/airbyte_agent_zendesk_support/_vendored/connector_sdk/cloud_utils/__init__.py +0 -0
- {airbyte_agent_zendesk_support-0.18.59 → airbyte_agent_zendesk_support-0.18.62}/airbyte_agent_zendesk_support/_vendored/connector_sdk/cloud_utils/client.py +0 -0
- {airbyte_agent_zendesk_support-0.18.59 → airbyte_agent_zendesk_support-0.18.62}/airbyte_agent_zendesk_support/_vendored/connector_sdk/constants.py +0 -0
- {airbyte_agent_zendesk_support-0.18.59 → airbyte_agent_zendesk_support-0.18.62}/airbyte_agent_zendesk_support/_vendored/connector_sdk/exceptions.py +0 -0
- {airbyte_agent_zendesk_support-0.18.59 → airbyte_agent_zendesk_support-0.18.62}/airbyte_agent_zendesk_support/_vendored/connector_sdk/executor/__init__.py +0 -0
- {airbyte_agent_zendesk_support-0.18.59 → airbyte_agent_zendesk_support-0.18.62}/airbyte_agent_zendesk_support/_vendored/connector_sdk/executor/hosted_executor.py +0 -0
- {airbyte_agent_zendesk_support-0.18.59 → airbyte_agent_zendesk_support-0.18.62}/airbyte_agent_zendesk_support/_vendored/connector_sdk/executor/models.py +0 -0
- {airbyte_agent_zendesk_support-0.18.59 → airbyte_agent_zendesk_support-0.18.62}/airbyte_agent_zendesk_support/_vendored/connector_sdk/extensions.py +0 -0
- {airbyte_agent_zendesk_support-0.18.59 → airbyte_agent_zendesk_support-0.18.62}/airbyte_agent_zendesk_support/_vendored/connector_sdk/http/__init__.py +0 -0
- {airbyte_agent_zendesk_support-0.18.59 → airbyte_agent_zendesk_support-0.18.62}/airbyte_agent_zendesk_support/_vendored/connector_sdk/http/adapters/__init__.py +0 -0
- {airbyte_agent_zendesk_support-0.18.59 → airbyte_agent_zendesk_support-0.18.62}/airbyte_agent_zendesk_support/_vendored/connector_sdk/http/adapters/httpx_adapter.py +0 -0
- {airbyte_agent_zendesk_support-0.18.59 → airbyte_agent_zendesk_support-0.18.62}/airbyte_agent_zendesk_support/_vendored/connector_sdk/http/config.py +0 -0
- {airbyte_agent_zendesk_support-0.18.59 → airbyte_agent_zendesk_support-0.18.62}/airbyte_agent_zendesk_support/_vendored/connector_sdk/http/exceptions.py +0 -0
- {airbyte_agent_zendesk_support-0.18.59 → airbyte_agent_zendesk_support-0.18.62}/airbyte_agent_zendesk_support/_vendored/connector_sdk/http/protocols.py +0 -0
- {airbyte_agent_zendesk_support-0.18.59 → airbyte_agent_zendesk_support-0.18.62}/airbyte_agent_zendesk_support/_vendored/connector_sdk/http/response.py +0 -0
- {airbyte_agent_zendesk_support-0.18.59 → airbyte_agent_zendesk_support-0.18.62}/airbyte_agent_zendesk_support/_vendored/connector_sdk/http_client.py +0 -0
- {airbyte_agent_zendesk_support-0.18.59 → airbyte_agent_zendesk_support-0.18.62}/airbyte_agent_zendesk_support/_vendored/connector_sdk/logging/__init__.py +0 -0
- {airbyte_agent_zendesk_support-0.18.59 → airbyte_agent_zendesk_support-0.18.62}/airbyte_agent_zendesk_support/_vendored/connector_sdk/logging/logger.py +0 -0
- {airbyte_agent_zendesk_support-0.18.59 → airbyte_agent_zendesk_support-0.18.62}/airbyte_agent_zendesk_support/_vendored/connector_sdk/logging/types.py +0 -0
- {airbyte_agent_zendesk_support-0.18.59 → airbyte_agent_zendesk_support-0.18.62}/airbyte_agent_zendesk_support/_vendored/connector_sdk/observability/__init__.py +0 -0
- {airbyte_agent_zendesk_support-0.18.59 → airbyte_agent_zendesk_support-0.18.62}/airbyte_agent_zendesk_support/_vendored/connector_sdk/observability/config.py +0 -0
- {airbyte_agent_zendesk_support-0.18.59 → airbyte_agent_zendesk_support-0.18.62}/airbyte_agent_zendesk_support/_vendored/connector_sdk/observability/models.py +0 -0
- {airbyte_agent_zendesk_support-0.18.59 → airbyte_agent_zendesk_support-0.18.62}/airbyte_agent_zendesk_support/_vendored/connector_sdk/observability/redactor.py +0 -0
- {airbyte_agent_zendesk_support-0.18.59 → airbyte_agent_zendesk_support-0.18.62}/airbyte_agent_zendesk_support/_vendored/connector_sdk/observability/session.py +0 -0
- {airbyte_agent_zendesk_support-0.18.59 → airbyte_agent_zendesk_support-0.18.62}/airbyte_agent_zendesk_support/_vendored/connector_sdk/performance/__init__.py +0 -0
- {airbyte_agent_zendesk_support-0.18.59 → airbyte_agent_zendesk_support-0.18.62}/airbyte_agent_zendesk_support/_vendored/connector_sdk/performance/instrumentation.py +0 -0
- {airbyte_agent_zendesk_support-0.18.59 → airbyte_agent_zendesk_support-0.18.62}/airbyte_agent_zendesk_support/_vendored/connector_sdk/performance/metrics.py +0 -0
- {airbyte_agent_zendesk_support-0.18.59 → airbyte_agent_zendesk_support-0.18.62}/airbyte_agent_zendesk_support/_vendored/connector_sdk/schema/__init__.py +0 -0
- {airbyte_agent_zendesk_support-0.18.59 → airbyte_agent_zendesk_support-0.18.62}/airbyte_agent_zendesk_support/_vendored/connector_sdk/schema/connector.py +0 -0
- {airbyte_agent_zendesk_support-0.18.59 → airbyte_agent_zendesk_support-0.18.62}/airbyte_agent_zendesk_support/_vendored/connector_sdk/schema/operations.py +0 -0
- {airbyte_agent_zendesk_support-0.18.59 → airbyte_agent_zendesk_support-0.18.62}/airbyte_agent_zendesk_support/_vendored/connector_sdk/schema/security.py +0 -0
- {airbyte_agent_zendesk_support-0.18.59 → airbyte_agent_zendesk_support-0.18.62}/airbyte_agent_zendesk_support/_vendored/connector_sdk/secrets.py +0 -0
- {airbyte_agent_zendesk_support-0.18.59 → airbyte_agent_zendesk_support-0.18.62}/airbyte_agent_zendesk_support/_vendored/connector_sdk/telemetry/__init__.py +0 -0
- {airbyte_agent_zendesk_support-0.18.59 → airbyte_agent_zendesk_support-0.18.62}/airbyte_agent_zendesk_support/_vendored/connector_sdk/telemetry/config.py +0 -0
- {airbyte_agent_zendesk_support-0.18.59 → airbyte_agent_zendesk_support-0.18.62}/airbyte_agent_zendesk_support/_vendored/connector_sdk/telemetry/events.py +0 -0
- {airbyte_agent_zendesk_support-0.18.59 → airbyte_agent_zendesk_support-0.18.62}/airbyte_agent_zendesk_support/_vendored/connector_sdk/telemetry/tracker.py +0 -0
- {airbyte_agent_zendesk_support-0.18.59 → airbyte_agent_zendesk_support-0.18.62}/airbyte_agent_zendesk_support/_vendored/connector_sdk/utils.py +0 -0
- {airbyte_agent_zendesk_support-0.18.59 → airbyte_agent_zendesk_support-0.18.62}/airbyte_agent_zendesk_support/_vendored/connector_sdk/validation.py +0 -0
|
@@ -103,7 +103,7 @@ connector = ZendeskSupportConnector(
|
|
|
103
103
|
)
|
|
104
104
|
|
|
105
105
|
@agent.tool_plain # assumes you're using Pydantic AI
|
|
106
|
-
@ZendeskSupportConnector.
|
|
106
|
+
@ZendeskSupportConnector.tool_utils
|
|
107
107
|
async def zendesk-support_execute(entity: str, action: str, params: dict | None = None):
|
|
108
108
|
return await connector.execute(entity, action, params or {})
|
|
109
109
|
```
|
{airbyte_agent_zendesk_support-0.18.59 → airbyte_agent_zendesk_support-0.18.62}/CHANGELOG.md
RENAMED
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
# Zendesk Support changelog
|
|
2
2
|
|
|
3
|
+
## [0.18.62] - 2026-01-26
|
|
4
|
+
- Updated connector definition (YAML version 0.1.8)
|
|
5
|
+
- Source commit: b73c71e0
|
|
6
|
+
- SDK version: 0.1.0
|
|
7
|
+
|
|
8
|
+
## [0.18.61] - 2026-01-24
|
|
9
|
+
- Updated connector definition (YAML version 0.1.8)
|
|
10
|
+
- Source commit: 609c1d86
|
|
11
|
+
- SDK version: 0.1.0
|
|
12
|
+
|
|
13
|
+
## [0.18.60] - 2026-01-23
|
|
14
|
+
- Updated connector definition (YAML version 0.1.8)
|
|
15
|
+
- Source commit: 592446b8
|
|
16
|
+
- SDK version: 0.1.0
|
|
17
|
+
|
|
3
18
|
## [0.18.59] - 2026-01-23
|
|
4
19
|
- Updated connector definition (YAML version 0.1.7)
|
|
5
20
|
- Source commit: 416466da
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: airbyte-agent-zendesk-support
|
|
3
|
-
Version: 0.18.
|
|
3
|
+
Version: 0.18.62
|
|
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/
|
|
@@ -89,7 +89,7 @@ connector = ZendeskSupportConnector(
|
|
|
89
89
|
)
|
|
90
90
|
|
|
91
91
|
@agent.tool_plain # assumes you're using Pydantic AI
|
|
92
|
-
@ZendeskSupportConnector.
|
|
92
|
+
@ZendeskSupportConnector.tool_utils
|
|
93
93
|
async def zendesk-support_execute(entity: str, action: str, params: dict | None = None):
|
|
94
94
|
return await connector.execute(entity, action, params or {})
|
|
95
95
|
```
|
|
@@ -110,11 +110,12 @@ connector = ZendeskSupportConnector(
|
|
|
110
110
|
)
|
|
111
111
|
|
|
112
112
|
@agent.tool_plain # assumes you're using Pydantic AI
|
|
113
|
-
@ZendeskSupportConnector.
|
|
113
|
+
@ZendeskSupportConnector.tool_utils
|
|
114
114
|
async def zendesk-support_execute(entity: str, action: str, params: dict | None = None):
|
|
115
115
|
return await connector.execute(entity, action, params or {})
|
|
116
116
|
```
|
|
117
117
|
|
|
118
|
+
|
|
118
119
|
## Full documentation
|
|
119
120
|
|
|
120
121
|
This connector supports the following entities and actions.
|
|
@@ -153,6 +154,6 @@ For the service's official API docs, see the [Zendesk-Support API reference](htt
|
|
|
153
154
|
|
|
154
155
|
## Version information
|
|
155
156
|
|
|
156
|
-
- **Package version:** 0.18.
|
|
157
|
-
- **Connector version:** 0.1.
|
|
158
|
-
- **Generated with Connector SDK commit SHA:**
|
|
157
|
+
- **Package version:** 0.18.62
|
|
158
|
+
- **Connector version:** 0.1.8
|
|
159
|
+
- **Generated with Connector SDK commit SHA:** b73c71e077aea8d316f7161dbd5014d4fb9f3098
|
|
@@ -56,7 +56,7 @@ connector = ZendeskSupportConnector(
|
|
|
56
56
|
)
|
|
57
57
|
|
|
58
58
|
@agent.tool_plain # assumes you're using Pydantic AI
|
|
59
|
-
@ZendeskSupportConnector.
|
|
59
|
+
@ZendeskSupportConnector.tool_utils
|
|
60
60
|
async def zendesk-support_execute(entity: str, action: str, params: dict | None = None):
|
|
61
61
|
return await connector.execute(entity, action, params or {})
|
|
62
62
|
```
|
|
@@ -77,11 +77,12 @@ connector = ZendeskSupportConnector(
|
|
|
77
77
|
)
|
|
78
78
|
|
|
79
79
|
@agent.tool_plain # assumes you're using Pydantic AI
|
|
80
|
-
@ZendeskSupportConnector.
|
|
80
|
+
@ZendeskSupportConnector.tool_utils
|
|
81
81
|
async def zendesk-support_execute(entity: str, action: str, params: dict | None = None):
|
|
82
82
|
return await connector.execute(entity, action, params or {})
|
|
83
83
|
```
|
|
84
84
|
|
|
85
|
+
|
|
85
86
|
## Full documentation
|
|
86
87
|
|
|
87
88
|
This connector supports the following entities and actions.
|
|
@@ -120,6 +121,6 @@ For the service's official API docs, see the [Zendesk-Support API reference](htt
|
|
|
120
121
|
|
|
121
122
|
## Version information
|
|
122
123
|
|
|
123
|
-
- **Package version:** 0.18.
|
|
124
|
-
- **Connector version:** 0.1.
|
|
125
|
-
- **Generated with Connector SDK commit SHA:**
|
|
124
|
+
- **Package version:** 0.18.62
|
|
125
|
+
- **Connector version:** 0.1.8
|
|
126
|
+
- **Generated with Connector SDK commit SHA:** b73c71e077aea8d316f7161dbd5014d4fb9f3098
|
{airbyte_agent_zendesk_support-0.18.59 → airbyte_agent_zendesk_support-0.18.62}/REFERENCE.md
RENAMED
|
@@ -258,7 +258,7 @@ curl --location 'https://api.airbyte.ai/api/v1/connectors/sources/{your_source_i
|
|
|
258
258
|
| `created_at` | `string` | Timestamp indicating when the ticket was created |
|
|
259
259
|
| `custom_fields` | `array` | Array of custom field values specific to the account's ticket configuration |
|
|
260
260
|
| `custom_status_id` | `integer` | Unique identifier of the custom status applied to the ticket |
|
|
261
|
-
| `deleted_ticket_form_id` | `integer` |
|
|
261
|
+
| `deleted_ticket_form_id` | `integer` | The ID of the ticket form that was previously associated with this ticket but has since been deleted |
|
|
262
262
|
| `description` | `string` | Initial description or content of the ticket when it was created |
|
|
263
263
|
| `due_at` | `string` | Timestamp indicating when the ticket is due for completion or resolution |
|
|
264
264
|
| `email_cc_ids` | `array` | Array of user identifiers who are CC'd on ticket email notifications |
|
|
@@ -268,7 +268,7 @@ curl --location 'https://api.airbyte.ai/api/v1/connectors/sources/{your_source_i
|
|
|
268
268
|
| `followup_ids` | `array` | Array of identifiers for follow-up tickets related to this ticket |
|
|
269
269
|
| `forum_topic_id` | `integer` | Unique identifier linking the ticket to a forum topic if applicable |
|
|
270
270
|
| `from_messaging_channel` | `boolean` | Boolean indicating whether the ticket originated from a messaging channel |
|
|
271
|
-
| `generated_timestamp` | `integer` | Timestamp updated for all ticket updates including system changes, used for incremental export
|
|
271
|
+
| `generated_timestamp` | `integer` | Timestamp updated for all ticket updates including system changes, used for incremental export |
|
|
272
272
|
| `group_id` | `integer` | Unique identifier of the agent group assigned to handle the ticket |
|
|
273
273
|
| `has_incidents` | `boolean` | Boolean indicating whether this problem ticket has related incident tickets |
|
|
274
274
|
| `id` | `integer` | Unique identifier for the ticket |
|
|
@@ -308,7 +308,7 @@ curl --location 'https://api.airbyte.ai/api/v1/connectors/sources/{your_source_i
|
|
|
308
308
|
| `hits[].data.created_at` | `string` | Timestamp indicating when the ticket was created |
|
|
309
309
|
| `hits[].data.custom_fields` | `array` | Array of custom field values specific to the account's ticket configuration |
|
|
310
310
|
| `hits[].data.custom_status_id` | `integer` | Unique identifier of the custom status applied to the ticket |
|
|
311
|
-
| `hits[].data.deleted_ticket_form_id` | `integer` |
|
|
311
|
+
| `hits[].data.deleted_ticket_form_id` | `integer` | The ID of the ticket form that was previously associated with this ticket but has since been deleted |
|
|
312
312
|
| `hits[].data.description` | `string` | Initial description or content of the ticket when it was created |
|
|
313
313
|
| `hits[].data.due_at` | `string` | Timestamp indicating when the ticket is due for completion or resolution |
|
|
314
314
|
| `hits[].data.email_cc_ids` | `array` | Array of user identifiers who are CC'd on ticket email notifications |
|
|
@@ -318,7 +318,7 @@ curl --location 'https://api.airbyte.ai/api/v1/connectors/sources/{your_source_i
|
|
|
318
318
|
| `hits[].data.followup_ids` | `array` | Array of identifiers for follow-up tickets related to this ticket |
|
|
319
319
|
| `hits[].data.forum_topic_id` | `integer` | Unique identifier linking the ticket to a forum topic if applicable |
|
|
320
320
|
| `hits[].data.from_messaging_channel` | `boolean` | Boolean indicating whether the ticket originated from a messaging channel |
|
|
321
|
-
| `hits[].data.generated_timestamp` | `integer` | Timestamp updated for all ticket updates including system changes, used for incremental export
|
|
321
|
+
| `hits[].data.generated_timestamp` | `integer` | Timestamp updated for all ticket updates including system changes, used for incremental export |
|
|
322
322
|
| `hits[].data.group_id` | `integer` | Unique identifier of the agent group assigned to handle the ticket |
|
|
323
323
|
| `hits[].data.has_incidents` | `boolean` | Boolean indicating whether this problem ticket has related incident tickets |
|
|
324
324
|
| `hits[].data.id` | `integer` | Unique identifier for the ticket |
|
|
@@ -1894,9 +1894,9 @@ curl --location 'https://api.airbyte.ai/api/v1/connectors/sources/{your_source_i
|
|
|
1894
1894
|
|------------|------|-------------|
|
|
1895
1895
|
| `active` | `boolean` | Whether this field is currently available for use |
|
|
1896
1896
|
| `agent_description` | `string` | A description of the ticket field that only agents can see |
|
|
1897
|
-
| `collapsed_for_agents` | `boolean` | If true, the field is shown to agents by default; if false, it is hidden alongside infrequently
|
|
1897
|
+
| `collapsed_for_agents` | `boolean` | If true, the field is shown to agents by default; if false, it is hidden alongside infrequently used fields |
|
|
1898
1898
|
| `created_at` | `string` | Timestamp when the custom ticket field was created |
|
|
1899
|
-
| `custom_field_options` | `array` | Array of option objects for custom ticket fields of type multiselect or tagger
|
|
1899
|
+
| `custom_field_options` | `array` | Array of option objects for custom ticket fields of type multiselect or tagger |
|
|
1900
1900
|
| `custom_statuses` | `array` | List of customized ticket statuses, only present for system ticket fields of type custom_status |
|
|
1901
1901
|
| `description` | `string` | Text describing the purpose of the ticket field to users |
|
|
1902
1902
|
| `editable_in_portal` | `boolean` | Whether this field is editable by end users in Help Center |
|
|
@@ -1915,7 +1915,7 @@ curl --location 'https://api.airbyte.ai/api/v1/connectors/sources/{your_source_i
|
|
|
1915
1915
|
| `tag` | `string` | For checkbox fields only, a tag added to tickets when the checkbox field is selected |
|
|
1916
1916
|
| `title` | `string` | The title of the ticket field displayed to agents |
|
|
1917
1917
|
| `title_in_portal` | `string` | The title of the ticket field displayed to end users in Help Center |
|
|
1918
|
-
| `type` | `string` | Field type such as text, textarea, checkbox, date, integer, decimal, regexp, multiselect, tagger
|
|
1918
|
+
| `type` | `string` | Field type such as text, textarea, checkbox, date, integer, decimal, regexp, multiselect, or tagger |
|
|
1919
1919
|
| `updated_at` | `string` | Timestamp when the custom ticket field was last updated |
|
|
1920
1920
|
| `url` | `string` | The API URL for this ticket field resource |
|
|
1921
1921
|
| `visible_in_portal` | `boolean` | Whether this field is visible to end users in Help Center |
|
|
@@ -1931,9 +1931,9 @@ curl --location 'https://api.airbyte.ai/api/v1/connectors/sources/{your_source_i
|
|
|
1931
1931
|
| `hits[].data` | `object` | Record data containing the searchable fields listed above |
|
|
1932
1932
|
| `hits[].data.active` | `boolean` | Whether this field is currently available for use |
|
|
1933
1933
|
| `hits[].data.agent_description` | `string` | A description of the ticket field that only agents can see |
|
|
1934
|
-
| `hits[].data.collapsed_for_agents` | `boolean` | If true, the field is shown to agents by default; if false, it is hidden alongside infrequently
|
|
1934
|
+
| `hits[].data.collapsed_for_agents` | `boolean` | If true, the field is shown to agents by default; if false, it is hidden alongside infrequently used fields |
|
|
1935
1935
|
| `hits[].data.created_at` | `string` | Timestamp when the custom ticket field was created |
|
|
1936
|
-
| `hits[].data.custom_field_options` | `array` | Array of option objects for custom ticket fields of type multiselect or tagger
|
|
1936
|
+
| `hits[].data.custom_field_options` | `array` | Array of option objects for custom ticket fields of type multiselect or tagger |
|
|
1937
1937
|
| `hits[].data.custom_statuses` | `array` | List of customized ticket statuses, only present for system ticket fields of type custom_status |
|
|
1938
1938
|
| `hits[].data.description` | `string` | Text describing the purpose of the ticket field to users |
|
|
1939
1939
|
| `hits[].data.editable_in_portal` | `boolean` | Whether this field is editable by end users in Help Center |
|
|
@@ -1952,7 +1952,7 @@ curl --location 'https://api.airbyte.ai/api/v1/connectors/sources/{your_source_i
|
|
|
1952
1952
|
| `hits[].data.tag` | `string` | For checkbox fields only, a tag added to tickets when the checkbox field is selected |
|
|
1953
1953
|
| `hits[].data.title` | `string` | The title of the ticket field displayed to agents |
|
|
1954
1954
|
| `hits[].data.title_in_portal` | `string` | The title of the ticket field displayed to end users in Help Center |
|
|
1955
|
-
| `hits[].data.type` | `string` | Field type such as text, textarea, checkbox, date, integer, decimal, regexp, multiselect, tagger
|
|
1955
|
+
| `hits[].data.type` | `string` | Field type such as text, textarea, checkbox, date, integer, decimal, regexp, multiselect, or tagger |
|
|
1956
1956
|
| `hits[].data.updated_at` | `string` | Timestamp when the custom ticket field was last updated |
|
|
1957
1957
|
| `hits[].data.url` | `string` | The API URL for this ticket field resource |
|
|
1958
1958
|
| `hits[].data.visible_in_portal` | `boolean` | Whether this field is visible to end users in Help Center |
|
|
@@ -2962,7 +2962,7 @@ curl --location 'https://api.airbyte.ai/api/v1/connectors/sources/{your_source_i
|
|
|
2962
2962
|
| `group_id` | `integer` | The identifier of the group assigned to the ticket at the time the rating was submitted |
|
|
2963
2963
|
| `id` | `integer` | Unique identifier for the satisfaction rating, automatically assigned upon creation |
|
|
2964
2964
|
| `reason` | `string` | Free-text reason for a bad rating provided by the requester in a follow-up question |
|
|
2965
|
-
| `reason_id` | `integer` | Identifier for the predefined reason given for a negative rating
|
|
2965
|
+
| `reason_id` | `integer` | Identifier for the predefined reason given for a negative rating |
|
|
2966
2966
|
| `requester_id` | `integer` | The identifier of the ticket requester who submitted the satisfaction rating |
|
|
2967
2967
|
| `score` | `string` | The satisfaction rating value: 'offered', 'unoffered', 'good', or 'bad' |
|
|
2968
2968
|
| `ticket_id` | `integer` | The identifier of the ticket being rated |
|
|
@@ -2984,7 +2984,7 @@ curl --location 'https://api.airbyte.ai/api/v1/connectors/sources/{your_source_i
|
|
|
2984
2984
|
| `hits[].data.group_id` | `integer` | The identifier of the group assigned to the ticket at the time the rating was submitted |
|
|
2985
2985
|
| `hits[].data.id` | `integer` | Unique identifier for the satisfaction rating, automatically assigned upon creation |
|
|
2986
2986
|
| `hits[].data.reason` | `string` | Free-text reason for a bad rating provided by the requester in a follow-up question |
|
|
2987
|
-
| `hits[].data.reason_id` | `integer` | Identifier for the predefined reason given for a negative rating
|
|
2987
|
+
| `hits[].data.reason_id` | `integer` | Identifier for the predefined reason given for a negative rating |
|
|
2988
2988
|
| `hits[].data.requester_id` | `integer` | The identifier of the ticket requester who submitted the satisfaction rating |
|
|
2989
2989
|
| `hits[].data.score` | `string` | The satisfaction rating value: 'offered', 'unoffered', 'good', or 'bad' |
|
|
2990
2990
|
| `hits[].data.ticket_id` | `integer` | The identifier of the ticket being rated |
|
|
@@ -3417,7 +3417,7 @@ curl --location 'https://api.airbyte.ai/api/v1/connectors/sources/{your_source_i
|
|
|
3417
3417
|
| `raw_display_name` | `string` | The dynamic content placeholder if present, or the display_name value if not |
|
|
3418
3418
|
| `raw_name` | `string` | The dynamic content placeholder if present, or the name value if not |
|
|
3419
3419
|
| `restricted_brand_ids` | `array` | IDs of all brands that this ticket form is restricted to |
|
|
3420
|
-
| `ticket_field_ids` | `array` | IDs of all ticket fields included in this ticket form
|
|
3420
|
+
| `ticket_field_ids` | `array` | IDs of all ticket fields included in this ticket form |
|
|
3421
3421
|
| `updated_at` | `string` | Timestamp of the last update to the ticket form |
|
|
3422
3422
|
| `url` | `string` | URL of the ticket form |
|
|
3423
3423
|
|
|
@@ -3444,7 +3444,7 @@ curl --location 'https://api.airbyte.ai/api/v1/connectors/sources/{your_source_i
|
|
|
3444
3444
|
| `hits[].data.raw_display_name` | `string` | The dynamic content placeholder if present, or the display_name value if not |
|
|
3445
3445
|
| `hits[].data.raw_name` | `string` | The dynamic content placeholder if present, or the name value if not |
|
|
3446
3446
|
| `hits[].data.restricted_brand_ids` | `array` | IDs of all brands that this ticket form is restricted to |
|
|
3447
|
-
| `hits[].data.ticket_field_ids` | `array` | IDs of all ticket fields included in this ticket form
|
|
3447
|
+
| `hits[].data.ticket_field_ids` | `array` | IDs of all ticket fields included in this ticket form |
|
|
3448
3448
|
| `hits[].data.updated_at` | `string` | Timestamp of the last update to the ticket form |
|
|
3449
3449
|
| `hits[].data.url` | `string` | URL of the ticket form |
|
|
3450
3450
|
| `next_cursor` | `string \| null` | Cursor for next page of results |
|
|
@@ -3748,3 +3748,4 @@ curl --location 'https://api.airbyte.ai/api/v1/connectors/sources/{your_source_i
|
|
|
3748
3748
|
| `range_header` | `string` | No | Optional Range header for partial downloads (e.g., 'bytes=0-99') |
|
|
3749
3749
|
|
|
3750
3750
|
|
|
3751
|
+
|
|
@@ -62,6 +62,53 @@ class TokenExtractValidationError(ConnectorModelLoaderError):
|
|
|
62
62
|
pass
|
|
63
63
|
|
|
64
64
|
|
|
65
|
+
# Expected auth_mapping keys for each auth type.
|
|
66
|
+
# These are the auth parameters that each security scheme expects, NOT the user's credential field names.
|
|
67
|
+
EXPECTED_AUTH_MAPPING_KEYS: dict[AuthType, set[str]] = {
|
|
68
|
+
AuthType.BEARER: {"token"},
|
|
69
|
+
AuthType.BASIC: {"username", "password"},
|
|
70
|
+
AuthType.API_KEY: {"api_key"},
|
|
71
|
+
AuthType.OAUTH2: {"access_token", "refresh_token", "client_id", "client_secret"},
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
def _validate_auth_mapping_keys(
|
|
76
|
+
auth_type: AuthType,
|
|
77
|
+
auth_config: AirbyteAuthConfig | None,
|
|
78
|
+
scheme_name: str = "default",
|
|
79
|
+
) -> None:
|
|
80
|
+
"""Validate that auth_mapping keys match expected parameters for the auth type.
|
|
81
|
+
|
|
82
|
+
The auth_mapping keys must be the parameters expected by the security scheme
|
|
83
|
+
(e.g., "token" for bearer), not the user's credential field names.
|
|
84
|
+
|
|
85
|
+
Args:
|
|
86
|
+
auth_type: The authentication type
|
|
87
|
+
auth_config: The x-airbyte-auth-config containing auth_mapping
|
|
88
|
+
scheme_name: Name of the security scheme for error messages
|
|
89
|
+
|
|
90
|
+
Raises:
|
|
91
|
+
InvalidOpenAPIError: If auth_mapping keys don't match expected parameters
|
|
92
|
+
"""
|
|
93
|
+
if auth_config is None or auth_config.auth_mapping is None:
|
|
94
|
+
return # No explicit auth_mapping, will use defaults
|
|
95
|
+
|
|
96
|
+
expected_keys = EXPECTED_AUTH_MAPPING_KEYS.get(auth_type)
|
|
97
|
+
if expected_keys is None:
|
|
98
|
+
return # Unknown auth type, skip validation
|
|
99
|
+
|
|
100
|
+
actual_keys = set(auth_config.auth_mapping.keys())
|
|
101
|
+
invalid_keys = actual_keys - expected_keys
|
|
102
|
+
|
|
103
|
+
if invalid_keys:
|
|
104
|
+
raise InvalidOpenAPIError(
|
|
105
|
+
f"Invalid auth_mapping keys for {auth_type.value} auth in scheme '{scheme_name}': {invalid_keys}. "
|
|
106
|
+
f"Expected keys for {auth_type.value}: {sorted(expected_keys)}. "
|
|
107
|
+
f"Note: auth_mapping keys must be the auth parameters (e.g., 'token' for bearer), "
|
|
108
|
+
f'not your credential field names. Use template syntax to map: token: "${{your_field}}"'
|
|
109
|
+
)
|
|
110
|
+
|
|
111
|
+
|
|
65
112
|
def extract_path_params(path: str) -> list[str]:
|
|
66
113
|
"""Extract parameter names from path template.
|
|
67
114
|
|
|
@@ -145,6 +192,87 @@ def _deproxy_schema(obj: Any) -> Any:
|
|
|
145
192
|
return obj
|
|
146
193
|
|
|
147
194
|
|
|
195
|
+
def _type_includes(type_value: Any, target: str) -> bool:
|
|
196
|
+
if isinstance(type_value, list):
|
|
197
|
+
return target in type_value
|
|
198
|
+
return type_value == target
|
|
199
|
+
|
|
200
|
+
|
|
201
|
+
def _flatten_cache_properties(properties: dict[str, Any], prefix: str) -> list[str]:
|
|
202
|
+
entries: list[str] = []
|
|
203
|
+
for prop_name, prop in properties.items():
|
|
204
|
+
path = f"{prefix}{prop_name}" if prefix else prop_name
|
|
205
|
+
entries.append(path)
|
|
206
|
+
|
|
207
|
+
prop_type = getattr(prop, "type", None) if not isinstance(prop, dict) else prop.get("type")
|
|
208
|
+
prop_properties = getattr(prop, "properties", None) if not isinstance(prop, dict) else prop.get("properties")
|
|
209
|
+
|
|
210
|
+
if _type_includes(prop_type, "array"):
|
|
211
|
+
array_path = f"{path}[]"
|
|
212
|
+
entries.append(array_path)
|
|
213
|
+
if isinstance(prop_properties, dict):
|
|
214
|
+
entries.extend(_flatten_cache_properties(prop_properties, prefix=f"{array_path}."))
|
|
215
|
+
elif isinstance(prop_properties, dict):
|
|
216
|
+
entries.extend(_flatten_cache_properties(prop_properties, prefix=f"{path}."))
|
|
217
|
+
|
|
218
|
+
return entries
|
|
219
|
+
|
|
220
|
+
|
|
221
|
+
def _flatten_cache_field_paths(field: Any) -> list[str]:
|
|
222
|
+
field_name = getattr(field, "name", None) if not isinstance(field, dict) else field.get("name")
|
|
223
|
+
if not isinstance(field_name, str) or not field_name:
|
|
224
|
+
return []
|
|
225
|
+
|
|
226
|
+
field_type = getattr(field, "type", None) if not isinstance(field, dict) else field.get("type")
|
|
227
|
+
field_properties = getattr(field, "properties", None) if not isinstance(field, dict) else field.get("properties")
|
|
228
|
+
|
|
229
|
+
entries = [field_name]
|
|
230
|
+
if _type_includes(field_type, "array"):
|
|
231
|
+
array_path = f"{field_name}[]"
|
|
232
|
+
entries.append(array_path)
|
|
233
|
+
if isinstance(field_properties, dict):
|
|
234
|
+
entries.extend(_flatten_cache_properties(field_properties, prefix=f"{array_path}."))
|
|
235
|
+
elif isinstance(field_properties, dict):
|
|
236
|
+
entries.extend(_flatten_cache_properties(field_properties, prefix=f"{field_name}."))
|
|
237
|
+
|
|
238
|
+
return entries
|
|
239
|
+
|
|
240
|
+
|
|
241
|
+
def _dedupe_strings(values: list[str]) -> list[str]:
|
|
242
|
+
seen: set[str] = set()
|
|
243
|
+
ordered: list[str] = []
|
|
244
|
+
for value in values:
|
|
245
|
+
if value not in seen:
|
|
246
|
+
seen.add(value)
|
|
247
|
+
ordered.append(value)
|
|
248
|
+
return ordered
|
|
249
|
+
|
|
250
|
+
|
|
251
|
+
def _extract_search_field_paths(spec: OpenAPIConnector) -> dict[str, list[str]]:
|
|
252
|
+
cache_config = getattr(spec.info, "x_airbyte_cache", None)
|
|
253
|
+
entities = getattr(cache_config, "entities", None)
|
|
254
|
+
if not isinstance(entities, list):
|
|
255
|
+
return {}
|
|
256
|
+
|
|
257
|
+
search_fields: dict[str, list[str]] = {}
|
|
258
|
+
for entity in entities:
|
|
259
|
+
entity_name = getattr(entity, "entity", None) if not isinstance(entity, dict) else entity.get("entity")
|
|
260
|
+
if not isinstance(entity_name, str) or not entity_name:
|
|
261
|
+
continue
|
|
262
|
+
|
|
263
|
+
fields = getattr(entity, "fields", None) if not isinstance(entity, dict) else entity.get("fields")
|
|
264
|
+
if not isinstance(fields, list):
|
|
265
|
+
continue
|
|
266
|
+
|
|
267
|
+
field_paths: list[str] = []
|
|
268
|
+
for field in fields:
|
|
269
|
+
field_paths.extend(_flatten_cache_field_paths(field))
|
|
270
|
+
|
|
271
|
+
search_fields[entity_name] = _dedupe_strings(field_paths)
|
|
272
|
+
|
|
273
|
+
return search_fields
|
|
274
|
+
|
|
275
|
+
|
|
148
276
|
def parse_openapi_spec(raw_config: dict) -> OpenAPIConnector:
|
|
149
277
|
"""Parse OpenAPI specification from YAML.
|
|
150
278
|
|
|
@@ -434,6 +562,8 @@ def convert_openapi_to_connector_model(spec: OpenAPIConnector) -> ConnectorModel
|
|
|
434
562
|
if not connector_id:
|
|
435
563
|
raise InvalidOpenAPIError("Missing required x-airbyte-connector-id field")
|
|
436
564
|
|
|
565
|
+
search_field_paths = _extract_search_field_paths(spec)
|
|
566
|
+
|
|
437
567
|
# Create ConnectorModel
|
|
438
568
|
model = ConnectorModel(
|
|
439
569
|
id=connector_id,
|
|
@@ -444,6 +574,7 @@ def convert_openapi_to_connector_model(spec: OpenAPIConnector) -> ConnectorModel
|
|
|
444
574
|
entities=entities,
|
|
445
575
|
openapi_spec=spec,
|
|
446
576
|
retry_config=retry_config,
|
|
577
|
+
search_field_paths=search_field_paths,
|
|
447
578
|
)
|
|
448
579
|
|
|
449
580
|
return model
|
|
@@ -840,6 +971,9 @@ def _parse_single_security_scheme(scheme: Any) -> AuthConfig:
|
|
|
840
971
|
oauth2_config = _parse_oauth2_config(scheme)
|
|
841
972
|
# Use explicit x-airbyte-auth-config if present, otherwise generate default
|
|
842
973
|
auth_config_obj = scheme.x_airbyte_auth_config or _generate_default_auth_config(AuthType.OAUTH2)
|
|
974
|
+
# Validate auth_mapping keys if explicitly provided
|
|
975
|
+
if scheme.x_airbyte_auth_config:
|
|
976
|
+
_validate_auth_mapping_keys(AuthType.OAUTH2, scheme.x_airbyte_auth_config)
|
|
843
977
|
return AuthConfig(
|
|
844
978
|
type=AuthType.OAUTH2,
|
|
845
979
|
config=oauth2_config,
|
|
@@ -850,6 +984,10 @@ def _parse_single_security_scheme(scheme: Any) -> AuthConfig:
|
|
|
850
984
|
# Use explicit x-airbyte-auth-config if present, otherwise generate default
|
|
851
985
|
auth_config_obj = scheme.x_airbyte_auth_config or _generate_default_auth_config(auth_type)
|
|
852
986
|
|
|
987
|
+
# Validate auth_mapping keys if explicitly provided
|
|
988
|
+
if scheme.x_airbyte_auth_config:
|
|
989
|
+
_validate_auth_mapping_keys(auth_type, scheme.x_airbyte_auth_config)
|
|
990
|
+
|
|
853
991
|
return AuthConfig(
|
|
854
992
|
type=auth_type,
|
|
855
993
|
config=auth_config,
|
|
@@ -1032,7 +1032,9 @@ class LocalExecutor:
|
|
|
1032
1032
|
if "variables" in graphql_config and graphql_config["variables"]:
|
|
1033
1033
|
variables = self._interpolate_variables(graphql_config["variables"], params, param_defaults)
|
|
1034
1034
|
# Filter out None values (optional fields not provided) - matches REST _extract_body() behavior
|
|
1035
|
-
|
|
1035
|
+
# But preserve None for variables explicitly marked as nullable (e.g., to unassign a user)
|
|
1036
|
+
nullable_vars = set(graphql_config.get("x-airbyte-nullable-variables") or [])
|
|
1037
|
+
body["variables"] = {k: v for k, v in variables.items() if v is not None or k in nullable_vars}
|
|
1036
1038
|
|
|
1037
1039
|
# Add operation name if specified
|
|
1038
1040
|
if "operationName" in graphql_config:
|