import type { ActivityStore } from "./activity-log.js"; import { type DiscordClient } from "./discord-client.js"; import { type OperationStore } from "./operation-store.js"; import { type DiscordPermissionName } from "./permissions.js"; import type { ScopePolicy } from "./policy.js"; import type { RequestOptions } from "./types.js"; export interface GuildPruneRequest { acknowledgeNonExactMemberSet: true; auditReason: string; days: number; guildId: string; includeRoleIds?: readonly string[]; maximumEstimatedMemberCount: number; operationKey: string; } export interface NormalizedGuildPruneRequest { acknowledgeNonExactMemberSet: true; auditReason: string; days: number; guildId: string; includeRoleIds: string[]; maximumEstimatedMemberCount: number; operationKey: string; operationKeyHash: string; } export interface GuildPruneRolePlan { id: string; managed: false; permissionNames: DiscordPermissionName[]; permissions: string; position: number; unknownPermissionBits: "0"; } export interface GuildPruneProtectionPlan { membership: "absent" | "present"; outsideCohortRoleIds: string[]; protection: "guild-owner" | "not-in-guild" | "role-shield"; sources: Array<"configured" | "connector" | "guild-owner">; userId: string; } export interface GuildPrunePlan { acknowledgeNonExactMemberSet: true; applicationId: string; auditReason: string; botId: string; cohort: { exactMemberIdsAvailable: false; inactivity: "discord-defined"; inactivityDays: number; includedRoleRule: "every-assigned-role-is-included"; rolelessMembersAlwaysIncluded: true; }; createdAt: string; digest: string; estimatedMemberCount: number; estimatedRequests: { destructive: 1; planningEvidence: number; readback: 0; }; guildId: string; includeRoleIds: string[]; includeRoles: GuildPruneRolePlan[]; maximumEstimatedMemberCount: number; operationKeyHash: string; permission: { appliedRoleIds: string[]; botAdministrator: boolean; botGuildOwner: boolean; botHighestRoleIds: string[]; botHighestRolePosition: number; effectivePermissionNames: DiscordPermissionName[]; effectivePermissions: string; required: readonly ["KICK_MEMBERS", "MANAGE_GUILD"]; unknownPermissionBits: string; }; policyMaximumMemberCount: number; privacy: { exactCandidateMemberIds: "unavailable-from-discord"; persistence: "content-free-counts-and-ids-only"; profiles: "omitted"; rawPayloadExposed: false; }; protections: GuildPruneProtectionPlan[]; risks: string[]; schemaVersion: number; status: "planned"; verificationBoundary: { automaticRetry: false; countCeilingEnforcement: "pre-dispatch-only"; destructiveRequests: 1; exactMemberReadback: false; outcomeEvidence: "strict-discord-response-count"; rollback: "not-automatic"; }; warnings: string[]; writeRequired: boolean; } export interface GuildPruneResult { activityId: string | null; actualPrunedCount: number; guildId: string; includeRoleIds: string[]; operationKeyHash: string; planDigest: string; reviewedEstimatedMemberCount: number; schemaVersion: number; status: "completed" | "completed-with-drift" | "noop"; verification: "drift" | "match" | "not-required"; } export interface GuildPruneServiceOptions { activityStore: ActivityStore; client: Pick; clock?: () => Date; maximumMemberCount: number; operationStore: OperationStore; planKey?: Uint8Array; policy: ScopePolicy; protectedUserIds: ReadonlySet; randomId?: () => string; } export declare function normalizeGuildPruneRequest(request: GuildPruneRequest): NormalizedGuildPruneRequest; export declare class GuildPruneService { #private; constructor(options: GuildPruneServiceOptions); plan(applicationId: string, botId: string, request: GuildPruneRequest, options?: RequestOptions): Promise; execute(applicationId: string, botId: string, requestValue: GuildPruneRequest, expectedDigest: string, options?: RequestOptions): Promise; } //# sourceMappingURL=guild-prune-service.d.ts.map