import type { ActivityStore } from "./activity-log.js"; import { type DiscordClient } from "./discord-client.js"; import type { GatewayChannelLayoutSource } from "./gateway-channel-layout.js"; import { type GuildChannelHttpEvidenceMode } from "./guild-channel-evidence.js"; import { type GuildDeletionRecoveryEvidence, type GuildDeletionRecoveryRequest, type NormalizedGuildDeletionRecoveryRequest } from "./guild-recovery-attestation.js"; import { type OperationStore } from "./operation-store.js"; import { type DiscordPermissionName } from "./permissions.js"; import type { ScopePolicy } from "./policy.js"; import { type NormalizedDiscordRole } from "./role-administration-service.js"; import type { RequestOptions } from "./types.js"; export type RoleDeletionBlockerKind = "application-command-permission" | "automod-exempt-role" | "channel-overwrite" | "emoji-role-restriction" | "integration-role" | "invite-role-grant" | "managed-role" | "member-holder" | "onboarding-role-option" | "role-hierarchy"; export interface RoleDeletionRequest { acknowledgeIrreversibleRoleLoss: true; auditReason: string; guildId: string; operationKey: string; recovery: GuildDeletionRecoveryRequest; roleId: string; } export interface NormalizedRoleDeletionRequest extends Omit { operationKeyHash: string; recovery: NormalizedGuildDeletionRecoveryRequest; } export interface RoleDeletionBlocker { count: number; kind: RoleDeletionBlockerKind; } export interface RoleDeletionDependencyCounts { applicationCommandPermissions: number; autoModerationExemptions: number; channelOverwrites: number; emojiRestrictions: number; integrationRoles: number; inviteRoleGrants: number; onboardingOptions: number; } export interface RoleDeletionReadiness { applicationId: string; blockers: RoleDeletionBlocker[]; botId: string; dependencies: { blockerCount: number; counts: RoleDeletionDependencyCounts; digest: string; }; evidenceDigest: string; guild: { features: string[]; id: string; name: string; ownerId: string; }; layout: { channelCount: number; httpEvidenceMode: GuildChannelHttpEvidenceMode; obfuscatedChannelCount: number; revision: number; updatedAt: string; }; memberCount: number; permission: { administrator: boolean; botEffectivePermissionNames: DiscordPermissionName[]; botEffectivePermissions: string; botHighestRoleIds: string[]; botHighestRolePosition: number; guildManageGuild: boolean; guildManageRoles: boolean; }; privacy: { contentFetched: false; dependencyIdentifiersPersisted: false; roleNamePersisted: false; }; ready: boolean; risks: string[]; roleCount: number; schemaVersion: number; status: "blocked" | "ready"; target: NormalizedDiscordRole; warnings: string[]; } export interface RoleDeletionPlan extends Omit { acknowledgeIrreversibleRoleLoss: true; auditReason: string; createdAt: string; digest: string; operationKeyHash: string; recovery: GuildDeletionRecoveryEvidence; status: "blocked" | "planned"; writeRequired: boolean; } export interface RoleDeletionResult { activityId: string | null; addedEvidence: RoleDeletionAddedEvidenceCounts; baselineRoleCount: number; blockerCount: number; guildId: string; memberCount: number; observedRoleCount: number | null; operationKeyHash: string; planDigest: string; roleId: string; schemaVersion: number; status: "blocked" | "completed" | "completed-with-drift"; verification: "drift" | "match" | "not-required"; } export interface RoleDeletionAddedEvidenceCounts { applicationCommands: number; autoModerationRules: number; channels: number; emojis: number; integrations: number; invites: number; onboardingOptions: number; roles: number; } export interface RoleDeletionServiceClient extends Pick { } export interface RoleDeletionServiceOptions { activityStore: ActivityStore; client: RoleDeletionServiceClient; clock?: () => Date; layoutSource: GatewayChannelLayoutSource; operationStore: OperationStore; planKey?: Uint8Array; policy: Pick; randomId?: () => string; recoveryAttestationKey?: Uint8Array; } export declare function normalizeRoleDeletionRequest(request: RoleDeletionRequest): NormalizedRoleDeletionRequest; export declare class RoleDeletionService { #private; constructor(options: RoleDeletionServiceOptions); audit(applicationId: string, botId: string, guildId: string, roleId: string, options?: RequestOptions): Promise; plan(applicationId: string, botId: string, request: RoleDeletionRequest, options?: RequestOptions): Promise; execute(applicationId: string, botId: string, request: RoleDeletionRequest, expectedDigest: string, options?: RequestOptions): Promise; } //# sourceMappingURL=role-deletion-service.d.ts.map