diff --git a/README.md b/README.md index 1145d79ed..9d097dfdf 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ [![codecov](https://codecov.io/gh/slackapi/bolt-js/branch/main/graph/badge.svg?token=x4oCgiexvp)](https://codecov.io/gh/slackapi/bolt-js) [![Node.js CI](https://github.com/slackapi/bolt-js/actions/workflows/ci-build.yml/badge.svg)](https://github.com/slackapi/bolt-js/actions/workflows/ci-build.yml) -A JavaScript framework to build Slack apps in a flash with the latest platform features. Read the [getting started guide](https://tools.slack.dev/bolt-js/tutorial/getting-started) to set-up and run your first Bolt app. +A JavaScript framework to build Slack apps in a flash with the latest platform features. Read the [getting started guide](https://tools.slack.dev/bolt-js/getting-started) to set-up and run your first Bolt app. Read [the documentation](https://tools.slack.dev/bolt-js) to explore the basic and advanced concepts of Bolt for JavaScript. diff --git a/app.json b/app.json index 9fbfca175..ee4bd0913 100644 --- a/app.json +++ b/app.json @@ -4,7 +4,7 @@ "keywords": ["slack", "heroku", "nodejs", "bolt", "bolt-js", "javascript"], "logo": "https://raw.githubusercontent.com/slackapi/bolt-js/main/docs/assets/bolt-logo.svg", "image": "heroku/nodejs", - "website": "https://slack.dev/bolt-js/", + "website": "https://tools.slack.dev/bolt-js/", "repository": "https://github.com/slackapi/bolt-js", "success_url": "/", "env": { diff --git a/docs/content/concepts/assistant.md b/docs/content/concepts/assistant.md index 7a878220e..12b3dd369 100644 --- a/docs/content/concepts/assistant.md +++ b/docs/content/concepts/assistant.md @@ -57,7 +57,7 @@ While the `assistant_thread_started` and `assistant_thread_context_changed` even If you do provide your own `threadContextStore` property, it must feature `get` and `save` methods. :::tip -Be sure to give the [assistants reference docs](/reference#assistants) a look! +Be sure to give the [assistants reference docs](/reference#agents--assistants) a look! ::: ## Handling a new thread {#handling-new-thread} diff --git a/docs/content/concepts/authenticating-oauth.md b/docs/content/concepts/authenticating-oauth.md index 1e074ae96..c9a2de266 100644 --- a/docs/content/concepts/authenticating-oauth.md +++ b/docs/content/concepts/authenticating-oauth.md @@ -324,7 +324,7 @@ stored for later lookup. This happens in the terms of installation objects and an installation store. The following outlines installations to individual workspaces with more -[information on org-wide installations](#org-wide-installation) below. +[information on org-wide installations](#org-wide-installations) below. #### Installation objects diff --git a/docs/content/deployments/aws-lambda.md b/docs/content/deployments/aws-lambda.md index ec56b6a70..8c8a5865e 100644 --- a/docs/content/deployments/aws-lambda.md +++ b/docs/content/deployments/aws-lambda.md @@ -89,7 +89,7 @@ You're now set up with the Serverless tools! Let's move on to preparing your Bol ## Get a Bolt Slack app {#get-a-bolt-slack-app} -If you haven't already built your own Bolt app, you can use our [Getting Started guide](/getting-started or clone the template app below: +If you haven't already built your own Bolt app, you can use our [Getting Started guide](/getting-started) or clone the template app below: ```shell git clone https://github.com/slackapi/bolt-js-getting-started-app.git diff --git a/docs/content/legacy/hubot-migration.md b/docs/content/legacy/hubot-migration.md index d29c40ad6..e016c400f 100644 --- a/docs/content/legacy/hubot-migration.md +++ b/docs/content/legacy/hubot-migration.md @@ -50,7 +50,7 @@ The [Events API](https://api.slack.com/bot-users#app-mentions-response) is a bot :::info -Before you configure your bot’s events, you’ll need a public URL. If you’ve never created a Bolt for JavaScript app or never used the Events API, it’d be helpful to go through [setting up your local Bolt project](/getting-started) and [setting up events](https://tools.slack.dev/getting-started#setting-up-events) in the Getting Started guide. +Before you configure your bot’s events, you’ll need a public URL. If you’ve never created a Bolt for JavaScript app or never used the Events API, it’d be helpful to go through [setting up your local Bolt project](/getting-started) and [setting up events](/getting-started#setting-up-events) in the Getting Started guide. ::: diff --git a/docs/content/reference.md b/docs/content/reference.md index 25bc14fc7..e9cca7635 100644 --- a/docs/content/reference.md +++ b/docs/content/reference.md @@ -22,7 +22,7 @@ Below is the current list of methods that accept listener functions. These metho | `app.action(actionId, fn);` | Listens for an action event from a Block Kit element, such as a user interaction with a button, select menu, or datepicker. The `actionId` identifier is a `string` that should match the unique `action_id` included when your app sends the element to a view. Note that a view can be a message, modal, or app home. Note that action elements included in an `input` block do not trigger any events. | `app.shortcut(callbackId, fn);` | Listens for global or message shortcut invocation. The `callbackId` is a `string` or `RegExp` that must match a shortcut `callback_id` specified within your app's configuration. | `app.view(callbackId, fn);` | Listens for `view_submission` and `view_closed` events. `view_submission` events are sent when a user submits a modal that your app opened. `view_closed` events are sent when a user closes the modal rather than submits it. -| `app.step(workflowStep)` | Listen and responds to steps from apps events using the callbacks passed in an instance of `WorkflowStep`. Callbacks include three callbacks: `edit`, `save`, and `execute`. More information on steps from apps can be found [in the documentation](/concepts/steps-from-apps). +| `app.step(workflowStep)` | Listen and responds to steps from apps events using the callbacks passed in an instance of `WorkflowStep`. Callbacks include three callbacks: `edit`, `save`, and `execute`. More information on steps from apps can be found [in the documentation](/legacy/steps-from-apps). | `app.command(commandName, fn);` | Listens for slash command invocations. The `commandName` is a `string` that must match a slash command specified in your app's configuration. Slash command names should be prefaced with a `/` (ex: `/helpdesk`). | `app.options(actionId, fn);` | Listens for options requests (from select menus with an external data source). This isn't often used, and shouldn't be mistaken with `app.action`. The `actionId` identifier is a `string` that matches the unique `action_id` included when you app sends a [select with an external data source](https://api.slack.com/reference/block-kit/block-elements#external_select). @@ -41,9 +41,9 @@ Listener functions have access to a set of arguments that may change based on th | Argument | Listener | Description | | :--- | :--- | :--- | -| `payload` | All listeners | The unwrapped contents of the incoming event, which varies based on event. This is a subset of the information included in `body` which is detailed below. `payload` is also accessible via the alias corresponding to the method name that the listener is passed to (`message`, `event`, `action`, `shortcut`, `view`, `command`, `options`) **An easy way to understand what's in a payload is to log it**, or [use TypeScript](/tutorial/using-typescript). | +| `payload` | All listeners | The unwrapped contents of the incoming event, which varies based on event. This is a subset of the information included in `body` which is detailed below. `payload` is also accessible via the alias corresponding to the method name that the listener is passed to (`message`, `event`, `action`, `shortcut`, `view`, `command`, `options`) **An easy way to understand what's in a payload is to log it**, or [use TypeScript](https://github.com/slackapi/bolt-js/tree/main/examples/getting-started-typescript). | | `say` | `message`, `event`, `action` `command` | Function to send a message to the channel associated with the incoming event. This argument is only available when the listener is triggered for events that contain a channel ID (the most common being `message` events). `say` accepts simple strings (for plain-text messages) and objects (for messages containing blocks). `say` returns a promise that will resolve with a [`chat.postMessage` response](https://api.slack.com/methods/chat.postMessage). If you're using an the `action` method, or an event other than `message`, you should [ensure that the event payload contains a channel ID](https://api.slack.com/events). | -| `ack` | `action`, `shortcut`, `view`, `command`, `options` | Function that **must** be called to acknowledge that an incoming event was received by your app. `ack` returns a promise that resolves when complete. Read more in [Acknowledging events](/concepts/acknowledging-events) | +| `ack` | `action`, `shortcut`, `view`, `command`, `options` | Function that **must** be called to acknowledge that an incoming event was received by your app. `ack` returns a promise that resolves when complete. Read more in [Acknowledging requests](/concepts/acknowledge) | | `client` | All listeners | Web API client that uses the token associated with that event. For single-workspace installations, the token is provided to the constructor. For multi-workspace installations, the token is returned by the `authorize` function. | | `respond` | `action`, `shortcut`, `view`, `command` | Function that responds to an incoming event **if** it contains a `response_url`. `respond` returns a promise that resolves with the results of responding using the `response_url`. For shortcuts, `respond` will **only** work for message shortcuts (not global shortcuts). For views, `respond` will **only** work when using `response_url_enabled: true` for [conversations list](https://api.slack.com/reference/block-kit/block-elements#conversation_select) and [channels list](https://api.slack.com/reference/block-kit/block-elements#channel_select) select menus in input blocks in modals. | | `context` | All listeners | Event context. This object contains data about the event and the app, such as the `botId`. Middleware can add additional context before the event is passed to listeners. | @@ -74,7 +74,7 @@ app.message(matchMessage('hello'), async ({ message, logger }) => { }); ``` -These middleware functions are divided into two groups: [global middleware functions](concepts/global-middleware) and [listener middleware functions](concepts/listener-middleware). +These middleware functions are divided into two groups: [global middleware functions](/concepts/global-middleware) and [listener middleware functions](/concepts/listener-middleware). ### Built-in global middleware functions @@ -184,7 +184,7 @@ Bolt includes a set of error types to make errors easier to handle, with more sp | `ReceiverMultipleAckError` | Error thrown within Receiver when your app calls `ack()` when that request has previously been acknowledged. Currently only used in the default `HTTPReceiver`. | | `ReceiverAuthenticityError` | Error thrown when your app's request signature could not be verified. The error includes information on why it failed, such as an invalid timestamp, missing headers, or invalid signing secret. | `MultipleListenerError` | Thrown when multiple errors occur when processing multiple listeners for a single event. Includes an `originals` property with an array of the individual errors. | -| `WorkflowStepInitializationError` | Error thrown when configuration options are invalid or missing when instantiating a new `WorkflowStep` instance. This could be scenarios like not including a `callback_id`, or not including a configuration object. More information on steps from apps [can be found in the documentation](/concepts/steps-from-apps). | +| `WorkflowStepInitializationError` | Error thrown when configuration options are invalid or missing when instantiating a new `WorkflowStep` instance. This could be scenarios like not including a `callback_id`, or not including a configuration object. More information on steps from apps [can be found in the documentation](/legacy/steps-from-apps). | | `UnknownError` | An error that was thrown inside the framework but does not have a specified error code. Contains an `original` property with more details. | :::info diff --git a/docs/content/tutorials/ai-assistant.md b/docs/content/tutorials/ai-assistant.md index 3a57d9329..58c8d9dae 100644 --- a/docs/content/tutorials/ai-assistant.md +++ b/docs/content/tutorials/ai-assistant.md @@ -378,7 +378,7 @@ This sample app uses Socket Mode to receive events. This is great for developing ### Learn more {#learn} -➡️ Read more about Bolt support for app assistants in the Agents & Assistants documentation [here](https://tools.slack.dev/bolt-js/concepts/assistant). +➡️ Read more about Bolt support for app assistants in the Agents & Assistants documentation [here](/concepts/assistant). ➡️ Level up your agent game after reading through the [Agents & Assistants usage guide](https://api.slack.com/docs/apps/ai) and [Best practices for developing app agents](https://api.slack.com/docs/apps/ai-best-practices). diff --git a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/deployments/aws-lambda.md b/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/deployments/aws-lambda.md index 5a266eb60..3257497a6 100644 --- a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/deployments/aws-lambda.md +++ b/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/deployments/aws-lambda.md @@ -241,7 +241,7 @@ ngrok http 3000 :::tip -パブリック URL の作成方法と、ローカルマシンへのリクエストの転送方法については、[ngrok の使い方](https://tools.slack.dev/bolt-js/getting-started#setting-up-events)を参照してください。 +パブリック URL の作成方法と、ローカルマシンへのリクエストの転送方法については、[ngrok の使い方](/getting-started#setting-up-events)を参照してください。 ::: diff --git a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/reference.md b/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/reference.md index 039ebd81a..62e4b5570 100644 --- a/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/reference.md +++ b/docs/i18n/ja-jp/docusaurus-plugin-content-docs/current/reference.md @@ -20,7 +20,7 @@ Slack アプリは通常、Slack からのイベント情報を受け取った | `app.action(actionId, fn);` | Block Kit エレメントから送信される `action` イベントをリッスンします。このイベントにはユーザーのボタン操作、メニュー選択、日付ピッカーの操作などがあります。`actionId` は文字列型で、アプリがビュー内に含めたブロックエレメントに指定した一意の `action_id` の値と一致する必要があります。ここでいう「ビュー」とは、メッセージ、モーダル、アプリのホームタブのことを指します。アクションエレメントを `input` ブロックに配置した場合はイベントがトリガーされないことに注意してください。 | `app.shortcut(callbackId, fn);` | グローバルショートカットまたはメッセージショートカットの呼び出しをリッスンします。`callbackId` は文字列または正規表現で、アプリの設定で指定したショートカットの `callback_id` にマッチする必要があります。 | `app.view(callbackId, fn);` | `view_submission` イベントと `view_closed` イベントをリッスンします。`view_submission` イベントは、アプリが開いたモーダルでユーザーがデータ送信の操作をしたときに発生します。`view_closed` イベントは、ユーザーがデータ送信を実行せずにモーダルを閉じたときに発生します。 -| `app.step(workflowStep)` | `WorkflowStep` のインスタンスに渡されたコールバックを使用して、ワークフローステップイベントのリッスンと応答を行います。コールバックには `edit`、`save`、`execute` の 3 種類があります。ワークフローステップについて詳しくは、[ドキュメント](/concepts/steps-from-apps)を参照してください。 +| `app.step(workflowStep)` | `WorkflowStep` のインスタンスに渡されたコールバックを使用して、ワークフローステップイベントのリッスンと応答を行います。コールバックには `edit`、`save`、`execute` の 3 種類があります。ワークフローステップについて詳しくは、[ドキュメント](/legacy/steps-from-apps)を参照してください。 | `app.command(commandName, fn);` | Slash コマンドの呼び出しをリッスンします。`commandName` は文字列型で、アプリの設定で指定したスラッシュコマンドと一致する必要があります。スラッシュコマンドの名前では `/` を最初に配置します(例 : `/helpdesk`)。 | `app.options(actionId, fn);` | 外部データソースを使用するセレクトメニューなどから送られる選択肢読み込みのリクエストをリッスンします。使う機会は多くありませんが、`app.action` と混同しないようにしましょう。`actionId` は文字列型で、アプリがビュー内に[外部データソースを使用するセレクトメニュー](https://api.slack.com/reference/block-kit/block-elements#external_select)を含めるときに指定した`action_id` と一致する必要があります。 @@ -39,9 +39,9 @@ Slack アプリは通常、Slack からのイベント情報を受け取った | 引数 | リスナー | 説明 | | :--- | :--- | :--- | -| `payload` | すべてのリスナー | 受信したイベントペイロードから装飾部分などが取り除かれた本質的な内容部分。この内容や構造はイベントの種別によって異なります。このペイロード情報は下記の `body`のサブセットです。また、`payload` には、リスナーが渡されたメソッド名と同じ名前のエイリアスを使ってアクセスすることもできます(`message`、`event`、`action`、`shortcut`、`view`、`command`、`options`)。**payload の内容を簡単に確認する方法は、それを実際にログに出力してみることです**。または、[TypeScript](/tutorial/using-typescript) を使うのもよいでしょう。 | +| `payload` | すべてのリスナー | 受信したイベントペイロードから装飾部分などが取り除かれた本質的な内容部分。この内容や構造はイベントの種別によって異なります。このペイロード情報は下記の `body`のサブセットです。また、`payload` には、リスナーが渡されたメソッド名と同じ名前のエイリアスを使ってアクセスすることもできます(`message`、`event`、`action`、`shortcut`、`view`、`command`、`options`)。**payload の内容を簡単に確認する方法は、それを実際にログに出力してみることです**。または、[TypeScript](https://github.com/slackapi/bolt-js/tree/main/examples/getting-started-typescript) を使うのもよいでしょう。 | | `say` | `message`, `event`, `action`, `command` | 受信したイベントが紐づいているチャンネルにメッセージを送信する関数。この引数が使用できるのは、リスナーをトリガーしたイベントにチャンネル ID が含まれる場合のみです(`message` イベントが最も一般的です)。`say` は、シンプルな文字列(プレーンテキストのメッセージ)またはオブジェクト(ブロックを含むメッセージ)を受け付けます。`say` は Promise を返します。この Promise は [`chat.postMessage` の応答でresolveされます](https://api.slack.com/methods/chat.postMessage)。もし`action` メソッドや、`message` 以外のイベントを使用する場合は、[イベントの payload にチャンネル ID が含まれているかを確認するようにしてください](https://api.slack.com/events)。 | -| `ack` | `action`, `shortcut`, `view`, `command`, `options` | アプリが受信イベントを受け取ったことを確認するために呼び出す**必要のある関数**。`ack` は応答の完了時にresolveする Promise を返します。詳しくは、[イベントの確認](#acknowledging-events)を参照してください。 | +| `ack` | `action`, `shortcut`, `view`, `command`, `options` | アプリが受信イベントを受け取ったことを確認するために呼び出す**必要のある関数**。`ack` は応答の完了時にresolveする Promise を返します。詳しくは、[イベントの確認](/concepts/acknowledge)を参照してください。 | | `client` | すべてのリスナー | イベントに関連づけられたトークンを使用する Web API クライアント。単一のワークスペースへのインストールでは、トークンは Appのコンストラクターに提供されます。複数のワークスペースへのインストールでは、トークンは `authorize` 関数から返されます。| | `respond` | `action`, `shortcut`, `view`, `command` | 受信イベントに `response_url` が**含まれる場合**に、受信イベントに応答を返す関数。`respond` は Promise を返します。この Promise は、`response_url` の応答結果に resolveされます。ショートカットに関しては、`respond` はメッセージショートカットで**のみ**動作します(グローバルショートカットでは動作しません)。ビューでの `respond` は モーダル内の input ブロックの [conversations list](https://api.slack.com/reference/block-kit/block-elements#conversation_select) や [channels list](https://api.slack.com/reference/block-kit/block-elements#channel_select) のセレクトメニューで `response_url_enabled: true` というオプションが指定されている場合**のみ**動作します。 | | `context` | すべてのリスナー | イベントのコンテキスト。このオブジェクトは、`botId` など、イベントやアプリに関するデータを保持します。イベントがリスナーに渡される前に、ミドルウェアで他のコンテキスト情報を追加することもできます。 | @@ -125,7 +125,7 @@ Bolt では、さまざまなエラーが定義されています。これらに | `ReceiverMultipleAckError` | Receiver 内で、すでに確認が済んでいるリクエストに対してアプリがさらに `ack()` を呼んだ場合にスローされるエラーです。現在、デフォルトの `HTTPReceiver` でのみ使用されます。 | | `ReceiverAuthenticityError` | アプリのリクエストの署名が検証できないときにスローされるエラーです。このエラーには、失敗した理由を示す情報が含まれます(例 : タイムスタンプが有効でない、ヘッダーに抜けがある、署名シークレットが有効でない)。 | `MultipleListenerError` | 単一のイベントに対して複数のリスナーでの処理中に複数のエラーが発生した場合にスローされるエラーです。個々のエラーを配列に収めた `originals` プロパティを持ちます。 | -| `WorkflowStepInitializationError` | 新しい `WorkflowStep` をインスタンス化する際に、設定オプションが無効な場合、または不足している場合にスローされるエラーです。原因として、`callback_id` が指定されていない、または設定オブジェクトが指定されていないことが考えられます。ワークフローステップについて詳しくは、[ドキュメント](/concepts/steps-from-apps)を参照してください。 | +| `WorkflowStepInitializationError` | 新しい `WorkflowStep` をインスタンス化する際に、設定オプションが無効な場合、または不足している場合にスローされるエラーです。原因として、`callback_id` が指定されていない、または設定オブジェクトが指定されていないことが考えられます。ワークフローステップについて詳しくは、[ドキュメント](/legacy/steps-from-apps)を参照してください。 | | `UnknownError` | フレームワーク内でスローされる、特定のエラーコードを持たないエラーです。`original` プロパティで詳細を確認できます。 | > [errors.ts](https://github.com/slackapi/bolt-js/blob/main/src/errors.ts) のコードで、エラー定義の部分とコンストラクターの部分を読み、参考にしてみてください。 diff --git a/examples/deploy-aws-lambda/README.md b/examples/deploy-aws-lambda/README.md index 0a66bc7aa..b6ab273a9 100644 --- a/examples/deploy-aws-lambda/README.md +++ b/examples/deploy-aws-lambda/README.md @@ -137,9 +137,9 @@ Follow the steps to [test your app](#6-test-your-slack-app). [aws-cli-configure-user]: https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html#cli-configure-quickstart-creds [aws-lambda]: https://aws.amazon.com/lambda/ [bolt-app]: https://github.com/slackapi/bolt-js-getting-started-app -[bolt-guide]: https://slack.dev/bolt-js/tutorial/getting-started -[bolt-guide-aws-lambda]: https://slack.dev/bolt-js/deployments/aws-lambda -[bolt-website]: https://slack.dev/bolt-js/ +[bolt-guide]: https://tools.slack.dev/bolt-js/getting-started/ +[bolt-guide-aws-lambda]: https://tools.slack.dev/bolt-js/deployments/aws-lambda/ +[bolt-website]: https://tools.slack.dev/bolt-js/ [ngrok-install]: https://api.slack.com/tutorials/tunneling-with-ngrok [serverless-framework]: https://serverless.com/ [serverless-install]: https://www.serverless.com/framework/docs/getting-started/ diff --git a/examples/deploy-heroku/README.md b/examples/deploy-heroku/README.md index ef7493967..dbe7de280 100644 --- a/examples/deploy-heroku/README.md +++ b/examples/deploy-heroku/README.md @@ -59,7 +59,7 @@ heroku ps:scale web=1 [![Deploy](https://www.herokucdn.com/deploy/button.svg)](https://heroku.com/deploy?template=https://github.com/slackapi/bolt-js) -[1]: https://slack.dev/bolt-js/deployments/heroku -[2]: https://slack.dev/bolt-js/ +[1]: https://tools.slack.dev/bolt-js/deployments/heroku/ +[2]: https://tools.slack.dev/bolt-js/ [3]: https://heroku.com/ -[4]: https://slack.dev/bolt-js/tutorial/getting-started \ No newline at end of file +[4]: https://tools.slack.dev/bolt-js/getting-started diff --git a/examples/getting-started-typescript/README.md b/examples/getting-started-typescript/README.md index 89ee11ade..2e753e417 100644 --- a/examples/getting-started-typescript/README.md +++ b/examples/getting-started-typescript/README.md @@ -4,5 +4,5 @@ This is a temporary example app intending to show how to work with Bolt's type system. Because the type system is currently lacking, this app will change in the future. See [#826][2] for more context. -[1]: https://slack.dev/bolt-js/tutorial/getting-started +[1]: https://tools.slack.dev/bolt-js/getting-started [2]: https://github.com/slackapi/bolt-js/issues/826 diff --git a/package.json b/package.json index f922d204e..bfc2bda1f 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,7 @@ "watch": "npx nodemon --watch 'src' --ext 'ts' --exec npm run build" }, "repository": "slackapi/bolt", - "homepage": "https://slack.dev/bolt-js", + "homepage": "https://tools.slack.dev/bolt-js", "bugs": { "url": "https://github.com/slackapi/bolt-js/issues" }, diff --git a/src/App.ts b/src/App.ts index f346a11da..e937eefe1 100644 --- a/src/App.ts +++ b/src/App.ts @@ -1301,7 +1301,7 @@ export default class App if (authorize === undefined && !usingOauth) { 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://slack.dev/bolt-js/concepts/authenticating-oauth for these required fields.\n`, + `${tokenUsage} \n\nSince you have not provided a token or authorize, you might be missing one or more required oauth installer options. See https://tools.slack.dev/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) { diff --git a/test/types/options.test-d.ts b/test/types/options.test-d.ts index 07abe7478..9a45d7c91 100644 --- a/test/types/options.test-d.ts +++ b/test/types/options.test-d.ts @@ -58,7 +58,7 @@ const db = { }, }; -// Taken from https://slack.dev/bolt-js/concepts#options +// Taken from https://tools.slack.dev/bolt-js/concepts/options // Example of responding to an external_select options request app.options('external_action', async ({ options, ack }) => { // Get information specific to a team or channel