import type { AppType, AppSurface } from './app.js';
import type { AppAuthFilter, AppControllerFilter, AppSurfaceFilter } from './app-capability-filters.js';
import type { ContentLicense, ContentPermissions } from './content-license.js';
import type { AppAuthMode, AppControllerMode, AppHostingMode, ReviewState, AppVersionVisibility } from './version.js';
import type { AssetCategory, AssetResponse } from './asset.js';
import type { AppMetadataAssetSpecSupport, AssetSpecListResponse, AssetSpecResponse, AssetSpecSearchResult, AssetSpecVersionResponse, AssetSpecVersionsListResponse } from './asset-spec.js';
import type { AssetPackResponse } from './asset-pack.js';
export interface CreateAppRequest {
    name: string;
    displayName?: string;
}
export interface UpdateAppRequest {
    displayName?: string;
    type?: AppType;
}
export interface AdminUpdateAppRequest {
    type?: AppType;
}
export interface LoginRequest {
    username: string;
    password: string;
}
export interface RegisterRequest {
    username: string;
    password: string;
    displayName: string;
    inviteCode?: string;
}
export interface RegisterResponse {
    accessToken?: string;
    user: PublicUser;
}
export interface ApiKeyLoginRequest {
    apiKey: string;
}
export interface CliLoginStartResponse {
    requestId: string;
    pollToken: string;
    loginUrl: string;
    expiresAt: string;
    pollIntervalMs: number;
}
export interface CliLoginPollRequest {
    requestId: string;
    pollToken: string;
}
export interface CliLoginPendingResponse {
    status: 'pending';
    expiresAt: string;
}
export type CliLoginPollResponse = LoginResponse | CliLoginPendingResponse;
export interface CliLoginStatusResponse {
    status: 'pending' | 'approved' | 'expired';
    expiresAt: string;
}
export interface CliLoginApproveRequest {
    requestId: string;
}
export interface CliLoginApproveResponse {
    success: boolean;
}
export interface CliWebLaunchStartRequest {
    redirectPath: string;
}
export interface CliWebLaunchStartResponse {
    launchUrl: string;
    expiresAt: string;
}
export interface CliApiKeyStatusResponse {
    hasKey: boolean;
    prefix?: string;
    createdAt?: string;
    lastUsedAt?: string | null;
}
export interface CreateCliApiKeyResponse {
    apiKey: string;
    prefix: string;
    createdAt: string;
}
export interface CreateUserRequest {
    username: string;
    password: string;
    role: 'USER' | 'CREATOR' | 'ADMIN';
}
export interface SetProfileAssetRequest {
    assetRef: string;
}
export interface SetProfileAssetResponse {
    selectedProfileAssetRef: string;
}
export interface ApiErrorResponse {
    error: string;
    message?: string;
}
export declare const TAG_SLUG_REGEX: RegExp;
export interface ContentTagSummary {
    ref: string;
    groupSlug: string;
    groupDisplayName: string;
    slug: string;
    displayName: string;
}
export interface TagGroupSummary {
    slug: string;
    displayName: string;
    allowedTargetKinds: SavedItemKind[];
    createdAt: string;
    updatedAt: string;
}
export interface TagSummary extends ContentTagSummary {
    createdAt: string;
    updatedAt: string;
}
export interface TagGroupWithTagsSummary extends TagGroupSummary {
    tags: TagSummary[];
}
export interface AppResponse {
    id?: number;
    name: string;
    displayName: string;
    description: string;
    creatorId?: number;
    creatorUsername: string;
    createdAt: string;
    updatedAt: string;
    type: AppType;
    emoji?: string | null;
    color?: string | null;
    lastPlayedAt?: string;
    /** Current version string (e.g., "1.2.3"), null if no versions exist */
    currentVersion?: string | null;
    /** Hosting mode of current version */
    hostingMode?: AppHostingMode;
    /** Auth mode of current version */
    authMode?: AppAuthMode;
    /** Controller mode of current version */
    controllerMode?: AppControllerMode;
    /** Whether the current hosted version can boot as a non-interactive detail-page preview */
    previewable?: boolean;
    /** Visibility of current version */
    visibility?: AppVersionVisibility;
    /** Review state of current version */
    reviewState?: ReviewState;
    reviewStartedAt?: string | null;
    reviewCompletedAt?: string | null;
    /** License of the current version */
    license?: ContentLicense;
    /** Server-derived capability flags for the current version */
    permissions?: ContentPermissions;
    /** Base URL for loading the app (from current version) */
    assetUrl: string | null;
    /** Entry point file within assetUrl */
    entryPoint?: string | null;
    /** Surface targets from current version (undefined for draft apps with no version) */
    surfaceTargets?: AppSurface[];
    /** Asset spec support declarations from the current version */
    assetSpecSupport?: AppMetadataAssetSpecSupport[];
    bundleSize?: number | null;
    sourceUrl?: string | null;
    hasEcs?: boolean;
    hasServer?: boolean;
    iconUrl?: string | null;
    heroPortraitUrl?: string | null;
    heroLandscapeUrl?: string | null;
    socialLandscapeUrl?: string | null;
    screenshotPortraitUrls?: string[];
    screenshotLandscapeUrls?: string[];
    videoPortraitUrls?: string[];
    videoLandscapeUrls?: string[];
    viewerSaved?: boolean;
    viewerLiked?: boolean;
    viewerDisliked?: boolean;
    likeCount?: number;
    dislikeCount?: number;
    viewCount?: number;
    playCount?: number;
    commentCount?: number;
    remixCount?: number;
    boostedUntil?: string | null;
    promotionSource?: string | null;
    promotionToken?: string | null;
    tags: ContentTagSummary[];
}
export type AdminAppResponse = AppResponse;
export interface AdminAppsListResponse {
    apps: AdminAppResponse[];
}
export interface AdminGameCollectionSummary {
    id: number;
    slug: string;
    displayName: string;
    description: string | null;
    iconUrl: string | null;
    gameCount: number;
    createdAt: string;
    updatedAt: string;
}
export interface AdminGameCollectionGame {
    id: number;
    name: string;
    displayName: string;
    creatorUsername: string;
    iconUrl: string | null;
    publishedAt: string | null;
}
export interface AdminGameCollectionDetail extends AdminGameCollectionSummary {
    games: AdminGameCollectionGame[];
}
export interface AdminGameCollectionsResponse {
    collections: AdminGameCollectionSummary[];
}
export interface AdminGameCollectionResponse {
    collection: AdminGameCollectionDetail;
}
export interface AdminGameCollectionCandidatesResponse {
    games: AdminGameCollectionGame[];
}
export interface CreateAdminGameCollectionRequest {
    slug: string;
    displayName: string;
    description?: string | null;
}
export interface UpdateAdminGameCollectionRequest {
    displayName?: string;
    description?: string | null;
}
export interface UpdateAdminGameCollectionGamesRequest {
    appIds: number[];
}
export interface DeleteAdminGameCollectionResponse {
    success: boolean;
}
export interface PublicUser {
    id: number;
    username: string;
    displayName: string;
    role: 'USER' | 'CREATOR' | 'ADMIN';
    selectedProfileAssetRef: string;
    profileAssetPreviewUrl: string;
    socialImageUrl: string | null;
    bio: string | null;
    youtubeUsername: string | null;
    githubUsername: string | null;
    websiteUrl: string | null;
    supportUrl: string | null;
    xUsername: string | null;
    xProfileImageUrl: string | null;
    googleEmail: string | null;
    googleProfileImageUrl: string | null;
    appleLinked?: boolean;
    appleEmail?: string | null;
    followerCount: number;
    followingCount: number;
    viewerFollowing?: boolean;
    viewerBlocked?: boolean;
    followsViewer?: boolean;
    createdAt: string;
    updatedAt: string;
}
export interface MeUser extends PublicUser {
    creditBalance: number;
    ownedAssetsCount: number;
    hasPassword: boolean;
    followingCreatorsCount: number;
    unreadNotificationsCount: number;
    unclaimedFreeCreditCount: number;
    creatorQuota?: CreatorQuotaResponse | null;
}
export interface InviteUserSummary {
    id: number;
    username: string;
    displayName: string;
    profileAssetPreviewUrl: string | null;
    viewerFollowing?: boolean;
    followsViewer?: boolean;
}
export interface CreatorQuotaLimitsResponse {
    maxAppsPerCreator: number;
    maxAssetPacksPerCreator: number;
    maxAssetsPerCreator: number;
    maxStoredContentBytes: number;
    maxVersionsPerApp: number;
    maxVersionsPerAsset: number;
    maxVersionsPerAssetPack: number;
}
export interface CreatorQuotaUsageResponse {
    appCount: number;
    assetPackCount: number;
    assetCount: number;
    storedContentBytes: number;
}
export interface CreatorQuotaResponse {
    tier: 'CREATOR' | 'ADMIN';
    limits: CreatorQuotaLimitsResponse;
    usage: CreatorQuotaUsageResponse;
}
export type AdminUserDetail = MeUser;
export interface UpdateProfileRequest {
    displayName?: string;
    bio?: string | null;
    youtubeUsername?: string | null;
    githubUsername?: string | null;
    websiteUrl?: string | null;
    supportUrl?: string | null;
}
export interface UpdateProfileResponse {
    user: MeUser;
}
export interface ChangePasswordRequest {
    currentPassword?: string;
    newPassword: string;
}
export interface ChangePasswordResponse {
    success: boolean;
}
export interface DeleteMyAccountRequest {
    username: string;
    currentPassword?: string;
}
export interface DeleteMyAccountResponse {
    success: boolean;
}
export type CreatorDeleteBlockingContentKind = 'ASSET_PACK' | 'ASSET' | 'ASSET_SPEC';
export type CreatorDeleteBlockingContentReason = 'asset_pack_in_use' | 'asset_in_use' | 'asset_spec_in_use' | 'asset_spec_has_assets' | 'asset_spec_has_versions';
export interface CreatorDeleteBlockingContent {
    kind: CreatorDeleteBlockingContentKind;
    name: string;
    reason: CreatorDeleteBlockingContentReason;
}
export interface CreatorDeleteBlockedResponse extends ApiErrorResponse {
    error: 'creator_delete_blocked';
    message: string;
    blockingContent: CreatorDeleteBlockingContent[];
}
export interface PrivacyExportLinkedAccount {
    provider: 'PASSWORD' | 'GOOGLE' | 'X' | 'APPLE';
    identifier: string | null;
}
export interface PrivacyExportFollowedCreator {
    username: string;
    displayName: string;
    followedAt: string;
    latestPublishedAt: string | null;
}
export interface PrivacyExportSavedItem {
    kind: SavedItemKind;
    creatorUsername: string;
    itemName: string;
    displayName: string;
    savedAt: string;
}
export interface PrivacyExportComment {
    id: number;
    kind: SavedItemKind;
    creatorUsername: string;
    itemName: string;
    parentCommentId: number | null;
    body: string;
    deletedAt: string | null;
    createdAt: string;
    updatedAt: string;
}
export interface PrivacyExportPublishedApp {
    name: string;
    displayName: string;
    type: AppType;
    createdAt: string;
    updatedAt: string;
}
export interface PrivacyExportPublishedAsset {
    name: string;
    displayName: string;
    category: AssetCategory;
    createdAt: string;
    updatedAt: string;
}
export interface PrivacyExportPublishedPack {
    name: string;
    displayName: string;
    createdAt: string;
    updatedAt: string;
}
export interface PrivacyExportAiGenerationJob {
    id: string;
    modality: AiGenerationType;
    status: 'PENDING' | 'RUNNING' | 'SUCCESS' | 'FAILURE';
    requestPrompt: string;
    requestPayload: unknown;
    resultData: unknown;
    errorCode: string | null;
    errorMessage: string | null;
    linkedGenerationId: string | null;
    createdAt: string;
    updatedAt: string;
    startedAt: string | null;
    completedAt: string | null;
    failedAt: string | null;
}
export interface PrivacyExportResponse {
    exportedAt: string;
    account: MeUser;
    linkedAccounts: PrivacyExportLinkedAccount[];
    followedCreators: PrivacyExportFollowedCreator[];
    savedItems: PrivacyExportSavedItem[];
    comments: PrivacyExportComment[];
    notifications: UserNotificationResponse[];
    creditTransactions: CreditTransaction[];
    iapReceipts: IapReceipt[];
    aiActivity: {
        generations: AiGenerationDetail[];
        jobs: PrivacyExportAiGenerationJob[];
    };
    publishedContent: {
        apps: PrivacyExportPublishedApp[];
        assets: PrivacyExportPublishedAsset[];
        packs: PrivacyExportPublishedPack[];
    };
}
export interface UnlinkXResponse {
    success: boolean;
}
export interface UnlinkGoogleResponse {
    success: boolean;
}
export type AppleOAuthProvider = 'google' | 'x' | 'apple';
export type AppleOAuthTarget = 'apple-playdrop-ios' | 'apple-playdrop-mac' | 'apple-music' | 'apple-games';
export interface AppleOAuthLinkStartRequest {
    provider: AppleOAuthProvider;
    target?: AppleOAuthTarget;
}
export interface AppleOAuthLinkStartResponse {
    startUrl: string;
}
export interface AppleOAuthHandoffExchangeRequest {
    token: string;
}
export type AppleOAuthHandoffExchangeResponse = LoginResponse;
export interface GoogleAppleSignInRequest {
    idToken: string;
}
export interface GoogleAppleLoginResponse {
    result: 'login';
    accessToken: string;
    user: PublicUser;
}
export interface GoogleAppleSignupResponse {
    result: 'signup';
    pendingToken: string;
}
export type GoogleAppleSignInResponse = GoogleAppleLoginResponse | GoogleAppleSignupResponse;
export interface GoogleAppleLinkRequest {
    idToken: string;
}
export interface GoogleAppleLinkResponse {
    success: boolean;
}
export interface AppleNativeChallengeResponse {
    nonce: string;
    challengeToken: string;
}
export interface GooglePendingSignupResponse {
    googleEmail: string;
    googleName: string | null;
    googlePicture: string | null;
    suggestedUsername: string;
    suggestedDisplayName: string;
    usernameAvailable: boolean;
    invitePreview?: InvitePreviewResponse | null;
}
export interface UsernameAvailableResponse {
    available: boolean;
}
export interface CompleteGoogleSignupRequest {
    pendingToken: string;
    username: string;
    displayName: string;
    selectedProfileAssetRef: string;
}
export interface CompleteGoogleSignupResponse {
    accessToken?: string;
    user: PublicUser;
}
export interface XPendingSignupResponse {
    xUsername: string;
    xName: string | null;
    xProfileImageUrl: string | null;
    suggestedUsername: string;
    suggestedDisplayName: string;
    usernameAvailable: boolean;
    invitePreview?: InvitePreviewResponse | null;
}
export interface CompleteXSignupRequest {
    pendingToken: string;
    username: string;
    displayName: string;
    selectedProfileAssetRef: string;
}
export interface CompleteXSignupResponse {
    accessToken?: string;
    user: PublicUser;
}
export interface AppleSignInRequest {
    identityToken: string;
    challengeToken: string;
    fullName?: string | null;
}
export interface AppleLoginResponse {
    result: 'login';
    accessToken: string;
    user: PublicUser;
}
export interface AppleSignupResponse {
    result: 'signup';
    pendingToken: string;
}
export type AppleSignInResponse = AppleLoginResponse | AppleSignupResponse;
export interface AppleLinkRequest {
    identityToken: string;
    challengeToken: string;
}
export interface AppleLinkResponse {
    success: boolean;
}
export interface ApplePendingSignupResponse {
    appleEmail: string | null;
    appleEmailIsPrivate: boolean;
    suggestedUsername: string;
    suggestedDisplayName: string;
    usernameAvailable: boolean;
    invitePreview?: InvitePreviewResponse | null;
}
export interface CompleteAppleSignupRequest {
    pendingToken: string;
    username: string;
    displayName: string;
    selectedProfileAssetRef: string;
}
export interface CompleteAppleSignupResponse {
    accessToken?: string;
    user: PublicUser;
}
export interface GoogleOneTapExchangeRequest {
    credential: string;
    nextPath?: string | null;
}
export interface GoogleOneTapLoginResponse {
    result: 'login';
    accessToken?: string;
    user: PublicUser;
}
export interface GoogleOneTapSignupResponse {
    result: 'signup';
    pendingToken: string;
}
export type GoogleOneTapExchangeResponse = GoogleOneTapLoginResponse | GoogleOneTapSignupResponse;
export interface UpgradeToCreatorResponse {
    user: MeUser;
}
export type UserResponse = PublicUser;
export interface AppsListResponse {
    apps: AppResponse[];
    pagination?: PaginationMeta;
}
export interface AppRuntimeAssetFileSummary {
    role: string;
    url: string;
    contentType?: string | null;
    sizeBytes?: number | null;
    sha256?: string | null;
}
export interface AppRuntimeAssetSummary {
    assetRef: string;
    runtimeKey: string | null;
    sourceType: 'OWNED' | 'DIRECT' | 'PACK';
    sourcePackRef?: string | null;
    files: AppRuntimeAssetFileSummary[];
}
export interface AppRuntimeAssetsResponse {
    appVersionId: number;
    appVersion: string;
    assets: AppRuntimeAssetSummary[];
}
export interface AppOwnedAssetSummary {
    assetRef: string;
    runtimeKey: string | null;
    creatorUsername: string;
    name: string;
    displayName: string | null;
}
export interface AppDirectAssetSummary {
    assetRef: string;
    runtimeKey: string | null;
    creatorUsername: string;
    name: string;
    displayName: string | null;
}
export interface AppPackDependencySummary {
    packRef: string;
    creatorUsername: string;
    name: string;
    displayName: string | null;
}
export interface AppDependencySummary {
    ownedAssets: AppOwnedAssetSummary[];
    directAssets: AppDirectAssetSummary[];
    packs: AppPackDependencySummary[];
}
export interface AppDetailRequest {
    includeDependencies?: boolean;
}
export interface AppDetailResponse {
    app: AppResponse;
    dependencies?: AppDependencySummary;
}
export declare const APP_MORE_COLLECTION_KEYS: readonly ["by-creator", "similar", "remixes", "contains", "uses"];
export type AppMoreCollectionKey = (typeof APP_MORE_COLLECTION_KEYS)[number];
export type AppMoreItem = {
    kind: 'APP';
    app: AppResponse;
} | {
    kind: 'ASSET';
    asset: AssetResponse;
} | {
    kind: 'PACK';
    pack: AssetPackResponse;
};
export interface AppMoreCollectionsRequest {
    limit?: number;
}
export interface AppMoreCollectionRequest extends AppMoreCollectionsRequest {
    offset?: number;
}
export interface AppMoreCollectionPage {
    key: AppMoreCollectionKey;
    items: AppMoreItem[];
    pagination: PaginationMeta;
}
export interface AppMoreCollectionsResponse {
    collections: AppMoreCollectionPage[];
}
type RemixRelatedItemSummaryBase = {
    creatorUsername: string;
    name: string;
    displayName: string | null;
    linkedVersionRef: string | null;
};
export type RemixRelatedItemSummary = ({
    kind: 'APP';
    appType: AppType;
} & RemixRelatedItemSummaryBase) | ({
    kind: 'ASSET';
} & RemixRelatedItemSummaryBase) | ({
    kind: 'PACK';
} & RemixRelatedItemSummaryBase);
export interface ContentRemixRelationsResponse {
    remixedFrom: RemixRelatedItemSummary[];
    remixedBy: RemixRelatedItemSummary[];
}
export interface AppAccessTokenResponse {
    appAccessToken: string;
    appId: number;
    sessionId: string;
}
export interface DevPlayerSummary {
    userId: number;
    slot: number;
    username: string;
    displayName: string;
    userKind: 'TEST';
    ownerUserId: number;
    ownerUsername: string;
}
export interface DevAppAccessTokenResponse extends AppAccessTokenResponse {
    player: DevPlayerSummary;
}
export interface DevPlayerResetResponse {
    resetAll: boolean;
    playerSlots: number[];
    deletedAppDataCount: number;
    deletedAchievementCount: number;
    deletedLeaderboardScoreCount: number;
    deletedIapReceiptCount: number;
}
export type LogSeverity = 'debug' | 'info' | 'warn' | 'error';
export interface AppLogEntryContext {
    appName?: string | null;
    creatorUsername?: string | null;
    viewerId?: number | null;
    viewerUsername?: string | null;
}
export interface AppLogEntryRequest {
    severity: LogSeverity;
    message: string;
    payload?: unknown;
    context?: AppLogEntryContext;
}
export interface AppLogEntryResponse {
    success: boolean;
}
export interface CreateAppResponse {
    app: AppResponse;
    templateUrl: string;
    sourceArchiveUrl?: string;
}
export type RemixScaffoldMode = 'archive' | 'inline-html' | 'external-metadata-only';
export interface ExternalRemixScaffoldMetadata {
    name: string;
    displayName: string;
    description: string;
    creatorUsername: string;
    type: AppType;
    emoji: string | null;
    color: string | null;
    surfaceTargets: AppSurface[];
}
export interface ArchiveRemixScaffoldResponse {
    remixMode: 'archive';
    html?: string | null;
    metadata?: Record<string, unknown>;
    archiveUrl: string;
    externalListingUrl?: string;
}
export interface InlineHtmlRemixScaffoldResponse {
    remixMode: 'inline-html';
    html: string;
    metadata?: Record<string, unknown>;
    archiveUrl?: string;
    externalListingUrl?: string;
}
export interface ExternalMetadataOnlyRemixScaffoldResponse {
    remixMode: 'external-metadata-only';
    html?: string | null;
    metadata: ExternalRemixScaffoldMetadata;
    archiveUrl?: string;
    externalListingUrl: string;
}
export type RemixScaffoldResponse = ArchiveRemixScaffoldResponse | InlineHtmlRemixScaffoldResponse | ExternalMetadataOnlyRemixScaffoldResponse;
export interface TemplateScaffoldResponse {
    html: string;
    metadata?: Record<string, unknown>;
    archiveUrl?: string;
}
export interface UploadAppResponse {
    app: AppResponse;
}
export interface UpdateAppResponse {
    app: AppResponse;
    fileUnchanged?: boolean;
    metadataUnchanged?: boolean;
    sourceUnchanged?: boolean;
}
export interface AdminUpdateAppResponse {
    app: AdminAppResponse;
}
export interface AdminAppVersionReviewSummary {
    versionId: number;
    version: string;
    appId: number;
    appName: string;
    appDisplayName: string;
    appType: AppType;
    typeSlug: string;
    creatorId: number;
    creatorUsername: string;
    isCurrent: boolean;
    visibility: AppVersionVisibility;
    reviewState: ReviewState;
    reviewMessage?: string | null;
    creatorFeedback?: string | null;
    reviewStartedAt?: string | null;
    reviewCompletedAt?: string | null;
    createdAt: string;
    updatedAt: string;
    surfaceTargets: AppSurface[];
    assetUrl: string;
}
export interface AdminAppVersionReviewsListResponse {
    versions: AdminAppVersionReviewSummary[];
}
export interface AdminUpdateAppVersionReviewRequest {
    reviewState?: ReviewState;
    reviewMessage?: string | null;
    creatorFeedback?: string | null;
}
export interface AdminUpdateAppVersionReviewResponse {
    version: AdminAppVersionReviewSummary;
}
export interface AdminClaimNextAppVersionReviewResponse {
    version: AdminAppVersionReviewSummary | null;
}
export interface ProfileAssetSummary {
    assetRef: string;
    assetId: number;
    name: string;
    displayName: string;
    previewUrl: string;
    meshUrl: string;
    boxelUrl: string;
}
export interface StarterProfileAssetSummary {
    assetRef: string;
    assetId: number;
    name: string;
    displayName: string;
    previewUrl: string;
}
export interface OwnedProfileAssetsResponse {
    assets: ProfileAssetSummary[];
}
export interface StarterProfileAssetsResponse {
    assets: StarterProfileAssetSummary[];
}
export interface PaginationMeta {
    limit: number;
    offset: number;
    count: number;
    hasMore: boolean;
}
export declare const FEEDBACK_CLIENT_VALUES: readonly ["cli", "web", "games-ios", "music-ios", "games-android", "mac", "other"];
export type FeedbackClient = typeof FEEDBACK_CLIENT_VALUES[number];
export declare const FEEDBACK_CATEGORY_VALUES: readonly ["bug", "feature", "question", "content", "account", "other"];
export type FeedbackCategory = typeof FEEDBACK_CATEGORY_VALUES[number];
export declare const FEEDBACK_STATUS_VALUES: readonly ["sent", "ignored", "planned", "done"];
export type FeedbackStatus = typeof FEEDBACK_STATUS_VALUES[number];
export interface FeedbackEntry {
    id: number;
    userId: number | null;
    username: string | null;
    client: FeedbackClient;
    category: FeedbackCategory;
    version: string | null;
    build: string | null;
    title: string;
    comment: string;
    createdAt: string;
}
export interface AdminFeedbackEntry extends FeedbackEntry {
    email: string | null;
    status: FeedbackStatus;
    internalNote: string | null;
    statusUpdatedAt: string | null;
    statusUpdatedBy: number | null;
}
export interface SubmitFeedbackRequest {
    title: string;
    comment: string;
    client: FeedbackClient;
    category?: FeedbackCategory;
    email?: string | null;
    version?: string | null;
    build?: string | null;
}
export interface SubmitFeedbackResponse {
    feedback: FeedbackEntry;
}
export interface FeedbackListResponse {
    feedback: FeedbackEntry[];
    pagination: PaginationMeta;
}
export interface AdminFeedbackListResponse {
    feedback: AdminFeedbackEntry[];
    pagination: PaginationMeta;
}
export interface AdminFeedbackResponse {
    feedback: AdminFeedbackEntry;
}
export interface UpdateAdminFeedbackRequest {
    status?: FeedbackStatus;
    internalNote?: string | null;
}
export interface UpdateAdminFeedbackResponse {
    feedback: AdminFeedbackEntry;
}
export interface DeleteFeedbackResponse {
    success: boolean;
}
export interface LoginResponse {
    accessToken?: string;
    user: PublicUser;
}
export interface LogoutResponse {
    success: boolean;
}
export interface PublicUserResponse {
    user: PublicUser;
}
export interface CreatorSummaryResponse {
    profile: PublicUser;
    appCount: number;
    assetCount: number;
    packCount: number;
    creatorAppTabCounts: {
        games: number;
        demos: number;
        tools: number;
    };
    creatorAssetTabCounts: {
        images: number;
        music: number;
        sfx: number;
        videos: number;
        model3d: number;
    };
    hasIndexableContent: boolean;
}
export interface MeResponse {
    user: MeUser;
}
export interface AdminUserResponse {
    user: AdminUserDetail;
}
export type UserDetailResponse = PublicUserResponse;
export declare const SEARCH_RESULT_KIND_VALUES: readonly ["creator", "app", "asset", "asset-spec", "pack"];
export type SearchResultKind = typeof SEARCH_RESULT_KIND_VALUES[number];
export declare const SEARCH_KIND_VALUES: readonly ["all", "creator", "app", "asset", "asset-spec", "pack"];
export type SearchKind = typeof SEARCH_KIND_VALUES[number];
export declare const SEARCH_MODE_VALUES: readonly ["grouped", "flat"];
export type SearchMode = typeof SEARCH_MODE_VALUES[number];
export declare const SEARCH_ASSET_TYPE_VALUES: readonly ["image", "video", "audio", "song", "sfx", "3d"];
export type SearchAssetType = typeof SEARCH_ASSET_TYPE_VALUES[number];
export declare const SEARCH_SORT_VALUES: readonly ["relevance", "views", "recent", "updated", "used", "newest", "likes", "downloads", "remixes", "comments", "assets", "apps", "alpha"];
export type SearchSort = typeof SEARCH_SORT_VALUES[number];
export interface SearchRequest {
    q: string;
    mode?: SearchMode;
    kind?: SearchKind;
    sort?: SearchSort;
    creatorUsername?: string;
    page?: number;
    pageSize?: number;
    appType?: AppType;
    auth?: AppAuthFilter;
    surface?: AppSurfaceFilter;
    controller?: AppControllerFilter;
    assetType?: SearchAssetType;
    assetCategory?: AssetCategory;
    assetSubcategory?: string;
    assetSpec?: string;
    assetSpecOwner?: string;
    assetSpecName?: string;
    packContainsCategory?: AssetCategory;
    packContainsSubcategory?: string;
    tags?: string[];
    includeCounts?: boolean;
}
export declare const APP_LIST_SORT_VALUES: readonly ["newest", "updated", "views", "likes", "used"];
export type AppListSort = typeof APP_LIST_SORT_VALUES[number];
export interface AppBrowseRequest {
    limit?: number;
    offset?: number;
    tags?: string[];
    sort?: AppListSort;
    auth?: AppAuthFilter;
    surface?: AppSurfaceFilter;
    controller?: AppControllerFilter;
    controllerCompatible?: boolean;
}
export interface CreatorAppsBrowseRequest extends AppBrowseRequest {
    type?: AppType;
}
export interface SearchSuggestRequest {
    q: string;
}
export interface SearchCountsByKind {
    creator: number;
    app: number;
    asset: number;
    assetSpec: number;
    pack: number;
    total: number;
}
export interface SearchTabCounts {
    topResults: number;
    creators: number;
    apps: number;
    demos: number;
    tools: number;
    templates: number;
    images: number;
    videos: number;
    audio: number;
    songs: number;
    sfx: number;
    models3d: number;
    assetSpecs: number;
    packs: number;
}
export interface HomeCreatorResponse {
    id: number;
    username: string;
    displayName: string;
    profileAssetPreviewUrl: string | null;
    xProfileImageUrl: string | null;
    googleProfileImageUrl: string | null;
    createdAt?: string;
    viewerFollowing?: boolean;
    followsViewer?: boolean;
}
export declare const SAVED_ITEM_KIND_VALUES: readonly ["APP", "ASSET", "PACK"];
export type SavedItemKind = typeof SAVED_ITEM_KIND_VALUES[number];
export interface ListTagsRequest {
    targetKind?: SavedItemKind;
    groupSlug?: string;
    limit?: number;
    offset?: number;
}
export interface TagListResponse {
    groups: TagGroupWithTagsSummary[];
    pagination: PaginationMeta;
}
export interface PopularTagSummary extends TagSummary {
    publicContentCount: number;
}
export interface TagDirectoryGroupSummary {
    group: TagGroupSummary;
    tagCount: number;
    tags: PopularTagSummary[];
    tagPagination: PaginationMeta;
}
export interface TagDirectoryResponse {
    groups: TagDirectoryGroupSummary[];
    pagination: PaginationMeta;
}
export interface TagDetailResponse {
    tag: TagSummary & {
        group: TagGroupSummary;
    };
}
export declare const TAG_GROUP_SORT_VALUES: readonly ["alpha", "popularity"];
export type TagGroupSort = typeof TAG_GROUP_SORT_VALUES[number];
export interface TagGroupDetailResponse {
    group: TagGroupSummary;
    tags: PopularTagSummary[];
    pagination: PaginationMeta;
    sort: TagGroupSort;
}
export interface AdminTagGroupsResponse {
    groups: TagGroupWithTagsSummary[];
}
export interface AdminTagGroupResponse {
    group: TagGroupSummary;
}
export interface AdminTagResponse {
    tag: TagSummary;
}
export interface CreateTagGroupRequest {
    slug: string;
    displayName: string;
    allowedTargetKinds?: SavedItemKind[];
}
export interface UpdateTagGroupRequest {
    displayName?: string;
    allowedTargetKinds?: SavedItemKind[];
}
export interface CreateTagRequest {
    slug: string;
    displayName: string;
}
export interface UpdateTagRequest {
    displayName?: string;
}
export interface CatalogueTagDefinition {
    slug: string;
    displayName: string;
}
export interface CatalogueTagGroupDefinition {
    slug: string;
    displayName: string;
    allowedTargetKinds?: SavedItemKind[];
    tags: CatalogueTagDefinition[];
}
export declare function isValidTagSlug(value: unknown): value is string;
export declare function normalizeTagSlug(value: string): string;
export declare const COLLECTION_SLUG_REGEX: RegExp;
export declare function isValidCollectionSlug(value: unknown): value is string;
export declare function normalizeCollectionSlug(value: string): string;
export declare function parseTagRef(value: string): {
    groupSlug: string;
    tagSlug: string;
} | null;
export declare function normalizeTagRef(value: string): string;
export declare const ENGAGEMENT_EVENT_TYPE_VALUES: readonly ["VIEW", "LAUNCH", "PLAY", "DOWNLOAD", "LIKE", "UNLIKE", "DISLIKE", "UNDISLIKE", "SAVE", "UNSAVE", "FOLLOW", "UNFOLLOW"];
export type EngagementEventType = typeof ENGAGEMENT_EVENT_TYPE_VALUES[number];
export declare const ENGAGEMENT_TARGET_KIND_VALUES: readonly ["CREATOR", "APP", "ASSET", "PACK"];
export type EngagementTargetKind = typeof ENGAGEMENT_TARGET_KIND_VALUES[number];
export declare const APP_LAUNCH_CONTEXT_VALUES: readonly ["CARD", "DETAIL", "OTHER"];
export type AppLaunchContext = typeof APP_LAUNCH_CONTEXT_VALUES[number];
export declare const NOTIFICATION_EVENT_TYPE_VALUES: readonly ["NEW_CONTENT", "UPDATED", "CONTENT_COMMENT", "CONTENT_REPLY", "CONTENT_LIKE", "NEW_FOLLOWER", "ASSET_PURCHASED", "PAYMENT_SUCCEEDED", "PAYMENT_REFUNDED", "ADMIN_ACTION", "AI_JOB_SUCCEEDED", "AI_JOB_FAILED"];
export type NotificationEventType = typeof NOTIFICATION_EVENT_TYPE_VALUES[number];
export declare const LIBRARY_CATEGORY_VALUES: readonly ["games", "demos", "tools", "templates", "images", "music", "sfx", "videos", "3d", "packs"];
export type LibraryCategory = typeof LIBRARY_CATEGORY_VALUES[number];
export declare const LIBRARY_SORT_VALUES: readonly ["saved_desc", "alpha_asc"];
export type LibrarySort = typeof LIBRARY_SORT_VALUES[number];
export declare const FOLLOWING_SORT_VALUES: readonly ["activity_desc", "alpha_asc"];
export type FollowingSort = typeof FOLLOWING_SORT_VALUES[number];
export declare const NOTIFICATION_STATUS_VALUES: readonly ["all", "unread"];
export type NotificationStatus = typeof NOTIFICATION_STATUS_VALUES[number];
export declare const NOTIFICATION_PREVIEW_KIND_VALUES: readonly ["item", "person", "credit", "account"];
export type NotificationPreviewKind = typeof NOTIFICATION_PREVIEW_KIND_VALUES[number];
export declare const FOLLOWING_APP_SECTION_VALUES: readonly ["games", "demos", "tools", "templates"];
export type FollowingAppSection = typeof FOLLOWING_APP_SECTION_VALUES[number];
export declare const FOLLOWING_FEED_SECTION_VALUES: readonly ["games", "demos", "tools", "templates", "images", "music", "sfx", "speech", "videos", "3d", "packs"];
export type FollowingFeedSection = typeof FOLLOWING_FEED_SECTION_VALUES[number];
export interface SavedAppItem {
    kind: 'APP';
    savedAt: string;
    app: AppResponse;
}
export interface SavedAssetItem {
    kind: 'ASSET';
    savedAt: string;
    asset: AssetResponse;
}
export interface SavedPackItem {
    kind: 'PACK';
    savedAt: string;
    pack: AssetPackResponse;
}
export type LibraryItem = SavedAppItem | SavedAssetItem | SavedPackItem;
export type LibraryCounts = Record<LibraryCategory, number>;
export interface LibraryResponse {
    category: LibraryCategory;
    sort: LibrarySort;
    counts: LibraryCounts;
    items: LibraryItem[];
}
export interface TrackEngagementEventRequest {
    eventType: EngagementEventType;
    targetKind: EngagementTargetKind;
    creatorUsername: string;
    itemName?: string;
    launchContext?: AppLaunchContext;
    promotionToken?: string | null;
}
export interface TrackEngagementEventResponse {
    recorded: boolean;
}
export interface FollowedCreatorResponse extends HomeCreatorResponse {
    followedAt: string;
    latestPublishedAt: string | null;
}
export interface FollowingCreatorsResponse {
    creators: FollowedCreatorResponse[];
}
export interface FollowingAppsFeedResponse {
    section: FollowingAppSection;
    apps: AppResponse[];
}
export interface FollowingAssetsFeedResponse {
    section: HomeAssetSectionKey;
    assets: AssetResponse[];
}
export interface FollowingPacksFeedResponse {
    section: 'packs';
    packs: AssetPackResponse[];
}
export type FollowingFeedResponse = FollowingAppsFeedResponse | FollowingAssetsFeedResponse | FollowingPacksFeedResponse;
export interface CreatorSearchResult {
    kind: 'creator';
    targetPath: string;
    creator: HomeCreatorResponse;
}
export interface AppSearchResult {
    kind: 'app';
    targetPath: string;
    app: AppResponse;
}
export interface AssetSearchResult {
    kind: 'asset';
    targetPath: string;
    asset: AssetResponse;
}
export interface AssetPackSearchResult {
    kind: 'pack';
    targetPath: string;
    pack: AssetPackResponse;
}
export type SearchResult = CreatorSearchResult | AppSearchResult | AssetSearchResult | AssetSpecSearchResult | AssetPackSearchResult;
export interface SearchGroupedResults {
    creators: CreatorSearchResult[];
    apps: AppSearchResult[];
    assets: AssetSearchResult[];
    assetSpecs: AssetSpecSearchResult[];
    packs: AssetPackSearchResult[];
}
export interface SearchResponse {
    q: string;
    mode: SearchMode;
    kind: SearchKind;
    countsByKind: SearchCountsByKind;
    tabCounts: SearchTabCounts;
    groups?: SearchGroupedResults;
    results?: SearchResult[];
    pagination?: PaginationMeta;
}
export interface SearchSuggestResponse {
    q: string;
    countsByKind: SearchCountsByKind;
    groups: SearchGroupedResults;
}
export type AssetSpecsResponse = AssetSpecListResponse;
export type AssetSpecVersionsResponse = AssetSpecVersionsListResponse;
export interface AssetSpecVersionResponseEnvelope {
    assetSpec: AssetSpecResponse;
    version: AssetSpecVersionResponse;
}
export interface SavedItemMutationResponse {
    saved: boolean;
}
export interface LikedItemMutationResponse {
    liked: boolean;
}
export interface DislikedItemMutationResponse {
    disliked: boolean;
}
export interface CreatorBlockMutationResponse {
    blocked: boolean;
}
export declare const MODERATION_REPORT_REASON_CODE_VALUES: readonly ["SPAM", "HARASSMENT", "NSFW", "COPYRIGHT", "IMPERSONATION", "OTHER"];
export type ModerationReportReasonCode = typeof MODERATION_REPORT_REASON_CODE_VALUES[number];
export interface CreateModerationReportRequest {
    reasonCode: ModerationReportReasonCode;
    message?: string;
}
export type CreateContentReportRequest = CreateModerationReportRequest;
export type CreateCreatorReportRequest = CreateModerationReportRequest;
export type CreateCommentReportRequest = CreateModerationReportRequest;
export interface ModerationReportResponse {
    success: boolean;
}
export interface ContentCommentAuthor {
    id: number;
    username: string;
    displayName: string;
    profileAssetPreviewUrl?: string | null;
    xProfileImageUrl?: string | null;
    googleProfileImageUrl?: string | null;
}
export interface ContentCommentNode {
    id: number;
    kind: SavedItemKind;
    parentCommentId: number | null;
    body: string;
    isDeleted: boolean;
    authorIsCreator: boolean;
    canDelete: boolean;
    createdAt: string;
    updatedAt: string;
    likeCount: number;
    viewerLiked?: boolean;
    viewerDisliked?: boolean;
    author: ContentCommentAuthor;
    replies: ContentCommentNode[];
}
export interface ContentCommentsResponse {
    comments: ContentCommentNode[];
}
export interface CreateContentCommentRequest {
    body: string;
    parentCommentId?: number | null;
}
export interface CreateContentCommentResponse {
    comment: ContentCommentNode;
}
export interface DeleteContentCommentResponse {
    success: boolean;
}
export interface CreatorFollowMutationResponse {
    following: boolean;
}
export declare const FREE_CREDIT_OBJECTIVE_VALUES: readonly ["WELCOME", "PLAY_GAME", "FOLLOW_CREATOR", "INVITED", "SHARE_CODE", "ENABLE_PUSH", "CREATE_SONG", "CREATE_IMAGE", "CREATE_3D", "CLI_LOGIN", "PUBLISH_GAME", "BOOST_GAME"];
export type FreeCreditObjectiveKey = typeof FREE_CREDIT_OBJECTIVE_VALUES[number];
export declare const FREE_CREDIT_REWARD_STATUS_VALUES: readonly ["INCOMPLETE", "CLAIMABLE", "CLAIMED"];
export type FreeCreditRewardStatus = typeof FREE_CREDIT_REWARD_STATUS_VALUES[number];
export interface FreeCreditObjectiveSummary {
    objective: FreeCreditObjectiveKey;
    title: string;
    description: string;
    rewardCredits: number;
    maxCompletions: number;
    completedCount: number;
    claimableCount: number;
    claimedCount: number;
    status: FreeCreditRewardStatus;
    nextClaimRewardId: number | null;
}
export interface FreeCreditsResponse {
    items: FreeCreditObjectiveSummary[];
    unclaimedCount: number;
    inviteCode: string | null;
    inviteUrlPath: string | null;
}
export interface InvitePreviewResponse {
    inviteCode: string;
    shareCount: number;
    shareLimit: number;
    redeemable: boolean;
    inviter: InviteUserSummary;
}
export interface MyInviteCodeResponse {
    inviteCode: string;
    inviteUrlPath: string;
    shareCount: number;
    shareLimit: number;
    canEnterInviteCode: boolean;
    inviteEntryDeadline: string | null;
    invitedBy: InviteUserSummary | null;
    invitedUsers: InviteUserSummary[];
}
export interface ClaimFreeCreditRewardResponse {
    rewardId: number;
    objective: FreeCreditObjectiveKey;
    rewardCredits: number;
    transactionId: number;
    creditBalance: number;
    unclaimedCount: number;
    objectiveSummary: FreeCreditObjectiveSummary;
    counterpartUser: InviteUserSummary | null;
}
export type NotificationMetadata = Record<string, unknown>;
export interface UserNotificationResponse {
    id: number;
    eventType: NotificationEventType;
    title: string;
    body: string;
    targetPath: string;
    previewImageUrl?: string | null;
    previewKind?: NotificationPreviewKind | null;
    itemKind?: SavedItemKind | null;
    creator?: HomeCreatorResponse | null;
    actor?: HomeCreatorResponse | null;
    itemCreatorUsername?: string | null;
    itemName?: string | null;
    itemDisplayName?: string | null;
    appType?: AppType | null;
    assetCategory?: AssetCategory | null;
    assetSubcategory?: string | null;
    metadata?: NotificationMetadata | null;
    createdAt: string;
    readAt: string | null;
}
export interface NotificationsResponse {
    notifications: UserNotificationResponse[];
    unreadCount: number;
    pagination: PaginationMeta;
}
export interface NotificationReadResponse {
    success: boolean;
    unreadCount: number;
}
export interface WebPushSubscriptionKeys {
    p256dh: string;
    auth: string;
}
export interface WebPushSubscriptionObject {
    endpoint: string;
    expirationTime: number | null;
    keys: WebPushSubscriptionKeys;
}
export interface WebPushConfigResponse {
    vapidPublicKey: string;
}
export interface UpsertWebPushSubscriptionRequest {
    subscription: WebPushSubscriptionObject;
}
export interface WebPushSubscriptionStatusResponse {
    subscribed: boolean;
}
export interface PushSubscriptionMutationResponse {
    success: boolean;
    subscribed: boolean;
}
export type ApplePushEnvironment = 'development' | 'production';
export interface ApplePushDeviceRequest {
    deviceToken: string;
    apnsEnvironment: ApplePushEnvironment;
}
export interface ApplePushDeviceStatusResponse {
    subscribed: boolean;
}
export declare const HOME_GAMES_COLLECTION_IDS: {
    readonly FOR_YOU_GAMES: "for_you_games";
    readonly TOP_GAMES: "top_games";
    readonly MOST_LIKED_GAMES: "most_liked_games";
    readonly BOOSTED_GAMES: "boosted_games";
    readonly TOP_CREATORS: "top_creators";
    readonly FEATURED_GAMES: "featured_games";
    readonly NEW_GAMES: "new_games";
    readonly GAME_GENRES: "game_genres";
    readonly CONTINUE_PLAYING: "continue_playing";
    readonly FOLLOWING_CREATORS: "following_creators";
};
export type HomeGamesCollectionId = typeof HOME_GAMES_COLLECTION_IDS[keyof typeof HOME_GAMES_COLLECTION_IDS];
interface HomeCollectionBase {
    id: string;
    title: string;
    description?: string | null;
    metadata?: Record<string, unknown> | null;
}
export interface AppsHomeCollection extends HomeCollectionBase {
    type: 'apps';
    apps: AppResponse[];
}
export interface CreatorsHomeCollection extends HomeCollectionBase {
    type: 'creators';
    creators: HomeCreatorResponse[];
}
export interface TagsHomeCollection extends HomeCollectionBase {
    type: 'tags';
    group: TagGroupSummary;
    tags: PopularTagSummary[];
}
export type HomeCollection = AppsHomeCollection | CreatorsHomeCollection | TagsHomeCollection;
export interface HomeCollectionsResponse {
    section: 'games';
    collections: HomeCollection[];
}
export interface HomeCollectionPageResponse {
    section: 'games';
    collection: HomeCollection;
    pagination: PaginationMeta;
}
export interface CreatorsListResponse {
    creators: HomeCreatorResponse[];
    pagination: PaginationMeta;
}
export type HomeAssetSectionKey = 'images' | 'music' | 'sfx' | 'speech' | 'videos' | '3d';
export type HomeSectionKey = 'games' | HomeAssetSectionKey | 'packs';
export interface HomeAssetsSectionResponse {
    section: HomeAssetSectionKey;
    assets: AssetResponse[];
    pagination: PaginationMeta;
}
export interface HomePacksSectionResponse {
    section: 'packs';
    packs: AssetPackResponse[];
    pagination: PaginationMeta;
}
export type HomeResponse = HomeCollectionsResponse | HomeAssetsSectionResponse | HomePacksSectionResponse;
export interface FetchHomeOptions {
    section?: HomeSectionKey;
    limit?: number;
    offset?: number;
}
export interface MyAppsResponse {
    apps: AppResponse[];
    pagination?: PaginationMeta;
}
export interface DeleteAppResponse {
    success: boolean;
}
export interface UsersListResponse {
    users: AdminUserDetail[];
}
export interface CreateUserResponse {
    user: AdminUserDetail;
}
export interface UpdateAdminUserRequest {
    role?: 'USER' | 'CREATOR' | 'ADMIN';
    displayName?: string;
    creditDelta?: number;
    bio?: string | null;
    youtubeUsername?: string | null;
    githubUsername?: string | null;
    websiteUrl?: string | null;
    supportUrl?: string | null;
    xUserId?: string | null;
    xUsername?: string | null;
    xProfileImageUrl?: string | null;
}
export interface DeleteAdminUserResponse {
    success: boolean;
}
export interface BatchCreateUsersResponse {
    created: number;
    skipped: number;
    errors: number;
    details: Array<{
        xUsername: string;
        status: 'created' | 'skipped' | 'error';
        message?: string;
    }>;
}
export interface BootstrapResponse {
    readmeUri: string;
    agentsUri: string;
    catalogue?: string;
}
export declare function isPaginationMeta(value: unknown): value is PaginationMeta;
export declare class UnsupportedClientError extends Error {
    code: string;
    details: Record<string, unknown> | null;
    constructor(code: string, message: string, details?: Record<string, unknown> | null);
}
export interface CreditPack {
    sku: string;
    name: string;
    amount: number;
    cost: number;
}
export interface ShopCollection {
    id: string;
    title: string;
    metadata?: Record<string, unknown> | null;
    items: ShopItem[];
}
export type ShopItem = {
    type: 'credit_pack';
    id: string;
    sku: string;
    name: string;
    amount: number;
    costCents: number;
} | {
    type: 'asset';
    id: string;
    assetId: number;
    assetRef: string;
    name: string;
    displayName: string;
    category: string;
    subcategory: string;
    previewUrl: string | null;
    priceCredits: number;
    owned: boolean;
    creatorUsername: string;
} | {
    type: 'boost_pack';
    id: string;
    sku: BoostSku;
    name: string;
    units: number;
    priceCredits: number;
};
export interface ShopResponse {
    collections: ShopCollection[];
    boostBalance?: number;
}
export interface AdminCreditPack {
    sku: string;
    displayName: string;
    amount: number;
    costCents: number;
    stripeProductId: string | null;
    stripePriceId: string | null;
    createdAt: string;
    updatedAt: string;
}
export type PaymentProvider = 'STRIPE' | 'APPLE_IAP';
export type PaymentStatus = 'PENDING' | 'AUTHORIZED' | 'SUCCEEDED' | 'FULFILLED' | 'FAILED' | 'CANCELLED' | 'REFUNDED';
export type PaymentEventProcessStatus = 'PENDING' | 'PROCESSED' | 'FAILED';
export type PaymentRefundStatus = 'PENDING' | 'SUCCEEDED' | 'FAILED' | 'CANCELLED';
export interface CreditPacksResponse {
    creditPacks: AdminCreditPack[];
}
export interface CreditPackResponse {
    creditPack: AdminCreditPack;
}
export type CreditTransactionDirection = 'IN' | 'OUT';
export type CreditTransactionKind = 'CONSUMABLE' | 'ENTITLEMENT';
export type CreditTransactionStatus = 'PENDING' | 'AUTHORIZED' | 'CONSUMED' | 'GRANTED' | 'CANCELLED';
export type CreditTransactionType = 'CREDIT_PACK' | 'ASSET' | 'IN_APP' | 'AI_SERVICE' | 'ADMIN_GRANT' | 'FREE_CREDIT' | 'AD_PAYOUT' | 'BOOST_PURCHASE';
export interface CreditTransaction {
    id: number;
    sourceId: number;
    sourceName: string;
    paymentId?: number | null;
    type: string;
    kind: CreditTransactionKind;
    status: CreditTransactionStatus;
    displayName: string;
    sku: string | null;
    amount: number;
    creatorPayoutAmount: number | null;
    platformFeeAmount: number | null;
    direction: CreditTransactionDirection;
    netAmount: number;
    buyer: string;
    seller: string;
    metadata?: Record<string, unknown> | null;
    createdAt: string;
    updatedAt: string;
}
export interface TransactionsResponse {
    transactions: CreditTransaction[];
}
export interface AdminCreditTransaction {
    id: number;
    sourceId: number;
    sourceName: string;
    paymentId?: number | null;
    type: CreditTransactionType;
    kind: CreditTransactionKind;
    status: CreditTransactionStatus;
    displayName: string;
    sku: string | null;
    amount: number;
    creatorPayoutAmount: number | null;
    platformFeeAmount: number | null;
    buyerId: number;
    buyer: string;
    sellerId: number;
    seller: string;
    metadata?: Record<string, unknown> | null;
    createdAt: string;
    updatedAt: string;
}
export declare const BOOST_SKU_VALUES: readonly ["boost_1", "boost_3", "boost_7", "boost_14", "boost_31"];
export type BoostSku = typeof BOOST_SKU_VALUES[number];
export interface BoostOffer {
    sku: BoostSku;
    displayName: string;
    units: number;
    priceCredits: number;
    durationHours: number;
}
export interface BoostBalanceResponse {
    balance: number;
    offers: BoostOffer[];
}
export interface BoostPurchaseRequest {
    sku: BoostSku;
    quantity?: number;
}
export interface BoostEligibleGameSummary {
    name: string;
    displayName: string;
    creatorUsername: string;
    type: AppType;
}
export interface BoostPurchaseResponse {
    offer: BoostOffer;
    quantity: number;
    unitsAdded: number;
    boostBalance: number;
    creditBalance: number;
    transaction: CreditTransaction;
    eligibleGameCount: number;
    eligibleGame: BoostEligibleGameSummary | null;
}
export interface BoostActivationRequest {
    units?: number;
}
export interface BoostRunSummary {
    id: number;
    status: 'ACTIVE' | 'EXPIRED' | 'CANCELLED';
    startedAt: string;
    endsAt: string;
    consumedUnits: number;
    adBudgetCredits: number;
    adReservedCredits: number;
    adSpentCredits: number;
    adRemainingCredits: number;
    deliveredImpressionCount: number;
    promotedDetailViewCount: number;
    promotedPlayCount: number;
    createdAt: string;
    updatedAt: string;
}
export interface BoostStatusResponse {
    app: AppResponse;
    boostsAvailable: number;
    isActive: boolean;
    boostedUntil: string | null;
    currentRun: BoostRunSummary | null;
    totals: {
        deliveredImpressions: number;
        promotedDetailViews: number;
        promotedPlays: number;
    };
}
export interface BoostHistoryResponse {
    runs: BoostRunSummary[];
}
export interface BoostReportQuery {
    days?: number;
    startDateUtc?: string;
    endDateUtc?: string;
}
export interface BoostReportPoint {
    dateUtc: string;
    provisional: boolean;
    regularDetailViews: number;
    promotedDetailViews: number;
    regularPlays: number;
    promotedPlays: number;
    boostedHomeViews: number;
    adViews: number;
    boostedHomePlays: number;
    adPlays: number;
    interstitialImpressions: number;
    rewardedImpressions: number;
    creditedImpressions: number;
    adEarnings: number;
}
export interface BoostReportResponse {
    appId: number;
    days: BoostReportPoint[];
}
export interface CreatorEarningsAppDayRow {
    appId: number;
    appName: string;
    creatorUsername: string;
    format: 'interstitial' | 'rewarded';
    amount: number;
    servedCount: number;
    creditedCount: number;
    settled: boolean;
}
export interface CreatorEarningsDay {
    dateUtc: string;
    provisional: boolean;
    totalAmount: number;
    interstitialAmount: number;
    rewardedAmount: number;
    servedCount: number;
    creditedCount: number;
    apps: CreatorEarningsAppDayRow[];
}
export interface CreatorEarningsSummary {
    provisionalToday: number;
    settledLast7Days: number;
    settledLast30Days: number;
    boostSpendLast30Days: number;
}
export interface CreatorEarningsResponse {
    summary: CreatorEarningsSummary;
    days: CreatorEarningsDay[];
}
export type AdFormat = 'INTERSTITIAL' | 'REWARDED';
export type AdLoadStatus = 'ready' | 'no_fill' | 'rate_limited' | 'blocked';
export type AdInterstitialShowStatus = 'dismissed' | 'not_ready' | 'expired';
export type AdRewardedShowStatus = 'completed' | 'dismissed' | 'not_ready' | 'expired';
export type AdTargetType = 'BOOSTED_APP' | 'HOUSE_AVATAR' | 'HOUSE_GAME' | 'HOUSE_CREATE_ACCOUNT' | 'HOUSE_INVITE_FRIENDS';
export interface AdCreative {
    targetType: AdTargetType;
    title: string;
    body: string | null;
    ctaLabel: string | null;
    targetHref: string;
    imageUrl: string | null;
    promotedApp?: AppResponse | null;
}
export interface AdLoadRequest {
    sourceAppId: number;
    viewerSurface: AppSurface;
}
export type AdLoadResult = {
    status: 'ready';
} | {
    status: 'no_fill';
} | {
    status: 'rate_limited';
    retryAfterSeconds: number;
} | {
    status: 'blocked';
    reason: string;
};
export type AdLoadResponse = {
    status: 'ready';
    format: AdFormat;
    reservationId: string;
    creative: AdCreative;
} | {
    status: 'no_fill';
    format: AdFormat;
} | {
    status: 'rate_limited';
    format: AdFormat;
    retryAfterSeconds: number;
} | {
    status: 'blocked';
    format: AdFormat;
    reason: string;
};
export interface AdShowRequest {
    reservationId: string;
    viewedMs: number;
}
export type AdInterstitialShowResponse = {
    status: 'dismissed';
    reservationId: string;
    impressionId: number;
} | {
    status: 'not_ready';
    reservationId: null;
    impressionId?: null;
} | {
    status: 'expired';
    reservationId: string | null;
    impressionId?: null;
};
export type AdRewardedShowResponse = {
    status: 'completed' | 'dismissed';
    reservationId: string;
    impressionId: number;
} | {
    status: 'not_ready';
    reservationId: null;
    impressionId?: null;
} | {
    status: 'expired';
    reservationId: string | null;
    impressionId?: null;
};
export interface AdminCreditTransactionsResponse {
    transactions: AdminCreditTransaction[];
    pagination: PaginationMeta;
}
export interface IapReceipt {
    id: number;
    type: string;
    kind: CreditTransactionKind;
    status: CreditTransactionStatus;
    displayName: string;
    sku: string | null;
    amount: number;
    creatorPayoutAmount: number | null;
    platformFeeAmount: number | null;
    sourceId: number;
    sourceName: string;
    buyerId: number;
    buyer: string;
    sellerId: number;
    seller: string;
    createdAt: string;
    updatedAt: string;
}
export interface IapReceiptsResponse {
    receipts: IapReceipt[];
    pagination: PaginationMeta;
}
export interface IapPurchaseRequest {
    appId: number;
    kind: 'consumable' | 'entitlement';
    sku: string;
    displayName: string;
    priceCredits: number;
}
export declare const MUSIC_PROMPT_MAX_LENGTH = 4000;
export type AiGenerationType = 'TEXT' | 'JSON' | 'IMAGE' | 'MUSIC' | 'SFX' | 'SPEECH' | 'VIDEO' | 'MODEL_3D';
export type AiGenerationStatus = 'SUCCESS' | 'FAILURE';
export type AiGenerationPaidBy = 'USER' | 'CREATOR';
export interface AiGenerationSummary {
    id: string;
    createdAt: string;
    userId: number | null;
    username: string | null;
    creatorId: number | null;
    creatorUsername: string | null;
    sourceId: number | null;
    sourceName: string | null;
    type: AiGenerationType;
    status: AiGenerationStatus;
    provider: string;
    model: string;
    amount: number;
    paidBy: AiGenerationPaidBy;
    transactionId: number | null;
}
export interface AiGenerationDetail extends AiGenerationSummary {
    inputData: unknown;
    inputAssets: string[];
    outputData: unknown;
    outputAssets: string[];
    errorCode: string | null;
    errorMessage: string | null;
    transaction: AdminCreditTransaction | null;
}
export interface AiGenerationsResponse {
    generations: AiGenerationSummary[];
    pagination: PaginationMeta;
}
export interface AiGenerationDetailResponse {
    generation: AiGenerationDetail;
}
export interface IapPurchaseResponse {
    receipt: IapReceipt;
    creditBalance: number;
}
export interface IapReceiptResponse {
    receipt: IapReceipt;
}
export interface IapReceiptListParams {
    kind?: 'consumable' | 'entitlement';
    status?: CreditTransactionStatus | CreditTransactionStatus[];
    from?: string | Date;
    to?: string | Date;
    appId?: number;
    limit?: number;
    offset?: number;
}
export interface AssetPurchaseRequest {
    type: 'asset';
    assetRef: string;
}
export type PurchaseRequest = AssetPurchaseRequest;
export interface CreditPackCheckoutSessionRequest {
    nextPath?: string;
}
export interface CreditPackCheckoutSessionResponse {
    checkoutSessionId: string;
    checkoutUrl: string;
    expiresAt: string | null;
    paymentId?: number;
    provider?: PaymentProvider;
    isReturningCustomer?: boolean;
}
export interface CreditPackCheckoutStatusResponse {
    checkoutSessionId: string;
    fulfilled: boolean;
    paymentStatus: string;
    transactionId: number | null;
    creditBalance: number | null;
    paymentId?: number | null;
    provider?: PaymentProvider;
    providerPaymentId?: string | null;
}
export interface AdminPaymentSummary {
    id: number;
    provider: PaymentProvider;
    status: PaymentStatus;
    userId: number;
    username: string;
    userCreditBalance: number;
    creditPackSku: string | null;
    creditPackDisplayName: string | null;
    currency: string;
    amountCents: number;
    providerPaymentId: string | null;
    providerIntentId: string | null;
    providerChargeId: string | null;
    providerPaymentDashboardUrl: string | null;
    providerIntentDashboardUrl: string | null;
    providerChargeDashboardUrl: string | null;
    fulfilledCreditTransactionId: number | null;
    failureCode: string | null;
    failureMessage: string | null;
    refundCount: number;
    refundedAmountCents: number;
    createdAt: string;
    updatedAt: string;
}
export interface AdminPaymentEvent {
    id: number;
    provider: PaymentProvider;
    providerEventId: string;
    eventType: string;
    signatureVerified: boolean;
    processStatus: PaymentEventProcessStatus;
    processError: string | null;
    processedAt: string | null;
    createdAt: string;
}
export interface AdminPaymentRefund {
    id: number;
    paymentId: number;
    provider: PaymentProvider;
    providerRefundId: string | null;
    providerRefundDashboardUrl: string | null;
    amountCents: number;
    status: PaymentRefundStatus;
    reason: string | null;
    initiatedByAdminUserId: number;
    initiatedByAdminUsername: string;
    reversalCreditTransactionId: number | null;
    postRefundCreditBalance: number | null;
    debtAmount: number | null;
    createdAt: string;
    updatedAt: string;
}
export interface AdminPaymentDetail extends AdminPaymentSummary {
    events: AdminPaymentEvent[];
    refunds: AdminPaymentRefund[];
}
export interface AdminPaymentsListResponse {
    payments: AdminPaymentSummary[];
    pagination: PaginationMeta;
}
export interface AdminPaymentDetailResponse {
    payment: AdminPaymentDetail;
}
export interface AdminRefundPaymentRequest {
    reason?: string | null;
}
export interface PurchaseResponse {
    success: boolean;
    transaction: {
        id: number;
        amount: number;
        type: string;
        sku: string | null;
        createdAt: string;
    };
    creditBalance?: number;
    grantedAssetRef?: string | null;
}
export declare class ApiError extends Error {
    status: number;
    code?: string;
    details: Record<string, unknown> | null;
    constructor(message: string, status: number, code?: string, details?: Record<string, unknown> | null);
}
export {};
//# sourceMappingURL=api.d.ts.map