import type { ActivityStore } from "./activity-log.js"; import type { DiscordClient } from "./discord-client.js"; import { type GuildExpressionFileReview } from "./guild-expression-file.js"; import { type OperationStore } from "./operation-store.js"; import type { ScopePolicy } from "./policy.js"; import type { RequestOptions } from "./types.js"; export declare const APPLICATION_EMOJI_OMITTED_FIELDS: readonly ["cdnUrl", "imageBytes", "rawDiscordObject", "roleIds", "uploaderId", "uploaderProfile"]; export type ApplicationEmojiAction = "create" | "delete" | "rename"; export interface CreateApplicationEmojiRequest { action: "create"; filePath: string; name: string; operationKey: string; } export interface RenameApplicationEmojiRequest { action: "rename"; emojiId: string; name: string; operationKey: string; } export interface DeleteApplicationEmojiRequest { acknowledgeGlobalImpact: true; action: "delete"; emojiId: string; operationKey: string; } export type ApplicationEmojiChangeRequest = CreateApplicationEmojiRequest | DeleteApplicationEmojiRequest | RenameApplicationEmojiRequest; interface NormalizedApplicationEmojiRequestBase { action: ApplicationEmojiAction; operationKeyHash: string; } export type NormalizedApplicationEmojiChangeRequest = (Omit & NormalizedApplicationEmojiRequestBase) | (Omit & NormalizedApplicationEmojiRequestBase) | (Omit & NormalizedApplicationEmojiRequestBase); export interface ProjectedApplicationEmoji { animated: boolean; available: boolean; emojiId: string; managed: boolean; name: string; requiresColons: boolean; unknownFieldCount: number; uploaderProjectedOut: true; } export type PlannedApplicationEmoji = Omit & { emojiId: string | null; }; export interface ApplicationEmojiPrivacyProjection { omittedFields: typeof APPLICATION_EMOJI_OMITTED_FIELDS; privateFieldsProjectedOut: true; } export interface ApplicationEmojiInventoryResult { applicationId: string; botId: string; emojis: ProjectedApplicationEmoji[]; page: { returned: number; safetyLimit: number; }; privacy: ApplicationEmojiPrivacyProjection; responseUnknownFieldCount: number; schemaVersion: number; status: "ok"; } export interface ApplicationEmojiLookupResult extends Omit { emoji: ProjectedApplicationEmoji; } export interface ApplicationEmojiPlan { action: ApplicationEmojiAction; applicationId: string; botId: string; createdAt: string; desired: PlannedApplicationEmoji | null; digest: string; effect: "change" | "none"; emojiId: string | null; existing: ProjectedApplicationEmoji | null; file: { contentDigest: string; review: GuildExpressionFileReview; } | null; inventory: { digest: string; returned: number; safetyLimit: number; }; operationKeyHash: string; privacy: ApplicationEmojiPrivacyProjection; risks: string[]; schemaVersion: number; status: "already-absent" | "already-current" | "planned"; verification: { imageBytesReadableAfterWrite: false; metadataReadback: "exact-application-emoji"; }; warnings: string[]; writeRequired: boolean; } export interface ApplicationEmojiResult { action: ApplicationEmojiAction; activityId: string | null; applicationId: string; emojiId: string; observed: ProjectedApplicationEmoji | null; operationKeyHash: string; planDigest: string; schemaVersion: number; status: "already-absent" | "already-current" | "completed" | "completed-with-drift"; } export interface ApplicationEmojiServiceClient { createApplicationEmoji: DiscordClient["createApplicationEmoji"]; deleteApplicationEmoji: DiscordClient["deleteApplicationEmoji"]; getApplicationEmoji: DiscordClient["getApplicationEmoji"]; listApplicationEmojis: DiscordClient["listApplicationEmojis"]; modifyApplicationEmoji: DiscordClient["modifyApplicationEmoji"]; } export interface ApplicationEmojiServiceOptions { activityStore: ActivityStore; client: ApplicationEmojiServiceClient; clock?: () => Date; fileRoots: readonly string[]; operationStore: OperationStore; planKey?: Uint8Array; policy: ScopePolicy; randomId?: () => string; } export declare function normalizeApplicationEmojiChangeRequest(request: ApplicationEmojiChangeRequest): NormalizedApplicationEmojiChangeRequest; export declare class ApplicationEmojiService { #private; constructor(options: ApplicationEmojiServiceOptions); list(applicationId: string, botId: string, options?: RequestOptions): Promise; get(applicationId: string, botId: string, emojiId: string, options?: RequestOptions): Promise; plan(applicationId: string, botId: string, request: ApplicationEmojiChangeRequest, options?: RequestOptions): Promise; execute(applicationId: string, botId: string, request: ApplicationEmojiChangeRequest, expectedDigest: string, options?: RequestOptions): Promise; } export {}; //# sourceMappingURL=application-emoji-service.d.ts.map