import type { ActivityStore } from "./activity-log.js"; import { type DiscordClient } from "./discord-client.js"; import { type GuildScaffoldAuthority } from "./guild-scaffold-authority.js"; import { type OperationStore } from "./operation-store.js"; import { type DiscordPermissionName } from "./permissions.js"; import type { ScopePolicy } from "./policy.js"; import type { DiscordRole, RequestOptions } from "./types.js"; export declare const ROLE_CREATION_HIGH_RISK_PERMISSIONS: readonly ("BAN_MEMBERS" | "BYPASS_SLOWMODE" | "CREATE_EVENTS" | "CREATE_GUILD_EXPRESSIONS" | "DEAFEN_MEMBERS" | "KICK_MEMBERS" | "MANAGE_CHANNELS" | "MANAGE_EVENTS" | "MANAGE_GUILD" | "MANAGE_GUILD_EXPRESSIONS" | "MANAGE_MESSAGES" | "MANAGE_NICKNAMES" | "MANAGE_ROLES" | "MANAGE_THREADS" | "MANAGE_WEBHOOKS" | "MENTION_EVERYONE" | "MODERATE_MEMBERS" | "MOVE_MEMBERS" | "MUTE_MEMBERS" | "PIN_MESSAGES" | "SET_VOICE_CHANNEL_STATUS" | "VIEW_AUDIT_LOG" | "VIEW_CREATOR_MONETIZATION_ANALYTICS")[]; export type RoleManagementType = "bot" | "everyone" | "integration" | "linked" | "managed" | "premium" | "purchasable" | "standard" | "subscription"; export interface NormalizedDiscordRole { colors: { primaryColor: number; secondaryColor: number | null; tertiaryColor: number | null; }; flags: number; hoist: boolean; icon: string | null; id: string; managed: boolean; management: { id: string | null; type: RoleManagementType; }; mentionable: boolean; name: string; permissionNames: DiscordPermissionName[]; permissions: string; position: number; unicodeEmoji: string | null; unknownFieldCount: number; unknownPermissionBits: string; } export interface RoleCreationRequest { auditReason: string; guildId: string; hoist?: boolean; mentionable?: boolean; name: string; operationKey: string; permissions?: readonly DiscordPermissionName[]; primaryColor?: number; } export interface NormalizedRoleCreationRequest { auditReason: string; guildId: string; hoist: boolean; mentionable: boolean; name: string; operationKey: string; operationKeyHash: string; permissionBits: string; permissions: DiscordPermissionName[]; primaryColor: number; } export interface RoleCreationPlan { action: "create" | "none"; auditReason: string; createdAt: string; digest: string; existingRole: NormalizedDiscordRole | null; guild: { features: string[]; id: string; name: string; ownerId: string; }; highRiskPermissions: DiscordPermissionName[]; operationKeyHash: string; permission: { botAdministrator: boolean; botEffectivePermissionNames: DiscordPermissionName[]; botEffectivePermissions: string; botHighestRoleIds: string[]; botHighestRolePosition: number; guildManageRoles: boolean; requestedSubset: boolean; }; schemaVersion: number; status: "already-current" | "planned"; target: { hoist: boolean; mentionable: boolean; name: string; permissionBits: string; permissions: DiscordPermissionName[]; primaryColor: number; }; visibleInventory: { guildLimit: number; guildRoles: number; }; warnings: string[]; } export interface RoleCreationResult { activityId: string | null; guildId: string; observed: NormalizedDiscordRole; operationKeyHash: string; planDigest: string; roleId: string; schemaVersion: number; status: "already-current" | "completed" | "completed-with-drift"; } export interface RoleAdministrationServiceOptions { activityStore: ActivityStore; client: Pick; clock?: () => Date; operationStore: OperationStore; planKey?: Uint8Array; policy: ScopePolicy; randomId?: () => string; } export declare class DiscordRoleEvidenceError extends Error { name: string; } export declare function canonicalPermissionNames(value: readonly DiscordPermissionName[] | undefined): DiscordPermissionName[]; export declare function normalizeRoleCreationRequest(request: RoleCreationRequest): NormalizedRoleCreationRequest; export declare function logicalRoleNameKey(value: string): string; export declare function normalizeDiscordRole(role: DiscordRole, guildId: string, expectedRoleId?: string): NormalizedDiscordRole; export declare function normalizeDiscordRoleInventory(roles: readonly DiscordRole[], guildId: string): NormalizedDiscordRole[]; export declare function roleMatchesRequest(role: NormalizedDiscordRole, request: NormalizedRoleCreationRequest): boolean; export declare class RoleAdministrationService { #private; constructor(options: RoleAdministrationServiceOptions); plan(botId: string, request: RoleCreationRequest, options?: RequestOptions): Promise; planForGuildScaffold(authority: GuildScaffoldAuthority, botId: string, request: RoleCreationRequest, options?: RequestOptions): Promise; execute(botId: string, request: RoleCreationRequest, expectedDigest: string, options?: RequestOptions): Promise; executeForGuildScaffold(authority: GuildScaffoldAuthority, botId: string, request: RoleCreationRequest, expectedDigest: string, options?: RequestOptions): Promise; } //# sourceMappingURL=role-administration-service.d.ts.map