From 694fbb1b3391b55d57b8c74e88c168763936281a Mon Sep 17 00:00:00 2001 From: Elaine Vegeris Date: Wed, 22 Oct 2025 15:18:57 -0400 Subject: [PATCH 1/3] separate types changes from web-api changes --- packages/types/package.json | 2 +- .../src/events/entity-details-requested.ts | 20 ++ packages/types/src/events/index.ts | 2 + packages/types/src/message-metadata.ts | 280 +++++++++++++++++- 4 files changed, 302 insertions(+), 2 deletions(-) create mode 100644 packages/types/src/events/entity-details-requested.ts diff --git a/packages/types/package.json b/packages/types/package.json index 495b89f70..961bce17b 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@slack/types", - "version": "2.17.0", + "version": "2.17.0-featWorkObjectsBeta.3", "description": "Shared type definitions for the Node Slack SDK", "author": "Slack Technologies, LLC", "license": "MIT", diff --git a/packages/types/src/events/entity-details-requested.ts b/packages/types/src/events/entity-details-requested.ts new file mode 100644 index 000000000..f9d69c462 --- /dev/null +++ b/packages/types/src/events/entity-details-requested.ts @@ -0,0 +1,20 @@ +export interface EntityDetailsRequestedEvent { + type: 'entity_details_requested'; + user: string; + trigger_id: string; + link: { + url: string; + domain: string; + }; + entity_url: string; + app_unfurl_url?: string; + user_locale: string; + event_ts: string; + external_ref?: { + id: string; + type?: string; + }; + message_ts?: string; + thread_ts?: string; + channel?: string; +} diff --git a/packages/types/src/events/index.ts b/packages/types/src/events/index.ts index 18b153fe1..bb4de42c0 100644 --- a/packages/types/src/events/index.ts +++ b/packages/types/src/events/index.ts @@ -25,6 +25,7 @@ import type { import type { DNDUpdatedEvent, DNDUpdatedUserEvent } from './dnd'; import type { EmailDomainChangedEvent } from './email'; import type { EmojiChangedEvent } from './emoji'; +import type { EntityDetailsRequestedEvent } from './entity-details-requested'; import type { FileChangeEvent, FileCommentDeletedEvent, @@ -144,6 +145,7 @@ export type SlackEvent = | DNDUpdatedUserEvent | EmailDomainChangedEvent | EmojiChangedEvent + | EntityDetailsRequestedEvent | FileChangeEvent | FileCommentDeletedEvent | FileCreatedEvent diff --git a/packages/types/src/message-metadata.ts b/packages/types/src/message-metadata.ts index 4733d25ea..43728d38f 100644 --- a/packages/types/src/message-metadata.ts +++ b/packages/types/src/message-metadata.ts @@ -1,5 +1,11 @@ +import type { Option, PlainTextElement, SlackFile } from './block-kit/composition-objects'; + +// ------------------------------ +// Event metadata +// ------------------------------ + /** - * @description Application-specific data to attach to Slack message. + * @description Application-specific event data to attach to a Slack message. * @see {@link https://docs.slack.dev/messaging/message-metadata Using Metadata} * @see {@link https://docs.slack.dev/messaging/message-metadata Metadata Payload Structure} */ @@ -20,3 +26,275 @@ export interface MessageMetadata { export interface MessageMetadataEventPayloadObject { [key: string]: string | number | boolean; } + +// ------------------------------ +// Work object metadata +// ------------------------------ + +/** + * @description Metadata that represents a work object entity. + */ +export interface EntityMetadata { + /** + * @description Entity type. + */ + entity_type: EntityType | string; + /** + * @description Schema for the given entity type. + */ + entity_payload: { + attributes: EntityAttributes; + fields?: ContentItemEntityFields | FileEntityFields | IncidentEntityFields | TaskEntityFields; + custom_fields?: EntityCustomField[]; + slack_file?: FileEntitySlackFile; + display_order?: string[]; + actions?: { + primary_actions?: EntityActionButton[]; + overflow_actions?: EntityActionButton[]; + }; + }; + /** + * @description Reference (and optional type) used to identify an entity within the developer's system. + */ + external_ref: ExternalRef; + /** + * @description URL used to identify an entity within the developer's system. + */ + url: string; + + /** + * @description The exact URL posted in the source message. Required in metadata passed to `chat.unfurl`. + */ + app_unfurl_url?: string; +} + +export interface ExternalRef { + id: string; + type?: string; +} + +export enum EntityType { + Task = 'slack#/entities/task', + File = 'slack#/entities/file', + Item = 'slack#/entities/item', + Incident = 'slack#/entities/incident', + ContentItem = 'slack#/entities/content_item', +} + +export interface FileEntitySlackFile { + id: string; + type?: string; +} + +export interface EntityAttributes { + title: { + text: string; + edit?: EntityEditSupport; + }; + display_type?: string; + display_id?: string; + product_icon?: EntityIconField; + product_name?: string; + locale?: string; + full_size_preview?: EntityFullSizePreview; + metadata_last_modified?: number; +} + +export interface EntityIconField { + alt_text: string; + url?: string; + slack_file?: { + id?: string; + url?: string; + }; +} + +export interface EntityEditSupport { + enabled: boolean; + placeholder?: PlainTextElement; + hint?: PlainTextElement; + optional?: boolean; + select?: { + current_value?: string; + current_values?: string[]; + static_options?: Option[]; + fetch_options_dynamically?: boolean; + min_query_length?: number; + }; + number?: { + is_decimal_allowed?: boolean; + min_value?: number; + max_value?: number; + }; + text?: { + min_length?: number; + max_length?: number; + }; +} + +export interface EntityFullSizePreview { + is_supported: boolean; + preview_url?: string; + mime_type?: string; + error?: { + code: string; + message?: string; + }; +} + +export interface FileEntityFields { + preview?: EntityImageField; + created_by?: EntityTypedField; + date_created?: EntityTimestampField; + date_updated?: EntityTimestampField; + last_modified_by?: EntityTypedField; + file_size?: EntityStringField; + mime_type?: EntityStringField; + full_size_preview?: EntityFullSizePreview; +} + +export interface TaskEntityFields { + description?: EntityStringField; + created_by?: EntityTypedField; + date_created?: EntityTimestampField; + date_updated?: EntityTimestampField; + assignee?: EntityTypedField; + status?: EntityStringField; + due_date?: EntityTypedField; + priority?: EntityStringField; +} + +export interface IncidentEntityFields { + status?: EntityStringField; + priority?: EntityStringField; + urgency?: EntityStringField; + created_by?: EntityTypedField; + assigned_to?: EntityTypedField; + date_created?: EntityTimestampField; + date_updated?: EntityTimestampField; + description?: EntityStringField; + service?: EntityStringField; +} + +export interface ContentItemEntityFields { + preview?: EntityImageField; + description?: EntityStringField; + created_by?: EntityTypedField; + date_created?: EntityTimestampField; + date_updated?: EntityTimestampField; + last_modified_by?: EntityTypedField; +} + +export interface EntityArrayItemField extends Omit { + type?: string; +} + +export interface EntityTypedField { + type: string; + label?: string; + value?: string | number; + link?: string; + icon?: EntityIconField; + long?: boolean; + format?: string; + image_url?: string; + slack_file?: SlackFile; + alt_text?: string; + edit?: EntityEditSupport; + tag_color?: string; + user?: EntityUserIDField | EntityUserField; + entity_ref?: EntityRefField; +} + +export interface EntityStringField { + value: string; + label?: string; + format?: string; + link?: string; + icon?: EntityIconField; + long?: boolean; + type?: string; + tag_color?: string; + edit?: EntityEditSupport; +} + +export interface EntityUserIDField { + user_id: string; +} + +export interface EntityUserField { + text: string; + url?: string; + email?: string; + icon?: EntityIconField; +} + +export interface EntityRefField { + entity_url: string; + external_ref: ExternalRef; + title: string; + display_type?: string; + icon?: EntityIconField; +} + +export interface EntityTimestampField { + value: number; + label?: string; + link?: string; + icon?: EntityIconField; + type?: string; + edit?: EntityEditSupport; +} + +export interface EntityImageField { + alt_text: string; + label?: string; + image_url?: string; + slack_file?: SlackFile; + title?: string; + type?: string; +} + +export interface EntityCustomField { + label: string; + key: string; + type: CustomFieldType | string; + value?: string | number | EntityArrayItemField[]; + link?: string; + icon?: EntityIconField; + long?: boolean; + format?: string; + image_url?: string; + slack_file?: SlackFile; + alt_text?: string; + tag_color?: string; + edit?: EntityEditSupport; + item_type?: string; + user?: EntityUserIDField | EntityUserField; + entity_ref?: EntityRefField; +} + +export enum CustomFieldType { + Integer = 'integer', + String = 'string', + Array = 'array', + Date = 'slack#/types/date', + Timestamp = 'slack#/types/timestamp', + Image = 'slack#/types/image', + ChannelId = 'slack#/types/channel_id', + User = 'slack#/types/user', + EntityRef = 'slack#/types/entity_ref', +} + +export interface EntityActionButton { + text: string; + action_id: string; + value?: string; + style?: string; + url?: string; + accessibility_label?: string; + processing_state?: { + enabled: boolean; + interstitial_text?: string; + }; +} From d16203e9cbab8675356ce897e15bcb2df67d2705 Mon Sep 17 00:00:00 2001 From: Elaine Vegeris Date: Wed, 22 Oct 2025 15:38:39 -0400 Subject: [PATCH 2/3] feat-work-objects-types: version bump (#2413) --- packages/types/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/types/package.json b/packages/types/package.json index 961bce17b..a27a9cb26 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@slack/types", - "version": "2.17.0-featWorkObjectsBeta.3", + "version": "2.17.0-featWorkObjectsBeta.4", "description": "Shared type definitions for the Node Slack SDK", "author": "Slack Technologies, LLC", "license": "MIT", From ec527182fe2680150959e8007878674725f6e48c Mon Sep 17 00:00:00 2001 From: Elaine Vegeris Date: Wed, 22 Oct 2025 15:44:00 -0400 Subject: [PATCH 3/3] change pkg version back --- packages/types/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/types/package.json b/packages/types/package.json index a27a9cb26..495b89f70 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@slack/types", - "version": "2.17.0-featWorkObjectsBeta.4", + "version": "2.17.0", "description": "Shared type definitions for the Node Slack SDK", "author": "Slack Technologies, LLC", "license": "MIT",