diff --git a/biome.json b/biome.json index dd06abddb..055e48274 100644 --- a/biome.json +++ b/biome.json @@ -1,12 +1,12 @@ { "$schema": "./node_modules/@biomejs/biome/configuration_schema.json", "files": { - "ignore": ["examples/**/dist"] + "includes": ["**", "!**/examples/**/dist"] }, "formatter": { "enabled": true, "formatWithErrors": false, - "ignore": [], + "includes": ["**"], "attributePosition": "auto", "indentStyle": "space", "indentWidth": 2, @@ -24,9 +24,26 @@ "recommended": true } }, - "organizeImports": { - "enabled": true + "assist": { + "actions": { + "source": { + "organizeImports": "on" + } + } }, + "overrides": [ + { + "includes": ["examples/**"], + "linter": { + "rules": { + "correctness": { + "noUnusedFunctionParameters": "off", + "noUnusedVariables": "off" + } + } + } + } + ], "vcs": { "enabled": true, "clientKind": "git", diff --git a/examples/custom-receiver/src/FastifyReceiver.ts b/examples/custom-receiver/src/FastifyReceiver.ts index 4ae2e647e..9ccc0102d 100644 --- a/examples/custom-receiver/src/FastifyReceiver.ts +++ b/examples/custom-receiver/src/FastifyReceiver.ts @@ -4,6 +4,7 @@ import { type BufferedIncomingMessage, type CodedError, HTTPResponseAck, + HTTPModuleFunctions as httpFunc, type InstallProviderOptions, type InstallURLOptions, type Receiver, @@ -11,9 +12,8 @@ import { ReceiverInconsistentStateError, type ReceiverProcessEventErrorHandlerArgs, type ReceiverUnhandledRequestHandlerArgs, - HTTPModuleFunctions as httpFunc, } from '@slack/bolt'; -import { ConsoleLogger, type LogLevel, type Logger } from '@slack/logger'; +import { ConsoleLogger, type Logger, type LogLevel } from '@slack/logger'; import { type CallbackOptions, type InstallPathOptions, InstallProvider } from '@slack/oauth'; import Fastify, { type FastifyInstance } from 'fastify'; @@ -163,12 +163,7 @@ export default class FastifyReceiver implements Receiver { public init(app: App): void { this.app = app; - if ( - this.installer && - this.installerOptions && - this.installerOptions.installPath && - this.installerOptions.redirectUriPath - ) { + if (this.installer && this.installerOptions?.installPath && this.installerOptions.redirectUriPath) { this.fastify.get(this.installerOptions.installPath, async (req, res) => { await this.installer?.handleInstallPath(req.raw, res.raw, this.installerOptions?.installPathOptions); }); diff --git a/examples/custom-receiver/src/KoaReceiver.ts b/examples/custom-receiver/src/KoaReceiver.ts index 5dfeee8ef..faccd0ff2 100644 --- a/examples/custom-receiver/src/KoaReceiver.ts +++ b/examples/custom-receiver/src/KoaReceiver.ts @@ -1,10 +1,11 @@ -import { type Server, createServer } from 'node:http'; +import { createServer, type Server } from 'node:http'; import Router from '@koa/router'; import { type App, type BufferedIncomingMessage, type CodedError, HTTPResponseAck, + HTTPModuleFunctions as httpFunc, type InstallProviderOptions, type InstallURLOptions, type Receiver, @@ -12,9 +13,8 @@ import { ReceiverInconsistentStateError, type ReceiverProcessEventErrorHandlerArgs, type ReceiverUnhandledRequestHandlerArgs, - HTTPModuleFunctions as httpFunc, } from '@slack/bolt'; -import { ConsoleLogger, type LogLevel, type Logger } from '@slack/logger'; +import { ConsoleLogger, type Logger, type LogLevel } from '@slack/logger'; import { type CallbackOptions, type InstallPathOptions, InstallProvider } from '@slack/oauth'; import Koa from 'koa'; @@ -158,12 +158,7 @@ export default class KoaReceiver implements Receiver { public init(app: App): void { this.app = app; - if ( - this.installer && - this.installerOptions && - this.installerOptions.installPath && - this.installerOptions.redirectUriPath - ) { + if (this.installer && this.installerOptions?.installPath && this.installerOptions.redirectUriPath) { this.router.get(this.installerOptions.installPath, async (ctx) => { await this.installer?.handleInstallPath(ctx.req, ctx.res, this.installerOptions?.installPathOptions); }); diff --git a/package-lock.json b/package-lock.json index 07fb90d04..9ac845ecd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,7 +21,7 @@ "tsscmp": "^1.0.6" }, "devDependencies": { - "@biomejs/biome": "^1.9.0", + "@biomejs/biome": "^2.4.15", "@changesets/cli": "^2.29.8", "@tsconfig/node18": "^18.2.4", "@types/chai": "^4.1.7", @@ -200,9 +200,10 @@ } }, "node_modules/@biomejs/biome": { - "version": "1.9.4", + "version": "2.4.15", + "resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-2.4.15.tgz", + "integrity": "sha512-j5VH3a/h/HXTKBM50MDMxRCzkeLv9S2XJcW2WgnZT1+xyisi+0bISrXR82gCX+8S9lvK0skEvHJRN+3Ktr2hlw==", "dev": true, - "hasInstallScript": true, "license": "MIT OR Apache-2.0", "bin": { "biome": "bin/biome" @@ -215,18 +216,20 @@ "url": "https://opencollective.com/biome" }, "optionalDependencies": { - "@biomejs/cli-darwin-arm64": "1.9.4", - "@biomejs/cli-darwin-x64": "1.9.4", - "@biomejs/cli-linux-arm64": "1.9.4", - "@biomejs/cli-linux-arm64-musl": "1.9.4", - "@biomejs/cli-linux-x64": "1.9.4", - "@biomejs/cli-linux-x64-musl": "1.9.4", - "@biomejs/cli-win32-arm64": "1.9.4", - "@biomejs/cli-win32-x64": "1.9.4" + "@biomejs/cli-darwin-arm64": "2.4.15", + "@biomejs/cli-darwin-x64": "2.4.15", + "@biomejs/cli-linux-arm64": "2.4.15", + "@biomejs/cli-linux-arm64-musl": "2.4.15", + "@biomejs/cli-linux-x64": "2.4.15", + "@biomejs/cli-linux-x64-musl": "2.4.15", + "@biomejs/cli-win32-arm64": "2.4.15", + "@biomejs/cli-win32-x64": "2.4.15" } }, "node_modules/@biomejs/cli-darwin-arm64": { - "version": "1.9.4", + "version": "2.4.15", + "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-2.4.15.tgz", + "integrity": "sha512-rF3PPqLq1yoST79zaQbDjVJwsuIeci/O+9bgNmC5QpgOqz6aqYuzA4abyAGx+mgyiDXn4A049xAN8gijbuR1Qg==", "cpu": [ "arm64" ], @@ -241,9 +244,9 @@ } }, "node_modules/@biomejs/cli-darwin-x64": { - "version": "1.9.4", - "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-1.9.4.tgz", - "integrity": "sha512-ngYBh/+bEedqkSevPVhLP4QfVPCpb+4BBe2p7Xs32dBgs7rh9nY2AIYUL6BgLw1JVXV8GlpKmb/hNiuIxfPfZg==", + "version": "2.4.15", + "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-2.4.15.tgz", + "integrity": "sha512-/5KHXYMfSJs1fNXiX30xFtI8JcCFV6zaVVLxOa0M2sfqBKHkpQhRTv94yxQWxeTY2lzo2OuTlNvPC+hDQt2wcQ==", "cpu": [ "x64" ], @@ -258,9 +261,9 @@ } }, "node_modules/@biomejs/cli-linux-arm64": { - "version": "1.9.4", - "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-1.9.4.tgz", - "integrity": "sha512-fJIW0+LYujdjUgJJuwesP4EjIBl/N/TcOX3IvIHJQNsAqvV2CHIogsmA94BPG6jZATS4Hi+xv4SkBBQSt1N4/g==", + "version": "2.4.15", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-2.4.15.tgz", + "integrity": "sha512-owaAMZD/T4LrD0ELNCk0Km3qrRHuM0X6EAyVE1FSqGY0rbLoiDLrO4Us2tllm6cAeB2Ioa9C2C08NZPdr8+0Ug==", "cpu": [ "arm64" ], @@ -275,9 +278,9 @@ } }, "node_modules/@biomejs/cli-linux-arm64-musl": { - "version": "1.9.4", - "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-1.9.4.tgz", - "integrity": "sha512-v665Ct9WCRjGa8+kTr0CzApU0+XXtRgwmzIf1SeKSGAv+2scAlW6JR5PMFo6FzqqZ64Po79cKODKf3/AAmECqA==", + "version": "2.4.15", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.4.15.tgz", + "integrity": "sha512-ZPcxznxm0pogHBLZhYntyR3sR+MrZjqJIKEr7ZqVen0Rl+P/4upVmfYXjftizi9RoqZntg33fv/1fbdhbYXpEQ==", "cpu": [ "arm64" ], @@ -292,9 +295,9 @@ } }, "node_modules/@biomejs/cli-linux-x64": { - "version": "1.9.4", - "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-1.9.4.tgz", - "integrity": "sha512-lRCJv/Vi3Vlwmbd6K+oQ0KhLHMAysN8lXoCI7XeHlxaajk06u7G+UsFSO01NAs5iYuWKmVZjmiOzJ0OJmGsMwg==", + "version": "2.4.15", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-2.4.15.tgz", + "integrity": "sha512-0jj7THz12GbUOLmMibktK6DZjqz2zV64KFxyBtcFTKPiiOIY0a7vns1elpO1dERvxpsZ5ik0oFfz0oGwFde1+g==", "cpu": [ "x64" ], @@ -309,9 +312,9 @@ } }, "node_modules/@biomejs/cli-linux-x64-musl": { - "version": "1.9.4", - "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-1.9.4.tgz", - "integrity": "sha512-gEhi/jSBhZ2m6wjV530Yy8+fNqG8PAinM3oV7CyO+6c3CEh16Eizm21uHVsyVBEB6RIM8JHIl6AGYCv6Q6Q9Tg==", + "version": "2.4.15", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-2.4.15.tgz", + "integrity": "sha512-CNq/9W38SYSH023lfcQ4KKU8K0YX8T//FZUhcgtMMRABDojx5XsMV7jlweAvGSl389wJQB29Qo6Zb/a+jdvt+w==", "cpu": [ "x64" ], @@ -326,9 +329,9 @@ } }, "node_modules/@biomejs/cli-win32-arm64": { - "version": "1.9.4", - "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-1.9.4.tgz", - "integrity": "sha512-tlbhLk+WXZmgwoIKwHIHEBZUwxml7bRJgk0X2sPyNR3S93cdRq6XulAZRQJ17FYGGzWne0fgrXBKpl7l4M87Hg==", + "version": "2.4.15", + "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-2.4.15.tgz", + "integrity": "sha512-ouhkYdlhp/1GghEJPdWwD/Vi3gQ1nFxuSpMolWsbq3Lsq3QUR4jl6UdhhscdCugKU5vOEuMiJhvKj66O0OCq+w==", "cpu": [ "arm64" ], @@ -343,9 +346,9 @@ } }, "node_modules/@biomejs/cli-win32-x64": { - "version": "1.9.4", - "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-1.9.4.tgz", - "integrity": "sha512-8Y5wMhVIPaWe6jw2H+KlEm4wP/f7EW3810ZLmDlrEEy5KvBsb9ECEfu/kMWD484ijfQ8+nIi0giMgu9g1UAuuA==", + "version": "2.4.15", + "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-2.4.15.tgz", + "integrity": "sha512-zBrGq5mx5wwpnow4+2BxUvleDM+GNd4sLbPaMapsSLQLD0NGRCquqPBTgN+7XkUteHvj7M+BstuI8tmnV7+HgQ==", "cpu": [ "x64" ], diff --git a/package.json b/package.json index 4693c3bac..a4e837a3c 100644 --- a/package.json +++ b/package.json @@ -59,7 +59,7 @@ "tsscmp": "^1.0.6" }, "devDependencies": { - "@biomejs/biome": "^1.9.0", + "@biomejs/biome": "^2.4.15", "@changesets/cli": "^2.29.8", "@tsconfig/node18": "^18.2.4", "@types/chai": "^4.1.7", diff --git a/src/App.ts b/src/App.ts index f0e4de9f3..23e672efe 100644 --- a/src/App.ts +++ b/src/App.ts @@ -1,8 +1,8 @@ import type { Agent } from 'node:http'; import type { SecureContextOptions } from 'node:tls'; import util from 'node:util'; -import { ConsoleLogger, LogLevel, type Logger } from '@slack/logger'; -import { WebClient, type WebClientOptions, addAppMetadata } from '@slack/web-api'; +import { ConsoleLogger, type Logger, LogLevel } from '@slack/logger'; +import { addAppMetadata, WebClient, type WebClientOptions } from '@slack/web-api'; import axios, { type AxiosInstance } from 'axios'; import type { Assistant } from './Assistant'; import { @@ -11,7 +11,6 @@ import { type FunctionFailFn, type SlackCustomFunctionMiddlewareArgs, } from './CustomFunction'; -import type { WorkflowStep } from './WorkflowStep'; import { createFunctionComplete, createFunctionFail, @@ -19,24 +18,25 @@ import { createSay, createSayStream, createSetStatus, + type SayStreamFn, + type SetStatusFn, } from './context'; -import type { SayStreamFn, SetStatusFn } from './context'; -import { type ConversationStore, MemoryStore, conversationContext } from './conversation-store'; +import { type ConversationStore, conversationContext, MemoryStore } from './conversation-store'; import { AppInitializationError, + asCodedError, type CodedError, ErrorCode, InvalidCustomPropertyError, MultipleListenerError, - asCodedError, } from './errors'; import { - IncomingEventType, assertNever, extractEventChannelId, extractEventThreadTs, extractEventTs, getTypeAndConversation, + IncomingEventType, isBodyWithTypeEnterpriseInstall, isEventTypeToSkipAuthorize, } from './helpers'; @@ -96,7 +96,9 @@ import type { WorkflowStepEdit, } from './types'; import { contextBuiltinKeys } from './types'; -import { type StringIndexed, isRejected } from './types/utilities'; +import { isRejected, type StringIndexed } from './types/utilities'; +import type { WorkflowStep } from './WorkflowStep'; + const packageJson = require('../package.json'); export type { ActionConstraints, OptionsConstraints, ShortcutConstraints, ViewConstraints } from './types'; @@ -154,7 +156,7 @@ export interface AppOptions { attachFunctionToken?: boolean; } -export { LogLevel, Logger } from '@slack/logger'; +export { Logger, LogLevel } from '@slack/logger'; /** Authorization function - seeds the middleware processing and listeners with an authorization context */ export type Authorize = ( @@ -1083,7 +1085,7 @@ export default class App // TODO: this logic should be isolated and tested according to the expected behavior if (token !== undefined) { - let pool: WebClientPool | undefined = undefined; + let pool: WebClientPool | undefined; const clientOptionsCopy = { ...this.clientOptions }; if (authorizeResult.teamId !== undefined) { pool = this.clients[authorizeResult.teamId]; @@ -1228,7 +1230,6 @@ export default class App const rejectedListenerResults = settledListenerResults.filter(isRejected); if (rejectedListenerResults.length === 1) { throw rejectedListenerResults[0].reason; - // biome-ignore lint/style/noUselessElse: I think this is a biome issue actually... } else if (rejectedListenerResults.length > 1) { throw new MultipleListenerError(rejectedListenerResults.map((rlr) => rlr.reason)); } @@ -1355,15 +1356,15 @@ export default class App throw new AppInitializationError( `${tokenUsage} \n\nSince you have not provided a token or authorize, you might be missing one or more required oauth installer options. See https://docs.slack.dev/tools/bolt-js/concepts/authenticating-oauth/ for these required fields.\n`, ); - // biome-ignore lint/style/noUselessElse: I think this is a biome issue actually... - } else if (authorize !== undefined && usingOauth) { + } + if (authorize !== undefined && usingOauth) { throw new AppInitializationError(`You cannot provide both authorize and oauth installer options. ${tokenUsage}`); - // biome-ignore lint/style/noUselessElse: I think this is a biome issue actually... - } else if (authorize === undefined && usingOauth) { + } + if (authorize === undefined && usingOauth) { // biome-ignore lint/style/noNonNullAssertion: we know installer is truthy here return httpReceiver.installer!.authorize; - // biome-ignore lint/style/noUselessElse: I think this is a biome issue actually... - } else if (authorize !== undefined && !usingOauth) { + } + if (authorize !== undefined && !usingOauth) { return authorize as Authorize; } return undefined; @@ -1647,9 +1648,9 @@ function escapeHtml(input: string | undefined | null): string { } function extractFunctionContext(body: StringIndexed) { - let functionExecutionId: string | undefined = undefined; - let functionBotAccessToken: string | undefined = undefined; - let functionInputs: FunctionInputs | undefined = undefined; + let functionExecutionId: string | undefined; + let functionBotAccessToken: string | undefined; + let functionInputs: FunctionInputs | undefined; // function_executed event if (body.event && body.event.type === 'function_executed' && body.event.function_execution_id) { diff --git a/src/Assistant.ts b/src/Assistant.ts index 4a612ecbc..f073b8897 100644 --- a/src/Assistant.ts +++ b/src/Assistant.ts @@ -9,9 +9,7 @@ import { type AssistantThreadContextStore, DefaultThreadContextStore, } from './AssistantThreadContextStore'; -import { createSayStream, createSetStatus } from './context'; -import type { SayStreamFn } from './context'; -import type { SetStatusFn } from './context'; +import { createSayStream, createSetStatus, type SayStreamFn, type SetStatusFn } from './context'; import { AssistantInitializationError, AssistantMissingPropertyError } from './errors'; import { extractEventChannelId, extractEventThreadTs, isRecord } from './helpers'; import processMiddleware from './middleware/process'; diff --git a/src/context/index.ts b/src/context/index.ts index fe0f52883..a73aee94d 100644 --- a/src/context/index.ts +++ b/src/context/index.ts @@ -1,8 +1,8 @@ +export { createFunctionComplete } from './create-function-complete'; +export { createFunctionFail } from './create-function-fail'; +export { createRespond } from './create-respond'; export { createSay } from './create-say'; +export type { SayStreamArguments, SayStreamFn } from './create-say-stream'; export { createSayStream } from './create-say-stream'; -export type { SayStreamFn, SayStreamArguments } from './create-say-stream'; +export type { SetStatusArguments, SetStatusFn } from './create-set-status'; export { createSetStatus } from './create-set-status'; -export type { SetStatusFn, SetStatusArguments } from './create-set-status'; -export { createRespond } from './create-respond'; -export { createFunctionComplete } from './create-function-complete'; -export { createFunctionFail } from './create-function-fail'; diff --git a/src/index.ts b/src/index.ts index 2f20aeef2..52f1693dd 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,25 +1,24 @@ // Import App for better ES module compatibility import AppClass from './App'; +// Re-export Logger type for TypeScript consumers +export type { Logger } from './App'; export { + ActionConstraints, AppOptions, Authorize, - AuthorizeSourceData, AuthorizeResult, - ActionConstraints, + AuthorizeSourceData, LogLevel, } from './App'; -// Re-export Logger type for TypeScript consumers -export type { Logger } from './App'; - // Export App both as named and default for better ES module compatibility export { AppClass as App }; export default AppClass; export { - verifySlackRequest, isValidSlackRequest, + verifySlackRequest, } from './receivers/verify-request'; // Import receivers first, then re-export for better ESM compatibility @@ -28,69 +27,59 @@ import ExpressReceiver from './receivers/ExpressReceiver'; import HTTPReceiver from './receivers/HTTPReceiver'; import SocketModeReceiver from './receivers/SocketModeReceiver'; -export { ExpressReceiver, SocketModeReceiver, HTTPReceiver, AwsLambdaReceiver }; -export type { ExpressReceiverOptions } from './receivers/ExpressReceiver'; -export type { SocketModeReceiverOptions } from './receivers/SocketModeReceiver'; -export type { HTTPReceiverOptions } from './receivers/HTTPReceiver'; +// Re-export OAuth types for TypeScript consumers +export type { + Installation, + InstallationQuery, + InstallationStore, + InstallProviderOptions, + InstallURLOptions, + StateStore, +} from '@slack/oauth'; +// Re-export OAuth runtime classes +export { FileInstallationStore, MemoryInstallationStore } from '@slack/oauth'; +export * as types from '@slack/types'; +export * as webApi from '@slack/web-api'; +export { + Assistant, + AssistantConfig, + AssistantThreadContextChangedMiddleware, + AssistantThreadStartedMiddleware, + AssistantUserMessageMiddleware, +} from './Assistant'; +export type { SayStreamArguments, SayStreamFn } from './context/create-say-stream'; +export type { SetStatusArguments, SetStatusFn } from './context/create-set-status'; +export { ConversationStore, MemoryStore } from './conversation-store'; +export * from './errors'; +export * from './middleware/builtin'; export type { AwsLambdaReceiverOptions } from './receivers/AwsLambdaReceiver'; - export { BufferedIncomingMessage } from './receivers/BufferedIncomingMessage'; export { - RequestVerificationOptions, + buildReceiverRoutes, + CustomRoute, + ReceiverRoutes, +} from './receivers/custom-routes'; +export type { ExpressReceiverOptions } from './receivers/ExpressReceiver'; +export * as HTTPModuleFunctions from './receivers/HTTPModuleFunctions'; +export { ReceiverDispatchErrorHandlerArgs, ReceiverProcessEventErrorHandlerArgs, ReceiverUnhandledRequestHandlerArgs, + RequestVerificationOptions, } from './receivers/HTTPModuleFunctions'; -export * as HTTPModuleFunctions from './receivers/HTTPModuleFunctions'; +export type { HTTPReceiverOptions } from './receivers/HTTPReceiver'; export { HTTPResponseAck } from './receivers/HTTPResponseAck'; - export { defaultProcessEventErrorHandler, SocketModeReceiverProcessEventErrorHandlerArgs, } from './receivers/SocketModeFunctions'; - -export * from './errors'; -export * from './middleware/builtin'; +export type { SocketModeReceiverOptions } from './receivers/SocketModeReceiver'; export * from './types'; -export type { SayStreamFn, SayStreamArguments } from './context/create-say-stream'; -export type { SetStatusFn, SetStatusArguments } from './context/create-set-status'; - -export { ConversationStore, MemoryStore } from './conversation-store'; - -export { - CustomRoute, - ReceiverRoutes, - buildReceiverRoutes, -} from './receivers/custom-routes'; - -export { - Assistant, - AssistantConfig, - AssistantThreadContextChangedMiddleware, - AssistantThreadStartedMiddleware, - AssistantUserMessageMiddleware, -} from './Assistant'; - export { WorkflowStep, WorkflowStepConfig, WorkflowStepEditMiddleware, - WorkflowStepSaveMiddleware, WorkflowStepExecuteMiddleware, + WorkflowStepSaveMiddleware, } from './WorkflowStep'; - -// Re-export OAuth runtime classes -export { MemoryInstallationStore, FileInstallationStore } from '@slack/oauth'; - -// Re-export OAuth types for TypeScript consumers -export type { - Installation, - InstallURLOptions, - InstallationQuery, - InstallationStore, - StateStore, - InstallProviderOptions, -} from '@slack/oauth'; - -export * as types from '@slack/types'; -export * as webApi from '@slack/web-api'; +export { AwsLambdaReceiver, ExpressReceiver, HTTPReceiver, SocketModeReceiver }; diff --git a/src/receivers/AwsLambdaReceiver.ts b/src/receivers/AwsLambdaReceiver.ts index 526a89575..41cd659e5 100644 --- a/src/receivers/AwsLambdaReceiver.ts +++ b/src/receivers/AwsLambdaReceiver.ts @@ -1,6 +1,6 @@ import crypto from 'node:crypto'; import querystring from 'node:querystring'; -import { ConsoleLogger, LogLevel, type Logger } from '@slack/logger'; +import { ConsoleLogger, type Logger, LogLevel } from '@slack/logger'; import tsscmp from 'tsscmp'; import type App from '../App'; import { ReceiverMultipleAckError } from '../errors'; diff --git a/src/receivers/ExpressReceiver.ts b/src/receivers/ExpressReceiver.ts index 1d9af88d3..e0a651ccf 100644 --- a/src/receivers/ExpressReceiver.ts +++ b/src/receivers/ExpressReceiver.ts @@ -1,14 +1,13 @@ import crypto from 'node:crypto'; -import { type Server, type ServerOptions, createServer } from 'node:http'; -import type { IncomingMessage, ServerResponse } from 'node:http'; +import { createServer, type IncomingMessage, type Server, type ServerOptions, type ServerResponse } from 'node:http'; import { + createServer as createHttpsServer, type Server as HTTPSServer, type ServerOptions as HTTPSServerOptions, - createServer as createHttpsServer, } from 'node:https'; import type { ListenOptions } from 'node:net'; import querystring from 'node:querystring'; -import { ConsoleLogger, LogLevel, type Logger } from '@slack/logger'; +import { ConsoleLogger, type Logger, LogLevel } from '@slack/logger'; import { type CallbackOptions, type InstallPathOptions, @@ -17,12 +16,12 @@ import { type InstallURLOptions, } from '@slack/oauth'; import express, { - type Request, - type Response, type Application, + type IRouter, + type Request, type RequestHandler, + type Response, Router, - type IRouter, } from 'express'; import rawBody from 'raw-body'; import tsscmp from 'tsscmp'; diff --git a/src/receivers/HTTPReceiver.ts b/src/receivers/HTTPReceiver.ts index d85ea502c..115554707 100644 --- a/src/receivers/HTTPReceiver.ts +++ b/src/receivers/HTTPReceiver.ts @@ -1,19 +1,19 @@ import { + createServer, type IncomingMessage, type RequestListener, type Server, type ServerOptions, type ServerResponse, - createServer, } from 'node:http'; import { + createServer as createHttpsServer, type Server as HTTPSServer, type ServerOptions as HTTPSServerOptions, - createServer as createHttpsServer, } from 'node:https'; import type { ListenOptions } from 'node:net'; import { URL } from 'node:url'; -import { ConsoleLogger, LogLevel, type Logger } from '@slack/logger'; +import { ConsoleLogger, type Logger, LogLevel } from '@slack/logger'; import { type CallbackOptions, type InstallPathOptions, @@ -28,10 +28,10 @@ import { type CodedError, HTTPReceiverDeferredRequestError, ReceiverInconsistent import type { Receiver, ReceiverEvent } from '../types'; import type { StringIndexed } from '../types/utilities'; import type { BufferedIncomingMessage } from './BufferedIncomingMessage'; +import { buildReceiverRoutes, type CustomRoute, type ReceiverRoutes } from './custom-routes'; import * as httpFunc from './HTTPModuleFunctions'; import { HTTPResponseAck } from './HTTPResponseAck'; import type { ParamsIncomingMessage } from './ParamsIncomingMessage'; -import { type CustomRoute, type ReceiverRoutes, buildReceiverRoutes } from './custom-routes'; import { verifyRedirectOpts } from './verify-redirect-opts'; // Option keys for tls.createServer() and tls.createSecureContext(), exclusive of those for http.createServer() diff --git a/src/receivers/SocketModeReceiver.ts b/src/receivers/SocketModeReceiver.ts index de462095e..0d22078c0 100644 --- a/src/receivers/SocketModeReceiver.ts +++ b/src/receivers/SocketModeReceiver.ts @@ -1,6 +1,6 @@ -import { type Server, type ServerResponse, createServer } from 'node:http'; +import { createServer, type Server, type ServerResponse } from 'node:http'; import { URL } from 'node:url'; -import { ConsoleLogger, LogLevel, type Logger } from '@slack/logger'; +import { ConsoleLogger, type Logger, LogLevel } from '@slack/logger'; import { type CallbackOptions, type InstallPathOptions, @@ -16,13 +16,13 @@ import type App from '../App'; import type { CodedError } from '../errors'; import type { Receiver, ReceiverEvent } from '../types'; import type { StringIndexed } from '../types/utilities'; +import { buildReceiverRoutes, type ReceiverRoutes } from './custom-routes'; import type { ParamsIncomingMessage } from './ParamsIncomingMessage'; import { - type SocketModeReceiverProcessEventErrorHandlerArgs, defaultProcessEventErrorHandler, + type SocketModeReceiverProcessEventErrorHandlerArgs, } from './SocketModeFunctions'; import { SocketModeResponseAck } from './SocketModeResponseAck'; -import { type ReceiverRoutes, buildReceiverRoutes } from './custom-routes'; import { verifyRedirectOpts } from './verify-redirect-opts'; // TODO: we throw away the key names for endpoints, so maybe we should use this interface. is it better for migrations? diff --git a/src/types/actions/index.ts b/src/types/actions/index.ts index 9a9b120bf..badfc13e1 100644 --- a/src/types/actions/index.ts +++ b/src/types/actions/index.ts @@ -7,8 +7,8 @@ import type { InteractiveMessage } from './interactive-message'; import type { WorkflowStepEdit } from './workflow-step-edit'; export * from './block-action'; -export * from './interactive-message'; export * from './dialog-action'; +export * from './interactive-message'; // TODO: remove workflow step stuff in bolt v5 export * from './workflow-step-edit'; diff --git a/src/types/events/index.ts b/src/types/events/index.ts index b9c28e539..cdb847616 100644 --- a/src/types/events/index.ts +++ b/src/types/events/index.ts @@ -103,7 +103,6 @@ interface Authorization { * When the string matches known event(s) from the `SlackEvent` union, only those types are returned (also as a union). * Otherwise, the `BasicSlackEvent` type is returned. */ -export type EventFromType = KnownEventFromType extends never - ? BaseSlackEvent - : KnownEventFromType; +export type EventFromType = + KnownEventFromType extends never ? BaseSlackEvent : KnownEventFromType; export type KnownEventFromType = Extract; diff --git a/src/types/index.ts b/src/types/index.ts index 4d3c2d92b..80a6c7621 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -1,9 +1,9 @@ -export * from './utilities'; -export * from './middleware'; export * from './actions'; export * from './command'; export * from './events'; +export * from './middleware'; export * from './options'; -export * from './view'; export * from './receiver'; export * from './shortcuts'; +export * from './utilities'; +export * from './view'; diff --git a/src/types/options/index.ts b/src/types/options/index.ts index 5522f9a4c..24983c9a3 100644 --- a/src/types/options/index.ts +++ b/src/types/options/index.ts @@ -35,9 +35,8 @@ export interface BasicOptionsPayload { value: string; } // TODO: Is this useful? Events have something similar -export type OptionsPayloadFromType = KnownOptionsPayloadFromType extends never - ? BasicOptionsPayload - : KnownOptionsPayloadFromType; +export type OptionsPayloadFromType = + KnownOptionsPayloadFromType extends never ? BasicOptionsPayload : KnownOptionsPayloadFromType; export type KnownOptionsPayloadFromType = Extract; /** diff --git a/test/unit/App/basic.spec.ts b/test/unit/App/basic.spec.ts index b7a8ad78c..11ea3a2a3 100644 --- a/test/unit/App/basic.spec.ts +++ b/test/unit/App/basic.spec.ts @@ -4,9 +4,9 @@ import sinon from 'sinon'; import { ErrorCode } from '../../../src/errors'; import SocketModeReceiver from '../../../src/receivers/SocketModeReceiver'; import { - FakeReceiver, createFakeConversationStore, createFakeLogger, + FakeReceiver, importApp, mergeOverrides, noop, diff --git a/test/unit/App/middlewares/arguments.spec.ts b/test/unit/App/middlewares/arguments.spec.ts index d28b16d65..dd70cdf68 100644 --- a/test/unit/App/middlewares/arguments.spec.ts +++ b/test/unit/App/middlewares/arguments.spec.ts @@ -6,8 +6,6 @@ import type { SayStreamFn } from '../../../../src/context/create-say-stream'; import type { SetStatusFn } from '../../../../src/context/create-set-status'; import type { ReceiverEvent, SayFn } from '../../../../src/types'; import { - FakeReceiver, - type Override, createDummyAppMentionEventMiddlewareArgs, createDummyBlockActionEventMiddlewareArgs, createDummyCustomFunctionMiddlewareArgs, @@ -15,10 +13,12 @@ import { createDummyReceiverEvent, createDummyViewSubmissionMiddlewareArgs, createFakeLogger, + FakeReceiver, importApp, mergeOverrides, noop, noopMiddleware, + type Override, withAxiosPost, withChatStream, withConversationContext, diff --git a/test/unit/App/middlewares/global.spec.ts b/test/unit/App/middlewares/global.spec.ts index 1f332e971..124dc6614 100644 --- a/test/unit/App/middlewares/global.spec.ts +++ b/test/unit/App/middlewares/global.spec.ts @@ -6,11 +6,11 @@ import type { ExtendedErrorHandlerArgs } from '../../../../src/App'; import { AuthorizationError, type CodedError, ErrorCode, UnknownError } from '../../../../src/errors'; import type { NextFn, ReceiverEvent } from '../../../../src/types'; import { - FakeReceiver, createDummyCustomFunctionMiddlewareArgs, createDummyReceiverEvent, createFakeLogger, delay, + FakeReceiver, importApp, mergeOverrides, noopMiddleware, diff --git a/test/unit/App/middlewares/ignore-self.spec.ts b/test/unit/App/middlewares/ignore-self.spec.ts index 4f6d68217..da6be9d50 100644 --- a/test/unit/App/middlewares/ignore-self.spec.ts +++ b/test/unit/App/middlewares/ignore-self.spec.ts @@ -1,15 +1,15 @@ import sinon, { type SinonSpy } from 'sinon'; import type App from '../../../../src/App'; import { - FakeReceiver, - type Override, createDummyMemberChannelEventMiddlewareArgs, createDummyMessageEventMiddlewareArgs, createDummyReactionAddedEventMiddlewareArgs, createFakeLogger, + FakeReceiver, importApp, mergeOverrides, noopMiddleware, + type Override, withConversationContext, withMemoryStore, withNoopAppMetadata, diff --git a/test/unit/App/middlewares/listener.spec.ts b/test/unit/App/middlewares/listener.spec.ts index f6c4815ba..9d162ee84 100644 --- a/test/unit/App/middlewares/listener.spec.ts +++ b/test/unit/App/middlewares/listener.spec.ts @@ -2,7 +2,7 @@ import { assert } from 'chai'; import sinon, { type SinonSpy } from 'sinon'; import type App from '../../../../src/App'; import { ErrorCode, isCodedError } from '../../../../src/errors'; -import { FakeReceiver, createDummyReceiverEvent, importApp } from '../../helpers'; +import { createDummyReceiverEvent, FakeReceiver, importApp } from '../../helpers'; describe('App listener middleware processing', () => { let fakeReceiver: FakeReceiver; diff --git a/test/unit/App/routing-action.spec.ts b/test/unit/App/routing-action.spec.ts index 5415e7468..b4b0bc4c7 100644 --- a/test/unit/App/routing-action.spec.ts +++ b/test/unit/App/routing-action.spec.ts @@ -2,14 +2,14 @@ import { assert } from 'chai'; import sinon, { type SinonSpy } from 'sinon'; import type App from '../../../src/App'; import { - FakeReceiver, - type Override, createDummyBlockActionEventMiddlewareArgs, createDummyFunctionScopedBlockActionEventMiddlewareArgs, createFakeLogger, + FakeReceiver, importApp, mergeOverrides, noopMiddleware, + type Override, withConversationContext, withMemoryStore, withNoopAppMetadata, @@ -87,7 +87,7 @@ describe('App action() routing', () => { }); it('should throw if provided a constraint with unknown action constraint keys', async () => { - // @ts-ignore providing known invalid action constraint parameter + // @ts-expect-error providing known invalid action constraint parameter app.action({ id: 'boom' }, fakeHandler); sinon.assert.calledWithMatch(fakeLogger.error, 'unknown constraint keys'); }); diff --git a/test/unit/App/routing-assistant.spec.ts b/test/unit/App/routing-assistant.spec.ts index 2d6c96863..104d9438b 100644 --- a/test/unit/App/routing-assistant.spec.ts +++ b/test/unit/App/routing-assistant.spec.ts @@ -2,15 +2,15 @@ import sinon, { type SinonSpy } from 'sinon'; import type App from '../../../src/App'; import { Assistant } from '../../../src/Assistant'; import { - FakeReceiver, - type Override, createDummyAssistantThreadContextChangedEventMiddlewareArgs, createDummyAssistantThreadStartedEventMiddlewareArgs, createDummyAssistantUserMessageEventMiddlewareArgs, createFakeLogger, + FakeReceiver, importApp, mergeOverrides, noopMiddleware, + type Override, withConversationContext, withMemoryStore, withNoopAppMetadata, diff --git a/test/unit/App/routing-command.spec.ts b/test/unit/App/routing-command.spec.ts index 69467ae86..999199b06 100644 --- a/test/unit/App/routing-command.spec.ts +++ b/test/unit/App/routing-command.spec.ts @@ -1,13 +1,13 @@ import sinon, { type SinonSpy } from 'sinon'; import type App from '../../../src/App'; import { - FakeReceiver, - type Override, createDummyCommandMiddlewareArgs, createFakeLogger, + FakeReceiver, importApp, mergeOverrides, noopMiddleware, + type Override, withConversationContext, withMemoryStore, withNoopAppMetadata, diff --git a/test/unit/App/routing-event.spec.ts b/test/unit/App/routing-event.spec.ts index bae907b7f..c7fb22b60 100644 --- a/test/unit/App/routing-event.spec.ts +++ b/test/unit/App/routing-event.spec.ts @@ -2,13 +2,13 @@ import assert from 'node:assert'; import sinon, { type SinonSpy } from 'sinon'; import type App from '../../../src/App'; import { - FakeReceiver, - type Override, createDummyAppMentionEventMiddlewareArgs, createFakeLogger, + FakeReceiver, importApp, mergeOverrides, noopMiddleware, + type Override, withConversationContext, withMemoryStore, withNoopAppMetadata, diff --git a/test/unit/App/routing-function.spec.ts b/test/unit/App/routing-function.spec.ts index 90db27f40..b894b47fd 100644 --- a/test/unit/App/routing-function.spec.ts +++ b/test/unit/App/routing-function.spec.ts @@ -2,13 +2,13 @@ import { assert } from 'chai'; import sinon from 'sinon'; import type App from '../../../src/App'; import { - FakeReceiver, - type Override, createDummyCustomFunctionMiddlewareArgs, createFakeLogger, + FakeReceiver, importApp, mergeOverrides, noopMiddleware, + type Override, withConversationContext, withMemoryStore, withNoopAppMetadata, diff --git a/test/unit/App/routing-message.spec.ts b/test/unit/App/routing-message.spec.ts index b85013fcf..fbe263b43 100644 --- a/test/unit/App/routing-message.spec.ts +++ b/test/unit/App/routing-message.spec.ts @@ -1,13 +1,13 @@ import sinon, { type SinonSpy } from 'sinon'; import type App from '../../../src/App'; import { - FakeReceiver, - type Override, createDummyMessageEventMiddlewareArgs, createFakeLogger, + FakeReceiver, importApp, mergeOverrides, noopMiddleware, + type Override, withConversationContext, withMemoryStore, withNoopAppMetadata, diff --git a/test/unit/App/routing-options.spec.ts b/test/unit/App/routing-options.spec.ts index 598727611..72f090130 100644 --- a/test/unit/App/routing-options.spec.ts +++ b/test/unit/App/routing-options.spec.ts @@ -1,13 +1,13 @@ import sinon, { type SinonSpy } from 'sinon'; import type App from '../../../src/App'; import { - FakeReceiver, - type Override, createDummyBlockSuggestionsMiddlewareArgs, createFakeLogger, + FakeReceiver, importApp, mergeOverrides, noopMiddleware, + type Override, withConversationContext, withMemoryStore, withNoopAppMetadata, diff --git a/test/unit/App/routing-shortcut.spec.ts b/test/unit/App/routing-shortcut.spec.ts index ce546dc10..9374d2efa 100644 --- a/test/unit/App/routing-shortcut.spec.ts +++ b/test/unit/App/routing-shortcut.spec.ts @@ -1,13 +1,13 @@ import sinon, { type SinonSpy } from 'sinon'; import type App from '../../../src/App'; import { - FakeReceiver, - type Override, createDummyMessageShortcutMiddlewareArgs, createFakeLogger, + FakeReceiver, importApp, mergeOverrides, noopMiddleware, + type Override, withConversationContext, withMemoryStore, withNoopAppMetadata, @@ -94,7 +94,7 @@ describe('App shortcut() routing', () => { }); it('should throw if provided a constraint with unknown shortcut constraint keys', async () => { - // @ts-ignore providing known invalid shortcut constraint parameter + // @ts-expect-error providing known invalid shortcut constraint parameter app.shortcut({ id: 'boom' }, fakeHandler); sinon.assert.calledWithMatch(fakeLogger.error, 'unknown constraint keys'); }); diff --git a/test/unit/App/routing-view.spec.ts b/test/unit/App/routing-view.spec.ts index 5f10d1262..de43b6d95 100644 --- a/test/unit/App/routing-view.spec.ts +++ b/test/unit/App/routing-view.spec.ts @@ -1,14 +1,14 @@ import sinon, { type SinonSpy } from 'sinon'; import type App from '../../../src/App'; import { - FakeReceiver, - type Override, createDummyViewClosedMiddlewareArgs, createDummyViewSubmissionMiddlewareArgs, createFakeLogger, + FakeReceiver, importApp, mergeOverrides, noopMiddleware, + type Override, withConversationContext, withMemoryStore, withNoopAppMetadata, @@ -49,7 +49,7 @@ describe('App view() routing', () => { }); it('should throw if provided a constraint with unknown view constraint keys', async () => { - // @ts-ignore providing known invalid view constraint parameter + // @ts-expect-error providing known invalid view constraint parameter app.view({ id: 'boom' }, fakeHandler); sinon.assert.calledWithMatch(fakeLogger.error, 'unknown constraint keys'); }); diff --git a/test/unit/Assistant.spec.ts b/test/unit/Assistant.spec.ts index 6818bae5c..a81ae55f8 100644 --- a/test/unit/Assistant.spec.ts +++ b/test/unit/Assistant.spec.ts @@ -14,12 +14,12 @@ import type { AssistantThreadContext, AssistantThreadContextStore } from '../../ import { AssistantInitializationError, AssistantMissingPropertyError } from '../../src/errors'; import type { Middleware } from '../../src/types'; import { - type Override, createDummyAppMentionEventMiddlewareArgs, createDummyAssistantThreadContextChangedEventMiddlewareArgs, createDummyAssistantThreadStartedEventMiddlewareArgs, createDummyAssistantUserMessageEventMiddlewareArgs, createDummyMessageEventMiddlewareArgs, + type Override, proxyquire, wrapMiddleware, } from './helpers'; diff --git a/test/unit/CustomFunction.spec.ts b/test/unit/CustomFunction.spec.ts index 5aa123579..fcff37321 100644 --- a/test/unit/CustomFunction.spec.ts +++ b/test/unit/CustomFunction.spec.ts @@ -1,8 +1,8 @@ import { assert } from 'chai'; import { CustomFunction, - type SlackCustomFunctionMiddlewareArgs, matchCallbackId, + type SlackCustomFunctionMiddlewareArgs, validate, } from '../../src/CustomFunction'; import { CustomFunctionInitializationError } from '../../src/errors'; diff --git a/test/unit/WorkflowStep.spec.ts b/test/unit/WorkflowStep.spec.ts index dab9cc663..0dbf1c993 100644 --- a/test/unit/WorkflowStep.spec.ts +++ b/test/unit/WorkflowStep.spec.ts @@ -2,6 +2,8 @@ import path from 'node:path'; import type { WebClient } from '@slack/web-api'; import { assert } from 'chai'; import sinon from 'sinon'; +import { WorkflowStepInitializationError } from '../../src/errors'; +import type { AllMiddlewareArgs, AnyMiddlewareArgs, Middleware, WorkflowStepEdit } from '../../src/types'; import { type AllWorkflowStepMiddlewareArgs, type SlackWorkflowStepMiddlewareArgs, @@ -12,9 +14,7 @@ import { type WorkflowStepMiddleware, type WorkflowStepSaveMiddlewareArgs, } from '../../src/WorkflowStep'; -import { WorkflowStepInitializationError } from '../../src/errors'; -import type { AllMiddlewareArgs, AnyMiddlewareArgs, Middleware, WorkflowStepEdit } from '../../src/types'; -import { type Override, noopVoid, proxyquire } from './helpers'; +import { noopVoid, type Override, proxyquire } from './helpers'; function importWorkflowStep(overrides: Override = {}): typeof import('../../src/WorkflowStep') { const absolutePath = path.resolve(__dirname, '../../src/WorkflowStep'); diff --git a/test/unit/conversation-store.spec.ts b/test/unit/conversation-store.spec.ts index e677c0ed5..a50412a21 100644 --- a/test/unit/conversation-store.spec.ts +++ b/test/unit/conversation-store.spec.ts @@ -1,10 +1,10 @@ import path from 'node:path'; import type { Logger } from '@slack/logger'; import type { WebClient } from '@slack/web-api'; -import { assert, AssertionError } from 'chai'; +import { AssertionError, assert } from 'chai'; import sinon, { type SinonSpy } from 'sinon'; import type { AnyMiddlewareArgs, Context, NextFn } from '../../src/types'; -import { type Override, createFakeLogger, delay, proxyquire } from './helpers'; +import { createFakeLogger, delay, type Override, proxyquire } from './helpers'; /* Testing Harness */ diff --git a/test/unit/errors.spec.ts b/test/unit/errors.spec.ts index ec907eaa2..d65f69ee7 100644 --- a/test/unit/errors.spec.ts +++ b/test/unit/errors.spec.ts @@ -2,13 +2,13 @@ import { assert } from 'chai'; import { AppInitializationError, AuthorizationError, + asCodedError, type CodedError, ContextMissingPropertyError, ErrorCode, ReceiverAuthenticityError, ReceiverMultipleAckError, UnknownError, - asCodedError, } from '../../src/errors'; describe('Errors', () => { diff --git a/test/unit/helpers.spec.ts b/test/unit/helpers.spec.ts index 688d23069..c746cf99b 100644 --- a/test/unit/helpers.spec.ts +++ b/test/unit/helpers.spec.ts @@ -1,11 +1,11 @@ import { assert } from 'chai'; import { - IncomingEventType, extractEventChannelId, extractEventThreadTs, extractEventTs, getTypeAndConversation, hasStringProperty, + IncomingEventType, isBodyWithTypeEnterpriseInstall, isEventTypeToSkipAuthorize, isRecord, diff --git a/test/unit/helpers/events.ts b/test/unit/helpers/events.ts index 1576bf43f..19bf24670 100644 --- a/test/unit/helpers/events.ts +++ b/test/unit/helpers/events.ts @@ -11,7 +11,6 @@ import type { } from '@slack/types'; import { WebClient } from '@slack/web-api'; import sinon, { type SinonSpy } from 'sinon'; -import { createFakeLogger } from '.'; import type { AssistantThreadContextChangedMiddlewareArgs, AssistantThreadStartedMiddlewareArgs, @@ -48,6 +47,7 @@ import type { ViewOutput, ViewSubmitAction, } from '../../../src/types'; +import { createFakeLogger } from '.'; const ts = '1234.56'; const user = 'U1234'; diff --git a/test/unit/helpers/index.ts b/test/unit/helpers/index.ts index 91e340b95..0d7c46b02 100644 --- a/test/unit/helpers/index.ts +++ b/test/unit/helpers/index.ts @@ -6,11 +6,11 @@ import type { NextFn } from '../../../src/types'; // Ensure that the module gets loaded fresh every time proxyquire.noPreserveCache(); -export { proxyquire }; export * from './app'; export * from './events'; export * from './receivers'; +export { proxyquire }; export function createFakeLogger() { return sinon.createStubInstance(ConsoleLogger); diff --git a/test/unit/middleware/builtin.spec.ts b/test/unit/middleware/builtin.spec.ts index 9d9422531..9badf9368 100644 --- a/test/unit/middleware/builtin.spec.ts +++ b/test/unit/middleware/builtin.spec.ts @@ -6,13 +6,13 @@ import { ErrorCode } from '../../../src/errors'; import { isSlackEventMiddlewareArgsOptions } from '../../../src/middleware/builtin'; import type { Context, SlackEventMiddlewareArgs, SlackEventMiddlewareArgsOptions } from '../../../src/types'; import { - type Override, createDummyAppHomeOpenedEventMiddlewareArgs, createDummyAppMentionEventMiddlewareArgs, createDummyCommandMiddlewareArgs, createDummyMemberChannelEventMiddlewareArgs, createDummyMessageEventMiddlewareArgs, createDummyReactionAddedEventMiddlewareArgs, + type Override, proxyquire, wrapMiddleware, } from '../helpers'; @@ -154,7 +154,7 @@ describe('Built-in global middleware', () => { const ctx = { ...dummyContext }; const args = wrapMiddleware(createDummyMessageEventMiddlewareArgs(), ctx); - let error: Error | undefined = undefined; + let error: Error | undefined; try { await builtins.directMention(args); } catch (err) { diff --git a/test/unit/receivers/AwsLambdaReceiver.spec.ts b/test/unit/receivers/AwsLambdaReceiver.spec.ts index ba14c3fc6..43c5cf3a1 100644 --- a/test/unit/receivers/AwsLambdaReceiver.spec.ts +++ b/test/unit/receivers/AwsLambdaReceiver.spec.ts @@ -3,8 +3,8 @@ import { assert } from 'chai'; import sinon from 'sinon'; import AwsLambdaReceiver from '../../../src/receivers/AwsLambdaReceiver'; import { - createDummyAWSPayload, createDummyAppMentionEventMiddlewareArgs, + createDummyAWSPayload, createFakeLogger, importApp, mergeOverrides, diff --git a/test/unit/receivers/ExpressReceiver.spec.ts b/test/unit/receivers/ExpressReceiver.spec.ts index f5ec2e41f..f131aaa52 100644 --- a/test/unit/receivers/ExpressReceiver.spec.ts +++ b/test/unit/receivers/ExpressReceiver.spec.ts @@ -14,18 +14,18 @@ import { ReceiverInconsistentStateError, } from '../../../src/errors'; import ExpressReceiver, { + buildBodyParserMiddleware, respondToSslCheck, respondToUrlVerification, verifySignatureAndParseRawBody, - buildBodyParserMiddleware, } from '../../../src/receivers/ExpressReceiver'; import * as httpFunc from '../../../src/receivers/HTTPModuleFunctions'; import type { ReceiverEvent } from '../../../src/types'; import { - FakeServer, - type Override, createFakeLogger, + FakeServer, mergeOverrides, + type Override, proxyquire, withHttpCreateServer, withHttpsCreateServer, diff --git a/test/unit/receivers/HTTPReceiver.spec.ts b/test/unit/receivers/HTTPReceiver.spec.ts index 85b933a3f..8b3e15a09 100644 --- a/test/unit/receivers/HTTPReceiver.spec.ts +++ b/test/unit/receivers/HTTPReceiver.spec.ts @@ -12,11 +12,11 @@ import { } from '../../../src/errors'; import type { CustomRoute } from '../../../src/receivers/custom-routes'; import { - FakeServer, - type Override, createFakeLogger, + FakeServer, mergeOverrides, type noopVoid, + type Override, proxyquire, withHttpCreateServer, withHttpsCreateServer, diff --git a/test/unit/receivers/SocketModeReceiver.spec.ts b/test/unit/receivers/SocketModeReceiver.spec.ts index 0c8568c65..f76b8f2de 100644 --- a/test/unit/receivers/SocketModeReceiver.spec.ts +++ b/test/unit/receivers/SocketModeReceiver.spec.ts @@ -12,12 +12,12 @@ import { AppInitializationError, AuthorizationError, CustomRouteInitializationEr import { defaultProcessEventErrorHandler } from '../../../src/receivers/SocketModeFunctions'; import type { ReceiverEvent } from '../../../src/types'; import { - FakeServer, - type Override, createFakeLogger, delay, + FakeServer, mergeOverrides, type noopVoid, + type Override, proxyquire, withHttpCreateServer, withHttpsCreateServer,