メインコンテンツまでスキップ
バージョン: 0.14.0 (以前)

✅ チャットバリデーター

チャットルートは、ローカルガードと共通の認証、所有権、組織バリデーターを組み合わせます。以下の各利用箇所は、完全な呼び出しと実行順序を確認できる正規のルート定義にリンクしています。

一覧​

バリデーター読み取る値成功条件失敗 / エラー利用箇所
getSubscriptionByChannelAndSubscriber(...)db.subscriptions、channelId、subscribedId一致するサブスクリプションドキュメント、または null を含む ResultAsync が解決されます。未知のデータベース拒否を Err にそのまま保持します。hasSubscription(path, subscriberPath?)。
channelExists(path)db.chatChannels と構成済みのペイロードパス解決した ID を持つチャンネルが存在します。コレクションの欠落またはクエリ失敗時は 500、存在しない場合は 404。getChannelMessagesRoute、upsertChatChannelReadStateRoute。
hasSubscription(path, subscriberPath?)構成済みのトークン抽出子、db.subscriptions、チャンネルパス、省略可能な購読者パス解決した (channelId, subscribedId) のサブスクリプションが存在します。無効なトークンは 401、ID 欠落は 400、サブスクリプション不在は 403、ストア欠落またはクエリ失敗は 500。getChatChannelRoute、getChannelMessagesRoute、createChatMessageRoute、findChatMessagesRoute、upsertChatChannelReadStateRoute、findChatSubscriptionsRoute。
hasOrganizationAccessToMessageTemplate(allowedRoles, path)トークン、テンプレートおよび組織ストア、許可ロール、テンプレート ID パステンプレートが、アイデンティティに許可ロールのある組織に属します。無効なトークンは 401、グローバル専用テンプレートまたは許可されないメンバーは 403、テンプレートまたは組織の不在は 404、ストア欠落は 500。getChatMessageTemplateRoute、updateChatMessageTemplateRoute、deleteChatMessageTemplateRoute。
isAuthenticated()構成済みの Bearer または Cookie トークン抽出子アクセストークンが有効です。共通の認証エラー。通常は 401。createChatChannelRoute、findChatChannelsRoute、getChatChannelRoute、updateChatChannelRoute、deleteChatChannelRoute、getChannelMessagesRoute、getChatChannelIconUploadUrlRoute、createChatMessageTemplateRoute、getChatMessageTemplateRoute、updateChatMessageTemplateRoute、deleteChatMessageTemplateRoute、findChatMessageTemplatesRoute、findChatMessageTemplatesForOrganizationRoute、createChatMessageRoute、findChatMessagesRoute、getChatMessageRoute、updateChatMessageRoute、deleteChatMessageRoute、getChatMessageAttachmentUploadUrlRoute、createChatMessageAttachmentRoute、deleteChatMessageAttachmentRoute、upsertChatChannelReadStateRoute、createChatSubscriptionRoute、findChatSubscriptionsRoute、getChatSubscriptionRoute、deleteChatSubscriptionRoute。現在の streamChatMessagesRoute ではこのバリデーターを組み合わせていません。
checkIdentityType(types)トークンのアイデンティティ、アイデンティティストア、許可された構成済みタイプ名認証済みアイデンティティが許可タイプを持ちます。共通の認証・アイデンティティ検索・認可エラー。createChatChannelRoute、findChatChannelsRoute、getChatChannelRoute、updateChatChannelRoute、deleteChatChannelRoute、getChatChannelIconUploadUrlRoute、createChatMessageTemplateRoute、getChatMessageTemplateRoute、updateChatMessageTemplateRoute、deleteChatMessageTemplateRoute、findChatMessageTemplatesRoute、findChatMessagesRoute、getChatMessageRoute、deleteChatMessageRoute、deleteChatMessageAttachmentRoute、createChatSubscriptionRoute、findChatSubscriptionsRoute、getChatSubscriptionRoute、deleteChatSubscriptionRoute。
isSelf(path)トークンのアイデンティティと構成済みのペイロードパスペイロード値が認証済みアイデンティティ ID と一致します。共通の認証および自己認可エラー。createChatChannelRoute、findChatChannelsRoute、createChatMessageRoute、findChatMessagesRoute、upsertChatChannelReadStateRoute、createChatSubscriptionRoute、findChatSubscriptionsRoute。
ownsChannel(path)トークンのアイデンティティ、db.chatChannels、チャンネル ID パスチャンネルの ownerId がアイデンティティ ID と一致します。共通のリソース検索および所有権エラー。getChatChannelRoute、updateChatChannelRoute、deleteChatChannelRoute、getChatChannelIconUploadUrlRoute、findChatSubscriptionsRoute。
ownsMessage(path)トークンのアイデンティティ、db.chatMessages、メッセージ ID パスメッセージの senderId がアイデンティティ ID と一致します。共通のリソース検索および所有権エラー。getChatMessageRoute、updateChatMessageRoute、deleteChatMessageRoute、getChatMessageAttachmentUploadUrlRoute、createChatMessageAttachmentRoute、deleteChatMessageAttachmentRoute。
ownsSubscription(path)トークンのアイデンティティ、db.subscriptions、サブスクリプション ID パスサブスクリプションの subscribedId がアイデンティティ ID と一致します。共通のリソース検索および所有権エラー。getChatSubscriptionRoute、deleteChatSubscriptionRoute。
hasOrgRole(roles, path)トークンのアイデンティティ、組織ストア、構成済みロール ID、組織 ID パスアイデンティティが許可された組織ロールのいずれかを持ちます。共通の組織検索および認可エラー。createChatMessageTemplateRoute、findChatMessageTemplatesForOrganizationRoute。
some(...)子バリデーターからの結果またはエラー少なくとも 1 つの子認可分岐が成功します。すべての子分岐が失敗した後に再スローします。createChatChannelRoute、findChatChannelsRoute、getChatChannelRoute、updateChatChannelRoute、deleteChatChannelRoute、getChatChannelIconUploadUrlRoute、createChatMessageTemplateRoute、getChatMessageTemplateRoute、updateChatMessageTemplateRoute、deleteChatMessageTemplateRoute、findChatMessagesRoute、getChatMessageRoute、deleteChatMessageRoute、deleteChatMessageAttachmentRoute、createChatSubscriptionRoute、findChatSubscriptionsRoute、getChatSubscriptionRoute、deleteChatSubscriptionRoute。

詳細​

getSubscriptionByChannelAndSubscriber(...)​

実装

このヘルパーは MongoDB のサブスクリプションコレクション、channelId、および subscribedId を受け取ります。これらの文字列値をクエリし、データベース拒否を変換せずに ResultAsync<WithId<Document> | null, unknown> を返します。これはルートバリデーター自体ではなく、SDK 内での利用箇所は hasSubscription(path, subscriberPath?) のみです。

channelExists(path)​

実装

シグネチャ: channelExists(path): Validator。このファクトリーはペイロードパスからチャンネル ID を読み取り、context.db.chatChannels をクエリします。両方の利用箇所は ['params', 'requestParams', 'channelId'] を渡します。パイプラインデータを追加せずに成功し、コレクション欠落またはクエリ失敗時には 500、チャンネルが存在しない場合には 404 をスローします。

利用箇所: getChannelMessagesRoute および upsertChatChannelReadStateRoute。

hasSubscription(path, subscriberPath?)​

実装

シグネチャ: hasSubscription(path, subscriberPath?): Validator。このファクトリーは context.authenticate または Bearer 抽出子を使用し、context.db.subscriptions を必要とします。また、任意の第 2 パスまたはトークンのアイデンティティから購読者を解決します。コレクション欠落またはクエリ失敗時には 500、無効なトークンには 401、チャンネル/購読者 ID の欠落には 400、一致するサブスクリプションがない場合には 403 をスローします。

利用箇所: getChatChannelRoute、getChannelMessagesRoute、upsertChatChannelReadStateRoute ではチャンネルパスは requestParams.channelId です。createChatMessageRoute では requestBody.channelId、findChatMessagesRoute と findChatSubscriptionsRoute では requestQuery.channelId です。6 つすべてで購読者パスを省略しているため、トークンのアイデンティティを確認します。

hasOrganizationAccessToMessageTemplate(allowedRoles, path)​

実装

シグネチャ: hasOrganizationAccessToMessageTemplate(allowedRoles, path): Validator。このファクトリーは context.authenticate または Bearer 抽出を通じて認証し、context.db.chatMessageTemplates を読み込み、テンプレートの organizationId をたどって context.db.organizations を参照します。生のロールが allowedRoles に含まれるメンバーを許可します。テンプレートの取得、更新、削除ルートはいずれも ['owner', 'admin'] と ['params', 'requestParams', 'messageTemplateId'] を渡します。

無効なトークンには 401、いずれかのコレクション欠落には 500、テンプレートまたは組織の不在には 404、テンプレートに組織がない場合またはアイデンティティに許可メンバーシップがない場合には 403 をスローします。各ルートではこれをグローバル管理者分岐とともに some(...) でラップします。

利用箇所: getChatMessageTemplateRoute、updateChatMessageTemplateRoute、deleteChatMessageTemplateRoute。

isAuthenticated()​

実装

シグネチャ: isAuthenticated(): Validator。この共通ファクトリーは、サービスで選択された Bearer または Cookie 抽出子を通じてアクセストークンを検証します。すべての Chat HTTP ルート で最初のバリデーターです。ソースでは認証およびサブスクリプション検査がコメントアウトされているため、streamChatMessagesRoute には意図的に含まれていません。正規の isAuthenticated 契約を参照してください。

利用箇所: createChatChannelRoute、findChatChannelsRoute、getChatChannelRoute、updateChatChannelRoute、deleteChatChannelRoute、getChannelMessagesRoute、getChatChannelIconUploadUrlRoute、createChatMessageTemplateRoute、getChatMessageTemplateRoute、updateChatMessageTemplateRoute、deleteChatMessageTemplateRoute、findChatMessageTemplatesRoute、findChatMessageTemplatesForOrganizationRoute、createChatMessageRoute、findChatMessagesRoute、getChatMessageRoute、updateChatMessageRoute、deleteChatMessageRoute、getChatMessageAttachmentUploadUrlRoute、createChatMessageAttachmentRoute、deleteChatMessageAttachmentRoute、upsertChatChannelReadStateRoute、createChatSubscriptionRoute、findChatSubscriptionsRoute、getChatSubscriptionRoute、deleteChatSubscriptionRoute。

checkIdentityType(types)​

実装

シグネチャ: checkIdentityType(types): Validator。この共通ファクトリーは、トークンのアイデンティティを構成済みのアイデンティティタイプ ID と照合します。Chat では常に ['admin'] を渡します。認証直後に直接使用するのは findChatMessageTemplatesRoute のみです。一覧内のその他すべての利用箇所では、some(...) の最初の分岐として使用します。共通の失敗と構成の動作については checkIdentityType を参照してください。

利用箇所: createChatChannelRoute、findChatChannelsRoute、getChatChannelRoute、updateChatChannelRoute、deleteChatChannelRoute、getChatChannelIconUploadUrlRoute、createChatMessageTemplateRoute、getChatMessageTemplateRoute、updateChatMessageTemplateRoute、deleteChatMessageTemplateRoute、findChatMessageTemplatesRoute、findChatMessagesRoute、getChatMessageRoute、deleteChatMessageRoute、deleteChatMessageAttachmentRoute、createChatSubscriptionRoute、findChatSubscriptionsRoute、getChatSubscriptionRoute、deleteChatSubscriptionRoute。

isSelf(path)​

実装

シグネチャ: isSelf<T extends string>(identityIdPathInPayload: [T, ...T[]]): Validator。この共通ファクトリーは、トークンのアイデンティティ ID をリクエスト値と比較します。Chat では、createChatChannelRoute に requestBody.ownerId、findChatChannelsRoute に requestQuery.ownerId、createChatMessageRoute に requestBody.senderId、findChatMessagesRoute に requestQuery.senderId、upsertChatChannelReadStateRoute に requestBody.identityId、createChatSubscriptionRoute に requestBody.subscribedId、findChatSubscriptionsRoute に requestQuery.subscribedId を渡します。メッセージ作成と既読状態での使用は直接的で、その他は some(...) の分岐です。正規の isSelf 契約を参照してください。

利用箇所: createChatChannelRoute、findChatChannelsRoute、createChatMessageRoute、findChatMessagesRoute、upsertChatChannelReadStateRoute、createChatSubscriptionRoute、findChatSubscriptionsRoute。

ownsChannel(path)​

実装

シグネチャ: ownsChannel(path): Validator。この ownsResource 特化は context.db.chatChannels を読み取り、指定されたパスの ID を解決して、チャンネルの ownerId とトークンのアイデンティティを比較します。チャンネルの取得、更新、削除、アイコンアップロードの各ルートには requestParams.channelId を、findChatSubscriptionsRoute には requestQuery.channelId を渡します。すべて some(...) の分岐として使用されます。共通の ownsResource 契約を参照してください。

利用箇所: getChatChannelRoute、updateChatChannelRoute、deleteChatChannelRoute、getChatChannelIconUploadUrlRoute、findChatSubscriptionsRoute。

ownsMessage(path)​

実装

シグネチャ: ownsMessage(path): Validator。この ownsResource 特化は context.db.chatMessages を読み取り、requestParams.messageId を解決して、メッセージの senderId とトークンのアイデンティティを比較します。updateChatMessageRoute、getChatMessageAttachmentUploadUrlRoute、createChatMessageAttachmentRoute では直接使用します。メッセージの取得・削除および添付ファイル削除では some(...) の分岐です。共通の ownsResource 契約を参照してください。

利用箇所: getChatMessageRoute、updateChatMessageRoute、deleteChatMessageRoute、getChatMessageAttachmentUploadUrlRoute、createChatMessageAttachmentRoute、deleteChatMessageAttachmentRoute。

ownsSubscription(path)​

実装

シグネチャ: ownsSubscription(path): Validator。この ownsResource 特化は context.db.subscriptions を読み取り、requestParams.subscriptionId を解決して、サブスクリプションの subscribedId とトークンのアイデンティティを比較します。共通の ownsResource 契約を参照してください。

利用箇所: getChatSubscriptionRoute および deleteChatSubscriptionRoute。

hasOrgRole(roles, path)​

実装

シグネチャ: hasOrgRole(roles, path): Validator。この共通ファクトリーはアイデンティティを認証し、構成済みの組織ロール ID に対してメンバーシップを確認します。createChatMessageTemplateRoute は、requestBody.organizationId と ['owner', 'admin'] を some(...) の分岐として渡します。findChatMessageTemplatesForOrganizationRoute は、同じロールと requestParams.organizationId を直接渡します。正規の hasOrgRole 契約を参照してください。

利用箇所: createChatMessageTemplateRoute および findChatMessageTemplatesForOrganizationRoute。

some(...)​

実装

シグネチャ: some(...args: Validator[]): Validator。この共通コンビネーターは、作成済みのバリデーターを受け取り、いずれかの分岐が成功したときに成功します。Chat では isAuthenticated() の後に、管理者または本人、管理者または所有者、管理者または購読者、管理者または組織メンバーというポリシーのために使用します。分岐はルートソースの順序で開始され、並行して実行されます。すべての分岐が失敗して初めて再スローします。正規の some 契約を参照してください。

利用箇所: createChatChannelRoute、findChatChannelsRoute、getChatChannelRoute、updateChatChannelRoute、deleteChatChannelRoute、getChatChannelIconUploadUrlRoute、createChatMessageTemplateRoute、getChatMessageTemplateRoute、updateChatMessageTemplateRoute、deleteChatMessageTemplateRoute、findChatMessagesRoute、getChatMessageRoute、deleteChatMessageRoute、deleteChatMessageAttachmentRoute、createChatSubscriptionRoute、findChatSubscriptionsRoute、getChatSubscriptionRoute、deleteChatSubscriptionRoute。