Skip to content

integrations/workplace/slack/dist

Interfaces

NormalizeSlackChannelEventInput

Properties

defaultChannelId?
optional defaultChannelId?: string;
receivedAt?
optional receivedAt?: string;
signedRequest
signedRequest: SlackSignedRequest;

ParseSlackSignedRequestInput

Extends

Properties

nowSeconds?
optional nowSeconds?: number;
Inherited from

ParseSlackSignedRequestOptions.nowSeconds

request
request: Request;
requireSignature?
optional requireSignature?: boolean;
Inherited from

ParseSlackSignedRequestOptions.requireSignature

signingSecret?
optional signingSecret?: string;
Inherited from

ParseSlackSignedRequestOptions.signingSecret

timestampToleranceSeconds?
optional timestampToleranceSeconds?: number;
Inherited from

ParseSlackSignedRequestOptions.timestampToleranceSeconds


ParseSlackSignedRequestOptions

Extended by

Properties

nowSeconds?
optional nowSeconds?: number;
requireSignature?
optional requireSignature?: boolean;
signingSecret?
optional signingSecret?: string;
timestampToleranceSeconds?
optional timestampToleranceSeconds?: number;

SlackApiResponse

Extended by

Indexable

[key: string]: SlackWorkplaceProviderExtensionValue

Properties

error?
optional error?: string;
needed?
optional needed?: string;
ok
ok: boolean;
provided?
optional provided?: string;
response_metadata?
optional response_metadata?: {
[key: string]: SlackWorkplaceProviderExtensionValue;
  messages?: string[];
  next_cursor?: string;
  warnings?: string[];
};
Index Signature
[key: string]: SlackWorkplaceProviderExtensionValue
messages?
optional messages?: string[];
next_cursor?
optional next_cursor?: string;
warnings?
optional warnings?: string[];
warning?
optional warning?: string;

SlackAuthTestResponse

Extends

Indexable

[key: string]: SlackWorkplaceProviderExtensionValue

Properties

bot_id?
optional bot_id?: string;
enterprise_id?
optional enterprise_id?: string;
error?
optional error?: string;
Inherited from

SlackApiResponse.error

needed?
optional needed?: string;
Inherited from

SlackApiResponse.needed

ok
ok: boolean;
Inherited from

SlackApiResponse.ok

provided?
optional provided?: string;
Inherited from

SlackApiResponse.provided

response_metadata?
optional response_metadata?: {
[key: string]: SlackWorkplaceProviderExtensionValue;
  messages?: string[];
  next_cursor?: string;
  warnings?: string[];
};
Index Signature
[key: string]: SlackWorkplaceProviderExtensionValue
messages?
optional messages?: string[];
next_cursor?
optional next_cursor?: string;
warnings?
optional warnings?: string[];
Inherited from

SlackApiResponse.response_metadata

team?
optional team?: string;
team_id?
optional team_id?: string;
url?
optional url?: string;
user?
optional user?: string;
user_id?
optional user_id?: string;
warning?
optional warning?: string;
Inherited from

SlackApiResponse.warning


SlackCompleteUploadExternalInput

Extends

Properties

channelId?
optional channelId?: string;
files
files: {
  id: string;
  title?: string;
}[];
id
id: string;
title?
optional title?: string;
initialComment?
optional initialComment?: string;
signal?
optional signal?: AbortSignal;
Inherited from

SlackProviderRequestOptions.signal

threadTs?
optional threadTs?: string;

SlackCompleteUploadExternalResponse

Extends

Indexable

[key: string]: SlackWorkplaceProviderExtensionValue

Properties

error?
optional error?: string;
Inherited from

SlackApiResponse.error

files?
optional files?: SlackFileResource[];
needed?
optional needed?: string;
Inherited from

SlackApiResponse.needed

ok
ok: boolean;
Inherited from

SlackApiResponse.ok

provided?
optional provided?: string;
Inherited from

SlackApiResponse.provided

response_metadata?
optional response_metadata?: {
[key: string]: SlackWorkplaceProviderExtensionValue;
  messages?: string[];
  next_cursor?: string;
  warnings?: string[];
};
Index Signature
[key: string]: SlackWorkplaceProviderExtensionValue
messages?
optional messages?: string[];
next_cursor?
optional next_cursor?: string;
warnings?
optional warnings?: string[];
Inherited from

SlackApiResponse.response_metadata

warning?
optional warning?: string;
Inherited from

SlackApiResponse.warning


SlackConversationsRepliesInput

Extends

Properties

channel
channel: string;
cursor?
optional cursor?: string;
inclusive?
optional inclusive?: boolean;
latest?
optional latest?: string;
limit?
optional limit?: number;
oldest?
optional oldest?: string;
signal?
optional signal?: AbortSignal;
Inherited from

SlackProviderRequestOptions.signal

ts
ts: string;

SlackConversationsRepliesResponse

Extends

Indexable

[key: string]: SlackWorkplaceProviderExtensionValue

Properties

error?
optional error?: string;
Inherited from

SlackApiResponse.error

has_more?
optional has_more?: boolean;
messages?
optional messages?: SlackMessageResource[];
needed?
optional needed?: string;
Inherited from

SlackApiResponse.needed

ok
ok: boolean;
Inherited from

SlackApiResponse.ok

provided?
optional provided?: string;
Inherited from

SlackApiResponse.provided

response_metadata?
optional response_metadata?: {
[key: string]: SlackWorkplaceProviderExtensionValue;
  messages?: string[];
  next_cursor?: string;
  warnings?: string[];
};
Index Signature
[key: string]: SlackWorkplaceProviderExtensionValue
messages?
optional messages?: string[];
next_cursor?
optional next_cursor?: string;
warnings?
optional warnings?: string[];
Inherited from

SlackApiResponse.response_metadata

warning?
optional warning?: string;
Inherited from

SlackApiResponse.warning


SlackCredentialStatusInput

Extends

Properties

botToken?
optional botToken?: string;
Inherited from

SlackWorkplaceCredentials.botToken

expiresAt?
optional expiresAt?: string;
scopes?
optional scopes?: string[];
signingSecret?
optional signingSecret?: string;
Inherited from

SlackWorkplaceCredentials.signingSecret


SlackFileResource

Indexable

[key: string]: SlackWorkplaceProviderExtensionValue

Properties

filetype?
optional filetype?: string;
id?
optional id?: string;
mimetype?
optional mimetype?: string;
name?
optional name?: string;
title?
optional title?: string;
url_private?
optional url_private?: string;

SlackGetUploadUrlExternalInput

Extends

Extended by

Properties

altTxt?
optional altTxt?: string;
filename
filename: string;
length
length: number;
signal?
optional signal?: AbortSignal;
Inherited from

SlackProviderRequestOptions.signal

snippetType?
optional snippetType?: string;

SlackGetUploadUrlExternalResponse

Extends

Indexable

[key: string]: SlackWorkplaceProviderExtensionValue

Properties

error?
optional error?: string;
Inherited from

SlackApiResponse.error

file_id?
optional file_id?: string;
needed?
optional needed?: string;
Inherited from

SlackApiResponse.needed

ok
ok: boolean;
Inherited from

SlackApiResponse.ok

provided?
optional provided?: string;
Inherited from

SlackApiResponse.provided

response_metadata?
optional response_metadata?: {
[key: string]: SlackWorkplaceProviderExtensionValue;
  messages?: string[];
  next_cursor?: string;
  warnings?: string[];
};
Index Signature
[key: string]: SlackWorkplaceProviderExtensionValue
messages?
optional messages?: string[];
next_cursor?
optional next_cursor?: string;
warnings?
optional warnings?: string[];
Inherited from

SlackApiResponse.response_metadata

upload_url?
optional upload_url?: string;
warning?
optional warning?: string;
Inherited from

SlackApiResponse.warning


SlackLiveCheckOptions

Extends

Properties

apiBaseUrl?
optional apiBaseUrl?: string;
Inherited from

SlackWorkplaceClientOptions.apiBaseUrl

botToken?
optional botToken?: string;
Inherited from

SlackWorkplaceCredentials.botToken

client?
optional client?: Pick<SlackWorkplaceClient, "authTest">;
fetch?
optional fetch?: {
  (input, init?): Promise<Response>;
  (input, init?): Promise<Response>;
};
Call Signature
(input, init?): Promise<Response>;

MDN Reference

Parameters
Parameter Type
input URL | RequestInfo
init? RequestInit
Returns

Promise\<Response>

Call Signature
(input, init?): Promise<Response>;

MDN Reference

Parameters
Parameter Type
input string | Request | URL
init? RequestInit
Returns

Promise\<Response>

Inherited from

SlackWorkplaceClientOptions.fetch

signal?
optional signal?: AbortSignal;
Inherited from

SlackWorkplaceClientOptions.signal

signingSecret?
optional signingSecret?: string;
Inherited from

SlackWorkplaceCredentials.signingSecret

webClientOptions?
optional webClientOptions?: WebClientOptions;
Inherited from

SlackWorkplaceClientOptions.webClientOptions


SlackMessageResource

Indexable

[key: string]: SlackWorkplaceProviderExtensionValue

Properties

attachments?
optional attachments?: SlackWorkplaceJsonValue[];
blocks?
optional blocks?: SlackWorkplaceJsonValue[];
channel?
optional channel?: string;
subtype?
optional subtype?: string;
text?
optional text?: string;
thread_ts?
optional thread_ts?: string;
ts?
optional ts?: string;
type?
optional type?: string;
user?
optional user?: string;
username?
optional username?: string;

SlackPostEphemeralInput

Extends

Properties

attachments?
optional attachments?: SlackWorkplaceJsonValue[];
blocks?
optional blocks?: SlackWorkplaceJsonValue[];
channel
channel: string;
mrkdwn?
optional mrkdwn?: boolean;
signal?
optional signal?: AbortSignal;
Inherited from

SlackProviderRequestOptions.signal

text?
optional text?: string;
threadTs?
optional threadTs?: string;
user
user: string;

SlackPostEphemeralResponse

Extends

Indexable

[key: string]: SlackWorkplaceProviderExtensionValue

Properties

error?
optional error?: string;
Inherited from

SlackApiResponse.error

message_ts?
optional message_ts?: string;
needed?
optional needed?: string;
Inherited from

SlackApiResponse.needed

ok
ok: boolean;
Inherited from

SlackApiResponse.ok

provided?
optional provided?: string;
Inherited from

SlackApiResponse.provided

response_metadata?
optional response_metadata?: {
[key: string]: SlackWorkplaceProviderExtensionValue;
  messages?: string[];
  next_cursor?: string;
  warnings?: string[];
};
Index Signature
[key: string]: SlackWorkplaceProviderExtensionValue
messages?
optional messages?: string[];
next_cursor?
optional next_cursor?: string;
warnings?
optional warnings?: string[];
Inherited from

SlackApiResponse.response_metadata

warning?
optional warning?: string;
Inherited from

SlackApiResponse.warning


SlackPostMessageInput

Extends

Properties

attachments?
optional attachments?: SlackWorkplaceJsonValue[];
blocks?
optional blocks?: SlackWorkplaceJsonValue[];
channel
channel: string;
metadata?
optional metadata?: SlackWorkplaceJsonObject;
mrkdwn?
optional mrkdwn?: boolean;
replyBroadcast?
optional replyBroadcast?: boolean;
signal?
optional signal?: AbortSignal;
Inherited from

SlackProviderRequestOptions.signal

text?
optional text?: string;
threadTs?
optional threadTs?: string;
optional unfurlLinks?: boolean;
unfurlMedia?
optional unfurlMedia?: boolean;

SlackPostMessageResponse

Extends

Indexable

[key: string]: SlackWorkplaceProviderExtensionValue

Properties

channel?
optional channel?: string;
error?
optional error?: string;
Inherited from

SlackApiResponse.error

message?
optional message?: SlackMessageResource;
needed?
optional needed?: string;
Inherited from

SlackApiResponse.needed

ok
ok: boolean;
Inherited from

SlackApiResponse.ok

provided?
optional provided?: string;
Inherited from

SlackApiResponse.provided

response_metadata?
optional response_metadata?: {
[key: string]: SlackWorkplaceProviderExtensionValue;
  messages?: string[];
  next_cursor?: string;
  warnings?: string[];
};
Index Signature
[key: string]: SlackWorkplaceProviderExtensionValue
messages?
optional messages?: string[];
next_cursor?
optional next_cursor?: string;
warnings?
optional warnings?: string[];
Inherited from

SlackApiResponse.response_metadata

ts?
optional ts?: string;
warning?
optional warning?: string;
Inherited from

SlackApiResponse.warning


SlackProviderRequestOptions

Extended by

Properties

signal?
optional signal?: AbortSignal;

SlackSignedRequest

Properties

contentType?
optional contentType?: string;
form?
optional form?: Record<string, string>;
json?
optional json?: unknown;
payload?
optional payload?: unknown;
rawBody
rawBody: string;
validSignature?
optional validSignature?: boolean;

SlackUpdateMessageInput

Extends

Properties

attachments?
optional attachments?: SlackWorkplaceJsonValue[];
blocks?
optional blocks?: SlackWorkplaceJsonValue[];
channel
channel: string;
metadata?
optional metadata?: SlackWorkplaceJsonObject;
signal?
optional signal?: AbortSignal;
Inherited from

SlackProviderRequestOptions.signal

text?
optional text?: string;
ts
ts: string;

SlackUpdateMessageResponse

Extends

Indexable

[key: string]: SlackWorkplaceProviderExtensionValue

Properties

channel?
optional channel?: string;
error?
optional error?: string;
Inherited from

SlackApiResponse.error

message?
optional message?: SlackMessageResource;
needed?
optional needed?: string;
Inherited from

SlackApiResponse.needed

ok
ok: boolean;
Inherited from

SlackApiResponse.ok

provided?
optional provided?: string;
Inherited from

SlackApiResponse.provided

response_metadata?
optional response_metadata?: {
[key: string]: SlackWorkplaceProviderExtensionValue;
  messages?: string[];
  next_cursor?: string;
  warnings?: string[];
};
Index Signature
[key: string]: SlackWorkplaceProviderExtensionValue
messages?
optional messages?: string[];
next_cursor?
optional next_cursor?: string;
warnings?
optional warnings?: string[];
Inherited from

SlackApiResponse.response_metadata

text?
optional text?: string;
ts?
optional ts?: string;
warning?
optional warning?: string;
Inherited from

SlackApiResponse.warning


SlackUploadExternalFileBytesInput

Extends

Properties

body
body: BodyInit;
contentType?
optional contentType?: string;
signal?
optional signal?: AbortSignal;
Inherited from

SlackProviderRequestOptions.signal

uploadUrl
uploadUrl: string;

SlackUploadExternalFileInput

Extends

Properties

altTxt?
optional altTxt?: string;
Inherited from

SlackGetUploadUrlExternalInput.altTxt

body
body: BodyInit;
channelId?
optional channelId?: string;
contentType?
optional contentType?: string;
filename
filename: string;
Inherited from

SlackGetUploadUrlExternalInput.filename

initialComment?
optional initialComment?: string;
length
length: number;
Inherited from

SlackGetUploadUrlExternalInput.length

signal?
optional signal?: AbortSignal;
Inherited from

SlackGetUploadUrlExternalInput.signal

snippetType?
optional snippetType?: string;
Inherited from

SlackGetUploadUrlExternalInput.snippetType

threadTs?
optional threadTs?: string;
title?
optional title?: string;

SlackWorkplaceClient

Properties

webClient
webClient: WebClient;

Methods

apiCall()
apiCall<T>(method, options?): Promise<T>;
Type Parameters
Type Parameter Default type
T SlackApiResponse
Parameters
Parameter Type
method string
options? SlackWorkplaceJsonObject
Returns

Promise\<T>

authTest()
authTest(input?): Promise<SlackAuthTestResponse>;
Parameters
Parameter Type
input? SlackProviderRequestOptions
Returns

Promise\<SlackAuthTestResponse>

completeUploadExternal()
completeUploadExternal(input): Promise<SlackCompleteUploadExternalResponse>;
Parameters
Parameter Type
input SlackCompleteUploadExternalInput
Returns

Promise\<SlackCompleteUploadExternalResponse>

conversationsReplies()
conversationsReplies(input): Promise<SlackConversationsRepliesResponse>;
Parameters
Parameter Type
input SlackConversationsRepliesInput
Returns

Promise\<SlackConversationsRepliesResponse>

getUploadUrlExternal()
getUploadUrlExternal(input): Promise<SlackGetUploadUrlExternalResponse>;
Parameters
Parameter Type
input SlackGetUploadUrlExternalInput
Returns

Promise\<SlackGetUploadUrlExternalResponse>

postEphemeralMessage()
postEphemeralMessage(input): Promise<SlackPostEphemeralResponse>;
Parameters
Parameter Type
input SlackPostEphemeralInput
Returns

Promise\<SlackPostEphemeralResponse>

postInternalAssistMessage()
postInternalAssistMessage(input): Promise<SlackPostEphemeralResponse>;
Parameters
Parameter Type
input SlackPostEphemeralInput
Returns

Promise\<SlackPostEphemeralResponse>

postMessage()
postMessage(input): Promise<SlackPostMessageResponse>;
Parameters
Parameter Type
input SlackPostMessageInput
Returns

Promise\<SlackPostMessageResponse>

updateMessage()
updateMessage(input): Promise<SlackUpdateMessageResponse>;
Parameters
Parameter Type
input SlackUpdateMessageInput
Returns

Promise\<SlackUpdateMessageResponse>

uploadExternalFile()
uploadExternalFile(input): Promise<SlackCompleteUploadExternalResponse>;
Parameters
Parameter Type
input SlackUploadExternalFileInput
Returns

Promise\<SlackCompleteUploadExternalResponse>

uploadExternalFileBytes()
uploadExternalFileBytes(input): Promise<Response>;
Parameters
Parameter Type
input SlackUploadExternalFileBytesInput
Returns

Promise\<Response>


SlackWorkplaceClientOptions

Extends

Properties

apiBaseUrl?
optional apiBaseUrl?: string;
botToken?
optional botToken?: string;
Inherited from

SlackWorkplaceCredentials.botToken

client?
optional client?: WebClient;
fetch?
optional fetch?: {
  (input, init?): Promise<Response>;
  (input, init?): Promise<Response>;
};
Call Signature
(input, init?): Promise<Response>;

MDN Reference

Parameters
Parameter Type
input URL | RequestInfo
init? RequestInit
Returns

Promise\<Response>

Call Signature
(input, init?): Promise<Response>;

MDN Reference

Parameters
Parameter Type
input string | Request | URL
init? RequestInit
Returns

Promise\<Response>

signal?
optional signal?: AbortSignal;
signingSecret?
optional signingSecret?: string;
Inherited from

SlackWorkplaceCredentials.signingSecret

webClientOptions?
optional webClientOptions?: WebClientOptions;

SlackWorkplaceCredentials

Extended by

Properties

botToken?
optional botToken?: string;
signingSecret?
optional signingSecret?: string;

SlackWorkplaceJsonObject

Indexable

[key: string]: SlackWorkplaceProviderExtensionValue

ValidateSlackRequestSignatureInput

Properties

nowSeconds?
optional nowSeconds?: number;
rawBody
rawBody: string | Buffer<ArrayBufferLike>;
signature
signature: string;
signingSecret?
optional signingSecret?: string;
timestamp
timestamp: string | number;
timestampToleranceSeconds?
optional timestampToleranceSeconds?: number;
version?
optional version?: "v0";

Type Aliases

SlackChannelEvent

type SlackChannelEvent = ChannelEventEnvelopeInput<Record<string, unknown>, unknown>;

SlackWorkplaceJsonPrimitive

type SlackWorkplaceJsonPrimitive = string | number | boolean | null;

SlackWorkplaceJsonValue

type SlackWorkplaceJsonValue =
  | SlackWorkplaceJsonPrimitive
  | SlackWorkplaceJsonObject
  | readonly SlackWorkplaceJsonValue[];

SlackWorkplaceProviderExtensionValue

type SlackWorkplaceProviderExtensionValue =
  | SlackWorkplaceJsonValue
  | object
  | undefined;

Functions

createSlackWorkplaceClient()

function createSlackWorkplaceClient(options): SlackWorkplaceClient;

Parameters

Parameter Type
options SlackWorkplaceClientOptions

Returns

SlackWorkplaceClient


createSlackWorkplaceIntegration()

function createSlackWorkplaceIntegration(options): DefinedIntegration<{
  capabilities: [{
     audiences: ["internal-support", "mixed"];
     capability: "receive";
     description: "Validates and parses Slack Events API and interactivity payloads for SDK-user-owned support flows.";
     exposesSensitiveData: true;
     label: "Receive Slack events";
     providerObjects: [{
        kind: "slackEvent";
        label: "Slack Event";
      }, {
        kind: "workplaceMessage";
        label: "Workplace Message";
     }];
     requiresCredential: true;
   }, {
     audiences: ["internal-support", "mixed"];
     capability: "send";
     description: "Posts channel-visible support messages through @slack/web-api chat.postMessage.";
     exposesSensitiveData: true;
     label: "Post Slack messages";
     providerObjects: [{
        kind: "workplaceMessage";
        label: "Workplace Message";
     }];
     requiresCredential: true;
     sideEffect: true;
   }, {
     audiences: ["internal-support"];
     capability: "notify";
     description: "Posts Slack ephemeral messages for internal agent-assist workflows when Slack provides a target user.";
     exposesSensitiveData: true;
     label: "Post Slack agent-assist notifications";
     providerObjects: [{
        kind: "workplaceMessage";
        label: "Workplace Message";
     }];
     requiresCredential: true;
     sideEffect: true;
  }];
  category: "workplace";
  channelAudiences: ["internal-support", "mixed"];
  coverage: {
     evidence: [{
        label: "Slack Web API package";
        url: "https://www.npmjs.com/package/@slack/web-api";
      }, {
        label: "Slack Web API methods";
        url: "https://docs.slack.dev/reference/methods/";
      }, {
        label: "Slack chat.postMessage";
        url: "https://docs.slack.dev/reference/methods/chat.postMessage/";
      }, {
        label: "Slack chat.update";
        url: "https://docs.slack.dev/reference/methods/chat.update/";
     }];
     notes: ["Coverage is a Cognidesk support workflow adapter backed by Slack's official @slack/web-api package.", "Typed operations cover Slack Events API/interactivity request parsing, signed request validation, chat.postMessage, chat.postEphemeral, chat.update, conversations.replies, the external file upload sequence, and auth.test readiness.", "This package intentionally does not clone Slack's archived generated Web API spec and does not claim full Slack platform coverage.", "Slack Socket Mode, OAuth installation flows, incoming webhook delivery, SCIM, Audit Logs, Legal Holds, workflow runtime behavior, and broad admin APIs are separate extension surfaces or future packages."];
     scope: "support-workflow-subset";
  };
  credentialRequirements: [{
     description: "Server-side bot token used by @slack/web-api for Web API calls.";
     id: "slack-bot-token";
     label: "Slack bot token";
     metadata: {
        scopeKind: "provider-oauth-scopes";
     };
     required: true;
     scopes: ["chat:write", "chat:write.public", "channels:history", "groups:history", "im:history", "mpim:history", "files:write"];
   }, {
     description: "Server-side signing secret used to validate Slack Events API and interactivity requests.";
     id: "slack-signing-secret";
     label: "Slack signing secret";
     required: true;
  }];
  directions: ["receive-only", "send-only", "bidirectional"];
  id: "workplace.slack";
  limitations: ["Available Slack operations depend on the SDK user's app scopes, workspace policy, channel membership, Enterprise Grid policy, and user targets for ephemeral messages.", "Slack rate limits vary by method, workspace, Marketplace approval, commercial distribution, and install date; SDK users own pagination, Retry-After handling, retry, and backoff policy.", "Customer visibility, agent-assist routing, approval, retention, redaction, and escalation behavior remain SDK-user configuration."];
  maintainers: [{
     name: "Cognidesk";
     type: "official";
  }];
  metadata: {
     channelCoverage: {
        authReadiness: "sdk-owned-read";
        chatMessages: "sdk-owned-post-update";
        ephemeralMessages: "sdk-owned-post";
        eventsInteractivity: "typed-parse-verify";
        externalFileUpload: "sdk-owned-upload";
        incomingWebhooks: "not-covered";
        oauth: "not-covered";
        socketMode: "not-covered";
        threadReplies: "sdk-owned-read";
     };
     providerClient: {
        importPolicy: "runtime-entrypoint-only";
        package: "@slack/web-api";
        versionRange: "^7.17.0";
     };
  };
  name: "Slack";
  operations: [{
     alias: "workplace.message.receive";
     capability: "receive";
     exposesSensitiveData: true;
     inputSchemaName: "ParseSlackSignedRequestInput";
     outputSchemaName: "SlackSignedRequest";
     providerObject: "workplaceMessage";
     requiresCredential: true;
   }, {
     alias: "workplace.thread.read";
     capability: "read-provider-object";
     exposesSensitiveData: true;
     inputSchemaName: "SlackConversationsRepliesInput";
     outputSchemaName: "SlackConversationsRepliesResponse";
     providerObject: "workplaceThread";
     providerOperation: "conversations.replies";
     requiresCredential: true;
   }, {
     alias: "workplace.message.send";
     capability: "send";
     exposesSensitiveData: true;
     externallyVisible: true;
     inputSchemaName: "SlackPostMessageInput";
     outputSchemaName: "SlackPostMessageResponse";
     providerObject: "workplaceMessage";
     providerOperation: "chat.postMessage";
     requiresCredential: true;
     sideEffect: true;
  }];
  packageName: "@cognidesk/integration-workplace-slack";
  privacyNotes: ["Slack messages, channel identifiers, user identifiers, event payloads, interaction payloads, files, and workspace metadata can contain internal support context and customer data.", "Slack bot tokens and signing secrets stay server-side and are represented in Studio only as credential readiness."];
  provider: "slack";
  trustLevel: "official";
}, SlackWorkplaceCredentials, {
  slack.request-signature: (input) => Promise<boolean>;
  workplace.file.upload: (input, context) => Promise<SlackCompleteUploadExternalResponse>;
  workplace.message.receive: (input) => Promise<SlackSignedRequest>;
  workplace.message.reply: (input, context) => Promise<SlackPostMessageResponse>;
  workplace.message.send: (input, context) => Promise<SlackPostMessageResponse>;
  workplace.message.update: (input, context) => Promise<SlackUpdateMessageResponse>;
  workplace.notification.send: (input, context) => Promise<SlackPostEphemeralResponse>;
  workplace.thread.read: (input, context) => Promise<SlackConversationsRepliesResponse>;
}>;

Parameters

Parameter Type
options SlackWorkplaceIntegrationOptions

Returns

DefinedIntegration\<{ capabilities: [{ audiences: ["internal-support", "mixed"]; capability: "receive"; description: "Validates and parses Slack Events API and interactivity payloads for SDK-user-owned support flows."; exposesSensitiveData: true; label: "Receive Slack events"; providerObjects: [{ kind: "slackEvent"; label: "Slack Event"; }, { kind: "workplaceMessage"; label: "Workplace Message"; }]; requiresCredential: true; }, { audiences: ["internal-support", "mixed"]; capability: "send"; description: "Posts channel-visible support messages through @slack/web-api chat.postMessage."; exposesSensitiveData: true; label: "Post Slack messages"; providerObjects: [{ kind: "workplaceMessage"; label: "Workplace Message"; }]; requiresCredential: true; sideEffect: true; }, { audiences: ["internal-support"]; capability: "notify"; description: "Posts Slack ephemeral messages for internal agent-assist workflows when Slack provides a target user."; exposesSensitiveData: true; label: "Post Slack agent-assist notifications"; providerObjects: [{ kind: "workplaceMessage"; label: "Workplace Message"; }]; requiresCredential: true; sideEffect: true; }]; category: "workplace"; channelAudiences: ["internal-support", "mixed"]; coverage: { evidence: [{ label: "Slack Web API package"; url: "https://www.npmjs.com/package/@slack/web-api"; }, { label: "Slack Web API methods"; url: "https://docs.slack.dev/reference/methods/"; }, { label: "Slack chat.postMessage"; url: "https://docs.slack.dev/reference/methods/chat.postMessage/"; }, { label: "Slack chat.update"; url: "https://docs.slack.dev/reference/methods/chat.update/"; }]; notes: ["Coverage is a Cognidesk support workflow adapter backed by Slack's official @slack/web-api package.", "Typed operations cover Slack Events API/interactivity request parsing, signed request validation, chat.postMessage, chat.postEphemeral, chat.update, conversations.replies, the external file upload sequence, and auth.test readiness.", "This package intentionally does not clone Slack's archived generated Web API spec and does not claim full Slack platform coverage.", "Slack Socket Mode, OAuth installation flows, incoming webhook delivery, SCIM, Audit Logs, Legal Holds, workflow runtime behavior, and broad admin APIs are separate extension surfaces or future packages."]; scope: "support-workflow-subset"; }; credentialRequirements: [{ description: "Server-side bot token used by @slack/web-api for Web API calls."; id: "slack-bot-token"; label: "Slack bot token"; metadata: { scopeKind: "provider-oauth-scopes"; }; required: true; scopes: ["chat:write", "chat:write.public", "channels:history", "groups:history", "im:history", "mpim:history", "files:write"]; }, { description: "Server-side signing secret used to validate Slack Events API and interactivity requests."; id: "slack-signing-secret"; label: "Slack signing secret"; required: true; }]; directions: ["receive-only", "send-only", "bidirectional"]; id: "workplace.slack"; limitations: ["Available Slack operations depend on the SDK user's app scopes, workspace policy, channel membership, Enterprise Grid policy, and user targets for ephemeral messages.", "Slack rate limits vary by method, workspace, Marketplace approval, commercial distribution, and install date; SDK users own pagination, Retry-After handling, retry, and backoff policy.", "Customer visibility, agent-assist routing, approval, retention, redaction, and escalation behavior remain SDK-user configuration."]; maintainers: [{ name: "Cognidesk"; type: "official"; }]; metadata: { channelCoverage: { authReadiness: "sdk-owned-read"; chatMessages: "sdk-owned-post-update"; ephemeralMessages: "sdk-owned-post"; eventsInteractivity: "typed-parse-verify"; externalFileUpload: "sdk-owned-upload"; incomingWebhooks: "not-covered"; oauth: "not-covered"; socketMode: "not-covered"; threadReplies: "sdk-owned-read"; }; providerClient: { importPolicy: "runtime-entrypoint-only"; package: "@slack/web-api"; versionRange: "^7.17.0"; }; }; name: "Slack"; operations: [{ alias: "workplace.message.receive"; capability: "receive"; exposesSensitiveData: true; inputSchemaName: "ParseSlackSignedRequestInput"; outputSchemaName: "SlackSignedRequest"; providerObject: "workplaceMessage"; requiresCredential: true; }, { alias: "workplace.thread.read"; capability: "read-provider-object"; exposesSensitiveData: true; inputSchemaName: "SlackConversationsRepliesInput"; outputSchemaName: "SlackConversationsRepliesResponse"; providerObject: "workplaceThread"; providerOperation: "conversations.replies"; requiresCredential: true; }, { alias: "workplace.message.send"; capability: "send"; exposesSensitiveData: true; externallyVisible: true; inputSchemaName: "SlackPostMessageInput"; outputSchemaName: "SlackPostMessageResponse"; providerObject: "workplaceMessage"; providerOperation: "chat.postMessage"; requiresCredential: true; sideEffect: true; }]; packageName: "@cognidesk/integration-workplace-slack"; privacyNotes: ["Slack messages, channel identifiers, user identifiers, event payloads, interaction payloads, files, and workspace metadata can contain internal support context and customer data.", "Slack bot tokens and signing secrets stay server-side and are represented in Studio only as credential readiness."]; provider: "slack"; trustLevel: "official"; }, SlackWorkplaceCredentials, { slack.request-signature: (input) => Promise\<boolean>; workplace.file.upload: (input, context) => Promise\<SlackCompleteUploadExternalResponse>; workplace.message.receive: (input) => Promise\<SlackSignedRequest>; workplace.message.reply: (input, context) => Promise\<SlackPostMessageResponse>; workplace.message.send: (input, context) => Promise\<SlackPostMessageResponse>; workplace.message.update: (input, context) => Promise\<SlackUpdateMessageResponse>; workplace.notification.send: (input, context) => Promise\<SlackPostEphemeralResponse>; workplace.thread.read: (input, context) => Promise\<SlackConversationsRepliesResponse>; }>


createSlackWorkplaceLiveChecks()

function createSlackWorkplaceLiveChecks(options): {
  description: string;
  id: string;
  requiredCredentialIds: string[];
  run: Promise<{
     details: {
        botId: string;
        team: string;
        teamId: string;
        user: string;
        userId: string;
     };
  }>;
}[];

Parameters

Parameter Type
options SlackLiveCheckOptions

Returns

{ description: string; id: string; requiredCredentialIds: string[]; run: Promise\<{ details: { botId: string; team: string; teamId: string; user: string; userId: string; }; }>; }[]


createSlackWorkplaceOperationHandlers()

function createSlackWorkplaceOperationHandlers(options): {
  slack.request-signature: (input) => Promise<boolean>;
  workplace.file.upload: (input, context) => Promise<SlackCompleteUploadExternalResponse>;
  workplace.message.receive: (input) => Promise<SlackSignedRequest>;
  workplace.message.reply: (input, context) => Promise<SlackPostMessageResponse>;
  workplace.message.send: (input, context) => Promise<SlackPostMessageResponse>;
  workplace.message.update: (input, context) => Promise<SlackUpdateMessageResponse>;
  workplace.notification.send: (input, context) => Promise<SlackPostEphemeralResponse>;
  workplace.thread.read: (input, context) => Promise<SlackConversationsRepliesResponse>;
};

Parameters

Parameter Type
options SlackWorkplaceIntegrationOptions

Returns

{
  slack.request-signature: (input) => Promise<boolean>;
  workplace.file.upload: (input, context) => Promise<SlackCompleteUploadExternalResponse>;
  workplace.message.receive: (input) => Promise<SlackSignedRequest>;
  workplace.message.reply: (input, context) => Promise<SlackPostMessageResponse>;
  workplace.message.send: (input, context) => Promise<SlackPostMessageResponse>;
  workplace.message.update: (input, context) => Promise<SlackUpdateMessageResponse>;
  workplace.notification.send: (input, context) => Promise<SlackPostEphemeralResponse>;
  workplace.thread.read: (input, context) => Promise<SlackConversationsRepliesResponse>;
}
Name Type
slack.request-signature() (input) => Promise\<boolean>
workplace.file.upload() (input, context) => Promise\<SlackCompleteUploadExternalResponse>
workplace.message.receive() (input) => Promise\<SlackSignedRequest>
workplace.message.reply() (input, context) => Promise\<SlackPostMessageResponse>
workplace.message.send() (input, context) => Promise\<SlackPostMessageResponse>
workplace.message.update() (input, context) => Promise\<SlackUpdateMessageResponse>
workplace.notification.send() (input, context) => Promise\<SlackPostEphemeralResponse>
workplace.thread.read() (input, context) => Promise\<SlackConversationsRepliesResponse>

normalizeSlackChannelEvent()

function normalizeSlackChannelEvent(input): SlackChannelEvent;

Parameters

Parameter Type
input NormalizeSlackChannelEventInput

Returns

SlackChannelEvent


parseSlackSignedRequest()

function parseSlackSignedRequest(request, options?): Promise<SlackSignedRequest>;

Parameters

Parameter Type
request Request
options? ParseSlackSignedRequestOptions

Returns

Promise\<SlackSignedRequest>


slackWorkplaceCredentialStatuses()

function slackWorkplaceCredentialStatuses(input): {
  expiresAt?: string;
  message?: string;
  providerPackageId?: string;
  requirementId: string;
  scopes?: string[];
  state:   | "required"
     | "configured"
     | "permission-blocked"
     | "not-required"
     | "missing"
     | "expired"
     | "insufficient-scope"
     | "unavailable";
}[];

Parameters

Parameter Type
input SlackCredentialStatusInput

Returns

{ expiresAt?: string; message?: string; providerPackageId?: string; requirementId: string; scopes?: string[]; state: | "required" | "configured" | "permission-blocked" | "not-required" | "missing" | "expired" | "insufficient-scope" | "unavailable"; }[]


stripUndefined()

function stripUndefined(input): SlackWorkplaceJsonObject;

Parameters

Parameter Type
input SlackWorkplaceJsonObject

Returns

SlackWorkplaceJsonObject


validateSlackRequestSignature()

function validateSlackRequestSignature(input): boolean;

Parameters

Parameter Type
input ValidateSlackRequestSignatureInput

Returns

boolean

References

slackWorkplaceManifestInput

Re-exports slackWorkplaceManifestInput


slackWorkplaceOperationAliases

Re-exports slackWorkplaceOperationAliases


slackWorkplaceProviderManifest

Re-exports slackWorkplaceProviderManifest