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