import type { ActivityStore } from "./activity-log.js"; import { type DiscordClient } from "./discord-client.js"; import { type OperationStore } from "./operation-store.js"; import type { ScopePolicy } from "./policy.js"; import type { RequestOptions } from "./types.js"; declare const PRIVACY_OMISSIONS: readonly ["applicationMetadata", "creatorProfile", "followerSourceChannelName", "followerSourceGuildIcon", "followerSourceGuildName", "messageData", "unrelatedWebhookIdentifiers", "unknownRawFields", "webhookAvatar", "webhookName", "webhookToken", "webhookUrl"]; export type AnnouncementSubscriptionAction = "subscribe" | "unsubscribe"; export interface AnnouncementSubscribeRequest { action: "subscribe"; auditReason: string; operationKey: string; sourceChannelId: string; targetChannelId: string; webhookId?: never; } export interface AnnouncementUnsubscribeRequest { action: "unsubscribe"; auditReason: string; operationKey: string; sourceChannelId?: never; targetChannelId: string; webhookId: string; } export type AnnouncementSubscriptionRequest = AnnouncementSubscribeRequest | AnnouncementUnsubscribeRequest; export type NormalizedAnnouncementSubscriptionRequest = (AnnouncementSubscribeRequest & { operationKeyHash: string; }) | (AnnouncementUnsubscribeRequest & { operationKeyHash: string; }); export interface AnnouncementSubscriptionChannelProjection { guildId: string; id: string; name: string; parentId: string | null; type: number; typeName: string; } export interface AnnouncementSubscriptionPermissionEvidence { administrator: boolean; confidence: "complete"; effectivePermissions: string; manageWebhooks: boolean; permissionSourceChannelId: string; viewChannel: true; } export type AnnouncementSubscriptionWebhookType = "application" | "channel-follower" | "incoming"; export interface AnnouncementSubscriptionWebhookSnapshot { createdAt: string; sourceChannelId: string | null; sourceGuildId: string | null; sourceIdentity: "available" | "not-applicable" | "redacted" | "unavailable"; type: AnnouncementSubscriptionWebhookType; webhookId: string; } export interface AnnouncementSubscriptionProjection extends AnnouncementSubscriptionWebhookSnapshot { sourceIdentity: "available" | "redacted" | "unavailable"; type: "channel-follower"; } export interface AnnouncementSubscriptionPrivacyProjection { credentialsProjectedOut: true; messageDataAccessed: false; omittedFields: typeof PRIVACY_OMISSIONS; } export interface AnnouncementSubscriptionTargetEndpoint { channel: AnnouncementSubscriptionChannelProjection; guild: { id: string; name: string; }; inventory: { channelFollowers: number; safetyLimit: number; totalWebhooks: number; }; permission: AnnouncementSubscriptionPermissionEvidence; subscriptions: AnnouncementSubscriptionProjection[]; } export interface AnnouncementSubscriptionSourceEndpoint { channel: AnnouncementSubscriptionChannelProjection; guild: { id: string; name: string; }; permission: AnnouncementSubscriptionPermissionEvidence; } export interface AnnouncementSubscriptionInventoryResult { privacy: AnnouncementSubscriptionPrivacyProjection; schemaVersion: number; status: "ok"; target: AnnouncementSubscriptionTargetEndpoint; } export interface AnnouncementSubscriptionPlan { action: AnnouncementSubscriptionAction; applicationId: string; auditReason: string; botId: string; createdAt: string; current: AnnouncementSubscriptionProjection | null; desired: { subscribed: boolean; }; digest: string; operationKeyHash: string; privacy: AnnouncementSubscriptionPrivacyProjection; risks: string[]; schemaVersion: number; source: AnnouncementSubscriptionSourceEndpoint | null; status: "already-current" | "planned"; target: AnnouncementSubscriptionTargetEndpoint; warnings: string[]; writeRequired: boolean; } export interface AnnouncementSubscriptionResult { action: AnnouncementSubscriptionAction; activityId: string | null; inventoryMatched: boolean; operationKeyHash: string; planDigest: string; readbackMatched: boolean; responseMatched: boolean | null; schemaVersion: number; sourceChannelId: string | null; sourceGuildId: string | null; status: "already-current" | "completed" | "completed-with-drift"; targetChannelId: string; targetGuildId: string; verifiedAbsent: boolean; webhookId: string; } export interface AnnouncementSubscriptionServiceClient { deleteWebhook: DiscordClient["deleteWebhook"]; followAnnouncementChannel: DiscordClient["followAnnouncementChannel"]; getChannel: DiscordClient["getChannel"]; getGuild: DiscordClient["getGuild"]; getGuildMember: DiscordClient["getGuildMember"]; getGuildRoles: DiscordClient["getGuildRoles"]; listChannelWebhooks: DiscordClient["listChannelWebhooks"]; } export interface AnnouncementSubscriptionServiceOptions { activityStore: ActivityStore; client: AnnouncementSubscriptionServiceClient; clock?: () => Date; operationStore: OperationStore; planKey?: Uint8Array; policy: ScopePolicy; randomId?: () => string; } export declare function normalizeAnnouncementSubscriptionRequest(request: AnnouncementSubscriptionRequest): NormalizedAnnouncementSubscriptionRequest; export declare class AnnouncementSubscriptionService { #private; constructor(options: AnnouncementSubscriptionServiceOptions); list(botId: string, targetChannelId: string, options?: RequestOptions): Promise; plan(applicationId: string, botId: string, request: AnnouncementSubscriptionRequest, options?: RequestOptions): Promise; execute(applicationId: string, botId: string, request: AnnouncementSubscriptionRequest, expectedDigest: string, options?: RequestOptions): Promise; } export {}; //# sourceMappingURL=announcement-subscription-service.d.ts.map