fix: add missing role-based type definitions for RBAC routing

This commit is contained in:
Minidoracat
2026-02-12 03:53:31 +00:00
committed by Shadow
parent ad508c8c89
commit e084f07420
6 changed files with 25 additions and 0 deletions

View File

@@ -29,6 +29,8 @@ export type ResolveAgentRouteInput = {
parentPeer?: RoutePeer | null;
guildId?: string | null;
teamId?: string | null;
/** Discord member role IDs — used for role-based agent routing. */
memberRoleIds?: string[];
};
export type ResolvedAgentRoute = {
@@ -169,12 +171,24 @@ function matchesTeam(match: { teamId?: string | undefined } | undefined, teamId:
return id === teamId;
}
function matchesRoles(
match: { roles?: string[] | undefined } | undefined,
memberRoleIds: string[],
): boolean {
const roles = match?.roles;
if (!Array.isArray(roles) || roles.length === 0) {
return false;
}
return roles.some((r) => memberRoleIds.includes(r));
}
export function resolveAgentRoute(input: ResolveAgentRouteInput): ResolvedAgentRoute {
const channel = normalizeToken(input.channel);
const accountId = normalizeAccountId(input.accountId);
const peer = input.peer ? { kind: input.peer.kind, id: normalizeId(input.peer.id) } : null;
const guildId = normalizeId(input.guildId);
const teamId = normalizeId(input.teamId);
const memberRoleIds = input.memberRoleIds ?? [];
const bindings = listBindings(input.cfg).filter((binding) => {
if (!binding || typeof binding !== "object") {