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+
2634export 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 */
3749export 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}
0 commit comments