airbyte-agent-slack 0.1.40__tar.gz → 0.1.41__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_slack-0.1.40 → airbyte_agent_slack-0.1.41}/AUTH.md +61 -0
- {airbyte_agent_slack-0.1.40 → airbyte_agent_slack-0.1.41}/CHANGELOG.md +5 -0
- {airbyte_agent_slack-0.1.40 → airbyte_agent_slack-0.1.41}/PKG-INFO +3 -3
- {airbyte_agent_slack-0.1.40 → airbyte_agent_slack-0.1.41}/README.md +2 -2
- {airbyte_agent_slack-0.1.40 → airbyte_agent_slack-0.1.41}/airbyte_agent_slack/__init__.py +2 -2
- {airbyte_agent_slack-0.1.40 → airbyte_agent_slack-0.1.41}/airbyte_agent_slack/_vendored/connector_sdk/schema/base.py +32 -1
- {airbyte_agent_slack-0.1.40 → airbyte_agent_slack-0.1.41}/airbyte_agent_slack/_vendored/connector_sdk/schema/extensions.py +19 -1
- {airbyte_agent_slack-0.1.40 → airbyte_agent_slack-0.1.41}/airbyte_agent_slack/_vendored/connector_sdk/schema/security.py +37 -0
- {airbyte_agent_slack-0.1.40 → airbyte_agent_slack-0.1.41}/pyproject.toml +1 -1
- {airbyte_agent_slack-0.1.40 → airbyte_agent_slack-0.1.41}/.gitignore +0 -0
- {airbyte_agent_slack-0.1.40 → airbyte_agent_slack-0.1.41}/REFERENCE.md +0 -0
- {airbyte_agent_slack-0.1.40 → airbyte_agent_slack-0.1.41}/airbyte_agent_slack/_vendored/__init__.py +0 -0
- {airbyte_agent_slack-0.1.40 → airbyte_agent_slack-0.1.41}/airbyte_agent_slack/_vendored/connector_sdk/__init__.py +0 -0
- {airbyte_agent_slack-0.1.40 → airbyte_agent_slack-0.1.41}/airbyte_agent_slack/_vendored/connector_sdk/auth_strategies.py +0 -0
- {airbyte_agent_slack-0.1.40 → airbyte_agent_slack-0.1.41}/airbyte_agent_slack/_vendored/connector_sdk/auth_template.py +0 -0
- {airbyte_agent_slack-0.1.40 → airbyte_agent_slack-0.1.41}/airbyte_agent_slack/_vendored/connector_sdk/cloud_utils/__init__.py +0 -0
- {airbyte_agent_slack-0.1.40 → airbyte_agent_slack-0.1.41}/airbyte_agent_slack/_vendored/connector_sdk/cloud_utils/client.py +0 -0
- {airbyte_agent_slack-0.1.40 → airbyte_agent_slack-0.1.41}/airbyte_agent_slack/_vendored/connector_sdk/connector_model_loader.py +0 -0
- {airbyte_agent_slack-0.1.40 → airbyte_agent_slack-0.1.41}/airbyte_agent_slack/_vendored/connector_sdk/constants.py +0 -0
- {airbyte_agent_slack-0.1.40 → airbyte_agent_slack-0.1.41}/airbyte_agent_slack/_vendored/connector_sdk/exceptions.py +0 -0
- {airbyte_agent_slack-0.1.40 → airbyte_agent_slack-0.1.41}/airbyte_agent_slack/_vendored/connector_sdk/executor/__init__.py +0 -0
- {airbyte_agent_slack-0.1.40 → airbyte_agent_slack-0.1.41}/airbyte_agent_slack/_vendored/connector_sdk/executor/hosted_executor.py +0 -0
- {airbyte_agent_slack-0.1.40 → airbyte_agent_slack-0.1.41}/airbyte_agent_slack/_vendored/connector_sdk/executor/local_executor.py +0 -0
- {airbyte_agent_slack-0.1.40 → airbyte_agent_slack-0.1.41}/airbyte_agent_slack/_vendored/connector_sdk/executor/models.py +0 -0
- {airbyte_agent_slack-0.1.40 → airbyte_agent_slack-0.1.41}/airbyte_agent_slack/_vendored/connector_sdk/extensions.py +0 -0
- {airbyte_agent_slack-0.1.40 → airbyte_agent_slack-0.1.41}/airbyte_agent_slack/_vendored/connector_sdk/http/__init__.py +0 -0
- {airbyte_agent_slack-0.1.40 → airbyte_agent_slack-0.1.41}/airbyte_agent_slack/_vendored/connector_sdk/http/adapters/__init__.py +0 -0
- {airbyte_agent_slack-0.1.40 → airbyte_agent_slack-0.1.41}/airbyte_agent_slack/_vendored/connector_sdk/http/adapters/httpx_adapter.py +0 -0
- {airbyte_agent_slack-0.1.40 → airbyte_agent_slack-0.1.41}/airbyte_agent_slack/_vendored/connector_sdk/http/config.py +0 -0
- {airbyte_agent_slack-0.1.40 → airbyte_agent_slack-0.1.41}/airbyte_agent_slack/_vendored/connector_sdk/http/exceptions.py +0 -0
- {airbyte_agent_slack-0.1.40 → airbyte_agent_slack-0.1.41}/airbyte_agent_slack/_vendored/connector_sdk/http/protocols.py +0 -0
- {airbyte_agent_slack-0.1.40 → airbyte_agent_slack-0.1.41}/airbyte_agent_slack/_vendored/connector_sdk/http/response.py +0 -0
- {airbyte_agent_slack-0.1.40 → airbyte_agent_slack-0.1.41}/airbyte_agent_slack/_vendored/connector_sdk/http_client.py +0 -0
- {airbyte_agent_slack-0.1.40 → airbyte_agent_slack-0.1.41}/airbyte_agent_slack/_vendored/connector_sdk/introspection.py +0 -0
- {airbyte_agent_slack-0.1.40 → airbyte_agent_slack-0.1.41}/airbyte_agent_slack/_vendored/connector_sdk/logging/__init__.py +0 -0
- {airbyte_agent_slack-0.1.40 → airbyte_agent_slack-0.1.41}/airbyte_agent_slack/_vendored/connector_sdk/logging/logger.py +0 -0
- {airbyte_agent_slack-0.1.40 → airbyte_agent_slack-0.1.41}/airbyte_agent_slack/_vendored/connector_sdk/logging/types.py +0 -0
- {airbyte_agent_slack-0.1.40 → airbyte_agent_slack-0.1.41}/airbyte_agent_slack/_vendored/connector_sdk/observability/__init__.py +0 -0
- {airbyte_agent_slack-0.1.40 → airbyte_agent_slack-0.1.41}/airbyte_agent_slack/_vendored/connector_sdk/observability/config.py +0 -0
- {airbyte_agent_slack-0.1.40 → airbyte_agent_slack-0.1.41}/airbyte_agent_slack/_vendored/connector_sdk/observability/models.py +0 -0
- {airbyte_agent_slack-0.1.40 → airbyte_agent_slack-0.1.41}/airbyte_agent_slack/_vendored/connector_sdk/observability/redactor.py +0 -0
- {airbyte_agent_slack-0.1.40 → airbyte_agent_slack-0.1.41}/airbyte_agent_slack/_vendored/connector_sdk/observability/session.py +0 -0
- {airbyte_agent_slack-0.1.40 → airbyte_agent_slack-0.1.41}/airbyte_agent_slack/_vendored/connector_sdk/performance/__init__.py +0 -0
- {airbyte_agent_slack-0.1.40 → airbyte_agent_slack-0.1.41}/airbyte_agent_slack/_vendored/connector_sdk/performance/instrumentation.py +0 -0
- {airbyte_agent_slack-0.1.40 → airbyte_agent_slack-0.1.41}/airbyte_agent_slack/_vendored/connector_sdk/performance/metrics.py +0 -0
- {airbyte_agent_slack-0.1.40 → airbyte_agent_slack-0.1.41}/airbyte_agent_slack/_vendored/connector_sdk/schema/__init__.py +0 -0
- {airbyte_agent_slack-0.1.40 → airbyte_agent_slack-0.1.41}/airbyte_agent_slack/_vendored/connector_sdk/schema/components.py +0 -0
- {airbyte_agent_slack-0.1.40 → airbyte_agent_slack-0.1.41}/airbyte_agent_slack/_vendored/connector_sdk/schema/connector.py +0 -0
- {airbyte_agent_slack-0.1.40 → airbyte_agent_slack-0.1.41}/airbyte_agent_slack/_vendored/connector_sdk/schema/operations.py +0 -0
- {airbyte_agent_slack-0.1.40 → airbyte_agent_slack-0.1.41}/airbyte_agent_slack/_vendored/connector_sdk/secrets.py +0 -0
- {airbyte_agent_slack-0.1.40 → airbyte_agent_slack-0.1.41}/airbyte_agent_slack/_vendored/connector_sdk/telemetry/__init__.py +0 -0
- {airbyte_agent_slack-0.1.40 → airbyte_agent_slack-0.1.41}/airbyte_agent_slack/_vendored/connector_sdk/telemetry/config.py +0 -0
- {airbyte_agent_slack-0.1.40 → airbyte_agent_slack-0.1.41}/airbyte_agent_slack/_vendored/connector_sdk/telemetry/events.py +0 -0
- {airbyte_agent_slack-0.1.40 → airbyte_agent_slack-0.1.41}/airbyte_agent_slack/_vendored/connector_sdk/telemetry/tracker.py +0 -0
- {airbyte_agent_slack-0.1.40 → airbyte_agent_slack-0.1.41}/airbyte_agent_slack/_vendored/connector_sdk/types.py +0 -0
- {airbyte_agent_slack-0.1.40 → airbyte_agent_slack-0.1.41}/airbyte_agent_slack/_vendored/connector_sdk/utils.py +0 -0
- {airbyte_agent_slack-0.1.40 → airbyte_agent_slack-0.1.41}/airbyte_agent_slack/_vendored/connector_sdk/validation.py +0 -0
- {airbyte_agent_slack-0.1.40 → airbyte_agent_slack-0.1.41}/airbyte_agent_slack/_vendored/connector_sdk/validation_replication.py +0 -0
- {airbyte_agent_slack-0.1.40 → airbyte_agent_slack-0.1.41}/airbyte_agent_slack/connector.py +0 -0
- {airbyte_agent_slack-0.1.40 → airbyte_agent_slack-0.1.41}/airbyte_agent_slack/connector_model.py +0 -0
- {airbyte_agent_slack-0.1.40 → airbyte_agent_slack-0.1.41}/airbyte_agent_slack/models.py +24 -24
- {airbyte_agent_slack-0.1.40 → airbyte_agent_slack-0.1.41}/airbyte_agent_slack/types.py +0 -0
|
@@ -102,6 +102,67 @@ curl -X POST "https://api.airbyte.ai/v1/integrations/connectors" \
|
|
|
102
102
|
}'
|
|
103
103
|
```
|
|
104
104
|
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
#### Bring your own OAuth flow
|
|
108
|
+
To implement your own OAuth flow, use Airbyte's server-side OAuth API endpoints. For a complete guide, see [Implement your own OAuth flow](https://docs.airbyte.com/ai-agents/quickstarts/tutorial-server-side-oauth).
|
|
109
|
+
|
|
110
|
+
**Step 1: Initiate the OAuth flow**
|
|
111
|
+
|
|
112
|
+
Request a consent URL for your user.
|
|
113
|
+
|
|
114
|
+
| Field Name | Type | Required | Description |
|
|
115
|
+
|------------|------|----------|-------------|
|
|
116
|
+
| `external_user_id` | `string` | Yes | Your unique identifier for the end user |
|
|
117
|
+
| `connector_type` | `string` | Yes | The connector type (e.g., "Slack") |
|
|
118
|
+
| `redirect_url` | `string` | Yes | URL to redirect to after OAuth authorization |
|
|
119
|
+
|
|
120
|
+
Example request:
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
curl -X POST "https://api.airbyte.ai/v1/integrations/connectors/oauth/initiate" \
|
|
124
|
+
-H "Authorization: Bearer <BEARER_TOKEN>" \
|
|
125
|
+
-H "Content-Type: application/json" \
|
|
126
|
+
-d '{
|
|
127
|
+
"external_user_id": "<EXTERNAL_USER_ID>",
|
|
128
|
+
"connector_type": "Slack",
|
|
129
|
+
"redirect_url": "https://yourapp.com/oauth/callback"
|
|
130
|
+
}'
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
Redirect your user to the `consent_url` from the response. After they authorize, they'll be redirected back to your app with a `secret_id` query parameter.
|
|
134
|
+
|
|
135
|
+
**Step 2: Create a connector with the secret ID**
|
|
136
|
+
|
|
137
|
+
| Field Name | Type | Required | Description |
|
|
138
|
+
|------------|------|----------|-------------|
|
|
139
|
+
| `external_user_id` | `string` | Yes | Your unique identifier for the end user |
|
|
140
|
+
| `connector_type` | `string` | Yes | The connector type (e.g., "Slack") |
|
|
141
|
+
| `name` | `string` | Yes | A name for this connector instance |
|
|
142
|
+
| `server_side_oauth_secret_id` | `string` | Yes | The secret_id from the OAuth callback |
|
|
143
|
+
| `replication_config.start_date` | `str (date-time)` | Yes | UTC date and time in the format YYYY-MM-DDTHH:mm:ssZ from which to start replicating data. |
|
|
144
|
+
| `replication_config.lookback_window` | `int` | Yes | Number of days to look back when syncing data (0-365). |
|
|
145
|
+
| `replication_config.join_channels` | `bool` | Yes | Whether to automatically join public channels to sync messages. |
|
|
146
|
+
|
|
147
|
+
Example request:
|
|
148
|
+
|
|
149
|
+
```bash
|
|
150
|
+
curl -X POST "https://api.airbyte.ai/v1/integrations/connectors" \
|
|
151
|
+
-H "Authorization: Bearer <BEARER_TOKEN>" \
|
|
152
|
+
-H "Content-Type: application/json" \
|
|
153
|
+
-d '{
|
|
154
|
+
"external_user_id": "<EXTERNAL_USER_ID>",
|
|
155
|
+
"connector_type": "Slack",
|
|
156
|
+
"name": "My Slack Connector",
|
|
157
|
+
"server_side_oauth_secret_id": "<secret_id_from_callback>",
|
|
158
|
+
"replication_config": {
|
|
159
|
+
"start_date": "<UTC date and time in the format YYYY-MM-DDTHH:mm:ssZ from which to start replicating data.>",
|
|
160
|
+
"lookback_window": "<Number of days to look back when syncing data (0-365).>",
|
|
161
|
+
"join_channels": "<Whether to automatically join public channels to sync messages.>"
|
|
162
|
+
}
|
|
163
|
+
}'
|
|
164
|
+
```
|
|
165
|
+
|
|
105
166
|
#### Token
|
|
106
167
|
Create a connector with Token credentials.
|
|
107
168
|
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
# Slack changelog
|
|
2
2
|
|
|
3
|
+
## [0.1.41] - 2026-02-02
|
|
4
|
+
- Updated connector definition (YAML version 0.1.12)
|
|
5
|
+
- Source commit: 94024675
|
|
6
|
+
- SDK version: 0.1.0
|
|
7
|
+
|
|
3
8
|
## [0.1.40] - 2026-02-02
|
|
4
9
|
- Updated connector definition (YAML version 0.1.12)
|
|
5
10
|
- Source commit: 9d9866b0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: airbyte-agent-slack
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.41
|
|
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.
|
|
161
|
+
- **Package version:** 0.1.41
|
|
162
162
|
- **Connector version:** 0.1.12
|
|
163
|
-
- **Generated with Connector SDK commit SHA:**
|
|
163
|
+
- **Generated with Connector SDK commit SHA:** 940246757c7476ed4edd7d16b873ebe54ea2b456
|
|
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.
|
|
128
|
+
- **Package version:** 0.1.41
|
|
129
129
|
- **Connector version:** 0.1.12
|
|
130
|
-
- **Generated with Connector SDK commit SHA:**
|
|
130
|
+
- **Generated with Connector SDK commit SHA:** 940246757c7476ed4edd7d16b873ebe54ea2b456
|
|
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
|
+
File,
|
|
21
22
|
Reaction,
|
|
22
23
|
Attachment,
|
|
23
|
-
File,
|
|
24
24
|
Message,
|
|
25
25
|
Thread,
|
|
26
26
|
EditedInfo,
|
|
@@ -98,9 +98,9 @@ __all__ = [
|
|
|
98
98
|
"ChannelPurpose",
|
|
99
99
|
"ChannelsListResponse",
|
|
100
100
|
"ChannelResponse",
|
|
101
|
+
"File",
|
|
101
102
|
"Reaction",
|
|
102
103
|
"Attachment",
|
|
103
|
-
"File",
|
|
104
104
|
"Message",
|
|
105
105
|
"Thread",
|
|
106
106
|
"EditedInfo",
|
|
@@ -10,7 +10,7 @@ from enum import StrEnum
|
|
|
10
10
|
from typing import Any, Dict
|
|
11
11
|
from uuid import UUID
|
|
12
12
|
|
|
13
|
-
from pydantic import BaseModel, ConfigDict, Field, field_validator
|
|
13
|
+
from pydantic import BaseModel, ConfigDict, Field, field_validator, model_validator
|
|
14
14
|
from pydantic_core import Url
|
|
15
15
|
|
|
16
16
|
from .extensions import CacheConfig, ReplicationConfig, RetryConfig
|
|
@@ -210,3 +210,34 @@ class Server(BaseModel):
|
|
|
210
210
|
raise ValueError("Server URL cannot be empty")
|
|
211
211
|
# Allow both absolute URLs and relative paths
|
|
212
212
|
return v
|
|
213
|
+
|
|
214
|
+
@model_validator(mode="after")
|
|
215
|
+
def validate_replication_environment_mapping(self) -> "Server":
|
|
216
|
+
"""Validate that x-airbyte-replication-environment-mapping sources exist in variables.
|
|
217
|
+
|
|
218
|
+
For simple mappings like {"subdomain": "subdomain"}, the key is the source variable.
|
|
219
|
+
For transform mappings like {"domain": {"source": "subdomain", "format": "..."}},
|
|
220
|
+
the "source" field is the source variable.
|
|
221
|
+
"""
|
|
222
|
+
env_mapping = self.x_airbyte_replication_environment_mapping
|
|
223
|
+
if not env_mapping or not self.variables:
|
|
224
|
+
return self
|
|
225
|
+
|
|
226
|
+
variable_names = set(self.variables.keys())
|
|
227
|
+
|
|
228
|
+
for env_key, mapping_value in env_mapping.items():
|
|
229
|
+
if isinstance(mapping_value, str):
|
|
230
|
+
source_var = env_key
|
|
231
|
+
elif isinstance(mapping_value, EnvironmentMappingTransform):
|
|
232
|
+
source_var = mapping_value.source
|
|
233
|
+
else:
|
|
234
|
+
continue
|
|
235
|
+
|
|
236
|
+
if source_var not in variable_names:
|
|
237
|
+
available = ", ".join(sorted(variable_names)) if variable_names else "(none)"
|
|
238
|
+
raise ValueError(
|
|
239
|
+
f"x-airbyte-replication-environment-mapping: source variable '{source_var}' "
|
|
240
|
+
f"not found in server variables. Available: {available}"
|
|
241
|
+
)
|
|
242
|
+
|
|
243
|
+
return self
|
|
@@ -14,7 +14,7 @@ are implemented.
|
|
|
14
14
|
|
|
15
15
|
from typing import Literal
|
|
16
16
|
|
|
17
|
-
from pydantic import BaseModel, ConfigDict, Field
|
|
17
|
+
from pydantic import BaseModel, ConfigDict, Field, model_validator
|
|
18
18
|
|
|
19
19
|
|
|
20
20
|
class PaginationConfig(BaseModel):
|
|
@@ -252,6 +252,24 @@ class ReplicationConfig(BaseModel):
|
|
|
252
252
|
description="Mapping from replication_config field names to source_config field names",
|
|
253
253
|
)
|
|
254
254
|
|
|
255
|
+
@model_validator(mode="after")
|
|
256
|
+
def validate_replication_config_key_mapping(self) -> "ReplicationConfig":
|
|
257
|
+
"""Validate that replication_config_key_mapping keys exist in properties.
|
|
258
|
+
|
|
259
|
+
The mapping is: {local_key: airbyte_path}
|
|
260
|
+
We validate that local_key exists in our properties.
|
|
261
|
+
"""
|
|
262
|
+
if self.replication_config_key_mapping and self.properties:
|
|
263
|
+
property_names = set(self.properties.keys())
|
|
264
|
+
for local_key, airbyte_path in self.replication_config_key_mapping.items():
|
|
265
|
+
if local_key not in property_names:
|
|
266
|
+
available = ", ".join(sorted(property_names)) if property_names else "(none)"
|
|
267
|
+
raise ValueError(
|
|
268
|
+
f"replication_config_key_mapping: local key '{local_key}' "
|
|
269
|
+
f"(mapped to '{airbyte_path}') not found in properties. Available: {available}"
|
|
270
|
+
)
|
|
271
|
+
return self
|
|
272
|
+
|
|
255
273
|
|
|
256
274
|
class CacheConfig(BaseModel):
|
|
257
275
|
"""
|
|
@@ -81,6 +81,21 @@ class AuthConfigOption(BaseModel):
|
|
|
81
81
|
description="Mapping from source config paths (e.g., 'credentials.api_key') to auth config keys for direct connectors",
|
|
82
82
|
)
|
|
83
83
|
|
|
84
|
+
@model_validator(mode="after")
|
|
85
|
+
def validate_replication_auth_key_mapping(self) -> "AuthConfigOption":
|
|
86
|
+
"""Validate that replication_auth_key_mapping target keys exist in properties."""
|
|
87
|
+
if self.replication_auth_key_mapping and self.properties:
|
|
88
|
+
property_names = set(self.properties.keys())
|
|
89
|
+
for airbyte_path, our_key in self.replication_auth_key_mapping.items():
|
|
90
|
+
if our_key not in property_names:
|
|
91
|
+
option_context = f"oneOf option '{self.title}'" if self.title else "oneOf option"
|
|
92
|
+
available = ", ".join(sorted(property_names)) if property_names else "(none)"
|
|
93
|
+
raise ValueError(
|
|
94
|
+
f"replication_auth_key_mapping in {option_context}: target key '{our_key}' "
|
|
95
|
+
f"(mapped from '{airbyte_path}') not found in properties. Available: {available}"
|
|
96
|
+
)
|
|
97
|
+
return self
|
|
98
|
+
|
|
84
99
|
|
|
85
100
|
class AirbyteAuthConfig(BaseModel):
|
|
86
101
|
"""
|
|
@@ -146,8 +161,30 @@ class AirbyteAuthConfig(BaseModel):
|
|
|
146
161
|
if not self.auth_mapping:
|
|
147
162
|
raise ValueError("Single auth option must have auth_mapping")
|
|
148
163
|
|
|
164
|
+
# Validate replication_auth_key_mapping targets exist in properties
|
|
165
|
+
if self.replication_auth_key_mapping and self.properties:
|
|
166
|
+
self._validate_replication_auth_key_mapping(self.replication_auth_key_mapping, self.properties, context="x-airbyte-auth-config")
|
|
167
|
+
|
|
149
168
|
return self
|
|
150
169
|
|
|
170
|
+
@staticmethod
|
|
171
|
+
def _validate_replication_auth_key_mapping(mapping: Dict[str, str], properties: Dict[str, AuthConfigFieldSpec], context: str) -> None:
|
|
172
|
+
"""Validate that replication_auth_key_mapping target keys exist in properties.
|
|
173
|
+
|
|
174
|
+
Args:
|
|
175
|
+
mapping: The replication_auth_key_mapping dict (airbyte_path -> our_key)
|
|
176
|
+
properties: The properties dict from x-airbyte-auth-config
|
|
177
|
+
context: Context string for error messages
|
|
178
|
+
"""
|
|
179
|
+
property_names = set(properties.keys())
|
|
180
|
+
for airbyte_path, our_key in mapping.items():
|
|
181
|
+
if our_key not in property_names:
|
|
182
|
+
available = ", ".join(sorted(property_names)) if property_names else "(none)"
|
|
183
|
+
raise ValueError(
|
|
184
|
+
f"replication_auth_key_mapping in {context}: target key '{our_key}' "
|
|
185
|
+
f"(mapped from '{airbyte_path}') not found in properties. Available: {available}"
|
|
186
|
+
)
|
|
187
|
+
|
|
151
188
|
|
|
152
189
|
class SecurityScheme(BaseModel):
|
|
153
190
|
"""
|
|
File without changes
|
|
File without changes
|
{airbyte_agent_slack-0.1.40 → airbyte_agent_slack-0.1.41}/airbyte_agent_slack/_vendored/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{airbyte_agent_slack-0.1.40 → airbyte_agent_slack-0.1.41}/airbyte_agent_slack/connector_model.py
RENAMED
|
File without changes
|
|
@@ -190,6 +190,30 @@ 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 File(BaseModel):
|
|
194
|
+
"""File object"""
|
|
195
|
+
model_config = ConfigDict(extra="allow", populate_by_name=True)
|
|
196
|
+
|
|
197
|
+
id: Union[str | None, Any] = Field(default=None)
|
|
198
|
+
name: Union[str | None, Any] = Field(default=None)
|
|
199
|
+
title: Union[str | None, Any] = Field(default=None)
|
|
200
|
+
mimetype: Union[str | None, Any] = Field(default=None)
|
|
201
|
+
filetype: Union[str | None, Any] = Field(default=None)
|
|
202
|
+
pretty_type: Union[str | None, Any] = Field(default=None)
|
|
203
|
+
user: Union[str | None, Any] = Field(default=None)
|
|
204
|
+
size: Union[int | None, Any] = Field(default=None)
|
|
205
|
+
mode: Union[str | None, Any] = Field(default=None)
|
|
206
|
+
is_external: Union[bool | None, Any] = Field(default=None)
|
|
207
|
+
external_type: Union[str | None, Any] = Field(default=None)
|
|
208
|
+
is_public: Union[bool | None, Any] = Field(default=None)
|
|
209
|
+
public_url_shared: Union[bool | None, Any] = Field(default=None)
|
|
210
|
+
url_private: Union[str | None, Any] = Field(default=None)
|
|
211
|
+
url_private_download: Union[str | None, Any] = Field(default=None)
|
|
212
|
+
permalink: Union[str | None, Any] = Field(default=None)
|
|
213
|
+
permalink_public: Union[str | None, Any] = Field(default=None)
|
|
214
|
+
created: Union[int | None, Any] = Field(default=None)
|
|
215
|
+
timestamp: Union[int | None, Any] = Field(default=None)
|
|
216
|
+
|
|
193
217
|
class Reaction(BaseModel):
|
|
194
218
|
"""Message reaction"""
|
|
195
219
|
model_config = ConfigDict(extra="allow", populate_by_name=True)
|
|
@@ -219,30 +243,6 @@ class Attachment(BaseModel):
|
|
|
219
243
|
footer_icon: Union[str | None, Any] = Field(default=None)
|
|
220
244
|
ts: Union[Any, Any] = Field(default=None)
|
|
221
245
|
|
|
222
|
-
class File(BaseModel):
|
|
223
|
-
"""File object"""
|
|
224
|
-
model_config = ConfigDict(extra="allow", populate_by_name=True)
|
|
225
|
-
|
|
226
|
-
id: Union[str | None, Any] = Field(default=None)
|
|
227
|
-
name: Union[str | None, Any] = Field(default=None)
|
|
228
|
-
title: Union[str | None, Any] = Field(default=None)
|
|
229
|
-
mimetype: Union[str | None, Any] = Field(default=None)
|
|
230
|
-
filetype: Union[str | None, Any] = Field(default=None)
|
|
231
|
-
pretty_type: Union[str | None, Any] = Field(default=None)
|
|
232
|
-
user: Union[str | None, Any] = Field(default=None)
|
|
233
|
-
size: Union[int | None, Any] = Field(default=None)
|
|
234
|
-
mode: Union[str | None, Any] = Field(default=None)
|
|
235
|
-
is_external: Union[bool | None, Any] = Field(default=None)
|
|
236
|
-
external_type: Union[str | None, Any] = Field(default=None)
|
|
237
|
-
is_public: Union[bool | None, Any] = Field(default=None)
|
|
238
|
-
public_url_shared: Union[bool | None, Any] = Field(default=None)
|
|
239
|
-
url_private: Union[str | None, Any] = Field(default=None)
|
|
240
|
-
url_private_download: Union[str | None, Any] = Field(default=None)
|
|
241
|
-
permalink: Union[str | None, Any] = Field(default=None)
|
|
242
|
-
permalink_public: Union[str | None, Any] = Field(default=None)
|
|
243
|
-
created: Union[int | None, Any] = Field(default=None)
|
|
244
|
-
timestamp: 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)
|
|
File without changes
|