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 OperationStore } from "./operation-store.js"; import { type DiscordPermissionName } from "./permissions.js"; import type { ScopePolicy } from "./policy.js"; import type { RequestOptions } from "./types.js"; declare const PRIVACY_OMISSIONS: readonly ["auditReason", "channelContent", "hiddenChannelMetadata", "memberIdentities", "permissionOverwrites", "rawOperationKey", "rawPayloads"]; export type ChannelOrderPlacement = "above" | "below"; export type ChannelOrderFamily = "category" | "text" | "unsupported" | "voice"; export type ChannelOrderMode = "cross-parent-move" | "same-parent-order"; export type ChannelOrderingHttpEvidenceMode = GuildChannelHttpEvidenceMode; export interface ChannelOrderingRequest { anchorChannelId: string; auditReason: string; channelId: string; guildId: string; operationKey: string; placement: ChannelOrderPlacement; } export interface NormalizedChannelOrderingRequest extends ChannelOrderingRequest { operationKeyHash: string; } export interface ChannelOrderEntry { family: ChannelOrderFamily; id: string; metadataVisibility: "obfuscated" | "visible"; name: string | null; obfuscated: boolean; parentChannelId: string | null; rank: number; rawPosition: number; type: number; unknownFieldCount: number | null; } export interface ChannelOrderPermissionEvidence { administrator: boolean; confidence: "complete" | "unavailable"; effectivePermissionNames: DiscordPermissionName[]; effectivePermissions: string | null; manageChannels: boolean; source: "guild" | "none" | "parent"; } export interface ChannelOrderGroup { channels: ChannelOrderEntry[]; family: ChannelOrderFamily; parentChannelId: string | null; permission: ChannelOrderPermissionEvidence; unsupportedType: number | null; } export interface ChannelOrderMovePermissionEvidence { administrator: boolean; effectivePermissionNames: DiscordPermissionName[]; effectivePermissions: string; manageChannels: boolean; viewChannel: boolean; } export interface ChannelOrderParentCapacity { childCountAfter: number | null; childCountBefore: number | null; childLimit: number | null; parentKind: "category" | "guild-root"; } export interface ChannelOrderingPrivacyProjection { channelText: "transient-untrusted"; hiddenMetadataReturned: false; omittedFields: typeof PRIVACY_OMISSIONS; persistence: "content-free-only"; } export interface ChannelOrderAuditResult { applicationId: string; botId: string; groups: ChannelOrderGroup[]; guild: { id: string; name: string; ownerId: string; }; httpEvidenceMode: ChannelOrderingHttpEvidenceMode; layout: { obfuscatedChannels: number; revision: number; updatedAt: string; }; permission: { administrator: boolean; botEffectivePermissionNames: DiscordPermissionName[]; botEffectivePermissions: string; confidence: "complete"; guildManageChannels: boolean; }; privacy: ChannelOrderingPrivacyProjection; schemaVersion: number; status: "ok"; } export interface ChannelOrderingAffectedChannel extends Omit { afterParentChannelId: string | null; afterRank: number; beforeParentChannelId: string | null; beforeRank: number; submittedPosition: number; } export interface ChannelOrderingPositionWrite { beforeRawPosition: number; channelId: string; parentChange: { destinationParentChannelId: string | null; lockPermissions: false; sourceParentChannelId: string | null; } | null; submittedPosition: number; } export interface ChannelOrderingPlan { affectedChannels: ChannelOrderingAffectedChannel[]; anchor: ChannelOrderEntry; applicationId: string; auditReason: string; botId: string; channel: ChannelOrderEntry; createdAt: string; current: { anchorRank: number; channelRank: number; destinationGroupOrder: string[]; sourceGroupOrder: string[]; }; destinationCapacity: ChannelOrderParentCapacity; destinationParentChannelId: string | null; destinationPermission: ChannelOrderPermissionEvidence; desired: { anchorRank: number; channelRank: number; destinationGroupOrder: string[]; sourceGroupOrder: string[]; }; digest: string; family: Exclude; guild: ChannelOrderAuditResult["guild"]; httpEvidenceMode: ChannelOrderingHttpEvidenceMode; impact: { affectedChannelCount: number; destinationGroupChannelCount: number; parentChangeCount: number; rankChangeCount: number; rawPositionWriteCount: number; sourceGroupChannelCount: number; }; layout: ChannelOrderAuditResult["layout"]; mode: ChannelOrderMode; operationKeyHash: string; permissionOverwriteBehavior: "preserve"; placement: ChannelOrderPlacement; positionWrites: ChannelOrderingPositionWrite[]; privacy: ChannelOrderingPrivacyProjection; risks: string[]; schemaVersion: number; sourceCapacity: ChannelOrderParentCapacity; sourceParentChannelId: string | null; sourcePermission: ChannelOrderPermissionEvidence; status: "already-current" | "planned"; targetMovePermission: ChannelOrderMovePermissionEvidence | null; warnings: string[]; writeRequired: boolean; } export interface ObservedChannelOrderEntry { id: string; obfuscated: boolean; parentChannelId: string | null; rank: number; rawPosition: number; type: number; } export interface ChannelOrderingResult { activityId: string | null; anchorChannelId: string; baselineLayoutRevision: number; channelId: string; guildId: string; layoutMatched: boolean; observedAffectedChannels: ObservedChannelOrderEntry[]; observedLayoutRevision: number; operationKeyHash: string; planDigest: string; schemaVersion: number; status: "already-current" | "completed"; verification: "match" | "not-required"; } export interface ChannelOrderingServiceClient extends Pick { } export interface ChannelOrderingServiceOptions { activityStore: ActivityStore; client: ChannelOrderingServiceClient; clock?: () => Date; layoutSource: GatewayChannelLayoutSource; operationStore: OperationStore; planKey?: Uint8Array; policy: Pick; randomId?: () => string; verificationTimeoutMs?: number; } export declare function normalizeChannelOrderingRequest(request: ChannelOrderingRequest): NormalizedChannelOrderingRequest; export declare class ChannelOrderingService { #private; constructor(options: ChannelOrderingServiceOptions); audit(applicationId: string, botId: string, guildId: string, options?: RequestOptions): Promise; plan(applicationId: string, botId: string, request: ChannelOrderingRequest, options?: RequestOptions): Promise; reconcilePlan(applicationId: string, botId: string, request: ChannelOrderingRequest, options?: RequestOptions): Promise; execute(applicationId: string, botId: string, request: ChannelOrderingRequest, expectedDigest: string, options?: RequestOptions): Promise; } export {}; //# sourceMappingURL=channel-ordering-service.d.ts.map