airbyte-agent-slack 0.1.39__tar.gz → 0.1.40__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.
Files changed (62) hide show
  1. {airbyte_agent_slack-0.1.39 → airbyte_agent_slack-0.1.40}/CHANGELOG.md +5 -0
  2. {airbyte_agent_slack-0.1.39 → airbyte_agent_slack-0.1.40}/PKG-INFO +3 -3
  3. {airbyte_agent_slack-0.1.39 → airbyte_agent_slack-0.1.40}/README.md +2 -2
  4. {airbyte_agent_slack-0.1.39 → airbyte_agent_slack-0.1.40}/airbyte_agent_slack/__init__.py +2 -2
  5. {airbyte_agent_slack-0.1.39 → airbyte_agent_slack-0.1.40}/airbyte_agent_slack/_vendored/connector_sdk/cloud_utils/client.py +72 -9
  6. {airbyte_agent_slack-0.1.39 → airbyte_agent_slack-0.1.40}/airbyte_agent_slack/connector.py +92 -4
  7. {airbyte_agent_slack-0.1.39 → airbyte_agent_slack-0.1.40}/pyproject.toml +1 -1
  8. {airbyte_agent_slack-0.1.39 → airbyte_agent_slack-0.1.40}/.gitignore +0 -0
  9. {airbyte_agent_slack-0.1.39 → airbyte_agent_slack-0.1.40}/AUTH.md +0 -0
  10. {airbyte_agent_slack-0.1.39 → airbyte_agent_slack-0.1.40}/REFERENCE.md +0 -0
  11. {airbyte_agent_slack-0.1.39 → airbyte_agent_slack-0.1.40}/airbyte_agent_slack/_vendored/__init__.py +0 -0
  12. {airbyte_agent_slack-0.1.39 → airbyte_agent_slack-0.1.40}/airbyte_agent_slack/_vendored/connector_sdk/__init__.py +0 -0
  13. {airbyte_agent_slack-0.1.39 → airbyte_agent_slack-0.1.40}/airbyte_agent_slack/_vendored/connector_sdk/auth_strategies.py +0 -0
  14. {airbyte_agent_slack-0.1.39 → airbyte_agent_slack-0.1.40}/airbyte_agent_slack/_vendored/connector_sdk/auth_template.py +0 -0
  15. {airbyte_agent_slack-0.1.39 → airbyte_agent_slack-0.1.40}/airbyte_agent_slack/_vendored/connector_sdk/cloud_utils/__init__.py +0 -0
  16. {airbyte_agent_slack-0.1.39 → airbyte_agent_slack-0.1.40}/airbyte_agent_slack/_vendored/connector_sdk/connector_model_loader.py +0 -0
  17. {airbyte_agent_slack-0.1.39 → airbyte_agent_slack-0.1.40}/airbyte_agent_slack/_vendored/connector_sdk/constants.py +0 -0
  18. {airbyte_agent_slack-0.1.39 → airbyte_agent_slack-0.1.40}/airbyte_agent_slack/_vendored/connector_sdk/exceptions.py +0 -0
  19. {airbyte_agent_slack-0.1.39 → airbyte_agent_slack-0.1.40}/airbyte_agent_slack/_vendored/connector_sdk/executor/__init__.py +0 -0
  20. {airbyte_agent_slack-0.1.39 → airbyte_agent_slack-0.1.40}/airbyte_agent_slack/_vendored/connector_sdk/executor/hosted_executor.py +0 -0
  21. {airbyte_agent_slack-0.1.39 → airbyte_agent_slack-0.1.40}/airbyte_agent_slack/_vendored/connector_sdk/executor/local_executor.py +0 -0
  22. {airbyte_agent_slack-0.1.39 → airbyte_agent_slack-0.1.40}/airbyte_agent_slack/_vendored/connector_sdk/executor/models.py +0 -0
  23. {airbyte_agent_slack-0.1.39 → airbyte_agent_slack-0.1.40}/airbyte_agent_slack/_vendored/connector_sdk/extensions.py +0 -0
  24. {airbyte_agent_slack-0.1.39 → airbyte_agent_slack-0.1.40}/airbyte_agent_slack/_vendored/connector_sdk/http/__init__.py +0 -0
  25. {airbyte_agent_slack-0.1.39 → airbyte_agent_slack-0.1.40}/airbyte_agent_slack/_vendored/connector_sdk/http/adapters/__init__.py +0 -0
  26. {airbyte_agent_slack-0.1.39 → airbyte_agent_slack-0.1.40}/airbyte_agent_slack/_vendored/connector_sdk/http/adapters/httpx_adapter.py +0 -0
  27. {airbyte_agent_slack-0.1.39 → airbyte_agent_slack-0.1.40}/airbyte_agent_slack/_vendored/connector_sdk/http/config.py +0 -0
  28. {airbyte_agent_slack-0.1.39 → airbyte_agent_slack-0.1.40}/airbyte_agent_slack/_vendored/connector_sdk/http/exceptions.py +0 -0
  29. {airbyte_agent_slack-0.1.39 → airbyte_agent_slack-0.1.40}/airbyte_agent_slack/_vendored/connector_sdk/http/protocols.py +0 -0
  30. {airbyte_agent_slack-0.1.39 → airbyte_agent_slack-0.1.40}/airbyte_agent_slack/_vendored/connector_sdk/http/response.py +0 -0
  31. {airbyte_agent_slack-0.1.39 → airbyte_agent_slack-0.1.40}/airbyte_agent_slack/_vendored/connector_sdk/http_client.py +0 -0
  32. {airbyte_agent_slack-0.1.39 → airbyte_agent_slack-0.1.40}/airbyte_agent_slack/_vendored/connector_sdk/introspection.py +0 -0
  33. {airbyte_agent_slack-0.1.39 → airbyte_agent_slack-0.1.40}/airbyte_agent_slack/_vendored/connector_sdk/logging/__init__.py +0 -0
  34. {airbyte_agent_slack-0.1.39 → airbyte_agent_slack-0.1.40}/airbyte_agent_slack/_vendored/connector_sdk/logging/logger.py +0 -0
  35. {airbyte_agent_slack-0.1.39 → airbyte_agent_slack-0.1.40}/airbyte_agent_slack/_vendored/connector_sdk/logging/types.py +0 -0
  36. {airbyte_agent_slack-0.1.39 → airbyte_agent_slack-0.1.40}/airbyte_agent_slack/_vendored/connector_sdk/observability/__init__.py +0 -0
  37. {airbyte_agent_slack-0.1.39 → airbyte_agent_slack-0.1.40}/airbyte_agent_slack/_vendored/connector_sdk/observability/config.py +0 -0
  38. {airbyte_agent_slack-0.1.39 → airbyte_agent_slack-0.1.40}/airbyte_agent_slack/_vendored/connector_sdk/observability/models.py +0 -0
  39. {airbyte_agent_slack-0.1.39 → airbyte_agent_slack-0.1.40}/airbyte_agent_slack/_vendored/connector_sdk/observability/redactor.py +0 -0
  40. {airbyte_agent_slack-0.1.39 → airbyte_agent_slack-0.1.40}/airbyte_agent_slack/_vendored/connector_sdk/observability/session.py +0 -0
  41. {airbyte_agent_slack-0.1.39 → airbyte_agent_slack-0.1.40}/airbyte_agent_slack/_vendored/connector_sdk/performance/__init__.py +0 -0
  42. {airbyte_agent_slack-0.1.39 → airbyte_agent_slack-0.1.40}/airbyte_agent_slack/_vendored/connector_sdk/performance/instrumentation.py +0 -0
  43. {airbyte_agent_slack-0.1.39 → airbyte_agent_slack-0.1.40}/airbyte_agent_slack/_vendored/connector_sdk/performance/metrics.py +0 -0
  44. {airbyte_agent_slack-0.1.39 → airbyte_agent_slack-0.1.40}/airbyte_agent_slack/_vendored/connector_sdk/schema/__init__.py +0 -0
  45. {airbyte_agent_slack-0.1.39 → airbyte_agent_slack-0.1.40}/airbyte_agent_slack/_vendored/connector_sdk/schema/base.py +0 -0
  46. {airbyte_agent_slack-0.1.39 → airbyte_agent_slack-0.1.40}/airbyte_agent_slack/_vendored/connector_sdk/schema/components.py +0 -0
  47. {airbyte_agent_slack-0.1.39 → airbyte_agent_slack-0.1.40}/airbyte_agent_slack/_vendored/connector_sdk/schema/connector.py +0 -0
  48. {airbyte_agent_slack-0.1.39 → airbyte_agent_slack-0.1.40}/airbyte_agent_slack/_vendored/connector_sdk/schema/extensions.py +0 -0
  49. {airbyte_agent_slack-0.1.39 → airbyte_agent_slack-0.1.40}/airbyte_agent_slack/_vendored/connector_sdk/schema/operations.py +0 -0
  50. {airbyte_agent_slack-0.1.39 → airbyte_agent_slack-0.1.40}/airbyte_agent_slack/_vendored/connector_sdk/schema/security.py +0 -0
  51. {airbyte_agent_slack-0.1.39 → airbyte_agent_slack-0.1.40}/airbyte_agent_slack/_vendored/connector_sdk/secrets.py +0 -0
  52. {airbyte_agent_slack-0.1.39 → airbyte_agent_slack-0.1.40}/airbyte_agent_slack/_vendored/connector_sdk/telemetry/__init__.py +0 -0
  53. {airbyte_agent_slack-0.1.39 → airbyte_agent_slack-0.1.40}/airbyte_agent_slack/_vendored/connector_sdk/telemetry/config.py +0 -0
  54. {airbyte_agent_slack-0.1.39 → airbyte_agent_slack-0.1.40}/airbyte_agent_slack/_vendored/connector_sdk/telemetry/events.py +0 -0
  55. {airbyte_agent_slack-0.1.39 → airbyte_agent_slack-0.1.40}/airbyte_agent_slack/_vendored/connector_sdk/telemetry/tracker.py +0 -0
  56. {airbyte_agent_slack-0.1.39 → airbyte_agent_slack-0.1.40}/airbyte_agent_slack/_vendored/connector_sdk/types.py +0 -0
  57. {airbyte_agent_slack-0.1.39 → airbyte_agent_slack-0.1.40}/airbyte_agent_slack/_vendored/connector_sdk/utils.py +0 -0
  58. {airbyte_agent_slack-0.1.39 → airbyte_agent_slack-0.1.40}/airbyte_agent_slack/_vendored/connector_sdk/validation.py +0 -0
  59. {airbyte_agent_slack-0.1.39 → airbyte_agent_slack-0.1.40}/airbyte_agent_slack/_vendored/connector_sdk/validation_replication.py +0 -0
  60. {airbyte_agent_slack-0.1.39 → airbyte_agent_slack-0.1.40}/airbyte_agent_slack/connector_model.py +0 -0
  61. {airbyte_agent_slack-0.1.39 → airbyte_agent_slack-0.1.40}/airbyte_agent_slack/models.py +8 -8
  62. {airbyte_agent_slack-0.1.39 → airbyte_agent_slack-0.1.40}/airbyte_agent_slack/types.py +0 -0
@@ -1,5 +1,10 @@
1
1
  # Slack changelog
2
2
 
3
+ ## [0.1.40] - 2026-02-02
4
+ - Updated connector definition (YAML version 0.1.12)
5
+ - Source commit: 9d9866b0
6
+ - SDK version: 0.1.0
7
+
3
8
  ## [0.1.39] - 2026-01-30
4
9
  - Updated connector definition (YAML version 0.1.12)
5
10
  - Source commit: b184da3e
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: airbyte-agent-slack
3
- Version: 0.1.39
3
+ Version: 0.1.40
4
4
  Summary: Airbyte Slack 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/
@@ -158,7 +158,7 @@ See the official [Slack API reference](https://api.slack.com/methods).
158
158
 
159
159
  ## Version information
160
160
 
161
- - **Package version:** 0.1.39
161
+ - **Package version:** 0.1.40
162
162
  - **Connector version:** 0.1.12
163
- - **Generated with Connector SDK commit SHA:** b184da3e22ef8521d2eeebf3c96a0fe8da2424f5
163
+ - **Generated with Connector SDK commit SHA:** 9d9866b0aae8c3494d04d34e193b9bd860bfc1c6
164
164
  - **Changelog:** [View changelog](https://github.com/airbytehq/airbyte-agent-connectors/blob/main/connectors/slack/CHANGELOG.md)
@@ -125,7 +125,7 @@ See the official [Slack API reference](https://api.slack.com/methods).
125
125
 
126
126
  ## Version information
127
127
 
128
- - **Package version:** 0.1.39
128
+ - **Package version:** 0.1.40
129
129
  - **Connector version:** 0.1.12
130
- - **Generated with Connector SDK commit SHA:** b184da3e22ef8521d2eeebf3c96a0fe8da2424f5
130
+ - **Generated with Connector SDK commit SHA:** 9d9866b0aae8c3494d04d34e193b9bd860bfc1c6
131
131
  - **Changelog:** [View changelog](https://github.com/airbytehq/airbyte-agent-connectors/blob/main/connectors/slack/CHANGELOG.md)
@@ -18,9 +18,9 @@ from .models import (
18
18
  ChannelPurpose,
19
19
  ChannelsListResponse,
20
20
  ChannelResponse,
21
+ Reaction,
21
22
  Attachment,
22
23
  File,
23
- Reaction,
24
24
  Message,
25
25
  Thread,
26
26
  EditedInfo,
@@ -98,9 +98,9 @@ __all__ = [
98
98
  "ChannelPurpose",
99
99
  "ChannelsListResponse",
100
100
  "ChannelResponse",
101
+ "Reaction",
101
102
  "Attachment",
102
103
  "File",
103
- "Reaction",
104
104
  "Message",
105
105
  "Thread",
106
106
  "EditedInfo",
@@ -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()
@@ -598,6 +598,59 @@ class SlackConnector:
598
598
 
599
599
  # ===== HOSTED MODE FACTORY =====
600
600
 
601
+ @classmethod
602
+ async def initiate_oauth(
603
+ cls,
604
+ *,
605
+ external_user_id: str,
606
+ redirect_url: str,
607
+ airbyte_client_id: str,
608
+ airbyte_client_secret: str,
609
+ ) -> str:
610
+ """
611
+ Initiate server-side OAuth flow for this connector.
612
+
613
+ Returns a consent URL where the end user should be redirected to grant access.
614
+ After completing consent, they'll be redirected to your redirect_url with a
615
+ `server_side_oauth_secret_id` query parameter that can be used with `create_hosted()`.
616
+
617
+ Args:
618
+ external_user_id: Workspace identifier in Airbyte Cloud
619
+ redirect_url: URL where users will be redirected after OAuth consent
620
+ airbyte_client_id: Airbyte OAuth client ID
621
+ airbyte_client_secret: Airbyte OAuth client secret
622
+
623
+ Returns:
624
+ The OAuth consent URL
625
+
626
+ Example:
627
+ consent_url = await SlackConnector.initiate_oauth(
628
+ external_user_id="my-workspace",
629
+ redirect_url="https://myapp.com/oauth/callback",
630
+ airbyte_client_id="client_abc",
631
+ airbyte_client_secret="secret_xyz",
632
+ )
633
+ # Redirect user to: consent_url
634
+ # After consent, user arrives at: https://myapp.com/oauth/callback?server_side_oauth_secret_id=...
635
+ """
636
+ from ._vendored.connector_sdk.cloud_utils import AirbyteCloudClient
637
+
638
+ client = AirbyteCloudClient(
639
+ client_id=airbyte_client_id,
640
+ client_secret=airbyte_client_secret,
641
+ )
642
+
643
+ try:
644
+ consent_url = await client.initiate_oauth(
645
+ definition_id=str(SlackConnectorModel.id),
646
+ external_user_id=external_user_id,
647
+ redirect_url=redirect_url,
648
+ )
649
+ finally:
650
+ await client.close()
651
+
652
+ return consent_url
653
+
601
654
  @classmethod
602
655
  async def create_hosted(
603
656
  cls,
@@ -605,9 +658,11 @@ class SlackConnector:
605
658
  external_user_id: str,
606
659
  airbyte_client_id: str,
607
660
  airbyte_client_secret: str,
608
- auth_config: "SlackAuthConfig",
661
+ auth_config: "SlackAuthConfig" | None = None,
662
+ server_side_oauth_secret_id: str | None = None,
609
663
  name: str | None = None,
610
664
  replication_config: "SlackReplicationConfig" | None = None,
665
+ source_template_id: str | None = None,
611
666
  ) -> "SlackConnector":
612
667
  """
613
668
  Create a new hosted connector on Airbyte Cloud.
@@ -616,18 +671,29 @@ class SlackConnector:
616
671
  1. Creates a source on Airbyte Cloud with the provided credentials
617
672
  2. Returns a connector configured with the new connector_id
618
673
 
674
+ Supports two authentication modes:
675
+ 1. Direct credentials: Provide `auth_config` with typed credentials
676
+ 2. Server-side OAuth: Provide `server_side_oauth_secret_id` from OAuth flow
677
+
619
678
  Args:
620
679
  external_user_id: Workspace identifier in Airbyte Cloud
621
680
  airbyte_client_id: Airbyte OAuth client ID
622
681
  airbyte_client_secret: Airbyte OAuth client secret
623
- auth_config: Typed auth config (same as local mode)
682
+ auth_config: Typed auth config. Required unless using server_side_oauth_secret_id.
683
+ server_side_oauth_secret_id: OAuth secret ID from initiate_oauth redirect.
684
+ When provided, auth_config is not required.
624
685
  name: Optional source name (defaults to connector name + external_user_id)
625
686
  replication_config: Typed replication settings.
626
687
  Required for connectors with x-airbyte-replication-config (REPLICATION mode sources).
688
+ source_template_id: Source template ID. Required when organization has
689
+ multiple source templates for this connector type.
627
690
 
628
691
  Returns:
629
692
  A SlackConnector instance configured in hosted mode
630
693
 
694
+ Raises:
695
+ ValueError: If neither or both auth_config and server_side_oauth_secret_id provided
696
+
631
697
  Example:
632
698
  # Create a new hosted connector with API key auth
633
699
  connector = await SlackConnector.create_hosted(
@@ -646,9 +712,28 @@ class SlackConnector:
646
712
  replication_config=SlackReplicationConfig(start_date="...", lookback_window="...", join_channels="..."),
647
713
  )
648
714
 
715
+ # With server-side OAuth:
716
+ connector = await SlackConnector.create_hosted(
717
+ external_user_id="my-workspace",
718
+ airbyte_client_id="client_abc",
719
+ airbyte_client_secret="secret_xyz",
720
+ server_side_oauth_secret_id="airbyte_oauth_..._secret_...",
721
+ replication_config=SlackReplicationConfig(start_date="...", lookback_window="...", join_channels="..."),
722
+ )
723
+
649
724
  # Use the connector
650
725
  result = await connector.execute("entity", "list", {})
651
726
  """
727
+ # Validate: exactly one of auth_config or server_side_oauth_secret_id required
728
+ if auth_config is None and server_side_oauth_secret_id is None:
729
+ raise ValueError(
730
+ "Either auth_config or server_side_oauth_secret_id must be provided"
731
+ )
732
+ if auth_config is not None and server_side_oauth_secret_id is not None:
733
+ raise ValueError(
734
+ "Cannot provide both auth_config and server_side_oauth_secret_id"
735
+ )
736
+
652
737
  from ._vendored.connector_sdk.cloud_utils import AirbyteCloudClient
653
738
 
654
739
  client = AirbyteCloudClient(
@@ -657,8 +742,8 @@ class SlackConnector:
657
742
  )
658
743
 
659
744
  try:
660
- # Build credentials from auth_config
661
- credentials = auth_config.model_dump(exclude_none=True)
745
+ # Build credentials from auth_config (if provided)
746
+ credentials = auth_config.model_dump(exclude_none=True) if auth_config else None
662
747
  replication_config_dict = replication_config.model_dump(exclude_none=True) if replication_config else None
663
748
 
664
749
  # Create source on Airbyte Cloud
@@ -669,6 +754,8 @@ class SlackConnector:
669
754
  external_user_id=external_user_id,
670
755
  credentials=credentials,
671
756
  replication_config=replication_config_dict,
757
+ server_side_oauth_secret_id=server_side_oauth_secret_id,
758
+ source_template_id=source_template_id,
672
759
  )
673
760
  finally:
674
761
  await client.close()
@@ -682,6 +769,7 @@ class SlackConnector:
682
769
 
683
770
 
684
771
 
772
+
685
773
  class UsersQuery:
686
774
  """
687
775
  Query class for Users entity operations.
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "airbyte-agent-slack"
3
- version = "0.1.39"
3
+ version = "0.1.40"
4
4
  description = "Airbyte Slack Connector for AI platforms"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.13"
@@ -190,6 +190,14 @@ class ChannelResponse(BaseModel):
190
190
  ok: Union[bool, Any] = Field(default=None)
191
191
  channel: Union[Channel, Any] = Field(default=None)
192
192
 
193
+ class Reaction(BaseModel):
194
+ """Message reaction"""
195
+ model_config = ConfigDict(extra="allow", populate_by_name=True)
196
+
197
+ name: Union[str | None, Any] = Field(default=None)
198
+ users: Union[list[str] | None, Any] = Field(default=None)
199
+ count: Union[int | None, Any] = Field(default=None)
200
+
193
201
  class Attachment(BaseModel):
194
202
  """Message attachment"""
195
203
  model_config = ConfigDict(extra="allow", populate_by_name=True)
@@ -235,14 +243,6 @@ class File(BaseModel):
235
243
  created: Union[int | None, Any] = Field(default=None)
236
244
  timestamp: Union[int | None, Any] = Field(default=None)
237
245
 
238
- class Reaction(BaseModel):
239
- """Message reaction"""
240
- model_config = ConfigDict(extra="allow", populate_by_name=True)
241
-
242
- name: Union[str | None, Any] = Field(default=None)
243
- users: Union[list[str] | None, Any] = Field(default=None)
244
- count: Union[int | None, Any] = Field(default=None)
245
-
246
246
  class Message(BaseModel):
247
247
  """Slack message object"""
248
248
  model_config = ConfigDict(extra="allow", populate_by_name=True)