import { Codec, Encoder, Response } from "mongodb-stitch-core-sdk";
import { AppResponse, AppResponseCodec } from "./apps/AppsResources";
import { AuthProviderResponse, AuthProviderResponseCodec } from "./authProviders/AuthProvidersResources";
import { ProviderConfig, ProviderConfigCodec } from "./authProviders/ProviderConfigs";
import { FunctionCreator, FunctionCreatorCodec, FunctionResponse, FunctionResponseCodec } from "./functions/FunctionsResources";
import { RuleCreator, RuleCreatorCodec, RuleResponse, RuleResponseCodec } from "./services/rules/RulesResources";
import { ServiceConfig, ServiceConfigCodec } from "./services/ServiceConfigs";
import { ServiceResponse, ServiceResponseCodec } from "./services/ServicesResources";
import StitchAdminAuth from "./StitchAdminAuth";
import { ConfirmationEmail } from "./userRegistrations/UserRegistrationsResources";
import { UserCreator, UserCreatorCodec, UserResponse, UserResponseCodec } from "./users/UsersResources";
interface Resource {
    url: string;
    adminAuth: StitchAdminAuth;
}
declare class BasicResource implements Resource {
    url: string;
    adminAuth: StitchAdminAuth;
    constructor(adminAuth: StitchAdminAuth, url: string);
}
declare function checkEmpty(response: Response): void;
declare class Listable<T> extends BasicResource {
    readonly codec: Codec<T>;
    list(): Promise<T[]>;
}
declare class Gettable<T> extends BasicResource {
    readonly codec: Codec<T>;
    get(): Promise<T>;
}
declare class Removable extends BasicResource {
    remove(): Promise<void>;
}
declare class Creatable<Creator, T> extends BasicResource {
    readonly codec: Codec<T>;
    readonly creatorCodec: Encoder<Creator>;
    create(data: Creator): Promise<T>;
}
declare class Updatable<T> extends BasicResource {
    readonly updatableCodec: Codec<T>;
    update(data: T): Promise<T>;
}
declare class Enablable extends BasicResource {
    enable(): Promise<void>;
}
declare class Disablable extends BasicResource {
    disable(): Promise<void>;
}
declare class AuthProvider extends BasicResource implements Gettable<AuthProviderResponse>, Updatable<AuthProviderResponse>, Removable, Enablable, Disablable {
    readonly codec: AuthProviderResponseCodec;
    readonly updatableCodec: AuthProviderResponseCodec;
    get: () => Promise<AuthProviderResponse>;
    update: (data: AuthProviderResponse) => Promise<AuthProviderResponse>;
    remove: () => Promise<void>;
    enable: () => Promise<void>;
    disable: () => Promise<void>;
}
declare class AuthProviders extends BasicResource implements Listable<AuthProviderResponse>, Creatable<ProviderConfig, AuthProviderResponse> {
    readonly codec: AuthProviderResponseCodec;
    readonly creatorCodec: ProviderConfigCodec;
    create: (data: ProviderConfig) => Promise<AuthProviderResponse>;
    list: () => Promise<AuthProviderResponse[]>;
    authProvider(providerId: string): AuthProvider;
}
declare class UserRegistrations extends BasicResource {
    sendConfirmation(email: string): Promise<ConfirmationEmail>;
}
declare class User extends BasicResource implements Gettable<UserResponse>, Removable {
    readonly codec: UserResponseCodec;
    get: () => Promise<AuthProviderResponse>;
    remove: () => Promise<void>;
}
declare class Users extends BasicResource implements Listable<UserResponse>, Creatable<UserCreator, UserResponse> {
    readonly codec: UserResponseCodec;
    readonly creatorCodec: UserCreatorCodec;
    create: (data: UserCreator) => Promise<UserResponse>;
    list: () => Promise<UserResponse[]>;
    user(uid: string): User;
}
declare class Function extends BasicResource implements Gettable<FunctionResponse>, Updatable<FunctionCreator>, Removable {
    readonly codec: FunctionResponseCodec;
    readonly updatableCodec: FunctionCreatorCodec;
    get: () => Promise<FunctionResponse>;
    update: (data: FunctionCreator) => Promise<FunctionCreator>;
    remove: () => Promise<void>;
}
declare class Functions extends BasicResource implements Listable<FunctionResponse>, Creatable<FunctionCreator, FunctionResponse> {
    readonly codec: FunctionResponseCodec;
    readonly creatorCodec: FunctionCreatorCodec;
    create: (data: FunctionCreator) => Promise<FunctionResponse>;
    list: () => Promise<FunctionResponse[]>;
    function(fid: string): Function;
}
declare class Rule extends BasicResource implements Gettable<RuleResponse>, Removable {
    codec: RuleResponseCodec;
    get: () => Promise<RuleResponse>;
    remove: () => Promise<void>;
}
declare class Rules extends BasicResource implements Listable<RuleResponse>, Creatable<RuleCreator, RuleResponse> {
    creatorCodec: RuleCreatorCodec;
    codec: RuleResponseCodec;
    create: (data: RuleCreator) => Promise<RuleResponse>;
    list: () => Promise<RuleResponse[]>;
}
declare class Service extends BasicResource implements Gettable<ServiceResponse>, Removable {
    codec: ServiceResponseCodec;
    get: () => Promise<ServiceResponse>;
    remove: () => Promise<void>;
    readonly rules: Rules;
}
declare class Services extends BasicResource implements Listable<ServiceResponse>, Creatable<ServiceConfig, ServiceResponse> {
    creatorCodec: ServiceConfigCodec;
    codec: ServiceResponseCodec;
    list: () => Promise<ServiceResponse[]>;
    create: (data: ServiceConfig) => Promise<ServiceResponse>;
    service(id: string): Service;
}
declare class App extends BasicResource implements Gettable<AppResponse>, Removable {
    readonly codec: AppResponseCodec;
    readonly authProviders: AuthProviders;
    readonly functions: Functions;
    readonly services: Services;
    readonly users: Users;
    readonly userRegistrations: UserRegistrations;
    get: () => Promise<AppResponse>;
    remove: () => Promise<void>;
}
declare class Apps extends BasicResource implements Listable<AppResponse> {
    readonly codec: AppResponseCodec;
    list: () => Promise<AppResponse[]>;
    create(name: string, defaults?: boolean): Promise<AppResponse>;
    app(appId: string): App;
}
export { Apps, App, BasicResource, Gettable, Updatable, Listable, Creatable, Enablable, Disablable, Resource, Removable, Services, Service, Rules, Rule, Functions, Function, Users, User, UserRegistrations, AuthProvider, AuthProviders, checkEmpty };
