airbyte-agent-zendesk-support 0.18.77__py3-none-any.whl → 0.18.78__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.
@@ -161,24 +161,80 @@ class AirbyteCloudClient:
161
161
  connector_id = connectors[0]["id"]
162
162
  return connector_id
163
163
 
164
+ async def initiate_oauth(
165
+ self,
166
+ definition_id: str,
167
+ external_user_id: str,
168
+ redirect_url: str,
169
+ ) -> str:
170
+ """Initiate a server-side OAuth flow.
171
+
172
+ Starts the OAuth flow for a connector. Returns a consent URL where the
173
+ end user should be redirected to grant access. After completing consent,
174
+ they'll be redirected to your redirect_url with a `server_side_oauth_secret_id`
175
+ query parameter that can be used with `create_source()`.
176
+
177
+ Args:
178
+ definition_id: Connector definition UUID
179
+ external_user_id: Workspace identifier
180
+ redirect_url: URL where users will be redirected after OAuth consent
181
+
182
+ Returns:
183
+ The OAuth consent URL
184
+
185
+ Raises:
186
+ httpx.HTTPStatusError: If the request fails
187
+
188
+ Example:
189
+ consent_url = await client.initiate_oauth(
190
+ definition_id="d8313939-3782-41b0-be29-b3ca20d8dd3a",
191
+ external_user_id="my-workspace",
192
+ redirect_url="https://myapp.com/oauth/callback",
193
+ )
194
+ # Redirect user to: consent_url
195
+ # After consent: https://myapp.com/oauth/callback?server_side_oauth_secret_id=...
196
+ """
197
+ token = await self.get_bearer_token()
198
+ url = f"{self.API_BASE_URL}/api/v1/integrations/connectors/oauth/initiate"
199
+ headers = {"Authorization": f"Bearer {token}"}
200
+ request_body = {
201
+ "external_user_id": external_user_id,
202
+ "definition_id": definition_id,
203
+ "redirect_url": redirect_url,
204
+ }
205
+
206
+ response = await self._http_client.post(url, json=request_body, headers=headers)
207
+ response.raise_for_status()
208
+ return response.json()["consent_url"]
209
+
164
210
  async def create_source(
165
211
  self,
166
212
  name: str,
167
213
  connector_definition_id: str,
168
214
  external_user_id: str,
169
- credentials: dict[str, Any],
215
+ credentials: dict[str, Any] | None = None,
170
216
  replication_config: dict[str, Any] | None = None,
217
+ server_side_oauth_secret_id: str | None = None,
218
+ source_template_id: str | None = None,
171
219
  ) -> str:
172
- """Create a new source on Airbyte Agent Platform.
220
+ """Create a new source on Airbyte Cloud.
221
+
222
+ Supports two authentication modes:
223
+ 1. Direct credentials: Provide `credentials` dict
224
+ 2. Server-side OAuth: Provide `server_side_oauth_secret_id` from OAuth flow
173
225
 
174
226
  Args:
175
227
  name: Source name
176
228
  connector_definition_id: UUID of the connector definition
177
229
  external_user_id: User identifier
178
- credentials: Connector auth config dict
230
+ credentials: Connector auth config dict. Required unless using OAuth.
179
231
  replication_config: Optional replication settings (e.g., start_date for
180
232
  connectors with x-airbyte-replication-config). Required for REPLICATION
181
233
  mode sources like Intercom.
234
+ server_side_oauth_secret_id: OAuth secret ID from initiate_oauth redirect.
235
+ When provided, credentials are not required.
236
+ source_template_id: Source template ID. Required when organization has
237
+ multiple source templates for this connector type.
182
238
 
183
239
  Returns:
184
240
  The created source ID (UUID string)
@@ -187,19 +243,21 @@ class AirbyteCloudClient:
187
243
  httpx.HTTPStatusError: If creation fails
188
244
 
189
245
  Example:
246
+ # With direct credentials:
190
247
  source_id = await client.create_source(
191
- name="My Gong Source",
192
- connector_definition_id="32382e40-3b49-4b99-9c5c-4076501914e7",
248
+ name="My Intercom Source",
249
+ connector_definition_id="d8313939-3782-41b0-be29-b3ca20d8dd3a",
193
250
  external_user_id="my-workspace",
194
- credentials={"access_key": "...", "access_key_secret": "..."}
251
+ credentials={"access_token": "..."},
252
+ replication_config={"start_date": "2024-01-01T00:00:00Z"}
195
253
  )
196
254
 
197
- # For REPLICATION mode sources (e.g., Intercom):
255
+ # With server-side OAuth:
198
256
  source_id = await client.create_source(
199
257
  name="My Intercom Source",
200
258
  connector_definition_id="d8313939-3782-41b0-be29-b3ca20d8dd3a",
201
259
  external_user_id="my-workspace",
202
- credentials={"access_token": "..."},
260
+ server_side_oauth_secret_id="airbyte_oauth_..._secret_...",
203
261
  replication_config={"start_date": "2024-01-01T00:00:00Z"}
204
262
  )
205
263
  """
@@ -211,11 +269,16 @@ class AirbyteCloudClient:
211
269
  "name": name,
212
270
  "definition_id": connector_definition_id,
213
271
  "external_user_id": external_user_id,
214
- "credentials": credentials,
215
272
  }
216
273
 
274
+ if credentials is not None:
275
+ request_body["credentials"] = credentials
217
276
  if replication_config is not None:
218
277
  request_body["replication_config"] = replication_config
278
+ if server_side_oauth_secret_id is not None:
279
+ request_body["server_side_oauth_secret_id"] = server_side_oauth_secret_id
280
+ if source_template_id is not None:
281
+ request_body["source_template_id"] = source_template_id
219
282
 
220
283
  response = await self._http_client.post(url, json=request_body, headers=headers)
221
284
  response.raise_for_status()
@@ -987,6 +987,59 @@ class ZendeskSupportConnector:
987
987
 
988
988
  # ===== HOSTED MODE FACTORY =====
989
989
 
990
+ @classmethod
991
+ async def initiate_oauth(
992
+ cls,
993
+ *,
994
+ external_user_id: str,
995
+ redirect_url: str,
996
+ airbyte_client_id: str,
997
+ airbyte_client_secret: str,
998
+ ) -> str:
999
+ """
1000
+ Initiate server-side OAuth flow for this connector.
1001
+
1002
+ Returns a consent URL where the end user should be redirected to grant access.
1003
+ After completing consent, they'll be redirected to your redirect_url with a
1004
+ `server_side_oauth_secret_id` query parameter that can be used with `create_hosted()`.
1005
+
1006
+ Args:
1007
+ external_user_id: Workspace identifier in Airbyte Cloud
1008
+ redirect_url: URL where users will be redirected after OAuth consent
1009
+ airbyte_client_id: Airbyte OAuth client ID
1010
+ airbyte_client_secret: Airbyte OAuth client secret
1011
+
1012
+ Returns:
1013
+ The OAuth consent URL
1014
+
1015
+ Example:
1016
+ consent_url = await ZendeskSupportConnector.initiate_oauth(
1017
+ external_user_id="my-workspace",
1018
+ redirect_url="https://myapp.com/oauth/callback",
1019
+ airbyte_client_id="client_abc",
1020
+ airbyte_client_secret="secret_xyz",
1021
+ )
1022
+ # Redirect user to: consent_url
1023
+ # After consent, user arrives at: https://myapp.com/oauth/callback?server_side_oauth_secret_id=...
1024
+ """
1025
+ from ._vendored.connector_sdk.cloud_utils import AirbyteCloudClient
1026
+
1027
+ client = AirbyteCloudClient(
1028
+ client_id=airbyte_client_id,
1029
+ client_secret=airbyte_client_secret,
1030
+ )
1031
+
1032
+ try:
1033
+ consent_url = await client.initiate_oauth(
1034
+ definition_id=str(ZendeskSupportConnectorModel.id),
1035
+ external_user_id=external_user_id,
1036
+ redirect_url=redirect_url,
1037
+ )
1038
+ finally:
1039
+ await client.close()
1040
+
1041
+ return consent_url
1042
+
990
1043
  @classmethod
991
1044
  async def create_hosted(
992
1045
  cls,
@@ -994,9 +1047,11 @@ class ZendeskSupportConnector:
994
1047
  external_user_id: str,
995
1048
  airbyte_client_id: str,
996
1049
  airbyte_client_secret: str,
997
- auth_config: "ZendeskSupportAuthConfig",
1050
+ auth_config: "ZendeskSupportAuthConfig" | None = None,
1051
+ server_side_oauth_secret_id: str | None = None,
998
1052
  name: str | None = None,
999
1053
  replication_config: dict[str, Any] | None = None,
1054
+ source_template_id: str | None = None,
1000
1055
  ) -> "ZendeskSupportConnector":
1001
1056
  """
1002
1057
  Create a new hosted connector on Airbyte Cloud.
@@ -1005,18 +1060,29 @@ class ZendeskSupportConnector:
1005
1060
  1. Creates a source on Airbyte Cloud with the provided credentials
1006
1061
  2. Returns a connector configured with the new connector_id
1007
1062
 
1063
+ Supports two authentication modes:
1064
+ 1. Direct credentials: Provide `auth_config` with typed credentials
1065
+ 2. Server-side OAuth: Provide `server_side_oauth_secret_id` from OAuth flow
1066
+
1008
1067
  Args:
1009
1068
  external_user_id: Workspace identifier in Airbyte Cloud
1010
1069
  airbyte_client_id: Airbyte OAuth client ID
1011
1070
  airbyte_client_secret: Airbyte OAuth client secret
1012
- auth_config: Typed auth config (same as local mode)
1071
+ auth_config: Typed auth config. Required unless using server_side_oauth_secret_id.
1072
+ server_side_oauth_secret_id: OAuth secret ID from initiate_oauth redirect.
1073
+ When provided, auth_config is not required.
1013
1074
  name: Optional source name (defaults to connector name + external_user_id)
1014
1075
  replication_config: Optional replication settings dict.
1015
1076
  Required for connectors with x-airbyte-replication-config (REPLICATION mode sources).
1077
+ source_template_id: Source template ID. Required when organization has
1078
+ multiple source templates for this connector type.
1016
1079
 
1017
1080
  Returns:
1018
1081
  A ZendeskSupportConnector instance configured in hosted mode
1019
1082
 
1083
+ Raises:
1084
+ ValueError: If neither or both auth_config and server_side_oauth_secret_id provided
1085
+
1020
1086
  Example:
1021
1087
  # Create a new hosted connector with API key auth
1022
1088
  connector = await ZendeskSupportConnector.create_hosted(
@@ -1026,9 +1092,27 @@ class ZendeskSupportConnector:
1026
1092
  auth_config=ZendeskSupportAuthConfig(access_token="...", refresh_token="..."),
1027
1093
  )
1028
1094
 
1095
+ # With server-side OAuth:
1096
+ connector = await ZendeskSupportConnector.create_hosted(
1097
+ external_user_id="my-workspace",
1098
+ airbyte_client_id="client_abc",
1099
+ airbyte_client_secret="secret_xyz",
1100
+ server_side_oauth_secret_id="airbyte_oauth_..._secret_...",
1101
+ )
1102
+
1029
1103
  # Use the connector
1030
1104
  result = await connector.execute("entity", "list", {})
1031
1105
  """
1106
+ # Validate: exactly one of auth_config or server_side_oauth_secret_id required
1107
+ if auth_config is None and server_side_oauth_secret_id is None:
1108
+ raise ValueError(
1109
+ "Either auth_config or server_side_oauth_secret_id must be provided"
1110
+ )
1111
+ if auth_config is not None and server_side_oauth_secret_id is not None:
1112
+ raise ValueError(
1113
+ "Cannot provide both auth_config and server_side_oauth_secret_id"
1114
+ )
1115
+
1032
1116
  from ._vendored.connector_sdk.cloud_utils import AirbyteCloudClient
1033
1117
 
1034
1118
  client = AirbyteCloudClient(
@@ -1037,8 +1121,8 @@ class ZendeskSupportConnector:
1037
1121
  )
1038
1122
 
1039
1123
  try:
1040
- # Build credentials from auth_config
1041
- credentials = auth_config.model_dump(exclude_none=True)
1124
+ # Build credentials from auth_config (if provided)
1125
+ credentials = auth_config.model_dump(exclude_none=True) if auth_config else None
1042
1126
  replication_config_dict = replication_config.model_dump(exclude_none=True) if replication_config else None
1043
1127
 
1044
1128
  # Create source on Airbyte Cloud
@@ -1049,6 +1133,8 @@ class ZendeskSupportConnector:
1049
1133
  external_user_id=external_user_id,
1050
1134
  credentials=credentials,
1051
1135
  replication_config=replication_config_dict,
1136
+ server_side_oauth_secret_id=server_side_oauth_secret_id,
1137
+ source_template_id=source_template_id,
1052
1138
  )
1053
1139
  finally:
1054
1140
  await client.close()
@@ -1062,6 +1148,7 @@ class ZendeskSupportConnector:
1062
1148
 
1063
1149
 
1064
1150
 
1151
+
1065
1152
  class TicketsQuery:
1066
1153
  """
1067
1154
  Query class for Tickets entity operations.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: airbyte-agent-zendesk-support
3
- Version: 0.18.77
3
+ Version: 0.18.78
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/
@@ -157,7 +157,7 @@ See the official [Zendesk-Support API reference](https://developer.zendesk.com/a
157
157
 
158
158
  ## Version information
159
159
 
160
- - **Package version:** 0.18.77
160
+ - **Package version:** 0.18.78
161
161
  - **Connector version:** 0.1.11
162
- - **Generated with Connector SDK commit SHA:** b184da3e22ef8521d2eeebf3c96a0fe8da2424f5
162
+ - **Generated with Connector SDK commit SHA:** 9d9866b0aae8c3494d04d34e193b9bd860bfc1c6
163
163
  - **Changelog:** [View changelog](https://github.com/airbytehq/airbyte-agent-connectors/blob/main/connectors/zendesk-support/CHANGELOG.md)
@@ -1,5 +1,5 @@
1
1
  airbyte_agent_zendesk_support/__init__.py,sha256=EPmmOaWdjLG3KwnHva6OL2c7fSxAwr6av_qlnh57S44,9515
2
- airbyte_agent_zendesk_support/connector.py,sha256=hKUREFdi9e_yh6y3baKDNmGANwNnKjke_Ibbdd68vCU,117973
2
+ airbyte_agent_zendesk_support/connector.py,sha256=lF31Wp5S8Itk69PSuR_Gwlu-ISIk5iPYlXD_sCTbmec,121652
3
3
  airbyte_agent_zendesk_support/connector_model.py,sha256=4GSYPVJ9QuEiMe0wOmlgfjfNBFMrq_iuHFQg47DzpOU,248743
4
4
  airbyte_agent_zendesk_support/models.py,sha256=c1vEifMBpVvBhjxXbJEhnEBhM3A_HNNVcfy35CNO8xA,63953
5
5
  airbyte_agent_zendesk_support/types.py,sha256=ZNi-YzBv9K0Tmkm5xfEomuWyG59VG4zxTsxh9q9zcHw,162971
@@ -19,7 +19,7 @@ airbyte_agent_zendesk_support/_vendored/connector_sdk/utils.py,sha256=UYwYuSLhsD
19
19
  airbyte_agent_zendesk_support/_vendored/connector_sdk/validation.py,sha256=w5WGnmILkdBslpXhAXhKhE-c8ANBc_OZQxr_fUeAgtc,39666
20
20
  airbyte_agent_zendesk_support/_vendored/connector_sdk/validation_replication.py,sha256=v7F5YWd5m4diIF7_4m4nOkC9crg97vqRUUkt9ka9HZ4,36043
21
21
  airbyte_agent_zendesk_support/_vendored/connector_sdk/cloud_utils/__init__.py,sha256=4799Hv9f2zxDVj1aLyQ8JpTEuFTp_oOZMRz-NZCdBJg,134
22
- airbyte_agent_zendesk_support/_vendored/connector_sdk/cloud_utils/client.py,sha256=-_ibaHVa7KBBw8SnMuxpWz6XkrSgNTFdMgDfTChtywg,9505
22
+ airbyte_agent_zendesk_support/_vendored/connector_sdk/cloud_utils/client.py,sha256=e0VLNCmesGGfo2uD0GiICgXsXTeTkh0GYiVgx_e4VEc,12296
23
23
  airbyte_agent_zendesk_support/_vendored/connector_sdk/executor/__init__.py,sha256=EmG9YQNAjSuYCVB4D5VoLm4qpD1KfeiiOf7bpALj8p8,702
24
24
  airbyte_agent_zendesk_support/_vendored/connector_sdk/executor/hosted_executor.py,sha256=tv0njAdy-gdHBg4izgcxhEWYbrNiBifEYEca9AWzaL0,8693
25
25
  airbyte_agent_zendesk_support/_vendored/connector_sdk/executor/local_executor.py,sha256=RtdTXFzfoJz5Coz9nwQi81Df1402BRgO1Mgd3ZzTkfw,76581
@@ -53,6 +53,6 @@ airbyte_agent_zendesk_support/_vendored/connector_sdk/telemetry/__init__.py,sha2
53
53
  airbyte_agent_zendesk_support/_vendored/connector_sdk/telemetry/config.py,sha256=tLmQwAFD0kP1WyBGWBS3ysaudN9H3e-3EopKZi6cGKg,885
54
54
  airbyte_agent_zendesk_support/_vendored/connector_sdk/telemetry/events.py,sha256=8Y1NbXiwISX-V_wRofY7PqcwEXD0dLMnntKkY6XFU2s,1328
55
55
  airbyte_agent_zendesk_support/_vendored/connector_sdk/telemetry/tracker.py,sha256=SginFQbHqVUVYG82NnNzG34O-tAQ_wZYjGDcuo0q4Kk,5584
56
- airbyte_agent_zendesk_support-0.18.77.dist-info/METADATA,sha256=SXHJJLYvueOMYkVvTAS8NjFUXg1G9dkaZIg_UyTUcDQ,7433
57
- airbyte_agent_zendesk_support-0.18.77.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
58
- airbyte_agent_zendesk_support-0.18.77.dist-info/RECORD,,
56
+ airbyte_agent_zendesk_support-0.18.78.dist-info/METADATA,sha256=M2v7ozqBlA-O5GyF48nXCLE7oJrgWVnviUGv23hnZ3s,7433
57
+ airbyte_agent_zendesk_support-0.18.78.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
58
+ airbyte_agent_zendesk_support-0.18.78.dist-info/RECORD,,