Skip to content

Commit 24ecda6

Browse files
committed
Update entity metadata definitions
1 parent c54c9b3 commit 24ecda6

6 files changed

Lines changed: 255 additions & 47 deletions

File tree

packages/types/src/events/entity-details-requested.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,15 @@ export interface EntityDetailsRequestedEvent {
66
url: string;
77
domain: string;
88
};
9+
entity_url: string;
10+
app_unfurl_url?: string;
911
user_locale: string;
1012
event_ts: string;
1113
external_ref?: {
1214
id: string;
1315
type?: string;
1416
};
1517
message_ts?: string;
18+
thread_ts?: string;
1619
channel?: string;
1720
}

packages/types/src/events/message-metadata.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type { MessageMetadata } from '../message-metadata';
1+
import type { EventMessageMetadata } from '../message-metadata';
22

33
export type AllMessageMetadataEvents =
44
| MessageMetadataDeletedEvent
@@ -12,7 +12,7 @@ export interface MessageMetadataPostedEvent {
1212
user_id: string;
1313
team_id: string;
1414
channel_id: string;
15-
metadata: MessageMetadata;
15+
metadata: EventMessageMetadata;
1616
message_ts: string;
1717
event_ts: string;
1818
}
@@ -21,20 +21,20 @@ export interface MessageMetadataUpdatedEvent {
2121
type: 'message_metadata_updated';
2222
channel_id: string;
2323
event_ts: string;
24-
previous_metadata: MessageMetadata;
24+
previous_metadata: EventMessageMetadata;
2525
app_id: string;
2626
bot_id?: string;
2727
user_id: string;
2828
team_id: string;
2929
message_ts: string;
30-
metadata: MessageMetadata;
30+
metadata: EventMessageMetadata;
3131
}
3232

3333
export interface MessageMetadataDeletedEvent {
3434
type: 'message_metadata_deleted';
3535
channel_id: string;
3636
event_ts: string;
37-
previous_metadata: MessageMetadata;
37+
previous_metadata: EventMessageMetadata;
3838
app_id: string;
3939
bot_id?: string;
4040
user_id: string;

packages/types/src/message-metadata.ts

Lines changed: 221 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import type { Option, PlainTextElement, SlackFile } from './block-kit/composition-objects';
2+
13
/**
24
* @description Application-specific event or entity data to attach to Slack message.
35
* Provide 'event_type' and 'event_payload' to set event metadata, or use 'entities' to set work object entity metadata.
@@ -23,6 +25,12 @@ export interface MessageMetadata {
2325
entities?: EntityMetadata[];
2426
}
2527

28+
// ------------------------------
29+
// Event metadata
30+
// ------------------------------
31+
32+
export interface EventMessageMetadata extends Omit<MessageMetadata, 'entities'> {}
33+
2634
export interface MessageMetadataEventPayloadObject {
2735
[key: string]: string | number | boolean;
2836
}
@@ -31,8 +39,12 @@ export interface MessageMetadataEventPayloadAttributes {
3139
[key: string]: string | number | boolean | MessageMetadataEventPayloadAttributes;
3240
}
3341

42+
// ------------------------------
43+
// Work object metadata
44+
// ------------------------------
45+
3446
/**
35-
* @description Metadata that represents an entity.
47+
* @description Metadata that represents a work object entity.
3648
*/
3749
export interface EntityMetadata {
3850
/**
@@ -43,17 +55,15 @@ export interface EntityMetadata {
4355
* @description Schema for the given entity type.
4456
*/
4557
entity_payload: {
46-
// biome-ignore lint/complexity/noBannedTypes: Allow Object
47-
attributes: Object;
48-
// biome-ignore lint/complexity/noBannedTypes: Allow Object
49-
fields?: Object;
50-
// biome-ignore lint/complexity/noBannedTypes: Allow Object
51-
custom_fields?: Object[];
52-
// biome-ignore lint/complexity/noBannedTypes: Allow Object
53-
slack_file?: Object;
58+
attributes: EntityAttributes;
59+
fields?: FileEntityFields | TaskEntityFields | IncidentEntityFields | ContentItemEntityFields;
60+
custom_fields?: EntityCustomField[];
61+
slack_file?: FileEntitySlackFile;
5462
display_order?: string[];
55-
// biome-ignore lint/complexity/noBannedTypes: Allow Object
56-
actions?: Object;
63+
actions?: {
64+
primary_actions?: EntityActionButton[];
65+
overflow_actions?: EntityActionButton[];
66+
};
5767
};
5868
/**
5969
* @description Reference (and optional type) used to identify an entity within the developer's system.
@@ -66,4 +76,204 @@ export interface EntityMetadata {
6676
* @description URL used to identify an entity within the developer's system.
6777
*/
6878
url: string;
79+
80+
/**
81+
* @description The exact URL posted in the source message. Required in metadata passed to `chat.unfurl`.
82+
*/
83+
app_unfurl_url?: string;
84+
}
85+
86+
export interface FileEntitySlackFile {
87+
id: string;
88+
type?: string;
89+
}
90+
91+
export interface EntityAttributes {
92+
title: {
93+
text: string;
94+
edit?: EntityEditSupport;
95+
};
96+
display_type?: string;
97+
display_id?: string;
98+
product_icon?: EntityIconField;
99+
product_name?: string;
100+
locale?: string;
101+
full_size_preview?: EntityFullSizePreview;
102+
metadata_last_modified?: number;
103+
}
104+
105+
export interface EntityIconField {
106+
alt_text: string;
107+
url?: string;
108+
slack_file?: {
109+
id?: string;
110+
url?: string;
111+
};
112+
}
113+
114+
export interface EntityEditSupport {
115+
enabled: boolean;
116+
placeholder?: PlainTextElement;
117+
hint?: PlainTextElement;
118+
optional?: boolean;
119+
select?: {
120+
current_value?: string;
121+
current_values?: string[];
122+
static_options?: Option[];
123+
fetch_options_dynamically?: boolean;
124+
min_query_length?: number;
125+
};
126+
number?: {
127+
is_decimal_allowed?: boolean;
128+
min_value?: number;
129+
max_value?: number;
130+
};
131+
text?: {
132+
min_length?: number;
133+
max_length?: number;
134+
};
135+
}
136+
137+
export interface EntityFullSizePreview {
138+
is_supported: boolean;
139+
preview_url?: string;
140+
is_animated?: boolean;
141+
width?: string;
142+
height?: string;
143+
mime_type?: string;
144+
error?: {
145+
code: string;
146+
message?: string;
147+
};
148+
}
149+
150+
export interface FileEntityFields {
151+
preview?: EntityImageField;
152+
created_by?: EntityTypedField;
153+
date_created?: EntityTimestampField;
154+
date_updated?: EntityTimestampField;
155+
last_modified_by?: EntityTypedField;
156+
file_size?: EntityStringField;
157+
mime_type?: EntityStringField;
158+
full_size_preview?: EntityFullSizePreview;
159+
}
160+
161+
export interface TaskEntityFields {
162+
description?: EntityStringField;
163+
created_by?: EntityTypedField;
164+
date_created?: EntityTimestampField;
165+
date_updated?: EntityTimestampField;
166+
assignee?: EntityTypedField;
167+
status?: EntityStringField;
168+
due_date?: EntityTypedField;
169+
priority?: EntityStringField;
170+
}
171+
172+
export interface IncidentEntityFields {
173+
status?: EntityStringField;
174+
priority?: EntityStringField;
175+
urgency?: EntityStringField;
176+
created_by?: EntityTypedField;
177+
assigned_to?: EntityTypedField;
178+
date_created?: EntityTimestampField;
179+
date_updated?: EntityTimestampField;
180+
description?: EntityStringField;
181+
service?: EntityStringField;
182+
}
183+
184+
export interface ContentItemEntityFields {
185+
preview?: EntityImageField;
186+
description?: EntityStringField;
187+
created_by?: EntityTypedField;
188+
date_created?: EntityTimestampField;
189+
date_updated?: EntityTimestampField;
190+
last_modified_by?: EntityTypedField;
191+
}
192+
193+
export interface EntityTypedField {
194+
type: string;
195+
label?: string;
196+
value?: string | number;
197+
link?: string;
198+
icon?: EntityIconField;
199+
long?: boolean;
200+
format?: string;
201+
image_url?: string;
202+
slack_file?: SlackFile;
203+
alt_text?: string;
204+
edit?: EntityEditSupport;
205+
tag_color?: string;
206+
user?: EntityUserIDField | EntityUserField;
207+
}
208+
209+
export interface EntityStringField {
210+
value: string;
211+
label?: string;
212+
format?: string;
213+
link?: string;
214+
icon?: EntityIconField;
215+
long?: boolean;
216+
type?: string;
217+
tag_color?: string;
218+
edit?: EntityEditSupport;
219+
}
220+
221+
export interface EntityUserIDField {
222+
user_id: string;
223+
}
224+
225+
export interface EntityUserField {
226+
text: string;
227+
url?: string;
228+
email?: string;
229+
icon?: EntityIconField;
230+
}
231+
232+
export interface EntityTimestampField {
233+
value: number;
234+
label?: string;
235+
link?: string;
236+
icon?: EntityIconField;
237+
type?: string;
238+
edit?: EntityEditSupport;
239+
}
240+
241+
export interface EntityImageField {
242+
alt_text: string;
243+
label?: string;
244+
image_url?: string;
245+
slack_file?: SlackFile;
246+
title?: string;
247+
type?: string;
248+
}
249+
250+
export interface EntityCustomField {
251+
label: string;
252+
key: string;
253+
type: string;
254+
value?: string | number | EntityTypedField[];
255+
link?: string;
256+
icon?: EntityIconField;
257+
long?: boolean;
258+
format?: string;
259+
image_url?: string;
260+
slack_file?: SlackFile;
261+
alt_text?: string;
262+
tag_color?: string;
263+
edit?: EntityEditSupport;
264+
item_type?: string;
265+
user?: EntityUserIDField | EntityUserField;
266+
}
267+
268+
export interface EntityActionButton {
269+
text: string;
270+
action_id: string;
271+
value?: string;
272+
style?: string;
273+
url?: string;
274+
accessibility_label?: string;
275+
processing_state?: {
276+
enabled: boolean;
277+
interstitial_text?: string;
278+
};
69279
}

packages/web-api/src/types/request/chat.ts

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -271,12 +271,7 @@ type EntityMetadataUnfurls = {
271271
* @description Array of entities to attach to the message based on URLs featured in the message.
272272
*/
273273
metadata: {
274-
entities: (EntityMetadata & {
275-
/**
276-
* @description The unfurl URL for the entity.
277-
*/
278-
app_unfurl_url: string;
279-
})[];
274+
entities: EntityMetadata[];
280275
};
281276
};
282277

packages/web-api/src/types/request/manifest.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -540,4 +540,5 @@ type ManifestEvent =
540540
| 'workflow_published'
541541
| 'workflow_step_deleted'
542542
| 'workflow_step_execute'
543-
| 'workflow_unpublished';
543+
| 'workflow_unpublished'
544+
| 'entity_details_requested';

0 commit comments

Comments
 (0)