import type { ActivityStore } from "./activity-log.js"; import { type SoundboardAction } from "./constants.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 SoundboardFileReview } from "./soundboard-file.js"; import type { RequestOptions } from "./types.js"; export declare const SOUNDBOARD_OMITTED_FIELDS: readonly ["audioBytes", "cdnUrl", "creatorProfile", "rawDiscordObject"]; export type SoundboardEmoji = { kind: "custom"; emojiId: string; } | { kind: "none"; } | { kind: "unicode"; emojiName: string; }; interface SoundboardRequestBase { action: SoundboardAction; auditReason: string; guildId: string; operationKey: string; } export interface CreateSoundboardSoundRequest extends SoundboardRequestBase { action: "create"; emoji: SoundboardEmoji; filePath: string; name: string; volume: number; } export interface UpdateSoundboardSoundRequest extends SoundboardRequestBase { action: "update"; emoji?: SoundboardEmoji; name?: string; soundId: string; volume?: number; } export interface DeleteSoundboardSoundRequest extends SoundboardRequestBase { action: "delete"; soundId: string; } export type SoundboardChangeRequest = CreateSoundboardSoundRequest | DeleteSoundboardSoundRequest | UpdateSoundboardSoundRequest; interface NormalizedSoundboardRequestBase { action: SoundboardAction; auditReason: string; guildId: string; operationKeyHash: string; } export type NormalizedSoundboardChangeRequest = (Omit & NormalizedSoundboardRequestBase & { action: "create"; emoji: SoundboardEmoji; }) | (Omit & NormalizedSoundboardRequestBase & { action: "update"; emoji?: SoundboardEmoji; }) | (Omit & NormalizedSoundboardRequestBase & { action: "delete"; }); export interface ProjectedSoundboardSound { available: boolean; creatorUserId: string | null; emoji: SoundboardEmoji; guildId: string | null; name: string; soundId: string; unknownFieldCount: number; volume: number; } export interface PlannedSoundboardSound { available: boolean; creatorUserId: string; emoji: SoundboardEmoji; guildId: string; name: string; soundId: string | null; volume: number; } export interface SoundboardPermissionEvidence { administrator: boolean; appliedRoleIds: string[]; confidence: "complete"; createGuildExpressions: boolean; effectivePermissionNames: DiscordPermissionName[]; effectivePermissions: string; guildOwner: boolean; manageGuildExpressions: boolean; ownershipRequired: boolean; warnings: string[]; } export interface SoundboardPrivacyProjection { audioPersisted: false; creatorProfilesExposed: false; omittedFields: typeof SOUNDBOARD_OMITTED_FIELDS; privateFieldsProjectedOut: true; } export interface DefaultSoundboardInventoryResult { page: { returned: number; safetyLimit: number; }; privacy: SoundboardPrivacyProjection; schemaVersion: number; sounds: ProjectedSoundboardSound[]; status: "ok"; } export interface GuildSoundboardInventoryResult extends DefaultSoundboardInventoryResult { guild: { id: string; name: string; }; permission: SoundboardPermissionEvidence; } export interface GuildSoundboardLookupResult extends Omit { sound: ProjectedSoundboardSound; } export interface SoundboardCustomEmojiEvidence { animated: boolean; available: boolean; emojiId: string; managed: boolean; name: string; } export interface SoundboardPlan { action: SoundboardAction; applicationId: string; auditReason: string; botId: string; createdAt: string; customEmoji: SoundboardCustomEmojiEvidence | null; desired: PlannedSoundboardSound | null; digest: string; effect: "change" | "none"; existing: ProjectedSoundboardSound | null; file: { contentDigest: string; review: SoundboardFileReview; } | null; guild: { id: string; name: string; }; operationKeyHash: string; permission: SoundboardPermissionEvidence; privacy: SoundboardPrivacyProjection; schemaVersion: number; soundId: string | null; status: "already-current" | "planned"; visibleInventory: { returned: number; safetyLimit: number; }; warnings: string[]; } export interface SoundboardResult { action: SoundboardAction; activityId: string | null; guildId: string; observed: ProjectedSoundboardSound | null; operationKeyHash: string; planDigest: string; schemaVersion: number; soundId: string; status: "already-current" | "completed" | "completed-with-drift"; } export interface SoundboardServiceClient extends Pick { } export interface SoundboardServiceOptions { activityStore: ActivityStore; client: SoundboardServiceClient; clock?: () => Date; fileRoots: readonly string[]; operationStore: OperationStore; planKey?: Uint8Array; policy: ScopePolicy; randomId?: () => string; } export declare function normalizeSoundboardChangeRequest(request: SoundboardChangeRequest): NormalizedSoundboardChangeRequest; export declare class SoundboardService { #private; constructor(options: SoundboardServiceOptions); listDefaults(options?: RequestOptions): Promise; listGuild(botId: string, guildId: string, options?: RequestOptions): Promise; getGuild(botId: string, guildId: string, soundId: string, options?: RequestOptions): Promise; plan(applicationId: string, botId: string, request: SoundboardChangeRequest, options?: RequestOptions): Promise; execute(applicationId: string, botId: string, request: SoundboardChangeRequest, expectedDigest: string, options?: RequestOptions): Promise; } export {}; //# sourceMappingURL=soundboard-service.d.ts.map