Skip to content
Merged
Show file tree
Hide file tree
Changes from 21 commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
c8c3482
Add support for flexpane API
vegeris Apr 8, 2025
a3f8922
feat-work-objects: version bump for types pkg (#2229)
vegeris Apr 9, 2025
dde54aa
Update
vegeris Apr 9, 2025
5813ae6
feat-work-objects: version bump 2 for the types pkg (#2234)
vegeris Apr 10, 2025
6892aef
feat-work-objects: version bump for the web-api pkg (#2232)
vegeris Apr 10, 2025
9e8988b
Merge branch 'main' of https://github.com/slackapi/node-slack-sdk int…
vegeris Aug 22, 2025
c3cef1f
update
vegeris Sep 8, 2025
67cc8b6
Merge branch 'main' of https://github.com/slackapi/node-slack-sdk int…
vegeris Sep 10, 2025
da092d5
update payload object, entity.presentDetails inputs, test, event
vegeris Sep 10, 2025
d4231dd
Merge branch 'main' of https://github.com/slackapi/node-slack-sdk int…
vegeris Sep 12, 2025
d889e07
feat-work-objects: beta version for the types pkg (#2366)
vegeris Sep 12, 2025
e6bd2ac
lint
vegeris Sep 12, 2025
c54c9b3
feat-work-objects: beta version for the web-api pkg (#2367)
vegeris Sep 12, 2025
24ecda6
Update entity metadata definitions
vegeris Oct 9, 2025
ba79b81
Merge branch 'main' of https://github.com/slackapi/node-slack-sdk int…
vegeris Oct 9, 2025
02e5360
feat-work-objects: beta version for the types pkg (#2404)
vegeris Oct 9, 2025
b983ca5
update test
vegeris Oct 9, 2025
8201026
feat-work-objects: beta version for the web-api pkg (#2405)
vegeris Oct 9, 2025
e4284e3
update schema
vegeris Oct 15, 2025
bb49dd5
feat-work-objects: beta version for the types pkg (#2406)
vegeris Oct 15, 2025
480cb1f
feat-work-objects: beta version for the web-api pkg (#2407)
vegeris Oct 15, 2025
c4992f6
Update URL in packages/web-api/src/types/request/chat.ts
vegeris Oct 16, 2025
d2a9d93
Update URL in packages/web-api/src/types/request/entity.ts
vegeris Oct 16, 2025
c4cb46c
alphabetical order
vegeris Oct 16, 2025
ec18401
update comments to jsdoc format
vegeris Oct 16, 2025
6f56034
update schema
vegeris Oct 16, 2025
eeef76d
feat-work-objects: beta version for the types pkg (#2408)
vegeris Oct 16, 2025
a44d4b3
whoops
vegeris Oct 16, 2025
1d4325b
feat-work-objects: version bump for the web-api pkg (#2409)
vegeris Oct 16, 2025
019cfd3
update comment
vegeris Oct 22, 2025
fae7b17
mv EntityAndEventMessageMetadata
vegeris Oct 22, 2025
a2eaa71
rename types for unfurls and metadata param of chat.unfurl
vegeris Oct 22, 2025
26e3aa5
biome fix
vegeris Oct 22, 2025
4eaeed8
make cli-test dependency versions exact
vegeris Oct 22, 2025
6d2ebc4
Revert "make cli-test dependency versions exact"
vegeris Oct 22, 2025
a9c5d4e
Merge branch 'main' of https://github.com/slackapi/node-slack-sdk int…
vegeris Oct 22, 2025
c0cc1f6
rm types pkg updates
vegeris Oct 23, 2025
d974164
feat-work-objects: version bump for the web-api pkg (#2416)
vegeris Oct 23, 2025
9b5ecf1
Merge branch 'main' of https://github.com/slackapi/node-slack-sdk int…
vegeris Oct 23, 2025
5c174bd
update types dependency and reset web-api package version
vegeris Oct 23, 2025
de9e02a
Merge branch 'main' of https://github.com/slackapi/node-slack-sdk int…
vegeris Oct 23, 2025
3ae9720
Update packages/web-api/package.json
vegeris Oct 23, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion packages/types/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@slack/types",
"version": "2.17.0",
"version": "2.17.0-featWorkObjectsBeta.2",
Copy link
Copy Markdown
Member

@zimeg zimeg Oct 15, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
"version": "2.17.0-featWorkObjectsBeta.2",
"version": "2.17.0",

🪓 todo: Before merging let's revert this!

😳 edit: Oop perhaps not for this package!

"description": "Shared type definitions for the Node Slack SDK",
"author": "Slack Technologies, LLC",
"license": "MIT",
Expand Down
20 changes: 20 additions & 0 deletions packages/types/src/events/entity-details-requested.ts
Original file line number Diff line number Diff line change
@@ -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;
}
2 changes: 2 additions & 0 deletions packages/types/src/events/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -144,6 +145,7 @@ export type SlackEvent =
| DNDUpdatedUserEvent
| EmailDomainChangedEvent
| EmojiChangedEvent
| EntityDetailsRequestedEvent
| FileChangeEvent
| FileCommentDeletedEvent
| FileCreatedEvent
Expand Down
10 changes: 5 additions & 5 deletions packages/types/src/events/message-metadata.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import type { MessageMetadata } from '../message-metadata';
import type { EventMessageMetadata } from '../message-metadata';

export type AllMessageMetadataEvents =
| MessageMetadataDeletedEvent
Expand All @@ -12,7 +12,7 @@ export interface MessageMetadataPostedEvent {
user_id: string;
team_id: string;
channel_id: string;
metadata: MessageMetadata;
metadata: EventMessageMetadata;
message_ts: string;
event_ts: string;
}
Expand All @@ -21,20 +21,20 @@ export interface MessageMetadataUpdatedEvent {
type: 'message_metadata_updated';
channel_id: string;
event_ts: string;
previous_metadata: MessageMetadata;
previous_metadata: EventMessageMetadata;
app_id: string;
bot_id?: string;
user_id: string;
team_id: string;
message_ts: string;
metadata: MessageMetadata;
metadata: EventMessageMetadata;
}

export interface MessageMetadataDeletedEvent {
type: 'message_metadata_deleted';
channel_id: string;
event_ts: string;
previous_metadata: MessageMetadata;
previous_metadata: EventMessageMetadata;
Comment thread
vegeris marked this conversation as resolved.
Outdated
app_id: string;
bot_id?: string;
user_id: string;
Expand Down
296 changes: 293 additions & 3 deletions packages/types/src/message-metadata.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
import type { Option, PlainTextElement, SlackFile } from './block-kit/composition-objects';

/**
* @description Application-specific data to attach to Slack message.
* @description Application-specific event or entity data to attach to Slack message.
* Provide 'event_type' and 'event_payload' to set event metadata, or use 'entities' to set work object entity metadata.
* @see {@link https://docs.slack.dev/messaging/message-metadata Using Metadata}
* @see {@link https://docs.slack.dev/messaging/message-metadata Metadata Payload Structure}
*/
Expand All @@ -8,15 +11,302 @@ export interface MessageMetadata {
* @description A human readable alphanumeric string representing your application's metadata event.
* The value of this field may appear in the UI to developers.
*/
event_type: string;
event_type?: string;
/**
* @description A free-form object containing whatever data your application wishes to attach to messages.
*/
event_payload: {
event_payload?: {
[key: string]: string | number | boolean | MessageMetadataEventPayloadObject | MessageMetadataEventPayloadObject[];
};

/**
* @description An array of work object entities.
*/
entities?: EntityMetadata[];
}

// ------------------------------
// Event metadata
// ------------------------------

export interface EventMessageMetadata extends Omit<MessageMetadata, 'entities'> {}
Comment thread
vegeris marked this conversation as resolved.
Outdated

export interface MessageMetadataEventPayloadObject {
[key: string]: string | number | boolean;
}

export interface MessageMetadataEventPayloadAttributes {
[key: string]: string | number | boolean | MessageMetadataEventPayloadAttributes;
}

// ------------------------------
// 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?: FileEntityFields | TaskEntityFields | IncidentEntityFields | ContentItemEntityFields;
Comment thread
vegeris marked this conversation as resolved.
Outdated
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<EntityTypedField, 'type'> {
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;
};
}
Loading