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 NormalizedDiscordRole } from "./role-administration-service.js"; import type { RequestOptions } from "./types.js"; declare const PRIVACY_OMISSIONS: readonly ["auditReason", "memberIdentities", "rawOperationKey", "rawPayloads"]; export type RoleOrderPlacement = "above" | "below"; export interface RoleOrderingRequest { anchorRoleId: string; auditReason: string; guildId: string; operationKey: string; placement: RoleOrderPlacement; roleId: string; } export interface NormalizedRoleOrderingRequest extends RoleOrderingRequest { operationKeyHash: string; } export interface RoleOrderEntry { heldByBot: boolean; highRiskPermissionNames: DiscordPermissionName[]; id: string; managed: boolean; management: NormalizedDiscordRole["management"]; memberCount: number | null; mentionable: boolean; name: string; permissionNames: DiscordPermissionName[]; permissions: string; rank: number; rawPosition: number; unknownFieldCount: number; unknownPermissionBits: string; } export interface RoleOrderingPermissionEvidence { administrator: boolean; botEffectivePermissionNames: DiscordPermissionName[]; botEffectivePermissions: string; botHighestRank: number; botHighestRoleIds: string[]; confidence: "complete"; guildManageRoles: boolean; } export interface RoleOrderingPrivacyProjection { memberIdentitiesFetched: false; omittedFields: typeof PRIVACY_OMISSIONS; persistence: "content-free-only"; roleText: "transient-untrusted"; } export interface RoleOrderAuditResult { applicationId: string; botId: string; guild: { features: string[]; id: string; name: string; ownerId: string; }; order: RoleOrderEntry[]; permission: RoleOrderingPermissionEvidence; privacy: RoleOrderingPrivacyProjection; schemaVersion: number; status: "ok"; } export interface RoleOrderingAffectedRole extends Omit { afterRank: number; beforeRank: number; } export interface RoleOrderingPlan { affectedRoles: RoleOrderingAffectedRole[]; anchor: RoleOrderEntry; applicationId: string; auditReason: string; botId: string; createdAt: string; current: { anchorRank: number; roleRank: number; }; desired: { anchorRank: number; roleRank: number; }; digest: string; guild: RoleOrderAuditResult["guild"]; impact: { affectedRoleCount: number; aggregateHolderAssignments: number; changedRoleCount: number; holderCountsMayOverlap: true; hierarchySensitiveRoleIds: string[]; }; operationKeyHash: string; permission: RoleOrderingPermissionEvidence; placement: RoleOrderPlacement; privacy: RoleOrderingPrivacyProjection; risks: string[]; role: RoleOrderEntry; schemaVersion: number; status: "already-current" | "planned"; warnings: string[]; writeRequired: boolean; } export interface RoleOrderingResult { activityId: string | null; anchorRoleId: string; memberCountsMatched: boolean; observedAffectedRoles: RoleOrderEntry[]; operationKeyHash: string; planDigest: string; readbackMatched: boolean; responseMatched: boolean; roleId: string; schemaVersion: number; status: "already-current" | "completed" | "completed-with-drift"; verification: "drift" | "match" | "not-required"; } export interface RoleOrderingServiceClient extends Pick { } export interface RoleOrderingServiceOptions { activityStore: ActivityStore; client: RoleOrderingServiceClient; clock?: () => Date; operationStore: OperationStore; planKey?: Uint8Array; policy: Pick; randomId?: () => string; } export declare function normalizeRoleOrderingRequest(request: RoleOrderingRequest): NormalizedRoleOrderingRequest; export declare class RoleOrderingService { #private; constructor(options: RoleOrderingServiceOptions); audit(applicationId: string, botId: string, guildId: string, options?: RequestOptions): Promise; plan(applicationId: string, botId: string, request: RoleOrderingRequest, options?: RequestOptions): Promise; reconcilePlan(applicationId: string, botId: string, request: RoleOrderingRequest, options?: RequestOptions): Promise; execute(applicationId: string, botId: string, request: RoleOrderingRequest, expectedDigest: string, options?: RequestOptions): Promise; } export {}; //# sourceMappingURL=role-ordering-service.d.ts.map