airbyte-agent-slack 0.1.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- airbyte_agent_slack/__init__.py +87 -0
- airbyte_agent_slack/_vendored/__init__.py +1 -0
- airbyte_agent_slack/_vendored/connector_sdk/__init__.py +82 -0
- airbyte_agent_slack/_vendored/connector_sdk/auth_strategies.py +1120 -0
- airbyte_agent_slack/_vendored/connector_sdk/auth_template.py +135 -0
- airbyte_agent_slack/_vendored/connector_sdk/cloud_utils/__init__.py +5 -0
- airbyte_agent_slack/_vendored/connector_sdk/cloud_utils/client.py +213 -0
- airbyte_agent_slack/_vendored/connector_sdk/connector_model_loader.py +964 -0
- airbyte_agent_slack/_vendored/connector_sdk/constants.py +78 -0
- airbyte_agent_slack/_vendored/connector_sdk/exceptions.py +23 -0
- airbyte_agent_slack/_vendored/connector_sdk/executor/__init__.py +31 -0
- airbyte_agent_slack/_vendored/connector_sdk/executor/hosted_executor.py +196 -0
- airbyte_agent_slack/_vendored/connector_sdk/executor/local_executor.py +1633 -0
- airbyte_agent_slack/_vendored/connector_sdk/executor/models.py +190 -0
- airbyte_agent_slack/_vendored/connector_sdk/extensions.py +693 -0
- airbyte_agent_slack/_vendored/connector_sdk/http/__init__.py +37 -0
- airbyte_agent_slack/_vendored/connector_sdk/http/adapters/__init__.py +9 -0
- airbyte_agent_slack/_vendored/connector_sdk/http/adapters/httpx_adapter.py +251 -0
- airbyte_agent_slack/_vendored/connector_sdk/http/config.py +98 -0
- airbyte_agent_slack/_vendored/connector_sdk/http/exceptions.py +119 -0
- airbyte_agent_slack/_vendored/connector_sdk/http/protocols.py +114 -0
- airbyte_agent_slack/_vendored/connector_sdk/http/response.py +104 -0
- airbyte_agent_slack/_vendored/connector_sdk/http_client.py +686 -0
- airbyte_agent_slack/_vendored/connector_sdk/introspection.py +262 -0
- airbyte_agent_slack/_vendored/connector_sdk/logging/__init__.py +11 -0
- airbyte_agent_slack/_vendored/connector_sdk/logging/logger.py +264 -0
- airbyte_agent_slack/_vendored/connector_sdk/logging/types.py +92 -0
- airbyte_agent_slack/_vendored/connector_sdk/observability/__init__.py +11 -0
- airbyte_agent_slack/_vendored/connector_sdk/observability/config.py +179 -0
- airbyte_agent_slack/_vendored/connector_sdk/observability/models.py +19 -0
- airbyte_agent_slack/_vendored/connector_sdk/observability/redactor.py +81 -0
- airbyte_agent_slack/_vendored/connector_sdk/observability/session.py +103 -0
- airbyte_agent_slack/_vendored/connector_sdk/performance/__init__.py +6 -0
- airbyte_agent_slack/_vendored/connector_sdk/performance/instrumentation.py +57 -0
- airbyte_agent_slack/_vendored/connector_sdk/performance/metrics.py +93 -0
- airbyte_agent_slack/_vendored/connector_sdk/schema/__init__.py +75 -0
- airbyte_agent_slack/_vendored/connector_sdk/schema/base.py +161 -0
- airbyte_agent_slack/_vendored/connector_sdk/schema/components.py +239 -0
- airbyte_agent_slack/_vendored/connector_sdk/schema/connector.py +120 -0
- airbyte_agent_slack/_vendored/connector_sdk/schema/extensions.py +109 -0
- airbyte_agent_slack/_vendored/connector_sdk/schema/operations.py +146 -0
- airbyte_agent_slack/_vendored/connector_sdk/schema/security.py +223 -0
- airbyte_agent_slack/_vendored/connector_sdk/secrets.py +182 -0
- airbyte_agent_slack/_vendored/connector_sdk/telemetry/__init__.py +10 -0
- airbyte_agent_slack/_vendored/connector_sdk/telemetry/config.py +32 -0
- airbyte_agent_slack/_vendored/connector_sdk/telemetry/events.py +59 -0
- airbyte_agent_slack/_vendored/connector_sdk/telemetry/tracker.py +155 -0
- airbyte_agent_slack/_vendored/connector_sdk/types.py +245 -0
- airbyte_agent_slack/_vendored/connector_sdk/utils.py +60 -0
- airbyte_agent_slack/_vendored/connector_sdk/validation.py +822 -0
- airbyte_agent_slack/connector.py +620 -0
- airbyte_agent_slack/connector_model.py +2124 -0
- airbyte_agent_slack/models.py +394 -0
- airbyte_agent_slack/types.py +56 -0
- airbyte_agent_slack-0.1.0.dist-info/METADATA +128 -0
- airbyte_agent_slack-0.1.0.dist-info/RECORD +57 -0
- airbyte_agent_slack-0.1.0.dist-info/WHEEL +4 -0
|
@@ -0,0 +1,2124 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Connector model for slack.
|
|
3
|
+
|
|
4
|
+
This file is auto-generated from the connector definition at build time.
|
|
5
|
+
DO NOT EDIT MANUALLY - changes will be overwritten on next generation.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
from ._vendored.connector_sdk.types import (
|
|
11
|
+
Action,
|
|
12
|
+
AuthConfig,
|
|
13
|
+
AuthOption,
|
|
14
|
+
AuthType,
|
|
15
|
+
ConnectorModel,
|
|
16
|
+
EndpointDefinition,
|
|
17
|
+
EntityDefinition,
|
|
18
|
+
)
|
|
19
|
+
from ._vendored.connector_sdk.schema.security import (
|
|
20
|
+
AirbyteAuthConfig,
|
|
21
|
+
AuthConfigFieldSpec,
|
|
22
|
+
)
|
|
23
|
+
from uuid import (
|
|
24
|
+
UUID,
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
SlackConnectorModel: ConnectorModel = ConnectorModel(
|
|
28
|
+
id=UUID('c2281cee-86f9-4a86-bb48-d23286b4c7bd'),
|
|
29
|
+
name='slack',
|
|
30
|
+
version='0.1.1',
|
|
31
|
+
base_url='https://slack.com/api',
|
|
32
|
+
auth=AuthConfig(
|
|
33
|
+
options=[
|
|
34
|
+
AuthOption(
|
|
35
|
+
scheme_name='bearerAuth',
|
|
36
|
+
type=AuthType.BEARER,
|
|
37
|
+
config={'header': 'Authorization', 'prefix': 'Bearer'},
|
|
38
|
+
user_config_spec=AirbyteAuthConfig(
|
|
39
|
+
title='Token Authentication',
|
|
40
|
+
type='object',
|
|
41
|
+
required=['access_token'],
|
|
42
|
+
properties={
|
|
43
|
+
'access_token': AuthConfigFieldSpec(
|
|
44
|
+
title='Access Token',
|
|
45
|
+
description='Your Slack Bot Token (xoxb-) or User Token (xoxp-)',
|
|
46
|
+
airbyte_secret=True,
|
|
47
|
+
),
|
|
48
|
+
},
|
|
49
|
+
auth_mapping={'token': '${access_token}'},
|
|
50
|
+
),
|
|
51
|
+
),
|
|
52
|
+
AuthOption(
|
|
53
|
+
scheme_name='oauth2',
|
|
54
|
+
type=AuthType.OAUTH2,
|
|
55
|
+
config={
|
|
56
|
+
'header': 'Authorization',
|
|
57
|
+
'prefix': 'Bearer',
|
|
58
|
+
'refresh_url': 'https://slack.com/api/oauth.v2.access',
|
|
59
|
+
},
|
|
60
|
+
user_config_spec=AirbyteAuthConfig(
|
|
61
|
+
title='OAuth 2.0 Authentication',
|
|
62
|
+
type='object',
|
|
63
|
+
required=['client_id', 'client_secret', 'access_token'],
|
|
64
|
+
properties={
|
|
65
|
+
'client_id': AuthConfigFieldSpec(
|
|
66
|
+
title='Client ID',
|
|
67
|
+
description="Your Slack App's Client ID",
|
|
68
|
+
),
|
|
69
|
+
'client_secret': AuthConfigFieldSpec(
|
|
70
|
+
title='Client Secret',
|
|
71
|
+
description="Your Slack App's Client Secret",
|
|
72
|
+
airbyte_secret=True,
|
|
73
|
+
),
|
|
74
|
+
'access_token': AuthConfigFieldSpec(
|
|
75
|
+
title='Access Token',
|
|
76
|
+
description='OAuth access token (bot token from oauth.v2.access response)',
|
|
77
|
+
airbyte_secret=True,
|
|
78
|
+
),
|
|
79
|
+
},
|
|
80
|
+
auth_mapping={
|
|
81
|
+
'client_id': '${client_id}',
|
|
82
|
+
'client_secret': '${client_secret}',
|
|
83
|
+
'access_token': '${access_token}',
|
|
84
|
+
},
|
|
85
|
+
replication_auth_key_mapping={'client_id': 'client_id', 'client_secret': 'client_secret'},
|
|
86
|
+
),
|
|
87
|
+
),
|
|
88
|
+
],
|
|
89
|
+
),
|
|
90
|
+
entities=[
|
|
91
|
+
EntityDefinition(
|
|
92
|
+
name='users',
|
|
93
|
+
stream_name='users',
|
|
94
|
+
actions=[Action.LIST, Action.GET],
|
|
95
|
+
endpoints={
|
|
96
|
+
Action.LIST: EndpointDefinition(
|
|
97
|
+
method='GET',
|
|
98
|
+
path='/users.list',
|
|
99
|
+
action=Action.LIST,
|
|
100
|
+
description='Returns a list of all users in the Slack workspace',
|
|
101
|
+
query_params=['cursor', 'limit'],
|
|
102
|
+
query_params_schema={
|
|
103
|
+
'cursor': {'type': 'string', 'required': False},
|
|
104
|
+
'limit': {
|
|
105
|
+
'type': 'integer',
|
|
106
|
+
'required': False,
|
|
107
|
+
'default': 200,
|
|
108
|
+
},
|
|
109
|
+
},
|
|
110
|
+
response_schema={
|
|
111
|
+
'type': 'object',
|
|
112
|
+
'description': 'Response containing list of users',
|
|
113
|
+
'properties': {
|
|
114
|
+
'ok': {'type': 'boolean', 'description': 'Whether the request was successful'},
|
|
115
|
+
'members': {
|
|
116
|
+
'type': 'array',
|
|
117
|
+
'items': {
|
|
118
|
+
'type': 'object',
|
|
119
|
+
'description': 'Slack user object',
|
|
120
|
+
'properties': {
|
|
121
|
+
'id': {'type': 'string', 'description': 'Unique user identifier'},
|
|
122
|
+
'team_id': {
|
|
123
|
+
'type': ['string', 'null'],
|
|
124
|
+
'description': 'Team ID the user belongs to',
|
|
125
|
+
},
|
|
126
|
+
'name': {
|
|
127
|
+
'type': ['string', 'null'],
|
|
128
|
+
'description': 'Username',
|
|
129
|
+
},
|
|
130
|
+
'deleted': {
|
|
131
|
+
'type': ['boolean', 'null'],
|
|
132
|
+
'description': 'Whether the user has been deleted',
|
|
133
|
+
},
|
|
134
|
+
'color': {
|
|
135
|
+
'type': ['string', 'null'],
|
|
136
|
+
'description': 'User color for display',
|
|
137
|
+
},
|
|
138
|
+
'real_name': {
|
|
139
|
+
'type': ['string', 'null'],
|
|
140
|
+
'description': "User's real name",
|
|
141
|
+
},
|
|
142
|
+
'tz': {
|
|
143
|
+
'type': ['string', 'null'],
|
|
144
|
+
'description': 'Timezone identifier',
|
|
145
|
+
},
|
|
146
|
+
'tz_label': {
|
|
147
|
+
'type': ['string', 'null'],
|
|
148
|
+
'description': 'Timezone label',
|
|
149
|
+
},
|
|
150
|
+
'tz_offset': {
|
|
151
|
+
'type': ['integer', 'null'],
|
|
152
|
+
'description': 'Timezone offset in seconds',
|
|
153
|
+
},
|
|
154
|
+
'profile': {
|
|
155
|
+
'oneOf': [
|
|
156
|
+
{
|
|
157
|
+
'type': 'object',
|
|
158
|
+
'description': 'User profile information',
|
|
159
|
+
'properties': {
|
|
160
|
+
'title': {
|
|
161
|
+
'type': ['string', 'null'],
|
|
162
|
+
'description': 'Job title',
|
|
163
|
+
},
|
|
164
|
+
'phone': {
|
|
165
|
+
'type': ['string', 'null'],
|
|
166
|
+
'description': 'Phone number',
|
|
167
|
+
},
|
|
168
|
+
'skype': {
|
|
169
|
+
'type': ['string', 'null'],
|
|
170
|
+
'description': 'Skype handle',
|
|
171
|
+
},
|
|
172
|
+
'real_name': {
|
|
173
|
+
'type': ['string', 'null'],
|
|
174
|
+
'description': 'Real name',
|
|
175
|
+
},
|
|
176
|
+
'real_name_normalized': {
|
|
177
|
+
'type': ['string', 'null'],
|
|
178
|
+
'description': 'Normalized real name',
|
|
179
|
+
},
|
|
180
|
+
'display_name': {
|
|
181
|
+
'type': ['string', 'null'],
|
|
182
|
+
'description': 'Display name',
|
|
183
|
+
},
|
|
184
|
+
'display_name_normalized': {
|
|
185
|
+
'type': ['string', 'null'],
|
|
186
|
+
'description': 'Normalized display name',
|
|
187
|
+
},
|
|
188
|
+
'status_text': {
|
|
189
|
+
'type': ['string', 'null'],
|
|
190
|
+
'description': 'Status text',
|
|
191
|
+
},
|
|
192
|
+
'status_emoji': {
|
|
193
|
+
'type': ['string', 'null'],
|
|
194
|
+
'description': 'Status emoji',
|
|
195
|
+
},
|
|
196
|
+
'status_expiration': {
|
|
197
|
+
'type': ['integer', 'null'],
|
|
198
|
+
'description': 'Status expiration timestamp',
|
|
199
|
+
},
|
|
200
|
+
'avatar_hash': {
|
|
201
|
+
'type': ['string', 'null'],
|
|
202
|
+
'description': 'Avatar hash',
|
|
203
|
+
},
|
|
204
|
+
'first_name': {
|
|
205
|
+
'type': ['string', 'null'],
|
|
206
|
+
'description': 'First name',
|
|
207
|
+
},
|
|
208
|
+
'last_name': {
|
|
209
|
+
'type': ['string', 'null'],
|
|
210
|
+
'description': 'Last name',
|
|
211
|
+
},
|
|
212
|
+
'email': {
|
|
213
|
+
'type': ['string', 'null'],
|
|
214
|
+
'description': 'Email address',
|
|
215
|
+
},
|
|
216
|
+
'image_24': {
|
|
217
|
+
'type': ['string', 'null'],
|
|
218
|
+
'description': '24px avatar URL',
|
|
219
|
+
},
|
|
220
|
+
'image_32': {
|
|
221
|
+
'type': ['string', 'null'],
|
|
222
|
+
'description': '32px avatar URL',
|
|
223
|
+
},
|
|
224
|
+
'image_48': {
|
|
225
|
+
'type': ['string', 'null'],
|
|
226
|
+
'description': '48px avatar URL',
|
|
227
|
+
},
|
|
228
|
+
'image_72': {
|
|
229
|
+
'type': ['string', 'null'],
|
|
230
|
+
'description': '72px avatar URL',
|
|
231
|
+
},
|
|
232
|
+
'image_192': {
|
|
233
|
+
'type': ['string', 'null'],
|
|
234
|
+
'description': '192px avatar URL',
|
|
235
|
+
},
|
|
236
|
+
'image_512': {
|
|
237
|
+
'type': ['string', 'null'],
|
|
238
|
+
'description': '512px avatar URL',
|
|
239
|
+
},
|
|
240
|
+
'team': {
|
|
241
|
+
'type': ['string', 'null'],
|
|
242
|
+
'description': 'Team ID',
|
|
243
|
+
},
|
|
244
|
+
},
|
|
245
|
+
},
|
|
246
|
+
{'type': 'null'},
|
|
247
|
+
],
|
|
248
|
+
'description': 'User profile information',
|
|
249
|
+
},
|
|
250
|
+
'is_admin': {
|
|
251
|
+
'type': ['boolean', 'null'],
|
|
252
|
+
'description': 'Whether the user is an admin',
|
|
253
|
+
},
|
|
254
|
+
'is_owner': {
|
|
255
|
+
'type': ['boolean', 'null'],
|
|
256
|
+
'description': 'Whether the user is an owner',
|
|
257
|
+
},
|
|
258
|
+
'is_primary_owner': {
|
|
259
|
+
'type': ['boolean', 'null'],
|
|
260
|
+
'description': 'Whether the user is the primary owner',
|
|
261
|
+
},
|
|
262
|
+
'is_restricted': {
|
|
263
|
+
'type': ['boolean', 'null'],
|
|
264
|
+
'description': 'Whether the user is restricted',
|
|
265
|
+
},
|
|
266
|
+
'is_ultra_restricted': {
|
|
267
|
+
'type': ['boolean', 'null'],
|
|
268
|
+
'description': 'Whether the user is ultra restricted',
|
|
269
|
+
},
|
|
270
|
+
'is_bot': {
|
|
271
|
+
'type': ['boolean', 'null'],
|
|
272
|
+
'description': 'Whether the user is a bot',
|
|
273
|
+
},
|
|
274
|
+
'is_app_user': {
|
|
275
|
+
'type': ['boolean', 'null'],
|
|
276
|
+
'description': 'Whether the user is an app user',
|
|
277
|
+
},
|
|
278
|
+
'updated': {
|
|
279
|
+
'type': ['integer', 'null'],
|
|
280
|
+
'description': 'Unix timestamp of last update',
|
|
281
|
+
},
|
|
282
|
+
'is_email_confirmed': {
|
|
283
|
+
'type': ['boolean', 'null'],
|
|
284
|
+
'description': "Whether the user's email is confirmed",
|
|
285
|
+
},
|
|
286
|
+
'who_can_share_contact_card': {
|
|
287
|
+
'type': ['string', 'null'],
|
|
288
|
+
'description': "Who can share the user's contact card",
|
|
289
|
+
},
|
|
290
|
+
},
|
|
291
|
+
'x-airbyte-entity-name': 'users',
|
|
292
|
+
'x-airbyte-stream-name': 'users',
|
|
293
|
+
},
|
|
294
|
+
},
|
|
295
|
+
'cache_ts': {
|
|
296
|
+
'type': ['integer', 'null'],
|
|
297
|
+
'description': 'Cache timestamp',
|
|
298
|
+
},
|
|
299
|
+
'response_metadata': {
|
|
300
|
+
'type': 'object',
|
|
301
|
+
'description': 'Response metadata including pagination',
|
|
302
|
+
'properties': {
|
|
303
|
+
'next_cursor': {
|
|
304
|
+
'type': ['string', 'null'],
|
|
305
|
+
'description': 'Cursor for next page of results',
|
|
306
|
+
},
|
|
307
|
+
},
|
|
308
|
+
},
|
|
309
|
+
},
|
|
310
|
+
},
|
|
311
|
+
record_extractor='$.members',
|
|
312
|
+
meta_extractor={'next_cursor': '$.response_metadata.next_cursor'},
|
|
313
|
+
),
|
|
314
|
+
Action.GET: EndpointDefinition(
|
|
315
|
+
method='GET',
|
|
316
|
+
path='/users.info',
|
|
317
|
+
action=Action.GET,
|
|
318
|
+
description='Get information about a single user by ID',
|
|
319
|
+
query_params=['user'],
|
|
320
|
+
query_params_schema={
|
|
321
|
+
'user': {'type': 'string', 'required': True},
|
|
322
|
+
},
|
|
323
|
+
response_schema={
|
|
324
|
+
'type': 'object',
|
|
325
|
+
'description': 'Response containing single user',
|
|
326
|
+
'properties': {
|
|
327
|
+
'ok': {'type': 'boolean', 'description': 'Whether the request was successful'},
|
|
328
|
+
'user': {
|
|
329
|
+
'type': 'object',
|
|
330
|
+
'description': 'Slack user object',
|
|
331
|
+
'properties': {
|
|
332
|
+
'id': {'type': 'string', 'description': 'Unique user identifier'},
|
|
333
|
+
'team_id': {
|
|
334
|
+
'type': ['string', 'null'],
|
|
335
|
+
'description': 'Team ID the user belongs to',
|
|
336
|
+
},
|
|
337
|
+
'name': {
|
|
338
|
+
'type': ['string', 'null'],
|
|
339
|
+
'description': 'Username',
|
|
340
|
+
},
|
|
341
|
+
'deleted': {
|
|
342
|
+
'type': ['boolean', 'null'],
|
|
343
|
+
'description': 'Whether the user has been deleted',
|
|
344
|
+
},
|
|
345
|
+
'color': {
|
|
346
|
+
'type': ['string', 'null'],
|
|
347
|
+
'description': 'User color for display',
|
|
348
|
+
},
|
|
349
|
+
'real_name': {
|
|
350
|
+
'type': ['string', 'null'],
|
|
351
|
+
'description': "User's real name",
|
|
352
|
+
},
|
|
353
|
+
'tz': {
|
|
354
|
+
'type': ['string', 'null'],
|
|
355
|
+
'description': 'Timezone identifier',
|
|
356
|
+
},
|
|
357
|
+
'tz_label': {
|
|
358
|
+
'type': ['string', 'null'],
|
|
359
|
+
'description': 'Timezone label',
|
|
360
|
+
},
|
|
361
|
+
'tz_offset': {
|
|
362
|
+
'type': ['integer', 'null'],
|
|
363
|
+
'description': 'Timezone offset in seconds',
|
|
364
|
+
},
|
|
365
|
+
'profile': {
|
|
366
|
+
'oneOf': [
|
|
367
|
+
{
|
|
368
|
+
'type': 'object',
|
|
369
|
+
'description': 'User profile information',
|
|
370
|
+
'properties': {
|
|
371
|
+
'title': {
|
|
372
|
+
'type': ['string', 'null'],
|
|
373
|
+
'description': 'Job title',
|
|
374
|
+
},
|
|
375
|
+
'phone': {
|
|
376
|
+
'type': ['string', 'null'],
|
|
377
|
+
'description': 'Phone number',
|
|
378
|
+
},
|
|
379
|
+
'skype': {
|
|
380
|
+
'type': ['string', 'null'],
|
|
381
|
+
'description': 'Skype handle',
|
|
382
|
+
},
|
|
383
|
+
'real_name': {
|
|
384
|
+
'type': ['string', 'null'],
|
|
385
|
+
'description': 'Real name',
|
|
386
|
+
},
|
|
387
|
+
'real_name_normalized': {
|
|
388
|
+
'type': ['string', 'null'],
|
|
389
|
+
'description': 'Normalized real name',
|
|
390
|
+
},
|
|
391
|
+
'display_name': {
|
|
392
|
+
'type': ['string', 'null'],
|
|
393
|
+
'description': 'Display name',
|
|
394
|
+
},
|
|
395
|
+
'display_name_normalized': {
|
|
396
|
+
'type': ['string', 'null'],
|
|
397
|
+
'description': 'Normalized display name',
|
|
398
|
+
},
|
|
399
|
+
'status_text': {
|
|
400
|
+
'type': ['string', 'null'],
|
|
401
|
+
'description': 'Status text',
|
|
402
|
+
},
|
|
403
|
+
'status_emoji': {
|
|
404
|
+
'type': ['string', 'null'],
|
|
405
|
+
'description': 'Status emoji',
|
|
406
|
+
},
|
|
407
|
+
'status_expiration': {
|
|
408
|
+
'type': ['integer', 'null'],
|
|
409
|
+
'description': 'Status expiration timestamp',
|
|
410
|
+
},
|
|
411
|
+
'avatar_hash': {
|
|
412
|
+
'type': ['string', 'null'],
|
|
413
|
+
'description': 'Avatar hash',
|
|
414
|
+
},
|
|
415
|
+
'first_name': {
|
|
416
|
+
'type': ['string', 'null'],
|
|
417
|
+
'description': 'First name',
|
|
418
|
+
},
|
|
419
|
+
'last_name': {
|
|
420
|
+
'type': ['string', 'null'],
|
|
421
|
+
'description': 'Last name',
|
|
422
|
+
},
|
|
423
|
+
'email': {
|
|
424
|
+
'type': ['string', 'null'],
|
|
425
|
+
'description': 'Email address',
|
|
426
|
+
},
|
|
427
|
+
'image_24': {
|
|
428
|
+
'type': ['string', 'null'],
|
|
429
|
+
'description': '24px avatar URL',
|
|
430
|
+
},
|
|
431
|
+
'image_32': {
|
|
432
|
+
'type': ['string', 'null'],
|
|
433
|
+
'description': '32px avatar URL',
|
|
434
|
+
},
|
|
435
|
+
'image_48': {
|
|
436
|
+
'type': ['string', 'null'],
|
|
437
|
+
'description': '48px avatar URL',
|
|
438
|
+
},
|
|
439
|
+
'image_72': {
|
|
440
|
+
'type': ['string', 'null'],
|
|
441
|
+
'description': '72px avatar URL',
|
|
442
|
+
},
|
|
443
|
+
'image_192': {
|
|
444
|
+
'type': ['string', 'null'],
|
|
445
|
+
'description': '192px avatar URL',
|
|
446
|
+
},
|
|
447
|
+
'image_512': {
|
|
448
|
+
'type': ['string', 'null'],
|
|
449
|
+
'description': '512px avatar URL',
|
|
450
|
+
},
|
|
451
|
+
'team': {
|
|
452
|
+
'type': ['string', 'null'],
|
|
453
|
+
'description': 'Team ID',
|
|
454
|
+
},
|
|
455
|
+
},
|
|
456
|
+
},
|
|
457
|
+
{'type': 'null'},
|
|
458
|
+
],
|
|
459
|
+
'description': 'User profile information',
|
|
460
|
+
},
|
|
461
|
+
'is_admin': {
|
|
462
|
+
'type': ['boolean', 'null'],
|
|
463
|
+
'description': 'Whether the user is an admin',
|
|
464
|
+
},
|
|
465
|
+
'is_owner': {
|
|
466
|
+
'type': ['boolean', 'null'],
|
|
467
|
+
'description': 'Whether the user is an owner',
|
|
468
|
+
},
|
|
469
|
+
'is_primary_owner': {
|
|
470
|
+
'type': ['boolean', 'null'],
|
|
471
|
+
'description': 'Whether the user is the primary owner',
|
|
472
|
+
},
|
|
473
|
+
'is_restricted': {
|
|
474
|
+
'type': ['boolean', 'null'],
|
|
475
|
+
'description': 'Whether the user is restricted',
|
|
476
|
+
},
|
|
477
|
+
'is_ultra_restricted': {
|
|
478
|
+
'type': ['boolean', 'null'],
|
|
479
|
+
'description': 'Whether the user is ultra restricted',
|
|
480
|
+
},
|
|
481
|
+
'is_bot': {
|
|
482
|
+
'type': ['boolean', 'null'],
|
|
483
|
+
'description': 'Whether the user is a bot',
|
|
484
|
+
},
|
|
485
|
+
'is_app_user': {
|
|
486
|
+
'type': ['boolean', 'null'],
|
|
487
|
+
'description': 'Whether the user is an app user',
|
|
488
|
+
},
|
|
489
|
+
'updated': {
|
|
490
|
+
'type': ['integer', 'null'],
|
|
491
|
+
'description': 'Unix timestamp of last update',
|
|
492
|
+
},
|
|
493
|
+
'is_email_confirmed': {
|
|
494
|
+
'type': ['boolean', 'null'],
|
|
495
|
+
'description': "Whether the user's email is confirmed",
|
|
496
|
+
},
|
|
497
|
+
'who_can_share_contact_card': {
|
|
498
|
+
'type': ['string', 'null'],
|
|
499
|
+
'description': "Who can share the user's contact card",
|
|
500
|
+
},
|
|
501
|
+
},
|
|
502
|
+
'x-airbyte-entity-name': 'users',
|
|
503
|
+
'x-airbyte-stream-name': 'users',
|
|
504
|
+
},
|
|
505
|
+
},
|
|
506
|
+
},
|
|
507
|
+
record_extractor='$.user',
|
|
508
|
+
),
|
|
509
|
+
},
|
|
510
|
+
entity_schema={
|
|
511
|
+
'type': 'object',
|
|
512
|
+
'description': 'Slack user object',
|
|
513
|
+
'properties': {
|
|
514
|
+
'id': {'type': 'string', 'description': 'Unique user identifier'},
|
|
515
|
+
'team_id': {
|
|
516
|
+
'type': ['string', 'null'],
|
|
517
|
+
'description': 'Team ID the user belongs to',
|
|
518
|
+
},
|
|
519
|
+
'name': {
|
|
520
|
+
'type': ['string', 'null'],
|
|
521
|
+
'description': 'Username',
|
|
522
|
+
},
|
|
523
|
+
'deleted': {
|
|
524
|
+
'type': ['boolean', 'null'],
|
|
525
|
+
'description': 'Whether the user has been deleted',
|
|
526
|
+
},
|
|
527
|
+
'color': {
|
|
528
|
+
'type': ['string', 'null'],
|
|
529
|
+
'description': 'User color for display',
|
|
530
|
+
},
|
|
531
|
+
'real_name': {
|
|
532
|
+
'type': ['string', 'null'],
|
|
533
|
+
'description': "User's real name",
|
|
534
|
+
},
|
|
535
|
+
'tz': {
|
|
536
|
+
'type': ['string', 'null'],
|
|
537
|
+
'description': 'Timezone identifier',
|
|
538
|
+
},
|
|
539
|
+
'tz_label': {
|
|
540
|
+
'type': ['string', 'null'],
|
|
541
|
+
'description': 'Timezone label',
|
|
542
|
+
},
|
|
543
|
+
'tz_offset': {
|
|
544
|
+
'type': ['integer', 'null'],
|
|
545
|
+
'description': 'Timezone offset in seconds',
|
|
546
|
+
},
|
|
547
|
+
'profile': {
|
|
548
|
+
'oneOf': [
|
|
549
|
+
{'$ref': '#/components/schemas/UserProfile'},
|
|
550
|
+
{'type': 'null'},
|
|
551
|
+
],
|
|
552
|
+
'description': 'User profile information',
|
|
553
|
+
},
|
|
554
|
+
'is_admin': {
|
|
555
|
+
'type': ['boolean', 'null'],
|
|
556
|
+
'description': 'Whether the user is an admin',
|
|
557
|
+
},
|
|
558
|
+
'is_owner': {
|
|
559
|
+
'type': ['boolean', 'null'],
|
|
560
|
+
'description': 'Whether the user is an owner',
|
|
561
|
+
},
|
|
562
|
+
'is_primary_owner': {
|
|
563
|
+
'type': ['boolean', 'null'],
|
|
564
|
+
'description': 'Whether the user is the primary owner',
|
|
565
|
+
},
|
|
566
|
+
'is_restricted': {
|
|
567
|
+
'type': ['boolean', 'null'],
|
|
568
|
+
'description': 'Whether the user is restricted',
|
|
569
|
+
},
|
|
570
|
+
'is_ultra_restricted': {
|
|
571
|
+
'type': ['boolean', 'null'],
|
|
572
|
+
'description': 'Whether the user is ultra restricted',
|
|
573
|
+
},
|
|
574
|
+
'is_bot': {
|
|
575
|
+
'type': ['boolean', 'null'],
|
|
576
|
+
'description': 'Whether the user is a bot',
|
|
577
|
+
},
|
|
578
|
+
'is_app_user': {
|
|
579
|
+
'type': ['boolean', 'null'],
|
|
580
|
+
'description': 'Whether the user is an app user',
|
|
581
|
+
},
|
|
582
|
+
'updated': {
|
|
583
|
+
'type': ['integer', 'null'],
|
|
584
|
+
'description': 'Unix timestamp of last update',
|
|
585
|
+
},
|
|
586
|
+
'is_email_confirmed': {
|
|
587
|
+
'type': ['boolean', 'null'],
|
|
588
|
+
'description': "Whether the user's email is confirmed",
|
|
589
|
+
},
|
|
590
|
+
'who_can_share_contact_card': {
|
|
591
|
+
'type': ['string', 'null'],
|
|
592
|
+
'description': "Who can share the user's contact card",
|
|
593
|
+
},
|
|
594
|
+
},
|
|
595
|
+
'x-airbyte-entity-name': 'users',
|
|
596
|
+
'x-airbyte-stream-name': 'users',
|
|
597
|
+
},
|
|
598
|
+
),
|
|
599
|
+
EntityDefinition(
|
|
600
|
+
name='channels',
|
|
601
|
+
stream_name='channels',
|
|
602
|
+
actions=[Action.LIST, Action.GET],
|
|
603
|
+
endpoints={
|
|
604
|
+
Action.LIST: EndpointDefinition(
|
|
605
|
+
method='GET',
|
|
606
|
+
path='/conversations.list',
|
|
607
|
+
action=Action.LIST,
|
|
608
|
+
description='Returns a list of all channels in the Slack workspace',
|
|
609
|
+
query_params=[
|
|
610
|
+
'cursor',
|
|
611
|
+
'limit',
|
|
612
|
+
'types',
|
|
613
|
+
'exclude_archived',
|
|
614
|
+
],
|
|
615
|
+
query_params_schema={
|
|
616
|
+
'cursor': {'type': 'string', 'required': False},
|
|
617
|
+
'limit': {
|
|
618
|
+
'type': 'integer',
|
|
619
|
+
'required': False,
|
|
620
|
+
'default': 200,
|
|
621
|
+
},
|
|
622
|
+
'types': {
|
|
623
|
+
'type': 'string',
|
|
624
|
+
'required': False,
|
|
625
|
+
'default': 'public_channel',
|
|
626
|
+
},
|
|
627
|
+
'exclude_archived': {
|
|
628
|
+
'type': 'boolean',
|
|
629
|
+
'required': False,
|
|
630
|
+
'default': False,
|
|
631
|
+
},
|
|
632
|
+
},
|
|
633
|
+
response_schema={
|
|
634
|
+
'type': 'object',
|
|
635
|
+
'description': 'Response containing list of channels',
|
|
636
|
+
'properties': {
|
|
637
|
+
'ok': {'type': 'boolean', 'description': 'Whether the request was successful'},
|
|
638
|
+
'channels': {
|
|
639
|
+
'type': 'array',
|
|
640
|
+
'items': {
|
|
641
|
+
'type': 'object',
|
|
642
|
+
'description': 'Slack channel object',
|
|
643
|
+
'properties': {
|
|
644
|
+
'id': {'type': 'string', 'description': 'Unique channel identifier'},
|
|
645
|
+
'name': {
|
|
646
|
+
'type': ['string', 'null'],
|
|
647
|
+
'description': 'Channel name',
|
|
648
|
+
},
|
|
649
|
+
'is_channel': {
|
|
650
|
+
'type': ['boolean', 'null'],
|
|
651
|
+
'description': 'Whether this is a channel',
|
|
652
|
+
},
|
|
653
|
+
'is_group': {
|
|
654
|
+
'type': ['boolean', 'null'],
|
|
655
|
+
'description': 'Whether this is a group',
|
|
656
|
+
},
|
|
657
|
+
'is_im': {
|
|
658
|
+
'type': ['boolean', 'null'],
|
|
659
|
+
'description': 'Whether this is a direct message',
|
|
660
|
+
},
|
|
661
|
+
'is_mpim': {
|
|
662
|
+
'type': ['boolean', 'null'],
|
|
663
|
+
'description': 'Whether this is a multi-party direct message',
|
|
664
|
+
},
|
|
665
|
+
'is_private': {
|
|
666
|
+
'type': ['boolean', 'null'],
|
|
667
|
+
'description': 'Whether the channel is private',
|
|
668
|
+
},
|
|
669
|
+
'created': {
|
|
670
|
+
'type': ['integer', 'null'],
|
|
671
|
+
'description': 'Unix timestamp of channel creation',
|
|
672
|
+
},
|
|
673
|
+
'is_archived': {
|
|
674
|
+
'type': ['boolean', 'null'],
|
|
675
|
+
'description': 'Whether the channel is archived',
|
|
676
|
+
},
|
|
677
|
+
'is_general': {
|
|
678
|
+
'type': ['boolean', 'null'],
|
|
679
|
+
'description': 'Whether this is the general channel',
|
|
680
|
+
},
|
|
681
|
+
'unlinked': {
|
|
682
|
+
'type': ['integer', 'null'],
|
|
683
|
+
'description': 'Unlinked timestamp',
|
|
684
|
+
},
|
|
685
|
+
'name_normalized': {
|
|
686
|
+
'type': ['string', 'null'],
|
|
687
|
+
'description': 'Normalized channel name',
|
|
688
|
+
},
|
|
689
|
+
'is_shared': {
|
|
690
|
+
'type': ['boolean', 'null'],
|
|
691
|
+
'description': 'Whether the channel is shared',
|
|
692
|
+
},
|
|
693
|
+
'is_org_shared': {
|
|
694
|
+
'type': ['boolean', 'null'],
|
|
695
|
+
'description': 'Whether the channel is shared across the organization',
|
|
696
|
+
},
|
|
697
|
+
'is_pending_ext_shared': {
|
|
698
|
+
'type': ['boolean', 'null'],
|
|
699
|
+
'description': 'Whether external sharing is pending',
|
|
700
|
+
},
|
|
701
|
+
'pending_shared': {
|
|
702
|
+
'type': ['array', 'null'],
|
|
703
|
+
'items': {'type': 'string'},
|
|
704
|
+
'description': 'Pending shared teams',
|
|
705
|
+
},
|
|
706
|
+
'context_team_id': {
|
|
707
|
+
'type': ['string', 'null'],
|
|
708
|
+
'description': 'Context team ID',
|
|
709
|
+
},
|
|
710
|
+
'updated': {
|
|
711
|
+
'type': ['integer', 'null'],
|
|
712
|
+
'description': 'Unix timestamp of last update',
|
|
713
|
+
},
|
|
714
|
+
'creator': {
|
|
715
|
+
'type': ['string', 'null'],
|
|
716
|
+
'description': 'User ID of the channel creator',
|
|
717
|
+
},
|
|
718
|
+
'is_ext_shared': {
|
|
719
|
+
'type': ['boolean', 'null'],
|
|
720
|
+
'description': 'Whether the channel is externally shared',
|
|
721
|
+
},
|
|
722
|
+
'shared_team_ids': {
|
|
723
|
+
'type': ['array', 'null'],
|
|
724
|
+
'items': {'type': 'string'},
|
|
725
|
+
'description': 'IDs of teams the channel is shared with',
|
|
726
|
+
},
|
|
727
|
+
'pending_connected_team_ids': {
|
|
728
|
+
'type': ['array', 'null'],
|
|
729
|
+
'items': {'type': 'string'},
|
|
730
|
+
'description': 'IDs of teams with pending connection',
|
|
731
|
+
},
|
|
732
|
+
'is_member': {
|
|
733
|
+
'type': ['boolean', 'null'],
|
|
734
|
+
'description': 'Whether the authenticated user is a member',
|
|
735
|
+
},
|
|
736
|
+
'topic': {
|
|
737
|
+
'oneOf': [
|
|
738
|
+
{
|
|
739
|
+
'type': 'object',
|
|
740
|
+
'description': 'Channel topic information',
|
|
741
|
+
'properties': {
|
|
742
|
+
'value': {
|
|
743
|
+
'type': ['string', 'null'],
|
|
744
|
+
'description': 'Topic text',
|
|
745
|
+
},
|
|
746
|
+
'creator': {
|
|
747
|
+
'type': ['string', 'null'],
|
|
748
|
+
'description': 'User ID who set the topic',
|
|
749
|
+
},
|
|
750
|
+
'last_set': {
|
|
751
|
+
'type': ['integer', 'null'],
|
|
752
|
+
'description': 'Unix timestamp when topic was last set',
|
|
753
|
+
},
|
|
754
|
+
},
|
|
755
|
+
},
|
|
756
|
+
{'type': 'null'},
|
|
757
|
+
],
|
|
758
|
+
'description': 'Channel topic',
|
|
759
|
+
},
|
|
760
|
+
'purpose': {
|
|
761
|
+
'oneOf': [
|
|
762
|
+
{
|
|
763
|
+
'type': 'object',
|
|
764
|
+
'description': 'Channel purpose information',
|
|
765
|
+
'properties': {
|
|
766
|
+
'value': {
|
|
767
|
+
'type': ['string', 'null'],
|
|
768
|
+
'description': 'Purpose text',
|
|
769
|
+
},
|
|
770
|
+
'creator': {
|
|
771
|
+
'type': ['string', 'null'],
|
|
772
|
+
'description': 'User ID who set the purpose',
|
|
773
|
+
},
|
|
774
|
+
'last_set': {
|
|
775
|
+
'type': ['integer', 'null'],
|
|
776
|
+
'description': 'Unix timestamp when purpose was last set',
|
|
777
|
+
},
|
|
778
|
+
},
|
|
779
|
+
},
|
|
780
|
+
{'type': 'null'},
|
|
781
|
+
],
|
|
782
|
+
'description': 'Channel purpose',
|
|
783
|
+
},
|
|
784
|
+
'previous_names': {
|
|
785
|
+
'type': ['array', 'null'],
|
|
786
|
+
'items': {'type': 'string'},
|
|
787
|
+
'description': 'Previous channel names',
|
|
788
|
+
},
|
|
789
|
+
'num_members': {
|
|
790
|
+
'type': ['integer', 'null'],
|
|
791
|
+
'description': 'Number of members in the channel',
|
|
792
|
+
},
|
|
793
|
+
'parent_conversation': {
|
|
794
|
+
'type': ['string', 'null'],
|
|
795
|
+
'description': 'Parent conversation ID if this is a thread',
|
|
796
|
+
},
|
|
797
|
+
'properties': {
|
|
798
|
+
'type': ['object', 'null'],
|
|
799
|
+
'description': 'Additional channel properties',
|
|
800
|
+
},
|
|
801
|
+
'is_thread_only': {
|
|
802
|
+
'type': ['boolean', 'null'],
|
|
803
|
+
'description': 'Whether the channel is thread-only',
|
|
804
|
+
},
|
|
805
|
+
'is_read_only': {
|
|
806
|
+
'type': ['boolean', 'null'],
|
|
807
|
+
'description': 'Whether the channel is read-only',
|
|
808
|
+
},
|
|
809
|
+
},
|
|
810
|
+
'x-airbyte-entity-name': 'channels',
|
|
811
|
+
'x-airbyte-stream-name': 'channels',
|
|
812
|
+
},
|
|
813
|
+
},
|
|
814
|
+
'response_metadata': {
|
|
815
|
+
'type': 'object',
|
|
816
|
+
'description': 'Response metadata including pagination',
|
|
817
|
+
'properties': {
|
|
818
|
+
'next_cursor': {
|
|
819
|
+
'type': ['string', 'null'],
|
|
820
|
+
'description': 'Cursor for next page of results',
|
|
821
|
+
},
|
|
822
|
+
},
|
|
823
|
+
},
|
|
824
|
+
},
|
|
825
|
+
},
|
|
826
|
+
record_extractor='$.channels',
|
|
827
|
+
meta_extractor={'next_cursor': '$.response_metadata.next_cursor'},
|
|
828
|
+
),
|
|
829
|
+
Action.GET: EndpointDefinition(
|
|
830
|
+
method='GET',
|
|
831
|
+
path='/conversations.info',
|
|
832
|
+
action=Action.GET,
|
|
833
|
+
description='Get information about a single channel by ID',
|
|
834
|
+
query_params=['channel'],
|
|
835
|
+
query_params_schema={
|
|
836
|
+
'channel': {'type': 'string', 'required': True},
|
|
837
|
+
},
|
|
838
|
+
response_schema={
|
|
839
|
+
'type': 'object',
|
|
840
|
+
'description': 'Response containing single channel',
|
|
841
|
+
'properties': {
|
|
842
|
+
'ok': {'type': 'boolean', 'description': 'Whether the request was successful'},
|
|
843
|
+
'channel': {
|
|
844
|
+
'type': 'object',
|
|
845
|
+
'description': 'Slack channel object',
|
|
846
|
+
'properties': {
|
|
847
|
+
'id': {'type': 'string', 'description': 'Unique channel identifier'},
|
|
848
|
+
'name': {
|
|
849
|
+
'type': ['string', 'null'],
|
|
850
|
+
'description': 'Channel name',
|
|
851
|
+
},
|
|
852
|
+
'is_channel': {
|
|
853
|
+
'type': ['boolean', 'null'],
|
|
854
|
+
'description': 'Whether this is a channel',
|
|
855
|
+
},
|
|
856
|
+
'is_group': {
|
|
857
|
+
'type': ['boolean', 'null'],
|
|
858
|
+
'description': 'Whether this is a group',
|
|
859
|
+
},
|
|
860
|
+
'is_im': {
|
|
861
|
+
'type': ['boolean', 'null'],
|
|
862
|
+
'description': 'Whether this is a direct message',
|
|
863
|
+
},
|
|
864
|
+
'is_mpim': {
|
|
865
|
+
'type': ['boolean', 'null'],
|
|
866
|
+
'description': 'Whether this is a multi-party direct message',
|
|
867
|
+
},
|
|
868
|
+
'is_private': {
|
|
869
|
+
'type': ['boolean', 'null'],
|
|
870
|
+
'description': 'Whether the channel is private',
|
|
871
|
+
},
|
|
872
|
+
'created': {
|
|
873
|
+
'type': ['integer', 'null'],
|
|
874
|
+
'description': 'Unix timestamp of channel creation',
|
|
875
|
+
},
|
|
876
|
+
'is_archived': {
|
|
877
|
+
'type': ['boolean', 'null'],
|
|
878
|
+
'description': 'Whether the channel is archived',
|
|
879
|
+
},
|
|
880
|
+
'is_general': {
|
|
881
|
+
'type': ['boolean', 'null'],
|
|
882
|
+
'description': 'Whether this is the general channel',
|
|
883
|
+
},
|
|
884
|
+
'unlinked': {
|
|
885
|
+
'type': ['integer', 'null'],
|
|
886
|
+
'description': 'Unlinked timestamp',
|
|
887
|
+
},
|
|
888
|
+
'name_normalized': {
|
|
889
|
+
'type': ['string', 'null'],
|
|
890
|
+
'description': 'Normalized channel name',
|
|
891
|
+
},
|
|
892
|
+
'is_shared': {
|
|
893
|
+
'type': ['boolean', 'null'],
|
|
894
|
+
'description': 'Whether the channel is shared',
|
|
895
|
+
},
|
|
896
|
+
'is_org_shared': {
|
|
897
|
+
'type': ['boolean', 'null'],
|
|
898
|
+
'description': 'Whether the channel is shared across the organization',
|
|
899
|
+
},
|
|
900
|
+
'is_pending_ext_shared': {
|
|
901
|
+
'type': ['boolean', 'null'],
|
|
902
|
+
'description': 'Whether external sharing is pending',
|
|
903
|
+
},
|
|
904
|
+
'pending_shared': {
|
|
905
|
+
'type': ['array', 'null'],
|
|
906
|
+
'items': {'type': 'string'},
|
|
907
|
+
'description': 'Pending shared teams',
|
|
908
|
+
},
|
|
909
|
+
'context_team_id': {
|
|
910
|
+
'type': ['string', 'null'],
|
|
911
|
+
'description': 'Context team ID',
|
|
912
|
+
},
|
|
913
|
+
'updated': {
|
|
914
|
+
'type': ['integer', 'null'],
|
|
915
|
+
'description': 'Unix timestamp of last update',
|
|
916
|
+
},
|
|
917
|
+
'creator': {
|
|
918
|
+
'type': ['string', 'null'],
|
|
919
|
+
'description': 'User ID of the channel creator',
|
|
920
|
+
},
|
|
921
|
+
'is_ext_shared': {
|
|
922
|
+
'type': ['boolean', 'null'],
|
|
923
|
+
'description': 'Whether the channel is externally shared',
|
|
924
|
+
},
|
|
925
|
+
'shared_team_ids': {
|
|
926
|
+
'type': ['array', 'null'],
|
|
927
|
+
'items': {'type': 'string'},
|
|
928
|
+
'description': 'IDs of teams the channel is shared with',
|
|
929
|
+
},
|
|
930
|
+
'pending_connected_team_ids': {
|
|
931
|
+
'type': ['array', 'null'],
|
|
932
|
+
'items': {'type': 'string'},
|
|
933
|
+
'description': 'IDs of teams with pending connection',
|
|
934
|
+
},
|
|
935
|
+
'is_member': {
|
|
936
|
+
'type': ['boolean', 'null'],
|
|
937
|
+
'description': 'Whether the authenticated user is a member',
|
|
938
|
+
},
|
|
939
|
+
'topic': {
|
|
940
|
+
'oneOf': [
|
|
941
|
+
{
|
|
942
|
+
'type': 'object',
|
|
943
|
+
'description': 'Channel topic information',
|
|
944
|
+
'properties': {
|
|
945
|
+
'value': {
|
|
946
|
+
'type': ['string', 'null'],
|
|
947
|
+
'description': 'Topic text',
|
|
948
|
+
},
|
|
949
|
+
'creator': {
|
|
950
|
+
'type': ['string', 'null'],
|
|
951
|
+
'description': 'User ID who set the topic',
|
|
952
|
+
},
|
|
953
|
+
'last_set': {
|
|
954
|
+
'type': ['integer', 'null'],
|
|
955
|
+
'description': 'Unix timestamp when topic was last set',
|
|
956
|
+
},
|
|
957
|
+
},
|
|
958
|
+
},
|
|
959
|
+
{'type': 'null'},
|
|
960
|
+
],
|
|
961
|
+
'description': 'Channel topic',
|
|
962
|
+
},
|
|
963
|
+
'purpose': {
|
|
964
|
+
'oneOf': [
|
|
965
|
+
{
|
|
966
|
+
'type': 'object',
|
|
967
|
+
'description': 'Channel purpose information',
|
|
968
|
+
'properties': {
|
|
969
|
+
'value': {
|
|
970
|
+
'type': ['string', 'null'],
|
|
971
|
+
'description': 'Purpose text',
|
|
972
|
+
},
|
|
973
|
+
'creator': {
|
|
974
|
+
'type': ['string', 'null'],
|
|
975
|
+
'description': 'User ID who set the purpose',
|
|
976
|
+
},
|
|
977
|
+
'last_set': {
|
|
978
|
+
'type': ['integer', 'null'],
|
|
979
|
+
'description': 'Unix timestamp when purpose was last set',
|
|
980
|
+
},
|
|
981
|
+
},
|
|
982
|
+
},
|
|
983
|
+
{'type': 'null'},
|
|
984
|
+
],
|
|
985
|
+
'description': 'Channel purpose',
|
|
986
|
+
},
|
|
987
|
+
'previous_names': {
|
|
988
|
+
'type': ['array', 'null'],
|
|
989
|
+
'items': {'type': 'string'},
|
|
990
|
+
'description': 'Previous channel names',
|
|
991
|
+
},
|
|
992
|
+
'num_members': {
|
|
993
|
+
'type': ['integer', 'null'],
|
|
994
|
+
'description': 'Number of members in the channel',
|
|
995
|
+
},
|
|
996
|
+
'parent_conversation': {
|
|
997
|
+
'type': ['string', 'null'],
|
|
998
|
+
'description': 'Parent conversation ID if this is a thread',
|
|
999
|
+
},
|
|
1000
|
+
'properties': {
|
|
1001
|
+
'type': ['object', 'null'],
|
|
1002
|
+
'description': 'Additional channel properties',
|
|
1003
|
+
},
|
|
1004
|
+
'is_thread_only': {
|
|
1005
|
+
'type': ['boolean', 'null'],
|
|
1006
|
+
'description': 'Whether the channel is thread-only',
|
|
1007
|
+
},
|
|
1008
|
+
'is_read_only': {
|
|
1009
|
+
'type': ['boolean', 'null'],
|
|
1010
|
+
'description': 'Whether the channel is read-only',
|
|
1011
|
+
},
|
|
1012
|
+
},
|
|
1013
|
+
'x-airbyte-entity-name': 'channels',
|
|
1014
|
+
'x-airbyte-stream-name': 'channels',
|
|
1015
|
+
},
|
|
1016
|
+
},
|
|
1017
|
+
},
|
|
1018
|
+
record_extractor='$.channel',
|
|
1019
|
+
),
|
|
1020
|
+
},
|
|
1021
|
+
entity_schema={
|
|
1022
|
+
'type': 'object',
|
|
1023
|
+
'description': 'Slack channel object',
|
|
1024
|
+
'properties': {
|
|
1025
|
+
'id': {'type': 'string', 'description': 'Unique channel identifier'},
|
|
1026
|
+
'name': {
|
|
1027
|
+
'type': ['string', 'null'],
|
|
1028
|
+
'description': 'Channel name',
|
|
1029
|
+
},
|
|
1030
|
+
'is_channel': {
|
|
1031
|
+
'type': ['boolean', 'null'],
|
|
1032
|
+
'description': 'Whether this is a channel',
|
|
1033
|
+
},
|
|
1034
|
+
'is_group': {
|
|
1035
|
+
'type': ['boolean', 'null'],
|
|
1036
|
+
'description': 'Whether this is a group',
|
|
1037
|
+
},
|
|
1038
|
+
'is_im': {
|
|
1039
|
+
'type': ['boolean', 'null'],
|
|
1040
|
+
'description': 'Whether this is a direct message',
|
|
1041
|
+
},
|
|
1042
|
+
'is_mpim': {
|
|
1043
|
+
'type': ['boolean', 'null'],
|
|
1044
|
+
'description': 'Whether this is a multi-party direct message',
|
|
1045
|
+
},
|
|
1046
|
+
'is_private': {
|
|
1047
|
+
'type': ['boolean', 'null'],
|
|
1048
|
+
'description': 'Whether the channel is private',
|
|
1049
|
+
},
|
|
1050
|
+
'created': {
|
|
1051
|
+
'type': ['integer', 'null'],
|
|
1052
|
+
'description': 'Unix timestamp of channel creation',
|
|
1053
|
+
},
|
|
1054
|
+
'is_archived': {
|
|
1055
|
+
'type': ['boolean', 'null'],
|
|
1056
|
+
'description': 'Whether the channel is archived',
|
|
1057
|
+
},
|
|
1058
|
+
'is_general': {
|
|
1059
|
+
'type': ['boolean', 'null'],
|
|
1060
|
+
'description': 'Whether this is the general channel',
|
|
1061
|
+
},
|
|
1062
|
+
'unlinked': {
|
|
1063
|
+
'type': ['integer', 'null'],
|
|
1064
|
+
'description': 'Unlinked timestamp',
|
|
1065
|
+
},
|
|
1066
|
+
'name_normalized': {
|
|
1067
|
+
'type': ['string', 'null'],
|
|
1068
|
+
'description': 'Normalized channel name',
|
|
1069
|
+
},
|
|
1070
|
+
'is_shared': {
|
|
1071
|
+
'type': ['boolean', 'null'],
|
|
1072
|
+
'description': 'Whether the channel is shared',
|
|
1073
|
+
},
|
|
1074
|
+
'is_org_shared': {
|
|
1075
|
+
'type': ['boolean', 'null'],
|
|
1076
|
+
'description': 'Whether the channel is shared across the organization',
|
|
1077
|
+
},
|
|
1078
|
+
'is_pending_ext_shared': {
|
|
1079
|
+
'type': ['boolean', 'null'],
|
|
1080
|
+
'description': 'Whether external sharing is pending',
|
|
1081
|
+
},
|
|
1082
|
+
'pending_shared': {
|
|
1083
|
+
'type': ['array', 'null'],
|
|
1084
|
+
'items': {'type': 'string'},
|
|
1085
|
+
'description': 'Pending shared teams',
|
|
1086
|
+
},
|
|
1087
|
+
'context_team_id': {
|
|
1088
|
+
'type': ['string', 'null'],
|
|
1089
|
+
'description': 'Context team ID',
|
|
1090
|
+
},
|
|
1091
|
+
'updated': {
|
|
1092
|
+
'type': ['integer', 'null'],
|
|
1093
|
+
'description': 'Unix timestamp of last update',
|
|
1094
|
+
},
|
|
1095
|
+
'creator': {
|
|
1096
|
+
'type': ['string', 'null'],
|
|
1097
|
+
'description': 'User ID of the channel creator',
|
|
1098
|
+
},
|
|
1099
|
+
'is_ext_shared': {
|
|
1100
|
+
'type': ['boolean', 'null'],
|
|
1101
|
+
'description': 'Whether the channel is externally shared',
|
|
1102
|
+
},
|
|
1103
|
+
'shared_team_ids': {
|
|
1104
|
+
'type': ['array', 'null'],
|
|
1105
|
+
'items': {'type': 'string'},
|
|
1106
|
+
'description': 'IDs of teams the channel is shared with',
|
|
1107
|
+
},
|
|
1108
|
+
'pending_connected_team_ids': {
|
|
1109
|
+
'type': ['array', 'null'],
|
|
1110
|
+
'items': {'type': 'string'},
|
|
1111
|
+
'description': 'IDs of teams with pending connection',
|
|
1112
|
+
},
|
|
1113
|
+
'is_member': {
|
|
1114
|
+
'type': ['boolean', 'null'],
|
|
1115
|
+
'description': 'Whether the authenticated user is a member',
|
|
1116
|
+
},
|
|
1117
|
+
'topic': {
|
|
1118
|
+
'oneOf': [
|
|
1119
|
+
{'$ref': '#/components/schemas/ChannelTopic'},
|
|
1120
|
+
{'type': 'null'},
|
|
1121
|
+
],
|
|
1122
|
+
'description': 'Channel topic',
|
|
1123
|
+
},
|
|
1124
|
+
'purpose': {
|
|
1125
|
+
'oneOf': [
|
|
1126
|
+
{'$ref': '#/components/schemas/ChannelPurpose'},
|
|
1127
|
+
{'type': 'null'},
|
|
1128
|
+
],
|
|
1129
|
+
'description': 'Channel purpose',
|
|
1130
|
+
},
|
|
1131
|
+
'previous_names': {
|
|
1132
|
+
'type': ['array', 'null'],
|
|
1133
|
+
'items': {'type': 'string'},
|
|
1134
|
+
'description': 'Previous channel names',
|
|
1135
|
+
},
|
|
1136
|
+
'num_members': {
|
|
1137
|
+
'type': ['integer', 'null'],
|
|
1138
|
+
'description': 'Number of members in the channel',
|
|
1139
|
+
},
|
|
1140
|
+
'parent_conversation': {
|
|
1141
|
+
'type': ['string', 'null'],
|
|
1142
|
+
'description': 'Parent conversation ID if this is a thread',
|
|
1143
|
+
},
|
|
1144
|
+
'properties': {
|
|
1145
|
+
'type': ['object', 'null'],
|
|
1146
|
+
'description': 'Additional channel properties',
|
|
1147
|
+
},
|
|
1148
|
+
'is_thread_only': {
|
|
1149
|
+
'type': ['boolean', 'null'],
|
|
1150
|
+
'description': 'Whether the channel is thread-only',
|
|
1151
|
+
},
|
|
1152
|
+
'is_read_only': {
|
|
1153
|
+
'type': ['boolean', 'null'],
|
|
1154
|
+
'description': 'Whether the channel is read-only',
|
|
1155
|
+
},
|
|
1156
|
+
},
|
|
1157
|
+
'x-airbyte-entity-name': 'channels',
|
|
1158
|
+
'x-airbyte-stream-name': 'channels',
|
|
1159
|
+
},
|
|
1160
|
+
),
|
|
1161
|
+
EntityDefinition(
|
|
1162
|
+
name='channel_messages',
|
|
1163
|
+
stream_name='channel_messages',
|
|
1164
|
+
actions=[Action.LIST],
|
|
1165
|
+
endpoints={
|
|
1166
|
+
Action.LIST: EndpointDefinition(
|
|
1167
|
+
method='GET',
|
|
1168
|
+
path='/conversations.history',
|
|
1169
|
+
action=Action.LIST,
|
|
1170
|
+
description='Returns messages from a channel',
|
|
1171
|
+
query_params=[
|
|
1172
|
+
'channel',
|
|
1173
|
+
'cursor',
|
|
1174
|
+
'limit',
|
|
1175
|
+
'oldest',
|
|
1176
|
+
'latest',
|
|
1177
|
+
'inclusive',
|
|
1178
|
+
],
|
|
1179
|
+
query_params_schema={
|
|
1180
|
+
'channel': {'type': 'string', 'required': True},
|
|
1181
|
+
'cursor': {'type': 'string', 'required': False},
|
|
1182
|
+
'limit': {
|
|
1183
|
+
'type': 'integer',
|
|
1184
|
+
'required': False,
|
|
1185
|
+
'default': 100,
|
|
1186
|
+
},
|
|
1187
|
+
'oldest': {'type': 'string', 'required': False},
|
|
1188
|
+
'latest': {'type': 'string', 'required': False},
|
|
1189
|
+
'inclusive': {
|
|
1190
|
+
'type': 'boolean',
|
|
1191
|
+
'required': False,
|
|
1192
|
+
'default': False,
|
|
1193
|
+
},
|
|
1194
|
+
},
|
|
1195
|
+
response_schema={
|
|
1196
|
+
'type': 'object',
|
|
1197
|
+
'description': 'Response containing list of messages',
|
|
1198
|
+
'properties': {
|
|
1199
|
+
'ok': {'type': 'boolean', 'description': 'Whether the request was successful'},
|
|
1200
|
+
'messages': {
|
|
1201
|
+
'type': 'array',
|
|
1202
|
+
'items': {
|
|
1203
|
+
'type': 'object',
|
|
1204
|
+
'description': 'Slack message object',
|
|
1205
|
+
'properties': {
|
|
1206
|
+
'type': {
|
|
1207
|
+
'type': ['string', 'null'],
|
|
1208
|
+
'description': 'Message type',
|
|
1209
|
+
},
|
|
1210
|
+
'subtype': {
|
|
1211
|
+
'type': ['string', 'null'],
|
|
1212
|
+
'description': 'Message subtype',
|
|
1213
|
+
},
|
|
1214
|
+
'ts': {'type': 'string', 'description': 'Message timestamp (unique identifier)'},
|
|
1215
|
+
'user': {
|
|
1216
|
+
'type': ['string', 'null'],
|
|
1217
|
+
'description': 'User ID who sent the message',
|
|
1218
|
+
},
|
|
1219
|
+
'text': {
|
|
1220
|
+
'type': ['string', 'null'],
|
|
1221
|
+
'description': 'Message text content',
|
|
1222
|
+
},
|
|
1223
|
+
'thread_ts': {
|
|
1224
|
+
'type': ['string', 'null'],
|
|
1225
|
+
'description': 'Thread parent timestamp',
|
|
1226
|
+
},
|
|
1227
|
+
'reply_count': {
|
|
1228
|
+
'type': ['integer', 'null'],
|
|
1229
|
+
'description': 'Number of replies in thread',
|
|
1230
|
+
},
|
|
1231
|
+
'reply_users_count': {
|
|
1232
|
+
'type': ['integer', 'null'],
|
|
1233
|
+
'description': 'Number of unique users who replied',
|
|
1234
|
+
},
|
|
1235
|
+
'latest_reply': {
|
|
1236
|
+
'type': ['string', 'null'],
|
|
1237
|
+
'description': 'Timestamp of latest reply',
|
|
1238
|
+
},
|
|
1239
|
+
'reply_users': {
|
|
1240
|
+
'type': ['array', 'null'],
|
|
1241
|
+
'items': {'type': 'string'},
|
|
1242
|
+
'description': 'User IDs who replied to the thread',
|
|
1243
|
+
},
|
|
1244
|
+
'is_locked': {
|
|
1245
|
+
'type': ['boolean', 'null'],
|
|
1246
|
+
'description': 'Whether the thread is locked',
|
|
1247
|
+
},
|
|
1248
|
+
'subscribed': {
|
|
1249
|
+
'type': ['boolean', 'null'],
|
|
1250
|
+
'description': 'Whether the user is subscribed to the thread',
|
|
1251
|
+
},
|
|
1252
|
+
'reactions': {
|
|
1253
|
+
'type': ['array', 'null'],
|
|
1254
|
+
'items': {
|
|
1255
|
+
'type': 'object',
|
|
1256
|
+
'description': 'Message reaction',
|
|
1257
|
+
'properties': {
|
|
1258
|
+
'name': {
|
|
1259
|
+
'type': ['string', 'null'],
|
|
1260
|
+
'description': 'Reaction emoji name',
|
|
1261
|
+
},
|
|
1262
|
+
'users': {
|
|
1263
|
+
'type': ['array', 'null'],
|
|
1264
|
+
'items': {'type': 'string'},
|
|
1265
|
+
'description': 'User IDs who reacted',
|
|
1266
|
+
},
|
|
1267
|
+
'count': {
|
|
1268
|
+
'type': ['integer', 'null'],
|
|
1269
|
+
'description': 'Number of reactions',
|
|
1270
|
+
},
|
|
1271
|
+
},
|
|
1272
|
+
},
|
|
1273
|
+
'description': 'Reactions to the message',
|
|
1274
|
+
},
|
|
1275
|
+
'attachments': {
|
|
1276
|
+
'type': ['array', 'null'],
|
|
1277
|
+
'items': {
|
|
1278
|
+
'type': 'object',
|
|
1279
|
+
'description': 'Message attachment',
|
|
1280
|
+
'properties': {
|
|
1281
|
+
'id': {
|
|
1282
|
+
'type': ['integer', 'null'],
|
|
1283
|
+
'description': 'Attachment ID',
|
|
1284
|
+
},
|
|
1285
|
+
'fallback': {
|
|
1286
|
+
'type': ['string', 'null'],
|
|
1287
|
+
'description': 'Fallback text',
|
|
1288
|
+
},
|
|
1289
|
+
'color': {
|
|
1290
|
+
'type': ['string', 'null'],
|
|
1291
|
+
'description': 'Attachment color',
|
|
1292
|
+
},
|
|
1293
|
+
'pretext': {
|
|
1294
|
+
'type': ['string', 'null'],
|
|
1295
|
+
'description': 'Pretext',
|
|
1296
|
+
},
|
|
1297
|
+
'author_name': {
|
|
1298
|
+
'type': ['string', 'null'],
|
|
1299
|
+
'description': 'Author name',
|
|
1300
|
+
},
|
|
1301
|
+
'author_link': {
|
|
1302
|
+
'type': ['string', 'null'],
|
|
1303
|
+
'description': 'Author link',
|
|
1304
|
+
},
|
|
1305
|
+
'author_icon': {
|
|
1306
|
+
'type': ['string', 'null'],
|
|
1307
|
+
'description': 'Author icon URL',
|
|
1308
|
+
},
|
|
1309
|
+
'title': {
|
|
1310
|
+
'type': ['string', 'null'],
|
|
1311
|
+
'description': 'Attachment title',
|
|
1312
|
+
},
|
|
1313
|
+
'title_link': {
|
|
1314
|
+
'type': ['string', 'null'],
|
|
1315
|
+
'description': 'Title link',
|
|
1316
|
+
},
|
|
1317
|
+
'text': {
|
|
1318
|
+
'type': ['string', 'null'],
|
|
1319
|
+
'description': 'Attachment text',
|
|
1320
|
+
},
|
|
1321
|
+
'fields': {
|
|
1322
|
+
'type': ['array', 'null'],
|
|
1323
|
+
'items': {'type': 'object'},
|
|
1324
|
+
'description': 'Attachment fields',
|
|
1325
|
+
},
|
|
1326
|
+
'image_url': {
|
|
1327
|
+
'type': ['string', 'null'],
|
|
1328
|
+
'description': 'Image URL',
|
|
1329
|
+
},
|
|
1330
|
+
'thumb_url': {
|
|
1331
|
+
'type': ['string', 'null'],
|
|
1332
|
+
'description': 'Thumbnail URL',
|
|
1333
|
+
},
|
|
1334
|
+
'footer': {
|
|
1335
|
+
'type': ['string', 'null'],
|
|
1336
|
+
'description': 'Footer text',
|
|
1337
|
+
},
|
|
1338
|
+
'footer_icon': {
|
|
1339
|
+
'type': ['string', 'null'],
|
|
1340
|
+
'description': 'Footer icon URL',
|
|
1341
|
+
},
|
|
1342
|
+
'ts': {
|
|
1343
|
+
'type': ['string', 'integer', 'null'],
|
|
1344
|
+
'description': 'Timestamp',
|
|
1345
|
+
},
|
|
1346
|
+
},
|
|
1347
|
+
},
|
|
1348
|
+
'description': 'Message attachments',
|
|
1349
|
+
},
|
|
1350
|
+
'blocks': {
|
|
1351
|
+
'type': ['array', 'null'],
|
|
1352
|
+
'items': {'type': 'object'},
|
|
1353
|
+
'description': 'Block kit blocks',
|
|
1354
|
+
},
|
|
1355
|
+
'files': {
|
|
1356
|
+
'type': ['array', 'null'],
|
|
1357
|
+
'items': {
|
|
1358
|
+
'type': 'object',
|
|
1359
|
+
'description': 'File object',
|
|
1360
|
+
'properties': {
|
|
1361
|
+
'id': {
|
|
1362
|
+
'type': ['string', 'null'],
|
|
1363
|
+
'description': 'File ID',
|
|
1364
|
+
},
|
|
1365
|
+
'name': {
|
|
1366
|
+
'type': ['string', 'null'],
|
|
1367
|
+
'description': 'File name',
|
|
1368
|
+
},
|
|
1369
|
+
'title': {
|
|
1370
|
+
'type': ['string', 'null'],
|
|
1371
|
+
'description': 'File title',
|
|
1372
|
+
},
|
|
1373
|
+
'mimetype': {
|
|
1374
|
+
'type': ['string', 'null'],
|
|
1375
|
+
'description': 'MIME type',
|
|
1376
|
+
},
|
|
1377
|
+
'filetype': {
|
|
1378
|
+
'type': ['string', 'null'],
|
|
1379
|
+
'description': 'File type',
|
|
1380
|
+
},
|
|
1381
|
+
'pretty_type': {
|
|
1382
|
+
'type': ['string', 'null'],
|
|
1383
|
+
'description': 'Human-readable file type',
|
|
1384
|
+
},
|
|
1385
|
+
'user': {
|
|
1386
|
+
'type': ['string', 'null'],
|
|
1387
|
+
'description': 'User ID who uploaded the file',
|
|
1388
|
+
},
|
|
1389
|
+
'size': {
|
|
1390
|
+
'type': ['integer', 'null'],
|
|
1391
|
+
'description': 'File size in bytes',
|
|
1392
|
+
},
|
|
1393
|
+
'mode': {
|
|
1394
|
+
'type': ['string', 'null'],
|
|
1395
|
+
'description': 'File mode',
|
|
1396
|
+
},
|
|
1397
|
+
'is_external': {
|
|
1398
|
+
'type': ['boolean', 'null'],
|
|
1399
|
+
'description': 'Whether the file is external',
|
|
1400
|
+
},
|
|
1401
|
+
'external_type': {
|
|
1402
|
+
'type': ['string', 'null'],
|
|
1403
|
+
'description': 'External file type',
|
|
1404
|
+
},
|
|
1405
|
+
'is_public': {
|
|
1406
|
+
'type': ['boolean', 'null'],
|
|
1407
|
+
'description': 'Whether the file is public',
|
|
1408
|
+
},
|
|
1409
|
+
'public_url_shared': {
|
|
1410
|
+
'type': ['boolean', 'null'],
|
|
1411
|
+
'description': 'Whether the public URL is shared',
|
|
1412
|
+
},
|
|
1413
|
+
'url_private': {
|
|
1414
|
+
'type': ['string', 'null'],
|
|
1415
|
+
'description': 'Private URL',
|
|
1416
|
+
},
|
|
1417
|
+
'url_private_download': {
|
|
1418
|
+
'type': ['string', 'null'],
|
|
1419
|
+
'description': 'Private download URL',
|
|
1420
|
+
},
|
|
1421
|
+
'permalink': {
|
|
1422
|
+
'type': ['string', 'null'],
|
|
1423
|
+
'description': 'Permalink',
|
|
1424
|
+
},
|
|
1425
|
+
'permalink_public': {
|
|
1426
|
+
'type': ['string', 'null'],
|
|
1427
|
+
'description': 'Public permalink',
|
|
1428
|
+
},
|
|
1429
|
+
'created': {
|
|
1430
|
+
'type': ['integer', 'null'],
|
|
1431
|
+
'description': 'Unix timestamp of creation',
|
|
1432
|
+
},
|
|
1433
|
+
'timestamp': {
|
|
1434
|
+
'type': ['integer', 'null'],
|
|
1435
|
+
'description': 'Unix timestamp',
|
|
1436
|
+
},
|
|
1437
|
+
},
|
|
1438
|
+
},
|
|
1439
|
+
'description': 'Files attached to the message',
|
|
1440
|
+
},
|
|
1441
|
+
'edited': {
|
|
1442
|
+
'oneOf': [
|
|
1443
|
+
{
|
|
1444
|
+
'type': 'object',
|
|
1445
|
+
'description': 'Message edit information',
|
|
1446
|
+
'properties': {
|
|
1447
|
+
'user': {
|
|
1448
|
+
'type': ['string', 'null'],
|
|
1449
|
+
'description': 'User ID who edited the message',
|
|
1450
|
+
},
|
|
1451
|
+
'ts': {
|
|
1452
|
+
'type': ['string', 'null'],
|
|
1453
|
+
'description': 'Edit timestamp',
|
|
1454
|
+
},
|
|
1455
|
+
},
|
|
1456
|
+
},
|
|
1457
|
+
{'type': 'null'},
|
|
1458
|
+
],
|
|
1459
|
+
'description': 'Edit information',
|
|
1460
|
+
},
|
|
1461
|
+
'bot_id': {
|
|
1462
|
+
'type': ['string', 'null'],
|
|
1463
|
+
'description': 'Bot ID if message was sent by a bot',
|
|
1464
|
+
},
|
|
1465
|
+
'bot_profile': {
|
|
1466
|
+
'oneOf': [
|
|
1467
|
+
{
|
|
1468
|
+
'type': 'object',
|
|
1469
|
+
'description': 'Bot profile information',
|
|
1470
|
+
'properties': {
|
|
1471
|
+
'id': {
|
|
1472
|
+
'type': ['string', 'null'],
|
|
1473
|
+
'description': 'Bot ID',
|
|
1474
|
+
},
|
|
1475
|
+
'deleted': {
|
|
1476
|
+
'type': ['boolean', 'null'],
|
|
1477
|
+
'description': 'Whether the bot is deleted',
|
|
1478
|
+
},
|
|
1479
|
+
'name': {
|
|
1480
|
+
'type': ['string', 'null'],
|
|
1481
|
+
'description': 'Bot name',
|
|
1482
|
+
},
|
|
1483
|
+
'updated': {
|
|
1484
|
+
'type': ['integer', 'null'],
|
|
1485
|
+
'description': 'Unix timestamp of last update',
|
|
1486
|
+
},
|
|
1487
|
+
'app_id': {
|
|
1488
|
+
'type': ['string', 'null'],
|
|
1489
|
+
'description': 'App ID',
|
|
1490
|
+
},
|
|
1491
|
+
'team_id': {
|
|
1492
|
+
'type': ['string', 'null'],
|
|
1493
|
+
'description': 'Team ID',
|
|
1494
|
+
},
|
|
1495
|
+
},
|
|
1496
|
+
},
|
|
1497
|
+
{'type': 'null'},
|
|
1498
|
+
],
|
|
1499
|
+
'description': 'Bot profile information',
|
|
1500
|
+
},
|
|
1501
|
+
'app_id': {
|
|
1502
|
+
'type': ['string', 'null'],
|
|
1503
|
+
'description': 'App ID if message was sent by an app',
|
|
1504
|
+
},
|
|
1505
|
+
'team': {
|
|
1506
|
+
'type': ['string', 'null'],
|
|
1507
|
+
'description': 'Team ID',
|
|
1508
|
+
},
|
|
1509
|
+
},
|
|
1510
|
+
'x-airbyte-entity-name': 'channel_messages',
|
|
1511
|
+
'x-airbyte-stream-name': 'channel_messages',
|
|
1512
|
+
},
|
|
1513
|
+
},
|
|
1514
|
+
'has_more': {
|
|
1515
|
+
'type': ['boolean', 'null'],
|
|
1516
|
+
'description': 'Whether there are more messages',
|
|
1517
|
+
},
|
|
1518
|
+
'pin_count': {
|
|
1519
|
+
'type': ['integer', 'null'],
|
|
1520
|
+
'description': 'Number of pinned messages',
|
|
1521
|
+
},
|
|
1522
|
+
'response_metadata': {
|
|
1523
|
+
'type': 'object',
|
|
1524
|
+
'description': 'Response metadata including pagination',
|
|
1525
|
+
'properties': {
|
|
1526
|
+
'next_cursor': {
|
|
1527
|
+
'type': ['string', 'null'],
|
|
1528
|
+
'description': 'Cursor for next page of results',
|
|
1529
|
+
},
|
|
1530
|
+
},
|
|
1531
|
+
},
|
|
1532
|
+
},
|
|
1533
|
+
},
|
|
1534
|
+
record_extractor='$.messages',
|
|
1535
|
+
meta_extractor={'next_cursor': '$.response_metadata.next_cursor', 'has_more': '$.has_more'},
|
|
1536
|
+
),
|
|
1537
|
+
},
|
|
1538
|
+
entity_schema={
|
|
1539
|
+
'type': 'object',
|
|
1540
|
+
'description': 'Slack message object',
|
|
1541
|
+
'properties': {
|
|
1542
|
+
'type': {
|
|
1543
|
+
'type': ['string', 'null'],
|
|
1544
|
+
'description': 'Message type',
|
|
1545
|
+
},
|
|
1546
|
+
'subtype': {
|
|
1547
|
+
'type': ['string', 'null'],
|
|
1548
|
+
'description': 'Message subtype',
|
|
1549
|
+
},
|
|
1550
|
+
'ts': {'type': 'string', 'description': 'Message timestamp (unique identifier)'},
|
|
1551
|
+
'user': {
|
|
1552
|
+
'type': ['string', 'null'],
|
|
1553
|
+
'description': 'User ID who sent the message',
|
|
1554
|
+
},
|
|
1555
|
+
'text': {
|
|
1556
|
+
'type': ['string', 'null'],
|
|
1557
|
+
'description': 'Message text content',
|
|
1558
|
+
},
|
|
1559
|
+
'thread_ts': {
|
|
1560
|
+
'type': ['string', 'null'],
|
|
1561
|
+
'description': 'Thread parent timestamp',
|
|
1562
|
+
},
|
|
1563
|
+
'reply_count': {
|
|
1564
|
+
'type': ['integer', 'null'],
|
|
1565
|
+
'description': 'Number of replies in thread',
|
|
1566
|
+
},
|
|
1567
|
+
'reply_users_count': {
|
|
1568
|
+
'type': ['integer', 'null'],
|
|
1569
|
+
'description': 'Number of unique users who replied',
|
|
1570
|
+
},
|
|
1571
|
+
'latest_reply': {
|
|
1572
|
+
'type': ['string', 'null'],
|
|
1573
|
+
'description': 'Timestamp of latest reply',
|
|
1574
|
+
},
|
|
1575
|
+
'reply_users': {
|
|
1576
|
+
'type': ['array', 'null'],
|
|
1577
|
+
'items': {'type': 'string'},
|
|
1578
|
+
'description': 'User IDs who replied to the thread',
|
|
1579
|
+
},
|
|
1580
|
+
'is_locked': {
|
|
1581
|
+
'type': ['boolean', 'null'],
|
|
1582
|
+
'description': 'Whether the thread is locked',
|
|
1583
|
+
},
|
|
1584
|
+
'subscribed': {
|
|
1585
|
+
'type': ['boolean', 'null'],
|
|
1586
|
+
'description': 'Whether the user is subscribed to the thread',
|
|
1587
|
+
},
|
|
1588
|
+
'reactions': {
|
|
1589
|
+
'type': ['array', 'null'],
|
|
1590
|
+
'items': {'$ref': '#/components/schemas/Reaction'},
|
|
1591
|
+
'description': 'Reactions to the message',
|
|
1592
|
+
},
|
|
1593
|
+
'attachments': {
|
|
1594
|
+
'type': ['array', 'null'],
|
|
1595
|
+
'items': {'$ref': '#/components/schemas/Attachment'},
|
|
1596
|
+
'description': 'Message attachments',
|
|
1597
|
+
},
|
|
1598
|
+
'blocks': {
|
|
1599
|
+
'type': ['array', 'null'],
|
|
1600
|
+
'items': {'type': 'object'},
|
|
1601
|
+
'description': 'Block kit blocks',
|
|
1602
|
+
},
|
|
1603
|
+
'files': {
|
|
1604
|
+
'type': ['array', 'null'],
|
|
1605
|
+
'items': {'$ref': '#/components/schemas/File'},
|
|
1606
|
+
'description': 'Files attached to the message',
|
|
1607
|
+
},
|
|
1608
|
+
'edited': {
|
|
1609
|
+
'oneOf': [
|
|
1610
|
+
{'$ref': '#/components/schemas/EditedInfo'},
|
|
1611
|
+
{'type': 'null'},
|
|
1612
|
+
],
|
|
1613
|
+
'description': 'Edit information',
|
|
1614
|
+
},
|
|
1615
|
+
'bot_id': {
|
|
1616
|
+
'type': ['string', 'null'],
|
|
1617
|
+
'description': 'Bot ID if message was sent by a bot',
|
|
1618
|
+
},
|
|
1619
|
+
'bot_profile': {
|
|
1620
|
+
'oneOf': [
|
|
1621
|
+
{'$ref': '#/components/schemas/BotProfile'},
|
|
1622
|
+
{'type': 'null'},
|
|
1623
|
+
],
|
|
1624
|
+
'description': 'Bot profile information',
|
|
1625
|
+
},
|
|
1626
|
+
'app_id': {
|
|
1627
|
+
'type': ['string', 'null'],
|
|
1628
|
+
'description': 'App ID if message was sent by an app',
|
|
1629
|
+
},
|
|
1630
|
+
'team': {
|
|
1631
|
+
'type': ['string', 'null'],
|
|
1632
|
+
'description': 'Team ID',
|
|
1633
|
+
},
|
|
1634
|
+
},
|
|
1635
|
+
'x-airbyte-entity-name': 'channel_messages',
|
|
1636
|
+
'x-airbyte-stream-name': 'channel_messages',
|
|
1637
|
+
},
|
|
1638
|
+
),
|
|
1639
|
+
EntityDefinition(
|
|
1640
|
+
name='threads',
|
|
1641
|
+
stream_name='threads',
|
|
1642
|
+
actions=[Action.LIST],
|
|
1643
|
+
endpoints={
|
|
1644
|
+
Action.LIST: EndpointDefinition(
|
|
1645
|
+
method='GET',
|
|
1646
|
+
path='/conversations.replies',
|
|
1647
|
+
action=Action.LIST,
|
|
1648
|
+
description='Returns messages in a thread (thread replies from conversations.replies endpoint)',
|
|
1649
|
+
query_params=[
|
|
1650
|
+
'channel',
|
|
1651
|
+
'ts',
|
|
1652
|
+
'cursor',
|
|
1653
|
+
'limit',
|
|
1654
|
+
'oldest',
|
|
1655
|
+
'latest',
|
|
1656
|
+
'inclusive',
|
|
1657
|
+
],
|
|
1658
|
+
query_params_schema={
|
|
1659
|
+
'channel': {'type': 'string', 'required': True},
|
|
1660
|
+
'ts': {'type': 'string', 'required': False},
|
|
1661
|
+
'cursor': {'type': 'string', 'required': False},
|
|
1662
|
+
'limit': {
|
|
1663
|
+
'type': 'integer',
|
|
1664
|
+
'required': False,
|
|
1665
|
+
'default': 100,
|
|
1666
|
+
},
|
|
1667
|
+
'oldest': {'type': 'string', 'required': False},
|
|
1668
|
+
'latest': {'type': 'string', 'required': False},
|
|
1669
|
+
'inclusive': {
|
|
1670
|
+
'type': 'boolean',
|
|
1671
|
+
'required': False,
|
|
1672
|
+
'default': False,
|
|
1673
|
+
},
|
|
1674
|
+
},
|
|
1675
|
+
response_schema={
|
|
1676
|
+
'type': 'object',
|
|
1677
|
+
'description': 'Response containing thread replies',
|
|
1678
|
+
'properties': {
|
|
1679
|
+
'ok': {'type': 'boolean', 'description': 'Whether the request was successful'},
|
|
1680
|
+
'messages': {
|
|
1681
|
+
'type': 'array',
|
|
1682
|
+
'items': {
|
|
1683
|
+
'type': 'object',
|
|
1684
|
+
'description': 'Slack thread reply message object',
|
|
1685
|
+
'properties': {
|
|
1686
|
+
'type': {
|
|
1687
|
+
'type': ['string', 'null'],
|
|
1688
|
+
'description': 'Message type',
|
|
1689
|
+
},
|
|
1690
|
+
'subtype': {
|
|
1691
|
+
'type': ['string', 'null'],
|
|
1692
|
+
'description': 'Message subtype',
|
|
1693
|
+
},
|
|
1694
|
+
'ts': {'type': 'string', 'description': 'Message timestamp (unique identifier)'},
|
|
1695
|
+
'user': {
|
|
1696
|
+
'type': ['string', 'null'],
|
|
1697
|
+
'description': 'User ID who sent the message',
|
|
1698
|
+
},
|
|
1699
|
+
'text': {
|
|
1700
|
+
'type': ['string', 'null'],
|
|
1701
|
+
'description': 'Message text content',
|
|
1702
|
+
},
|
|
1703
|
+
'thread_ts': {
|
|
1704
|
+
'type': ['string', 'null'],
|
|
1705
|
+
'description': 'Thread parent timestamp',
|
|
1706
|
+
},
|
|
1707
|
+
'parent_user_id': {
|
|
1708
|
+
'type': ['string', 'null'],
|
|
1709
|
+
'description': 'User ID of the parent message author (present in thread replies)',
|
|
1710
|
+
},
|
|
1711
|
+
'reply_count': {
|
|
1712
|
+
'type': ['integer', 'null'],
|
|
1713
|
+
'description': 'Number of replies in thread',
|
|
1714
|
+
},
|
|
1715
|
+
'reply_users_count': {
|
|
1716
|
+
'type': ['integer', 'null'],
|
|
1717
|
+
'description': 'Number of unique users who replied',
|
|
1718
|
+
},
|
|
1719
|
+
'latest_reply': {
|
|
1720
|
+
'type': ['string', 'null'],
|
|
1721
|
+
'description': 'Timestamp of latest reply',
|
|
1722
|
+
},
|
|
1723
|
+
'reply_users': {
|
|
1724
|
+
'type': ['array', 'null'],
|
|
1725
|
+
'items': {'type': 'string'},
|
|
1726
|
+
'description': 'User IDs who replied to the thread',
|
|
1727
|
+
},
|
|
1728
|
+
'is_locked': {
|
|
1729
|
+
'type': ['boolean', 'null'],
|
|
1730
|
+
'description': 'Whether the thread is locked',
|
|
1731
|
+
},
|
|
1732
|
+
'subscribed': {
|
|
1733
|
+
'type': ['boolean', 'null'],
|
|
1734
|
+
'description': 'Whether the user is subscribed to the thread',
|
|
1735
|
+
},
|
|
1736
|
+
'reactions': {
|
|
1737
|
+
'type': ['array', 'null'],
|
|
1738
|
+
'items': {
|
|
1739
|
+
'type': 'object',
|
|
1740
|
+
'description': 'Message reaction',
|
|
1741
|
+
'properties': {
|
|
1742
|
+
'name': {
|
|
1743
|
+
'type': ['string', 'null'],
|
|
1744
|
+
'description': 'Reaction emoji name',
|
|
1745
|
+
},
|
|
1746
|
+
'users': {
|
|
1747
|
+
'type': ['array', 'null'],
|
|
1748
|
+
'items': {'type': 'string'},
|
|
1749
|
+
'description': 'User IDs who reacted',
|
|
1750
|
+
},
|
|
1751
|
+
'count': {
|
|
1752
|
+
'type': ['integer', 'null'],
|
|
1753
|
+
'description': 'Number of reactions',
|
|
1754
|
+
},
|
|
1755
|
+
},
|
|
1756
|
+
},
|
|
1757
|
+
'description': 'Reactions to the message',
|
|
1758
|
+
},
|
|
1759
|
+
'attachments': {
|
|
1760
|
+
'type': ['array', 'null'],
|
|
1761
|
+
'items': {
|
|
1762
|
+
'type': 'object',
|
|
1763
|
+
'description': 'Message attachment',
|
|
1764
|
+
'properties': {
|
|
1765
|
+
'id': {
|
|
1766
|
+
'type': ['integer', 'null'],
|
|
1767
|
+
'description': 'Attachment ID',
|
|
1768
|
+
},
|
|
1769
|
+
'fallback': {
|
|
1770
|
+
'type': ['string', 'null'],
|
|
1771
|
+
'description': 'Fallback text',
|
|
1772
|
+
},
|
|
1773
|
+
'color': {
|
|
1774
|
+
'type': ['string', 'null'],
|
|
1775
|
+
'description': 'Attachment color',
|
|
1776
|
+
},
|
|
1777
|
+
'pretext': {
|
|
1778
|
+
'type': ['string', 'null'],
|
|
1779
|
+
'description': 'Pretext',
|
|
1780
|
+
},
|
|
1781
|
+
'author_name': {
|
|
1782
|
+
'type': ['string', 'null'],
|
|
1783
|
+
'description': 'Author name',
|
|
1784
|
+
},
|
|
1785
|
+
'author_link': {
|
|
1786
|
+
'type': ['string', 'null'],
|
|
1787
|
+
'description': 'Author link',
|
|
1788
|
+
},
|
|
1789
|
+
'author_icon': {
|
|
1790
|
+
'type': ['string', 'null'],
|
|
1791
|
+
'description': 'Author icon URL',
|
|
1792
|
+
},
|
|
1793
|
+
'title': {
|
|
1794
|
+
'type': ['string', 'null'],
|
|
1795
|
+
'description': 'Attachment title',
|
|
1796
|
+
},
|
|
1797
|
+
'title_link': {
|
|
1798
|
+
'type': ['string', 'null'],
|
|
1799
|
+
'description': 'Title link',
|
|
1800
|
+
},
|
|
1801
|
+
'text': {
|
|
1802
|
+
'type': ['string', 'null'],
|
|
1803
|
+
'description': 'Attachment text',
|
|
1804
|
+
},
|
|
1805
|
+
'fields': {
|
|
1806
|
+
'type': ['array', 'null'],
|
|
1807
|
+
'items': {'type': 'object'},
|
|
1808
|
+
'description': 'Attachment fields',
|
|
1809
|
+
},
|
|
1810
|
+
'image_url': {
|
|
1811
|
+
'type': ['string', 'null'],
|
|
1812
|
+
'description': 'Image URL',
|
|
1813
|
+
},
|
|
1814
|
+
'thumb_url': {
|
|
1815
|
+
'type': ['string', 'null'],
|
|
1816
|
+
'description': 'Thumbnail URL',
|
|
1817
|
+
},
|
|
1818
|
+
'footer': {
|
|
1819
|
+
'type': ['string', 'null'],
|
|
1820
|
+
'description': 'Footer text',
|
|
1821
|
+
},
|
|
1822
|
+
'footer_icon': {
|
|
1823
|
+
'type': ['string', 'null'],
|
|
1824
|
+
'description': 'Footer icon URL',
|
|
1825
|
+
},
|
|
1826
|
+
'ts': {
|
|
1827
|
+
'type': ['string', 'integer', 'null'],
|
|
1828
|
+
'description': 'Timestamp',
|
|
1829
|
+
},
|
|
1830
|
+
},
|
|
1831
|
+
},
|
|
1832
|
+
'description': 'Message attachments',
|
|
1833
|
+
},
|
|
1834
|
+
'blocks': {
|
|
1835
|
+
'type': ['array', 'null'],
|
|
1836
|
+
'items': {'type': 'object'},
|
|
1837
|
+
'description': 'Block kit blocks',
|
|
1838
|
+
},
|
|
1839
|
+
'files': {
|
|
1840
|
+
'type': ['array', 'null'],
|
|
1841
|
+
'items': {
|
|
1842
|
+
'type': 'object',
|
|
1843
|
+
'description': 'File object',
|
|
1844
|
+
'properties': {
|
|
1845
|
+
'id': {
|
|
1846
|
+
'type': ['string', 'null'],
|
|
1847
|
+
'description': 'File ID',
|
|
1848
|
+
},
|
|
1849
|
+
'name': {
|
|
1850
|
+
'type': ['string', 'null'],
|
|
1851
|
+
'description': 'File name',
|
|
1852
|
+
},
|
|
1853
|
+
'title': {
|
|
1854
|
+
'type': ['string', 'null'],
|
|
1855
|
+
'description': 'File title',
|
|
1856
|
+
},
|
|
1857
|
+
'mimetype': {
|
|
1858
|
+
'type': ['string', 'null'],
|
|
1859
|
+
'description': 'MIME type',
|
|
1860
|
+
},
|
|
1861
|
+
'filetype': {
|
|
1862
|
+
'type': ['string', 'null'],
|
|
1863
|
+
'description': 'File type',
|
|
1864
|
+
},
|
|
1865
|
+
'pretty_type': {
|
|
1866
|
+
'type': ['string', 'null'],
|
|
1867
|
+
'description': 'Human-readable file type',
|
|
1868
|
+
},
|
|
1869
|
+
'user': {
|
|
1870
|
+
'type': ['string', 'null'],
|
|
1871
|
+
'description': 'User ID who uploaded the file',
|
|
1872
|
+
},
|
|
1873
|
+
'size': {
|
|
1874
|
+
'type': ['integer', 'null'],
|
|
1875
|
+
'description': 'File size in bytes',
|
|
1876
|
+
},
|
|
1877
|
+
'mode': {
|
|
1878
|
+
'type': ['string', 'null'],
|
|
1879
|
+
'description': 'File mode',
|
|
1880
|
+
},
|
|
1881
|
+
'is_external': {
|
|
1882
|
+
'type': ['boolean', 'null'],
|
|
1883
|
+
'description': 'Whether the file is external',
|
|
1884
|
+
},
|
|
1885
|
+
'external_type': {
|
|
1886
|
+
'type': ['string', 'null'],
|
|
1887
|
+
'description': 'External file type',
|
|
1888
|
+
},
|
|
1889
|
+
'is_public': {
|
|
1890
|
+
'type': ['boolean', 'null'],
|
|
1891
|
+
'description': 'Whether the file is public',
|
|
1892
|
+
},
|
|
1893
|
+
'public_url_shared': {
|
|
1894
|
+
'type': ['boolean', 'null'],
|
|
1895
|
+
'description': 'Whether the public URL is shared',
|
|
1896
|
+
},
|
|
1897
|
+
'url_private': {
|
|
1898
|
+
'type': ['string', 'null'],
|
|
1899
|
+
'description': 'Private URL',
|
|
1900
|
+
},
|
|
1901
|
+
'url_private_download': {
|
|
1902
|
+
'type': ['string', 'null'],
|
|
1903
|
+
'description': 'Private download URL',
|
|
1904
|
+
},
|
|
1905
|
+
'permalink': {
|
|
1906
|
+
'type': ['string', 'null'],
|
|
1907
|
+
'description': 'Permalink',
|
|
1908
|
+
},
|
|
1909
|
+
'permalink_public': {
|
|
1910
|
+
'type': ['string', 'null'],
|
|
1911
|
+
'description': 'Public permalink',
|
|
1912
|
+
},
|
|
1913
|
+
'created': {
|
|
1914
|
+
'type': ['integer', 'null'],
|
|
1915
|
+
'description': 'Unix timestamp of creation',
|
|
1916
|
+
},
|
|
1917
|
+
'timestamp': {
|
|
1918
|
+
'type': ['integer', 'null'],
|
|
1919
|
+
'description': 'Unix timestamp',
|
|
1920
|
+
},
|
|
1921
|
+
},
|
|
1922
|
+
},
|
|
1923
|
+
'description': 'Files attached to the message',
|
|
1924
|
+
},
|
|
1925
|
+
'edited': {
|
|
1926
|
+
'oneOf': [
|
|
1927
|
+
{
|
|
1928
|
+
'type': 'object',
|
|
1929
|
+
'description': 'Message edit information',
|
|
1930
|
+
'properties': {
|
|
1931
|
+
'user': {
|
|
1932
|
+
'type': ['string', 'null'],
|
|
1933
|
+
'description': 'User ID who edited the message',
|
|
1934
|
+
},
|
|
1935
|
+
'ts': {
|
|
1936
|
+
'type': ['string', 'null'],
|
|
1937
|
+
'description': 'Edit timestamp',
|
|
1938
|
+
},
|
|
1939
|
+
},
|
|
1940
|
+
},
|
|
1941
|
+
{'type': 'null'},
|
|
1942
|
+
],
|
|
1943
|
+
'description': 'Edit information',
|
|
1944
|
+
},
|
|
1945
|
+
'bot_id': {
|
|
1946
|
+
'type': ['string', 'null'],
|
|
1947
|
+
'description': 'Bot ID if message was sent by a bot',
|
|
1948
|
+
},
|
|
1949
|
+
'bot_profile': {
|
|
1950
|
+
'oneOf': [
|
|
1951
|
+
{
|
|
1952
|
+
'type': 'object',
|
|
1953
|
+
'description': 'Bot profile information',
|
|
1954
|
+
'properties': {
|
|
1955
|
+
'id': {
|
|
1956
|
+
'type': ['string', 'null'],
|
|
1957
|
+
'description': 'Bot ID',
|
|
1958
|
+
},
|
|
1959
|
+
'deleted': {
|
|
1960
|
+
'type': ['boolean', 'null'],
|
|
1961
|
+
'description': 'Whether the bot is deleted',
|
|
1962
|
+
},
|
|
1963
|
+
'name': {
|
|
1964
|
+
'type': ['string', 'null'],
|
|
1965
|
+
'description': 'Bot name',
|
|
1966
|
+
},
|
|
1967
|
+
'updated': {
|
|
1968
|
+
'type': ['integer', 'null'],
|
|
1969
|
+
'description': 'Unix timestamp of last update',
|
|
1970
|
+
},
|
|
1971
|
+
'app_id': {
|
|
1972
|
+
'type': ['string', 'null'],
|
|
1973
|
+
'description': 'App ID',
|
|
1974
|
+
},
|
|
1975
|
+
'team_id': {
|
|
1976
|
+
'type': ['string', 'null'],
|
|
1977
|
+
'description': 'Team ID',
|
|
1978
|
+
},
|
|
1979
|
+
},
|
|
1980
|
+
},
|
|
1981
|
+
{'type': 'null'},
|
|
1982
|
+
],
|
|
1983
|
+
'description': 'Bot profile information',
|
|
1984
|
+
},
|
|
1985
|
+
'app_id': {
|
|
1986
|
+
'type': ['string', 'null'],
|
|
1987
|
+
'description': 'App ID if message was sent by an app',
|
|
1988
|
+
},
|
|
1989
|
+
'team': {
|
|
1990
|
+
'type': ['string', 'null'],
|
|
1991
|
+
'description': 'Team ID',
|
|
1992
|
+
},
|
|
1993
|
+
},
|
|
1994
|
+
'x-airbyte-entity-name': 'threads',
|
|
1995
|
+
'x-airbyte-stream-name': 'threads',
|
|
1996
|
+
},
|
|
1997
|
+
},
|
|
1998
|
+
'has_more': {
|
|
1999
|
+
'type': ['boolean', 'null'],
|
|
2000
|
+
'description': 'Whether there are more replies',
|
|
2001
|
+
},
|
|
2002
|
+
'response_metadata': {
|
|
2003
|
+
'type': 'object',
|
|
2004
|
+
'description': 'Response metadata including pagination',
|
|
2005
|
+
'properties': {
|
|
2006
|
+
'next_cursor': {
|
|
2007
|
+
'type': ['string', 'null'],
|
|
2008
|
+
'description': 'Cursor for next page of results',
|
|
2009
|
+
},
|
|
2010
|
+
},
|
|
2011
|
+
},
|
|
2012
|
+
},
|
|
2013
|
+
},
|
|
2014
|
+
record_extractor='$.messages',
|
|
2015
|
+
meta_extractor={'next_cursor': '$.response_metadata.next_cursor', 'has_more': '$.has_more'},
|
|
2016
|
+
),
|
|
2017
|
+
},
|
|
2018
|
+
entity_schema={
|
|
2019
|
+
'type': 'object',
|
|
2020
|
+
'description': 'Slack thread reply message object',
|
|
2021
|
+
'properties': {
|
|
2022
|
+
'type': {
|
|
2023
|
+
'type': ['string', 'null'],
|
|
2024
|
+
'description': 'Message type',
|
|
2025
|
+
},
|
|
2026
|
+
'subtype': {
|
|
2027
|
+
'type': ['string', 'null'],
|
|
2028
|
+
'description': 'Message subtype',
|
|
2029
|
+
},
|
|
2030
|
+
'ts': {'type': 'string', 'description': 'Message timestamp (unique identifier)'},
|
|
2031
|
+
'user': {
|
|
2032
|
+
'type': ['string', 'null'],
|
|
2033
|
+
'description': 'User ID who sent the message',
|
|
2034
|
+
},
|
|
2035
|
+
'text': {
|
|
2036
|
+
'type': ['string', 'null'],
|
|
2037
|
+
'description': 'Message text content',
|
|
2038
|
+
},
|
|
2039
|
+
'thread_ts': {
|
|
2040
|
+
'type': ['string', 'null'],
|
|
2041
|
+
'description': 'Thread parent timestamp',
|
|
2042
|
+
},
|
|
2043
|
+
'parent_user_id': {
|
|
2044
|
+
'type': ['string', 'null'],
|
|
2045
|
+
'description': 'User ID of the parent message author (present in thread replies)',
|
|
2046
|
+
},
|
|
2047
|
+
'reply_count': {
|
|
2048
|
+
'type': ['integer', 'null'],
|
|
2049
|
+
'description': 'Number of replies in thread',
|
|
2050
|
+
},
|
|
2051
|
+
'reply_users_count': {
|
|
2052
|
+
'type': ['integer', 'null'],
|
|
2053
|
+
'description': 'Number of unique users who replied',
|
|
2054
|
+
},
|
|
2055
|
+
'latest_reply': {
|
|
2056
|
+
'type': ['string', 'null'],
|
|
2057
|
+
'description': 'Timestamp of latest reply',
|
|
2058
|
+
},
|
|
2059
|
+
'reply_users': {
|
|
2060
|
+
'type': ['array', 'null'],
|
|
2061
|
+
'items': {'type': 'string'},
|
|
2062
|
+
'description': 'User IDs who replied to the thread',
|
|
2063
|
+
},
|
|
2064
|
+
'is_locked': {
|
|
2065
|
+
'type': ['boolean', 'null'],
|
|
2066
|
+
'description': 'Whether the thread is locked',
|
|
2067
|
+
},
|
|
2068
|
+
'subscribed': {
|
|
2069
|
+
'type': ['boolean', 'null'],
|
|
2070
|
+
'description': 'Whether the user is subscribed to the thread',
|
|
2071
|
+
},
|
|
2072
|
+
'reactions': {
|
|
2073
|
+
'type': ['array', 'null'],
|
|
2074
|
+
'items': {'$ref': '#/components/schemas/Reaction'},
|
|
2075
|
+
'description': 'Reactions to the message',
|
|
2076
|
+
},
|
|
2077
|
+
'attachments': {
|
|
2078
|
+
'type': ['array', 'null'],
|
|
2079
|
+
'items': {'$ref': '#/components/schemas/Attachment'},
|
|
2080
|
+
'description': 'Message attachments',
|
|
2081
|
+
},
|
|
2082
|
+
'blocks': {
|
|
2083
|
+
'type': ['array', 'null'],
|
|
2084
|
+
'items': {'type': 'object'},
|
|
2085
|
+
'description': 'Block kit blocks',
|
|
2086
|
+
},
|
|
2087
|
+
'files': {
|
|
2088
|
+
'type': ['array', 'null'],
|
|
2089
|
+
'items': {'$ref': '#/components/schemas/File'},
|
|
2090
|
+
'description': 'Files attached to the message',
|
|
2091
|
+
},
|
|
2092
|
+
'edited': {
|
|
2093
|
+
'oneOf': [
|
|
2094
|
+
{'$ref': '#/components/schemas/EditedInfo'},
|
|
2095
|
+
{'type': 'null'},
|
|
2096
|
+
],
|
|
2097
|
+
'description': 'Edit information',
|
|
2098
|
+
},
|
|
2099
|
+
'bot_id': {
|
|
2100
|
+
'type': ['string', 'null'],
|
|
2101
|
+
'description': 'Bot ID if message was sent by a bot',
|
|
2102
|
+
},
|
|
2103
|
+
'bot_profile': {
|
|
2104
|
+
'oneOf': [
|
|
2105
|
+
{'$ref': '#/components/schemas/BotProfile'},
|
|
2106
|
+
{'type': 'null'},
|
|
2107
|
+
],
|
|
2108
|
+
'description': 'Bot profile information',
|
|
2109
|
+
},
|
|
2110
|
+
'app_id': {
|
|
2111
|
+
'type': ['string', 'null'],
|
|
2112
|
+
'description': 'App ID if message was sent by an app',
|
|
2113
|
+
},
|
|
2114
|
+
'team': {
|
|
2115
|
+
'type': ['string', 'null'],
|
|
2116
|
+
'description': 'Team ID',
|
|
2117
|
+
},
|
|
2118
|
+
},
|
|
2119
|
+
'x-airbyte-entity-name': 'threads',
|
|
2120
|
+
'x-airbyte-stream-name': 'threads',
|
|
2121
|
+
},
|
|
2122
|
+
),
|
|
2123
|
+
],
|
|
2124
|
+
)
|