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 GUILD_EXPRESSION_OMITTED_FIELDS: readonly ["cdnUrl", "imageBytes", "rawDiscordObject", "uploaderProfile"]; export type GuildExpressionAction = "create" | "delete" | "update"; export type GuildExpressionKind = "emoji" | "sticker"; interface GuildExpressionRequestBase { action: GuildExpressionAction; auditReason: string; guildId: string; kind: GuildExpressionKind; operationKey: string; } export interface CreateGuildEmojiRequest extends GuildExpressionRequestBase { action: "create"; filePath: string; kind: "emoji"; name: string; roleIds?: readonly string[]; } export interface UpdateGuildEmojiRequest extends GuildExpressionRequestBase { action: "update"; expressionId: string; kind: "emoji"; name?: string; roleIds?: readonly string[]; } export interface DeleteGuildEmojiRequest extends GuildExpressionRequestBase { action: "delete"; expressionId: string; kind: "emoji"; } export interface CreateGuildStickerRequest extends GuildExpressionRequestBase { action: "create"; description: string; filePath: string; kind: "sticker"; name: string; tags: string; } export interface UpdateGuildStickerRequest extends GuildExpressionRequestBase { action: "update"; description?: string | null; expressionId: string; kind: "sticker"; name?: string; tags?: string; } export interface DeleteGuildStickerRequest extends GuildExpressionRequestBase { action: "delete"; expressionId: string; kind: "sticker"; } export type GuildExpressionChangeRequest = CreateGuildEmojiRequest | CreateGuildStickerRequest | DeleteGuildEmojiRequest | DeleteGuildStickerRequest | UpdateGuildEmojiRequest | UpdateGuildStickerRequest; interface NormalizedRequestBase { action: GuildExpressionAction; auditReason: string; guildId: string; kind: GuildExpressionKind; operationKeyHash: string; } export type NormalizedGuildExpressionChangeRequest = (Omit & NormalizedRequestBase & { action: "create"; kind: "emoji"; roleIds: string[]; }) | (Omit & NormalizedRequestBase & { action: "update"; kind: "emoji"; roleIds?: string[]; }) | (Omit & NormalizedRequestBase & { action: "delete"; kind: "emoji"; }) | (Omit & NormalizedRequestBase & { action: "create"; kind: "sticker"; }) | (Omit & NormalizedRequestBase & { action: "update"; kind: "sticker"; }) | (Omit & NormalizedRequestBase & { action: "delete"; kind: "sticker"; }); export interface ProjectedGuildEmoji { animated: boolean; available: boolean; creatorUserId: string | null; expressionId: string; kind: "emoji"; managed: boolean; name: string; requiresColons: boolean; roleIds: string[]; } export interface ProjectedGuildSticker { available: boolean; creatorUserId: string | null; description: string | null; expressionId: string; formatType: number; guildId: string; kind: "sticker"; name: string; tags: string; } export type ProjectedGuildExpression = ProjectedGuildEmoji | ProjectedGuildSticker; export type PlannedGuildExpression = (Omit & { expressionId: string | null; }) | (Omit & { expressionId: string | null; }); export interface GuildExpressionPermissionEvidence { administrator: boolean; confidence: "complete"; createGuildExpressions: boolean; effectivePermissions: string; guildOwner: boolean; manageGuildExpressions: boolean; ownershipRequired: boolean; } export interface GuildExpressionPrivacyProjection { omittedFields: typeof GUILD_EXPRESSION_OMITTED_FIELDS; privateFieldsProjectedOut: true; } export interface GuildExpressionInventoryResult { expressions: ProjectedGuildExpression[]; guild: { id: string; name: string; }; kind: GuildExpressionKind; page: { returned: number; safetyLimit: number; }; permission: GuildExpressionPermissionEvidence; privacy: GuildExpressionPrivacyProjection; schemaVersion: number; status: "ok"; } export interface GuildExpressionLookupResult extends Omit { expression: ProjectedGuildExpression; } export interface GuildExpressionPlan { action: GuildExpressionAction; applicationId: string; auditReason: string; botId: string; createdAt: string; desired: PlannedGuildExpression | null; digest: string; effect: "change" | "none"; existing: ProjectedGuildExpression | null; file: { contentDigest: string; review: GuildExpressionFileReview; } | null; guild: { id: string; name: string; }; kind: GuildExpressionKind; operationKeyHash: string; permission: GuildExpressionPermissionEvidence; privacy: GuildExpressionPrivacyProjection; schemaVersion: number; status: "already-current" | "planned"; visibleInventory: { returned: number; safetyLimit: number; }; warnings: string[]; } export interface GuildExpressionResult { action: GuildExpressionAction; activityId: string | null; expressionId: string; guildId: string; kind: GuildExpressionKind; observed: ProjectedGuildExpression | null; operationKeyHash: string; planDigest: string; schemaVersion: number; status: "already-current" | "completed" | "completed-with-drift"; } export interface GuildExpressionServiceClient extends Pick { } export interface GuildExpressionServiceOptions { activityStore: ActivityStore; client: GuildExpressionServiceClient; clock?: () => Date; fileRoots: readonly string[]; operationStore: OperationStore; planKey?: Uint8Array; policy: ScopePolicy; randomId?: () => string; } export declare function normalizeGuildExpressionChangeRequest(request: GuildExpressionChangeRequest): NormalizedGuildExpressionChangeRequest; export declare class GuildExpressionService { #private; constructor(options: GuildExpressionServiceOptions); list(botId: string, guildId: string, kind: GuildExpressionKind, options?: RequestOptions): Promise; get(botId: string, guildId: string, kind: GuildExpressionKind, expressionId: string, options?: RequestOptions): Promise; plan(applicationId: string, botId: string, request: GuildExpressionChangeRequest, options?: RequestOptions): Promise; execute(applicationId: string, botId: string, request: GuildExpressionChangeRequest, expectedDigest: string, options?: RequestOptions): Promise; } export {}; //# sourceMappingURL=guild-expression-service.d.ts.map