import { DTOLoginScreenSettingsUpdate, DTOPortalSettingsUpdatePayload, DTOWorkspaceUntypedDataListResponse, DTOWorkspaceUntypedDataResponse } from "@supernova-studio/client";
import { WorkspaceSeatType } from "@supernova-studio/model";
import { UserRole } from "../../model/enums/SDKUserRole";
import { WorkspaceSubscriptionPlanInterval } from "../../model/enums/SDKWorkspaceSubscriptionPlanInterval";
import { SubscriptionCheckoutProductCode } from "../../model/enums/SDKWorkspaceSubscriptionProduct";
import { Membership } from "../../model/membership/SDKMembership";
import { UserMembership } from "../../model/users/SDKUserMembership";
import { NotificationSettingsUpdateModel, UserWorkspaceNotificationSettings } from "../../model/users/SDKUserWorkspaceNotificationSettings";
import { DefaultProjectAccessMode, DefaultProjectRole, Workspace } from "../../model/workspaces/SDKWorkspace";
import { WorkspaceIPWhitelistSettings, WorkspaceIPWhitelistSettingsUpdateModel } from "../../model/workspaces/SDKWorkspaceIPWhitelistSettings";
import { WorkspaceInvitation, WorkspaceInvitationUpdateModel } from "../../model/workspaces/SDKWorkspaceInvitation";
import { WorkspaceInvoice } from "../../model/workspaces/SDKWorkspaceInvoice";
import { WorkspaceNPMRegistryAccessTokenRemoteModel } from "../../model/workspaces/SDKWorkspaceNPMRegistryAccessToken";
import { WorkspaceNPMRegistrySettings, WorkspaceNPMRegistrySettingsUpdateModel } from "../../model/workspaces/SDKWorkspaceNPMRegistrySettings";
import { WorkspaceOnboarding, WorkspaceOnboardingUpdateModel } from "../../model/workspaces/SDKWorkspaceOnboarding";
import { WorkspaceProduct } from "../../model/workspaces/SDKWorkspaceProduct";
import { SubscriptionProductFeatures } from "../../model/workspaces/SDKWorkspaceProductFeatures";
import { WorkspaceProfileUpdateModel } from "../../model/workspaces/SDKWorkspaceProfile";
import { WorkspaceSSOSettings, WorkspaceSSOSettingsUpdateModel } from "../../model/workspaces/SDKWorkspaceSSOSettings";
import { WorkspaceSubscription, WorkspaceSubscriptionUpdateModel, WorkspaceSubscriptionUpdatePreviewModel } from "../../model/workspaces/SDKWorkspaceSubscription";
import { DataCore } from "../data/SDKDataCore";
export declare class AreaWorkspaces {
    /** Internal: Engine */
    private dataCore;
    constructor(dataCore: DataCore);
    /** Fetches one specific workspace by provided id
     * @param workspaceId - ID of the workspace
     * @returns Full workspace object
     */
    workspace(workspaceId: string): Promise<Workspace>;
    /** Fetches all workspaces user has access to. Use `memberships` instead if you want to also know which role the current user has in which workspace
     * @param userId - ID of the user
     * @returns All workspaces user is part of
     */
    workspaces(userId: string): Promise<Array<Workspace>>;
    /** Fetches all memberships user is part of. Each memberships contains workspace and user role.
     * @param userId - ID of the user
     * @returns All workspaces user is part of
     */
    memberships(userId: string): Promise<Array<Membership>>;
    /** Fetches all users that are part of the workspace. Each user contains user role as well.
     * @param workspaceId - ID of the workspace
     * @returns All users that are members of the provided workspace
     */
    userMemberships(workspaceId: string): Promise<Array<UserMembership>>;
    /** Fetches user workspace notification settings
     * @param userId - ID of the user
     * @param workspaceId - ID of the workspace
     * @returns All user workspace notification settings
     */
    userWorkspaceNotificationSettings(userId: string, workspaceId: string): Promise<UserWorkspaceNotificationSettings>;
    /** Fetches product features grouped by product code
     * @param workspaceId - ID of the workspace
     * @returns Product features
     */
    workspaceProductFeatures(workspaceId: string): Promise<SubscriptionProductFeatures>;
    /** Fetches workspace onboarding status
     * @param workspaceId - ID of the workspace
     * @returns Workspace onboarding status
     */
    workspaceOnboarding(workspaceId: string): Promise<WorkspaceOnboarding>;
    /** Fetches workspace IP whitelist settings
     * @param workspaceId - ID of the workspace
     * @returns Workspace IP whitelist settings or null if the workspace is not using IP whitelist
     */
    workspaceIPWhitelistSettings(workspaceId: string): Promise<WorkspaceIPWhitelistSettings | null>;
    /** Fetches workspace NPM registry settings
     * @param workspaceId - ID of the workspace
     * @returns Workspace NPM registry settings or null if the workspace is not using NPM registry
     */
    workspaceNPMRegistrySettings(workspaceId: string): Promise<WorkspaceNPMRegistrySettings | null>;
    /** Fetches workspace NPM registry access token
     * @param workspaceId - ID of the workspace
     * @returns Workspace NPM registry access token
     */
    workspaceNPMRegistryAccessToken(workspaceId: string): Promise<WorkspaceNPMRegistryAccessTokenRemoteModel | null>;
    /** Fetches workspace SSO settings
     * @param workspaceId - ID of the workspace
     * @returns Workspace SSO settings or null if the workspace is not using SSO
     */
    workspaceSSOSettings(workspaceId: string): Promise<WorkspaceSSOSettings | null>;
    /** Fetches all invitations that are part of the workspace.
     * @param workspaceId - ID of the workspace
     * @returns All invitations of the provided workspace
     */
    workspaceInvitations(workspaceId: string): Promise<Array<WorkspaceInvitation>>;
    /** Fetches all invoices for the workspace.
     * @param workspaceId - ID of the workspace
     * @returns All invoices of the provided workspace
     */
    workspaceInvoices(workspaceId: string): Promise<Array<WorkspaceInvoice>>;
    /** Fetches a subscription of the workspace.
     * @param workspaceId - ID of the workspace
     * @returns A subscription of the provided workspace
     */
    workspaceSubscription(workspaceId: string): Promise<WorkspaceSubscription>;
    /** Fetches all products that are available to the workspace.
     * @param workspaceId - ID of the workspace
     * @returns All available products
     */
    workspaceAvailableProducts(workspaceId: string): Promise<Array<WorkspaceProduct>>;
    /** Fetches workspace Portal settings
     * @param workspaceId - ID of the workspace
     * @returns Workspace portal settings
     */
    workspacePortalSettings(workspaceId: string): Promise<import("../..").PortalSettings>;
    /** Fetches workspace login screen settings
     * @param workspaceId - ID of the workspace
     * @returns Workspace login screen settings
     */
    workspaceLoginScreenSettings(workspaceId: string): Promise<import("../..").LoginScreenSettings>;
    /**
     * Checks whether the workspace has available credits
     * @param workspaceId - ID of the workspace
     * @returns boolean - true if the workspace has available credits, false otherwise
     */
    getWorkspaceCreditsAvailability(workspaceId: string): Promise<{
        canSpendCredits?: boolean;
    }>;
    /** Creates new workspace and retrieves the newly created workspace object. The user who creates the workspace becomes its owner
     * @param name - Name of the workspace
     * @returns Newly created workspace object
     */
    createWorkspace(name: string): Promise<Workspace>;
    /** Updates workspace profile for a specific workspace
     * @param workspaceId - ID of the workspace
     * @param update - New profile data
     * @returns Nothing
     */
    updateWorkspaceProfile(workspaceId: string, update: WorkspaceProfileUpdateModel): Promise<void>;
    /** Updates workspace AI settings for a specific workspace
     * @param workspaceId - ID of the workspace
     * @param update - AI settings to update
     * @returns Nothing
     */
    updateWorkspaceAiSettings(workspaceId: string, update: {
        aiFeaturesEnabled?: boolean;
        projectsEnabled?: boolean;
        aiAskFeaturesEnabled?: boolean;
        aiCustomInstruction?: string;
        defaultProjectRole?: DefaultProjectRole;
        defaultProjectAccessMode?: DefaultProjectAccessMode;
    }): Promise<void>;
    /** tests accessibility of IP allowlist settings
     * @param workspaceId - ID of the workspace
     * @param ipWhitelistSettings - settings to test
     * @returns information if workspace is accesible by your IP
     */
    testIpWhitelistSettings(workspaceId: string, ipWhitelistSettings: WorkspaceIPWhitelistSettingsUpdateModel): Promise<{
        accessible: boolean;
    }>;
    /** Updates workspace onboarding state for a specific workspace
     * @param workspaceId - ID of the workspace
     * @param update - New onboarding state
     * @returns Nothing
     */
    updateWorkspaceOnboarding(workspaceId: string, update: WorkspaceOnboardingUpdateModel): Promise<void>;
    /** Updates workspace avatar for a specific workspace
     * @param workspaceId - ID of the workspace
     * @param avatar - New avatar
     * @returns Nothing
     */
    updateWorkspaceAvatar(workspaceId: string, avatar: File): Promise<void>;
    /** Updates workspace SSO settings for a specific workspace
     * @param workspaceId - ID of the workspace
     * @param profile - New SSO configuration
     * @returns Nothing
     */
    updateWorkspaceSSOSettings(workspaceId: string, update: WorkspaceSSOSettingsUpdateModel): Promise<void>;
    /** Updates workspace IP whitelist settings for a specific workspace
     * @param workspaceId - ID of the workspace
     * @param profile - New IP whitelist configuration
     * @returns Nothing
     */
    updateWorkspaceIPWhitelistSettings(workspaceId: string, ipWhitelistSettings: WorkspaceIPWhitelistSettingsUpdateModel): Promise<void>;
    /** Updates workspace NPM registry settings for a specific workspace
     * @param workspaceId - ID of the workspace
     * @param profile - New NPM registry configuration
     * @returns Nothing
     */
    updateWorkspaceNPMRegistrySettings(workspaceId: string, npmRegistrySettings: WorkspaceNPMRegistrySettingsUpdateModel): Promise<void>;
    /** Updates notification settings
     * @param userId - ID of the user
     * @param workspaceId - ID of the workspace
     * @returns Nothing
     */
    updateUserWorkspaceNotificationSettings(userId: string, workspaceId: string, notificationSettings: NotificationSettingsUpdateModel): Promise<void>;
    /** Transfers an ownership of the workspace.
     * Old owner receives new owner's previous role.
     * @param workspaceId - ID of the workspace
     * @param newOwnerUserId - ID of the user to transfer the ownership to
     * @returns Nothing
     */
    updateWorkspaceOwnership(workspaceId: string, newOwnerUserId: string): Promise<void>;
    /** Updates a role of a member.
     * @param workspaceId - ID of the workspace
     * @param userId - ID of the user
     * @param newRole - New role of the user
     * @param newSeatType - New seat type of the user
     * @returns Nothing
     */
    updateWorkspaceMemberRole(workspaceId: string, userId: string, newRole: UserRole, newSeatType?: WorkspaceSeatType): Promise<void>;
    /** Updates a role of an invitation.
     * @param workspaceId - ID of the workspace
     * @param invitationId - ID of the invitation
     * @param newRole - New role
     * @param newSeatType - New seat type
     * @returns Nothing
     */
    updateWorkspaceInvitationRole(workspaceId: string, invitationId: string, newRole: UserRole, newSeatType?: WorkspaceSeatType): Promise<void>;
    /** Invites new members to the workspace
     * @param workspaceId - ID of the workspace
     * @param invitations - array of invitations
     * @returns Nothing
     */
    addWorkspaceInvitations(workspaceId: string, invitations: Array<WorkspaceInvitationUpdateModel>, designSystemId: string | undefined): Promise<void>;
    /** Creates a new Stripe checkout session to change current subscription.
     * @param workspaceId - ID of the workspace
     * @param successUrl - URL to redirect to after successful payment
     * @param cancelUrl - URL to redirect to after failed payment
     * @param plan - Plan to be selected in the checkout
     * @param interval - Interval (monthly / yearly) of the plan
     * @param fullSeats - Number of full seats the subscription will have
     * @param builderSeats - Number of builder seats the subscription will have
     * @param additionalCredits - Additional credits per month
     * @returns string - URL to the Stripe checkout
     */
    createCheckoutSessionForSubscriptionChange(workspaceId: string, successUrl: string, cancelUrl: string, plan: SubscriptionCheckoutProductCode, interval: WorkspaceSubscriptionPlanInterval, fullSeats: number, builderSeats: number, additionalCredits: number): Promise<string>;
    /** Creates a new Stripe checkout session.
     * @param workspaceId - ID of the workspace
     * @param successUrl - URL to redirect to after successful payment
     * @param cancelUrl - URL to redirect to after failed payment
     * @param centAmount - number of cents to be selected in the checkout
     * @returns string - URL to the Stripe checkout
     */
    createCheckoutSessionForTopUpCredits(workspaceId: string, successUrl: string, cancelUrl: string, centAmount: number): Promise<string>;
    /** Creates a new Stripe customer portal session.
     * @param workspaceId - ID of the workspace
     * @param returnUrl - URL to redirect to from the portal
     * @param cancel - describes if the subscription must be cancelled
     * @returns string - URL to the Stripe customer portal
     */
    createPortalSession(workspaceId: string, returnUrl: string, cancel?: boolean | null): Promise<string>;
    /** Update an existing subscription.
     * @param workspaceId - ID of the workspace
     * @param update - describes the subscription updates to be applied
     */
    updateSubscription(workspaceId: string, update: WorkspaceSubscriptionUpdateModel): Promise<void>;
    /** Preview subscription changes.
     * @param workspaceId - ID of the workspace
     * @param update - describes the subscription updates to be applied
     */
    previewSubscriptionUpdate(workspaceId: string, update: WorkspaceSubscriptionUpdateModel): Promise<WorkspaceSubscriptionUpdatePreviewModel>;
    /** Resend an invitation to the workspace.
     * @param workspaceId - ID of the workspace
     * @param invitationId - ID of the invitation
     * @returns Nothing
     */
    resendWorkspaceInvitation(workspaceId: string, invitationId: string, designSystemId: string | undefined): Promise<void>;
    /** Restore a cancelled workspace subscription.
     * @param workspaceId - ID of the workspace
     * @returns Nothing
     */
    restoreWorkspaceSubscription(workspaceId: string): Promise<void>;
    /** Updates portal settings
     * @param workspaceId - ID of the workspace
     * @param settings - updated settings
     * @returns Nothing
     */
    updateWorkspacePortalSettings(workspaceId: string, settings: DTOPortalSettingsUpdatePayload): Promise<void>;
    /** Updates workspace login screen settings
     * @param workspaceId - ID of the workspace
     * @param settings - updated settings
     * @returns Nothing
     */
    updateWorkspaceLoginScreenSettings(workspaceId: string, settings: DTOLoginScreenSettingsUpdate): Promise<void>;
    /** Deletes a single workspace. This action is irreversible, all data will be lost, and can only be performed by the workspace owner
     * @param workspaceId - ID of the workspace
     * @returns Nothing
     */
    deleteWorkspace(workspaceId: string): Promise<void>;
    /** Deletes workspace avatar. This action is irreversible
     * @param workspaceId - ID of the workspace
     * @returns Nothing
     */
    deleteWorkspaceAvatar(workspaceId: string): Promise<void>;
    /** Deletes a workspace registry settings for a specific workspace
     * @param workspaceId - ID of the workspace
     * @returns Nothing
     */
    deleteWorkspaceNPMRegistrySettings(workspaceId: string): Promise<void>;
    /** Deletes a member from the workspace.
     * @param workspaceId - ID of the workspace
     * @param userId - ID of the member
     * @returns Nothing
     */
    deleteWorkspaceMember(workspaceId: string, userId: string): Promise<void>;
    /** Deletes an invitation from the workspace.
     * @param workspaceId - ID of the workspace
     * @param invitationId - ID of the invitation
     * @returns Nothing
     */
    deleteWorkspaceInvitation(workspaceId: string, invitationId: string): Promise<void>;
    /**
     * Lists all untyped data for a given workspace.
     * @param workspaceId - The ID of the workspace.
     * @returns A promise that resolves to the list of untyped data.
     */
    listUntypedData(workspaceId: string): Promise<DTOWorkspaceUntypedDataListResponse>;
    /**
     * Creates new untyped data in the specified workspace.
     * @param workspaceId - The ID of the workspace.
     * @param data - The data to create. Must be a valid JSON object.
     * @returns A promise that resolves to the created untyped data.
     */
    createUntypedData(workspaceId: string, data: any): Promise<DTOWorkspaceUntypedDataResponse>;
    /**
     * Deletes all untyped data in the specified workspace.
     * @param workspaceId - The ID of the workspace.
     * @returns A promise that resolves when the operation is complete.
     */
    deleteAllUntypedData(workspaceId: string): Promise<void>;
    /**
     * Updates specific untyped data in the specified workspace.
     * @param workspaceId - The ID of the workspace.
     * @param id - The ID of the untyped data to update.
     * @param data - The updated data. Must be a valid JSON object.
     * @returns A promise that resolves to the updated untyped data.
     */
    updateUntypedData(workspaceId: string, id: string, data: any): Promise<DTOWorkspaceUntypedDataResponse>;
    /**
     * Deletes specific untyped data in the specified workspace.
     * @param workspaceId - The ID of the workspace.
     * @param id - The ID of the untyped data to delete.
     * @returns A promise that resolves when the operation is complete.
     */
    deleteUntypedData(workspaceId: string, id: string): Promise<void>;
}
