/**
 * Copyright 2015 Google Inc. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
import { AxiosPromise } from 'axios';
import { GoogleApis } from '../..';
import { BodyResponseCallback, GlobalOptions, MethodOptions } from '../../lib/api';
/**
 * Google Vault API
 *
 * Archiving and eDiscovery for G Suite.
 *
 * @example
 * const google = require('googleapis');
 * const vault = google.vault('v1');
 *
 * @namespace vault
 * @type {Function}
 * @version v1
 * @variation v1
 * @param {object=} options Options for Vault
 */
export declare class Vault {
    _options: GlobalOptions;
    google: GoogleApis;
    root: this;
    matters: Resource$Matters;
    constructor(options: GlobalOptions, google: GoogleApis);
    getRoot(): this;
}
/**
 * Add an account with the permission specified. The role cannot be owner. If an
 * account already has a role in the matter, it will be overwritten.
 */
export interface Schema$AddMatterPermissionsRequest {
    /**
     * Only relevant if send_emails is true. True to CC requestor in the email
     * message. False to not CC requestor.
     */
    ccMe: boolean;
    /**
     * The MatterPermission to add.
     */
    matterPermission: Schema$MatterPermission;
    /**
     * True to send notification email to the added account. False to not send
     * notification email.
     */
    sendEmails: boolean;
}
/**
 * Close a matter by ID.
 */
export interface Schema$CloseMatterRequest {
}
/**
 * Response to a CloseMatterRequest.
 */
export interface Schema$CloseMatterResponse {
    /**
     * The updated matter, with state CLOSED.
     */
    matter: Schema$Matter;
}
/**
 * Corpus specific queries.
 */
export interface Schema$CorpusQuery {
    /**
     * Details pertaining to Drive holds. If set, corpus must be Drive.
     */
    driveQuery: Schema$HeldDriveQuery;
    /**
     * Details pertaining to Groups holds. If set, corpus must be Groups.
     */
    groupsQuery: Schema$HeldGroupsQuery;
    /**
     * Details pertaining to Hangouts Chat holds. If set, corpus must be Hangouts
     * Chat.
     */
    hangoutsChatQuery: Schema$HeldHangoutsChatQuery;
    /**
     * Details pertaining to mail holds. If set, corpus must be mail.
     */
    mailQuery: Schema$HeldMailQuery;
}
/**
 * A generic empty message that you can re-use to avoid defining duplicated
 * empty messages in your APIs. A typical example is to use it as the request or
 * the response type of an API method. For instance:      service Foo { rpc
 * Bar(google.protobuf.Empty) returns (google.protobuf.Empty);     }  The JSON
 * representation for `Empty` is empty JSON object `{}`.
 */
export interface Schema$Empty {
}
/**
 * An account being held in a particular hold. This structure is immutable. This
 * can be either a single user or a google group, depending on the corpus.
 */
export interface Schema$HeldAccount {
    /**
     * The account&#39;s ID as provided by the &lt;a
     * href=&quot;https://developers.google.com/admin-sdk/&quot;&gt;Admin
     * SDK&lt;/a&gt;.
     */
    accountId: string;
    /**
     * When the account was put on hold.
     */
    holdTime: string;
}
/**
 * Query options for Drive holds.
 */
export interface Schema$HeldDriveQuery {
    /**
     * If true, include files in Team Drives in the hold.
     */
    includeTeamDriveFiles: boolean;
}
/**
 * Query options for group holds.
 */
export interface Schema$HeldGroupsQuery {
    /**
     * The end time range for the search query. These timestamps are in GMT and
     * rounded down to the start of the given date.
     */
    endTime: string;
    /**
     * The start time range for the search query. These timestamps are in GMT and
     * rounded down to the start of the given date.
     */
    startTime: string;
    /**
     * The search terms for the hold.
     */
    terms: string;
}
/**
 * Query options for hangouts chat holds.
 */
export interface Schema$HeldHangoutsChatQuery {
    /**
     * If true, include rooms the user has participated in.
     */
    includeRooms: boolean;
}
/**
 * Query options for mail holds.
 */
export interface Schema$HeldMailQuery {
    /**
     * The end time range for the search query. These timestamps are in GMT and
     * rounded down to the start of the given date.
     */
    endTime: string;
    /**
     * The start time range for the search query. These timestamps are in GMT and
     * rounded down to the start of the given date.
     */
    startTime: string;
    /**
     * The search terms for the hold.
     */
    terms: string;
}
/**
 * A organizational unit being held in a particular hold. This structure is
 * immutable.
 */
export interface Schema$HeldOrgUnit {
    /**
     * When the org unit was put on hold. This property is immutable.
     */
    holdTime: string;
    /**
     * The org unit&#39;s immutable ID as provided by the Admin SDK.
     */
    orgUnitId: string;
}
/**
 * Represents a hold within Vault. A hold restricts purging of artifacts based
 * on the combination of the query and accounts restrictions. A hold can be
 * configured to either apply to an explicitly configured set of accounts, or
 * can be applied to all members of an organizational unit.
 */
export interface Schema$Hold {
    /**
     * If set, the hold applies to the enumerated accounts and org_unit must be
     * empty.
     */
    accounts: Schema$HeldAccount[];
    /**
     * The corpus to be searched.
     */
    corpus: string;
    /**
     * The unique immutable ID of the hold. Assigned during creation.
     */
    holdId: string;
    /**
     * The name of the hold.
     */
    name: string;
    /**
     * If set, the hold applies to all members of the organizational unit and
     * accounts must be empty. This property is mutable. For groups holds, set the
     * accounts field.
     */
    orgUnit: Schema$HeldOrgUnit;
    /**
     * The corpus-specific query. If set, the corpusQuery must match corpus type.
     */
    query: Schema$CorpusQuery;
    /**
     * The last time this hold was modified.
     */
    updateTime: string;
}
/**
 * Returns a list of held accounts for a hold.
 */
export interface Schema$ListHeldAccountsResponse {
    /**
     * The held accounts on a hold.
     */
    accounts: Schema$HeldAccount[];
}
/**
 * The holds for a matter.
 */
export interface Schema$ListHoldsResponse {
    /**
     * The list of holds.
     */
    holds: Schema$Hold[];
    /**
     * Page token to retrieve the next page of results in the list. If this is
     * empty, then there are no more holds to list.
     */
    nextPageToken: string;
}
/**
 * Provides the list of matters.
 */
export interface Schema$ListMattersResponse {
    /**
     * List of matters.
     */
    matters: Schema$Matter[];
    /**
     * Page token to retrieve the next page of results in the list.
     */
    nextPageToken: string;
}
/**
 * Represents a matter.
 */
export interface Schema$Matter {
    /**
     * The description of the matter.
     */
    description: string;
    /**
     * The matter ID which is generated by the server. Should be blank when
     * creating a new matter.
     */
    matterId: string;
    /**
     * List of users and access to the matter. Currently there is no programmer
     * defined limit on the number of permissions a matter can have.
     */
    matterPermissions: Schema$MatterPermission[];
    /**
     * The name of the matter.
     */
    name: string;
    /**
     * The state of the matter.
     */
    state: string;
}
/**
 * Currently each matter only has one owner, and all others are collaborators.
 * When an account is purged, its corresponding MatterPermission resources cease
 * to exist.
 */
export interface Schema$MatterPermission {
    /**
     * The account id, as provided by &lt;a
     * href=&quot;https://developers.google.com/admin-sdk/&quot;&gt;Admin
     * SDK&lt;/a&gt;.
     */
    accountId: string;
    /**
     * The user&#39;s role in this matter.
     */
    role: string;
}
/**
 * Remove an account as a matter collaborator.
 */
export interface Schema$RemoveMatterPermissionsRequest {
    /**
     * The account ID.
     */
    accountId: string;
}
/**
 * Reopen a matter by ID.
 */
export interface Schema$ReopenMatterRequest {
}
/**
 * Response to a ReopenMatterRequest.
 */
export interface Schema$ReopenMatterResponse {
    /**
     * The updated matter, with state OPEN.
     */
    matter: Schema$Matter;
}
/**
 * Undelete a matter by ID.
 */
export interface Schema$UndeleteMatterRequest {
}
export declare class Resource$Matters {
    root: Vault;
    holds: Resource$Matters$Holds;
    constructor(root: Vault);
    getRoot(): Vault;
    /**
     * vault.matters.addPermissions
     * @desc Adds an account as a matter collaborator.
     * @alias vault.matters.addPermissions
     * @memberOf! ()
     *
     * @param {object} params Parameters for request
     * @param {string} params.matterId The matter ID.
     * @param {().AddMatterPermissionsRequest} params.resource Request body data
     * @param {object} [options] Optionally override request options, such as `url`, `method`, and `encoding`.
     * @param {callback} callback The callback that handles the response.
     * @return {object} Request object
     */
    addPermissions(params?: any, options?: MethodOptions): AxiosPromise<Schema$MatterPermission>;
    addPermissions(params?: any, options?: MethodOptions | BodyResponseCallback<Schema$MatterPermission>, callback?: BodyResponseCallback<Schema$MatterPermission>): void;
    /**
     * vault.matters.close
     * @desc Closes the specified matter. Returns matter with updated state.
     * @alias vault.matters.close
     * @memberOf! ()
     *
     * @param {object} params Parameters for request
     * @param {string} params.matterId The matter ID.
     * @param {().CloseMatterRequest} params.resource Request body data
     * @param {object} [options] Optionally override request options, such as `url`, `method`, and `encoding`.
     * @param {callback} callback The callback that handles the response.
     * @return {object} Request object
     */
    close(params?: any, options?: MethodOptions): AxiosPromise<Schema$CloseMatterResponse>;
    close(params?: any, options?: MethodOptions | BodyResponseCallback<Schema$CloseMatterResponse>, callback?: BodyResponseCallback<Schema$CloseMatterResponse>): void;
    /**
     * vault.matters.create
     * @desc Creates a new matter with the given name and description. The initial
     * state is open, and the owner is the method caller. Returns the created
     * matter with default view.
     * @alias vault.matters.create
     * @memberOf! ()
     *
     * @param {object} params Parameters for request
     * @param {().Matter} params.resource Request body data
     * @param {object} [options] Optionally override request options, such as `url`, `method`, and `encoding`.
     * @param {callback} callback The callback that handles the response.
     * @return {object} Request object
     */
    create(params?: any, options?: MethodOptions): AxiosPromise<Schema$Matter>;
    create(params?: any, options?: MethodOptions | BodyResponseCallback<Schema$Matter>, callback?: BodyResponseCallback<Schema$Matter>): void;
    /**
     * vault.matters.delete
     * @desc Deletes the specified matter. Returns matter with updated state.
     * @alias vault.matters.delete
     * @memberOf! ()
     *
     * @param {object} params Parameters for request
     * @param {string} params.matterId The matter ID
     * @param {object} [options] Optionally override request options, such as `url`, `method`, and `encoding`.
     * @param {callback} callback The callback that handles the response.
     * @return {object} Request object
     */
    delete(params?: any, options?: MethodOptions): AxiosPromise<Schema$Matter>;
    delete(params?: any, options?: MethodOptions | BodyResponseCallback<Schema$Matter>, callback?: BodyResponseCallback<Schema$Matter>): void;
    /**
     * vault.matters.get
     * @desc Gets the specified matter.
     * @alias vault.matters.get
     * @memberOf! ()
     *
     * @param {object} params Parameters for request
     * @param {string} params.matterId The matter ID.
     * @param {string=} params.view Specifies which parts of the Matter to return in the response.
     * @param {object} [options] Optionally override request options, such as `url`, `method`, and `encoding`.
     * @param {callback} callback The callback that handles the response.
     * @return {object} Request object
     */
    get(params?: any, options?: MethodOptions): AxiosPromise<Schema$Matter>;
    get(params?: any, options?: MethodOptions | BodyResponseCallback<Schema$Matter>, callback?: BodyResponseCallback<Schema$Matter>): void;
    /**
     * vault.matters.list
     * @desc Lists matters the user has access to.
     * @alias vault.matters.list
     * @memberOf! ()
     *
     * @param {object} params Parameters for request
     * @param {integer=} params.pageSize The number of matters to return in the response. Default and maximum are 100.
     * @param {string=} params.pageToken The pagination token as returned in the response.
     * @param {string=} params.state If set, list only matters with that specific state. The default is listing matters of all states.
     * @param {string=} params.view Specifies which parts of the matter to return in response.
     * @param {object} [options] Optionally override request options, such as `url`, `method`, and `encoding`.
     * @param {callback} callback The callback that handles the response.
     * @return {object} Request object
     */
    list(params?: any, options?: MethodOptions): AxiosPromise<Schema$ListMattersResponse>;
    list(params?: any, options?: MethodOptions | BodyResponseCallback<Schema$ListMattersResponse>, callback?: BodyResponseCallback<Schema$ListMattersResponse>): void;
    /**
     * vault.matters.removePermissions
     * @desc Removes an account as a matter collaborator.
     * @alias vault.matters.removePermissions
     * @memberOf! ()
     *
     * @param {object} params Parameters for request
     * @param {string} params.matterId The matter ID.
     * @param {().RemoveMatterPermissionsRequest} params.resource Request body data
     * @param {object} [options] Optionally override request options, such as `url`, `method`, and `encoding`.
     * @param {callback} callback The callback that handles the response.
     * @return {object} Request object
     */
    removePermissions(params?: any, options?: MethodOptions): AxiosPromise<Schema$Empty>;
    removePermissions(params?: any, options?: MethodOptions | BodyResponseCallback<Schema$Empty>, callback?: BodyResponseCallback<Schema$Empty>): void;
    /**
     * vault.matters.reopen
     * @desc Reopens the specified matter. Returns matter with updated state.
     * @alias vault.matters.reopen
     * @memberOf! ()
     *
     * @param {object} params Parameters for request
     * @param {string} params.matterId The matter ID.
     * @param {().ReopenMatterRequest} params.resource Request body data
     * @param {object} [options] Optionally override request options, such as `url`, `method`, and `encoding`.
     * @param {callback} callback The callback that handles the response.
     * @return {object} Request object
     */
    reopen(params?: any, options?: MethodOptions): AxiosPromise<Schema$ReopenMatterResponse>;
    reopen(params?: any, options?: MethodOptions | BodyResponseCallback<Schema$ReopenMatterResponse>, callback?: BodyResponseCallback<Schema$ReopenMatterResponse>): void;
    /**
     * vault.matters.undelete
     * @desc Undeletes the specified matter. Returns matter with updated state.
     * @alias vault.matters.undelete
     * @memberOf! ()
     *
     * @param {object} params Parameters for request
     * @param {string} params.matterId The matter ID.
     * @param {().UndeleteMatterRequest} params.resource Request body data
     * @param {object} [options] Optionally override request options, such as `url`, `method`, and `encoding`.
     * @param {callback} callback The callback that handles the response.
     * @return {object} Request object
     */
    undelete(params?: any, options?: MethodOptions): AxiosPromise<Schema$Matter>;
    undelete(params?: any, options?: MethodOptions | BodyResponseCallback<Schema$Matter>, callback?: BodyResponseCallback<Schema$Matter>): void;
    /**
     * vault.matters.update
     * @desc Updates the specified matter. This updates only the name and
     * description of the matter, identified by matter id. Changes to any other
     * fields are ignored. Returns the default view of the matter.
     * @alias vault.matters.update
     * @memberOf! ()
     *
     * @param {object} params Parameters for request
     * @param {string} params.matterId The matter ID.
     * @param {().Matter} params.resource Request body data
     * @param {object} [options] Optionally override request options, such as `url`, `method`, and `encoding`.
     * @param {callback} callback The callback that handles the response.
     * @return {object} Request object
     */
    update(params?: any, options?: MethodOptions): AxiosPromise<Schema$Matter>;
    update(params?: any, options?: MethodOptions | BodyResponseCallback<Schema$Matter>, callback?: BodyResponseCallback<Schema$Matter>): void;
}
export declare class Resource$Matters$Holds {
    root: Vault;
    accounts: Resource$Matters$Holds$Accounts;
    constructor(root: Vault);
    getRoot(): Vault;
    /**
     * vault.matters.holds.create
     * @desc Creates a hold in the given matter.
     * @alias vault.matters.holds.create
     * @memberOf! ()
     *
     * @param {object} params Parameters for request
     * @param {string} params.matterId The matter ID.
     * @param {().Hold} params.resource Request body data
     * @param {object} [options] Optionally override request options, such as `url`, `method`, and `encoding`.
     * @param {callback} callback The callback that handles the response.
     * @return {object} Request object
     */
    create(params?: any, options?: MethodOptions): AxiosPromise<Schema$Hold>;
    create(params?: any, options?: MethodOptions | BodyResponseCallback<Schema$Hold>, callback?: BodyResponseCallback<Schema$Hold>): void;
    /**
     * vault.matters.holds.delete
     * @desc Removes a hold by ID. This will release any HeldAccounts on this
     * Hold.
     * @alias vault.matters.holds.delete
     * @memberOf! ()
     *
     * @param {object} params Parameters for request
     * @param {string} params.holdId The hold ID.
     * @param {string} params.matterId The matter ID.
     * @param {object} [options] Optionally override request options, such as `url`, `method`, and `encoding`.
     * @param {callback} callback The callback that handles the response.
     * @return {object} Request object
     */
    delete(params?: any, options?: MethodOptions): AxiosPromise<Schema$Empty>;
    delete(params?: any, options?: MethodOptions | BodyResponseCallback<Schema$Empty>, callback?: BodyResponseCallback<Schema$Empty>): void;
    /**
     * vault.matters.holds.get
     * @desc Gets a hold by ID.
     * @alias vault.matters.holds.get
     * @memberOf! ()
     *
     * @param {object} params Parameters for request
     * @param {string} params.holdId The hold ID.
     * @param {string} params.matterId The matter ID.
     * @param {string=} params.view Specifies which parts of the Hold to return.
     * @param {object} [options] Optionally override request options, such as `url`, `method`, and `encoding`.
     * @param {callback} callback The callback that handles the response.
     * @return {object} Request object
     */
    get(params?: any, options?: MethodOptions): AxiosPromise<Schema$Hold>;
    get(params?: any, options?: MethodOptions | BodyResponseCallback<Schema$Hold>, callback?: BodyResponseCallback<Schema$Hold>): void;
    /**
     * vault.matters.holds.list
     * @desc Lists holds within a matter. An empty page token in ListHoldsResponse
     * denotes no more holds to list.
     * @alias vault.matters.holds.list
     * @memberOf! ()
     *
     * @param {object} params Parameters for request
     * @param {string} params.matterId The matter ID.
     * @param {integer=} params.pageSize The number of holds to return in the response, between 0 and 100 inclusive. Leaving this empty, or as 0, is the same as page_size = 100.
     * @param {string=} params.pageToken The pagination token as returned in the response. An empty token means start from the beginning.
     * @param {string=} params.view Specifies which parts of the Hold to return.
     * @param {object} [options] Optionally override request options, such as `url`, `method`, and `encoding`.
     * @param {callback} callback The callback that handles the response.
     * @return {object} Request object
     */
    list(params?: any, options?: MethodOptions): AxiosPromise<Schema$ListHoldsResponse>;
    list(params?: any, options?: MethodOptions | BodyResponseCallback<Schema$ListHoldsResponse>, callback?: BodyResponseCallback<Schema$ListHoldsResponse>): void;
    /**
     * vault.matters.holds.update
     * @desc Updates the OU and/or query parameters of a hold. You cannot add
     * accounts to a hold that covers an OU, nor can you add OUs to a hold that
     * covers individual accounts. Accounts listed in the hold will be ignored.
     * @alias vault.matters.holds.update
     * @memberOf! ()
     *
     * @param {object} params Parameters for request
     * @param {string} params.holdId The ID of the hold.
     * @param {string} params.matterId The matter ID.
     * @param {().Hold} params.resource Request body data
     * @param {object} [options] Optionally override request options, such as `url`, `method`, and `encoding`.
     * @param {callback} callback The callback that handles the response.
     * @return {object} Request object
     */
    update(params?: any, options?: MethodOptions): AxiosPromise<Schema$Hold>;
    update(params?: any, options?: MethodOptions | BodyResponseCallback<Schema$Hold>, callback?: BodyResponseCallback<Schema$Hold>): void;
}
export declare class Resource$Matters$Holds$Accounts {
    root: Vault;
    constructor(root: Vault);
    getRoot(): Vault;
    /**
     * vault.matters.holds.accounts.create
     * @desc Adds a HeldAccount to a hold. Accounts can only be added to a hold
     * that has no held_org_unit set. Attempting to add an account to an OU-based
     * hold will result in an error.
     * @alias vault.matters.holds.accounts.create
     * @memberOf! ()
     *
     * @param {object} params Parameters for request
     * @param {string} params.holdId The hold ID.
     * @param {string} params.matterId The matter ID.
     * @param {().HeldAccount} params.resource Request body data
     * @param {object} [options] Optionally override request options, such as `url`, `method`, and `encoding`.
     * @param {callback} callback The callback that handles the response.
     * @return {object} Request object
     */
    create(params?: any, options?: MethodOptions): AxiosPromise<Schema$HeldAccount>;
    create(params?: any, options?: MethodOptions | BodyResponseCallback<Schema$HeldAccount>, callback?: BodyResponseCallback<Schema$HeldAccount>): void;
    /**
     * vault.matters.holds.accounts.delete
     * @desc Removes a HeldAccount from a hold. If this request leaves the hold
     * with no held accounts, the hold will not apply to any accounts.
     * @alias vault.matters.holds.accounts.delete
     * @memberOf! ()
     *
     * @param {object} params Parameters for request
     * @param {string} params.accountId The ID of the account to remove from the hold.
     * @param {string} params.holdId The hold ID.
     * @param {string} params.matterId The matter ID.
     * @param {object} [options] Optionally override request options, such as `url`, `method`, and `encoding`.
     * @param {callback} callback The callback that handles the response.
     * @return {object} Request object
     */
    delete(params?: any, options?: MethodOptions): AxiosPromise<Schema$Empty>;
    delete(params?: any, options?: MethodOptions | BodyResponseCallback<Schema$Empty>, callback?: BodyResponseCallback<Schema$Empty>): void;
    /**
     * vault.matters.holds.accounts.list
     * @desc Lists HeldAccounts for a hold. This will only list individually
     * specified held accounts. If the hold is on an OU, then use <a
     * href="https://developers.google.com/admin-sdk/">Admin SDK</a> to enumerate
     * its members.
     * @alias vault.matters.holds.accounts.list
     * @memberOf! ()
     *
     * @param {object} params Parameters for request
     * @param {string} params.holdId The hold ID.
     * @param {string} params.matterId The matter ID.
     * @param {object} [options] Optionally override request options, such as `url`, `method`, and `encoding`.
     * @param {callback} callback The callback that handles the response.
     * @return {object} Request object
     */
    list(params?: any, options?: MethodOptions): AxiosPromise<Schema$ListHeldAccountsResponse>;
    list(params?: any, options?: MethodOptions | BodyResponseCallback<Schema$ListHeldAccountsResponse>, callback?: BodyResponseCallback<Schema$ListHeldAccountsResponse>): void;
}
