import type { ActivityStore } from "./activity-log.js"; import { type StageInstanceAction } from "./constants.js"; import { type DiscordClient } from "./discord-client.js"; import { InteractionLimiter } from "./interaction-limiter.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 declare const STAGE_INSTANCE_OMITTED_FIELDS: readonly ["audienceState", "rawDiscordObject", "scheduledEventObject", "speakerState"]; interface StageInstanceRequestBase { action: StageInstanceAction; auditReason: string; channelId: string; guildId: string; operationKey: string; } export interface StartStageInstanceRequest extends StageInstanceRequestBase { action: "start"; sendStartNotification?: boolean; topic: string; } export interface UpdateStageInstanceRequest extends StageInstanceRequestBase { action: "update"; topic: string; } export interface EndStageInstanceRequest extends StageInstanceRequestBase { action: "end"; } export type StageInstanceChangeRequest = EndStageInstanceRequest | StartStageInstanceRequest | UpdateStageInstanceRequest; interface NormalizedStageInstanceRequestBase { action: StageInstanceAction; auditReason: string; channelId: string; guildId: string; operationKeyHash: string; } export type NormalizedStageInstanceChangeRequest = (NormalizedStageInstanceRequestBase & { action: "end"; }) | (NormalizedStageInstanceRequestBase & { action: "start"; sendStartNotification: boolean; topic: string; }) | (NormalizedStageInstanceRequestBase & { action: "update"; topic: string; }); export interface ProjectedStageInstance { channelId: string; discoverableDisabled: boolean; guildId: string; id: string; privacyLevel: "guild-only" | "public-deprecated"; scheduledEventId: string | null; topic: string; unknownFieldCount: number; } export interface PlannedStageInstance { channelId: string; guildId: string; id: string | null; privacyLevel: "guild-only"; scheduledEventId: null; topic: string; } export interface StageInstancePermissionEvidence { administrator: boolean; appliedRoleIds: string[]; confidence: "complete"; effectivePermissionNames: DiscordPermissionName[]; effectivePermissions: string; guildOwner: boolean; missingPermissions: []; requiredPermissions: DiscordPermissionName[]; unknownPermissionBits: string; warnings: string[]; } export interface StageInstancePrivacyProjection { omittedFields: typeof STAGE_INSTANCE_OMITTED_FIELDS; rawPayloadExposed: false; speakerIdentitiesExposed: false; topicPersisted: false; } export interface StageInstanceLookupResult { access: StageInstancePermissionEvidence; channel: { guildId: string; id: string; name: string; type: "stage"; }; guild: { id: string; name: string; }; instance: ProjectedStageInstance | null; privacy: StageInstancePrivacyProjection; schemaVersion: number; status: "active" | "inactive"; } export interface StageInstanceInventoryResult { entries: StageInstanceLookupResult[]; page: { active: number; configured: number; inactive: number; returned: number; safetyLimit: number; }; privacy: StageInstancePrivacyProjection; schemaVersion: number; status: "ok"; } export interface StageInstancePlan { action: StageInstanceAction; applicationId: string; auditReason: string; botId: string; channel: { guildId: string; id: string; name: string; type: "stage"; }; createdAt: string; desired: PlannedStageInstance | null; digest: string; effect: "create" | "delete" | "none" | "update"; existing: ProjectedStageInstance | null; guild: { id: string; name: string; }; operationKeyHash: string; permission: StageInstancePermissionEvidence; privacy: StageInstancePrivacyProjection; schemaVersion: number; status: "already-current" | "planned"; warnings: string[]; writeRequired: boolean; } export interface StageInstanceResult { action: StageInstanceAction; activityId: string | null; channelId: string; guildId: string; observed: ProjectedStageInstance | null; operationKeyHash: string; planDigest: string; schemaVersion: number; stageInstanceId: string | null; status: "already-current" | "completed" | "completed-with-drift"; } export interface StageInstanceServiceClient extends Pick { } export interface StageInstanceServiceOptions { activityStore: ActivityStore; client: StageInstanceServiceClient; clock?: () => Date; limiter: InteractionLimiter; operationStore: OperationStore; planKey?: Uint8Array; policy: ScopePolicy; randomId?: () => string; } export declare function normalizeStageInstanceChangeRequest(request: StageInstanceChangeRequest): NormalizedStageInstanceChangeRequest; export declare class StageInstanceService { #private; constructor(options: StageInstanceServiceOptions); get(botId: string, guildId: string, channelId: string, options?: RequestOptions): Promise; list(botId: string, options?: RequestOptions): Promise; plan(applicationId: string, botId: string, request: StageInstanceChangeRequest, options?: RequestOptions): Promise; execute(applicationId: string, botId: string, request: StageInstanceChangeRequest, expectedDigest: string, options?: RequestOptions): Promise; } export {}; //# sourceMappingURL=stage-instance-service.d.ts.map