import type { ActivityStore } from "./activity-log.js"; import { type DiscordClient } from "./discord-client.js"; import type { GatewayChannelLayoutSource } from "./gateway-channel-layout.js"; import { type GuildChannelEvidenceView } from "./guild-channel-evidence.js"; import { type OperationStore } from "./operation-store.js"; import { type DiscordPermissionName } from "./permissions.js"; import type { ScopePolicy } from "./policy.js"; import type { RequestOptions } from "./types.js"; export declare const ONBOARDING_MODE_NAMES: readonly ["advanced", "default"]; export declare const ONBOARDING_PROMPT_TYPE_NAMES: readonly ["dropdown", "multiple-choice"]; export type OnboardingModeName = typeof ONBOARDING_MODE_NAMES[number]; export type OnboardingPromptTypeName = typeof ONBOARDING_PROMPT_TYPE_NAMES[number]; declare const ONBOARDING_LOCAL_LIMITS: Readonly<{ defaultChannels: 25; enabledDefaultChannels: 7; enabledSendableDefaultChannels: 5; optionDescriptionCharacters: 100; optionReferences: 25; optionsPerPrompt: 25; optionTitleCharacters: 100; prompts: 5; promptTitleCharacters: 100; }>; export type OnboardingEmojiRequest = { guildEmojiId: string; kind: "guild"; } | { kind: "unicode"; unicode: string; }; export interface OnboardingOptionRequest { channelIds: readonly string[]; description: string | null; emoji?: OnboardingEmojiRequest | null; optionId?: string; roleIds: readonly string[]; title: string; } export interface OnboardingPromptRequest { inOnboarding: boolean; options: readonly OnboardingOptionRequest[]; promptId?: string; required: boolean; singleSelect: boolean; title: string; type: OnboardingPromptTypeName; } export interface OnboardingChangeRequest { auditReason: string; defaultChannelIds: readonly string[]; enabled: boolean; guildId: string; mode: OnboardingModeName; operationKey: string; prompts: readonly OnboardingPromptRequest[]; } export interface NormalizedOnboardingOptionRequest { channelIds: string[]; description: string | null; emoji: OnboardingEmojiRequest | null; optionId: string | null; roleIds: string[]; title: string; } export interface NormalizedOnboardingPromptRequest { inOnboarding: boolean; options: NormalizedOnboardingOptionRequest[]; promptId: string | null; required: boolean; singleSelect: boolean; title: string; type: OnboardingPromptTypeName; } export interface NormalizedOnboardingChangeRequest { auditReason: string; defaultChannelIds: string[]; enabled: boolean; guildId: string; mode: OnboardingModeName; operationKey: string; operationKeyHash: string; prompts: NormalizedOnboardingPromptRequest[]; } export interface OnboardingAccessEvidence { appliedRoleIds: string[]; authorizedForChange: boolean; botAdministrator: boolean; botIsGuildOwner: boolean; complete: true; effectivePermissionNames: DiscordPermissionName[]; effectivePermissions: string; highestRoleIds: string[]; highestRolePosition: number; manageGuild: boolean; manageRoles: boolean; requiredChangePermissions: readonly ["MANAGE_GUILD", "MANAGE_ROLES"]; unknownPermissionBits: string; } export interface OnboardingChannelReferenceView { direct: boolean; everyoneCanSend: boolean | null; everyoneCanView: boolean | null; exists: boolean; id: string; type: number | null; } export interface OnboardingRoleReferenceView { exists: boolean; id: string; reasons: string[]; safeSelfAssignable: boolean; } export type OnboardingEmojiView = { animated: boolean | null; guildEmojiId: string; healthy: boolean; kind: "guild"; restrictedRoleIds: string[]; unicode: null; } | { animated: false; guildEmojiId: null; healthy: boolean; kind: "unicode"; restrictedRoleIds: []; unicode: string | null; } | { animated: null; guildEmojiId: null; healthy: true; kind: "none"; restrictedRoleIds: []; unicode: null; }; export interface OnboardingOptionView { channelReferences: OnboardingChannelReferenceView[]; description: string | null; descriptionCharacters: number | null; emoji: OnboardingEmojiView; id: string | null; roleReferences: OnboardingRoleReferenceView[]; title: string | null; titleCharacters: number; } export interface OnboardingPromptView { id: string | null; inOnboarding: boolean; options: OnboardingOptionView[]; required: boolean; singleSelect: boolean; title: string | null; titleCharacters: number; type: { name: OnboardingPromptTypeName | null; value: number; }; } export interface OnboardingEnablementEvidence { constraintsMet: boolean; defaultChannelCount: number; distinctDefaultChannelCount: number; requiredDefaultChannelCount: number; requiredSendableDefaultChannelCount: number; sendableDefaultChannelCount: number; visibleDefaultChannelCount: number; } export interface OnboardingConfigurationView { communityGuild: boolean; defaultChannels: OnboardingChannelReferenceView[]; enabled: boolean; enablement: OnboardingEnablementEvidence; issues: string[]; mode: { name: OnboardingModeName | null; value: number; }; prompts: OnboardingPromptView[]; replacementBlockedReasons: string[]; textIncluded: boolean; unknownEnumCount: number; unknownFieldCount: number; } export interface OnboardingPrivacyProjection { persistence: "none"; rawPayloads: "omitted"; text: "included" | "omitted"; unknownFields: "counts-only"; } export interface OnboardingAuditResult { access: OnboardingAccessEvidence; applicationId: string; botId: string; channelEvidence: GuildChannelEvidenceView; configuration: OnboardingConfigurationView; guild: { id: string; name: string; }; localLimits: typeof ONBOARDING_LOCAL_LIMITS; privacy: OnboardingPrivacyProjection; schemaVersion: number; status: "ok"; verificationBoundary: { apiReadback: true; freshNonStaffClientCheckRecommended: boolean; memberExperienceVerified: false; }; } export interface OnboardingChangeDiff { channelAssignmentsAdded: number; channelAssignmentsRemoved: number; defaultChannelsAdded: number; defaultChannelsRemoved: number; emojiChanges: number; enabledChanged: boolean; modeChanged: boolean; optionsAdded: number; optionsModified: number; optionsRemoved: number; optionsRetained: number; promptsAdded: number; promptsModified: number; promptsRemoved: number; promptsRetained: number; roleAssignmentsAdded: number; roleAssignmentsRemoved: number; textChanges: number; } export interface OnboardingChangePlan { access: OnboardingAccessEvidence; applicationId: string; auditReason: string; botId: string; channelEvidence: GuildChannelEvidenceView; createdAt: string; current: OnboardingConfigurationView; desired: OnboardingConfigurationView; diff: OnboardingChangeDiff; digest: string; guild: { id: string; name: string; }; localLimits: typeof ONBOARDING_LOCAL_LIMITS; operationKeyHash: string; privacy: OnboardingPrivacyProjection; risks: string[]; schemaVersion: number; status: "already-current" | "planned"; verificationBoundary: OnboardingAuditResult["verificationBoundary"]; warnings: string[]; writeRequired: boolean; } export interface OnboardingChangeResult { activityId: string | null; guildId: string; operationKeyHash: string; planDigest: string; schemaVersion: number; status: "already-current" | "completed" | "completed-with-drift"; verification: "drift" | "match" | "not-required"; } export interface OnboardingServiceClient extends Pick { } export interface OnboardingServiceOptions { activityStore: ActivityStore; client: OnboardingServiceClient; clock?: () => Date; layoutSource: GatewayChannelLayoutSource; operationStore: OperationStore; planKey?: Uint8Array; policy: Pick; randomId?: () => string; } export declare function assertOnboardingGetInput(guildId: string, includeText: boolean): void; export declare function normalizeOnboardingChangeRequest(request: OnboardingChangeRequest): NormalizedOnboardingChangeRequest; export declare class OnboardingService { #private; constructor(options: OnboardingServiceOptions); get(applicationId: string, botId: string, guildId: string, includeText?: boolean, options?: RequestOptions): Promise; plan(applicationId: string, botId: string, request: OnboardingChangeRequest, options?: RequestOptions): Promise; reconcilePlan(applicationId: string, botId: string, request: OnboardingChangeRequest, options?: RequestOptions): Promise; execute(applicationId: string, botId: string, request: OnboardingChangeRequest, expectedDigest: string, options?: RequestOptions): Promise; } export {}; //# sourceMappingURL=onboarding-service.d.ts.map