@happyvertical/messages 0.74.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENT.md +34 -0
- package/LICENSE +7 -0
- package/dist/adapters/email-bridge.d.ts +19 -0
- package/dist/adapters/email-bridge.d.ts.map +1 -0
- package/dist/adapters/slack.d.ts +19 -0
- package/dist/adapters/slack.d.ts.map +1 -0
- package/dist/adapters/twitter.d.ts +25 -0
- package/dist/adapters/twitter.d.ts.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5471 -0
- package/dist/index.js.map +1 -0
- package/dist/shared/base.d.ts +29 -0
- package/dist/shared/base.d.ts.map +1 -0
- package/dist/shared/errors.d.ts +34 -0
- package/dist/shared/errors.d.ts.map +1 -0
- package/dist/shared/factory.d.ts +36 -0
- package/dist/shared/factory.d.ts.map +1 -0
- package/dist/shared/types.d.ts +117 -0
- package/dist/shared/types.d.ts.map +1 -0
- package/metadata.json +32 -0
- package/package.json +66 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/shared/errors.ts","../src/shared/base.ts","../src/adapters/email-bridge.ts","../../../node_modules/.pnpm/@slack+web-api@7.15.1/node_modules/@slack/web-api/dist/errors.js","../../../node_modules/.pnpm/@slack+web-api@7.15.1/node_modules/@slack/web-api/dist/instrument.js","../../../node_modules/.pnpm/@slack+logger@4.0.1/node_modules/@slack/logger/dist/index.js","../../../node_modules/.pnpm/@slack+web-api@7.15.1/node_modules/@slack/web-api/dist/logger.js","../../../node_modules/.pnpm/@slack+web-api@7.15.1/node_modules/@slack/web-api/dist/retry-policies.js","../../../node_modules/.pnpm/@slack+web-api@7.15.1/node_modules/@slack/web-api/dist/types/request/index.js","../../../node_modules/.pnpm/@slack+web-api@7.15.1/node_modules/@slack/web-api/dist/types/response/index.js","../../../node_modules/.pnpm/@slack+web-api@7.15.1/node_modules/@slack/web-api/dist/chat-stream.js","../../../node_modules/.pnpm/form-data@4.0.5/node_modules/form-data/lib/browser.js","../../../node_modules/.pnpm/is-electron@2.2.2/node_modules/is-electron/index.js","../../../node_modules/.pnpm/is-stream@2.0.1/node_modules/is-stream/index.js","../../../node_modules/.pnpm/eventemitter3@4.0.7/node_modules/eventemitter3/index.js","../../../node_modules/.pnpm/p-finally@1.0.0/node_modules/p-finally/index.js","../../../node_modules/.pnpm/p-timeout@3.2.0/node_modules/p-timeout/index.js","../../../node_modules/.pnpm/p-queue@6.6.2/node_modules/p-queue/dist/lower-bound.js","../../../node_modules/.pnpm/p-queue@6.6.2/node_modules/p-queue/dist/priority-queue.js","../../../node_modules/.pnpm/p-queue@6.6.2/node_modules/p-queue/dist/index.js","../../../node_modules/.pnpm/retry@0.13.1/node_modules/retry/lib/retry_operation.js","../../../node_modules/.pnpm/retry@0.13.1/node_modules/retry/lib/retry.js","../../../node_modules/.pnpm/retry@0.13.1/node_modules/retry/index.js","../../../node_modules/.pnpm/p-retry@4.6.2/node_modules/p-retry/index.js","../../../node_modules/.pnpm/@slack+web-api@7.15.1/node_modules/@slack/web-api/dist/file-upload.js","../../../node_modules/.pnpm/@slack+web-api@7.15.1/node_modules/@slack/web-api/dist/helpers.js","../../../node_modules/.pnpm/eventemitter3@5.0.4/node_modules/eventemitter3/index.js","../../../node_modules/.pnpm/@slack+types@2.20.1/node_modules/@slack/types/dist/block-kit/block-elements.js","../../../node_modules/.pnpm/@slack+types@2.20.1/node_modules/@slack/types/dist/block-kit/blocks.js","../../../node_modules/.pnpm/@slack+types@2.20.1/node_modules/@slack/types/dist/block-kit/composition-objects.js","../../../node_modules/.pnpm/@slack+types@2.20.1/node_modules/@slack/types/dist/block-kit/extensions.js","../../../node_modules/.pnpm/@slack+types@2.20.1/node_modules/@slack/types/dist/calls.js","../../../node_modules/.pnpm/@slack+types@2.20.1/node_modules/@slack/types/dist/chunk.js","../../../node_modules/.pnpm/@slack+types@2.20.1/node_modules/@slack/types/dist/dialog.js","../../../node_modules/.pnpm/@slack+types@2.20.1/node_modules/@slack/types/dist/events/app.js","../../../node_modules/.pnpm/@slack+types@2.20.1/node_modules/@slack/types/dist/events/assistant.js","../../../node_modules/.pnpm/@slack+types@2.20.1/node_modules/@slack/types/dist/events/call.js","../../../node_modules/.pnpm/@slack+types@2.20.1/node_modules/@slack/types/dist/events/channel.js","../../../node_modules/.pnpm/@slack+types@2.20.1/node_modules/@slack/types/dist/events/dnd.js","../../../node_modules/.pnpm/@slack+types@2.20.1/node_modules/@slack/types/dist/events/email.js","../../../node_modules/.pnpm/@slack+types@2.20.1/node_modules/@slack/types/dist/events/emoji.js","../../../node_modules/.pnpm/@slack+types@2.20.1/node_modules/@slack/types/dist/events/file.js","../../../node_modules/.pnpm/@slack+types@2.20.1/node_modules/@slack/types/dist/events/function.js","../../../node_modules/.pnpm/@slack+types@2.20.1/node_modules/@slack/types/dist/events/grid-migration.js","../../../node_modules/.pnpm/@slack+types@2.20.1/node_modules/@slack/types/dist/events/group.js","../../../node_modules/.pnpm/@slack+types@2.20.1/node_modules/@slack/types/dist/events/im.js","../../../node_modules/.pnpm/@slack+types@2.20.1/node_modules/@slack/types/dist/events/invite.js","../../../node_modules/.pnpm/@slack+types@2.20.1/node_modules/@slack/types/dist/events/link-shared.js","../../../node_modules/.pnpm/@slack+types@2.20.1/node_modules/@slack/types/dist/events/member.js","../../../node_modules/.pnpm/@slack+types@2.20.1/node_modules/@slack/types/dist/events/message.js","../../../node_modules/.pnpm/@slack+types@2.20.1/node_modules/@slack/types/dist/events/message-metadata.js","../../../node_modules/.pnpm/@slack+types@2.20.1/node_modules/@slack/types/dist/events/pin.js","../../../node_modules/.pnpm/@slack+types@2.20.1/node_modules/@slack/types/dist/events/reaction.js","../../../node_modules/.pnpm/@slack+types@2.20.1/node_modules/@slack/types/dist/events/shared-channel.js","../../../node_modules/.pnpm/@slack+types@2.20.1/node_modules/@slack/types/dist/events/star.js","../../../node_modules/.pnpm/@slack+types@2.20.1/node_modules/@slack/types/dist/events/steps-from-apps.js","../../../node_modules/.pnpm/@slack+types@2.20.1/node_modules/@slack/types/dist/events/subteam.js","../../../node_modules/.pnpm/@slack+types@2.20.1/node_modules/@slack/types/dist/events/team.js","../../../node_modules/.pnpm/@slack+types@2.20.1/node_modules/@slack/types/dist/events/token.js","../../../node_modules/.pnpm/@slack+types@2.20.1/node_modules/@slack/types/dist/events/user.js","../../../node_modules/.pnpm/@slack+types@2.20.1/node_modules/@slack/types/dist/events/index.js","../../../node_modules/.pnpm/@slack+types@2.20.1/node_modules/@slack/types/dist/message-attachments.js","../../../node_modules/.pnpm/@slack+types@2.20.1/node_modules/@slack/types/dist/message-metadata.js","../../../node_modules/.pnpm/@slack+types@2.20.1/node_modules/@slack/types/dist/views.js","../../../node_modules/.pnpm/@slack+types@2.20.1/node_modules/@slack/types/dist/index.js","../../../node_modules/.pnpm/@slack+web-api@7.15.1/node_modules/@slack/web-api/dist/methods.js","../../../node_modules/.pnpm/@slack+web-api@7.15.1/node_modules/@slack/web-api/dist/WebClient.js","../../../node_modules/.pnpm/@slack+web-api@7.15.1/node_modules/@slack/web-api/dist/index.js","../src/adapters/slack.ts","../src/adapters/twitter.ts","../src/shared/factory.ts"],"sourcesContent":["/**\n * Error classes for @happyvertical/messages package\n */\n\n// ============================================================================\n// Base Error\n// ============================================================================\n\nexport class MessagingError extends Error {\n code: string;\n provider?: string;\n cause?: unknown;\n\n constructor(\n message: string,\n code: string,\n provider?: string,\n cause?: unknown,\n ) {\n super(message);\n this.name = 'MessagingError';\n this.code = code;\n this.provider = provider;\n this.cause = cause;\n }\n}\n\n// ============================================================================\n// Connection Errors\n// ============================================================================\n\nexport class ConnectionError extends MessagingError {\n constructor(message: string, provider?: string, cause?: unknown) {\n super(message, 'CONNECTION_ERROR', provider, cause);\n this.name = 'ConnectionError';\n }\n}\n\n// ============================================================================\n// Authentication Errors\n// ============================================================================\n\nexport class AuthenticationError extends MessagingError {\n constructor(message: string, provider?: string, cause?: unknown) {\n super(message, 'AUTHENTICATION_ERROR', provider, cause);\n this.name = 'AuthenticationError';\n }\n}\n\n// ============================================================================\n// Send Errors\n// ============================================================================\n\nexport class SendError extends MessagingError {\n constructor(message: string, provider?: string, cause?: unknown) {\n super(message, 'SEND_ERROR', provider, cause);\n this.name = 'SendError';\n }\n}\n\n// ============================================================================\n// Message Errors\n// ============================================================================\n\nexport class MessageNotFoundError extends MessagingError {\n messageId: string;\n\n constructor(messageId: string, provider?: string, cause?: unknown) {\n super(\n `Message not found: ${messageId}`,\n 'MESSAGE_NOT_FOUND',\n provider,\n cause,\n );\n this.name = 'MessageNotFoundError';\n this.messageId = messageId;\n }\n}\n\n// ============================================================================\n// Channel Errors\n// ============================================================================\n\nexport class ChannelNotFoundError extends MessagingError {\n channelId: string;\n\n constructor(channelId: string, provider?: string) {\n super(`Channel not found: ${channelId}`, 'CHANNEL_NOT_FOUND', provider);\n this.name = 'ChannelNotFoundError';\n this.channelId = channelId;\n }\n}\n\n// ============================================================================\n// Rate Limit Errors\n// ============================================================================\n\nexport class RateLimitError extends MessagingError {\n retryAfter?: number;\n\n constructor(provider?: string, retryAfter?: number) {\n super(\n `Rate limit exceeded${retryAfter ? ` (retry after ${retryAfter}s)` : ''}`,\n 'RATE_LIMIT',\n provider,\n );\n this.name = 'RateLimitError';\n this.retryAfter = retryAfter;\n }\n}\n\n// ============================================================================\n// Validation Errors\n// ============================================================================\n\nexport class InvalidMessageError extends MessagingError {\n constructor(message: string, provider?: string, cause?: unknown) {\n super(message, 'INVALID_MESSAGE', provider, cause);\n this.name = 'InvalidMessageError';\n }\n}\n","/**\n * Base message client adapter class\n */\n\nimport { createLogger, type Logger } from '@happyvertical/logger';\nimport { InvalidMessageError, MessagingError } from './errors.js';\nimport type {\n Channel,\n FetchOptions,\n Message,\n MessageAdapterType,\n MessageClient,\n MessageClientCapabilities,\n MessageClientConfig,\n SendOptions,\n SendResult,\n} from './types.js';\n\n/**\n * Base adapter class providing shared functionality.\n *\n * All adapter implementations should extend this class.\n * Protocol-only — no database persistence.\n */\nexport abstract class BaseMessageClient implements MessageClient {\n protected config: MessageClientConfig;\n protected logger: Logger;\n protected connected = false;\n\n constructor(config: MessageClientConfig) {\n this.config = config;\n this.logger = config.logger || createLogger({ level: 'info' });\n }\n\n // ========================================================================\n // Abstract methods that adapters must implement\n // ========================================================================\n\n abstract send(message: Message, options?: SendOptions): Promise<SendResult>;\n abstract fetch(options?: FetchOptions): Promise<Message[]>;\n abstract getMessage(messageId: string): Promise<Message>;\n abstract getThread(threadId: string): Promise<Message[]>;\n abstract connect(): Promise<void>;\n abstract disconnect(): Promise<void>;\n abstract getCapabilities(): MessageClientCapabilities;\n abstract getAdapter(): MessageAdapterType;\n\n // ========================================================================\n // Optional methods (default to unsupported)\n // ========================================================================\n\n async listChannels(): Promise<Channel[]> {\n throw new MessagingError(\n 'listChannels not supported by this adapter',\n 'NOT_SUPPORTED',\n this.getAdapter(),\n );\n }\n\n // ========================================================================\n // Connection management\n // ========================================================================\n\n isConnected(): boolean {\n return this.connected;\n }\n\n // ========================================================================\n // Validation helpers\n // ========================================================================\n\n protected validateMessage(message: Message): void {\n if (!message.content && !message.html) {\n throw new InvalidMessageError(\n 'Message must have content or html',\n this.getAdapter(),\n );\n }\n\n if (!message.from) {\n throw new InvalidMessageError(\n 'Message must have a sender (from)',\n this.getAdapter(),\n );\n }\n }\n\n // ========================================================================\n // Error mapping\n // ========================================================================\n\n protected mapError(error: unknown): MessagingError {\n if (error instanceof MessagingError) {\n return error;\n }\n\n if (error instanceof Error) {\n return new MessagingError(\n error.message,\n 'UNKNOWN_ERROR',\n this.getAdapter(),\n error,\n );\n }\n\n return new MessagingError(\n String(error),\n 'UNKNOWN_ERROR',\n this.getAdapter(),\n );\n }\n\n // ========================================================================\n // Utility methods\n // ========================================================================\n\n protected debug(message: string, data?: unknown): void {\n if (this.config.debug) {\n this.logger.debug(message, data as Record<string, unknown> | undefined);\n }\n }\n}\n","/**\n * Email Bridge Adapter\n *\n * Thin wrapper that adapts @happyvertical/email EmailClient\n * to the unified MessageClient interface.\n */\n\nimport {\n type EmailClient,\n type EmailMessage,\n getEmailClient,\n} from '@happyvertical/email';\n\nimport { BaseMessageClient } from '../shared/base.js';\nimport { MessageNotFoundError, SendError } from '../shared/errors.js';\nimport type {\n EmailBridgeOptions,\n FetchOptions,\n Message,\n MessageAdapterType,\n MessageAttachment,\n MessageClientCapabilities,\n MessageRecipient,\n SendOptions,\n SendResult,\n} from '../shared/types.js';\n\nexport class EmailBridgeAdapter extends BaseMessageClient {\n private emailClient: EmailClient | null = null;\n private emailOptions: EmailBridgeOptions['emailOptions'];\n\n constructor(options: EmailBridgeOptions) {\n super({ type: 'email', debug: options.debug, logger: options.logger });\n this.emailOptions = options.emailOptions;\n }\n\n async send(message: Message, _options?: SendOptions): Promise<SendResult> {\n this.validateMessage(message);\n const client = await this.getClient();\n\n const emailMessage = this.toEmailMessage(message);\n\n try {\n const result = await client.send(emailMessage);\n\n return {\n success: true,\n messageId: result.messageId,\n timestamp: new Date(),\n providerResponse: {\n accepted: result.accepted,\n rejected: result.rejected,\n response: result.response,\n },\n };\n } catch (error) {\n throw new SendError(\n `Failed to send email: ${error instanceof Error ? error.message : String(error)}`,\n 'email',\n error,\n );\n }\n }\n\n async fetch(options?: FetchOptions): Promise<Message[]> {\n const client = await this.getClient();\n\n const emails = await client.fetch({\n folder: options?.channelId,\n limit: options?.limit,\n unreadOnly: options?.unreadOnly,\n since: options?.since,\n before: options?.before,\n });\n\n return emails.map((email) => this.fromEmailMessage(email));\n }\n\n async getMessage(messageId: string): Promise<Message> {\n const client = await this.getClient();\n\n try {\n const email = await client.getMessage(messageId);\n return this.fromEmailMessage(email);\n } catch (error) {\n throw new MessageNotFoundError(messageId, 'email', error);\n }\n }\n\n async getThread(threadId: string): Promise<Message[]> {\n // Email threads are tracked by References/In-Reply-To headers.\n // Fetch by thread ID isn't natively supported across all email adapters,\n // so we fetch the root message and return it as a single-item thread.\n const message = await this.getMessage(threadId);\n return [message];\n }\n\n async connect(): Promise<void> {\n const client = await this.getClient();\n await client.connect();\n this.connected = true;\n this.debug('Email bridge adapter connected');\n }\n\n async disconnect(): Promise<void> {\n if (this.emailClient) {\n await this.emailClient.disconnect();\n this.emailClient = null;\n }\n this.connected = false;\n this.debug('Email bridge adapter disconnected');\n }\n\n getCapabilities(): MessageClientCapabilities {\n return {\n send: true,\n receive: true,\n threads: false,\n channels: true,\n reactions: false,\n attachments: true,\n richText: true,\n };\n }\n\n getAdapter(): MessageAdapterType {\n return 'email';\n }\n\n // ========================================================================\n // Helpers\n // ========================================================================\n\n private async getClient(): Promise<EmailClient> {\n if (!this.emailClient) {\n this.emailClient = await getEmailClient(this.emailOptions);\n }\n return this.emailClient;\n }\n\n private toEmailMessage(message: Message): EmailMessage {\n const to: Array<{ name?: string; address: string }> = (\n message.to ?? []\n ).map((r) => ({\n name: r.name,\n address: r.address ?? r.id ?? '',\n }));\n\n return {\n from: {\n name: message.from.name,\n address: message.from.address ?? message.from.id ?? '',\n },\n to,\n subject: message.subject ?? '',\n text: message.content,\n html: message.html,\n attachments: message.attachments?.map((a) => ({\n filename: a.filename,\n contentType: a.contentType,\n size: a.size,\n content: a.content,\n path: a.url,\n })),\n };\n }\n\n private fromEmailMessage(email: EmailMessage): Message {\n const attachments: MessageAttachment[] | undefined = email.attachments?.map(\n (a) => ({\n filename: a.filename,\n contentType: a.contentType,\n size: a.size,\n content: a.content,\n url: a.path,\n }),\n );\n\n const to: MessageRecipient[] | undefined = email.to?.map((r) => ({\n name: r.name,\n address: r.address,\n }));\n\n return {\n id: email.id ?? email.messageId,\n threadId: email.threadId,\n from: {\n name: email.from.name,\n address: email.from.address,\n },\n to,\n subject: email.subject,\n content: email.text ?? '',\n html: email.html,\n attachments,\n timestamp: email.date,\n metadata: {\n messageId: email.messageId,\n inReplyTo: email.inReplyTo,\n folder: email.folder,\n labels: email.labels,\n flags: email.flags,\n },\n };\n }\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ErrorCode = void 0;\nexports.errorWithCode = errorWithCode;\nexports.requestErrorWithOriginal = requestErrorWithOriginal;\nexports.httpErrorFromResponse = httpErrorFromResponse;\nexports.platformErrorFromResult = platformErrorFromResult;\nexports.rateLimitedErrorWithDelay = rateLimitedErrorWithDelay;\n/**\n * A dictionary of codes for errors produced by this package\n */\nvar ErrorCode;\n(function (ErrorCode) {\n // general error\n ErrorCode[\"RequestError\"] = \"slack_webapi_request_error\";\n ErrorCode[\"HTTPError\"] = \"slack_webapi_http_error\";\n ErrorCode[\"PlatformError\"] = \"slack_webapi_platform_error\";\n ErrorCode[\"RateLimitedError\"] = \"slack_webapi_rate_limited_error\";\n // file uploads errors\n ErrorCode[\"FileUploadInvalidArgumentsError\"] = \"slack_webapi_file_upload_invalid_args_error\";\n ErrorCode[\"FileUploadReadFileDataError\"] = \"slack_webapi_file_upload_read_file_data_error\";\n})(ErrorCode || (exports.ErrorCode = ErrorCode = {}));\n/**\n * Factory for producing a {@link CodedError} from a generic error\n */\nfunction errorWithCode(error, code) {\n // NOTE: might be able to return something more specific than a CodedError with conditional typing\n const codedError = error;\n codedError.code = code;\n return codedError;\n}\n/**\n * A factory to create WebAPIRequestError objects\n * @param original - original error\n * @param attachOriginal - config indicating if 'original' property should be added on the error object\n */\nfunction requestErrorWithOriginal(original, attachOriginal) {\n const error = errorWithCode(new Error(`A request error occurred: ${original.message}`), ErrorCode.RequestError);\n if (attachOriginal) {\n error.original = original;\n }\n return error;\n}\n/**\n * A factory to create WebAPIHTTPError objects\n * @param response - original error\n */\nfunction httpErrorFromResponse(response) {\n const error = errorWithCode(new Error(`An HTTP protocol error occurred: statusCode = ${response.status}`), ErrorCode.HTTPError);\n error.statusCode = response.status;\n error.statusMessage = response.statusText;\n const nonNullHeaders = {};\n for (const k of Object.keys(response.headers)) {\n if (k && response.headers[k]) {\n nonNullHeaders[k] = response.headers[k];\n }\n }\n error.headers = nonNullHeaders;\n error.body = response.data;\n return error;\n}\n/**\n * A factory to create WebAPIPlatformError objects\n * @param result - Web API call result\n */\nfunction platformErrorFromResult(result) {\n const error = errorWithCode(new Error(`An API error occurred: ${result.error}`), ErrorCode.PlatformError);\n error.data = result;\n return error;\n}\n/**\n * A factory to create WebAPIRateLimitedError objects\n * @param retrySec - Number of seconds that the request can be retried in\n */\nfunction rateLimitedErrorWithDelay(retrySec) {\n const error = errorWithCode(new Error(`A rate-limit has been reached, you may retry this request in ${retrySec} seconds`), ErrorCode.RateLimitedError);\n error.retryAfter = retrySec;\n return error;\n}\n//# sourceMappingURL=errors.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || (function () {\n var ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n };\n return function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.addAppMetadata = addAppMetadata;\nexports.getUserAgent = getUserAgent;\nconst os = __importStar(require(\"node:os\"));\nconst node_path_1 = require(\"node:path\");\nconst packageJson = require('../package.json');\n/**\n * Replaces occurrences of '/' with ':' in a string, since '/' is meaningful inside User-Agent strings as a separator.\n */\nfunction replaceSlashes(s) {\n return s.replace('/', ':');\n}\nconst MAX_LATIN1_CODE = 0xff;\n/**\n * Ensures a string is safe for use in HTTP headers by URI-encoding characters outside the Latin-1 (ISO-8859-1) range.\n * Latin-1 characters (code points 0x00–0xFF) are preserved as-is; all others are percent-encoded via encodeURIComponent.\n */\nfunction toLatin1Safe(s) {\n let result = '';\n for (const char of s) {\n result += char.charCodeAt(0) <= MAX_LATIN1_CODE ? char : encodeURIComponent(char);\n }\n return result;\n}\n// TODO: for the deno build (see the `npm run build:deno` npm run script), we could replace the `os-browserify` npm\n// module shim with our own shim leveraging the deno beta compatibility layer for node's `os` module (for more info\n// see https://deno.land/std@0.116.0/node/os.ts). At the time of writing this TODO (2021/11/25), this required deno\n// v1.16.2 and use of the --unstable flag. Once support for this exists without the --unstable flag, we can improve\n// the `os` module deno shim to correctly report operating system from a deno runtime. Until then, the below `os`-\n// based code will report \"browser/undefined\" from a deno runtime.\nconst baseUserAgent = `${replaceSlashes(packageJson.name)}/${packageJson.version} ` +\n `${toLatin1Safe((0, node_path_1.basename)(process.title))}/${process.version.replace('v', '')} ` +\n `${os.platform()}/${os.release()}`;\nconst appMetadata = {};\n/**\n * Appends the app metadata into the User-Agent value\n * @param appMetadata.name - name of tool to be counted in instrumentation\n * @param appMetadata.version - version of tool to be counted in instrumentation\n */\nfunction addAppMetadata({ name, version }) {\n appMetadata[replaceSlashes(name)] = version;\n}\n/**\n * Returns the current User-Agent value for instrumentation\n */\nfunction getUserAgent() {\n const appIdentifier = Object.entries(appMetadata)\n .map(([name, version]) => `${name}/${version}`)\n .join(' ');\n // only prepend the appIdentifier when it's not empty\n return (appIdentifier.length > 0 ? `${appIdentifier} ` : '') + baseUserAgent;\n}\n//# sourceMappingURL=instrument.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ConsoleLogger = exports.LogLevel = void 0;\n/**\n * Severity levels for log entries\n */\nvar LogLevel;\n(function (LogLevel) {\n LogLevel[\"ERROR\"] = \"error\";\n LogLevel[\"WARN\"] = \"warn\";\n LogLevel[\"INFO\"] = \"info\";\n LogLevel[\"DEBUG\"] = \"debug\";\n})(LogLevel || (exports.LogLevel = LogLevel = {}));\n/**\n * Default logger which logs to stdout and stderr\n */\nclass ConsoleLogger {\n constructor() {\n this.level = LogLevel.INFO;\n this.name = '';\n }\n getLevel() {\n return this.level;\n }\n /**\n * Sets the instance's log level so that only messages which are equal or more severe are output to the console.\n */\n setLevel(level) {\n this.level = level;\n }\n /**\n * Set the instance's name, which will appear on each log line before the message.\n */\n setName(name) {\n this.name = name;\n }\n /**\n * Log a debug message\n */\n // biome-ignore lint/suspicious/noExplicitAny: can log anything\n debug(...msg) {\n if (ConsoleLogger.isMoreOrEqualSevere(LogLevel.DEBUG, this.level)) {\n console.debug(ConsoleLogger.labels.get(LogLevel.DEBUG), this.name, ...msg);\n }\n }\n /**\n * Log an info message\n */\n // biome-ignore lint/suspicious/noExplicitAny: can log anything\n info(...msg) {\n if (ConsoleLogger.isMoreOrEqualSevere(LogLevel.INFO, this.level)) {\n console.info(ConsoleLogger.labels.get(LogLevel.INFO), this.name, ...msg);\n }\n }\n /**\n * Log a warning message\n */\n // biome-ignore lint/suspicious/noExplicitAny: can log anything\n warn(...msg) {\n if (ConsoleLogger.isMoreOrEqualSevere(LogLevel.WARN, this.level)) {\n console.warn(ConsoleLogger.labels.get(LogLevel.WARN), this.name, ...msg);\n }\n }\n /**\n * Log an error message\n */\n // biome-ignore lint/suspicious/noExplicitAny: can log anything\n error(...msg) {\n if (ConsoleLogger.isMoreOrEqualSevere(LogLevel.ERROR, this.level)) {\n console.error(ConsoleLogger.labels.get(LogLevel.ERROR), this.name, ...msg);\n }\n }\n /**\n * Helper to compare two log levels and determine if a is equal or more severe than b\n */\n static isMoreOrEqualSevere(a, b) {\n return ConsoleLogger.severity[a] >= ConsoleLogger.severity[b];\n }\n}\nexports.ConsoleLogger = ConsoleLogger;\n/** Map of labels for each log level */\nConsoleLogger.labels = (() => {\n const entries = Object.entries(LogLevel);\n const map = entries.map(([key, value]) => [value, `[${key}] `]);\n return new Map(map);\n})();\n/** Map of severity as comparable numbers for each log level */\nConsoleLogger.severity = {\n [LogLevel.ERROR]: 400,\n [LogLevel.WARN]: 300,\n [LogLevel.INFO]: 200,\n [LogLevel.DEBUG]: 100,\n};\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.LogLevel = void 0;\nexports.getLogger = getLogger;\nconst logger_1 = require(\"@slack/logger\");\nvar logger_2 = require(\"@slack/logger\");\nObject.defineProperty(exports, \"LogLevel\", { enumerable: true, get: function () { return logger_2.LogLevel; } });\nlet instanceCount = 0;\n/**\n * INTERNAL interface for getting or creating a named Logger.\n */\nfunction getLogger(name, level, existingLogger) {\n // Get a unique ID for the logger.\n const instanceId = instanceCount;\n instanceCount += 1;\n // Set up the logger.\n const logger = (() => {\n if (existingLogger !== undefined) {\n return existingLogger;\n }\n return new logger_1.ConsoleLogger();\n })();\n logger.setName(`web-api:${name}:${instanceId}`);\n if (level !== undefined) {\n logger.setLevel(level);\n }\n return logger;\n}\n//# sourceMappingURL=logger.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.rapidRetryPolicy = exports.fiveRetriesInFiveMinutes = exports.tenRetriesInAboutThirtyMinutes = void 0;\n/**\n * The default retry policy. Retry up to 10 times, over the span of about 30 minutes. It's not exact because\n * randomization has been added to prevent a stampeding herd problem (if all instances in your application are retrying\n * a request at the exact same intervals, they are more likely to cause failures for each other).\n */\nexports.tenRetriesInAboutThirtyMinutes = {\n retries: 10,\n factor: 1.96821,\n randomize: true,\n};\n/**\n * Short & sweet, five retries in five minutes and then bail.\n */\nexports.fiveRetriesInFiveMinutes = {\n retries: 5,\n factor: 3.86,\n};\n/**\n * This policy is just to keep the tests running fast.\n */\nexports.rapidRetryPolicy = {\n minTimeout: 0,\n maxTimeout: 1,\n};\nconst policies = {\n tenRetriesInAboutThirtyMinutes: exports.tenRetriesInAboutThirtyMinutes,\n fiveRetriesInFiveMinutes: exports.fiveRetriesInFiveMinutes,\n rapidRetryPolicy: exports.rapidRetryPolicy,\n};\nexports.default = policies;\n//# sourceMappingURL=retry-policies.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=index.js.map","\"use strict\";\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ChatStreamer = void 0;\nclass ChatStreamer {\n /**\n * Instantiate a new chat streamer.\n *\n * @description The \"constructor\" method creates a unique {@link ChatStreamer} instance that keeps track of one chat stream.\n * @example\n * const client = new WebClient(process.env.SLACK_BOT_TOKEN);\n * const logger = new ConsoleLogger();\n * const args = {\n * channel: \"C0123456789\",\n * thread_ts: \"1700000001.123456\",\n * recipient_team_id: \"T0123456789\",\n * recipient_user_id: \"U0123456789\",\n * };\n * const streamer = new ChatStreamer(client, logger, args, { buffer_size: 512 });\n * await streamer.append({\n * markdown_text: \"**hello world!**\",\n * });\n * await streamer.stop();\n * @see {@link https://docs.slack.dev/reference/methods/chat.startStream}\n * @see {@link https://docs.slack.dev/reference/methods/chat.appendStream}\n * @see {@link https://docs.slack.dev/reference/methods/chat.stopStream}\n */\n constructor(client, logger, args, options) {\n var _a;\n this.buffer = '';\n this.client = client;\n this.logger = logger;\n this.options = {\n buffer_size: (_a = options.buffer_size) !== null && _a !== void 0 ? _a : 256,\n };\n this.state = 'starting';\n this.streamArgs = args;\n }\n /**\n * Append to the stream.\n *\n * @description The \"append\" method appends to the chat stream being used. This method can be called multiple times. After the stream is stopped this method cannot be called.\n * @example\n * const streamer = client.chatStream({\n * channel: \"C0123456789\",\n * thread_ts: \"1700000001.123456\",\n * recipient_team_id: \"T0123456789\",\n * recipient_user_id: \"U0123456789\",\n * });\n * await streamer.append({\n * markdown_text: \"**hello wo\",\n * });\n * await streamer.append({\n * markdown_text: \"rld!**\",\n * });\n * await streamer.stop();\n * @see {@link https://docs.slack.dev/reference/methods/chat.appendStream}\n */\n async append(args) {\n if (this.state === 'completed') {\n throw new Error(`failed to append stream: stream state is ${this.state}`);\n }\n const { markdown_text, chunks } = args, opts = __rest(args, [\"markdown_text\", \"chunks\"]);\n if (opts.token) {\n this.token = opts.token;\n }\n if (markdown_text) {\n this.buffer += markdown_text;\n }\n if (this.buffer.length >= this.options.buffer_size || chunks) {\n return await this.flushBuffer(Object.assign({ chunks }, opts));\n }\n const details = {\n bufferLength: this.buffer.length,\n bufferSize: this.options.buffer_size,\n channel: this.streamArgs.channel,\n recipientTeamId: this.streamArgs.recipient_team_id,\n recipientUserId: this.streamArgs.recipient_user_id,\n threadTs: this.streamArgs.thread_ts,\n };\n this.logger.debug(`ChatStreamer appended to buffer: ${JSON.stringify(details)}`);\n return null;\n }\n /**\n * Stop the stream and finalize the message.\n *\n * @description The \"stop\" method stops the chat stream being used. This method can be called once to end the stream. Additional \"blocks\" and \"metadata\" can be provided.\n *\n * @example\n * const streamer = client.chatStream({\n * channel: \"C0123456789\",\n * thread_ts: \"1700000001.123456\",\n * recipient_team_id: \"T0123456789\",\n * recipient_user_id: \"U0123456789\",\n * });\n * await streamer.append({\n * markdown_text: \"**hello world!**\",\n * });\n * await streamer.stop();\n * @see {@link https://docs.slack.dev/reference/methods/chat.stopStream}\n */\n async stop(args) {\n if (this.state === 'completed') {\n throw new Error(`failed to stop stream: stream state is ${this.state}`);\n }\n const _a = args !== null && args !== void 0 ? args : {}, { markdown_text, chunks } = _a, opts = __rest(_a, [\"markdown_text\", \"chunks\"]);\n if (opts.token) {\n this.token = opts.token;\n }\n if (markdown_text) {\n this.buffer += markdown_text;\n }\n if (!this.streamTs) {\n const response = await this.client.chat.startStream(Object.assign(Object.assign({}, this.streamArgs), { token: this.token }));\n if (!response.ts) {\n throw new Error('failed to stop stream: stream not started');\n }\n this.streamTs = response.ts;\n this.state = 'in_progress';\n }\n const chunksToFlush = [];\n if (this.buffer.length > 0) {\n chunksToFlush.push({\n type: 'markdown_text',\n text: this.buffer,\n });\n }\n if (chunks) {\n chunksToFlush.push(...chunks);\n }\n const response = await this.client.chat.stopStream(Object.assign({ token: this.token, channel: this.streamArgs.channel, ts: this.streamTs, chunks: chunksToFlush }, opts));\n this.state = 'completed';\n return response;\n }\n async flushBuffer(args) {\n const _a = args !== null && args !== void 0 ? args : {}, { chunks } = _a, opts = __rest(_a, [\"chunks\"]);\n const chunksToFlush = [];\n if (this.buffer.length > 0) {\n chunksToFlush.push({\n type: 'markdown_text',\n text: this.buffer,\n });\n }\n if (chunks) {\n chunksToFlush.push(...chunks);\n }\n if (!this.streamTs) {\n const response = await this.client.chat.startStream(Object.assign(Object.assign(Object.assign({}, this.streamArgs), { token: this.token, chunks: chunksToFlush }), opts));\n this.buffer = '';\n this.streamTs = response.ts;\n this.state = 'in_progress';\n return response;\n }\n const response = await this.client.chat.appendStream(Object.assign({ token: this.token, channel: this.streamArgs.channel, ts: this.streamTs, chunks: chunksToFlush }, opts));\n this.buffer = '';\n return response;\n }\n}\nexports.ChatStreamer = ChatStreamer;\n//# sourceMappingURL=chat-stream.js.map","'use strict';\n\n/* eslint-env browser */\nmodule.exports = typeof self === 'object' ? self.FormData : window.FormData;\n","// https://github.com/electron/electron/issues/2288\nfunction isElectron() {\n // Renderer process\n if (typeof window !== 'undefined' && typeof window.process === 'object' && window.process.type === 'renderer') {\n return true;\n }\n\n // Main process\n if (typeof process !== 'undefined' && typeof process.versions === 'object' && !!process.versions.electron) {\n return true;\n }\n\n // Detect the user agent when the `nodeIntegration` option is set to false\n if (typeof navigator === 'object' && typeof navigator.userAgent === 'string' && navigator.userAgent.indexOf('Electron') >= 0) {\n return true;\n }\n\n return false;\n}\n\nmodule.exports = isElectron;\n","'use strict';\n\nconst isStream = stream =>\n\tstream !== null &&\n\ttypeof stream === 'object' &&\n\ttypeof stream.pipe === 'function';\n\nisStream.writable = stream =>\n\tisStream(stream) &&\n\tstream.writable !== false &&\n\ttypeof stream._write === 'function' &&\n\ttypeof stream._writableState === 'object';\n\nisStream.readable = stream =>\n\tisStream(stream) &&\n\tstream.readable !== false &&\n\ttypeof stream._read === 'function' &&\n\ttypeof stream._readableState === 'object';\n\nisStream.duplex = stream =>\n\tisStream.writable(stream) &&\n\tisStream.readable(stream);\n\nisStream.transform = stream =>\n\tisStream.duplex(stream) &&\n\ttypeof stream._transform === 'function';\n\nmodule.exports = isStream;\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n","'use strict';\nmodule.exports = (promise, onFinally) => {\n\tonFinally = onFinally || (() => {});\n\n\treturn promise.then(\n\t\tval => new Promise(resolve => {\n\t\t\tresolve(onFinally());\n\t\t}).then(() => val),\n\t\terr => new Promise(resolve => {\n\t\t\tresolve(onFinally());\n\t\t}).then(() => {\n\t\t\tthrow err;\n\t\t})\n\t);\n};\n","'use strict';\n\nconst pFinally = require('p-finally');\n\nclass TimeoutError extends Error {\n\tconstructor(message) {\n\t\tsuper(message);\n\t\tthis.name = 'TimeoutError';\n\t}\n}\n\nconst pTimeout = (promise, milliseconds, fallback) => new Promise((resolve, reject) => {\n\tif (typeof milliseconds !== 'number' || milliseconds < 0) {\n\t\tthrow new TypeError('Expected `milliseconds` to be a positive number');\n\t}\n\n\tif (milliseconds === Infinity) {\n\t\tresolve(promise);\n\t\treturn;\n\t}\n\n\tconst timer = setTimeout(() => {\n\t\tif (typeof fallback === 'function') {\n\t\t\ttry {\n\t\t\t\tresolve(fallback());\n\t\t\t} catch (error) {\n\t\t\t\treject(error);\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tconst message = typeof fallback === 'string' ? fallback : `Promise timed out after ${milliseconds} milliseconds`;\n\t\tconst timeoutError = fallback instanceof Error ? fallback : new TimeoutError(message);\n\n\t\tif (typeof promise.cancel === 'function') {\n\t\t\tpromise.cancel();\n\t\t}\n\n\t\treject(timeoutError);\n\t}, milliseconds);\n\n\t// TODO: Use native `finally` keyword when targeting Node.js 10\n\tpFinally(\n\t\t// eslint-disable-next-line promise/prefer-await-to-then\n\t\tpromise.then(resolve, reject),\n\t\t() => {\n\t\t\tclearTimeout(timer);\n\t\t}\n\t);\n});\n\nmodule.exports = pTimeout;\n// TODO: Remove this for the next major release\nmodule.exports.default = pTimeout;\n\nmodule.exports.TimeoutError = TimeoutError;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// Port of lower_bound from https://en.cppreference.com/w/cpp/algorithm/lower_bound\n// Used to compute insertion index to keep queue sorted after insertion\nfunction lowerBound(array, value, comparator) {\n let first = 0;\n let count = array.length;\n while (count > 0) {\n const step = (count / 2) | 0;\n let it = first + step;\n if (comparator(array[it], value) <= 0) {\n first = ++it;\n count -= step + 1;\n }\n else {\n count = step;\n }\n }\n return first;\n}\nexports.default = lowerBound;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst lower_bound_1 = require(\"./lower-bound\");\nclass PriorityQueue {\n constructor() {\n this._queue = [];\n }\n enqueue(run, options) {\n options = Object.assign({ priority: 0 }, options);\n const element = {\n priority: options.priority,\n run\n };\n if (this.size && this._queue[this.size - 1].priority >= options.priority) {\n this._queue.push(element);\n return;\n }\n const index = lower_bound_1.default(this._queue, element, (a, b) => b.priority - a.priority);\n this._queue.splice(index, 0, element);\n }\n dequeue() {\n const item = this._queue.shift();\n return item === null || item === void 0 ? void 0 : item.run;\n }\n filter(options) {\n return this._queue.filter((element) => element.priority === options.priority).map((element) => element.run);\n }\n get size() {\n return this._queue.length;\n }\n}\nexports.default = PriorityQueue;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst EventEmitter = require(\"eventemitter3\");\nconst p_timeout_1 = require(\"p-timeout\");\nconst priority_queue_1 = require(\"./priority-queue\");\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nconst empty = () => { };\nconst timeoutError = new p_timeout_1.TimeoutError();\n/**\nPromise queue with concurrency control.\n*/\nclass PQueue extends EventEmitter {\n constructor(options) {\n var _a, _b, _c, _d;\n super();\n this._intervalCount = 0;\n this._intervalEnd = 0;\n this._pendingCount = 0;\n this._resolveEmpty = empty;\n this._resolveIdle = empty;\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n options = Object.assign({ carryoverConcurrencyCount: false, intervalCap: Infinity, interval: 0, concurrency: Infinity, autoStart: true, queueClass: priority_queue_1.default }, options);\n if (!(typeof options.intervalCap === 'number' && options.intervalCap >= 1)) {\n throw new TypeError(`Expected \\`intervalCap\\` to be a number from 1 and up, got \\`${(_b = (_a = options.intervalCap) === null || _a === void 0 ? void 0 : _a.toString()) !== null && _b !== void 0 ? _b : ''}\\` (${typeof options.intervalCap})`);\n }\n if (options.interval === undefined || !(Number.isFinite(options.interval) && options.interval >= 0)) {\n throw new TypeError(`Expected \\`interval\\` to be a finite number >= 0, got \\`${(_d = (_c = options.interval) === null || _c === void 0 ? void 0 : _c.toString()) !== null && _d !== void 0 ? _d : ''}\\` (${typeof options.interval})`);\n }\n this._carryoverConcurrencyCount = options.carryoverConcurrencyCount;\n this._isIntervalIgnored = options.intervalCap === Infinity || options.interval === 0;\n this._intervalCap = options.intervalCap;\n this._interval = options.interval;\n this._queue = new options.queueClass();\n this._queueClass = options.queueClass;\n this.concurrency = options.concurrency;\n this._timeout = options.timeout;\n this._throwOnTimeout = options.throwOnTimeout === true;\n this._isPaused = options.autoStart === false;\n }\n get _doesIntervalAllowAnother() {\n return this._isIntervalIgnored || this._intervalCount < this._intervalCap;\n }\n get _doesConcurrentAllowAnother() {\n return this._pendingCount < this._concurrency;\n }\n _next() {\n this._pendingCount--;\n this._tryToStartAnother();\n this.emit('next');\n }\n _resolvePromises() {\n this._resolveEmpty();\n this._resolveEmpty = empty;\n if (this._pendingCount === 0) {\n this._resolveIdle();\n this._resolveIdle = empty;\n this.emit('idle');\n }\n }\n _onResumeInterval() {\n this._onInterval();\n this._initializeIntervalIfNeeded();\n this._timeoutId = undefined;\n }\n _isIntervalPaused() {\n const now = Date.now();\n if (this._intervalId === undefined) {\n const delay = this._intervalEnd - now;\n if (delay < 0) {\n // Act as the interval was done\n // We don't need to resume it here because it will be resumed on line 160\n this._intervalCount = (this._carryoverConcurrencyCount) ? this._pendingCount : 0;\n }\n else {\n // Act as the interval is pending\n if (this._timeoutId === undefined) {\n this._timeoutId = setTimeout(() => {\n this._onResumeInterval();\n }, delay);\n }\n return true;\n }\n }\n return false;\n }\n _tryToStartAnother() {\n if (this._queue.size === 0) {\n // We can clear the interval (\"pause\")\n // Because we can redo it later (\"resume\")\n if (this._intervalId) {\n clearInterval(this._intervalId);\n }\n this._intervalId = undefined;\n this._resolvePromises();\n return false;\n }\n if (!this._isPaused) {\n const canInitializeInterval = !this._isIntervalPaused();\n if (this._doesIntervalAllowAnother && this._doesConcurrentAllowAnother) {\n const job = this._queue.dequeue();\n if (!job) {\n return false;\n }\n this.emit('active');\n job();\n if (canInitializeInterval) {\n this._initializeIntervalIfNeeded();\n }\n return true;\n }\n }\n return false;\n }\n _initializeIntervalIfNeeded() {\n if (this._isIntervalIgnored || this._intervalId !== undefined) {\n return;\n }\n this._intervalId = setInterval(() => {\n this._onInterval();\n }, this._interval);\n this._intervalEnd = Date.now() + this._interval;\n }\n _onInterval() {\n if (this._intervalCount === 0 && this._pendingCount === 0 && this._intervalId) {\n clearInterval(this._intervalId);\n this._intervalId = undefined;\n }\n this._intervalCount = this._carryoverConcurrencyCount ? this._pendingCount : 0;\n this._processQueue();\n }\n /**\n Executes all queued functions until it reaches the limit.\n */\n _processQueue() {\n // eslint-disable-next-line no-empty\n while (this._tryToStartAnother()) { }\n }\n get concurrency() {\n return this._concurrency;\n }\n set concurrency(newConcurrency) {\n if (!(typeof newConcurrency === 'number' && newConcurrency >= 1)) {\n throw new TypeError(`Expected \\`concurrency\\` to be a number from 1 and up, got \\`${newConcurrency}\\` (${typeof newConcurrency})`);\n }\n this._concurrency = newConcurrency;\n this._processQueue();\n }\n /**\n Adds a sync or async task to the queue. Always returns a promise.\n */\n async add(fn, options = {}) {\n return new Promise((resolve, reject) => {\n const run = async () => {\n this._pendingCount++;\n this._intervalCount++;\n try {\n const operation = (this._timeout === undefined && options.timeout === undefined) ? fn() : p_timeout_1.default(Promise.resolve(fn()), (options.timeout === undefined ? this._timeout : options.timeout), () => {\n if (options.throwOnTimeout === undefined ? this._throwOnTimeout : options.throwOnTimeout) {\n reject(timeoutError);\n }\n return undefined;\n });\n resolve(await operation);\n }\n catch (error) {\n reject(error);\n }\n this._next();\n };\n this._queue.enqueue(run, options);\n this._tryToStartAnother();\n this.emit('add');\n });\n }\n /**\n Same as `.add()`, but accepts an array of sync or async functions.\n\n @returns A promise that resolves when all functions are resolved.\n */\n async addAll(functions, options) {\n return Promise.all(functions.map(async (function_) => this.add(function_, options)));\n }\n /**\n Start (or resume) executing enqueued tasks within concurrency limit. No need to call this if queue is not paused (via `options.autoStart = false` or by `.pause()` method.)\n */\n start() {\n if (!this._isPaused) {\n return this;\n }\n this._isPaused = false;\n this._processQueue();\n return this;\n }\n /**\n Put queue execution on hold.\n */\n pause() {\n this._isPaused = true;\n }\n /**\n Clear the queue.\n */\n clear() {\n this._queue = new this._queueClass();\n }\n /**\n Can be called multiple times. Useful if you for example add additional items at a later time.\n\n @returns A promise that settles when the queue becomes empty.\n */\n async onEmpty() {\n // Instantly resolve if the queue is empty\n if (this._queue.size === 0) {\n return;\n }\n return new Promise(resolve => {\n const existingResolve = this._resolveEmpty;\n this._resolveEmpty = () => {\n existingResolve();\n resolve();\n };\n });\n }\n /**\n The difference with `.onEmpty` is that `.onIdle` guarantees that all work from the queue has finished. `.onEmpty` merely signals that the queue is empty, but it could mean that some promises haven't completed yet.\n\n @returns A promise that settles when the queue becomes empty, and all promises have completed; `queue.size === 0 && queue.pending === 0`.\n */\n async onIdle() {\n // Instantly resolve if none pending and if nothing else is queued\n if (this._pendingCount === 0 && this._queue.size === 0) {\n return;\n }\n return new Promise(resolve => {\n const existingResolve = this._resolveIdle;\n this._resolveIdle = () => {\n existingResolve();\n resolve();\n };\n });\n }\n /**\n Size of the queue.\n */\n get size() {\n return this._queue.size;\n }\n /**\n Size of the queue, filtered by the given options.\n\n For example, this can be used to find the number of items remaining in the queue with a specific priority level.\n */\n sizeBy(options) {\n // eslint-disable-next-line unicorn/no-fn-reference-in-iterator\n return this._queue.filter(options).length;\n }\n /**\n Number of pending promises.\n */\n get pending() {\n return this._pendingCount;\n }\n /**\n Whether the queue is currently paused.\n */\n get isPaused() {\n return this._isPaused;\n }\n get timeout() {\n return this._timeout;\n }\n /**\n Set the timeout for future operations.\n */\n set timeout(milliseconds) {\n this._timeout = milliseconds;\n }\n}\nexports.default = PQueue;\n","function RetryOperation(timeouts, options) {\n // Compatibility for the old (timeouts, retryForever) signature\n if (typeof options === 'boolean') {\n options = { forever: options };\n }\n\n this._originalTimeouts = JSON.parse(JSON.stringify(timeouts));\n this._timeouts = timeouts;\n this._options = options || {};\n this._maxRetryTime = options && options.maxRetryTime || Infinity;\n this._fn = null;\n this._errors = [];\n this._attempts = 1;\n this._operationTimeout = null;\n this._operationTimeoutCb = null;\n this._timeout = null;\n this._operationStart = null;\n this._timer = null;\n\n if (this._options.forever) {\n this._cachedTimeouts = this._timeouts.slice(0);\n }\n}\nmodule.exports = RetryOperation;\n\nRetryOperation.prototype.reset = function() {\n this._attempts = 1;\n this._timeouts = this._originalTimeouts.slice(0);\n}\n\nRetryOperation.prototype.stop = function() {\n if (this._timeout) {\n clearTimeout(this._timeout);\n }\n if (this._timer) {\n clearTimeout(this._timer);\n }\n\n this._timeouts = [];\n this._cachedTimeouts = null;\n};\n\nRetryOperation.prototype.retry = function(err) {\n if (this._timeout) {\n clearTimeout(this._timeout);\n }\n\n if (!err) {\n return false;\n }\n var currentTime = new Date().getTime();\n if (err && currentTime - this._operationStart >= this._maxRetryTime) {\n this._errors.push(err);\n this._errors.unshift(new Error('RetryOperation timeout occurred'));\n return false;\n }\n\n this._errors.push(err);\n\n var timeout = this._timeouts.shift();\n if (timeout === undefined) {\n if (this._cachedTimeouts) {\n // retry forever, only keep last error\n this._errors.splice(0, this._errors.length - 1);\n timeout = this._cachedTimeouts.slice(-1);\n } else {\n return false;\n }\n }\n\n var self = this;\n this._timer = setTimeout(function() {\n self._attempts++;\n\n if (self._operationTimeoutCb) {\n self._timeout = setTimeout(function() {\n self._operationTimeoutCb(self._attempts);\n }, self._operationTimeout);\n\n if (self._options.unref) {\n self._timeout.unref();\n }\n }\n\n self._fn(self._attempts);\n }, timeout);\n\n if (this._options.unref) {\n this._timer.unref();\n }\n\n return true;\n};\n\nRetryOperation.prototype.attempt = function(fn, timeoutOps) {\n this._fn = fn;\n\n if (timeoutOps) {\n if (timeoutOps.timeout) {\n this._operationTimeout = timeoutOps.timeout;\n }\n if (timeoutOps.cb) {\n this._operationTimeoutCb = timeoutOps.cb;\n }\n }\n\n var self = this;\n if (this._operationTimeoutCb) {\n this._timeout = setTimeout(function() {\n self._operationTimeoutCb();\n }, self._operationTimeout);\n }\n\n this._operationStart = new Date().getTime();\n\n this._fn(this._attempts);\n};\n\nRetryOperation.prototype.try = function(fn) {\n console.log('Using RetryOperation.try() is deprecated');\n this.attempt(fn);\n};\n\nRetryOperation.prototype.start = function(fn) {\n console.log('Using RetryOperation.start() is deprecated');\n this.attempt(fn);\n};\n\nRetryOperation.prototype.start = RetryOperation.prototype.try;\n\nRetryOperation.prototype.errors = function() {\n return this._errors;\n};\n\nRetryOperation.prototype.attempts = function() {\n return this._attempts;\n};\n\nRetryOperation.prototype.mainError = function() {\n if (this._errors.length === 0) {\n return null;\n }\n\n var counts = {};\n var mainError = null;\n var mainErrorCount = 0;\n\n for (var i = 0; i < this._errors.length; i++) {\n var error = this._errors[i];\n var message = error.message;\n var count = (counts[message] || 0) + 1;\n\n counts[message] = count;\n\n if (count >= mainErrorCount) {\n mainError = error;\n mainErrorCount = count;\n }\n }\n\n return mainError;\n};\n","var RetryOperation = require('./retry_operation');\n\nexports.operation = function(options) {\n var timeouts = exports.timeouts(options);\n return new RetryOperation(timeouts, {\n forever: options && (options.forever || options.retries === Infinity),\n unref: options && options.unref,\n maxRetryTime: options && options.maxRetryTime\n });\n};\n\nexports.timeouts = function(options) {\n if (options instanceof Array) {\n return [].concat(options);\n }\n\n var opts = {\n retries: 10,\n factor: 2,\n minTimeout: 1 * 1000,\n maxTimeout: Infinity,\n randomize: false\n };\n for (var key in options) {\n opts[key] = options[key];\n }\n\n if (opts.minTimeout > opts.maxTimeout) {\n throw new Error('minTimeout is greater than maxTimeout');\n }\n\n var timeouts = [];\n for (var i = 0; i < opts.retries; i++) {\n timeouts.push(this.createTimeout(i, opts));\n }\n\n if (options && options.forever && !timeouts.length) {\n timeouts.push(this.createTimeout(i, opts));\n }\n\n // sort the array numerically ascending\n timeouts.sort(function(a,b) {\n return a - b;\n });\n\n return timeouts;\n};\n\nexports.createTimeout = function(attempt, opts) {\n var random = (opts.randomize)\n ? (Math.random() + 1)\n : 1;\n\n var timeout = Math.round(random * Math.max(opts.minTimeout, 1) * Math.pow(opts.factor, attempt));\n timeout = Math.min(timeout, opts.maxTimeout);\n\n return timeout;\n};\n\nexports.wrap = function(obj, options, methods) {\n if (options instanceof Array) {\n methods = options;\n options = null;\n }\n\n if (!methods) {\n methods = [];\n for (var key in obj) {\n if (typeof obj[key] === 'function') {\n methods.push(key);\n }\n }\n }\n\n for (var i = 0; i < methods.length; i++) {\n var method = methods[i];\n var original = obj[method];\n\n obj[method] = function retryWrapper(original) {\n var op = exports.operation(options);\n var args = Array.prototype.slice.call(arguments, 1);\n var callback = args.pop();\n\n args.push(function(err) {\n if (op.retry(err)) {\n return;\n }\n if (err) {\n arguments[0] = op.mainError();\n }\n callback.apply(this, arguments);\n });\n\n op.attempt(function() {\n original.apply(obj, args);\n });\n }.bind(obj, original);\n obj[method].options = options;\n }\n};\n","module.exports = require('./lib/retry');","'use strict';\nconst retry = require('retry');\n\nconst networkErrorMsgs = [\n\t'Failed to fetch', // Chrome\n\t'NetworkError when attempting to fetch resource.', // Firefox\n\t'The Internet connection appears to be offline.', // Safari\n\t'Network request failed' // `cross-fetch`\n];\n\nclass AbortError extends Error {\n\tconstructor(message) {\n\t\tsuper();\n\n\t\tif (message instanceof Error) {\n\t\t\tthis.originalError = message;\n\t\t\t({message} = message);\n\t\t} else {\n\t\t\tthis.originalError = new Error(message);\n\t\t\tthis.originalError.stack = this.stack;\n\t\t}\n\n\t\tthis.name = 'AbortError';\n\t\tthis.message = message;\n\t}\n}\n\nconst decorateErrorWithCounts = (error, attemptNumber, options) => {\n\t// Minus 1 from attemptNumber because the first attempt does not count as a retry\n\tconst retriesLeft = options.retries - (attemptNumber - 1);\n\n\terror.attemptNumber = attemptNumber;\n\terror.retriesLeft = retriesLeft;\n\treturn error;\n};\n\nconst isNetworkError = errorMessage => networkErrorMsgs.includes(errorMessage);\n\nconst pRetry = (input, options) => new Promise((resolve, reject) => {\n\toptions = {\n\t\tonFailedAttempt: () => {},\n\t\tretries: 10,\n\t\t...options\n\t};\n\n\tconst operation = retry.operation(options);\n\n\toperation.attempt(async attemptNumber => {\n\t\ttry {\n\t\t\tresolve(await input(attemptNumber));\n\t\t} catch (error) {\n\t\t\tif (!(error instanceof Error)) {\n\t\t\t\treject(new TypeError(`Non-error was thrown: \"${error}\". You should only throw errors.`));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (error instanceof AbortError) {\n\t\t\t\toperation.stop();\n\t\t\t\treject(error.originalError);\n\t\t\t} else if (error instanceof TypeError && !isNetworkError(error.message)) {\n\t\t\t\toperation.stop();\n\t\t\t\treject(error);\n\t\t\t} else {\n\t\t\t\tdecorateErrorWithCounts(error, attemptNumber, options);\n\n\t\t\t\ttry {\n\t\t\t\t\tawait options.onFailedAttempt(error);\n\t\t\t\t} catch (error) {\n\t\t\t\t\treject(error);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (!operation.retry(error)) {\n\t\t\t\t\treject(operation.mainError());\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n});\n\nmodule.exports = pRetry;\n// TODO: remove this in the next major version\nmodule.exports.default = pRetry;\n\nmodule.exports.AbortError = AbortError;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getFileUploadJob = getFileUploadJob;\nexports.getMultipleFileUploadJobs = getMultipleFileUploadJobs;\nexports.getFileData = getFileData;\nexports.getFileDataLength = getFileDataLength;\nexports.getFileDataAsStream = getFileDataAsStream;\nexports.getAllFileUploadsToComplete = getAllFileUploadsToComplete;\nexports.warnIfNotUsingFilesUploadV2 = warnIfNotUsingFilesUploadV2;\nexports.warnIfChannels = warnIfChannels;\nexports.errorIfChannelsCsv = errorIfChannelsCsv;\nexports.errorIfInvalidOrMissingFileData = errorIfInvalidOrMissingFileData;\nexports.warnIfMissingOrInvalidFileNameAndDefault = warnIfMissingOrInvalidFileNameAndDefault;\nexports.warnIfLegacyFileType = warnIfLegacyFileType;\nexports.buildMissingFileIdError = buildMissingFileIdError;\nexports.buildFileSizeErrorMsg = buildFileSizeErrorMsg;\nexports.buildLegacyFileTypeWarning = buildLegacyFileTypeWarning;\nexports.buildMissingFileNameWarning = buildMissingFileNameWarning;\nexports.buildMissingExtensionWarning = buildMissingExtensionWarning;\nexports.buildLegacyMethodWarning = buildLegacyMethodWarning;\nexports.buildGeneralFilesUploadWarning = buildGeneralFilesUploadWarning;\nexports.buildFilesUploadMissingMessage = buildFilesUploadMissingMessage;\nexports.buildChannelsWarning = buildChannelsWarning;\nexports.buildMultipleChannelsErrorMsg = buildMultipleChannelsErrorMsg;\nexports.buildInvalidFilesUploadParamError = buildInvalidFilesUploadParamError;\nconst node_fs_1 = require(\"node:fs\");\nconst node_stream_1 = require(\"node:stream\");\nconst errors_1 = require(\"./errors\");\nasync function getFileUploadJob(options, logger) {\n var _a, _b, _c, _d;\n // Validate parameters\n warnIfLegacyFileType(options, logger);\n warnIfChannels(options, logger);\n errorIfChannelsCsv(options);\n const fileName = warnIfMissingOrInvalidFileNameAndDefault(options, logger);\n const fileData = await getFileData(options);\n const fileDataBytesLength = getFileDataLength(fileData);\n const fileUploadJob = {\n // supplied by user\n alt_text: options.alt_text,\n blocks: options.blocks,\n channel_id: (_a = options.channels) !== null && _a !== void 0 ? _a : options.channel_id,\n filename: (_b = options.filename) !== null && _b !== void 0 ? _b : fileName,\n initial_comment: options.initial_comment,\n snippet_type: options.snippet_type,\n title: (_d = (_c = options.title) !== null && _c !== void 0 ? _c : options.filename) !== null && _d !== void 0 ? _d : fileName, // default title to filename unless otherwise specified\n // calculated\n data: fileData,\n length: fileDataBytesLength,\n };\n if ('thread_ts' in options) {\n fileUploadJob.thread_ts = options.thread_ts;\n }\n if ('token' in options) {\n fileUploadJob.token = options.token;\n }\n if ('content' in options) {\n return Object.assign({ content: options.content }, fileUploadJob);\n }\n if ('file' in options) {\n return Object.assign({ file: options.file }, fileUploadJob);\n }\n throw (0, errors_1.errorWithCode)(new Error('Either a file or content field is required for valid file upload. You must supply one'), errors_1.ErrorCode.FileUploadInvalidArgumentsError);\n}\n/**\n * Returns an array of files upload entries when `file_uploads` is supplied.\n * **Note**\n * file_uploads should be set when multiple files are intended to be attached to a\n * single message. To support this, we handle options supplied with\n * top level `initial_comment`, `thread_ts`, `channel_id` and `file_uploads` parameters.\n * ```javascript\n * const res = await client.files.uploadV2({\n * initial_comment: 'Here are the files!',\n * thread_ts: '1223313423434.131321',\n * channel_id: 'C12345',\n * file_uploads: [\n * {\n * file: './test/fixtures/test-txt.txt',\n * filename: 'test-txt.txt',\n * },\n * {\n * file: './test/fixtures/test-png.png',\n * filename: 'test-png.png',\n * },\n * ],\n * });\n * ```\n * @param options provided by user\n */\nasync function getMultipleFileUploadJobs(options, logger) {\n if ('file_uploads' in options) {\n // go through each file_upload and create a job for it\n return Promise.all(options.file_uploads.map((upload) => {\n // ensure no omitted properties included in files_upload entry\n // these properties are valid only at the top-level, not\n // inside file_uploads.\n const { blocks, channel_id, channels, initial_comment, thread_ts } = upload;\n if (blocks || channel_id || channels || initial_comment || thread_ts) {\n throw (0, errors_1.errorWithCode)(new Error(buildInvalidFilesUploadParamError()), errors_1.ErrorCode.FileUploadInvalidArgumentsError);\n }\n // takes any channel_id, initial_comment and thread_ts\n // supplied at the top level.\n const uploadJobArgs = Object.assign(Object.assign({}, upload), { blocks: options.blocks, channels: options.channels, channel_id: options.channel_id, initial_comment: options.initial_comment });\n if ('thread_ts' in options) {\n uploadJobArgs.thread_ts = options.thread_ts;\n }\n if ('token' in options) {\n uploadJobArgs.token = options.token;\n }\n if ('content' in upload) {\n return getFileUploadJob(Object.assign({ content: upload.content }, uploadJobArgs), logger);\n }\n if ('file' in upload) {\n return getFileUploadJob(Object.assign({ file: upload.file }, uploadJobArgs), logger);\n }\n throw (0, errors_1.errorWithCode)(new Error('Either a file or content field is required for valid file upload. You must supply one'), errors_1.ErrorCode.FileUploadInvalidArgumentsError);\n }));\n }\n throw new Error(buildFilesUploadMissingMessage());\n}\n// Helpers to build the FileUploadJob\n/**\n * Returns a single file upload's data\n * @param options\n * @returns Binary data representation of file\n */\nasync function getFileData(options) {\n errorIfInvalidOrMissingFileData(options);\n if ('file' in options) {\n const { file } = options;\n // try to handle as buffer\n if (Buffer.isBuffer(file))\n return file;\n // try to handle as filepath\n if (typeof file === 'string') {\n // try to read file as if the string was a file path\n try {\n const dataBuffer = (0, node_fs_1.readFileSync)(file);\n return dataBuffer;\n }\n catch (_err) {\n throw (0, errors_1.errorWithCode)(new Error(`Unable to resolve file data for ${file}. Please supply a filepath string, or binary data Buffer or String directly.`), errors_1.ErrorCode.FileUploadInvalidArgumentsError);\n }\n }\n // try to handle as Readable\n const data = await getFileDataAsStream(file);\n if (data)\n return data;\n }\n if ('content' in options)\n return Buffer.from(options.content);\n // general catch-all error\n throw (0, errors_1.errorWithCode)(new Error('There was an issue getting the file data for the file or content supplied'), errors_1.ErrorCode.FileUploadReadFileDataError);\n}\nfunction getFileDataLength(data) {\n if (data) {\n return Buffer.byteLength(data, 'utf8');\n }\n throw (0, errors_1.errorWithCode)(new Error(buildFileSizeErrorMsg()), errors_1.ErrorCode.FileUploadReadFileDataError);\n}\nasync function getFileDataAsStream(readable) {\n const chunks = [];\n return new Promise((resolve, reject) => {\n readable.on('readable', () => {\n let chunk = readable.read();\n while (chunk !== null) {\n chunks.push(chunk);\n chunk = readable.read();\n }\n });\n readable.on('end', () => {\n if (chunks.length > 0) {\n const content = Buffer.concat(chunks);\n resolve(content);\n }\n else {\n reject(Error('No data in supplied file'));\n }\n });\n });\n}\n/**\n * Filters through all fileUploads and groups them into jobs for completion\n * based on combination of channel_id, thread_ts, initial_comment, blocks.\n * {@link https://docs.slack.dev/reference/methods/files.completeUploadExternal files.completeUploadExternal} allows for multiple\n * files to be uploaded with a message (`initial_comment`), and as a threaded message (`thread_ts`)\n * In order to be grouped together, file uploads must have like properties.\n * @param fileUploads\n * @returns\n */\nfunction getAllFileUploadsToComplete(fileUploads) {\n const toComplete = {};\n for (const upload of fileUploads) {\n const { blocks, channel_id, thread_ts, initial_comment, file_id, title } = upload;\n if (file_id) {\n const compareString = `:::${channel_id}:::${thread_ts}:::${initial_comment}:::${JSON.stringify(blocks)}`;\n // biome-ignore lint/suspicious/noPrototypeBuiltins: TODO use hasOwn instead of hasOwnProperty\n if (!Object.prototype.hasOwnProperty.call(toComplete, compareString)) {\n toComplete[compareString] = {\n files: [{ id: file_id, title }],\n channel_id,\n blocks,\n initial_comment,\n };\n if (thread_ts && channel_id) {\n const fileThreadDestinationArgument = {\n channel_id,\n thread_ts,\n };\n toComplete[compareString] = Object.assign(Object.assign({}, toComplete[compareString]), fileThreadDestinationArgument);\n }\n if ('token' in upload) {\n toComplete[compareString].token = upload.token;\n }\n }\n else {\n toComplete[compareString].files.push({\n id: file_id,\n title,\n });\n }\n }\n else {\n throw new Error(buildMissingFileIdError());\n }\n }\n return toComplete;\n}\n// Validation\n/**\n * Advise to use the files.uploadV2 method over legacy files.upload method and over\n * lower-level utilities.\n * @param method\n * @param logger\n */\nfunction warnIfNotUsingFilesUploadV2(method, logger) {\n const targetMethods = ['files.upload'];\n const isTargetMethod = targetMethods.includes(method);\n if (method === 'files.upload')\n logger.warn(buildLegacyMethodWarning(method));\n if (isTargetMethod)\n logger.info(buildGeneralFilesUploadWarning());\n}\n/**\n * `channels` param is supported but only when a single channel is specified.\n * @param options\n * @param logger\n */\nfunction warnIfChannels(options, logger) {\n if (options.channels)\n logger.warn(buildChannelsWarning());\n}\n/**\n * v1 files.upload supported `channels` parameter provided as a comma-separated\n * string of values, e.g. 'C1234,C5678'. V2 no longer supports this csv value.\n * You may still supply `channels` with a single channel string value e.g. 'C1234'\n * but it is highly encouraged to supply `channel_id` instead.\n * @param options\n */\nfunction errorIfChannelsCsv(options) {\n const channels = options.channels ? options.channels.split(',') : [];\n if (channels.length > 1) {\n throw (0, errors_1.errorWithCode)(new Error(buildMultipleChannelsErrorMsg()), errors_1.ErrorCode.FileUploadInvalidArgumentsError);\n }\n}\n/**\n * Checks for either a file or content property and errors if missing\n * @param options\n */\nfunction errorIfInvalidOrMissingFileData(options) {\n const hasFile = 'file' in options;\n const hasContent = 'content' in options;\n if (!(hasFile || hasContent) || (hasFile && hasContent)) {\n throw (0, errors_1.errorWithCode)(new Error('Either a file or content field is required for valid file upload. You cannot supply both'), errors_1.ErrorCode.FileUploadInvalidArgumentsError);\n }\n if ('file' in options) {\n const { file } = options;\n if (file && !(typeof file === 'string' || Buffer.isBuffer(file) || file instanceof node_stream_1.Readable)) {\n throw (0, errors_1.errorWithCode)(new Error('file must be a valid string path, buffer or Readable'), errors_1.ErrorCode.FileUploadInvalidArgumentsError);\n }\n }\n if ('content' in options && options.content && typeof options.content !== 'string') {\n throw (0, errors_1.errorWithCode)(new Error('content must be a string'), errors_1.ErrorCode.FileUploadInvalidArgumentsError);\n }\n}\n/**\n * @param options\n * @param logger\n * @returns filename if it exists\n */\nfunction warnIfMissingOrInvalidFileNameAndDefault(options, logger) {\n var _a;\n const DEFAULT_FILETYPE = 'txt';\n const DEFAULT_FILENAME = `file.${(_a = options.filetype) !== null && _a !== void 0 ? _a : DEFAULT_FILETYPE}`;\n const { filename } = options;\n if (!filename) {\n // Filename was an optional property in legacy method\n logger.warn(buildMissingFileNameWarning());\n return DEFAULT_FILENAME;\n }\n if (filename.split('.').length < 2) {\n // likely filename is missing extension\n logger.warn(buildMissingExtensionWarning(filename));\n }\n return filename;\n}\n/**\n * `filetype` param is no longer supported and will be ignored\n * @param options\n * @param logger\n */\nfunction warnIfLegacyFileType(options, logger) {\n if (options.filetype) {\n logger.warn(buildLegacyFileTypeWarning());\n }\n}\n// Validation message utilities\nfunction buildMissingFileIdError() {\n return 'Missing required file id for file upload completion';\n}\nfunction buildFileSizeErrorMsg() {\n return 'There was an issue calculating the size of your file';\n}\nfunction buildLegacyFileTypeWarning() {\n return ('filetype is no longer a supported field in files.uploadV2.' +\n ' \\nPlease remove this field. To indicate file type, please do so via the required filename property' +\n ' using the appropriate file extension, e.g. image.png, text.txt');\n}\nfunction buildMissingFileNameWarning() {\n return ('filename is a required field for files.uploadV2. \\n For backwards compatibility and ease of migration, ' +\n 'defaulting the filename. For best experience and consistent unfurl behavior, you' +\n ' should set the filename property with correct file extension, e.g. image.png, text.txt');\n}\nfunction buildMissingExtensionWarning(filename) {\n return `filename supplied '${filename}' may be missing a proper extension. Missing extenions may result in unexpected unfurl behavior when shared`;\n}\nfunction buildLegacyMethodWarning(method) {\n return `${method} may cause some issues like timeouts for relatively large files.`;\n}\nfunction buildGeneralFilesUploadWarning() {\n return ('Our latest recommendation is to use client.files.uploadV2() method, ' +\n 'which is mostly compatible and much stabler, instead.');\n}\nfunction buildFilesUploadMissingMessage() {\n return 'Something went wrong with processing file_uploads';\n}\nfunction buildChannelsWarning() {\n return (\"Although the 'channels' parameter is still supported for smoother migration from legacy files.upload, \" +\n \"we recommend using the new channel_id parameter with a single str value instead (e.g. 'C12345').\");\n}\nfunction buildMultipleChannelsErrorMsg() {\n return 'Sharing files with multiple channels is no longer supported in v2. Share files in each channel separately instead.';\n}\nfunction buildInvalidFilesUploadParamError() {\n return ('You may supply file_uploads only for a single channel, message, or thread respectively. ' +\n 'Therefore, please supply any channel_id, initial_comment or blocks, or thread_ts in the top-layer.');\n}\n//# sourceMappingURL=file-upload.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = delay;\n/**\n * Build a Promise that will resolve after the specified number of milliseconds.\n * @param ms milliseconds to wait\n * @param value value for eventual resolution\n */\nfunction delay(ms) {\n return new Promise((resolve) => {\n setTimeout(resolve, ms);\n });\n}\n//# sourceMappingURL=helpers.js.map","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n","\"use strict\";\n// This file contains objects documented here: https://docs.slack.dev/reference/block-kit/block-elements\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=block-elements.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=blocks.js.map","\"use strict\";\n// This file contains objects documented here: https://docs.slack.dev/reference/block-kit/composition-objects\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=composition-objects.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=extensions.js.map","\"use strict\";\n// These types represent users in Slack Calls, which is an API for showing 3rd party calls within the Slack client.\n// More information on the API guide for Calls: https://docs.slack.dev/apis/web-api/using-the-calls-api\n// and on User objects for use with Calls: https://docs.slack.dev/apis/web-api/using-the-calls-api\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=calls.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=chunk.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=dialog.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=app.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=assistant.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=call.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=channel.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=dnd.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=email.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=emoji.js.map","\"use strict\";\n// NOTE: `file_comment_added` and `file_comment_edited` are left out because they are discontinued\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=file.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=function.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=grid-migration.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=group.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=im.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=invite.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=link-shared.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=member.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=message.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=message-metadata.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=pin.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=reaction.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=shared-channel.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=star.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=steps-from-apps.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=subteam.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=team.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=token.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=user.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./app\"), exports);\n__exportStar(require(\"./assistant\"), exports);\n__exportStar(require(\"./call\"), exports);\n__exportStar(require(\"./channel\"), exports);\n__exportStar(require(\"./dnd\"), exports);\n__exportStar(require(\"./email\"), exports);\n__exportStar(require(\"./emoji\"), exports);\n__exportStar(require(\"./file\"), exports);\n__exportStar(require(\"./function\"), exports);\n__exportStar(require(\"./grid-migration\"), exports);\n__exportStar(require(\"./group\"), exports);\n__exportStar(require(\"./im\"), exports);\n__exportStar(require(\"./invite\"), exports);\n__exportStar(require(\"./link-shared\"), exports);\n__exportStar(require(\"./member\"), exports);\n__exportStar(require(\"./message\"), exports);\n__exportStar(require(\"./message-metadata\"), exports);\n__exportStar(require(\"./pin\"), exports);\n__exportStar(require(\"./reaction\"), exports);\n__exportStar(require(\"./shared-channel\"), exports);\n__exportStar(require(\"./star\"), exports);\n__exportStar(require(\"./steps-from-apps\"), exports);\n__exportStar(require(\"./subteam\"), exports);\n__exportStar(require(\"./team\"), exports);\n__exportStar(require(\"./token\"), exports);\n__exportStar(require(\"./user\"), exports);\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=message-attachments.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CustomFieldType = exports.EntityType = void 0;\nvar EntityType;\n(function (EntityType) {\n EntityType[\"Task\"] = \"slack#/entities/task\";\n EntityType[\"File\"] = \"slack#/entities/file\";\n EntityType[\"Item\"] = \"slack#/entities/item\";\n EntityType[\"Incident\"] = \"slack#/entities/incident\";\n EntityType[\"ContentItem\"] = \"slack#/entities/content_item\";\n})(EntityType || (exports.EntityType = EntityType = {}));\nvar CustomFieldType;\n(function (CustomFieldType) {\n CustomFieldType[\"Integer\"] = \"integer\";\n CustomFieldType[\"String\"] = \"string\";\n CustomFieldType[\"Array\"] = \"array\";\n CustomFieldType[\"Date\"] = \"slack#/types/date\";\n CustomFieldType[\"Timestamp\"] = \"slack#/types/timestamp\";\n CustomFieldType[\"Image\"] = \"slack#/types/image\";\n CustomFieldType[\"ChannelId\"] = \"slack#/types/channel_id\";\n CustomFieldType[\"User\"] = \"slack#/types/user\";\n CustomFieldType[\"EntityRef\"] = \"slack#/types/entity_ref\";\n CustomFieldType[\"Boolean\"] = \"boolean\";\n CustomFieldType[\"Link\"] = \"slack#/types/link\";\n CustomFieldType[\"Email\"] = \"slack#/types/email\";\n})(CustomFieldType || (exports.CustomFieldType = CustomFieldType = {}));\n//# sourceMappingURL=message-metadata.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=views.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./block-kit/block-elements\"), exports);\n__exportStar(require(\"./block-kit/blocks\"), exports);\n__exportStar(require(\"./block-kit/composition-objects\"), exports);\n__exportStar(require(\"./block-kit/extensions\"), exports);\n__exportStar(require(\"./calls\"), exports);\n__exportStar(require(\"./chunk\"), exports);\n__exportStar(require(\"./dialog\"), exports);\n__exportStar(require(\"./events\"), exports);\n__exportStar(require(\"./message-attachments\"), exports);\n__exportStar(require(\"./message-metadata\"), exports);\n__exportStar(require(\"./views\"), exports);\n//# sourceMappingURL=index.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Methods = void 0;\nconst eventemitter3_1 = require(\"eventemitter3\");\nconst WebClient_1 = require(\"./WebClient\");\n/**\n * Binds a certain `method` and its (required) arguments and result types to the `apiCall` method in `WebClient`.\n */\nfunction bindApiCall(self, method) {\n const apiMethod = self.apiCall.bind(self, method);\n return apiMethod;\n}\n/**\n * Binds a certain `method` and its (required) arguments and result types to the `apiCall` method in `WebClient`.\n */\nfunction bindApiCallWithOptionalArgument(self, method) {\n const apiMethod = self.apiCall.bind(self, method);\n return apiMethod;\n}\nfunction bindFilesUploadV2(self) {\n return self.filesUploadV2.bind(self);\n}\n/**\n * A class that defines all Web API methods, their arguments type, their response type, and binds those methods to the\n * `apiCall` class method.\n */\nclass Methods extends eventemitter3_1.EventEmitter {\n constructor() {\n super();\n this.admin = {\n analytics: {\n /**\n * @description Retrieve analytics data for a given date, presented as a compressed JSON file.\n * @see {@link https://docs.slack.dev/reference/methods/api.test `api.test` API reference}.\n */\n getFile: bindApiCall(this, 'admin.analytics.getFile'),\n },\n apps: {\n activities: {\n /**\n * @description Get logs for a specified team/org.\n * @see {@link https://docs.slack.dev/reference/methods/admin.apps.activities.list `admin.apps.activities.list` API reference}.\n */\n list: bindApiCallWithOptionalArgument(this, 'admin.apps.activities.list'),\n },\n /**\n * @description Approve an app for installation on a workspace.\n * @see {@link https://docs.slack.dev/reference/methods/admin.apps.approve `admin.apps.approve` API reference}.\n */\n approve: bindApiCall(this, 'admin.apps.approve'),\n approved: {\n /**\n * @description List approved apps for an org or workspace.\n * @see {@link https://docs.slack.dev/reference/methods/admin.apps.approved.list `admin.apps.approved.list` API reference}.\n */\n list: bindApiCall(this, 'admin.apps.approved.list'),\n },\n /**\n * @description Clear an app resolution.\n * @see {@link https://docs.slack.dev/reference/methods/admin.apps.clearResolution `admin.apps.clearResolution` API reference}.\n */\n clearResolution: bindApiCall(this, 'admin.apps.clearResolution'),\n config: {\n /**\n * @description Look up the app config for connectors by their IDs.\n * @see {@link https://docs.slack.dev/reference/methods/admin.apps.config.lookup `admin.apps.config.lookup` API reference}.\n */\n lookup: bindApiCall(this, 'admin.apps.config.lookup'),\n /**\n * @description Set the app config for a connector.\n * @see {@link https://docs.slack.dev/reference/methods/admin.apps.config.set `admin.apps.config.set` API reference}.\n */\n set: bindApiCall(this, 'admin.apps.config.set'),\n },\n requests: {\n /**\n * @description Cancel app request for team.\n * @see {@link https://docs.slack.dev/reference/methods/admin.apps.requests.cancel `admin.apps.requests.cancel` API reference}.\n */\n cancel: bindApiCall(this, 'admin.apps.requests.cancel'),\n /**\n * @description List app requests for a team/workspace.\n * @see {@link https://docs.slack.dev/reference/methods/admin.apps.requests.list `admin.apps.requests.list` API reference}.\n */\n list: bindApiCall(this, 'admin.apps.requests.list'),\n },\n /**\n * @description Restrict an app for installation on a workspace.\n * @see {@link https://docs.slack.dev/reference/methods/admin.apps.restrict `admin.apps.restrict` API reference}.\n */\n restrict: bindApiCall(this, 'admin.apps.restrict'),\n restricted: {\n /**\n * @description List restricted apps for an org or workspace.\n * @see {@link https://docs.slack.dev/reference/methods/admin.apps.restricted.list `admin.apps.restricted.list` API reference}.\n */\n list: bindApiCall(this, 'admin.apps.restricted.list'),\n },\n /**\n * @description Uninstall an app from one or many workspaces, or an entire enterprise organization.\n * @see {@link https://docs.slack.dev/reference/methods/admin.apps.uninstall `admin.apps.uninstall` API reference}.\n */\n uninstall: bindApiCall(this, 'admin.apps.uninstall'),\n },\n auth: {\n policy: {\n /**\n * @description Assign entities to a particular authentication policy.\n * @see {@link https://docs.slack.dev/reference/methods/admin.auth.policy.assignEntities `admin.auth.policy.assignEntities` API reference}.\n */\n assignEntities: bindApiCall(this, 'admin.auth.policy.assignEntities'),\n /**\n * @description Fetch all the entities assigned to a particular authentication policy by name.\n * @see {@link https://docs.slack.dev/reference/methods/admin.auth.policy.getEntities `admin.auth.policy.getEntities` API reference}.\n */\n getEntities: bindApiCall(this, 'admin.auth.policy.getEntities'),\n /**\n * @description Remove specified entities from a specified authentication policy.\n * @see {@link https://docs.slack.dev/reference/methods/admin.auth.policy.removeEntities `admin.auth.policy.removeEntities` API reference}.\n */\n removeEntities: bindApiCall(this, 'admin.auth.policy.removeEntities'),\n },\n },\n barriers: {\n /**\n * @description Create an Information Barrier.\n * @see {@link https://docs.slack.dev/reference/methods/admin.barriers.create `admin.barriers.create` API reference}.\n */\n create: bindApiCall(this, 'admin.barriers.create'),\n /**\n * @description Delete an existing Information Barrier.\n * @see {@link https://docs.slack.dev/reference/methods/admin.barriers.delete `admin.barriers.delete` API reference}.\n */\n delete: bindApiCall(this, 'admin.barriers.delete'),\n /**\n * @description Get all Information Barriers for your organization.\n * @see {@link https://docs.slack.dev/reference/methods/admin.barriers.list `admin.barriers.list` API reference}.\n */\n list: bindApiCallWithOptionalArgument(this, 'admin.barriers.list'),\n /**\n * @description Update an existing Information Barrier.\n * @see {@link https://docs.slack.dev/reference/methods/admin.barriers.update `admin.barriers.update` API reference}.\n */\n update: bindApiCall(this, 'admin.barriers.update'),\n },\n conversations: {\n /**\n * @description Archive a public or private channel.\n * @see {@link https://docs.slack.dev/reference/methods/admin.conversations.archive `admin.conversations.archive` API reference}.\n */\n archive: bindApiCall(this, 'admin.conversations.archive'),\n /**\n * @description Archive public or private channels in bulk.\n * @see {@link https://docs.slack.dev/reference/methods/admin.conversations.bulkArchive `admin.conversations.bulkArchive` API reference}.\n */\n bulkArchive: bindApiCall(this, 'admin.conversations.bulkArchive'),\n /**\n * @description Delete public or private channels in bulk.\n * @see {@link https://docs.slack.dev/reference/methods/admin.conversations.bulkDelete `admin.conversations.bulkDelete` API reference}.\n */\n bulkDelete: bindApiCall(this, 'admin.conversations.bulkDelete'),\n /**\n * @description Move public or private channels in bulk.\n * @see {@link https://docs.slack.dev/reference/methods/admin.conversations.bulkMove `admin.conversations.bulkMove` API reference}.\n */\n bulkMove: bindApiCall(this, 'admin.conversations.bulkMove'),\n /**\n * @description Convert a public channel to a private channel.\n * @see {@link https://docs.slack.dev/reference/methods/admin.conversations.convertToPrivate `admin.conversations.convertToPrivate` API reference}.\n */\n convertToPrivate: bindApiCall(this, 'admin.conversations.convertToPrivate'),\n /**\n * @description Convert a private channel to a public channel.\n * @see {@link https://docs.slack.dev/reference/methods/admin.conversations.convertToPublic `admin.conversations.convertToPublic` API reference}.\n */\n convertToPublic: bindApiCall(this, 'admin.conversations.convertToPublic'),\n /**\n * @description Create a public or private channel-based conversation.\n * @see {@link https://docs.slack.dev/reference/methods/admin.conversations.create `admin.conversations.create` API reference}.\n */\n create: bindApiCall(this, 'admin.conversations.create'),\n /**\n * @description Delete a public or private channel.\n * @see {@link https://docs.slack.dev/reference/methods/admin.conversations.delete `admin.conversations.delete` API reference}.\n */\n delete: bindApiCall(this, 'admin.conversations.delete'),\n /**\n * @description Disconnect a connected channel from one or more workspaces.\n * @see {@link https://docs.slack.dev/reference/methods/admin.conversations.disconnectShared `admin.conversations.disconnectShared` API reference}.\n */\n disconnectShared: bindApiCall(this, 'admin.conversations.disconnectShared'),\n ekm: {\n /**\n * @description List all disconnected channels — i.e., channels that were once connected to other workspaces\n * and then disconnected — and the corresponding original channel IDs for key revocation with EKM.\n * @see {@link https://docs.slack.dev/reference/methods/admin.conversations.ekm.listOriginalConnectedChannelInfo `admin.conversations.ekm.listOriginalConnectedChannelInfo` API reference}.\n */\n listOriginalConnectedChannelInfo: bindApiCallWithOptionalArgument(this, 'admin.conversations.ekm.listOriginalConnectedChannelInfo'),\n },\n /**\n * @description Get conversation preferences for a public or private channel.\n * @see {@link https://docs.slack.dev/reference/methods/admin.conversations.getConversationPrefs `admin.conversations.getConversationPrefs` API reference}.\n */\n getConversationPrefs: bindApiCall(this, 'admin.conversations.getConversationPrefs'),\n /**\n * @description Get a conversation's retention policy.\n * @see {@link https://docs.slack.dev/reference/methods/admin.conversations.getCustomRetention `admin.conversations.getCustomRetention` API reference}.\n */\n getCustomRetention: bindApiCall(this, 'admin.conversations.getCustomRetention'),\n /**\n * @description Get all the workspaces a given public or private channel is connected to within\n * this Enterprise org.\n * @see {@link https://docs.slack.dev/reference/methods/admin.conversations.getTeams `admin.conversations.getTeams` API reference}.\n */\n getTeams: bindApiCall(this, 'admin.conversations.getTeams'),\n /**\n * @description Invite a user to a public or private channel.\n * @see {@link https://docs.slack.dev/reference/methods/admin.conversations.invite `admin.conversations.invite` API reference}.\n */\n invite: bindApiCall(this, 'admin.conversations.invite'),\n /**\n * @description Returns channels on the given team using the filters.\n * @see {@link https://docs.slack.dev/reference/methods/admin.conversations.lookup `admin.conversations.lookup` API reference}.\n */\n lookup: bindApiCall(this, 'admin.conversations.lookup'),\n /**\n * @description Remove a conversation's retention policy.\n * @see {@link https://docs.slack.dev/reference/methods/admin.conversations.removeCustomRetention `admin.conversations.removeCustomRetention` API reference}.\n */\n removeCustomRetention: bindApiCall(this, 'admin.conversations.removeCustomRetention'),\n /**\n * @description Rename a public or private channel.\n * @see {@link https://docs.slack.dev/reference/methods/admin.conversations.rename `admin.conversations.rename` API reference}.\n */\n rename: bindApiCall(this, 'admin.conversations.rename'),\n restrictAccess: {\n /**\n * @description Add an allowlist of IDP groups for accessing a channel.\n * @see {@link https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.addGroup `admin.conversations.restrictAccess.addGroup` API reference}.\n */\n addGroup: bindApiCall(this, 'admin.conversations.restrictAccess.addGroup'),\n /**\n * @description List all IDP Groups linked to a channel.\n * @see {@link https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.listGroups `admin.conversations.restrictAccess.listGroups` API reference}.\n */\n listGroups: bindApiCall(this, 'admin.conversations.restrictAccess.listGroups'),\n /**\n * @description Remove a linked IDP group linked from a private channel.\n * @see {@link https://docs.slack.dev/reference/methods/admin.conversations.restrictAccess.removeGroup `admin.conversations.restrictAccess.removeGroup` API reference}.\n */\n removeGroup: bindApiCall(this, 'admin.conversations.restrictAccess.removeGroup'),\n },\n /**\n * @description Search for public or private channels in an Enterprise organization.\n * @see {@link https://docs.slack.dev/reference/methods/admin.conversations.search `admin.conversations.search` API reference}.\n */\n search: bindApiCallWithOptionalArgument(this, 'admin.conversations.search'),\n /**\n * @description Set the posting permissions for a public or private channel.\n * @see {@link https://docs.slack.dev/reference/methods/admin.conversations.setConversationPrefs `admin.conversations.setConversationPrefs` API reference}.\n */\n setConversationPrefs: bindApiCall(this, 'admin.conversations.setConversationPrefs'),\n /**\n * @description Set a conversation's retention policy.\n * @see {@link https://docs.slack.dev/reference/methods/admin.conversations.setCustomRetention `admin.conversations.setCustomRetention` API reference}.\n */\n setCustomRetention: bindApiCall(this, 'admin.conversations.setCustomRetention'),\n /**\n * @description Set the workspaces in an Enterprise grid org that connect to a public or private channel.\n * @see {@link https://docs.slack.dev/reference/methods/admin.conversations.setTeams `admin.conversations.setTeams` API reference}.\n */\n setTeams: bindApiCall(this, 'admin.conversations.setTeams'),\n /**\n * @description Unarchive a public or private channel.\n * @see {@link https://docs.slack.dev/reference/methods/admin.conversations.unarchive `admin.conversations.unarchive` API reference}.\n */\n unarchive: bindApiCall(this, 'admin.conversations.unarchive'),\n },\n emoji: {\n /**\n * @description Add an emoji.\n * @see {@link https://docs.slack.dev/reference/methods/admin.emoji.add `admin.emoji.add` API reference}.\n */\n add: bindApiCall(this, 'admin.emoji.add'),\n /**\n * @description Add an emoji alias.\n * @see {@link https://docs.slack.dev/reference/methods/admin.emoji.addAlias `admin.emoji.addAlias` API reference}.\n */\n addAlias: bindApiCall(this, 'admin.emoji.addAlias'),\n /**\n * @description List emoji for an Enterprise Grid organization.\n * @see {@link https://docs.slack.dev/reference/methods/admin.emoji.list `admin.emoji.list` API reference}.\n */\n list: bindApiCallWithOptionalArgument(this, 'admin.emoji.list'),\n /**\n * @description Remove an emoji across an Enterprise Grid organization.\n * @see {@link https://docs.slack.dev/reference/methods/admin.emoji.remove `admin.emoji.remove` API reference}.\n */\n remove: bindApiCall(this, 'admin.emoji.remove'),\n /**\n * @description Rename an emoji.\n * @see {@link https://docs.slack.dev/reference/methods/admin.emoji.rename `admin.emoji.rename` API reference}.\n */\n rename: bindApiCall(this, 'admin.emoji.rename'),\n },\n functions: {\n /**\n * @description Look up functions by a set of apps.\n * @see {@link https://docs.slack.dev/reference/methods/admin.functions.list `admin.functions.list` API reference}.\n */\n list: bindApiCall(this, 'admin.functions.list'),\n permissions: {\n /**\n * @description Lookup the visibility of multiple Slack functions and include the users if\n * it is limited to particular named entities.\n * @see {@link https://docs.slack.dev/reference/methods/admin.functions.permissions.lookup `admin.functions.permissions.lookup` API reference}.\n */\n lookup: bindApiCall(this, 'admin.functions.permissions.lookup'),\n /**\n * @description Set the visibility of a Slack function and define the users or workspaces if\n * it is set to named_entities.\n * @see {@link https://docs.slack.dev/reference/methods/admin.functions.permissions.set `admin.functions.permissions.set` API reference}.\n */\n set: bindApiCall(this, 'admin.functions.permissions.set'),\n },\n },\n inviteRequests: {\n /**\n * @description Approve a workspace invite request.\n * @see {@link https://docs.slack.dev/reference/methods/admin.inviteRequests.approve `admin.inviteRequests.approve` API reference}.\n */\n approve: bindApiCall(this, 'admin.inviteRequests.approve'),\n approved: {\n /**\n * @description List all approved workspace invite requests.\n * @see {@link https://docs.slack.dev/reference/methods/admin.inviteRequests.approved.list `admin.inviteRequests.approved.list` API reference}.\n */\n list: bindApiCall(this, 'admin.inviteRequests.approved.list'),\n },\n denied: {\n /**\n * @description List all denied workspace invite requests.\n * @see {@link https://docs.slack.dev/reference/methods/admin.inviteRequests.denied.list `admin.inviteRequests.denied.list` API reference}.\n */\n list: bindApiCall(this, 'admin.inviteRequests.denied.list'),\n },\n /**\n * @description Deny a workspace invite request.\n * @see {@link https://docs.slack.dev/reference/methods/admin.inviteRequests.deny `admin.inviteRequests.deny` API reference}.\n */\n deny: bindApiCall(this, 'admin.inviteRequests.deny'),\n /**\n * @description List all pending workspace invite requests.\n * @see {@link https://docs.slack.dev/reference/methods/admin.inviteRequests.list `admin.inviteRequests.list` API reference}.\n */\n list: bindApiCall(this, 'admin.inviteRequests.list'),\n },\n roles: {\n /**\n * @description Adds members to the specified role with the specified scopes.\n * @see {@link https://docs.slack.dev/reference/methods/admin.roles.addAssignments `admin.roles.addAssignments` API reference}.\n */\n addAssignments: bindApiCall(this, 'admin.roles.addAssignments'),\n /**\n * @description Lists assignments for all roles across entities.\n * Options to scope results by any combination of roles or entities.\n * @see {@link https://docs.slack.dev/reference/methods/admin.roles.listAssignments `admin.roles.listAssignments` API reference}.\n */\n listAssignments: bindApiCallWithOptionalArgument(this, 'admin.roles.listAssignments'),\n /**\n * @description Removes a set of users from a role for the given scopes and entities.\n * @see {@link https://docs.slack.dev/reference/methods/admin.roles.removeAssignments `admin.roles.removeAssignments` API reference}.\n */\n removeAssignments: bindApiCall(this, 'admin.roles.removeAssignments'),\n },\n teams: {\n admins: {\n /**\n * @description List all of the admins on a given workspace.\n * @see {@link https://docs.slack.dev/reference/methods/admin.teams.admins.list `admin.teams.admins.list` API reference}.\n */\n list: bindApiCall(this, 'admin.teams.admins.list'),\n },\n /**\n * @description Create an Enterprise team.\n * @see {@link https://docs.slack.dev/reference/methods/admin.teams.create `admin.teams.create` API reference}.\n */\n create: bindApiCall(this, 'admin.teams.create'),\n /**\n * @description List all teams on an Enterprise organization.\n * @see {@link https://docs.slack.dev/reference/methods/admin.teams.list `admin.teams.list` API reference}.\n */\n list: bindApiCallWithOptionalArgument(this, 'admin.teams.list'),\n owners: {\n /**\n * @description List all of the owners on a given workspace.\n * @see {@link https://docs.slack.dev/reference/methods/admin.teams.owners.list `admin.teams.owners.list` API reference}.\n */\n list: bindApiCall(this, 'admin.teams.owners.list'),\n },\n settings: {\n /**\n * @description Fetch information about settings in a workspace.\n * @see {@link https://docs.slack.dev/reference/methods/admin.teams.settings.info `admin.teams.settings.info` API reference}.\n */\n info: bindApiCall(this, 'admin.teams.settings.info'),\n /**\n * @description Set the default channels of a workspace.\n * @see {@link https://docs.slack.dev/reference/methods/admin.teams.settings.setDefaultChannels `admin.teams.settings.setDefaultChannels` API reference}.\n */\n setDefaultChannels: bindApiCall(this, 'admin.teams.settings.setDefaultChannels'),\n /**\n * @description Set the description of a given workspace.\n * @see {@link https://docs.slack.dev/reference/methods/admin.teams.settings.setDescription `admin.teams.settings.setDescription` API reference}.\n */\n setDescription: bindApiCall(this, 'admin.teams.settings.setDescription'),\n /**\n * @description Set the discoverability of a given workspace.\n * @see {@link https://docs.slack.dev/reference/methods/admin.teams.settings.setDiscoverability `admin.teams.settings.setDiscoverability` API reference}.\n */\n setDiscoverability: bindApiCall(this, 'admin.teams.settings.setDiscoverability'),\n /**\n * @description Sets the icon of a workspace.\n * @see {@link https://docs.slack.dev/reference/methods/admin.teams.settings.setIcon `admin.teams.settings.setIcon` API reference}.\n */\n setIcon: bindApiCall(this, 'admin.teams.settings.setIcon'),\n /**\n * @description Set the name of a given workspace.\n * @see {@link https://docs.slack.dev/reference/methods/admin.teams.settings.setName `admin.teams.settings.setName` API reference}.\n */\n setName: bindApiCall(this, 'admin.teams.settings.setName'),\n },\n },\n usergroups: {\n /**\n * @description Add up to one hundred default channels to an IDP group.\n * @see {@link https://docs.slack.dev/reference/methods/admin.usergroups.addChannels `admin.teams.usergroups.addChannels` API reference}.\n */\n addChannels: bindApiCall(this, 'admin.usergroups.addChannels'),\n /**\n * @description Associate one or more default workspaces with an organization-wide IDP group.\n * @see {@link https://docs.slack.dev/reference/methods/admin.usergroups.addTeams `admin.teams.usergroups.addTeams` API reference}.\n */\n addTeams: bindApiCall(this, 'admin.usergroups.addTeams'),\n /**\n * @description List the channels linked to an org-level IDP group (user group).\n * @see {@link https://docs.slack.dev/reference/methods/admin.usergroups.listChannels `admin.teams.usergroups.listChannels` API reference}.\n */\n listChannels: bindApiCall(this, 'admin.usergroups.listChannels'),\n /**\n * @description Remove one or more default channels from an org-level IDP group (user group).\n * @see {@link https://docs.slack.dev/reference/methods/admin.usergroups.removeChannels `admin.teams.usergroups.removeChannels` API reference}.\n */\n removeChannels: bindApiCall(this, 'admin.usergroups.removeChannels'),\n },\n users: {\n /**\n * @description Add an Enterprise user to a workspace.\n * @see {@link https://docs.slack.dev/reference/methods/admin.users.assign `admin.users.assign` API reference}.\n */\n assign: bindApiCall(this, 'admin.users.assign'),\n /**\n * @description Invite a user to a workspace.\n * @see {@link https://docs.slack.dev/reference/methods/admin.users.invite `admin.users.invite` API reference}.\n */\n invite: bindApiCall(this, 'admin.users.invite'),\n /**\n * @description List users on a workspace.\n * @see {@link https://docs.slack.dev/reference/methods/admin.users.list `admin.users.list` API reference}.\n */\n list: bindApiCallWithOptionalArgument(this, 'admin.users.list'),\n /**\n * @description Remove a user from a workspace.\n * @see {@link https://docs.slack.dev/reference/methods/admin.users.remove `admin.users.remove` API reference}.\n */\n remove: bindApiCall(this, 'admin.users.remove'),\n session: {\n /**\n * @description Clear user-specific session settings—the session duration and what happens when the client\n * closes—for a list of users.\n * @see {@link https://docs.slack.dev/reference/methods/admin.users.session.clearSettings `admin.users.session.clearSettings` API reference}.\n */\n clearSettings: bindApiCall(this, 'admin.users.session.clearSettings'),\n /**\n * @description Get user-specific session settings—the session duration and what happens when the client\n * closes—given a list of users.\n * @see {@link https://docs.slack.dev/reference/methods/admin.users.session.getSettings `admin.users.session.getSettings` API reference}.\n */\n getSettings: bindApiCall(this, 'admin.users.session.getSettings'),\n /**\n * @description Revoke a single session for a user. The user will be forced to login to Slack.\n * @see {@link https://docs.slack.dev/reference/methods/admin.users.session.invalidate `admin.users.session.invalidate` API reference}.\n */\n invalidate: bindApiCall(this, 'admin.users.session.invalidate'),\n /**\n * @description List active user sessions for an organization.\n * @see {@link https://docs.slack.dev/reference/methods/admin.users.session.list `admin.users.session.list` API reference}.\n */\n list: bindApiCallWithOptionalArgument(this, 'admin.users.session.list'),\n /**\n * @description Wipes all valid sessions on all devices for a given user.\n * @see {@link https://docs.slack.dev/reference/methods/admin.users.session.reset `admin.users.session.reset` API reference}.\n */\n reset: bindApiCall(this, 'admin.users.session.reset'),\n /**\n * @description Enqueues an asynchronous job to wipe all valid sessions on all devices for a given user list.\n * @see {@link https://docs.slack.dev/reference/methods/admin.users.session.resetBulk `admin.users.session.resetBulk` API reference}.\n */\n resetBulk: bindApiCall(this, 'admin.users.session.resetBulk'),\n /**\n * @description Configure the user-level session settings—the session duration and what happens when the client\n * closes—for one or more users.\n * @see {@link https://docs.slack.dev/reference/methods/admin.users.session.setSettings `admin.users.session.setSettings` API reference}.\n */\n setSettings: bindApiCall(this, 'admin.users.session.setSettings'),\n },\n /**\n * @description Set an existing guest, regular user, or owner to be an admin user.\n * @see {@link https://docs.slack.dev/reference/methods/admin.users.setAdmin `admin.users.setAdmin` API reference}.\n */\n setAdmin: bindApiCall(this, 'admin.users.setAdmin'),\n /**\n * @description Set an expiration for a guest user.\n * @see {@link https://docs.slack.dev/reference/methods/admin.users.setExpiration `admin.users.setExpiration` API reference}.\n */\n setExpiration: bindApiCall(this, 'admin.users.setExpiration'),\n /**\n * @description Set an existing guest, regular user, or admin user to be a workspace owner.\n * @see {@link https://docs.slack.dev/reference/methods/admin.users.setOwner `admin.users.setOwner` API reference}.\n */\n setOwner: bindApiCall(this, 'admin.users.setOwner'),\n /**\n * @description Set an existing guest user, admin user, or owner to be a regular user.\n * @see {@link https://docs.slack.dev/reference/methods/admin.users.setRegular `admin.users.setRegular` API reference}.\n */\n setRegular: bindApiCall(this, 'admin.users.setRegular'),\n unsupportedVersions: {\n /**\n * @description Ask Slackbot to send you an export listing all workspace members using unsupported software,\n * presented as a zipped CSV file.\n * @see {@link https://docs.slack.dev/reference/methods/admin.users.unsupportedVersions.export `admin.users.unsupportedVersions.export` API reference}.\n */\n export: bindApiCall(this, 'admin.users.unsupportedVersions.export'),\n },\n },\n workflows: {\n collaborators: {\n /**\n * @description Add collaborators to workflows within the team or enterprise.\n * @see {@link https://docs.slack.dev/reference/methods/admin.workflows.collaborators.add `admin.workflows.collaborators.add` API reference}.\n */\n add: bindApiCall(this, 'admin.workflows.collaborators.add'),\n /**\n * @description Remove collaborators from workflows within the team or enterprise.\n * @see {@link https://docs.slack.dev/reference/methods/admin.workflows.collaborators.remove `admin.workflows.collaborators.remove` API reference}.\n */\n remove: bindApiCall(this, 'admin.workflows.collaborators.remove'),\n },\n permissions: {\n /**\n * @description Look up the permissions for a set of workflows.\n * @see {@link https://docs.slack.dev/reference/methods/admin.workflows.permissions.lookup `admin.workflows.permissions.lookup` API reference}.\n */\n lookup: bindApiCall(this, 'admin.workflows.permissions.lookup'),\n },\n /**\n * @description Search workflows within the team or enterprise.\n * @see {@link https://docs.slack.dev/reference/methods/admin.workflows.search `admin.workflows.search` API reference}.\n */\n search: bindApiCallWithOptionalArgument(this, 'admin.workflows.search'),\n /**\n * @description Unpublish workflows within the team or enterprise.\n * @see {@link https://docs.slack.dev/reference/methods/admin.workflows.unpublish `admin.workflows.unpublish` API reference}.\n */\n unpublish: bindApiCall(this, 'admin.workflows.unpublish'),\n },\n };\n this.api = {\n /**\n * @description Checks API calling code.\n * @see {@link https://docs.slack.dev/reference/methods/api.test `api.test` API reference}.\n */\n test: bindApiCallWithOptionalArgument(this, 'api.test'),\n };\n this.assistant = {\n threads: {\n /**\n * @description Set loading status to indicate that the app is building a response.\n * @see {@link https://docs.slack.dev/reference/methods/assistant.threads.setStatus `assistant.threads.setStatus` API reference}.\n */\n setStatus: bindApiCall(this, 'assistant.threads.setStatus'),\n /**\n * @description Set suggested prompts for the user. Can suggest up to four prompts.\n * @see {@link https://docs.slack.dev/reference/methods/assistant.threads.setSuggestedPrompts `assistant.threads.setSuggestedPrompts` API reference}.\n */\n setSuggestedPrompts: bindApiCall(this, 'assistant.threads.setSuggestedPrompts'),\n /**\n * @description Set the title of the thread. This is shown when a user views the app's chat history.\n * @see {@link https://docs.slack.dev/reference/methods/assistant.threads.setTitle `assistant.threads.setTitle` API reference}.\n */\n setTitle: bindApiCall(this, 'assistant.threads.setTitle'),\n },\n };\n this.apps = {\n connections: {\n /**\n * @description Generate a temporary Socket Mode WebSocket URL that your app can connect to in order to receive\n * events and interactive payloads over.\n * @see {@link https://docs.slack.dev/reference/methods/apps.connections.open `apps.connections.open` API reference}.\n */\n open: bindApiCallWithOptionalArgument(this, 'apps.connections.open'),\n },\n event: {\n authorizations: {\n /**\n * @description Get a list of authorizations for the given event context.\n * Each authorization represents an app installation that the event is visible to.\n * @see {@link https://docs.slack.dev/reference/methods/apps.event.authorizations.list `apps.event.authorizations.list` API reference}.\n */\n list: bindApiCall(this, 'apps.event.authorizations.list'),\n },\n },\n manifest: {\n /**\n * @description Create an app from an app manifest.\n * @see {@link https://docs.slack.dev/reference/methods/apps.manifest.create `apps.manifest.create` API reference}.\n */\n create: bindApiCall(this, 'apps.manifest.create'),\n /**\n * @description Permanently deletes an app created through app manifests.\n * @see {@link https://docs.slack.dev/reference/methods/apps.manifest.delete `apps.manifest.delete` API reference}.\n */\n delete: bindApiCall(this, 'apps.manifest.delete'),\n /**\n * @description Export an app manifest from an existing app.\n * @see {@link https://docs.slack.dev/reference/methods/apps.manifest.export `apps.manifest.export` API reference}.\n */\n export: bindApiCall(this, 'apps.manifest.export'),\n /**\n * @description Update an app from an app manifest.\n * @see {@link https://docs.slack.dev/reference/methods/apps.manifest.update `apps.manifest.update` API reference}.\n */\n update: bindApiCall(this, 'apps.manifest.update'),\n /**\n * @description Validate an app manifest.\n * @see {@link https://docs.slack.dev/reference/methods/apps.manifest.validate `apps.manifest.validate` API reference}.\n */\n validate: bindApiCall(this, 'apps.manifest.validate'),\n },\n /**\n * @description Uninstalls your app from a workspace.\n * @see {@link https://docs.slack.dev/reference/methods/apps.uninstall `apps.uninstall` API reference}.\n */\n uninstall: bindApiCall(this, 'apps.uninstall'),\n user: {\n connection: {\n /**\n * @description Updates the connection status between a user and an app.\n * @see {@link https://docs.slack.dev/reference/methods/apps.user.connection.update `apps.user.connection.update` API reference}.\n */\n update: bindApiCall(this, 'apps.user.connection.update'),\n },\n },\n };\n this.auth = {\n /**\n * @description Revokes a token.\n * @see {@link https://docs.slack.dev/reference/methods/auth.revoke `auth.revoke` API reference}.\n */\n revoke: bindApiCallWithOptionalArgument(this, 'auth.revoke'),\n teams: {\n /**\n * @description Obtain a full list of workspaces your org-wide app has been approved for.\n * @see {@link https://docs.slack.dev/reference/methods/auth.teams.list `auth.teams.list` API reference}.\n */\n list: bindApiCallWithOptionalArgument(this, 'auth.teams.list'),\n },\n test: bindApiCallWithOptionalArgument(this, 'auth.test'),\n };\n this.bookmarks = {\n /**\n * @description Add bookmark to a channel.\n * @see {@link https://docs.slack.dev/reference/methods/bookmarks.add `bookmarks.add` API reference}.\n */\n add: bindApiCall(this, 'bookmarks.add'),\n /**\n * @description Edit bookmark.\n * @see {@link https://docs.slack.dev/reference/methods/bookmarks.edit `bookmarks.edit` API reference}.\n */\n edit: bindApiCall(this, 'bookmarks.edit'),\n /**\n * @description List bookmarks for a channel.\n * @see {@link https://docs.slack.dev/reference/methods/bookmarks.list `bookmarks.list` API reference}.\n */\n list: bindApiCall(this, 'bookmarks.list'),\n /**\n * @description Remove bookmark from a channel.\n * @see {@link https://docs.slack.dev/reference/methods/bookmarks.remove `bookmarks.remove` API reference}.\n */\n remove: bindApiCall(this, 'bookmarks.remove'),\n };\n this.bots = {\n /**\n * @description Gets information about a bot user.\n * @see {@link https://docs.slack.dev/reference/methods/bots.info `bots.info` API reference}.\n */\n info: bindApiCallWithOptionalArgument(this, 'bots.info'),\n };\n this.calls = {\n /**\n * @description Registers a new Call.\n * @see {@link https://docs.slack.dev/reference/methods/calls.add `calls.add` API reference}.\n */\n add: bindApiCall(this, 'calls.add'),\n /**\n * @description Ends a Call.\n * @see {@link https://docs.slack.dev/reference/methods/calls.end `calls.end` API reference}.\n */\n end: bindApiCall(this, 'calls.end'),\n /**\n * @description Returns information about a Call.\n * @see {@link https://docs.slack.dev/reference/methods/calls.info `calls.info` API reference}.\n */\n info: bindApiCall(this, 'calls.info'),\n /**\n * @description Updates information about a Call.\n * @see {@link https://docs.slack.dev/reference/methods/calls.update `calls.update` API reference}.\n */\n update: bindApiCall(this, 'calls.update'),\n participants: {\n /**\n * @description Registers new participants added to a Call.\n * @see {@link https://docs.slack.dev/reference/methods/calls.participants.add `calls.participants.add` API reference}.\n */\n add: bindApiCall(this, 'calls.participants.add'),\n remove: bindApiCall(this, 'calls.participants.remove'),\n },\n };\n this.canvases = {\n access: {\n /**\n * @description Remove access to a canvas for specified entities.\n * @see {@link https://docs.slack.dev/reference/methods/canvases.access.delete `canvases.access.delete` API reference}.\n */\n delete: bindApiCall(this, 'canvases.access.delete'),\n /**\n * @description Sets the access level to a canvas for specified entities.\n * @see {@link https://docs.slack.dev/reference/methods/canvases.access.set `canvases.access.set` API reference}.\n */\n set: bindApiCall(this, 'canvases.access.set'),\n },\n /**\n * @description Create Canvas for a user.\n * @see {@link https://docs.slack.dev/reference/methods/canvases.create `canvases.create` API reference}.\n */\n create: bindApiCallWithOptionalArgument(this, 'canvases.create'),\n /**\n * @description Deletes a canvas.\n * @see {@link https://docs.slack.dev/reference/methods/canvases.delete `canvases.delete` API reference}.\n */\n delete: bindApiCall(this, 'canvases.delete'),\n /**\n * @description Update an existing canvas.\n * @see {@link https://docs.slack.dev/reference/methods/canvases.edit `canvases.edit` API reference}.\n */\n edit: bindApiCall(this, 'canvases.edit'),\n sections: {\n /**\n * @description Find sections matching the provided criteria.\n * @see {@link https://docs.slack.dev/reference/methods/canvases.sections.lookup `canvases.sections.lookup` API reference}.\n */\n lookup: bindApiCall(this, 'canvases.sections.lookup'),\n },\n };\n this.chat = {\n /**\n * @description Appends text to an existing streaming conversation.\n * @see {@link https://docs.slack.dev/reference/methods/chat.appendStream `chat.appendStream` API reference}.\n */\n appendStream: bindApiCall(this, 'chat.appendStream'),\n /**\n * @description Deletes a message.\n * @see {@link https://docs.slack.dev/reference/methods/chat.delete `chat.delete` API reference}.\n */\n delete: bindApiCall(this, 'chat.delete'),\n /**\n * @description Deletes a pending scheduled message from the queue.\n * @see {@link https://docs.slack.dev/reference/methods/chat.deleteScheduledMessage `chat.deleteScheduledMessage` API reference}.\n */\n deleteScheduledMessage: bindApiCall(this, 'chat.deleteScheduledMessage'),\n /**\n * @description Retrieve a permalink URL for a specific extant message.\n * @see {@link https://docs.slack.dev/reference/methods/chat.getPermalink `chat.getPermalink` API reference}.\n */\n getPermalink: bindApiCall(this, 'chat.getPermalink'),\n /**\n * @description Share a me message into a channel.\n * @see {@link https://docs.slack.dev/reference/methods/chat.meMessage `chat.meMessage` API reference}.\n */\n meMessage: bindApiCall(this, 'chat.meMessage'),\n /**\n * @description Sends an ephemeral message to a user in a channel.\n * @see {@link https://docs.slack.dev/reference/methods/chat.postEphemeral `chat.postEphemeral` API reference}.\n */\n postEphemeral: bindApiCall(this, 'chat.postEphemeral'),\n /**\n * @description Sends a message to a channel.\n * @see {@link https://docs.slack.dev/reference/methods/chat.postMessage `chat.postMessage` API reference}.\n */\n postMessage: bindApiCall(this, 'chat.postMessage'),\n /**\n * @description Schedules a message to be sent to a channel.\n * @see {@link https://docs.slack.dev/reference/methods/chat.scheduleMessage `chat.scheduleMessage` API reference}.\n */\n scheduleMessage: bindApiCall(this, 'chat.scheduleMessage'),\n scheduledMessages: {\n /**\n * @description Returns a list of scheduled messages.\n * @see {@link https://docs.slack.dev/reference/methods/chat.scheduledMessages.list `chat.scheduledMessages.list` API reference}.\n */\n list: bindApiCallWithOptionalArgument(this, 'chat.scheduledMessages.list'),\n },\n /**\n * @description Starts a new streaming conversation.\n * @see {@link https://docs.slack.dev/reference/methods/chat.startStream `chat.startStream` API reference}.\n */\n startStream: bindApiCall(this, 'chat.startStream'),\n /**\n * @description Stops a streaming conversation.\n * @see {@link https://docs.slack.dev/reference/methods/chat.stopStream `chat.stopStream` API reference}.\n */\n stopStream: bindApiCall(this, 'chat.stopStream'),\n /**\n * @description Provide custom unfurl behavior for user-posted URLs.\n * @see {@link https://docs.slack.dev/reference/methods/chat.unfurl `chat.unfurl` API reference}.\n */\n unfurl: bindApiCall(this, 'chat.unfurl'),\n /**\n * @description Updates a message.\n * @see {@link https://docs.slack.dev/reference/methods/chat.update `chat.update` API reference}.\n */\n update: bindApiCall(this, 'chat.update'),\n };\n this.conversations = {\n /**\n * @description Accepts an invitation to a Slack Connect channel.\n * @see {@link https://docs.slack.dev/reference/methods/conversations.acceptSharedInvite `conversations.acceptSharedInvite` API reference}.\n */\n acceptSharedInvite: bindApiCall(this, 'conversations.acceptSharedInvite'),\n /**\n * @description Approves an invitation to a Slack Connect channel.\n * @see {@link https://docs.slack.dev/reference/methods/conversations.approveSharedInvite `conversations.approveSharedInvite` API reference}.\n */\n approveSharedInvite: bindApiCall(this, 'conversations.approveSharedInvite'),\n /**\n * @description Archives a conversation.\n * @see {@link https://docs.slack.dev/reference/methods/conversations.archive `conversations.archive` API reference}.\n */\n archive: bindApiCall(this, 'conversations.archive'),\n canvases: {\n /**\n * @description Create a Channel Canvas for a channel.\n * @see {@link https://docs.slack.dev/reference/methods/conversations.canvases.create `conversations.canvases.create` API reference}.\n */\n create: bindApiCall(this, 'conversations.canvases.create'),\n },\n /**\n * @description Closes a direct message or multi-person direct message.\n * @see {@link https://docs.slack.dev/reference/methods/conversations.close `conversations.close` API reference}.\n */\n close: bindApiCall(this, 'conversations.close'),\n /**\n * @description Initiates a public or private channel-based conversation.\n * @see {@link https://docs.slack.dev/reference/methods/conversations.create `conversations.create` API reference}.\n */\n create: bindApiCall(this, 'conversations.create'),\n /**\n * @description Declines an invitation to a Slack Connect channel.\n * @see {@link https://docs.slack.dev/reference/methods/conversations.declineSharedInvite `conversations.declineSharedInvite` API reference}.\n */\n declineSharedInvite: bindApiCall(this, 'conversations.declineSharedInvite'),\n externalInvitePermissions: {\n /**\n * @description Convert a team in a shared channel from an External Limited channel to a fully shared Slack\n * Connect channel or vice versa.\n * @see {@link https://docs.slack.dev/reference/methods/conversations.externalInvitePermissions.set `conversations.externalInvitePermissions.set` API reference}.\n */\n set: bindApiCall(this, 'conversations.externalInvitePermissions.set'),\n },\n /**\n * @description Fetches a conversation's history of messages and events.\n * @see {@link https://docs.slack.dev/reference/methods/conversations.history `conversations.history` API reference}.\n */\n history: bindApiCall(this, 'conversations.history'),\n /**\n * @description Retrieve information about a conversation.\n * @see {@link https://docs.slack.dev/reference/methods/conversations.info `conversations.info` API reference}.\n */\n info: bindApiCall(this, 'conversations.info'),\n /**\n * @description Invites users to a channel.\n * @see {@link https://docs.slack.dev/reference/methods/conversations.invite `conversations.invite` API reference}.\n */\n invite: bindApiCall(this, 'conversations.invite'),\n /**\n * @description Sends an invitation to a Slack Connect channel.\n * @see {@link https://docs.slack.dev/reference/methods/conversations.inviteShared `conversations.inviteShared` API reference}.\n */\n inviteShared: bindApiCall(this, 'conversations.inviteShared'),\n /**\n * @description Joins an existing conversation.\n * @see {@link https://docs.slack.dev/reference/methods/conversations.join `conversations.join` API reference}.\n */\n join: bindApiCall(this, 'conversations.join'),\n /**\n * @description Removes a user from a conversation.\n * @see {@link https://docs.slack.dev/reference/methods/conversations.kick `conversations.kick` API reference}.\n */\n kick: bindApiCall(this, 'conversations.kick'),\n /**\n * @description Leaves a conversation.\n * @see {@link https://docs.slack.dev/reference/methods/conversations.leave `conversations.leave` API reference}.\n */\n leave: bindApiCall(this, 'conversations.leave'),\n /**\n * @description List all channels in a Slack team.\n * @see {@link https://docs.slack.dev/reference/methods/conversations.list `conversations.list` API reference}.\n */\n list: bindApiCallWithOptionalArgument(this, 'conversations.list'),\n /**\n * @description Lists shared channel invites that have been generated or received but have not been approved by\n * all parties.\n * @see {@link https://docs.slack.dev/reference/methods/conversations.listConnectInvites `conversations.listConnectInvites` API reference}.\n */\n listConnectInvites: bindApiCallWithOptionalArgument(this, 'conversations.listConnectInvites'),\n /**\n * @description Sets the read cursor in a channel.\n * @see {@link https://docs.slack.dev/reference/methods/conversations.mark `conversations.mark` API reference}.\n */\n mark: bindApiCall(this, 'conversations.mark'),\n /**\n * @description Retrieve members of a conversation.\n * @see {@link https://docs.slack.dev/reference/methods/conversations.members `conversations.members` API reference}.\n */\n members: bindApiCall(this, 'conversations.members'),\n /**\n * @description Opens or resumes a direct message or multi-person direct message.\n * @see {@link https://docs.slack.dev/reference/methods/conversations.open `conversations.open` API reference}.\n */\n open: bindApiCall(this, 'conversations.open'),\n /**\n * @description Renames a conversation.\n * @see {@link https://docs.slack.dev/reference/methods/conversations.rename `conversations.rename` API reference}.\n */\n rename: bindApiCall(this, 'conversations.rename'),\n /**\n * @description Retrieve a thread of messages posted to a conversation.\n * @see {@link https://docs.slack.dev/reference/methods/conversations.replies `conversations.replies` API reference}.\n */\n replies: bindApiCall(this, 'conversations.replies'),\n requestSharedInvite: {\n /**\n * @description Approves a request to add an external user to a channel and sends them a Slack Connect invite.\n * @see {@link https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.approve `conversations.requestSharedInvite.approve` API reference}.\n */\n approve: bindApiCall(this, 'conversations.requestSharedInvite.approve'),\n /**\n * @description Denies a request to invite an external user to a channel.\n * @see {@link https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.deny `conversations.requestSharedInvite.deny` API reference}.\n */\n deny: bindApiCall(this, 'conversations.requestSharedInvite.deny'),\n /**\n * @description Lists requests to add external users to channels with ability to filter.\n * @see {@link https://docs.slack.dev/reference/methods/conversations.requestSharedInvite.list `conversations.requestSharedInvite.list` API reference}.\n */\n list: bindApiCallWithOptionalArgument(this, 'conversations.requestSharedInvite.list'),\n },\n /**\n * @description Sets the purpose for a conversation.\n * @see {@link https://docs.slack.dev/reference/methods/conversations.setPurpose `conversations.setPurpose` API reference}.\n */\n setPurpose: bindApiCall(this, 'conversations.setPurpose'),\n /**\n * @description Sets the topic for a conversation.\n * @see {@link https://docs.slack.dev/reference/methods/conversations.setTopic `conversations.setTopic` API reference}.\n */\n setTopic: bindApiCall(this, 'conversations.setTopic'),\n /**\n * @description Reverses conversation archival.\n * @see {@link https://docs.slack.dev/reference/methods/conversations.unarchive `conversations.unarchive` API reference}.\n */\n unarchive: bindApiCall(this, 'conversations.unarchive'),\n };\n this.dialog = {\n /**\n * @description Open a dialog with a user.\n * @see {@link https://docs.slack.dev/reference/methods/dialog.open `dialog.open` API reference}.\n */\n open: bindApiCall(this, 'dialog.open'),\n };\n this.dnd = {\n /**\n * @description Ends the current user's Do Not Disturb session immediately.\n * @see {@link https://docs.slack.dev/reference/methods/dnd.endDnd `dnd.endDnd` API reference}.\n */\n endDnd: bindApiCallWithOptionalArgument(this, 'dnd.endDnd'),\n /**\n * @description Ends the current user's snooze mode immediately.\n * @see {@link https://docs.slack.dev/reference/methods/dnd.endSnooze `dnd.endSnooze` API reference}.\n */\n endSnooze: bindApiCallWithOptionalArgument(this, 'dnd.endSnooze'),\n /**\n * @description Retrieves a user's current Do Not Disturb status.\n * @see {@link https://docs.slack.dev/reference/methods/dnd.info `dnd.info` API reference}.\n */\n info: bindApiCallWithOptionalArgument(this, 'dnd.info'),\n /**\n * @description Turns on Do Not Disturb mode for the current user, or changes its duration.\n * @see {@link https://docs.slack.dev/reference/methods/dnd.setSnooze `dnd.setSnooze` API reference}.\n */\n setSnooze: bindApiCall(this, 'dnd.setSnooze'),\n /**\n * @description Retrieves the Do Not Disturb status for up to 50 users on a team.\n * @see {@link https://docs.slack.dev/reference/methods/dnd.teamInfo `dnd.teamInfo` API reference}.\n */\n teamInfo: bindApiCall(this, 'dnd.teamInfo'),\n };\n this.emoji = {\n /**\n * @description Lists custom emoji for a team.\n * @see {@link https://docs.slack.dev/reference/methods/emoji.list `emoji.list` API reference}.\n */\n list: bindApiCallWithOptionalArgument(this, 'emoji.list'),\n };\n this.entity = {\n /**\n * @description Provide information about the entity to be displayed in the flexpane.\n * @see {@link https://docs.slack.dev/reference/methods/entity.presentDetails}\n */\n presentDetails: bindApiCall(this, 'entity.presentDetails'),\n };\n this.files = {\n /**\n * @description Finishes an upload started with {@link https://docs.slack.dev/reference/methods/files.getUploadURLExternal `files.getUploadURLExternal`}.\n * @see {@link https://docs.slack.dev/reference/methods/files.completeUploadExternal `files.completeUploadExternal` API reference}.\n */\n completeUploadExternal: bindApiCall(this, 'files.completeUploadExternal'),\n /**\n * @description Deletes a file.\n * @see {@link https://docs.slack.dev/reference/methods/files.delete `files.delete` API reference}.\n */\n delete: bindApiCall(this, 'files.delete'),\n /**\n * @description Gets a URL for an edge external file upload.\n * @see {@link https://docs.slack.dev/reference/methods/files.getUploadURLExternal `files.getUploadURLExternal` API reference}.\n */\n getUploadURLExternal: bindApiCall(this, 'files.getUploadURLExternal'),\n /**\n * @description Gets information about a file.\n * @see {@link https://docs.slack.dev/reference/methods/files.info `files.info` API reference}.\n */\n info: bindApiCall(this, 'files.info'),\n /**\n * @description List files for a team, in a channel, or from a user with applied filters.\n * @see {@link https://docs.slack.dev/reference/methods/files.list `files.list` API reference}.\n */\n list: bindApiCall(this, 'files.list'),\n /**\n * @description Revokes public/external sharing access for a file.\n * @see {@link https://docs.slack.dev/reference/methods/files.revokePublicURL `files.revokePublicURL` API reference}.\n */\n revokePublicURL: bindApiCall(this, 'files.revokePublicURL'),\n /**\n * @description Enables a file for public/external sharing.\n * @see {@link https://docs.slack.dev/reference/methods/files.sharedPublicURL `files.sharedPublicURL` API reference}.\n */\n sharedPublicURL: bindApiCall(this, 'files.sharedPublicURL'),\n /**\n * @description Uploads or creates a file.\n * @deprecated Use `uploadV2` instead. See {@link https://docs.slack.dev/changelog/2024-04-a-better-way-to-upload-files-is-here-to-stay our post on retiring `files.upload`}.\n * @see {@link https://docs.slack.dev/reference/methods/files.upload `files.upload` API reference}.\n */\n upload: bindApiCall(this, 'files.upload'),\n /**\n * @description Custom method to support a new way of uploading files to Slack.\n * Supports a single file upload\n * Supply:\n * - (required) single file or content\n * - (optional) channel, alt_text, snippet_type,\n * Supports multiple file uploads\n * Supply:\n * - multiple upload_files\n * Will try to honor both single file or content data supplied as well\n * as multiple file uploads property.\n * @see {@link https://docs.slack.dev/tools/node-slack-sdk/web-api/#upload-a-file `@slack/web-api` Upload a file documentation}.\n */\n uploadV2: bindFilesUploadV2(this),\n comments: {\n /**\n * @description Deletes an existing comment on a file.\n * @see {@link https://docs.slack.dev/reference/methods/files.comments.delete `files.comments.delete` API reference}.\n */\n delete: bindApiCall(this, 'files.comments.delete'),\n },\n remote: {\n /**\n * @description Adds a file from a remote service.\n * @see {@link https://docs.slack.dev/reference/methods/files.remote.add `files.remote.add` API reference}.\n */\n add: bindApiCall(this, 'files.remote.add'),\n /**\n * @description Retrieve information about a remote file added to Slack.\n * @see {@link https://docs.slack.dev/reference/methods/files.remote.info `files.remote.info` API reference}.\n */\n info: bindApiCall(this, 'files.remote.info'),\n /**\n * @description List remote files added to Slack.\n * @see {@link https://docs.slack.dev/reference/methods/files.remote.list `files.remote.list` API reference}.\n */\n list: bindApiCall(this, 'files.remote.list'),\n /**\n * @description Remove a remote file.\n * @see {@link https://docs.slack.dev/reference/methods/files.remote.remove `files.remote.remove` API reference}.\n */\n remove: bindApiCall(this, 'files.remote.remove'),\n /**\n * @description Share a remote file into a channel.\n * @see {@link https://docs.slack.dev/reference/methods/files.remote.share `files.remote.share` API reference}.\n */\n share: bindApiCall(this, 'files.remote.share'),\n /**\n * @description Updates an existing remote file.\n * @see {@link https://docs.slack.dev/reference/methods/files.remote.update `files.remote.update` API reference}.\n */\n update: bindApiCall(this, 'files.remote.update'),\n },\n };\n this.functions = {\n /**\n * @description Signal the failure to execute a Custom Function.\n * @see {@link https://docs.slack.dev/reference/methods/functions.completeError `functions.completeError` API reference}.\n */\n completeError: bindApiCall(this, 'functions.completeError'),\n /**\n * @description Signal the successful completion of a Custom Function.\n * @see {@link https://docs.slack.dev/reference/methods/functions.completeSuccess `functions.completeSuccess` API reference}.\n */\n completeSuccess: bindApiCall(this, 'functions.completeSuccess'),\n };\n this.migration = {\n /**\n * @description For Enterprise Grid workspaces, map local user IDs to global user IDs.\n * @see {@link https://docs.slack.dev/reference/methods/migration.exchange `migration.exchange` API reference}.\n */\n exchange: bindApiCall(this, 'migration.exchange'),\n };\n this.oauth = {\n /**\n * @description Exchanges a temporary OAuth verifier code for an access token.\n * @deprecated This is a legacy method only used by classic Slack apps. Use `oauth.v2.access` for new Slack apps.\n * @see {@link https://docs.slack.dev/reference/methods/oauth.access `oauth.access` API reference}.\n */\n access: bindApiCall(this, 'oauth.access'),\n v2: {\n /**\n * @description Exchanges a temporary OAuth verifier code for an access token.\n * @see {@link https://docs.slack.dev/reference/methods/oauth.v2.access `oauth.v2.access` API reference}.\n */\n access: bindApiCall(this, 'oauth.v2.access'),\n /**\n * @description Exchanges a legacy access token for a new expiring access token and refresh token.\n * @see {@link https://docs.slack.dev/reference/methods/oauth.v2.exchange `oauth.v2.exchange` API reference}.\n */\n exchange: bindApiCall(this, 'oauth.v2.exchange'),\n },\n };\n this.openid = {\n connect: {\n /**\n * @description Exchanges a temporary OAuth verifier code for an access token for {@link https://docs.slack.dev/authentication/sign-in-with-slack Sign in with Slack}.\n * @see {@link https://docs.slack.dev/reference/methods/openid.connect.token `openid.connect.token` API reference}.\n */\n token: bindApiCall(this, 'openid.connect.token'),\n /**\n * @description Get the identity of a user who has authorized {@link https://docs.slack.dev/authentication/sign-in-with-slack Sign in with Slack}.\n * @see {@link https://docs.slack.dev/reference/methods/openid.connect.userInfo `openid.connect.userInfo` API reference}.\n */\n userInfo: bindApiCallWithOptionalArgument(this, 'openid.connect.userInfo'),\n },\n };\n this.pins = {\n /**\n * @description Pins an item to a channel.\n * @see {@link https://docs.slack.dev/reference/methods/pins.add `pins.add` API reference}.\n */\n add: bindApiCall(this, 'pins.add'),\n /**\n * @description Lists items pinned to a channel.\n * @see {@link https://docs.slack.dev/reference/methods/pins.list `pins.list` API reference}.\n */\n list: bindApiCall(this, 'pins.list'),\n /**\n * @description Un-pins an item from a channel.\n * @see {@link https://docs.slack.dev/reference/methods/pins.remove `pins.remove` API reference}.\n */\n remove: bindApiCall(this, 'pins.remove'),\n };\n this.reactions = {\n /**\n * @description Adds a reaction to an item.\n * @see {@link https://docs.slack.dev/reference/methods/reactions.add `reactions.add` API reference}.\n */\n add: bindApiCall(this, 'reactions.add'),\n /**\n * @description Gets reactions for an item.\n * @see {@link https://docs.slack.dev/reference/methods/reactions.get `reactions.get` API reference}.\n */\n get: bindApiCall(this, 'reactions.get'),\n /**\n * @description List reactions made by a user.\n * @see {@link https://docs.slack.dev/reference/methods/reactions.list `reactions.list` API reference}.\n */\n list: bindApiCallWithOptionalArgument(this, 'reactions.list'),\n /**\n * @description Removes a reaction from an item.\n * @see {@link https://docs.slack.dev/reference/methods/reactions.remove `reactions.remove` API reference}.\n */\n remove: bindApiCall(this, 'reactions.remove'),\n };\n // TODO: keep tabs on reminders APIs, may be deprecated once Later list APIs land\n // See: https://docs.slack.dev/changelog/2023-07-its-later-already-for-stars-and-reminders\n this.reminders = {\n /**\n * @description Creates a reminder.\n * @see {@link https://docs.slack.dev/reference/methods/reminders.add `reminders.add` API reference}.\n */\n add: bindApiCall(this, 'reminders.add'),\n /**\n * @description Marks a reminder as complete.\n * @see {@link https://docs.slack.dev/reference/methods/reminders.complete `reminders.complete` API reference}.\n */\n complete: bindApiCall(this, 'reminders.complete'),\n /**\n * @description Deletes a reminder.\n * @see {@link https://docs.slack.dev/reference/methods/reminders.delete `reminders.delete` API reference}.\n */\n delete: bindApiCall(this, 'reminders.delete'),\n /**\n * @description Gets information about a reminder.\n * @see {@link https://docs.slack.dev/reference/methods/reminders.info `reminders.info` API reference}.\n */\n info: bindApiCall(this, 'reminders.info'),\n /**\n * @description Lists all reminders created by or for a given user.\n * @see {@link https://docs.slack.dev/reference/methods/reminders.list `reminders.list` API reference}.\n */\n list: bindApiCallWithOptionalArgument(this, 'reminders.list'),\n };\n this.rtm = {\n /**\n * @description Starts a Real Time Messaging session.\n * @see {@link https://docs.slack.dev/reference/methods/rtm.connect `rtm.connect` API reference}.\n */\n connect: bindApiCallWithOptionalArgument(this, 'rtm.connect'),\n /**\n * @description Starts a Real Time Messaging session.\n * @deprecated Use `rtm.connect` instead. See {@link https://docs.slack.dev/changelog/2021-10-rtm-start-to-stop our post on retiring `rtm.start`}.\n * @see {@link https://docs.slack.dev/reference/methods/rtm.start `rtm.start` API reference}.\n */\n start: bindApiCallWithOptionalArgument(this, 'rtm.start'),\n };\n this.search = {\n /**\n * @description Searches for messages and files matching a query.\n * @see {@link https://docs.slack.dev/reference/methods/search.all search.all` API reference}.\n */\n all: bindApiCall(this, 'search.all'),\n /**\n * @description Searches for files matching a query.\n * @see {@link https://docs.slack.dev/reference/methods/search.files search.files` API reference}.\n */\n files: bindApiCall(this, 'search.files'),\n /**\n * @description Searches for messages matching a query.\n * @see {@link https://docs.slack.dev/reference/methods/search.messages search.messages` API reference}.\n */\n messages: bindApiCall(this, 'search.messages'),\n };\n this.slackLists = {\n access: {\n /**\n * @description Delete access for specified entities.\n * @see {@link https://docs.slack.dev/reference/methods/slackLists.access.delete `slackLists.access.delete` API reference}.\n */\n delete: bindApiCall(this, 'slackLists.access.delete'),\n /**\n * @description Set access level for specified entities.\n * @see {@link https://docs.slack.dev/reference/methods/slackLists.access.set `slackLists.access.set` API reference}.\n */\n set: bindApiCall(this, 'slackLists.access.set'),\n },\n /**\n * @description Create a List.\n * @see {@link https://docs.slack.dev/reference/methods/slackLists.create `slackLists.create` API reference}.\n */\n create: bindApiCall(this, 'slackLists.create'),\n download: {\n /**\n * @description Get download job status.\n * @see {@link https://docs.slack.dev/reference/methods/slackLists.download.get `slackLists.download.get` API reference}.\n */\n get: bindApiCall(this, 'slackLists.download.get'),\n /**\n * @description Start a download job for a list.\n * @see {@link https://docs.slack.dev/reference/methods/slackLists.download.start `slackLists.download.start` API reference}.\n */\n start: bindApiCall(this, 'slackLists.download.start'),\n },\n items: {\n /**\n * @description Create a list item.\n * @see {@link https://docs.slack.dev/reference/methods/slackLists.items.create `slackLists.items.create` API reference}.\n */\n create: bindApiCall(this, 'slackLists.items.create'),\n /**\n * @description Delete a list item.\n * @see {@link https://docs.slack.dev/reference/methods/slackLists.items.delete `slackLists.items.delete` API reference}.\n */\n delete: bindApiCall(this, 'slackLists.items.delete'),\n /**\n * @description Delete multiple list items.\n * @see {@link https://docs.slack.dev/reference/methods/slackLists.items.deleteMultiple `slackLists.items.deleteMultiple` API reference}.\n */\n deleteMultiple: bindApiCall(this, 'slackLists.items.deleteMultiple'),\n /**\n * @description Get info about a list item.\n * @see {@link https://docs.slack.dev/reference/methods/slackLists.items.info `slackLists.items.info` API reference}.\n */\n info: bindApiCall(this, 'slackLists.items.info'),\n /**\n * @description Get records from a List.\n * @see {@link https://docs.slack.dev/reference/methods/slackLists.items.list `slackLists.items.list` API reference}.\n */\n list: bindApiCall(this, 'slackLists.items.list'),\n /**\n * @description Update a list item.\n * @see {@link https://docs.slack.dev/reference/methods/slackLists.items.update `slackLists.items.update` API reference}.\n */\n update: bindApiCall(this, 'slackLists.items.update'),\n },\n /**\n * @description Update a list.\n * @see {@link https://docs.slack.dev/reference/methods/slackLists.update `slackLists.update` API reference}.\n */\n update: bindApiCall(this, 'slackLists.update'),\n };\n this.team = {\n /**\n * @description Gets the access logs for the current team.\n * @see {@link https://docs.slack.dev/reference/methods/team.accessLogs `team.accessLogs` API reference}.\n */\n accessLogs: bindApiCallWithOptionalArgument(this, 'team.accessLogs'),\n /**\n * @description Gets billable users information for the current team.\n * @see {@link https://docs.slack.dev/reference/methods/team.billableInfo `team.billableInfo` API reference}.\n */\n billableInfo: bindApiCallWithOptionalArgument(this, 'team.billableInfo'),\n billing: {\n /**\n * @description Reads a workspace's billing plan information.\n * @see {@link https://docs.slack.dev/reference/methods/team.billing.info `team.billing.info` API reference}.\n */\n info: bindApiCall(this, 'team.billing.info'),\n },\n externalTeams: {\n /**\n * @description Disconnect an external organization.\n * @see {@link https://docs.slack.dev/reference/methods/team.externalTeams.disconnect `team.externalTeams.disconnect` API reference}.\n */\n disconnect: bindApiCall(this, 'team.externalTeams.disconnect'),\n /**\n * @description Returns a list of all the external teams connected and details about the connection.\n * @see {@link https://docs.slack.dev/reference/methods/team.externalTeams.list `team.externalTeams.list` API reference}.\n */\n list: bindApiCall(this, 'team.externalTeams.list'),\n },\n /**\n * @description Gets information about the current team.\n * @see {@link https://docs.slack.dev/reference/methods/team.info `team.info` API reference}.\n */\n info: bindApiCallWithOptionalArgument(this, 'team.info'),\n /**\n * @description Gets the integration logs for the current team.\n * @see {@link https://docs.slack.dev/reference/methods/team.integrationLogs `team.integrationLogs` API reference}.\n */\n integrationLogs: bindApiCallWithOptionalArgument(this, 'team.integrationLogs'),\n preferences: {\n /**\n * @description Retrieve a list of a workspace's team preferences.\n * @see {@link https://docs.slack.dev/reference/methods/team.preferences.list `team.preferences.list` API reference}.\n */\n list: bindApiCallWithOptionalArgument(this, 'team.preferences.list'),\n },\n profile: {\n /**\n * @description Retrieve a team's profile.\n * @see {@link https://docs.slack.dev/reference/methods/team.profile.get `team.profile.get` API reference}.\n */\n get: bindApiCallWithOptionalArgument(this, 'team.profile.get'),\n },\n };\n this.tooling = {\n tokens: {\n /**\n * @description Exchanges a refresh token for a new app configuration token.\n * @see {@link https://docs.slack.dev/reference/methods/tooling.tokens.rotate `tooling.tokens.rotate` API reference}.\n */\n rotate: bindApiCall(this, 'tooling.tokens.rotate'),\n },\n };\n this.usergroups = {\n /**\n * @description Create a User Group.\n * @see {@link https://docs.slack.dev/reference/methods/usergroups.create `usergroups.create` API reference}.\n */\n create: bindApiCall(this, 'usergroups.create'),\n /**\n * @description Disable an existing User Group.\n * @see {@link https://docs.slack.dev/reference/methods/usergroups.disable `usergroups.disable` API reference}.\n */\n disable: bindApiCall(this, 'usergroups.disable'),\n /**\n * @description Enable an existing User Group.\n * @see {@link https://docs.slack.dev/reference/methods/usergroups.enable `usergroups.enable` API reference}.\n */\n enable: bindApiCall(this, 'usergroups.enable'),\n /**\n * @description List all User Groups for a team.\n * @see {@link https://docs.slack.dev/reference/methods/usergroups.list `usergroups.list` API reference}.\n */\n list: bindApiCallWithOptionalArgument(this, 'usergroups.list'),\n /**\n * @description Update an existing User Group.\n * @see {@link https://docs.slack.dev/reference/methods/usergroups.update `usergroups.update` API reference}.\n */\n update: bindApiCall(this, 'usergroups.update'),\n users: {\n /**\n * @description List all users in a User Group.\n * @see {@link https://docs.slack.dev/reference/methods/usergroups.users.list `usergroups.users.list` API reference}.\n */\n list: bindApiCall(this, 'usergroups.users.list'),\n /**\n * @description Update the list of users in a User Group.\n * @see {@link https://docs.slack.dev/reference/methods/usergroups.users.update `usergroups.users.update` API reference}.\n */\n update: bindApiCall(this, 'usergroups.users.update'),\n },\n };\n this.users = {\n /**\n * @description List conversations the calling user may access.\n * @see {@link https://docs.slack.dev/reference/methods/users.conversations `users.conversations` API reference}.\n */\n conversations: bindApiCall(this, 'users.conversations'),\n /**\n * @description Delete the user profile photo.\n * @see {@link https://docs.slack.dev/reference/methods/users.deletePhoto `users.deletePhoto` API reference}.\n */\n deletePhoto: bindApiCall(this, 'users.deletePhoto'),\n discoverableContacts: {\n /**\n * @description Lookup an email address to see if someone is on Slack.\n * @see {@link https://docs.slack.dev/reference/methods/users.discoverableContacts.lookup `users.discoverableContacts.lookup` API reference}.\n */\n lookup: bindApiCall(this, 'users.discoverableContacts.lookup'),\n },\n /**\n * @description Gets user presence information.\n * @see {@link https://docs.slack.dev/reference/methods/users.getPresence `users.getPresence` API reference}.\n */\n getPresence: bindApiCall(this, 'users.getPresence'),\n /**\n * @description Get a user's identity.\n * @see {@link https://docs.slack.dev/reference/methods/users.identity `users.identity` API reference}.\n */\n identity: bindApiCall(this, 'users.identity'),\n /**\n * @description Gets information about a user.\n * @see {@link https://docs.slack.dev/reference/methods/users.info `users.info` API reference}.\n */\n info: bindApiCall(this, 'users.info'),\n /**\n * @description Lists all users in a Slack team.\n * @see {@link https://docs.slack.dev/reference/methods/users.list `users.list` API reference}.\n */\n list: bindApiCall(this, 'users.list'),\n /**\n * @description Find a user with an email address.\n * @see {@link https://docs.slack.dev/reference/methods/users.lookupByEmail `users.lookupByEmail` API reference}.\n */\n lookupByEmail: bindApiCall(this, 'users.lookupByEmail'),\n /**\n * @description Set the user profile photo.\n * @see {@link https://docs.slack.dev/reference/methods/users.setPhoto `users.setPhoto` API reference}.\n */\n setPhoto: bindApiCall(this, 'users.setPhoto'),\n /**\n * @description Manually sets user presence.\n * @see {@link https://docs.slack.dev/reference/methods/users.setPresence `users.setPresence` API reference}.\n */\n setPresence: bindApiCall(this, 'users.setPresence'),\n profile: {\n /**\n * @description Retrieve a user's profile information, including their custom status.\n * @see {@link https://docs.slack.dev/reference/methods/users.profile.get `users.profile.get` API reference}.\n */\n get: bindApiCall(this, 'users.profile.get'),\n /**\n * @description Set a user's profile information, including custom status.\n * @see {@link https://docs.slack.dev/reference/methods/users.profile.set `users.profile.set` API reference}.\n */\n set: bindApiCall(this, 'users.profile.set'),\n },\n };\n this.views = {\n /**\n * @description Open a view for a user.\n * @see {@link https://docs.slack.dev/reference/methods/views.open `views.open` API reference}.\n */\n open: bindApiCall(this, 'views.open'),\n /**\n * @description Publish a static view for a user.\n * @see {@link https://docs.slack.dev/reference/methods/views.publish `views.publish` API reference}.\n */\n publish: bindApiCall(this, 'views.publish'),\n /**\n * @description Push a view onto the stack of a root view.\n * @see {@link https://docs.slack.dev/reference/methods/views.push `views.push` API reference}.\n */\n push: bindApiCall(this, 'views.push'),\n /**\n * @description Update an existing view.\n * @see {@link https://docs.slack.dev/reference/methods/views.update `views.update` API reference}.\n */\n update: bindApiCall(this, 'views.update'),\n };\n // ------------------\n // Deprecated methods\n // ------------------\n // TODO: breaking changes for future majors:\n // - stars.* methods are marked as deprecated; once Later has APIs, these will see an official sunsetting timeline\n // - workflows.* methods, Sep 12 2024: https://docs.slack.dev/changelog/2023-08-workflow-steps-from-apps-step-back\n this.stars = {\n /**\n * @description Save an item for later. Formerly known as adding a star.\n * @deprecated Stars can still be added but they can no longer be viewed or interacted with by end-users.\n * See {@link https://docs.slack.dev/changelog/2023-07-its-later-already-for-stars-and-reminders our post on stars and the Later list}.\n * @see {@link https://docs.slack.dev/reference/methods/stars.add `stars.add` API reference}.\n */\n add: bindApiCall(this, 'stars.add'),\n /**\n * @description List a user's saved items, formerly known as stars.\n * @deprecated Stars can still be listed but they can no longer be viewed or interacted with by end-users.\n * See {@link https://docs.slack.dev/changelog/2023-07-its-later-already-for-stars-and-reminders our post on stars and the Later list}.\n * @see {@link https://docs.slack.dev/reference/methods/stars.list `stars.list` API reference}.\n */\n list: bindApiCall(this, 'stars.list'),\n /**\n * @description Remove a saved item from a user's saved items, formerly known as stars.\n * @deprecated Stars can still be removed but they can no longer be viewed or interacted with by end-users.\n * See {@link https://docs.slack.dev/changelog/2023-07-its-later-already-for-stars-and-reminders our post on stars and the Later list}.\n * @see {@link https://docs.slack.dev/reference/methods/stars.remove `stars.remove` API reference}.\n */\n remove: bindApiCall(this, 'stars.remove'),\n };\n this.workflows = {\n featured: {\n /**\n * @description Add featured workflows to a channel.\n * @see {@link https://docs.slack.dev/reference/methods/workflows.featured.add `workflows.featured.add` API reference}.\n */\n add: bindApiCall(this, 'workflows.featured.add'),\n /**\n * @description List the featured workflows for specified channels.\n * @see {@link https://docs.slack.dev/reference/methods/workflows.featured.list `workflows.featured.list` API reference}.\n */\n list: bindApiCall(this, 'workflows.featured.list'),\n /**\n * @description Remove featured workflows from a channel.\n * @see {@link https://docs.slack.dev/reference/methods/workflows.featured.remove `workflows.featured.remove` API reference}.\n */\n remove: bindApiCall(this, 'workflows.featured.remove'),\n /**\n * @description Set featured workflows for a channel.\n * @see {@link https://docs.slack.dev/reference/methods/workflows.featured.set `workflows.featured.set` API reference}.\n */\n set: bindApiCall(this, 'workflows.featured.set'),\n },\n /**\n * @description Indicate that an app's step in a workflow completed execution.\n * @deprecated Steps from Apps is deprecated.\n * We're retiring all Slack app functionality around Steps from Apps in September 2024.\n * See {@link https://docs.slack.dev/changelog/2023-08-workflow-steps-from-apps-step-back our post on deprecating Steps from Apps}.\n * @see {@link https://docs.slack.dev/legacy/legacy-steps-from-apps/legacy-steps-from-apps-workflow_step-object `workflows.stepCompleted` API reference}.\n */\n stepCompleted: bindApiCall(this, 'workflows.stepCompleted'),\n /**\n * @description Indicate that an app's step in a workflow failed to execute.\n * @deprecated Steps from Apps is deprecated.\n * We're retiring all Slack app functionality around Steps from Apps in September 2024.\n * See {@link https://docs.slack.dev/changelog/2023-08-workflow-steps-from-apps-step-back our post on deprecating Steps from Apps}.\n * @see {@link https://docs.slack.dev/legacy/legacy-steps-from-apps/legacy-steps-from-apps-workflow_step-object `workflows.stepFailed` API reference}.\n */\n stepFailed: bindApiCall(this, 'workflows.stepFailed'),\n /**\n * @description Update the configuration for a workflow step.\n * @deprecated Steps from Apps is deprecated.\n * We're retiring all Slack app functionality around Steps from Apps in September 2024.\n * See {@link https://docs.slack.dev/changelog/2023-08-workflow-steps-from-apps-step-back our post on deprecating Steps from Apps}.\n * @see {@link https://docs.slack.dev/legacy/legacy-steps-from-apps/legacy-steps-from-apps-workflow_step-object `workflows.updateStep` API reference}.\n */\n updateStep: bindApiCall(this, 'workflows.updateStep'),\n };\n // Check that the class being created extends from `WebClient` rather than this class\n if (new.target !== WebClient_1.WebClient && !(new.target.prototype instanceof WebClient_1.WebClient)) {\n throw new Error('Attempt to inherit from WebClient methods without inheriting from WebClient');\n }\n }\n}\nexports.Methods = Methods;\n__exportStar(require(\"@slack/types\"), exports);\n//# sourceMappingURL=methods.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || (function () {\n var ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n };\n return function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n };\n})();\nvar __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); }\nvar __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n};\nvar __asyncValues = (this && this.__asyncValues) || function (o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.WebClient = exports.WebClientEvent = void 0;\nexports.buildThreadTsWarningMessage = buildThreadTsWarningMessage;\nconst node_path_1 = require(\"node:path\");\nconst node_querystring_1 = require(\"node:querystring\");\nconst node_util_1 = require(\"node:util\");\nconst node_zlib_1 = __importDefault(require(\"node:zlib\"));\nconst axios_1 = __importDefault(require(\"axios\"));\nconst form_data_1 = __importDefault(require(\"form-data\"));\nconst is_electron_1 = __importDefault(require(\"is-electron\"));\nconst is_stream_1 = __importDefault(require(\"is-stream\"));\nconst p_queue_1 = __importDefault(require(\"p-queue\"));\nconst p_retry_1 = __importStar(require(\"p-retry\"));\nconst chat_stream_1 = require(\"./chat-stream\");\nconst errors_1 = require(\"./errors\");\nconst file_upload_1 = require(\"./file-upload\");\nconst helpers_1 = __importDefault(require(\"./helpers\"));\nconst instrument_1 = require(\"./instrument\");\nconst logger_1 = require(\"./logger\");\nconst methods_1 = require(\"./methods\");\nconst retry_policies_1 = require(\"./retry-policies\");\n/*\n * Helpers\n */\n// Props on axios default headers object to ignore when retrieving full list of actual headers sent in any HTTP requests\nconst axiosHeaderPropsToIgnore = [\n 'delete',\n 'common',\n 'get',\n 'put',\n 'head',\n 'post',\n 'link',\n 'patch',\n 'purge',\n 'unlink',\n 'options',\n];\nconst defaultFilename = 'Untitled';\nconst defaultPageSize = 200;\nconst noopPageReducer = () => undefined;\nvar WebClientEvent;\n(function (WebClientEvent) {\n // TODO: safe to rename this to conform to PascalCase enum type naming convention?\n WebClientEvent[\"RATE_LIMITED\"] = \"rate_limited\";\n})(WebClientEvent || (exports.WebClientEvent = WebClientEvent = {}));\n/**\n * A client for Slack's Web API\n *\n * This client provides an alias for each {@link https://docs.slack.dev/reference/methods|Web API method}. Each method is\n * a convenience wrapper for calling the {@link WebClient#apiCall} method using the method name as the first parameter.\n */\nclass WebClient extends methods_1.Methods {\n /**\n * @param token - An API token to authenticate/authorize with Slack (usually start with `xoxp`, `xoxb`)\n * @param {Object} [webClientOptions] - Configuration options.\n * @param {Function} [webClientOptions.requestInterceptor] - An interceptor to mutate outgoing requests. See {@link https://axios-http.com/docs/interceptors Axios interceptors}\n * @param {Function} [webClientOptions.adapter] - An adapter to allow custom handling of requests. Useful if you would like to use a pre-configured http client. See {@link https://github.com/axios/axios/blob/v1.x/README.md?plain=1#L586 Axios adapter}\n */\n constructor(token, { slackApiUrl = 'https://slack.com/api/', logger = undefined, logLevel = undefined, maxRequestConcurrency = 100, retryConfig = retry_policies_1.tenRetriesInAboutThirtyMinutes, agent = undefined, tls = undefined, timeout = 0, rejectRateLimitedCalls = false, headers = {}, teamId = undefined, allowAbsoluteUrls = true, attachOriginalToWebAPIRequestError = true, requestInterceptor = undefined, adapter = undefined, } = {}) {\n super();\n this.token = token;\n this.slackApiUrl = slackApiUrl;\n if (!this.slackApiUrl.endsWith('/')) {\n this.slackApiUrl += '/';\n }\n this.retryConfig = retryConfig;\n this.requestQueue = new p_queue_1.default({ concurrency: maxRequestConcurrency });\n // NOTE: may want to filter the keys to only those acceptable for TLS options\n this.tlsConfig = tls !== undefined ? tls : {};\n this.rejectRateLimitedCalls = rejectRateLimitedCalls;\n this.teamId = teamId;\n this.allowAbsoluteUrls = allowAbsoluteUrls;\n this.attachOriginalToWebAPIRequestError = attachOriginalToWebAPIRequestError;\n // Logging\n if (typeof logger !== 'undefined') {\n this.logger = logger;\n if (typeof logLevel !== 'undefined') {\n this.logger.debug('The logLevel given to WebClient was ignored as you also gave logger');\n }\n }\n else {\n this.logger = (0, logger_1.getLogger)(WebClient.loggerName, logLevel !== null && logLevel !== void 0 ? logLevel : logger_1.LogLevel.INFO, logger);\n }\n if (this.token && !headers.Authorization)\n headers.Authorization = `Bearer ${this.token}`;\n this.axios = axios_1.default.create({\n adapter: adapter ? (config) => adapter(Object.assign(Object.assign({}, config), { adapter: undefined })) : undefined,\n timeout,\n baseURL: this.slackApiUrl,\n headers: (0, is_electron_1.default)() ? headers : Object.assign({ 'User-Agent': (0, instrument_1.getUserAgent)() }, headers),\n httpAgent: agent,\n httpsAgent: agent,\n validateStatus: () => true, // all HTTP status codes should result in a resolved promise (as opposed to only 2xx)\n maxRedirects: 0,\n // disabling axios' automatic proxy support:\n // axios would read from envvars to configure a proxy automatically, but it doesn't support TLS destinations.\n // for compatibility with https://api.slack.com, and for a larger set of possible proxies (SOCKS or other\n // protocols), users of this package should use the `agent` option to configure a proxy.\n proxy: false,\n });\n // serializeApiCallData will always determine the appropriate content-type\n this.axios.defaults.headers.post['Content-Type'] = undefined;\n // request interceptors have reversed execution order\n // see: https://github.com/axios/axios/blob/v1.x/test/specs/interceptors.spec.js#L88\n if (requestInterceptor) {\n this.axios.interceptors.request.use(requestInterceptor, null);\n }\n this.axios.interceptors.request.use(this.serializeApiCallData.bind(this), null);\n this.logger.debug('initialized');\n }\n /**\n * Generic method for calling a Web API method\n * @param method - the Web API method to call {@link https://docs.slack.dev/reference/methods}\n * @param options - options\n */\n async apiCall(method, options = {}) {\n this.logger.debug(`apiCall('${method}') start`);\n warnDeprecations(method, this.logger);\n warnIfFallbackIsMissing(method, this.logger, options);\n warnIfThreadTsIsNotString(method, this.logger, options);\n if (typeof options === 'string' || typeof options === 'number' || typeof options === 'boolean') {\n throw new TypeError(`Expected an options argument but instead received a ${typeof options}`);\n }\n (0, file_upload_1.warnIfNotUsingFilesUploadV2)(method, this.logger);\n // @ts-expect-error insufficient overlap between Record and FilesUploadV2Arguments\n if (method === 'files.uploadV2')\n return this.filesUploadV2(options);\n const headers = {};\n if (options.token)\n headers.Authorization = `Bearer ${options.token}`;\n const url = this.deriveRequestUrl(method);\n const response = await this.makeRequest(url, Object.assign({ team_id: this.teamId }, options), headers);\n const result = await this.buildResult(response);\n this.logger.debug(`http request result: ${JSON.stringify(result)}`);\n // log warnings in response metadata\n if (result.response_metadata !== undefined && result.response_metadata.warnings !== undefined) {\n result.response_metadata.warnings.forEach(this.logger.warn.bind(this.logger));\n }\n // log warnings and errors in response metadata messages\n // related to https://docs.slack.dev/changelog/2016/09/28/response-metadata-is-on-the-way\n if (result.response_metadata !== undefined && result.response_metadata.messages !== undefined) {\n for (const msg of result.response_metadata.messages) {\n const errReg = /\\[ERROR\\](.*)/;\n const warnReg = /\\[WARN\\](.*)/;\n if (errReg.test(msg)) {\n const errMatch = msg.match(errReg);\n if (errMatch != null) {\n this.logger.error(errMatch[1].trim());\n }\n }\n else if (warnReg.test(msg)) {\n const warnMatch = msg.match(warnReg);\n if (warnMatch != null) {\n this.logger.warn(warnMatch[1].trim());\n }\n }\n }\n }\n // If result's content is gzip, \"ok\" property is not returned with successful response\n // TODO: look into simplifying this code block to only check for the second condition\n // if an { ok: false } body applies for all API errors\n if (!result.ok && response.headers['content-type'] !== 'application/gzip') {\n throw (0, errors_1.platformErrorFromResult)(result);\n }\n if ('ok' in result && result.ok === false) {\n throw (0, errors_1.platformErrorFromResult)(result);\n }\n this.logger.debug(`apiCall('${method}') end`);\n return result;\n }\n paginate(method, options, shouldStop, reduce) {\n const pageSize = (() => {\n if (options !== undefined && typeof options.limit === 'number') {\n const { limit } = options;\n options.limit = undefined;\n return limit;\n }\n return defaultPageSize;\n })();\n function generatePages() {\n return __asyncGenerator(this, arguments, function* generatePages_1() {\n // when result is undefined, that signals that the first of potentially many calls has not yet been made\n let result;\n // paginationOptions stores pagination options not already stored in the options argument\n let paginationOptions = {\n limit: pageSize,\n };\n if (options !== undefined && options.cursor !== undefined) {\n paginationOptions.cursor = options.cursor;\n }\n // NOTE: test for the situation where you're resuming a pagination using and existing cursor\n while (result === undefined || paginationOptions !== undefined) {\n result = yield __await(this.apiCall(method, Object.assign(options !== undefined ? options : {}, paginationOptions)));\n yield yield __await(result);\n paginationOptions = paginationOptionsForNextPage(result, pageSize);\n }\n });\n }\n if (shouldStop === undefined) {\n return generatePages.call(this);\n }\n const pageReducer = reduce !== undefined ? reduce : noopPageReducer;\n let index = 0;\n return (async () => {\n // Unroll the first iteration of the iterator\n // This is done primarily because in order to satisfy the type system, we need a variable that is typed as A\n // (shown as accumulator before), but before the first iteration all we have is a variable typed A | undefined.\n // Unrolling the first iteration allows us to deal with undefined as a special case.\n var _a, e_1, _b, _c;\n const pageIterator = generatePages.call(this);\n const firstIteratorResult = await pageIterator.next(undefined);\n // Assumption: there will always be at least one result in a paginated API request\n // if (firstIteratorResult.done) { return; }\n const firstPage = firstIteratorResult.value;\n let accumulator = pageReducer(undefined, firstPage, index);\n index += 1;\n if (shouldStop(firstPage)) {\n return accumulator;\n }\n try {\n // Continue iteration\n for (var _d = true, pageIterator_1 = __asyncValues(pageIterator), pageIterator_1_1; pageIterator_1_1 = await pageIterator_1.next(), _a = pageIterator_1_1.done, !_a; _d = true) {\n _c = pageIterator_1_1.value;\n _d = false;\n const page = _c;\n accumulator = pageReducer(accumulator, page, index);\n if (shouldStop(page)) {\n return accumulator;\n }\n index += 1;\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (!_d && !_a && (_b = pageIterator_1.return)) await _b.call(pageIterator_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return accumulator;\n })();\n }\n /**\n * Stream markdown text into a conversation.\n *\n * @description The \"chatStream\" method starts a new chat stream in a conversation that can be appended to. After appending an entire message, the stream can be stopped with concluding arguments such as \"blocks\" for gathering feedback.\n *\n * The \"markdown_text\" content is appended to a buffer before being sent to the recipient, with a default buffer size of \"256\" characters. Setting the \"buffer_size\" value to a smaller number sends more frequent updates for the same amount of characters, but might reach rate limits more often.\n *\n * @example\n * const streamer = client.chatStream({\n * channel: \"C0123456789\",\n * thread_ts: \"1700000001.123456\",\n * recipient_team_id: \"T0123456789\",\n * recipient_user_id: \"U0123456789\",\n * });\n * await streamer.append({\n * markdown_text: \"**hello wo\",\n * });\n * await streamer.append({\n * markdown_text: \"rld!**\",\n * });\n * await streamer.stop();\n *\n * @see {@link https://docs.slack.dev/reference/methods/chat.startStream}\n * @see {@link https://docs.slack.dev/reference/methods/chat.appendStream}\n * @see {@link https://docs.slack.dev/reference/methods/chat.stopStream}\n */\n chatStream(params) {\n const { buffer_size } = params, args = __rest(params, [\"buffer_size\"]);\n const options = {\n buffer_size,\n };\n return new chat_stream_1.ChatStreamer(this, this.logger, args, options);\n }\n /**\n * This wrapper method provides an easy way to upload files using the following endpoints:\n *\n * **#1**: For each file submitted with this method, submit filenames\n * and file metadata to {@link https://docs.slack.dev/reference/methods/files.getuploadurlexternal files.getUploadURLExternal} to request a URL to\n * which to send the file data to and an id for the file\n *\n * **#2**: for each returned file `upload_url`, upload corresponding file to\n * URLs returned from step 1 (e.g. https://files.slack.com/upload/v1/...\\\")\n *\n * **#3**: Complete uploads {@link https://docs.slack.dev/reference/methods/files.completeuploadexternal files.completeUploadExternal}\n * @param options\n */\n async filesUploadV2(options) {\n this.logger.debug('files.uploadV2() start');\n // 1\n const fileUploads = await this.getAllFileUploads(options);\n const fileUploadsURLRes = await this.fetchAllUploadURLExternal(fileUploads);\n // set the upload_url and file_id returned from Slack\n fileUploadsURLRes.forEach((res, idx) => {\n fileUploads[idx].upload_url = res.upload_url;\n fileUploads[idx].file_id = res.file_id;\n });\n // 2\n await this.postFileUploadsToExternalURL(fileUploads, options);\n // 3\n const completion = await this.completeFileUploads(fileUploads);\n return { ok: true, files: completion };\n }\n /**\n * For each file submitted with this method, submits filenames\n * and file metadata to files.getUploadURLExternal to request a URL to\n * which to send the file data to and an id for the file\n * @param fileUploads\n */\n async fetchAllUploadURLExternal(fileUploads) {\n return Promise.all(fileUploads.map((upload) => {\n const options = {\n filename: upload.filename,\n length: upload.length,\n alt_text: upload.alt_text,\n snippet_type: upload.snippet_type,\n };\n if ('token' in upload) {\n options.token = upload.token;\n }\n return this.files.getUploadURLExternal(options);\n }));\n }\n /**\n * Complete uploads.\n * @param fileUploads\n * @returns\n */\n async completeFileUploads(fileUploads) {\n const toComplete = Object.values((0, file_upload_1.getAllFileUploadsToComplete)(fileUploads));\n return Promise.all(toComplete.map((job) => this.files.completeUploadExternal(job)));\n }\n /**\n * for each returned file upload URL, upload corresponding file\n * @param fileUploads\n * @returns\n */\n async postFileUploadsToExternalURL(fileUploads, options) {\n return Promise.all(fileUploads.map(async (upload) => {\n const { upload_url, file_id, filename, data } = upload;\n // either file or content will be defined\n const body = data;\n // try to post to external url\n if (upload_url) {\n const headers = {};\n if (options.token)\n headers.Authorization = `Bearer ${options.token}`;\n const uploadRes = await this.makeRequest(upload_url, {\n body,\n }, headers);\n if (uploadRes.status !== 200) {\n return Promise.reject(Error(`Failed to upload file (id:${file_id}, filename: ${filename})`));\n }\n const returnData = { ok: true, body: uploadRes.data };\n return Promise.resolve(returnData);\n }\n return Promise.reject(Error(`No upload url found for file (id: ${file_id}, filename: ${filename}`));\n }));\n }\n /**\n * @param options All file uploads arguments\n * @returns An array of file upload entries\n */\n async getAllFileUploads(options) {\n let fileUploads = [];\n // add single file data to uploads if file or content exists at the top level\n if ('file' in options || 'content' in options) {\n fileUploads.push(await (0, file_upload_1.getFileUploadJob)(options, this.logger));\n }\n // add multiple files data when file_uploads is supplied\n if ('file_uploads' in options) {\n fileUploads = fileUploads.concat(await (0, file_upload_1.getMultipleFileUploadJobs)(options, this.logger));\n }\n return fileUploads;\n }\n /**\n * Low-level function to make a single API request. handles queuing, retries, and http-level errors\n */\n async makeRequest(url, body, headers = {}) {\n // TODO: better input types - remove any\n const task = () => this.requestQueue.add(async () => {\n try {\n // biome-ignore lint/suspicious/noExplicitAny: TODO: type this\n const config = Object.assign({ headers }, this.tlsConfig);\n // admin.analytics.getFile returns a binary response\n // To be able to parse it, it should be read as an ArrayBuffer\n if (url.endsWith('admin.analytics.getFile')) {\n config.responseType = 'arraybuffer';\n }\n // apps.event.authorizations.list will reject HTTP requests that send token in the body\n // TODO: consider applying this change to all methods - though that will require thorough integration testing\n if (url.endsWith('apps.event.authorizations.list')) {\n body.token = undefined;\n }\n this.logger.debug(`http request url: ${url}`);\n this.logger.debug(`http request body: ${JSON.stringify(redact(body))}`);\n // compile all headers - some set by default under the hood by axios - that will be sent along\n let allHeaders = Object.keys(this.axios.defaults.headers).reduce((acc, cur) => {\n if (!axiosHeaderPropsToIgnore.includes(cur)) {\n acc[cur] = this.axios.defaults.headers[cur];\n }\n return acc;\n }, {});\n allHeaders = Object.assign(Object.assign(Object.assign({}, this.axios.defaults.headers.common), allHeaders), headers);\n this.logger.debug(`http request headers: ${JSON.stringify(redact(allHeaders))}`);\n const response = await this.axios.post(url, body, config);\n this.logger.debug('http response received');\n if (response.status === 429) {\n const retrySec = parseRetryHeaders(response);\n if (retrySec !== undefined) {\n this.emit(WebClientEvent.RATE_LIMITED, retrySec, { url, body });\n if (this.rejectRateLimitedCalls) {\n throw new p_retry_1.AbortError((0, errors_1.rateLimitedErrorWithDelay)(retrySec));\n }\n this.logger.info(`API Call failed due to rate limiting. Will retry in ${retrySec} seconds.`);\n // pause the request queue and then delay the rejection by the amount of time in the retry header\n this.requestQueue.pause();\n // NOTE: if there was a way to introspect the current RetryOperation and know what the next timeout\n // would be, then we could subtract that time from the following delay, knowing that it the next\n // attempt still wouldn't occur until after the rate-limit header has specified. an even better\n // solution would be to subtract the time from only the timeout of this next attempt of the\n // RetryOperation. this would result in the staying paused for the entire duration specified in the\n // header, yet this operation not having to pay the timeout cost in addition to that.\n await (0, helpers_1.default)(retrySec * 1000);\n // resume the request queue and throw a non-abort error to signal a retry\n this.requestQueue.start();\n // TODO: We may want to have more detailed info such as team_id, params except tokens, and so on.\n throw new Error(`A rate limit was exceeded (url: ${url}, retry-after: ${retrySec})`);\n }\n // TODO: turn this into some CodedError\n throw new p_retry_1.AbortError(new Error(`Retry header did not contain a valid timeout (url: ${url}, retry-after header: ${response.headers['retry-after']})`));\n }\n // Slack's Web API doesn't use meaningful status codes besides 429 and 200\n if (response.status !== 200) {\n throw (0, errors_1.httpErrorFromResponse)(response);\n }\n return response;\n }\n catch (error) {\n // To make this compatible with tsd, casting here instead of `catch (error: any)`\n // biome-ignore lint/suspicious/noExplicitAny: errors can be anything\n const e = error;\n this.logger.warn('http request failed', e.message);\n if (e.request) {\n throw (0, errors_1.requestErrorWithOriginal)(e, this.attachOriginalToWebAPIRequestError);\n }\n throw error;\n }\n });\n // biome-ignore lint/suspicious/noExplicitAny: http responses can be anything\n return (0, p_retry_1.default)(task, this.retryConfig);\n }\n /**\n * Get the complete request URL for the provided URL.\n * @param url - The resource to POST to. Either a Slack API method or absolute URL.\n */\n deriveRequestUrl(url) {\n const isAbsoluteURL = url.startsWith('https://') || url.startsWith('http://');\n if (isAbsoluteURL && this.allowAbsoluteUrls) {\n return url;\n }\n return `${this.axios.getUri() + url}`;\n }\n /**\n * Transforms options (a simple key-value object) into an acceptable value for a body. This can be either\n * a string, used when posting with a content-type of url-encoded. Or, it can be a readable stream, used\n * when the options contain a binary (a stream or a buffer) and the upload should be done with content-type\n * multipart/form-data.\n * @param config - The Axios request configuration object\n */\n serializeApiCallData(config) {\n const { data, headers } = config;\n // The following operation both flattens complex objects into a JSON-encoded strings and searches the values for\n // binary content\n let containsBinaryData = false;\n // biome-ignore lint/suspicious/noExplicitAny: HTTP request data can be anything\n const flattened = Object.entries(data).map(([key, value]) => {\n if (value === undefined || value === null) {\n return [];\n }\n let serializedValue = value;\n if (Buffer.isBuffer(value) || (0, is_stream_1.default)(value)) {\n containsBinaryData = true;\n }\n else if (typeof value !== 'string' && typeof value !== 'number' && typeof value !== 'boolean') {\n // if value is anything other than string, number, boolean, binary data, a Stream, or a Buffer, then encode it\n // as a JSON string.\n serializedValue = JSON.stringify(value);\n }\n return [key, serializedValue];\n });\n // A body with binary content should be serialized as multipart/form-data\n if (containsBinaryData) {\n this.logger.debug('Request arguments contain binary data');\n const form = flattened.reduce((frm, [key, value]) => {\n if (Buffer.isBuffer(value) || (0, is_stream_1.default)(value)) {\n const opts = {};\n opts.filename = (() => {\n // attempt to find filename from `value`. adapted from:\n // https://github.com/form-data/form-data/blob/028c21e0f93c5fefa46a7bbf1ba753e4f627ab7a/lib/form_data.js#L227-L230\n // formidable and the browser add a name property\n // fs- and request- streams have path property\n // biome-ignore lint/suspicious/noExplicitAny: form values can be anything\n const streamOrBuffer = value;\n if (typeof streamOrBuffer.name === 'string') {\n return (0, node_path_1.basename)(streamOrBuffer.name);\n }\n if (typeof streamOrBuffer.path === 'string') {\n return (0, node_path_1.basename)(streamOrBuffer.path);\n }\n return defaultFilename;\n })();\n frm.append(key, value, opts);\n }\n else if (key !== undefined && value !== undefined) {\n frm.append(key, value);\n }\n return frm;\n }, new form_data_1.default());\n if (headers) {\n // Copying FormData-generated headers into headers param\n // not reassigning to headers param since it is passed by reference and behaves as an inout param\n for (const [header, value] of Object.entries(form.getHeaders())) {\n headers[header] = value;\n }\n }\n config.data = form;\n config.headers = headers;\n return config;\n }\n // Otherwise, a simple key-value object is returned\n if (headers)\n headers['Content-Type'] = 'application/x-www-form-urlencoded';\n // biome-ignore lint/suspicious/noExplicitAny: form values can be anything\n const initialValue = {};\n config.data = (0, node_querystring_1.stringify)(flattened.reduce((accumulator, [key, value]) => {\n if (key !== undefined && value !== undefined) {\n accumulator[key] = value;\n }\n return accumulator;\n }, initialValue));\n config.headers = headers;\n return config;\n }\n /**\n * Processes an HTTP response into a WebAPICallResult by performing JSON parsing on the body and merging relevant\n * HTTP headers into the object.\n * @param response - an http response\n */\n async buildResult(response) {\n let { data } = response;\n const isGzipResponse = response.headers['content-type'] === 'application/gzip';\n // Check for GZIP response - if so, it is a successful response from admin.analytics.getFile\n if (isGzipResponse) {\n // admin.analytics.getFile will return a Buffer that can be unzipped\n try {\n const unzippedData = await new Promise((resolve, reject) => {\n node_zlib_1.default.unzip(data, (err, buf) => {\n if (err) {\n return reject(err);\n }\n return resolve(buf.toString().split('\\n'));\n });\n })\n .then((res) => res)\n .catch((err) => {\n throw err;\n });\n const fileData = [];\n if (Array.isArray(unzippedData)) {\n for (const dataset of unzippedData) {\n if (dataset && dataset.length > 0) {\n fileData.push(JSON.parse(dataset));\n }\n }\n }\n data = { file_data: fileData };\n }\n catch (err) {\n data = { ok: false, error: err };\n }\n }\n else if (!isGzipResponse && response.request.path === '/api/admin.analytics.getFile') {\n // if it isn't a Gzip response but is from the admin.analytics.getFile request,\n // decode the ArrayBuffer to JSON read the error\n data = JSON.parse(new node_util_1.TextDecoder().decode(data));\n }\n if (typeof data === 'string') {\n // response.data can be a string, not an object for some reason\n try {\n data = JSON.parse(data);\n }\n catch (_) {\n // failed to parse the string value as JSON data\n data = { ok: false, error: data };\n }\n }\n if (data.response_metadata === undefined) {\n data.response_metadata = {};\n }\n // add scopes metadata from headers\n if (response.headers['x-oauth-scopes'] !== undefined) {\n data.response_metadata.scopes = response.headers['x-oauth-scopes'].trim().split(/\\s*,\\s*/);\n }\n if (response.headers['x-accepted-oauth-scopes'] !== undefined) {\n data.response_metadata.acceptedScopes = response.headers['x-accepted-oauth-scopes']\n .trim()\n .split(/\\s*,\\s*/);\n }\n // add retry metadata from headers\n const retrySec = parseRetryHeaders(response);\n if (retrySec !== undefined) {\n data.response_metadata.retryAfter = retrySec;\n }\n return data;\n }\n}\nexports.WebClient = WebClient;\n/**\n * The name used to prefix all logging generated from this object\n */\nWebClient.loggerName = 'WebClient';\nexports.default = WebClient;\n/**\n * Determines an appropriate set of cursor pagination options for the next request to a paginated API method.\n * @param previousResult - the result of the last request, where the next cursor might be found.\n * @param pageSize - the maximum number of additional items to fetch in the next request.\n */\nfunction paginationOptionsForNextPage(previousResult, pageSize) {\n if (previousResult !== undefined &&\n previousResult.response_metadata !== undefined &&\n previousResult.response_metadata.next_cursor !== undefined &&\n previousResult.response_metadata.next_cursor !== '') {\n return {\n limit: pageSize,\n cursor: previousResult.response_metadata.next_cursor,\n };\n }\n return undefined;\n}\n/**\n * Extract the amount of time (in seconds) the platform has recommended this client wait before sending another request\n * from a rate-limited HTTP response (statusCode = 429).\n */\nfunction parseRetryHeaders(response) {\n if (response.headers['retry-after'] !== undefined) {\n const retryAfter = Number.parseInt(response.headers['retry-after'], 10);\n if (!Number.isNaN(retryAfter)) {\n return retryAfter;\n }\n }\n return undefined;\n}\n/**\n * Log a warning when using a deprecated method\n * @param method api method being called\n * @param logger instance of web clients logger\n */\nfunction warnDeprecations(method, logger) {\n const deprecatedMethods = ['workflows.stepCompleted', 'workflows.stepFailed', 'workflows.updateStep'];\n const isDeprecated = deprecatedMethods.some((depMethod) => {\n const re = new RegExp(`^${depMethod}`);\n return re.test(method);\n });\n if (isDeprecated) {\n logger.warn(`${method} is deprecated. Please check on https://docs.slack.dev/reference/methods for an alternative.`);\n }\n}\n/**\n * Log a warning when using chat.postMessage without text argument or attachments with fallback argument\n * @param method api method being called\n * @param logger instance of we clients logger\n * @param options arguments for the Web API method\n */\nfunction warnIfFallbackIsMissing(method, logger, options) {\n const targetMethods = ['chat.postEphemeral', 'chat.postMessage', 'chat.scheduleMessage'];\n const isTargetMethod = targetMethods.includes(method);\n const hasAttachments = (args) => Array.isArray(args.attachments) && args.attachments.length;\n const missingAttachmentFallbackDetected = (args) => Array.isArray(args.attachments) &&\n args.attachments.some((attachment) => !attachment.fallback || attachment.fallback.trim() === '');\n const isEmptyText = (args) => (args.text === undefined || args.text === null || args.text === '') &&\n (args.markdown_text === undefined || args.markdown === null || args.markdown_text === '');\n const buildMissingTextWarning = () => `The top-level \\`text\\` argument is missing in the request payload for a ${method} call - It's a best practice to always provide a \\`text\\` argument when posting a message. The \\`text\\` is used in places where the content cannot be rendered such as: system push notifications, assistive technology such as screen readers, etc.`;\n const buildMissingFallbackWarning = () => `Additionally, the attachment-level \\`fallback\\` argument is missing in the request payload for a ${method} call - To avoid this warning, it is recommended to always provide a top-level \\`text\\` argument when posting a message. Alternatively, you can provide an attachment-level \\`fallback\\` argument, though this is now considered a legacy field (see https://docs.slack.dev/legacy/legacy-messaging/legacy-secondary-message-attachments for more details).`;\n if (isTargetMethod && typeof options === 'object') {\n if (hasAttachments(options)) {\n if (missingAttachmentFallbackDetected(options) && isEmptyText(options)) {\n logger.warn(buildMissingTextWarning());\n logger.warn(buildMissingFallbackWarning());\n }\n }\n else if (isEmptyText(options)) {\n logger.warn(buildMissingTextWarning());\n }\n }\n}\n/**\n * Log a warning when thread_ts is not a string\n * @param method api method being called\n * @param logger instance of web clients logger\n * @param options arguments for the Web API method\n */\nfunction warnIfThreadTsIsNotString(method, logger, options) {\n const targetMethods = ['chat.postEphemeral', 'chat.postMessage', 'chat.scheduleMessage', 'files.upload'];\n const isTargetMethod = targetMethods.includes(method);\n if (isTargetMethod && (options === null || options === void 0 ? void 0 : options.thread_ts) !== undefined && typeof (options === null || options === void 0 ? void 0 : options.thread_ts) !== 'string') {\n logger.warn(buildThreadTsWarningMessage(method));\n }\n}\nfunction buildThreadTsWarningMessage(method) {\n return `The given thread_ts value in the request payload for a ${method} call is a float value. We highly recommend using a string value instead.`;\n}\n/**\n * Takes an object and redacts specific items\n * @param body\n * @returns\n */\nfunction redact(body) {\n // biome-ignore lint/suspicious/noExplicitAny: objects can be anything\n const flattened = Object.entries(body).map(([key, value]) => {\n // no value provided\n if (value === undefined || value === null) {\n return [];\n }\n let serializedValue = value;\n // redact possible tokens\n if (key.match(/.*token.*/) !== null || key.match(/[Aa]uthorization/)) {\n serializedValue = '[[REDACTED]]';\n }\n // when value is buffer or stream we can avoid logging it\n if (Buffer.isBuffer(value) || (0, is_stream_1.default)(value)) {\n serializedValue = '[[BINARY VALUE OMITTED]]';\n }\n else if (typeof value !== 'string' && typeof value !== 'number' && typeof value !== 'boolean') {\n serializedValue = JSON.stringify(value);\n }\n return [key, serializedValue];\n });\n // return as object\n const initialValue = {};\n return flattened.reduce((accumulator, [key, value]) => {\n if (key !== undefined && value !== undefined) {\n accumulator[key] = value;\n }\n return accumulator;\n }, initialValue);\n}\n//# sourceMappingURL=WebClient.js.map","\"use strict\";\n/// <reference lib=\"es2017\" />\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.WebClientEvent = exports.WebClient = exports.ChatStreamer = exports.retryPolicies = exports.LogLevel = exports.addAppMetadata = exports.ErrorCode = void 0;\nvar errors_1 = require(\"./errors\");\nObject.defineProperty(exports, \"ErrorCode\", { enumerable: true, get: function () { return errors_1.ErrorCode; } });\nvar instrument_1 = require(\"./instrument\");\nObject.defineProperty(exports, \"addAppMetadata\", { enumerable: true, get: function () { return instrument_1.addAppMetadata; } });\nvar logger_1 = require(\"./logger\");\nObject.defineProperty(exports, \"LogLevel\", { enumerable: true, get: function () { return logger_1.LogLevel; } });\nvar retry_policies_1 = require(\"./retry-policies\");\nObject.defineProperty(exports, \"retryPolicies\", { enumerable: true, get: function () { return __importDefault(retry_policies_1).default; } });\n__exportStar(require(\"./types/request/index\"), exports);\n__exportStar(require(\"./types/response/index\"), exports);\nvar chat_stream_1 = require(\"./chat-stream\");\nObject.defineProperty(exports, \"ChatStreamer\", { enumerable: true, get: function () { return chat_stream_1.ChatStreamer; } });\nvar WebClient_1 = require(\"./WebClient\");\nObject.defineProperty(exports, \"WebClient\", { enumerable: true, get: function () { return WebClient_1.WebClient; } });\nObject.defineProperty(exports, \"WebClientEvent\", { enumerable: true, get: function () { return WebClient_1.WebClientEvent; } });\n// methods must be exported after WebClient\n__exportStar(require(\"./methods\"), exports);\n//# sourceMappingURL=index.js.map","/**\n * Slack Adapter\n *\n * Implements MessageClient interface for Slack using @slack/web-api.\n */\n\nimport { WebClient } from '@slack/web-api';\n\nimport { BaseMessageClient } from '../shared/base.js';\nimport {\n AuthenticationError,\n ChannelNotFoundError,\n MessageNotFoundError,\n RateLimitError,\n SendError,\n} from '../shared/errors.js';\nimport type {\n Channel,\n FetchOptions,\n Message,\n MessageAdapterType,\n MessageClientCapabilities,\n MessageSender,\n SendOptions,\n SendResult,\n SlackOptions,\n} from '../shared/types.js';\n\nexport class SlackAdapter extends BaseMessageClient {\n private client: WebClient;\n private botToken: string;\n\n constructor(options: SlackOptions) {\n super({ type: 'slack', debug: options.debug, logger: options.logger });\n this.botToken = options.botToken;\n this.client = new WebClient(options.botToken);\n }\n\n async send(message: Message, options?: SendOptions): Promise<SendResult> {\n this.validateMessage(message);\n\n const channelId = message.channelId || message.to?.[0]?.id;\n if (!channelId) {\n throw new SendError(\n 'Slack message requires channelId or to[0].id',\n 'slack',\n );\n }\n\n try {\n const result = await this.client.chat.postMessage({\n channel: channelId,\n text: message.content,\n thread_ts: options?.replyTo,\n mrkdwn: true,\n });\n\n return {\n success: result.ok ?? false,\n messageId: result.ts,\n timestamp: new Date(),\n providerResponse: result as unknown as Record<string, unknown>,\n };\n } catch (error) {\n throw this.handleSlackError(error);\n }\n }\n\n async fetch(options?: FetchOptions): Promise<Message[]> {\n const channelId = options?.channelId;\n if (!channelId) {\n throw new ChannelNotFoundError('(none)', 'slack');\n }\n\n try {\n const result = await this.client.conversations.history({\n channel: channelId,\n limit: options?.limit ?? 20,\n oldest: options?.since\n ? String(options.since.getTime() / 1000)\n : undefined,\n latest: options?.before\n ? String(options.before.getTime() / 1000)\n : undefined,\n });\n\n return (result.messages ?? []).map((msg) =>\n this.mapSlackMessage(msg, channelId),\n );\n } catch (error) {\n throw this.handleSlackError(error);\n }\n }\n\n async getMessage(messageId: string): Promise<Message> {\n // Slack getMessage requires channel + ts. Use conversations.history with\n // latest=ts, inclusive=true, limit=1. We need the channel from the messageId\n // which should be in format \"channel:ts\"\n const [channelId, ts] = messageId.includes(':')\n ? messageId.split(':')\n : ['', messageId];\n\n if (!channelId) {\n throw new MessageNotFoundError(messageId, 'slack');\n }\n\n try {\n const result = await this.client.conversations.history({\n channel: channelId,\n latest: ts,\n inclusive: true,\n limit: 1,\n });\n\n const msg = result.messages?.[0];\n if (!msg) {\n throw new MessageNotFoundError(messageId, 'slack');\n }\n\n return this.mapSlackMessage(msg, channelId);\n } catch (error) {\n if (error instanceof MessageNotFoundError) throw error;\n throw this.handleSlackError(error);\n }\n }\n\n async getThread(threadId: string): Promise<Message[]> {\n const [channelId, ts] = threadId.includes(':')\n ? threadId.split(':')\n : ['', threadId];\n\n if (!channelId) {\n throw new MessageNotFoundError(threadId, 'slack');\n }\n\n try {\n const result = await this.client.conversations.replies({\n channel: channelId,\n ts,\n });\n\n return (result.messages ?? []).map((msg) =>\n this.mapSlackMessage(msg, channelId),\n );\n } catch (error) {\n throw this.handleSlackError(error);\n }\n }\n\n async listChannels(): Promise<Channel[]> {\n try {\n const result = await this.client.conversations.list({\n types: 'public_channel,private_channel,im,mpim',\n limit: 200,\n });\n\n return (result.channels ?? []).map((ch) => ({\n id: ch.id ?? '',\n name: ch.name ?? ch.id ?? '',\n type: ch.is_im\n ? ('dm' as const)\n : ch.is_mpim\n ? ('group' as const)\n : ('channel' as const),\n memberCount: ch.num_members,\n }));\n } catch (error) {\n throw this.handleSlackError(error);\n }\n }\n\n async connect(): Promise<void> {\n try {\n await this.client.auth.test();\n this.connected = true;\n this.debug('Slack adapter connected');\n } catch (error) {\n throw new AuthenticationError(\n 'Failed to authenticate with Slack',\n 'slack',\n error,\n );\n }\n }\n\n async disconnect(): Promise<void> {\n // WebClient is stateless — no persistent connection to close\n this.connected = false;\n this.debug('Slack adapter disconnected');\n }\n\n getCapabilities(): MessageClientCapabilities {\n return {\n send: true,\n receive: true,\n threads: true,\n channels: true,\n reactions: true,\n attachments: true,\n richText: true,\n };\n }\n\n getAdapter(): MessageAdapterType {\n return 'slack';\n }\n\n // ========================================================================\n // Helpers\n // ========================================================================\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private mapSlackMessage(msg: any, channelId: string): Message {\n const user = msg.user as string | undefined;\n const text = msg.text as string | undefined;\n const ts = msg.ts as string | undefined;\n const threadTs = msg.thread_ts as string | undefined;\n\n const from: MessageSender = {\n id: user,\n name: user,\n };\n\n return {\n id: ts ? `${channelId}:${ts}` : undefined,\n channelId,\n threadId: threadTs ? `${channelId}:${threadTs}` : undefined,\n from,\n content: text ?? '',\n timestamp: ts ? new Date(Number.parseFloat(ts) * 1000) : undefined,\n metadata: {\n slackTs: ts,\n slackThreadTs: threadTs,\n },\n };\n }\n\n private handleSlackError(error: unknown): never {\n const err = error as Record<string, unknown>;\n const code = err?.code as string | undefined;\n\n if (code === 'slack_webapi_platform_error') {\n const data = err.data as Record<string, unknown> | undefined;\n const slackError = data?.error as string | undefined;\n\n if (slackError === 'channel_not_found') {\n throw new ChannelNotFoundError('(unknown)', 'slack');\n }\n if (\n slackError === 'not_authed' ||\n slackError === 'invalid_auth' ||\n slackError === 'token_revoked'\n ) {\n throw new AuthenticationError(\n `Slack auth error: ${slackError}`,\n 'slack',\n error,\n );\n }\n if (slackError === 'ratelimited') {\n const retryAfter = data?.headers as Record<string, string> | undefined;\n throw new RateLimitError(\n 'slack',\n retryAfter?.['retry-after']\n ? Number.parseInt(retryAfter['retry-after'], 10)\n : undefined,\n );\n }\n }\n\n throw this.mapError(error);\n }\n}\n","/**\n * Twitter Adapter\n *\n * Implements MessageClient interface for Twitter/X using API v2.\n * Uses OAuth 1.0a signing via node:crypto (no external dependency).\n */\n\nimport { createHmac } from 'node:crypto';\n\nimport { BaseMessageClient } from '../shared/base.js';\nimport {\n AuthenticationError,\n MessageNotFoundError,\n RateLimitError,\n SendError,\n} from '../shared/errors.js';\nimport type {\n FetchOptions,\n Message,\n MessageAdapterType,\n MessageClientCapabilities,\n SendOptions,\n SendResult,\n TwitterOptions,\n} from '../shared/types.js';\n\nconst X_API_URL = 'https://api.twitter.com/2';\n\nexport class TwitterAdapter extends BaseMessageClient {\n private apiKey: string;\n private apiSecret: string;\n private accessToken: string;\n private accessSecret: string;\n private userId?: string;\n\n constructor(options: TwitterOptions) {\n super({ type: 'twitter', debug: options.debug, logger: options.logger });\n this.apiKey = options.apiKey;\n this.apiSecret = options.apiSecret;\n this.accessToken = options.accessToken;\n this.accessSecret = options.accessSecret;\n }\n\n async send(message: Message, options?: SendOptions): Promise<SendResult> {\n this.validateMessage(message);\n\n const body: Record<string, unknown> = {\n text: message.content,\n };\n\n if (options?.replyTo) {\n body.reply = { in_reply_to_tweet_id: options.replyTo };\n }\n\n try {\n const response = await this.makeRequest(\n 'POST',\n `${X_API_URL}/tweets`,\n body,\n );\n\n if (!response.ok) {\n await this.handleApiError(response);\n }\n\n const data = (await response.json()) as {\n data: { id: string; text: string };\n };\n\n return {\n success: true,\n messageId: data.data.id,\n timestamp: new Date(),\n providerResponse: data as unknown as Record<string, unknown>,\n };\n } catch (error) {\n if (\n error instanceof AuthenticationError ||\n error instanceof RateLimitError ||\n error instanceof SendError\n ) {\n throw error;\n }\n throw new SendError(\n `Failed to send tweet: ${error instanceof Error ? error.message : String(error)}`,\n 'twitter',\n error,\n );\n }\n }\n\n async fetch(options?: FetchOptions): Promise<Message[]> {\n if (!this.userId) {\n await this.resolveUserId();\n }\n\n const params = new URLSearchParams();\n params.set(\n 'tweet.fields',\n 'created_at,conversation_id,in_reply_to_user_id',\n );\n if (options?.limit)\n params.set('max_results', String(Math.min(options.limit, 100)));\n if (options?.since) params.set('start_time', options.since.toISOString());\n if (options?.before) params.set('end_time', options.before.toISOString());\n\n const url = `${X_API_URL}/users/${this.userId}/tweets?${params.toString()}`;\n const response = await this.makeRequest('GET', url);\n\n if (!response.ok) {\n await this.handleApiError(response);\n }\n\n const data = (await response.json()) as {\n data?: Array<{\n id: string;\n text: string;\n created_at?: string;\n conversation_id?: string;\n }>;\n };\n\n return (data.data ?? []).map((tweet) => this.mapTweet(tweet));\n }\n\n async getMessage(messageId: string): Promise<Message> {\n const url = `${X_API_URL}/tweets/${messageId}?tweet.fields=created_at,conversation_id,in_reply_to_user_id,author_id`;\n const response = await this.makeRequest('GET', url);\n\n if (!response.ok) {\n if (response.status === 404) {\n throw new MessageNotFoundError(messageId, 'twitter');\n }\n await this.handleApiError(response);\n }\n\n const data = (await response.json()) as {\n data: {\n id: string;\n text: string;\n created_at?: string;\n conversation_id?: string;\n author_id?: string;\n };\n };\n\n return this.mapTweet(data.data);\n }\n\n async getThread(threadId: string): Promise<Message[]> {\n // Twitter threads are tracked via conversation_id\n const params = new URLSearchParams();\n params.set('query', `conversation_id:${threadId}`);\n params.set(\n 'tweet.fields',\n 'created_at,conversation_id,in_reply_to_user_id,author_id',\n );\n params.set('max_results', '100');\n\n const url = `${X_API_URL}/tweets/search/recent?${params.toString()}`;\n const response = await this.makeRequest('GET', url);\n\n if (!response.ok) {\n await this.handleApiError(response);\n }\n\n const data = (await response.json()) as {\n data?: Array<{\n id: string;\n text: string;\n created_at?: string;\n conversation_id?: string;\n author_id?: string;\n }>;\n };\n\n return (data.data ?? []).map((tweet) => this.mapTweet(tweet));\n }\n\n async connect(): Promise<void> {\n try {\n await this.resolveUserId();\n this.connected = true;\n this.debug('Twitter adapter connected');\n } catch (error) {\n throw new AuthenticationError(\n 'Failed to authenticate with Twitter',\n 'twitter',\n error,\n );\n }\n }\n\n async disconnect(): Promise<void> {\n this.connected = false;\n this.debug('Twitter adapter disconnected');\n }\n\n getCapabilities(): MessageClientCapabilities {\n return {\n send: true,\n receive: true,\n threads: true,\n channels: false,\n reactions: false,\n attachments: false,\n richText: false,\n };\n }\n\n getAdapter(): MessageAdapterType {\n return 'twitter';\n }\n\n // ========================================================================\n // OAuth 1.0a\n // ========================================================================\n\n private generateOAuthSignature(\n method: string,\n url: string,\n params: Record<string, string>,\n ): string {\n const oauthParams: Record<string, string> = {\n oauth_consumer_key: this.apiKey,\n oauth_nonce: crypto.randomUUID().replace(/-/g, ''),\n oauth_signature_method: 'HMAC-SHA1',\n oauth_timestamp: Math.floor(Date.now() / 1000).toString(),\n oauth_token: this.accessToken,\n oauth_version: '1.0',\n ...params,\n };\n\n const sortedParams = Object.keys(oauthParams)\n .sort()\n .map(\n (k) => `${this.percentEncode(k)}=${this.percentEncode(oauthParams[k])}`,\n )\n .join('&');\n\n const signatureBase = [\n method.toUpperCase(),\n this.percentEncode(url),\n this.percentEncode(sortedParams),\n ].join('&');\n\n const signingKey = `${this.percentEncode(this.apiSecret)}&${this.percentEncode(this.accessSecret)}`;\n const signature = createHmac('sha1', signingKey)\n .update(signatureBase)\n .digest('base64');\n\n const authParams: Record<string, string> = {\n ...oauthParams,\n oauth_signature: signature,\n };\n\n return (\n 'OAuth ' +\n Object.keys(authParams)\n .filter((k) => k.startsWith('oauth_'))\n .sort()\n .map(\n (k) =>\n `${this.percentEncode(k)}=\"${this.percentEncode(authParams[k])}\"`,\n )\n .join(', ')\n );\n }\n\n private percentEncode(str: string): string {\n return encodeURIComponent(str).replace(\n /[!'()*]/g,\n (c) => `%${c.charCodeAt(0).toString(16).toUpperCase()}`,\n );\n }\n\n // ========================================================================\n // HTTP helpers\n // ========================================================================\n\n private async makeRequest(\n method: string,\n url: string,\n body?: unknown,\n ): Promise<Response> {\n const urlObj = new URL(url);\n const baseUrl = `${urlObj.origin}${urlObj.pathname}`;\n const queryParams: Record<string, string> = {};\n urlObj.searchParams.forEach((value, key) => {\n queryParams[key] = value;\n });\n\n const authHeader = this.generateOAuthSignature(\n method,\n baseUrl,\n queryParams,\n );\n\n const options: RequestInit = {\n method,\n headers: {\n Authorization: authHeader,\n 'Content-Type': 'application/json',\n },\n };\n\n if (body) {\n options.body = JSON.stringify(body);\n }\n\n return fetch(url, options);\n }\n\n private async resolveUserId(): Promise<void> {\n if (this.userId) return;\n\n const response = await this.makeRequest('GET', `${X_API_URL}/users/me`);\n if (!response.ok) {\n throw new AuthenticationError(\n 'Failed to resolve Twitter user',\n 'twitter',\n );\n }\n\n const data = (await response.json()) as { data: { id: string } };\n this.userId = data.data.id;\n }\n\n // ========================================================================\n // Mapping helpers\n // ========================================================================\n\n private mapTweet(tweet: {\n id: string;\n text: string;\n created_at?: string;\n conversation_id?: string;\n author_id?: string;\n }): Message {\n return {\n id: tweet.id,\n threadId: tweet.conversation_id,\n from: { id: tweet.author_id },\n content: tweet.text,\n timestamp: tweet.created_at ? new Date(tweet.created_at) : undefined,\n metadata: {\n tweetId: tweet.id,\n conversationId: tweet.conversation_id,\n },\n };\n }\n\n // ========================================================================\n // Error handling\n // ========================================================================\n\n private async handleApiError(response: Response): Promise<never> {\n const text = await response.text();\n let error: Record<string, unknown>;\n try {\n error = JSON.parse(text) as Record<string, unknown>;\n } catch {\n error = { detail: text };\n }\n\n if (response.status === 401) {\n throw new AuthenticationError(\n (error.detail as string) ?? 'Unauthorized',\n 'twitter',\n );\n }\n\n if (response.status === 429) {\n const resetTime = response.headers.get('x-rate-limit-reset');\n const retryAfter = resetTime\n ? Number.parseInt(resetTime, 10) - Math.floor(Date.now() / 1000)\n : undefined;\n throw new RateLimitError('twitter', retryAfter);\n }\n\n throw new SendError(\n (error.detail as string) ??\n (error.title as string) ??\n 'API request failed',\n 'twitter',\n );\n }\n}\n","/**\n * Factory function and type guards for @happyvertical/messages package\n */\n\nimport type {\n EmailBridgeOptions,\n GetMessageClientOptions,\n MessageClient,\n SlackOptions,\n TwitterOptions,\n} from './types.js';\n\n// ============================================================================\n// Type Guards\n// ============================================================================\n\nexport function isSlackOptions(\n opts: GetMessageClientOptions,\n): opts is SlackOptions {\n return opts.type === 'slack';\n}\n\nexport function isTwitterOptions(\n opts: GetMessageClientOptions,\n): opts is TwitterOptions {\n return opts.type === 'twitter';\n}\n\nexport function isEmailBridgeOptions(\n opts: GetMessageClientOptions,\n): opts is EmailBridgeOptions {\n return opts.type === 'email';\n}\n\n// ============================================================================\n// Factory Function\n// ============================================================================\n\n/**\n * Create a message client adapter instance\n *\n * @param options - Configuration options for the message client adapter\n * @returns Promise resolving to a MessageClient instance\n *\n * @example\n * ```typescript\n * // Slack adapter\n * const slack = await getMessageClient({\n * type: 'slack',\n * botToken: 'xoxb-...',\n * });\n *\n * // Twitter adapter\n * const twitter = await getMessageClient({\n * type: 'twitter',\n * apiKey: 'key',\n * apiSecret: 'secret',\n * accessToken: 'token',\n * accessSecret: 'secret',\n * });\n *\n * // Email bridge adapter\n * const email = await getMessageClient({\n * type: 'email',\n * emailOptions: { type: 'smtp', host: 'smtp.gmail.com', port: 587, auth: { user: 'x', pass: 'y' } },\n * });\n * ```\n */\nexport async function getMessageClient(\n options: GetMessageClientOptions,\n): Promise<MessageClient> {\n if (isSlackOptions(options)) {\n const { SlackAdapter } = await import('../adapters/slack.js');\n return new SlackAdapter(options);\n }\n\n if (isTwitterOptions(options)) {\n const { TwitterAdapter } = await import('../adapters/twitter.js');\n return new TwitterAdapter(options);\n }\n\n if (isEmailBridgeOptions(options)) {\n const { EmailBridgeAdapter } = await import('../adapters/email-bridge.js');\n return new EmailBridgeAdapter(options);\n }\n\n throw new Error(\n `Unknown message client type: ${(options as { type: string }).type}`,\n );\n}\n"],"names":["message","email","ErrorCode","response","this","o","name","version","dist","LogLevel","exports","require$$0","logger","events","pFinally","pTimeout","pTimeoutModule","lowerBound_1","lowerBound","require$$1","require$$2","self","methods","original","retry","pRetry","error","pRetryModule","blocks","file","chunk","messageMetadata","require$$3","require$$4","require$$5","require$$6","require$$7","require$$8","require$$9","require$$10","require$$11","require$$12","require$$13","require$$14","require$$15","require$$16","require$$17","require$$18","require$$19","require$$20","require$$21","require$$22","require$$23","require$$24","require$$25","EntityType","CustomFieldType","v","WebClient_1","WebClientEvent","WebClient","token","user","SlackAdapter","TwitterAdapter","EmailBridgeAdapter"],"mappings":"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","x_google_ignoreList":[3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67]}
|