import type { DiscordRoleInspection, GuildAccessPolicy, ServiceAccess } from "./index.js"; export declare const CREATOR_ONBOARDING_SESSION_LIFETIME_MS: number; export declare const CREATOR_ONBOARDING_RESULT_RETENTION_MS: number; export declare const CREATOR_INVITE_REGENERATION_COOLDOWN_MS: number; export type CreatorInvitePurpose = "welcome" | "overview"; export declare class CreatorInviteOperationError extends Error { readonly code: "unavailable" | "forbidden" | "invalid_role" | "invalid_channel" | "operation_conflict" | "creation_uncertain" | "creation_rejected" | "cooldown" | "not_owned" | "replacement_pending"; readonly retryAt?: string | undefined; constructor(code: "unavailable" | "forbidden" | "invalid_role" | "invalid_channel" | "operation_conflict" | "creation_uncertain" | "creation_rejected" | "cooldown" | "not_owned" | "replacement_pending", retryAt?: string | undefined); } export type CreatorRequirement = "following" | "subscribed" | "both"; export type CreatorRecheckSchedule = "off" | "daily" | "three_days" | "weekly"; export type CreatorOverviewPattern = "plain" | "glow" | "dots" | "grid" | "diagonal"; export type CreatorOverviewFont = "modern" | "rounded" | "classic" | "mono"; export interface CreatorOverviewBlock { eyebrow: string; title: string; text: string; } /** Manager-only content. Guild branding and canonical Twitch identity are core-resolved. */ export interface CreatorOverviewDraft { schemaVersion: 1; inviteChannelId?: string | undefined; title: string; intro: string; creator: string; background: string; pattern: CreatorOverviewPattern; font: CreatorOverviewFont; blocks: readonly CreatorOverviewBlock[]; requirements: readonly { requirement: CreatorRequirement; roleId: string; recheckSchedule: CreatorRecheckSchedule; }[]; } /** Shared by selection, creation and delivery, using permissions rather than role names. */ export declare const DISCORD_PRIVILEGED_ROLE_PERMISSION_NAMES: readonly string[]; export declare function isPublicCreatorRoleEligible(role: DiscordRoleInspection, access: Pick): boolean; export interface CreatorOwnedInvite { reference: string; guildId: string; channelId: string; roleId: string | null; purpose: CreatorInvitePurpose; state: "active" | "revoked" | "revocation_pending" | "unknown"; regenerateAfter: string | null; } /** Raw codes remain in protected core storage, not module snapshots or inspection. */ export interface CreatorInviteService { /** Cancel only an existing durable operation; must never create an invite. */ cancelOperation(input: { guildId: string; operationId: string; }): Promise<{ state: "revoked" | "revocation_pending" | "unknown"; }>; /** Role-less public projection only; never exposes a welcome-role invite. */ publicOverview(input: { guildId: string; reference: string; }): Promise<{ guildName: string; guildIconUrl: string | null; discordInviteUrl: string; }>; selectableRoles(input: { guildId: string; actorUserId: string; }): Promise<{ roleIds: readonly string[]; }>; create(input: { guildId: string; actorUserId: string; channelId: string; roleId: string | null; purpose: CreatorInvitePurpose; operationId: string; replacesReference?: string; }): Promise; inspect(input: { guildId: string; reference: string; }): Promise; shareUrl(input: { guildId: string; actorUserId: string; reference: string; }): Promise<{ url: string; }>; revoke(input: { guildId: string; reference: string; operationId: string; reason: "manager" | "replaced" | "disabled" | "uninstalled" | "entitlement_lost"; }): Promise<{ state: "revoked" | "revocation_pending" | "unknown"; }>; } export interface CreatorOverviewPublicPage { guildId: string; overviewId: string; configurationRevision: number; content: CreatorOverviewDraft; guildName: string; guildIconUrl: string | null; discordInviteUrl: string; } export type CreatorOnboardingRequest = { action: "join"; guildId: string; reference: string; configurationRevision: number; memberUserId: string; accountSlot: 1 | 2 | 3; sessionId: string; authorisationReference: string; withTwitch: boolean; } | { action: "page"; guildId: string; reference: string; } | { action: "consumer"; guildId: string; overviewId: string; reference?: string | undefined; configurationRevision?: number | undefined; } | { action: "check" | "deliver" | "inspect"; guildId: string; reference: string; configurationRevision: number; memberUserId: string; accountSlot: 1 | 2 | 3; }; export interface CreatorRequirementOutcome { requirement: CreatorRequirement; roleId: string; eligibility: "eligible" | "ineligible" | "unknown"; delivery: "not_requested" | "pending" | "given" | "not_eligible"; safeCode?: string | undefined; } export type CreatorOnboardingResponse = { available: false; } | { available: true; page?: CreatorOverviewPublicPage | undefined; joinOutcome?: "joined" | "already_member" | "rejected" | "uncertain" | undefined; memberReadiness?: CreatorMemberReadiness | undefined; results?: readonly CreatorRequirementOutcome[] | undefined; }; /** Trusted hosted control operation, not a manager action or browser-supplied role grant. */ export interface CreatorOnboardingContribution { execute(input: CreatorOnboardingRequest, services: ServiceAccess): Promise; } export type CreatorMemberReadiness = "ready" | "member_missing" | "screening_pending" | "access_pending" | "unavailable"; /** Trusted core checks current admission policy; unknown readiness never authorises a grant. */ export interface CreatorGuildJoinService { inspect(input: { guildId: string; memberUserId?: string; }): Promise<{ joining: "open" | "paused" | "unavailable"; memberReadiness: CreatorMemberReadiness; }>; join(input: { guildId: string; memberUserId: string; sessionId: string; authorisationReference: string; }): Promise<{ outcome: "joined" | "already_member" | "rejected" | "uncertain"; memberReadiness: CreatorMemberReadiness; safeCode?: string; }>; }