import type { ClerkPaginationRequest } from '@clerk/types';
import type { Organization, OrganizationInvitation, OrganizationInvitationStatus, OrganizationMembership } from '../resources';
import type { PaginatedResourceResponse } from '../resources/Deserializer';
import type { OrganizationMembershipRole } from '../resources/Enums';
import { AbstractAPI } from './AbstractApi';
import type { WithSign } from './util-types';
type MetadataParams<TPublic = OrganizationPublicMetadata, TPrivate = OrganizationPrivateMetadata> = {
    publicMetadata?: TPublic;
    privateMetadata?: TPrivate;
};
type GetOrganizationListParams = ClerkPaginationRequest<{
    includeMembersCount?: boolean;
    query?: string;
    orderBy?: WithSign<'name' | 'created_at' | 'members_count'>;
}>;
type CreateParams = {
    name: string;
    slug?: string;
    createdBy: string;
    maxAllowedMemberships?: number;
} & MetadataParams;
type GetOrganizationParams = {
    organizationId: string;
} | {
    slug: string;
};
type UpdateParams = {
    name?: string;
    slug?: string;
    maxAllowedMemberships?: number;
} & MetadataParams;
type UpdateLogoParams = {
    file: Blob | File;
    uploaderUserId: string;
};
type UpdateMetadataParams = MetadataParams;
type GetOrganizationMembershipListParams = ClerkPaginationRequest<{
    organizationId: string;
    orderBy?: WithSign<'phone_number' | 'email_address' | 'created_at' | 'first_name' | 'last_name' | 'username'>;
}>;
type CreateOrganizationMembershipParams = {
    organizationId: string;
    userId: string;
    role: OrganizationMembershipRole;
};
type UpdateOrganizationMembershipParams = CreateOrganizationMembershipParams;
type UpdateOrganizationMembershipMetadataParams = {
    organizationId: string;
    userId: string;
} & MetadataParams<OrganizationMembershipPublicMetadata>;
type DeleteOrganizationMembershipParams = {
    organizationId: string;
    userId: string;
};
type CreateOrganizationInvitationParams = {
    organizationId: string;
    inviterUserId: string;
    emailAddress: string;
    role: OrganizationMembershipRole;
    redirectUrl?: string;
    publicMetadata?: OrganizationInvitationPublicMetadata;
};
type GetOrganizationInvitationListParams = ClerkPaginationRequest<{
    organizationId: string;
    status?: OrganizationInvitationStatus[];
}>;
type GetOrganizationInvitationParams = {
    organizationId: string;
    invitationId: string;
};
type RevokeOrganizationInvitationParams = {
    organizationId: string;
    invitationId: string;
    requestingUserId: string;
};
export declare class OrganizationAPI extends AbstractAPI {
    getOrganizationList(params?: GetOrganizationListParams): Promise<PaginatedResourceResponse<Organization[]>>;
    createOrganization(params: CreateParams): Promise<Organization>;
    getOrganization(params: GetOrganizationParams): Promise<Organization>;
    updateOrganization(organizationId: string, params: UpdateParams): Promise<Organization>;
    updateOrganizationLogo(organizationId: string, params: UpdateLogoParams): Promise<Organization>;
    deleteOrganizationLogo(organizationId: string): Promise<Organization>;
    updateOrganizationMetadata(organizationId: string, params: UpdateMetadataParams): Promise<Organization>;
    deleteOrganization(organizationId: string): Promise<Organization>;
    getOrganizationMembershipList(params: GetOrganizationMembershipListParams): Promise<PaginatedResourceResponse<OrganizationMembership[]>>;
    createOrganizationMembership(params: CreateOrganizationMembershipParams): Promise<OrganizationMembership>;
    updateOrganizationMembership(params: UpdateOrganizationMembershipParams): Promise<OrganizationMembership>;
    updateOrganizationMembershipMetadata(params: UpdateOrganizationMembershipMetadataParams): Promise<OrganizationMembership>;
    deleteOrganizationMembership(params: DeleteOrganizationMembershipParams): Promise<OrganizationMembership>;
    getOrganizationInvitationList(params: GetOrganizationInvitationListParams): Promise<PaginatedResourceResponse<OrganizationInvitation[]>>;
    createOrganizationInvitation(params: CreateOrganizationInvitationParams): Promise<OrganizationInvitation>;
    getOrganizationInvitation(params: GetOrganizationInvitationParams): Promise<OrganizationInvitation>;
    revokeOrganizationInvitation(params: RevokeOrganizationInvitationParams): Promise<OrganizationInvitation>;
}
export {};
//# sourceMappingURL=OrganizationApi.d.ts.map