import type { InjectedDependenciesParam, InjectedOptionsParam, Application, BalenaModel } from '..';
import type { ODataOptionsWithoutCount, OptionsToResponse } from 'pinejs-client-core';
export interface ApplicationInviteOptions {
    invitee: string;
    roleName?: string;
    message?: string;
}
declare const RESOURCE = "invitee__is_invited_to__application";
type ApplicationInvite = BalenaModel[typeof RESOURCE];
declare const getApplicationInviteModel: (deps: InjectedDependenciesParam, opts: InjectedOptionsParam, getApplication: (slugOrUuidOrId: string | number, options?: ODataOptionsWithoutCount<Application["Read"]>) => Promise<Application["Read"]>) => {
    /**
     * @summary Get all invites
     * @name getAll
     * @public
     * @function
     * @memberof balena.models.application.invite
     *
     * @description
     * This method returns all invites.
     *
     * @param {Object} [options={}] - extra pine options to use
     * @fulfil {Object[]} - invites
     * @returns {Promise}
     *
     * @example
     * balena.models.application.invite.getAll().then(function(invites) {
     * 	console.log(invites);
     * });
     */
    getAll<T extends ODataOptionsWithoutCount<ApplicationInvite["Read"]>>(options?: T): Promise<OptionsToResponse<ApplicationInvite["Read"], T, undefined>>;
    /**
     * @summary Get all invites by application
     * @name getAllByApplication
     * @public
     * @function
     * @memberof balena.models.application.invite
     *
     * @description
     * This method returns all invites for a specific application.
     *
     * @param {String|Number} slugOrUuidOrId - application slug (string), uuid (string) or id (number)
     * @param {Object} [options={}] - extra pine options to use
     * @fulfil {Object[]} - invites
     * @returns {Promise}
     *
     * @example
     * balena.models.application.invite.getAllByApplication('myorganization/myapp').then(function(invites) {
     * 	console.log(invites);
     * });
     *
     * @example
     * balena.models.application.invite.getAllByApplication(123).then(function(invites) {
     * 	console.log(invites);
     * });
     */
    getAllByApplication<T extends ODataOptionsWithoutCount<ApplicationInvite["Read"]>>(slugOrUuidOrId: number | string, options?: T): Promise<OptionsToResponse<ApplicationInvite["Read"], T, undefined>>;
    /**
     * @summary Creates a new invite for an application
     * @name create
     * @public
     * @function
     * @memberof balena.models.application.invite
     *
     * @description This method invites a user by their email to an application.
     *
     * @param {String|Number} slugOrUuidOrId - application slug (string), uuid (string) or id (number)
     * @param {Object} options - invite creation parameters
     * @param {String} options.invitee - the email of the invitee
     * @param {String} [options.roleName="developer"] - the role name to be granted to the invitee
     * @param {String} [message=null] - the message to send along with the invite
     *
     * @fulfil {String} - application invite
     * @returns {Promise}
     *
     * @example
     * balena.models.application.invite.create('myorganization/myapp', { invitee: "invitee@example.org", roleName: "developer", message: "join my app" }).then(function(invite) {
     * 	console.log(invite);
     * });
     */
    create(slugOrUuidOrId: string | number, { invitee, roleName, message }: ApplicationInviteOptions): Promise<import("pinejs-client-core/node_modules/@balena/abstract-sql-to-typescript", { with: { "resolution-mode": "import" } }).PickDeferred<{
        invitee: {
            __id: import("..").Invitee["Read"]["id"];
        } | [import("..").Invitee["Read"]];
        is_invited_to__application: {
            __id: Application["Read"]["id"];
        } | [Application["Read"]];
        id: import("@balena/sbvr-types").Types["Integer"]["Read"];
        application_membership_role: {
            __id: import("..").ApplicationMembershipRole["Read"]["id"];
        } | [import("..").ApplicationMembershipRole["Read"]];
        message: import("@balena/sbvr-types").Types["Text"]["Read"] | null;
        is_created_by__user: {
            __id: import("..").User["Read"]["id"];
        } | [import("..").User["Read"]] | [] | null;
        application: {
            __id: Application["Read"]["id"];
        } | [Application["Read"]];
    }>>;
    /**
     * @summary Revoke an invite
     * @name revoke
     * @public
     * @function
     * @memberof balena.models.application.invite
     *
     * @param {Number} id - application invite id
     * @returns {Promise}
     *
     * @example
     * balena.models.application.invite.revoke(123);
     */
    revoke(id: number): Promise<void>;
    /**
     * @summary Accepts an invite
     * @name accept
     * @public
     * @function
     * @memberof balena.models.application.invite
     *
     * @description This method adds the calling user to the application.
     *
     * @param {String} invitationToken - invite token
     * @returns {Promise}
     *
     * @example
     * balena.models.application.invite.accept("qwerty-invitation-token");
     */
    accept(invitationToken: string): Promise<void>;
};
export default getApplicationInviteModel;
