import type { ActivityStore } from "./activity-log.js"; import { type ComponentLayoutCounts, type ComponentLayoutInput, type ComponentLayoutReview, type NormalizedComponentLayout } from "./component-layout.js"; import type { DiscordClient } from "./discord-client.js"; import { InteractionLimiter } from "./interaction-limiter.js"; import { type OperationReceipt, type OperationStore } from "./operation-store.js"; import type { NativeInteractionRequestButtonReadiness } from "./native-interaction-broker.js"; import { type DiscordPermissionName } from "./permissions.js"; import type { ScopePolicy } from "./policy.js"; import type { RequestOptions } from "./types.js"; export declare const COMPONENT_MESSAGE_ACTIONS: readonly ["create", "edit"]; export type ComponentMessageAction = typeof COMPONENT_MESSAGE_ACTIONS[number]; export type ComponentMessageContentIntentStatus = "disabled" | "enabled" | "unknown"; declare const PRIVACY_OMITTED_FIELDS: readonly ["attachmentUrls", "componentLayouts", "componentText", "embeds", "generatedComponentIds", "mentionProfiles", "nonce", "notificationUserIds", "parsedUserMentionIds", "rawOperationKey", "rawPayloads", "requestButtonCustomIds", "requestButtonRoutes", "replyAuthorId"]; export interface ComponentMessageRequest { action: ComponentMessageAction; channelId: string; components: readonly ComponentLayoutInput[]; messageId?: string; notifyReplyAuthor?: boolean; notifyUserIds?: readonly string[]; operationKey: string; replyToMessageId?: string; } export interface NormalizedComponentMessageRequest { action: ComponentMessageAction; channelId: string; components: NormalizedComponentLayout; messageId: string | null; notifyReplyAuthor: boolean; notifyUserIds: string[]; operationKey: string; operationKeyHash: string; replyToMessageId: string | null; review: ComponentLayoutReview; } export interface ComponentMessagePrivacyProjection { durableRecords: "content-free"; omittedFields: typeof PRIVACY_OMITTED_FIELDS; planPersistence: "none"; rawPayloads: "omitted"; } export interface ComponentMessagePermissionEvidence { administrator: boolean; appliedRoleIds: string[]; canReadMessages: true; confidence: "complete"; effectivePermissionNames: DiscordPermissionName[]; effectivePermissions: string; permissionSourceChannelId: string; privateThreadAccess: "lookup-succeeded" | "not-applicable"; requiredPermissionNames: DiscordPermissionName[]; } export interface ComponentMessageRequestButtonIngress { authorizedUserIds: string[]; commandId: string; commandVersion: string; gatewayDelivery: "verified"; guildId: string; phase: "ready"; ready: true; schemaVersion: number; } export interface ComponentMessagePlan { action: ComponentMessageAction; applicationId: string; botId: string; channel: { guildId: string; id: string; parentId: string | null; type: number; }; createdAt: string; current: { flags: number; layout: NormalizedComponentLayout; messageId: string; parsedUserMentionIds: string[]; pinned: boolean; preview: string; requestButtonCount: number; requestButtonRouteHash: string | null; timestamp: string; } | null; digest: string; guild: { id: string; name: string; }; messageContentIntent: "enabled"; notificationUserIds: string[]; notifyReplyAuthor: boolean; operationKeyHash: string; permission: ComponentMessagePermissionEvidence; privacy: ComponentMessagePrivacyProjection; reply: { authorId: string; messageId: string; type: number; } | null; requestButtons: { count: number; ingress: ComponentMessageRequestButtonIngress | null; }; schemaVersion: number; status: "already-current" | "planned"; target: { counts: ComponentLayoutCounts; layout: NormalizedComponentLayout; linkOrigins: string[]; linkUrls: string[]; messageId: string | null; preview: string; suppressedUserMentionIds: string[]; textCharacters: number; }; warnings: string[]; writeRequired: boolean; } export interface ComponentMessageResult { action: ComponentMessageAction; activityId: string | null; channelId: string; guildId: string; messageId: string; operationKeyHash: string; planDigest: string; readbackMatched: true; responseMatched: true; schemaVersion: number; status: "already-current" | "completed"; url: string; } export type ComponentMessageVerificationReason = "message-missing" | "message-state-mismatch" | "operation-failed" | "operation-not-found" | "operation-pending" | "operation-uncertain" | "receipt-target-mismatch" | "request-mismatch"; export interface ComponentMessageVerificationResult { action: ComponentMessageAction; activityId: string | null; channelId: string; guildId: string | null; messageId: string | null; operationKeyHash: string; planDigest: string | null; readbackMatched: boolean; reason: ComponentMessageVerificationReason | null; receiptStatus: OperationReceipt["status"] | null; requestMatched: boolean; schemaVersion: number; status: "blocked" | "drifted" | "not-found" | "verified"; timestamp: string | null; url: string | null; } export interface ComponentMessageServiceClient extends Pick { } export interface ComponentMessageServiceOptions { activityStore: ActivityStore; client: ComponentMessageServiceClient; clock?: () => Date; limiter: InteractionLimiter; operationStore: OperationStore; planKey?: Uint8Array; policy: ScopePolicy; randomId?: () => string; requestButtonKey?: Uint8Array; requestButtonReadiness?: (guildId: string) => NativeInteractionRequestButtonReadiness | Promise; verificationKey?: Uint8Array; } export declare function normalizeComponentMessageRequest(request: ComponentMessageRequest): NormalizedComponentMessageRequest; export declare function componentMessageNonce(channelId: string, operationKey: string): string; export declare function componentMessageVerificationKey(token: string): Uint8Array; export declare function componentMessageRequestDigest(key: Uint8Array, applicationId: string, botId: string, request: NormalizedComponentMessageRequest): string; export declare class ComponentMessageService { #private; constructor(options: ComponentMessageServiceOptions); plan(applicationId: string, botId: string, intent: ComponentMessageContentIntentStatus, request: ComponentMessageRequest, options?: RequestOptions): Promise; verify(applicationId: string, botId: string, intent: ComponentMessageContentIntentStatus, request: ComponentMessageRequest, options?: RequestOptions): Promise; execute(applicationId: string, botId: string, intent: ComponentMessageContentIntentStatus, request: ComponentMessageRequest, expectedDigest: string, options?: RequestOptions): Promise; } export {}; //# sourceMappingURL=component-message-service.d.ts.map