@vercel/slack-bolt 1.4.0 → 1.4.1

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/dist/cli.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/internal/schemas.ts","../src/cleanup.ts","../src/cli/build.ts","../src/cli/env.ts","../src/cli/index.ts","../package.json","../src/cli.ts"],"names":["exports"],"mappings":"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","file":"cli.mjs","sourcesContent":["import { z } from \"zod\";\nimport type { PreviewParams } from \"../preview\";\n\nexport function formatMissingKeys(error: z.ZodError): string {\n return error.issues.map((i) => i.path.join(\".\")).join(\", \");\n}\n\nexport const systemEnvSchema = z.object({\n VERCEL_ENV: z.enum([\"production\", \"preview\", \"development\"]),\n VERCEL_GIT_COMMIT_REF: z.string(),\n VERCEL_PROJECT_ID: z.string(),\n VERCEL_URL: z.string(),\n VERCEL_BRANCH_URL: z.string().optional(),\n VERCEL_TEAM_ID: z.string().optional(),\n VERCEL_GIT_COMMIT_SHA: z.string().optional(),\n VERCEL_GIT_COMMIT_MESSAGE: z.string().optional(),\n VERCEL_GIT_COMMIT_AUTHOR_LOGIN: z.string().optional(),\n VERCEL_DEPLOYMENT_ID: z.string().optional(),\n VERCEL_AUTOMATION_BYPASS_SECRET: z.string().optional(),\n});\n\nexport const slackEnvSchema = z.object({\n SLACK_APP_ID: z.string().optional(),\n SLACK_CONFIGURATION_TOKEN: z.string(),\n SLACK_SERVICE_TOKEN: z.string().optional(),\n SLACK_CONFIG_REFRESH_TOKEN: z.string().optional(),\n MANIFEST_PATH: z.string().default(\"manifest.json\"),\n});\n\nexport const vercelEnvSchema = z.object({\n VERCEL_API_TOKEN: z.string(),\n});\n\nexport function validateAndBuildParams(\n env: Record<string, string | undefined>,\n): PreviewParams {\n const systemResult = systemEnvSchema.safeParse(env);\n if (!systemResult.success) {\n const missing = formatMissingKeys(systemResult.error);\n throw new Error(\n `Missing Vercel system environment variables: ${missing}\\nEnable 'Automatically expose System Environment Variables' in your Vercel project settings:\\nhttps://vercel.com/docs/projects/environment-variables/system-environment-variables`,\n );\n }\n\n const slackResult = slackEnvSchema.safeParse(env);\n if (!slackResult.success) {\n const missing = formatMissingKeys(slackResult.error);\n throw new Error(\n `Missing Slack environment variables: ${missing}\\nAdd them as environment variables in your Vercel project.`,\n );\n }\n\n const vercelResult = vercelEnvSchema.safeParse(env);\n if (!vercelResult.success) {\n const missing = formatMissingKeys(vercelResult.error);\n throw new Error(\n `Missing Vercel environment variables: ${missing}\\nCreate a new token and add it as VERCEL_API_TOKEN in your Vercel project:\\nhttps://vercel.com/account/settings/tokens`,\n );\n }\n\n return {\n branch: systemResult.data.VERCEL_GIT_COMMIT_REF,\n projectId: systemResult.data.VERCEL_PROJECT_ID,\n deploymentUrl: systemResult.data.VERCEL_URL,\n branchUrl: systemResult.data.VERCEL_BRANCH_URL,\n teamId: systemResult.data.VERCEL_TEAM_ID,\n commitSha: systemResult.data.VERCEL_GIT_COMMIT_SHA,\n commitMessage: systemResult.data.VERCEL_GIT_COMMIT_MESSAGE,\n commitAuthor: systemResult.data.VERCEL_GIT_COMMIT_AUTHOR_LOGIN,\n deploymentId: systemResult.data.VERCEL_DEPLOYMENT_ID,\n automationBypassSecret: systemResult.data.VERCEL_AUTOMATION_BYPASS_SECRET,\n slackAppId: slackResult.data.SLACK_APP_ID,\n slackConfigurationToken: slackResult.data.SLACK_CONFIGURATION_TOKEN,\n slackConfigRefreshToken: slackResult.data.SLACK_CONFIG_REFRESH_TOKEN,\n slackServiceToken: slackResult.data.SLACK_SERVICE_TOKEN,\n manifestPath: slackResult.data.MANIFEST_PATH,\n vercelApiToken: vercelResult.data.VERCEL_API_TOKEN,\n };\n}\n","import { deleteSlackApp } from \"./internal/slack\";\nimport {\n deleteEnvironmentVariable,\n getActiveBranches,\n getEnvironmentVariable,\n getEnvironmentVariables,\n} from \"./internal/vercel\";\nimport { log } from \"./logger\";\n\nconst SLACK_ENV_VAR_KEYS = [\n \"SLACK_APP_ID\",\n \"SLACK_CLIENT_ID\",\n \"SLACK_CLIENT_SECRET\",\n \"SLACK_SIGNING_SECRET\",\n \"SLACK_BOT_TOKEN\",\n];\n\nexport async function cleanupOrphanedApps({\n projectId,\n currentBranch,\n vercelApiToken,\n teamId,\n slackConfigurationToken,\n}: {\n projectId: string;\n currentBranch: string;\n vercelApiToken: string;\n teamId?: string;\n slackConfigurationToken: string;\n}): Promise<void> {\n const activeBranches = await getActiveBranches({\n projectId,\n token: vercelApiToken,\n teamId,\n });\n\n const envs = await getEnvironmentVariables({\n projectId,\n token: vercelApiToken,\n teamId,\n });\n\n const staleBranches = new Map<string, string>();\n for (const env of envs) {\n if (\n env.key === \"SLACK_APP_ID\" &&\n env.gitBranch &&\n env.gitBranch !== currentBranch &&\n !activeBranches.has(env.gitBranch)\n ) {\n staleBranches.set(env.gitBranch, env.id);\n }\n }\n\n if (staleBranches.size === 0) {\n log.info(\"No orphaned preview apps found\");\n return;\n }\n\n log.step(\n `Found ${staleBranches.size} orphaned ${staleBranches.size === 1 ? \"branch\" : \"branches\"}`,\n );\n\n for (const [branch, envId] of staleBranches) {\n let appId: string | null = null;\n try {\n appId = await getEnvironmentVariable({\n projectId,\n envId,\n token: vercelApiToken,\n teamId,\n });\n } catch {\n log.warning(`Failed to decrypt SLACK_APP_ID for branch ${branch}`);\n }\n\n if (appId) {\n try {\n await deleteSlackApp({\n token: slackConfigurationToken,\n appId,\n });\n log.info(`${appId} deleted (branch: ${branch})`);\n } catch (error) {\n const msg = error instanceof Error ? error.message : String(error);\n if (msg.includes(\"app_not_found\")) {\n log.info(`${appId} already deleted (branch: ${branch})`);\n } else {\n log.warning(`Failed to delete app ${appId}: ${msg}`);\n }\n }\n }\n\n for (const env of envs) {\n if (\n env.id &&\n env.gitBranch === branch &&\n SLACK_ENV_VAR_KEYS.includes(env.key)\n ) {\n try {\n await deleteEnvironmentVariable({\n projectId,\n envId: env.id,\n token: vercelApiToken,\n teamId,\n });\n } catch (error) {\n log.warning(\n `Failed to delete env var ${env.key} for branch ${branch}: ${error instanceof Error ? error.message : error}`,\n );\n }\n }\n }\n }\n\n log.success(\"Orphan cleanup completed\");\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { cleanupOrphanedApps } from \"../cleanup\";\nimport { authTest, rotateConfigToken } from \"../internal/slack\";\nimport {\n addEnvironmentVariables,\n cancelDeployment,\n createDeployment,\n getProject,\n} from \"../internal/vercel\";\nimport { log } from \"../logger\";\nimport { type PreviewParams, preview } from \"../preview\";\n\nexport async function executeBuild(\n params: PreviewParams,\n options?: { cleanup?: boolean },\n): Promise<void> {\n if (!params.slackConfigurationToken) {\n throw new Error(\n \"Slack Configuration Token is not set. Generate a configuration token and add it as SLACK_CONFIGURATION_TOKEN in your Vercel project:\\nhttps://api.slack.com/apps\",\n );\n }\n\n try {\n await authTest({ token: params.slackConfigurationToken });\n } catch (error) {\n if (!params.slackConfigRefreshToken) {\n throw new Error(\n \"Slack configuration token is invalid or expired. Provide SLACK_CONFIG_REFRESH_TOKEN for automatic rotation, or generate a new token:\\nhttps://api.slack.com/apps\",\n { cause: error },\n );\n }\n\n log.step(\"Refreshing SLACK_CONFIGURATION_TOKEN\");\n try {\n const rotated = await rotateConfigToken({\n refreshToken: params.slackConfigRefreshToken,\n });\n params.slackConfigurationToken = rotated.token;\n params.slackConfigRefreshToken = rotated.refreshToken;\n\n await addEnvironmentVariables({\n projectId: params.projectId,\n token: params.vercelApiToken,\n teamId: params.teamId,\n envs: [\n {\n key: \"SLACK_CONFIGURATION_TOKEN\",\n value: rotated.token,\n type: \"encrypted\",\n target: [\"production\", \"preview\", \"development\"],\n },\n {\n key: \"SLACK_CONFIG_REFRESH_TOKEN\",\n value: rotated.refreshToken,\n type: \"encrypted\",\n target: [\"production\", \"preview\", \"development\"],\n },\n ],\n });\n log.success(\"Configuration token rotated and persisted\");\n } catch (rotateError) {\n throw new Error(\n \"Failed to rotate configuration token — refresh token may be invalid. Generate new tokens:\\nhttps://api.slack.com/apps\",\n { cause: rotateError },\n );\n }\n }\n\n if (params.slackServiceToken) {\n try {\n await authTest({ token: params.slackServiceToken });\n } catch (error) {\n log.warning(\n \"SLACK_SERVICE_TOKEN is invalid — app must be installed manually\",\n );\n log.info(\"https://docs.slack.dev/authentication/tokens/#service\");\n log.debug(error);\n }\n }\n\n if (!params.branch) {\n throw new Error(\n \"VERCEL_GIT_COMMIT_REF is not set — connect your Git repository in your Vercel project settings.\\nhttps://vercel.com/docs/git\",\n );\n }\n\n try {\n await getProject({\n projectId: params.projectId,\n token: params.vercelApiToken,\n teamId: params.teamId,\n });\n } catch (error) {\n throw new Error(\n \"Vercel API token cannot access this project. Ensure VERCEL_API_TOKEN is valid and has access to this team:\\nhttps://vercel.com/account/settings/tokens\",\n { cause: error },\n );\n }\n\n const manifestFullPath = path.join(process.cwd(), params.manifestPath);\n if (!fs.existsSync(manifestFullPath)) {\n throw new Error(\n `No manifest found at ${params.manifestPath}. Create a manifest.json (or manifest.yaml) file with your Slack app configuration:\\nhttps://docs.slack.dev/reference/manifests`,\n );\n }\n\n if (options?.cleanup) {\n log.step(\"Cleaning up orphaned preview apps\");\n try {\n await cleanupOrphanedApps({\n projectId: params.projectId,\n currentBranch: params.branch,\n vercelApiToken: params.vercelApiToken,\n teamId: params.teamId,\n slackConfigurationToken: params.slackConfigurationToken,\n });\n } catch (error) {\n log.warning(\n `Orphan cleanup failed: ${error instanceof Error ? error.message : error}`,\n );\n }\n }\n\n const result = await preview(params, \"cli\");\n\n if (result.isNew && params.deploymentId) {\n log.step(\"Creating new deployment to pick up new environment variables\");\n const { id, url } = await createDeployment({\n deploymentId: params.deploymentId,\n projectId: params.projectId,\n token: params.vercelApiToken,\n teamId: params.teamId,\n });\n log.success(`New deployment created: ${url} (${id})`);\n\n log.step(\"Cancelling current deployment\");\n await cancelDeployment({\n deploymentId: params.deploymentId,\n token: params.vercelApiToken,\n teamId: params.teamId,\n });\n }\n}\n","export const ENV_KEYS = [\n \"VERCEL_ENV\",\n \"VERCEL_GIT_COMMIT_REF\",\n \"VERCEL_PROJECT_ID\",\n \"VERCEL_URL\",\n \"VERCEL_BRANCH_URL\",\n \"VERCEL_TEAM_ID\",\n \"VERCEL_GIT_COMMIT_SHA\",\n \"VERCEL_GIT_COMMIT_MESSAGE\",\n \"VERCEL_GIT_COMMIT_AUTHOR_LOGIN\",\n \"VERCEL_DEPLOYMENT_ID\",\n \"VERCEL_AUTOMATION_BYPASS_SECRET\",\n \"SLACK_APP_ID\",\n \"SLACK_CONFIGURATION_TOKEN\",\n \"SLACK_SERVICE_TOKEN\",\n \"SLACK_CONFIG_REFRESH_TOKEN\",\n \"MANIFEST_PATH\",\n \"VERCEL_API_TOKEN\",\n] as const;\n\nexport function envKeyToFlag(key: string): string {\n return key.toLowerCase().replace(/_/g, \"-\");\n}\n\nfunction flagToCamelCase(flag: string): string {\n return flag.replace(/-([a-z])/g, (_, c: string) => c.toUpperCase());\n}\n\nexport function resolveEnv(\n options: Record<string, string | undefined>,\n): Record<string, string | undefined> {\n const overrides: Record<string, string> = {};\n for (const key of ENV_KEYS) {\n const camelKey = flagToCamelCase(envKeyToFlag(key));\n const value = options[camelKey];\n if (typeof value === \"string\") {\n overrides[key] = value;\n }\n }\n return { ...process.env, ...overrides };\n}\n","import { Command } from \"commander\";\nimport { validateAndBuildParams } from \"../internal/schemas\";\nimport { enableFetchDebugLogging, log, startMessage } from \"../logger\";\nimport { executeBuild } from \"./build\";\nimport { ENV_KEYS, envKeyToFlag, resolveEnv } from \"./env\";\n\nexport function run(version: string): void {\n const program = new Command()\n .name(\"vercel-slack\")\n .description(\n \"Build and configure Slack apps for Vercel preview deployments\",\n )\n .version(version)\n .option(\"--debug\", \"Enable verbose debug logging for all HTTP requests\");\n\n const cmd = program\n .command(\"build\")\n .description(\n \"Build and configure the Slack app for a Vercel preview deployment\",\n );\n\n for (const key of ENV_KEYS) {\n cmd.option(`--${envKeyToFlag(key)} <value>`, `Override ${key}`);\n }\n\n cmd.option(\n \"--cleanup\",\n \"Clean up Slack apps and env vars for inactive preview branches\",\n );\n\n cmd.action(async (options: Record<string, string | boolean | undefined>) => {\n const debug =\n program.opts().debug === true ||\n process.env.VERCEL_SLACK_DEBUG === \"1\" ||\n process.env.VERCEL_SLACK_DEBUG === \"true\";\n if (debug) {\n process.env.VERCEL_SLACK_DEBUG = \"1\";\n enableFetchDebugLogging();\n }\n\n const cleanup = options.cleanup === true;\n const env = resolveEnv(options as Record<string, string | undefined>);\n\n console.log(\n startMessage(\n version,\n env.VERCEL_GIT_COMMIT_REF,\n env.VERCEL_GIT_COMMIT_SHA,\n env.SLACK_APP_ID,\n ),\n );\n\n const isLocal = !env.VERCEL_ENV;\n const isDev =\n env.VERCEL_ENV === \"development\" || env.NODE_ENV === \"development\";\n const isProd = env.VERCEL_ENV === \"production\";\n\n if (isLocal || isDev || isProd) {\n const reason = isLocal ? \"local\" : isDev ? \"development\" : \"production\";\n log.info(`Environment: ${reason} (skipped)\\n`);\n return;\n }\n\n const params = validateAndBuildParams(env);\n await executeBuild(params, { cleanup });\n });\n\n program.parseAsync().catch((error: unknown) => {\n log.error(error instanceof Error ? error.message : String(error));\n console.log();\n });\n}\n","{\n\t\"name\": \"@vercel/slack-bolt\",\n\t\"version\": \"1.4.0\",\n\t\"description\": \"A Vercel receiver for building Slack apps with Bolt and deploying them to Vercel\",\n\t\"main\": \"./dist/index.js\",\n\t\"types\": \"./dist/index.d.ts\",\n\t\"type\": \"commonjs\",\n\t\"bin\": {\n\t\t\"vercel-slack\": \"./bin/vercel-slack.js\"\n\t},\n\t\"exports\": {\n\t\t\".\": {\n\t\t\t\"types\": {\n\t\t\t\t\"import\": \"./dist/index.d.mts\",\n\t\t\t\t\"require\": \"./dist/index.d.ts\"\n\t\t\t},\n\t\t\t\"import\": \"./dist/index.mjs\",\n\t\t\t\"require\": \"./dist/index.js\"\n\t\t},\n\t\t\"./preview\": {\n\t\t\t\"types\": {\n\t\t\t\t\"import\": \"./dist/preview.d.mts\",\n\t\t\t\t\"require\": \"./dist/preview.d.ts\"\n\t\t\t},\n\t\t\t\"import\": \"./dist/preview.mjs\",\n\t\t\t\"require\": \"./dist/preview.js\"\n\t\t}\n\t},\n\t\"typesVersions\": {\n\t\t\"*\": {\n\t\t\t\"preview\": [\n\t\t\t\t\"./dist/preview.d.ts\"\n\t\t\t]\n\t\t}\n\t},\n\t\"files\": [\n\t\t\"bin\",\n\t\t\"dist\"\n\t],\n\t\"repository\": {\n\t\t\"type\": \"git\",\n\t\t\"url\": \"https://github.com/vercel-labs/slack-bolt\"\n\t},\n\t\"bugs\": {\n\t\t\"url\": \"https://github.com/vercel-labs/slack-bolt/issues\"\n\t},\n\t\"scripts\": {\n\t\t\"build\": \"tsup\",\n\t\t\"dev\": \"tsup --watch\",\n\t\t\"test\": \"vitest run\",\n\t\t\"test:watch\": \"vitest watch\",\n\t\t\"lint\": \"biome check .\",\n\t\t\"lint:fix\": \"biome check . --write\",\n\t\t\"attw\": \"attw --pack .\"\n\t},\n\t\"keywords\": [\n\t\t\"vercel\",\n\t\t\"bolt\",\n\t\t\"slack\"\n\t],\n\t\"author\": \"Vercel\",\n\t\"license\": \"MIT\",\n\t\"dependencies\": {\n\t\t\"@slack/logger\": \"^4.0.0\",\n\t\t\"@slack/oauth\": \"3.0.5\",\n\t\t\"@vercel/functions\": \"^3.4.3\",\n\t\t\"commander\": \"^14.0.3\",\n\t\t\"yaml\": \"^2.8.2\",\n\t\t\"zod\": \"^4.3.6\"\n\t},\n\t\"devDependencies\": {\n\t\t\"@arethetypeswrong/cli\": \"^0.18.2\",\n\t\t\"@biomejs/biome\": \"2.2.2\",\n\t\t\"@types/node\": \"^20.19.35\",\n\t\t\"@vitest/coverage-v8\": \"4.0.18\",\n\t\t\"tsup\": \"^8.5.1\",\n\t\t\"tsx\": \"^4.21.0\",\n\t\t\"typescript\": \"^5.9.3\",\n\t\t\"vitest\": \"^4.0.18\"\n\t},\n\t\"peerDependencies\": {\n\t\t\"@slack/bolt\": \"^4.4.0\"\n\t},\n\t\"peerDependenciesMeta\": {\n\t\t\"@slack/bolt\": {\n\t\t\t\"optional\": false\n\t\t}\n\t},\n\t\"engines\": {\n\t\t\"node\": \">=20.0.0\"\n\t},\n\t\"publishConfig\": {\n\t\t\"access\": \"public\"\n\t}\n}\n","#!/usr/bin/env node\nimport { run } from \"./cli/index\";\n\nconst { version } = require(\"../package.json\") as { version: string };\n\nrun(version);\n"]}
1
+ {"version":3,"file":"cli.mjs","names":[],"sources":["../src/internal/schemas.ts","../src/cleanup.ts","../src/cli/build.ts","../src/cli/env.ts","../src/cli/index.ts","../package.json","../src/cli.ts"],"sourcesContent":["import { z } from \"zod\";\nimport type { PreviewParams } from \"../preview\";\n\nexport function formatMissingKeys(error: z.ZodError): string {\n return error.issues.map((i) => i.path.join(\".\")).join(\", \");\n}\n\nexport const systemEnvSchema = z.object({\n VERCEL_ENV: z.enum([\"production\", \"preview\", \"development\"]),\n VERCEL_GIT_COMMIT_REF: z.string(),\n VERCEL_PROJECT_ID: z.string(),\n VERCEL_URL: z.string(),\n VERCEL_BRANCH_URL: z.string().optional(),\n VERCEL_TEAM_ID: z.string().optional(),\n VERCEL_GIT_COMMIT_SHA: z.string().optional(),\n VERCEL_GIT_COMMIT_MESSAGE: z.string().optional(),\n VERCEL_GIT_COMMIT_AUTHOR_LOGIN: z.string().optional(),\n VERCEL_DEPLOYMENT_ID: z.string().optional(),\n VERCEL_AUTOMATION_BYPASS_SECRET: z.string().optional(),\n});\n\nexport const slackEnvSchema = z.object({\n SLACK_APP_ID: z.string().optional(),\n SLACK_CONFIGURATION_TOKEN: z.string(),\n SLACK_SERVICE_TOKEN: z.string().optional(),\n SLACK_CONFIG_REFRESH_TOKEN: z.string().optional(),\n MANIFEST_PATH: z.string().default(\"manifest.json\"),\n});\n\nexport const vercelEnvSchema = z.object({\n VERCEL_API_TOKEN: z.string(),\n});\n\nexport function validateAndBuildParams(\n env: Record<string, string | undefined>,\n): PreviewParams {\n const systemResult = systemEnvSchema.safeParse(env);\n if (!systemResult.success) {\n const missing = formatMissingKeys(systemResult.error);\n throw new Error(\n `Missing Vercel system environment variables: ${missing}\\nEnable 'Automatically expose System Environment Variables' in your Vercel project settings:\\nhttps://vercel.com/docs/projects/environment-variables/system-environment-variables`,\n );\n }\n\n const slackResult = slackEnvSchema.safeParse(env);\n if (!slackResult.success) {\n const missing = formatMissingKeys(slackResult.error);\n throw new Error(\n `Missing Slack environment variables: ${missing}\\nAdd them as environment variables in your Vercel project.`,\n );\n }\n\n const vercelResult = vercelEnvSchema.safeParse(env);\n if (!vercelResult.success) {\n const missing = formatMissingKeys(vercelResult.error);\n throw new Error(\n `Missing Vercel environment variables: ${missing}\\nCreate a new token and add it as VERCEL_API_TOKEN in your Vercel project:\\nhttps://vercel.com/account/settings/tokens`,\n );\n }\n\n return {\n branch: systemResult.data.VERCEL_GIT_COMMIT_REF,\n projectId: systemResult.data.VERCEL_PROJECT_ID,\n deploymentUrl: systemResult.data.VERCEL_URL,\n branchUrl: systemResult.data.VERCEL_BRANCH_URL,\n teamId: systemResult.data.VERCEL_TEAM_ID,\n commitSha: systemResult.data.VERCEL_GIT_COMMIT_SHA,\n commitMessage: systemResult.data.VERCEL_GIT_COMMIT_MESSAGE,\n commitAuthor: systemResult.data.VERCEL_GIT_COMMIT_AUTHOR_LOGIN,\n deploymentId: systemResult.data.VERCEL_DEPLOYMENT_ID,\n automationBypassSecret: systemResult.data.VERCEL_AUTOMATION_BYPASS_SECRET,\n slackAppId: slackResult.data.SLACK_APP_ID,\n slackConfigurationToken: slackResult.data.SLACK_CONFIGURATION_TOKEN,\n slackConfigRefreshToken: slackResult.data.SLACK_CONFIG_REFRESH_TOKEN,\n slackServiceToken: slackResult.data.SLACK_SERVICE_TOKEN,\n manifestPath: slackResult.data.MANIFEST_PATH,\n vercelApiToken: vercelResult.data.VERCEL_API_TOKEN,\n };\n}\n","import { deleteSlackApp } from \"./internal/slack\";\nimport {\n deleteEnvironmentVariable,\n getActiveBranches,\n getEnvironmentVariable,\n getEnvironmentVariables,\n} from \"./internal/vercel\";\nimport { log } from \"./logger\";\n\nconst SLACK_ENV_VAR_KEYS = [\n \"SLACK_APP_ID\",\n \"SLACK_CLIENT_ID\",\n \"SLACK_CLIENT_SECRET\",\n \"SLACK_SIGNING_SECRET\",\n \"SLACK_BOT_TOKEN\",\n];\n\nexport async function cleanupOrphanedApps({\n projectId,\n currentBranch,\n vercelApiToken,\n teamId,\n slackConfigurationToken,\n}: {\n projectId: string;\n currentBranch: string;\n vercelApiToken: string;\n teamId?: string;\n slackConfigurationToken: string;\n}): Promise<void> {\n const activeBranches = await getActiveBranches({\n projectId,\n token: vercelApiToken,\n teamId,\n });\n\n const envs = await getEnvironmentVariables({\n projectId,\n token: vercelApiToken,\n teamId,\n });\n\n const staleBranches = new Map<string, string>();\n for (const env of envs) {\n if (\n env.key === \"SLACK_APP_ID\" &&\n env.gitBranch &&\n env.gitBranch !== currentBranch &&\n !activeBranches.has(env.gitBranch)\n ) {\n staleBranches.set(env.gitBranch, env.id);\n }\n }\n\n if (staleBranches.size === 0) {\n log.info(\"No orphaned preview apps found\");\n return;\n }\n\n log.step(\n `Found ${staleBranches.size} orphaned ${staleBranches.size === 1 ? \"branch\" : \"branches\"}`,\n );\n\n for (const [branch, envId] of staleBranches) {\n let appId: string | null = null;\n try {\n appId = await getEnvironmentVariable({\n projectId,\n envId,\n token: vercelApiToken,\n teamId,\n });\n } catch {\n log.warning(`Failed to decrypt SLACK_APP_ID for branch ${branch}`);\n }\n\n if (appId) {\n try {\n await deleteSlackApp({\n token: slackConfigurationToken,\n appId,\n });\n log.info(`${appId} deleted (branch: ${branch})`);\n } catch (error) {\n const msg = error instanceof Error ? error.message : String(error);\n if (msg.includes(\"app_not_found\")) {\n log.info(`${appId} already deleted (branch: ${branch})`);\n } else {\n log.warning(`Failed to delete app ${appId}: ${msg}`);\n }\n }\n }\n\n for (const env of envs) {\n if (\n env.id &&\n env.gitBranch === branch &&\n SLACK_ENV_VAR_KEYS.includes(env.key)\n ) {\n try {\n await deleteEnvironmentVariable({\n projectId,\n envId: env.id,\n token: vercelApiToken,\n teamId,\n });\n } catch (error) {\n log.warning(\n `Failed to delete env var ${env.key} for branch ${branch}: ${error instanceof Error ? error.message : error}`,\n );\n }\n }\n }\n }\n\n log.success(\"Orphan cleanup completed\");\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { cleanupOrphanedApps } from \"../cleanup\";\nimport { authTest, rotateConfigToken } from \"../internal/slack\";\nimport {\n addEnvironmentVariables,\n cancelDeployment,\n createDeployment,\n getProject,\n} from \"../internal/vercel\";\nimport { log } from \"../logger\";\nimport { type PreviewParams, preview } from \"../preview\";\n\nexport async function executeBuild(\n params: PreviewParams,\n options?: { cleanup?: boolean },\n): Promise<void> {\n if (!params.slackConfigurationToken) {\n throw new Error(\n \"Slack Configuration Token is not set. Generate a configuration token and add it as SLACK_CONFIGURATION_TOKEN in your Vercel project:\\nhttps://api.slack.com/apps\",\n );\n }\n\n try {\n await authTest({ token: params.slackConfigurationToken });\n } catch (error) {\n if (!params.slackConfigRefreshToken) {\n throw new Error(\n \"Slack configuration token is invalid or expired. Provide SLACK_CONFIG_REFRESH_TOKEN for automatic rotation, or generate a new token:\\nhttps://api.slack.com/apps\",\n { cause: error },\n );\n }\n\n log.step(\"Refreshing SLACK_CONFIGURATION_TOKEN\");\n try {\n const rotated = await rotateConfigToken({\n refreshToken: params.slackConfigRefreshToken,\n });\n params.slackConfigurationToken = rotated.token;\n params.slackConfigRefreshToken = rotated.refreshToken;\n\n await addEnvironmentVariables({\n projectId: params.projectId,\n token: params.vercelApiToken,\n teamId: params.teamId,\n envs: [\n {\n key: \"SLACK_CONFIGURATION_TOKEN\",\n value: rotated.token,\n type: \"encrypted\",\n target: [\"production\", \"preview\", \"development\"],\n },\n {\n key: \"SLACK_CONFIG_REFRESH_TOKEN\",\n value: rotated.refreshToken,\n type: \"encrypted\",\n target: [\"production\", \"preview\", \"development\"],\n },\n ],\n });\n log.success(\"Configuration token rotated and persisted\");\n } catch (rotateError) {\n throw new Error(\n \"Failed to rotate configuration token — refresh token may be invalid. Generate new tokens:\\nhttps://api.slack.com/apps\",\n { cause: rotateError },\n );\n }\n }\n\n if (params.slackServiceToken) {\n try {\n await authTest({ token: params.slackServiceToken });\n } catch (error) {\n log.warning(\n \"SLACK_SERVICE_TOKEN is invalid — app must be installed manually\",\n );\n log.info(\"https://docs.slack.dev/authentication/tokens/#service\");\n log.debug(error);\n }\n }\n\n if (!params.branch) {\n throw new Error(\n \"VERCEL_GIT_COMMIT_REF is not set — connect your Git repository in your Vercel project settings.\\nhttps://vercel.com/docs/git\",\n );\n }\n\n try {\n await getProject({\n projectId: params.projectId,\n token: params.vercelApiToken,\n teamId: params.teamId,\n });\n } catch (error) {\n throw new Error(\n \"Vercel API token cannot access this project. Ensure VERCEL_API_TOKEN is valid and has access to this team:\\nhttps://vercel.com/account/settings/tokens\",\n { cause: error },\n );\n }\n\n const manifestFullPath = path.join(process.cwd(), params.manifestPath);\n if (!fs.existsSync(manifestFullPath)) {\n throw new Error(\n `No manifest found at ${params.manifestPath}. Create a manifest.json (or manifest.yaml) file with your Slack app configuration:\\nhttps://docs.slack.dev/reference/manifests`,\n );\n }\n\n if (options?.cleanup) {\n log.step(\"Cleaning up orphaned preview apps\");\n try {\n await cleanupOrphanedApps({\n projectId: params.projectId,\n currentBranch: params.branch,\n vercelApiToken: params.vercelApiToken,\n teamId: params.teamId,\n slackConfigurationToken: params.slackConfigurationToken,\n });\n } catch (error) {\n log.warning(\n `Orphan cleanup failed: ${error instanceof Error ? error.message : error}`,\n );\n }\n }\n\n const result = await preview(params, \"cli\");\n\n if (result.isNew && params.deploymentId) {\n log.step(\"Creating new deployment to pick up new environment variables\");\n const { id, url } = await createDeployment({\n deploymentId: params.deploymentId,\n projectId: params.projectId,\n token: params.vercelApiToken,\n teamId: params.teamId,\n });\n log.success(`New deployment created: ${url} (${id})`);\n\n log.step(\"Cancelling current deployment\");\n await cancelDeployment({\n deploymentId: params.deploymentId,\n token: params.vercelApiToken,\n teamId: params.teamId,\n });\n }\n}\n","export const ENV_KEYS = [\n \"VERCEL_ENV\",\n \"VERCEL_GIT_COMMIT_REF\",\n \"VERCEL_PROJECT_ID\",\n \"VERCEL_URL\",\n \"VERCEL_BRANCH_URL\",\n \"VERCEL_TEAM_ID\",\n \"VERCEL_GIT_COMMIT_SHA\",\n \"VERCEL_GIT_COMMIT_MESSAGE\",\n \"VERCEL_GIT_COMMIT_AUTHOR_LOGIN\",\n \"VERCEL_DEPLOYMENT_ID\",\n \"VERCEL_AUTOMATION_BYPASS_SECRET\",\n \"SLACK_APP_ID\",\n \"SLACK_CONFIGURATION_TOKEN\",\n \"SLACK_SERVICE_TOKEN\",\n \"SLACK_CONFIG_REFRESH_TOKEN\",\n \"MANIFEST_PATH\",\n \"VERCEL_API_TOKEN\",\n] as const;\n\nexport function envKeyToFlag(key: string): string {\n return key.toLowerCase().replace(/_/g, \"-\");\n}\n\nfunction flagToCamelCase(flag: string): string {\n return flag.replace(/-([a-z])/g, (_, c: string) => c.toUpperCase());\n}\n\nexport function resolveEnv(\n options: Record<string, string | undefined>,\n): Record<string, string | undefined> {\n const overrides: Record<string, string> = {};\n for (const key of ENV_KEYS) {\n const camelKey = flagToCamelCase(envKeyToFlag(key));\n const value = options[camelKey];\n if (typeof value === \"string\") {\n overrides[key] = value;\n }\n }\n return { ...process.env, ...overrides };\n}\n","import { Command } from \"commander\";\nimport { validateAndBuildParams } from \"../internal/schemas\";\nimport { enableFetchDebugLogging, log, startMessage } from \"../logger\";\nimport { executeBuild } from \"./build\";\nimport { ENV_KEYS, envKeyToFlag, resolveEnv } from \"./env\";\n\nexport function run(version: string): void {\n const program = new Command()\n .name(\"vercel-slack\")\n .description(\n \"Build and configure Slack apps for Vercel preview deployments\",\n )\n .version(version)\n .option(\"--debug\", \"Enable verbose debug logging for all HTTP requests\");\n\n const cmd = program\n .command(\"build\")\n .description(\n \"Build and configure the Slack app for a Vercel preview deployment\",\n );\n\n for (const key of ENV_KEYS) {\n cmd.option(`--${envKeyToFlag(key)} <value>`, `Override ${key}`);\n }\n\n cmd.option(\n \"--cleanup\",\n \"Clean up Slack apps and env vars for inactive preview branches\",\n );\n\n cmd.action(async (options: Record<string, string | boolean | undefined>) => {\n const debug =\n program.opts().debug === true ||\n process.env.VERCEL_SLACK_DEBUG === \"1\" ||\n process.env.VERCEL_SLACK_DEBUG === \"true\";\n if (debug) {\n process.env.VERCEL_SLACK_DEBUG = \"1\";\n enableFetchDebugLogging();\n }\n\n const cleanup = options.cleanup === true;\n const env = resolveEnv(options as Record<string, string | undefined>);\n\n console.log(\n startMessage(\n version,\n env.VERCEL_GIT_COMMIT_REF,\n env.VERCEL_GIT_COMMIT_SHA,\n env.SLACK_APP_ID,\n ),\n );\n\n const isLocal = !env.VERCEL_ENV;\n const isDev =\n env.VERCEL_ENV === \"development\" || env.NODE_ENV === \"development\";\n const isProd = env.VERCEL_ENV === \"production\";\n\n if (isLocal || isDev || isProd) {\n const reason = isLocal ? \"local\" : isDev ? \"development\" : \"production\";\n log.info(`Environment: ${reason} (skipped)\\n`);\n return;\n }\n\n const params = validateAndBuildParams(env);\n await executeBuild(params, { cleanup });\n });\n\n program.parseAsync().catch((error: unknown) => {\n log.error(error instanceof Error ? error.message : String(error));\n console.log();\n });\n}\n","","#!/usr/bin/env node\nimport { run } from \"./cli/index\";\n\nconst { version } = require(\"../package.json\") as { version: string };\n\nrun(version);\n"],"mappings":"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"}
package/dist/index.d.mts CHANGED
@@ -1,7 +1,8 @@
1
- import { Receiver, StringIndexed, App } from '@slack/bolt';
2
- import { Logger, LogLevel } from '@slack/logger';
3
- import { StateStore, InstallProviderOptions, InstallPathOptions, CallbackOptions, InstallProvider } from '@slack/oauth';
1
+ import { App, Receiver, StringIndexed } from "@slack/bolt";
2
+ import { LogLevel, Logger } from "@slack/logger";
3
+ import { CallbackOptions, InstallPathOptions, InstallProvider, InstallProviderOptions, StateStore } from "@slack/oauth";
4
4
 
5
+ //#region src/index.d.ts
5
6
  /**
6
7
  * A function to handle the request from the Slack app.
7
8
  * @param req - The request from the Slack app.
@@ -22,91 +23,91 @@ type VercelHandler = (req: Request) => Promise<Response>;
22
23
  * excluding path-related options (serverless uses file-based routing).
23
24
  */
24
25
  interface VercelInstallerOptions {
25
- directInstall?: boolean;
26
- renderHtmlForInstallPath?: (url: string) => string;
27
- stateStore?: StateStore;
28
- stateVerification?: boolean;
29
- legacyStateVerification?: boolean;
30
- stateCookieName?: string;
31
- stateCookieExpirationSeconds?: number;
32
- authVersion?: "v1" | "v2";
33
- clientOptions?: InstallProviderOptions["clientOptions"];
34
- authorizationUrl?: string;
35
- metadata?: string;
36
- userScopes?: string[];
37
- installPathOptions?: InstallPathOptions;
38
- callbackOptions?: CallbackOptions;
26
+ directInstall?: boolean;
27
+ renderHtmlForInstallPath?: (url: string) => string;
28
+ stateStore?: StateStore;
29
+ stateVerification?: boolean;
30
+ legacyStateVerification?: boolean;
31
+ stateCookieName?: string;
32
+ stateCookieExpirationSeconds?: number;
33
+ authVersion?: "v1" | "v2";
34
+ clientOptions?: InstallProviderOptions["clientOptions"];
35
+ authorizationUrl?: string;
36
+ metadata?: string;
37
+ userScopes?: string[];
38
+ installPathOptions?: InstallPathOptions;
39
+ callbackOptions?: CallbackOptions;
39
40
  }
40
41
  /**
41
42
  * Configuration options for the VercelReceiver.
42
43
  */
43
44
  interface VercelReceiverOptions {
44
- /**
45
- * The signing secret for the Slack app.
46
- * @default process.env.SLACK_SIGNING_SECRET
47
- */
48
- signingSecret?: string;
49
- /**
50
- * If true, verifies the Slack request signature.
51
- * @default true
52
- */
53
- signatureVerification?: boolean;
54
- /**
55
- * The logger to use for the VercelReceiver.
56
- * @default new ConsoleLogger()
57
- */
58
- logger?: Logger;
59
- /**
60
- * The log level to use for the VercelReceiver.
61
- * @default LogLevel.INFO
62
- */
63
- logLevel?: LogLevel;
64
- /**
65
- * A function to extract custom properties from incoming events.
66
- * @default undefined
67
- * @returns An object with custom properties.
68
- */
69
- customPropertiesExtractor?: (req: Request) => StringIndexed;
70
- /**
71
- * The timeout in milliseconds for event acknowledgment.
72
- * @default 3001
73
- */
74
- ackTimeoutMs?: number;
75
- /**
76
- * Your app's client ID, found under Basic Information on api.slack.com.
77
- * Required for OAuth.
78
- * @default process.env.SLACK_CLIENT_ID
79
- */
80
- clientId?: string;
81
- /**
82
- * Your app's client secret, found under Basic Information on api.slack.com.
83
- * Required for OAuth.
84
- * @default process.env.SLACK_CLIENT_SECRET
85
- */
86
- clientSecret?: string;
87
- /**
88
- * Secret used to generate and verify the state parameter for OAuth CSRF protection.
89
- * Required unless a custom stateStore or stateVerification: false is provided.
90
- * @default process.env.SLACK_STATE_SECRET
91
- */
92
- stateSecret?: string;
93
- /**
94
- * The bot scopes to request during the OAuth flow.
95
- */
96
- scopes?: string[];
97
- /**
98
- * The redirect URI registered with your Slack app for OAuth callbacks.
99
- */
100
- redirectUri?: string;
101
- /**
102
- * Storage backend for OAuth installations (tokens, team info, etc.).
103
- * Required for OAuth in serverless -- the default in-memory store does not persist.
104
- */
105
- installationStore?: InstallProviderOptions["installationStore"];
106
- /**
107
- * Advanced options for the OAuth installer.
108
- */
109
- installerOptions?: VercelInstallerOptions;
45
+ /**
46
+ * The signing secret for the Slack app.
47
+ * @default process.env.SLACK_SIGNING_SECRET
48
+ */
49
+ signingSecret?: string;
50
+ /**
51
+ * If true, verifies the Slack request signature.
52
+ * @default true
53
+ */
54
+ signatureVerification?: boolean;
55
+ /**
56
+ * The logger to use for the VercelReceiver.
57
+ * @default new ConsoleLogger()
58
+ */
59
+ logger?: Logger;
60
+ /**
61
+ * The log level to use for the VercelReceiver.
62
+ * @default LogLevel.INFO
63
+ */
64
+ logLevel?: LogLevel;
65
+ /**
66
+ * A function to extract custom properties from incoming events.
67
+ * @default undefined
68
+ * @returns An object with custom properties.
69
+ */
70
+ customPropertiesExtractor?: (req: Request) => StringIndexed;
71
+ /**
72
+ * The timeout in milliseconds for event acknowledgment.
73
+ * @default 3001
74
+ */
75
+ ackTimeoutMs?: number;
76
+ /**
77
+ * Your app's client ID, found under Basic Information on api.slack.com.
78
+ * Required for OAuth.
79
+ * @default process.env.SLACK_CLIENT_ID
80
+ */
81
+ clientId?: string;
82
+ /**
83
+ * Your app's client secret, found under Basic Information on api.slack.com.
84
+ * Required for OAuth.
85
+ * @default process.env.SLACK_CLIENT_SECRET
86
+ */
87
+ clientSecret?: string;
88
+ /**
89
+ * Secret used to generate and verify the state parameter for OAuth CSRF protection.
90
+ * Required unless a custom stateStore or stateVerification: false is provided.
91
+ * @default process.env.SLACK_STATE_SECRET
92
+ */
93
+ stateSecret?: string;
94
+ /**
95
+ * The bot scopes to request during the OAuth flow.
96
+ */
97
+ scopes?: string[];
98
+ /**
99
+ * The redirect URI registered with your Slack app for OAuth callbacks.
100
+ */
101
+ redirectUri?: string;
102
+ /**
103
+ * Storage backend for OAuth installations (tokens, team info, etc.).
104
+ * Required for OAuth in serverless -- the default in-memory store does not persist.
105
+ */
106
+ installationStore?: InstallProviderOptions["installationStore"];
107
+ /**
108
+ * Advanced options for the OAuth installer.
109
+ */
110
+ installerOptions?: VercelInstallerOptions;
110
111
  }
111
112
  /**
112
113
  * A Slack Bolt receiver implementation designed for Vercel's serverless environment.
@@ -129,76 +130,90 @@ interface VercelReceiverOptions {
129
130
  *
130
131
  */
131
132
  declare class VercelReceiver implements Receiver {
132
- private readonly signingSecret;
133
- private readonly signatureVerification;
134
- private readonly logger;
135
- private readonly customPropertiesExtractor?;
136
- private readonly ackTimeoutMs;
137
- private app?;
138
- installer?: InstallProvider;
139
- private installUrlOptions?;
140
- private installCallbackOptions?;
141
- private installPathOptions?;
142
- private stateVerification?;
143
- /**
144
- * Gets the logger instance used by this receiver.
145
- * @returns The logger instance
146
- */
147
- getLogger(): Logger;
148
- /**
149
- * Creates a new VercelReceiver instance.
150
- *
151
- * @param options - Configuration options for the receiver
152
- * @throws {VercelReceiverError} When signing secret is not provided
153
- *
154
- * @example
155
- * ```typescript
156
- * const receiver = new VercelReceiver();
157
- * ```
158
- */
159
- constructor({ signingSecret, signatureVerification, logger, logLevel, customPropertiesExtractor, ackTimeoutMs, clientId, clientSecret, stateSecret, scopes, redirectUri, installationStore, installerOptions, }?: VercelReceiverOptions);
160
- /**
161
- * Initializes the receiver with a Slack Bolt app instance.
162
- * This method is called automatically by the Bolt framework.
163
- *
164
- * @param app - The Slack Bolt app instance
165
- */
166
- init(app: App): void;
167
- /**
168
- * Starts the receiver and returns a handler function for processing requests.
169
- * This method is called automatically by the Bolt framework.
170
- *
171
- * @returns A handler function that processes incoming Slack requests
172
- */
173
- start(): Promise<VercelHandler>;
174
- /**
175
- * Stops the receiver. This method is called automatically by the Bolt framework.
176
- */
177
- stop(): Promise<void>;
178
- /**
179
- * Handles requests to the OAuth install path.
180
- * Renders an "Add to Slack" page or redirects directly to Slack's authorize URL.
181
- */
182
- handleInstall: (req: Request) => Promise<Response>;
183
- /**
184
- * Handles the OAuth redirect callback from Slack.
185
- * Exchanges the authorization code for tokens and stores the installation.
186
- */
187
- handleCallback: (req: Request) => Promise<Response>;
188
- /**
189
- * Creates a handler function that processes incoming Slack requests.
190
- * This is the main entry point for handling Slack events in Vercel.
191
- * It is called automatically by the Bolt framework in the start() method.
192
- *
193
- * @returns A handler function compatible with Vercel's function signature
194
- */
195
- toHandler(): VercelHandler;
196
- private parseRequestBody;
197
- private handleSlackEvent;
198
- private verifyRequest;
199
- private createSlackReceiverEvent;
200
- handleError(error: unknown): Response;
201
- private createScopedLogger;
133
+ private readonly signingSecret;
134
+ private readonly signatureVerification;
135
+ private readonly logger;
136
+ private readonly customPropertiesExtractor?;
137
+ private readonly ackTimeoutMs;
138
+ private app?;
139
+ installer?: InstallProvider;
140
+ private installUrlOptions?;
141
+ private installCallbackOptions?;
142
+ private installPathOptions?;
143
+ private stateVerification?;
144
+ /**
145
+ * Gets the logger instance used by this receiver.
146
+ * @returns The logger instance
147
+ */
148
+ getLogger(): Logger;
149
+ /**
150
+ * Creates a new VercelReceiver instance.
151
+ *
152
+ * @param options - Configuration options for the receiver
153
+ * @throws {VercelReceiverError} When signing secret is not provided
154
+ *
155
+ * @example
156
+ * ```typescript
157
+ * const receiver = new VercelReceiver();
158
+ * ```
159
+ */
160
+ constructor({
161
+ signingSecret,
162
+ signatureVerification,
163
+ logger,
164
+ logLevel,
165
+ customPropertiesExtractor,
166
+ ackTimeoutMs,
167
+ clientId,
168
+ clientSecret,
169
+ stateSecret,
170
+ scopes,
171
+ redirectUri,
172
+ installationStore,
173
+ installerOptions
174
+ }?: VercelReceiverOptions);
175
+ /**
176
+ * Initializes the receiver with a Slack Bolt app instance.
177
+ * This method is called automatically by the Bolt framework.
178
+ *
179
+ * @param app - The Slack Bolt app instance
180
+ */
181
+ init(app: App): void;
182
+ /**
183
+ * Starts the receiver and returns a handler function for processing requests.
184
+ * This method is called automatically by the Bolt framework.
185
+ *
186
+ * @returns A handler function that processes incoming Slack requests
187
+ */
188
+ start(): Promise<VercelHandler>;
189
+ /**
190
+ * Stops the receiver. This method is called automatically by the Bolt framework.
191
+ */
192
+ stop(): Promise<void>;
193
+ /**
194
+ * Handles requests to the OAuth install path.
195
+ * Renders an "Add to Slack" page or redirects directly to Slack's authorize URL.
196
+ */
197
+ handleInstall: (req: Request) => Promise<Response>;
198
+ /**
199
+ * Handles the OAuth redirect callback from Slack.
200
+ * Exchanges the authorization code for tokens and stores the installation.
201
+ */
202
+ handleCallback: (req: Request) => Promise<Response>;
203
+ /**
204
+ * Creates a handler function that processes incoming Slack requests.
205
+ * This is the main entry point for handling Slack events in Vercel.
206
+ * It is called automatically by the Bolt framework in the start() method.
207
+ *
208
+ * @returns A handler function compatible with Vercel's function signature
209
+ */
210
+ toHandler(): VercelHandler;
211
+ private parseRequestBody;
212
+ private handleSlackEvent;
213
+ private verifyRequest;
214
+ private createSlackReceiverEvent;
215
+ handleError(error: unknown): Response;
216
+ private createScopedLogger;
202
217
  }
203
218
  /**
204
219
  * Creates a Vercel-compatible handler function for a Slack Bolt app.
@@ -225,5 +240,6 @@ declare class VercelReceiver implements Receiver {
225
240
  * @throws {VercelReceiverError} If request processing fails.
226
241
  */
227
242
  declare function createHandler(app: App, receiver: VercelReceiver): VercelHandler;
228
-
229
- export { type VercelHandler, type VercelInstallerOptions, VercelReceiver, type VercelReceiverOptions, createHandler };
243
+ //#endregion
244
+ export { VercelHandler, VercelInstallerOptions, VercelReceiver, VercelReceiverOptions, createHandler };
245
+ //# sourceMappingURL=index.d.mts.map