/// <reference types="node" />
export declare const root: typeof globalThis;
export declare type AnyJson = boolean | number | string | null | JsonObject | JsonArray;
export interface JsonObject {
    [key: string]: AnyJson;
}
export interface JsonArray extends Array<AnyJson> {
}
/**
 * @typedef {Object} Callbacks
 * @description コールバック。非同期 API 呼び出し時に使用する。
 * コールバックを省略(=undefined)した場合は、非同期 API は Promise を返却する。
 * Promise 完了時の引数は success コールバックの引数と同じ。
 * @property {function} success 成功時に呼び出されるコールバック。<br>
 * success コールバックの引数は1個。引数の内容は、各非同期 API により異なる。
 * @property {function} error エラー発生時に呼び出されるコールバック。<br>
 * error コールバックには Object が渡される。各 API に指定がない限り、以下の形式となる。
 * <pre>
 * {
 *    "status"        : ステータスコード,
 *    "statusText"    : エラーメッセージ,
 *    "responseText"  : レスポンスメッセージ
 * }
 * </pre>
 */
export interface Callbacks {
    success?(data: any): void;
    error?(error: Error): void;
}
/**
 * @description エラーログを出力する
 * @private
 */
export declare const nbError: (message: string) => void;
/**
 * @description ログを出力する
 * @private
 */
export declare const nbLogger: (message: string) => void;
/**
 * @description 引数エラー処理。
 *   callback があれば callback.error を呼び、なければ reject された Promise を返す。
 * @param {Callbacks} callbacks コールバック
 * @param {String} name API名
 * @private
 */
export declare const _doBadRequestCallback: (callbacks: Callbacks, name: string) => Promise<any>;
/**
 * @description callbacks を promise にバインドする
 * @private
 */
export declare const _promisify: (promise: Promise<any>, callbacks?: Callbacks) => Promise<any>;
/**
 * エラーオブジェクト
 */
export interface NbError extends Error {
    /**
     * ステータスコード
     */
    status: number;
    /**
     * ステータステキスト
     */
    statusText: string;
    /**
     * レスポンステキスト
     */
    responseText: string;
    /**
     * データ(あれば)
     */
    data?: any;
}
/**
 * @description エラーオブジェクトを返す
 * @param status ステータスコード
 * @param statusText ステータステキスト
 * @param responseText レスポンステキスト
 * @param data データ(あれば)
 * @returns {any} エラーオブジェクト
 * @private
 */
export declare const _createError: (status: number, statusText: string, responseText: string, data?: any) => NbError;
/**
 * @private
 */
export declare const _errorText: (error: any) => string;
/**
 * @description オブジェクトか判定する
 * @private
 */
export declare const _isObject: (value: any) => boolean;
/**
 * @description オブジェクトを比較する
 * @private
 */
export declare const _compareObject: (src: any, target: any) => boolean;
/**
 * アサーション
 * @param assert
 * @param message
 * @private
 */
export declare const nbAssert: (assert: boolean, message?: string) => void;
import * as _tls from "tls";
/**
 * Node.js 環境かどうか調べる
 * @returns {boolean} Node.js 環境なら true
 * @private
 */
export declare const isNodeJs: () => boolean;
/**
 * Node.js の require。
 * Node.js でのみ動作する。ブラウザ環境では何もしない。
 * browserify/webpack などの展開対象外。
 * @param {string} module
 * @return {any}
 * @private
 */
export declare const _node_require: (module: string) => any;
export declare const URL: any;
export declare const https: any;
export declare const http: any;
export declare const tls: any;
export declare const fs: any;
export declare const util: any;
export declare const http2: any;
/**
 * APIリクエストインタフェース。
 * HttpRequest, _SdeRequest が implement する
 * @private
 */
export interface ApiRequest {
    execute(): Promise<any>;
    setData(data: any): void;
    setMethod?(method: string): void;
    setContentType?(type: string): void;
    setQueryParam?(key: string, value: any): void;
    setQueryParams?(params: any): void;
    setSessionToken?(token: string): void;
}
export interface Headers {
    [index: string]: string;
}
export interface QueryParams {
    [index: string]: string;
}
/**
 * XHRが定義されているか調べる
 * @returns {boolean}
 * @private
 */
export declare const _hasXhr: () => boolean;
export declare abstract class HttpRequestExecutor {
    _req: HttpRequest;
    _resolve: any;
    _reject: any;
    static _xhrFactory: (req: HttpRequest) => HttpRequestExecutor;
    static _nodeFactory: (req: HttpRequest) => HttpRequestExecutor;
    constructor(req: HttpRequest);
    /**
     * リクエスト実行
     * @param {string} method
     * @param {string} url
     * @param {Headers} headers
     * @param {any} body
     * @param {number} timeout
     * @param {string} responseType
     * @param {boolean} receiveResponseHeaders
     * @param {boolean} useHttp2
     */
    abstract execute(method: string, url: string, headers: Headers, body: any, timeout: number, responseType: string, receiveResponseHeaders: boolean, useHttp2: boolean): void;
    abstract setReturnRawMessage(rawMessage: boolean): void;
    /**
     * セッションをcloseする (Node.js 使用時、HTTP/2使用時のみ有効)
     * @param {string} authority 対象のauthority (例: 'http://example.com:1234' パスやパラメータは含めない)
     * <p>未指定の場合は、保持する全てのHTTP/2セッションをcloseする。
     */
    static closeHttp2Session(authority?: string): void;
    /**
     * HttpRequestExecutor のファクトリメソッド
     * @param {HttpRequest} req
     * @return {HttpRequestExecutor}
     */
    static create(req: HttpRequest): HttpRequestExecutor;
    static setXhrFactory(factory: (req: HttpRequest) => HttpRequestExecutor): void;
    static setNodeFactory(factory: (req: HttpRequest) => HttpRequestExecutor): void;
}
export declare class HttpRequest implements ApiRequest {
    private _service;
    private _method;
    private _url;
    private _headers;
    private _contentType;
    private _responseType;
    private _queryParams;
    private _data;
    private _sessionToken;
    private _timeout;
    private _rawMessage;
    private _useHttp2;
    _resolve: any;
    _reject: any;
    private _receiveResponseHeaders;
    private _responseHeaders;
    private static _defaultTimeout;
    static _httpAgent: any;
    static _httpsAgent: any;
    static _httpsAgentOptions: _tls.SecureContextOptions;
    static _proxy: ProxyServer;
    static getProxy(): ProxyServer;
    static setProxy(proxy: ProxyServer): void;
    static setHttpAgent(agent: any): void;
    static setHttpsAgent(agent: any, options?: any): void;
    readonly service: any;
    /**
     * @description レスポンスヘッダ(Node.js のみ)
     * @name HttpRequest#responseHeaders
     * @type {Object}
     */
    responseHeaders: object;
    /**
     * @memberOf HttpRequest
     * @description デフォルト通信タイムアウト値を設定する
     * @param {number} timeout タイムアウト値(ミリ秒)
     */
    static setDefaultTimeout(timeout: number): void;
    /**
     * @memberOf HttpRequest
     * @description デフォルト通信タイムアウト値を取得する
     * @return {number} タイムアウト値(ミリ秒)
     */
    static getDefaultTimeout(): number;
    /**
     * @description raw response message を返す場合に true をセットする (Node.js専用)。
     * <p>true を指定すると、execute 成功時の応答は http.IncomingMessage となる。
     * <p>HTTP/2を使用する場合、http2.ClientHttp2Streamとなる。
     * @name HttpRequest#rawMessage
     * @type {boolean}
     */
    rawMessage: boolean;
    /**
     * @memberOf HttpRequest
     * @description HTTP/2 を使用する場合にtrueをセットする。(Node.js専用)。
     * @name HttpRequest#useHttp2
     * @type {boolean}
     */
    useHttp2: boolean;
    /**
     * @class HttpRequest
     * @classdesc HTTPリクエストクラス
     * @description コンストラクタ。
     * <p>
     * ユーザがログイン中の場合、自動的に SessionToken が設定される。
     * @param {NebulaService} service NebulaService
     * @param {string} path パス
     * @param {Object} option オプション。noprefix プロパティに true を設定すると、パスプレフィクス("/1/{tenantId}")を付与しない。
     */
    constructor(service: NebulaService, path: string, option?: JsonObject);
    /**
     * @memberOf HttpRequest
     * @description レスポンスヘッダ受信設定を行う。
     * <p>
     * true に設定すると、execute 成功時の応答は
     * {body: ..., headers: {...}, status: statusCode}
     * 形式となる。
     * <p>
     * ブラウザ(XHR)の場合は、headers は文字列(全ヘッダ連結したもの)、
     * Node.js の場合は headers はヘッダ名をキーとした Object となる。
     * @param {boolean} receive true の場合はレスポンスヘッダを受信する
     * @return {HttpRequest} this
     */
    setReceiveResponseHeaders(receive: boolean): HttpRequest;
    /**
     * @memberOf HttpRequest
     * @description HTTP リクエストを実行する。
     * X-Application-Id, X-Application-Key, X-Session-Token ヘッダは自動的に付与される。
     * @return {Promise} Promise
     */
    execute(): Promise<any>;
    /**
     * @memberOf HttpRequest
     * @dscription セッションをcloseする (Node.js 使用時、HTTP/2使用時のみ有効)
     * @param {string} authority 対象のauthority 未指定の場合は全てのセッションをcloseする
     */
    static closeHttp2Session(authority?: string): void;
    /**
     * @memberOf HttpRequest
     * @description HTTP メソッドを設定する
     * @param {string} method メソッド
     * @return {HttpRequest} this
     */
    setMethod(method: string): HttpRequest;
    /**
     * @memberOf HttpRequest
     * @description Content-Type 設定する
     * @param {string} contentType Content-Type
     * @return {HttpRequest} this
     */
    setContentType(contentType: string): HttpRequest;
    /**
     * @memberOf HttpRequest
     * @description クエリパラメータを設定する。以前設定されていた値は消去される。
     * @param {Object} params パラメータ(Object形式)
     * @return {HttpRequest} this
     */
    setQueryParams(params: QueryParams): HttpRequest;
    /**
     * @memberOf HttpRequest
     * @description クエリパラメータを追加する。以前設定されていた値に追加される。
     * @param {Object} params パラメータ(Object形式)
     * @return {HttpRequest} this
     */
    addQueryParams(params: QueryParams): HttpRequest;
    /**
     * @memberOf HttpRequest
     * @description クエリパラメータ(1件)を設定する
     * @param {string} key パラメータ名
     * @param {Object} value 値
     * @return {HttpRequest} this
     */
    setQueryParam(key: string, value: any): HttpRequest;
    /**
     * @memberOf HttpRequest
     * @description 送信データを設定する。
     * <p>
     * 文字列を指定した場合は文字列がそのまま設定される。
     * Objectを指定した場合は JSON 文字列に変換される。
     * Blob および Buffer を指定した場合は、バイナリデータが設定される。
     * @param {Object} data データ
     * @return {HttpRequest} this
     */
    setData(data: any): HttpRequest;
    /**
     * @memberOf HttpRequest
     * @description SessionToken を設定する。
     * <p>
     * 通常は本クラスのインスタンス生成時点で自動的に SessionToken は設定されている(ユーザログイン済みの場合)
     * @param {string} sessionToken セッショントークン文字列
     * @return {HttpRequest} this
     */
    setSessionToken(sessionToken: string): HttpRequest;
    /**
     * @memberOf HttpRequest
     * @description ResponseType を設定する。
     * 指定できるタイプは以下のいずれかで、返却されるレスポンスの型が変化する。
     * デフォルトは "text"。
     * <ul>
     *     <li>text : 文字列</li>
     *     <li>json : JSON。レスポンスは JSON.parse されたもの。</li>
     *     <li>blob : blob (ブラウザのみ)</li>
     *     <li>buffer : Buffer (Node.jsのみ)</li>
     * </ul>
     * @param {string} responseType レスポンスタイプ
     * @return {HttpRequest} this
     */
    setResponseType(responseType: string): HttpRequest;
    /**
     * @memberOf HttpRequest
     * @description リクエストヘッダを設定する。
     * <p>注: 1つのヘッダに対して設定できる値は1つのみである。
     * @param {string} header ヘッダ名
     * @param {string} value 値
     * @return {HttpRequest} this
     */
    addRequestHeader(header: string, value: string): HttpRequest;
}
export declare const initHttpXhr: () => void;
/**
 * XHR 実行クラス
 * @private
 */
export declare class HttpXhr extends HttpRequestExecutor {
    private _xhr;
    private _receiveResponseHeaders;
    constructor(req: HttpRequest);
    setReturnRawMessage(rawMessage: boolean): void;
    execute(method: string, url: string, headers: Headers, body: any, timeout: number, responseType: string, receiveResponseHeaders: boolean, useHttp2: boolean): void;
    static closeHttp2Session(authority: string): void;
    /**
     * XHRを生成する
     * @returns {XMLHttpRequest}
     * @private
     */
    _createXhr(): XMLHttpRequest;
    /**
     * XHR状態変更ハンドラ
     * @returns {any}
     * @private
     */
    _onReadyStateChange(): any;
    /**
     * XHRタイムアウトハンドラ
     * @private
     */
    _onXhrTimeout(e: any): void;
}
import { ClientHttp2Session } from "http2";
export declare const initHttpNode: () => void;
/**
 * Node.js 実行クラス
 * @private
 */
export declare class HttpNode extends HttpRequestExecutor {
    private static _http2Sessions;
    private _responseType;
    private _receiveResponseHeaders;
    private _rawMessage;
    constructor(req: HttpRequest);
    setReturnRawMessage(returnRawMessage: boolean): void;
    execute(method: string, urlString: string, headers: Headers, body: any, timeout: number, responseType: string, receiveResponseHeaders: boolean, useHttp2: boolean): void;
    /**
     * HTTP/2リクエストを送信する
     * @param {module:url.Url} url URL
     * @param {HttpRequestOptions} options ヘッダ等のオプション情報
     * @param body リクエストボディ
     * @private
     */
    private _sendHttp2Request;
    /**
     * HTTP/1.1リクエストを送信する
     * @param {module:url.Url} url URL
     * @param {HttpRequestOptions} options ヘッダ等のオプション情報
     * @param body リクエストボディ
     * @private
     */
    private _sendHttpRequest;
    /**
     * スキームが'https'であるか判定する
     * @param {module:url.Url} url 判定対象のURL
     * @returns {boolean} 'https'ならばtrue
     * @private
     */
    private static _isHttps;
    /**
     * HTTPレスポンス受信用のハンドラを設定する (Node.js用)
     * @param {number} status ステータスコード
     * @param res Stream(http.IncomingMessageなど)
     * @private
     */
    private _setResponseHandlers;
    /**
     * HTTP/2レスポンス受信用のハンドラを設定する (Node.js用)
     * @param stream (http2.ClientHttp2Stream)
     * @private
     */
    private _setHttp2ResponseHandlers;
    private _parseNodeResponse;
    /**
     * HTTP/2のsessionをcloseする(Node.js用)
     * @param session http2.ClientHttp2Sessionだが、互換性維持のためanyを使用
     * @param {function(): void} callback close完了後のコールバック
     * @private
     */
    private static _closeSession;
    /**
     * HTTP/2のstreamをcloseする(Node.js用)
     * node versionによりcloseに使用するAPIが異なるため
     * @param stream http2.ClientHttp2Streamだが、互換性維持のためanyを使用
     * @private
     */
    private static _closeStream;
    /**
     * HTTP/2セッションを全て返却する
     * @returns {{index: string, module:http2.ClientHttp2Session}}
     */
    static getHttp2Sessions(): {
        [index: string]: ClientHttp2Session;
    };
    /**
     * 指定したHTTP/2セッションを取得する
     * @param {string} authority
     * @returns {module:http2.ClientHttp2Session} session
     */
    static getHttp2Session(authority: string): ClientHttp2Session;
    /**
     * HTTP/2セッションをキャッシュする
     * @param {string} authority
     * @param {module:http2.ClientHttp2Session} session
     */
    static setHttp2Session(authority: string, session: ClientHttp2Session): void;
    /**
     * 指定したHTTP/2セッションをcloseする。
     * @param {string} authority 未指定の場合は、保持するセッションを全てクローズする
     */
    static closeHttp2Session(authority?: string): void;
}
/**
 * @class SDEブリッジリクエストクラス
 * @private
 */
export declare class _SdeRequest implements ApiRequest {
    static _callbacks: {
        [index: string]: Callbacks;
    };
    static _requestId: number;
    _className: string;
    _methodName: string;
    _data: any;
    constructor(className: string, methodName: string);
    setData(data: any): any;
    execute(): Promise<any>;
    static _createRequestId(): string;
    static sdeCallback(params: any): void;
}
export interface NetworkEventListener {
    onNetworkStateChanged(isOnline: boolean): void;
}
/**
 * @class SdeNetworkEventListener
 * @private
 */
export declare class _SdeNetworkEventListener {
    static _callback: NetworkEventListener;
    constructor();
    static setCallback(callback: NetworkEventListener): any;
    static onNetworkStateChanged(params: JsonObject): void;
}
/**
 * 同期イベントリスナ
 * @private
 */
export interface SyncEventListener {
    onSyncStart(targetBucket: string): void;
    onSyncCompleted(targetBucket: string, objectIds: string): void;
    onSyncConflicted(bucket: any, client: any, server: any): void;
    onResolveConflict(resolveObject: any, resolve: any): void;
    onSyncError(errorCode: number, errorObject: any): void;
}
export interface ResolveConflictParams {
    bucketName: string;
    bucketMode: number;
    objectId: string;
    resolveId: string;
    resolve: number;
}
/**
 * @class SdeSyncEventListener
 * @private
 */
export declare class _SdeSyncEventListener {
    static _listeners: {
        [index: string]: SyncEventListener;
    };
    static _bucketMode: {
        [index: string]: number;
    };
    constructor();
    static setListener(bucket: any, listener: SyncEventListener): any;
    static resolveConflict(data: ResolveConflictParams): any;
    static onSyncStart(params: any): void;
    static onSyncCompleted(params: any): void;
    static onSyncConflicted(params: any): void;
    static onResolveConflict(params: any): void;
    static onSyncError(params: any): void;
}
/** @private */
export interface AccountLinkJson {
    _id: string;
    iss: string;
    sub: string;
    op: string;
}
/**
 * @class AccountLink
 * @classdesc AccountLink クラス
 * @description AccountLink クラスインスタンスを生成する
 * @example
 * var link = new Nebula.AccountLink();
 * @since v6.5.0
 */
export declare class AccountLink {
    __id: string;
    _iss: string;
    _sub: string;
    _op: string;
    constructor();
    /**
     * リンクユーザID
     * @name AccountLink#_id
     * @type string
     */
    _id: string;
    /**
     * Issuer Identifier
     * @name AccountLink#iss
     * @type string
     */
    iss: string;
    /**
     * Subject Identifier
     * @name AccountLink#sub
     * @type string
     */
    sub: string;
    /**
     * OP種別
     * @name AccountLink#op
     * @type string
     */
    op: string;
    /**
     * @memberOf AccountLink
     * @description JSONからAccountLinkインスタンスにデータをセットする
     * @private
     */
    _setAccountLink(obj: AccountLinkJson): AccountLinkJson;
}
/**
 * @namespace AclPermission
 * @description AclPermissionの定義。
 * Deprecatedである。代わりに {@link Acl}のメンバを使用すること。・
 * @deprecated
 */
export declare const AclPermission: {
    /**
     * 読み込み権限(r)
     * @const
     */
    READ: string;
    /**
     * 書き込み権限(w)
     * @const
     */
    WRITE: string;
    /**
     * 作成権限(c)
     * @const
     */
    CREATE: string;
    /**
     * 更新権限(u)
     * @const
     */
    UPDATE: string;
    /**
     * 削除権限(d)
     * @const
     */
    DELETE: string;
    /**
     * 管理権限(admin)
     * @const
     */
    ADMIN: string;
    /**
     * オーナ(owner)
     * @const
     */
    OWNER: string;
};
/**
 * @namespace AclGroup
 * @description AclGroupの定義。
 * Deprecatedである。代わりに {@link Acl}のメンバを使用すること。・
 * @deprecated
 */
export declare const AclGroup: {
    /**
     * 認証ユーザ (g:authenticated)
     */
    AUTHENTICATED: string;
    /**
     * 全ユーザ (g:anonymous)
     */
    ANONYMOUS: string;
};
export interface AclJson {
    owner?: string;
    r?: string[];
    w?: string[];
    c?: string[];
    u?: string[];
    d?: string[];
    admin?: string[];
    [index: string]: string | string[];
}
/**
 * @class Acl
 * @classdesc ACLクラス
 * @example
 * var acl1 = new Nebula.Acl();
 * var acl2 = new Nebula.Acl({"r": [Nebula.Acl.AUTHENTICATED]});
 * @param {Object} json JSON表記のACL。省略時は全エントリが空の状態で生成される。
 */
export declare class Acl {
    /**
     * 読み込み権限(r)
     * @memberOf Acl
     * @const
     */
    static READ: string;
    /**
     * 書き込み権限(w)
     * @memberOf Acl
     * @const
     */
    static WRITE: string;
    /**
     * 作成権限(c)
     * @memberOf Acl
     * @const
     */
    static CREATE: string;
    /**
     * 更新権限(u)
     * @memberOf Acl
     * @const
     */
    static UPDATE: string;
    /**
     * 削除権限(d)
     * @memberOf Acl
     * @const
     */
    static DELETE: string;
    /**
     * 管理権限(admin)
     * @memberOf Acl
     * @const
     */
    static ADMIN: string;
    /**
     * オーナ(owner)
     * @memberOf Acl
     * @const
     */
    static OWNER: string;
    /**
     * ログイン認識した全ユーザ (g:authenticated)
     * @memberOf Acl
     * @const
     */
    static AUTHENTICATED: string;
    /**
     * ログインしていないユーザを含む全ユーザ (g:anonymous)
     * @memberOf Acl
     * @const
     */
    static ANONYMOUS: string;
    private _acl;
    [index: string]: any;
    /**
     * @private
     */
    constructor(json?: AclJson | Acl);
    /**
     * @method
     * @memberOf Acl
     * @description
     *      対象権限にユーザIDまたはグループ名を追加する
     * @example
     * var acl = new Nebula.Acl();
     * var user = new Nebula.User();
     * var group = new Group("MyGroup");
     * ....
     * acl.addEntry(Nebula.Acl.READ, user);
     * acl.addEntry(Nebula.Acl.WRITE, "USER_01");
     * acl.addEntry(Nebula.Acl.CREATE, group);
     * acl.addEntry(Nebula.Acl.UPDATE, "g:GROUP_A");
     * acl.addEntry(Nebula.Acl.DELETE, Nebula.Acl.AUTHENTICATED);
     * @param {String} permission エントリを追加する対象権限
     *      <br />以下のいずれかの値を指定する。
     *      <ul>
     *      <li>{@link Acl.READ}
     *      <li>{@link Acl.WRITE}
     *      <li>{@link Acl.CREATE}
     *      <li>{@link Acl.UPDATE}
     *      <li>{@link Acl.DELETE}
     *      <li>{@link Acl.ADMIN}
     *      </ul>
     * @param {Object} entry ユーザまたはグループ情報
     * 以下のいずれかを指定する。
     * <p>
     * ・ユーザを指定する場合
     * <ul>
     *   <li>{@link User} インスタンス
     *   <li>ユーザIDの文字列
     * </ul>
     *
     * ・グループを指定する場合
     * <ul>
     *   <li>{@link Group} インスタンス
     *   <li>グループ名に g: を付けた文字列。<br>(例) グループ名が GROUP_A の場合、 g:GROUP_A
     *   <li>{@link Acl.AUTHENTICATED} : ログイン認証された全ユーザ
     *   <li>{@link Acl.ANONYMOUS} : ログインしていないユーザを含む全ユーザ
     * </ul>
     * @return {Boolean} 正常追加した場合 true、 パラメータが不正の場合 false を返す
     */
    addEntry(permission: string, entry: string | User | Group): boolean;
    /**
     * @method
     * @memberOf Acl
     * @description
     *      対象権限からにユーザIDまたはグループ名を削除する
     * @example
     * var acl = new Nebula.Acl();
     * var user = new Nebula.User();
     * var group = new Group("MyGroup");
     * ....
     * acl.removeEntry(Nebula.Acl.READ, user);
     * acl.removeEntry(Nebula.Acl.WRITE, "USER_01");
     * acl.removeEntry(Nebula.Acl.CREATE, group);
     * acl.removeEntry(Nebula.Acl.UPDATE, "g:GROUP_A");
     * acl.removeEntry(Nebula.Acl.DELETE, Nebula.Acl.AUTHENTICATED);
     * @param {String} permission エントリを削除する対象権限
     *      <br />以下のいずれかの値を指定する。
     *      <ul>
     *      <li>{@link Acl.READ}
     *      <li>{@link Acl.WRITE}
     *      <li>{@link Acl.CREATE}
     *      <li>{@link Acl.UPDATE}
     *      <li>{@link Acl.DELETE}
     *      <li>{@link Acl.ADMIN}
     *      </ul>
     * @param {Object} entry ユーザまたはグループ情報。
     * 以下のいずれかを指定する。
     * <p>
     * ・ユーザを指定する場合
     * <ul>
     *   <li>{@link User} インスタンス
     *   <li>ユーザIDの文字列
     * </ul>
     *
     * ・グループを指定する場合
     * <ul>
     *   <li>{@link Group} インスタンス
     *   <li>グループ名に g: を付けた文字列。<br>(例) グループ名が GROUP_A の場合、 g:GROUP_A
     *   <li>{@link Acl.AUTHENTICATED} : ログイン認証された全ユーザ
     *   <li>{@link Acl.ANONYMOUS} : ログインしていないユーザを含む全ユーザ
     * </ul>
     */
    removeEntry(permission: string, entry: string | User | Group): boolean;
    /**
     * @method
     * @memberOf Acl
     * @description 所有者のユーザIDを設定する
     * @private
     */
    _setOwner(owner: string): void;
    /**
     * @method
     * @memberOf Acl
     * @description
     *      所有者のユーザIDを取得する
     * @example
     * var acl = ....;
     * ....
     * var userId = acl.getOwner();
     * @return
     *      {String} ユーザIDの文字列を返す。所有者がない場合は、null を返す。
     */
    getOwner(): string;
    /**
     * @method
     * @memberOf Acl
     * @description
     *      対象権限のユーザIDおよびグループ名のエントリ一覧を取得する
     * @example
     * var acl = ....;
     *
     * var entries = acl.getEntries(permission);
     * for (var i = 0; i < entries.length; i++) {
     *     entry = entries[i];
     *     ....;
     * }
     * @param {String} permission 取得するエントリ一覧の対象権限
     *      <br />以下のいずれかの値を指定する。
     *      <ul>
     *      <li>{@link Acl.READ}
     *      <li>{@link Acl.WRITE}
     *      <li>{@link Acl.CREATE}
     *      <li>{@link Acl.UPDATE}
     *      <li>{@link Acl.DELETE}
     *      <li>{@link Acl.ADMIN}
     *      </ul>
     * @return {Object} ユーザIDまたはグループ名の文字列の配列を返す。
     *      エントリがない場合は、空配列を返す。
     *      <br />グループ名には、g: が先頭に付加されている。
     */
    getEntries(permission: string): string[];
    /**
     * @method
     * @memberOf Acl
     * @description ACLのJSONオブジェクトを直接設定する
     * @private
     */
    _set(acl: AclJson): void;
    /**
     * @method
     * @memberOf Acl
     * @description 指定のエントリが含まれているかどうか
     * @private
     */
    _hasEntry(permission: string, target: string): boolean;
    /**
     * @method
     * @memberOf Acl
     * @description ACLのJSONオブジェクトを文字列に変換する
     * @private
     */
    _toString(keyName?: string): string;
    /**
     * @method
     * @memberOf Acl
     * @description ACLのJSONオブジェクトを返す
     * @param keyName "ACL", "contentACL" のいずれかを指定すると、そのキーに ACL が格納される
     * @private
     */
    _toJsonObject(keyName?: string): JsonObject;
}
export declare const RegexOption: {
    CASE_INSENSITIVITY: string;
};
export interface ClauseJson extends JsonObject {
    [index: string]: AnyJson;
}
/**
 * @class Clause
 * @classdesc オブジェクト検索条件 クラス
 * @description Clause インスタンスを生成する
 * @example
 * var clause = new Nebula.Clause();
 */
export declare class Clause {
    _clause: ClauseJson;
    /** @private */
    constructor(clause?: ClauseJson);
    /**
     * @memberOf Clause
     * @description 条件のパラメータをセットする
     * @private
     */
    _setParams(key: string, operator: string, value: AnyJson, options?: AnyJson): Clause;
    /**
     * @memberOf Clause
     * @description JSONで表現された条件式を取得する
     * @return {Object} JSON条件式
     */
    json(): ClauseJson;
    /**
     * @method
     * @name Clause.equals
     * @description
     *      (key == value) の条件を示す Nebula.Clause インスタンスを生成する
     * @example
     * var clause = Nebula.Clause.equals("score", 80);
     * @param {String} key 比較するキー名
     * @param {Object} value 比較する値
     * @return {Clause} Nebula.Clause インスタンスを返す。
     */
    static equals(key: string, value: AnyJson): Clause;
    /**
     * @method
     * @name Clause#equals
     * @description
     *      (key == value) の条件を追加する
     * @example
     * var clause = new Nebula.Clause().equals("score", 80);
     * @param {String} key 比較するキー名
     * @param {Object} value 比較する値
     * @return {Clause} this
     */
    equals(key: string, value: AnyJson): Clause;
    /**
     * @memberOf Clause
     * @description
     *      (key != value) の条件を示す Nebula.Clause インスタンスを生成する
     * @example
     * var clause = Nebula.Clause.notEquals("name", "apple");
     * @param {String} key 比較するキー名
     * @param {Object} value 比較する値
     * @return {Clause} Nebula.Clause インスタンスを返す。
     */
    static notEquals(key: string, value: AnyJson): Clause;
    /**
     * @memberOf Clause
     * @description
     *      (key != value) の条件を追加する
     * @example
     * var clause = new Nebula.Clause().notEquals("name", "apple");
     * @param {String} key 比較するキー名
     * @param {Object} value 比較する値
     * @return {Clause} this
     */
    notEquals(key: string, value: AnyJson): Clause;
    /**
     * @memberOf Clause
     * @description
     *      (key < value) の条件を示す Nebula.Clause インスタンスを生成する
     * @example
     * var clause = Nebula.Clause.lessThan("score", 30);
     * @param {String} key 比較するキー名
     * @param {Object} value 比較する値
     * @return {Clause} Nebula.Clause インスタンスを返す。
     */
    static lessThan(key: string, value: number): Clause;
    /**
     * @memberOf Clause
     * @description
     *      (key < value) の条件を追加する
     * @example
     * var clause = new Nebula.Clause().lessThan("score", 30);
     * @param {String} key 比較するキー名
     * @param {Object} value 比較する値
     * @return {Clause} this
     */
    lessThan(key: string, value: number): Clause;
    /**
     * @memberOf Clause
     * @description
     *      (key <= value) の条件を示す Nebula.Clause インスタンスを生成する
     * @example
     * var clause = Nebula.Clause.lessThanOrEqual("score", 30);
     * @param {String} key 比較するキー名
     * @param {Object} value 比較する値
     * @return {Clause} Nebula.Clause インスタンスを返す。
     */
    static lessThanOrEqual(key: string, value: number): Clause;
    /**
     * @memberOf Clause
     * @description
     *      (key <= value) の条件を追加する
     * @example
     * var clause = new Nebula.Clause().lessThanOrEqual("score", 30);
     * @param {String} key 比較するキー名
     * @param {Object} value 比較する値
     * @return {Clause} this
     */
    lessThanOrEqual(key: string, value: number): Clause;
    /**
     * @memberOf Clause
     * @description
     *      (key > value) の条件を示す Nebula.Clause インスタンスを生成する
     * @example
     * var clause = Nebula.Clause.greaterThan("number", 1000);
     * @param {String} key 比較するキー名
     * @param {Object} value 比較する値
     * @return {Clause} Nebula.Clause インスタンスを返す。
     */
    static greaterThan(key: string, value: number): Clause;
    /**
     * @memberOf Clause
     * @description
     *      (key > value) の条件を追加する
     * @example
     * var clause = new Nebula.Clause().greaterThan("number", 1000);
     * @param {String} key 比較するキー名
     * @param {Object} value 比較する値
     * @return {Clause} this
     */
    greaterThan(key: string, value: number): Clause;
    /**
     * @memberOf Clause
     * @description
     *      (key >= value) の条件を示す Nebula.Clause インスタンスを生成する
     * @example
     * var clause = Nebula.Clause.greaterThanOrEqual("number", 1000);
     * @param {String} key 比較するキー名
     * @param {Object} value 比較する値
     * @return {Clause} Nebula.Clause インスタンスを返す。
     */
    static greaterThanOrEqual(key: string, value: number): Clause;
    /**
     * @memberOf Clause
     * @description
     *      (key >= value) の条件を追加すうｒ
     * @example
     * var clause = Nebula.Clause.greaterThanOrEqual("number", 1000);
     * @param {String} key 比較するキー名
     * @param {Object} value 比較する値
     * @return {Clause} this
     */
    greaterThanOrEqual(key: string, value: number): Clause;
    /**
     * @memberOf Clause
     * @description
     *      key の値が values で指定された中に存在するかの条件を示す Nebula.Clause インスタンスを生成する
     * @name Clause.in
     * @function
     * @example
     * var targets = [1000, 1003, 1005];
     * var clause = Nebula.Clause.in("number", targets);
     * @param {String} key 比較するキー名
     * @param {Object} values 比較する値の配列
     * @return {Clause} Nebula.Clause インスタンスを返す。
     */
    static in(key: string, values: AnyJson[]): Clause;
    /**
     * @memberOf Clause
     * @description
     *      key の値が values で指定された中に存在するかの条件を追加する
     * @name Clause#in
     * @function
     * @example
     * var targets = [1000, 1003, 1005];
     * var clause = new Nebula.Clause().in("number", targets);
     * @param {String} key 比較するキー名
     * @param {Object} values 比較する値の配列
     * @return {Clause} this
     */
    in(key: string, values: AnyJson[]): Clause;
    /**
     * @memberOf Clause
     * @description
     *      key の値が values で指定されたすべてを含んでいるかの条件を示す Nebula.Clause インスタンスを生成する
     * @example
     * var targets = ["ssl", "security"];
     * var clause = Nebula.Clause.all("tags", targets);
     * @param {String} key 比較するキー名
     * @param {Object} values 比較する値の配列
     * @return {Clause} Nebula.Clause インスタンスを返す。
     */
    static all(key: string, values: AnyJson[]): Clause;
    /**
     * @memberOf Clause
     * @description
     *      key の値が values で指定されたすべてを含んでいるかの条件を追加する
     * @example
     * var targets = ["ssl", "security"];
     * var clause = new Nebula.Clause().all("tags", targets);
     * @param {String} key 比較するキー名
     * @param {Object} values 比較する値の配列
     * @return {Clause} this
     */
    all(key: string, values: AnyJson[]): Clause;
    /**
     * @memberOf Clause
     * @description
     *      key で示したフィールドが存在するかどうかを示す Nebula.Clause インスタンスを生成する
     * @example
     * var clause = Nebula.Clause.exist("tags", targets);
     * @param {String} key 比較するキー名
     * @param {Boolean} value 存在を確認する場合は true、 存在しないことを確認する場合は false を指定する。
     * @return {Clause} Nebula.Clause インスタンスを返す。
     */
    static exist(key: string, value: boolean): Clause;
    /**
     * @memberOf Clause
     * @description
     *      key で示したフィールドが存在するかどうかの条件を追加する
     * @example
     * var clause = new Nebula.Clause().exist("tags", targets);
     * @param {String} key 比較するキー名
     * @param {Boolean} value 存在を確認する場合は true、 存在しないことを確認する場合は false を指定する。
     * @return {Clause} this
     */
    exist(key: string, value: boolean): Clause;
    /**
     * @memberOf Clause
     * @description
     *      正規表現による検索条件を示す Nebula.Clause インスタンスを生成する
     * @example
     * var clause = Nebula.Clause.regex("name", "abc*");
     * @param {String} key 比較するキー名
     * @param {String} expression Perl互換の正規表現の条件文字列
     * @param {Object} option オプション
     * <p>option には必要に応じて以下の値を指定してもよい。(省略可能)
     * <ul>
     *     <li>Nebula.RegexOption.CASE_INSENSITIVITY   大文字小文字を区別しない</li>
     * </ul>
     * @return {Clause} Nebula.Clause インスタンスを返す。
     */
    static regex(key: string, expression: string, option?: string): Clause;
    /**
     * @memberOf Clause
     * @description
     *      正規表現による検索条件を追加する
     * @example
     * var clause = new Nebula.Clause().regex("name", "abc*");
     * @param {String} key 比較するキー名
     * @param {String} expression Perl互換の正規表現の条件文字列
     * @param {Object} option オプション
     * <p>
     * <ul>option には必要に応じて以下の値を指定してもよい。(省略可能)
     *     <li>Nebula.RegexOption.CASE_INSENSITIVITY   大文字小文字を区別しない</li>
     * </ul>
     * @return {Clause} this
     */
    regex(key: string, expression: string, option?: string): Clause;
    /**
     * @memberOf Clause
     * @description
     *      Nebula.Clause インスタンスの key の条件を反転させる
     * @example
     * var clause = Nebula.Clause.exist("tags", targets);
     * clause.not("tags");
     * @param {String} key 比較するキー名
     * @return {Clause} Nebula.Clause インスタンス(this)を返す。
     */
    not(key: string): Clause;
    /**
     * @memberOf Clause
     * @description
     *      複数の条件を AND条件で結合する
     * @example
     * var clause1 = Nebula.Clause.equals("name", "AAA");
     * var clause2 = Nebula.Clause.lessThan("score", 50);
     * var clause3 = Nebula.Clause.greaterThan("score", 30);
     * var clause = Nebula.Clause.and(clause1, clause2, clause3);
     * @param {Clause} clauses AND条件をとるNebula.Clauseインスタンス
     * <p>複数のインスタンスを指定できる
     * @return {Clause} Nebula.Clause インスタンスを返す。
     */
    static and(...clauses: Clause[]): Clause;
    /**
     * @memberOf Clause
     * @description
     *      複数の条件を OR条件で結合する
     * @example
     * var clause1 = Nebula.Clause.equals("name", "AAA");
     * var clause2 = Nebula.Clause.lessThan("score", 50);
     * var clause3 = Nebula.Clause.greaterThan("score", 30);
     * var clause = Nebula.Clause.or(clause1, clause2, clause3);
     * @param {Clause} clauses OR条件をとるNebula.Clauseインスタンス
     * <p>複数のインスタンスを指定できる
     * @return {Clause} Nebula.Clause インスタンスを返す。
     */
    static or(...clauses: Clause[]): Clause;
    /**
     * @memberOf Clause
     * @description Nebula.Clause インスタンスの配列からJSON値の配列を生成する
     * @private
     */
    static _convertClauseArray(clauseArray: Clause[]): AnyJson[];
}
export declare class ObjectQuery {
    _clause: Clause;
    _limit: number;
    _skip: number;
    _sort: string[];
    _deleteMark: boolean;
    _countQuery: boolean;
    _projection: JsonObject;
    /**
     * @class ObjectQuery
     * @classdesc オブジェクトクエリ
     * @description オブジェクトクエリを生成する
     * @example
     * var query = new Nebula.ObjectQuery();
     */
    constructor();
    /**
     * @function
     * @memberOf ObjectQuery
     * @description 設定されているClauseインスタンスを取得する
     * @return {Clause} clause
     */
    getClause(): Clause;
    /**
     * @function
     * @memberOf ObjectQuery
     * @description 設定されている検索上限数を取得する
     * @return {number} 検索上限数
     */
    getLimit(): number;
    /**
     * @function
     * @memberOf ObjectQuery
     * @description 設定されているスキップカウントを取得する
     * @return {number} スキップカウント
     */
    getSkipCount(): number;
    /**
     * @function
     * @memberOf ObjectQuery
     * @description 設定されているソート順序を取得する。
     * ソート順序は以下のようなキー文字列の配列。降順の場合はキーの先頭が "-" となる。
     * <pre>
     *     ["key1", "-key2"]
     * </pre>
     * @return {string[]}
     * @since 6.5.0
     */
    getSort(): string[];
    /**
     * @function
     * @memberOf ObjectQuery
     * @description 設定されているソート順序を取得する。
     * <p>
     * Deprecated である。{@link ObjectQuery#getSort} を使用すること。
     * <p>
     * ソート順序は以下のように {キー名: 昇順フラグ} の配列。
     * <pre>
     *     [{"key1": true}, {"key2": false}]
     * </pre>
     * @return {array} ソート順序
     * @deprecated since 6.5.0
     */
    getSortOrder(): Array<{
        [index: string]: boolean;
    }>;
    /**
     * @function
     * @memberOf ObjectQuery
     * @description deleteフラグを取得する
     * @private
     */
    _getDeleteMark(): boolean;
    /**
     * @function
     * @memberOf ObjectQuery
     * @description 設定されているプロジェクションを取得する
     * @return {Object} プロジェクション
     */
    getProjection(): JsonObject;
    /**
     * @function
     * @memberOf ObjectQuery
     * @description deleteフラグをセットする
     * @private
     */
    _setDeleteMark(mark: boolean): void;
    /**
     * @function
     * @memberOf ObjectQuery
     * @description 内部データをクエリパラメータ Object に変換する
     * @private
     */
    _toParam(): any;
    /**
     * @function
     * @memberOf ObjectQuery
     * @description 内部データを JSON Object に変換する
     * @private
     */
    _toParamJson(): any;
    /**
     * @function
     * @memberOf ObjectQuery
     * @description QUERY情報(JSON)をNebula.ObjectQueryインスタンスに変換する
     * @private
     */
    static _toObjectQuery(queryJson: any): ObjectQuery;
    /**
     * @function
     * @memberOf ObjectQuery
     * @description NebulaObjectQueryインスタンスを比較する
     * @private
     */
    _equals(that: ObjectQuery): boolean;
    /**
     * @memberOf ObjectQuery
     * @description
     *      検索条件を設定する
     * @example
     * var clause = Nebula.Clause.lessThan("score", 50);
     * var query = new Nebula.ObjectQuery();
     * query.setClause(clause);
     * @param {Clause} clause Nebula.Clauseインスタンス
     * <p>null を指定した場合は、すでに設定済みの検索条件をクリアする。
     * <p>検索条件がすでに設定されていた場合、検索条件は上書きされる。
     * デフォルトでは、null が設定されている。
     * @return {ObjectQuery} this
     */
    setClause(clause: Clause): ObjectQuery;
    /**
     * @memberOf ObjectQuery
     * @description
     *      検索上限数を設定する
     * @example
     * var clause = Nebula.Clause.lessThan("score", 50);
     * var query = new Nebula.ObjectQuery()
     *     .setClause(clause)
     *     .setLimit(10);
     * @param {number} limit 検索上限数。
     * <ul>
     *   <li>-1 以上の値を指定できる。
     *   <li>-1を設定した場合は「制限なし」となる。
     *   ただし、サーバ側のコンフィグレーションによっては、上限値が制限されている場合がある。この場合、クエリを実行するとサーバからエラーが返る。
     *   <li>デフォルトでは、-1 が設定されている。
     *   <li>範囲外の値が設定された場合は、例外をスローする。
     * </ul>
     * @return {ObjectQuery} this
     */
    setLimit(limit: number): ObjectQuery;
    /**
     * @function
     * @memberOf ObjectQuery
     * @description スキップカウントを設定する。
     * <p>
     * スキップカウントは検索結果の先頭からのスキップ数を表す。
     * @example
     * // この例では検索結果の5件目から10件を取得する。
     * var clause = Nebula.Clause.lessThan("score", 50);
     * var query = new Nebula.ObjectQuery()
     *     .setClause(clause)
     *     .setLimit(10)
     *     .setSkipCount(5);
     * @param {number} skip スキップカウント
     * <p>
     * skip は、0以上の値が設定可能である。
     * 範囲外の値が設定された場合は、例外をスローする。
     * デフォルトでは、0 が設定されている。
     * @return {ObjectQuery} this
     */
    setSkipCount(skip: number): ObjectQuery;
    /**
     * @function
     * @memberOf ObjectQuery
     * @description ソート順序を設定する。
     * @example
     * var query = new Nebula.ObjectQuery()
     *     .setSort(["key1", "-key2"]);
     * @param {string[]} sort ソートキーの配列。
     * 先に指定したものが高優先となる。
     * <p>それぞれデフォルトは昇順。降順の場合は先頭に "-" を付与する。
     * @return {ObjectQuery} this
     * @since 6.5.0
     */
    setSort(sort: string[]): ObjectQuery;
    /**
     * @function
     * @memberOf ObjectQuery
     * @description ソート順序を設定する。
     * <p>
     * 本メソッドはDeprecated である。{@link ObjectQuery#setSort} を使用すること。
     * <p>
     * 複数のキーを設定する場合は、本メソッドを複数呼び出す。
     * 先に設定したキーのほうが優先順位が高い。
     * <p>
     * ソート順序をクリアするには {@link ObjectQuery#clearSortOrder} を使用する。
     * @example
     * // 以下の例では、score降順 -> name昇順で検索する
     * var query = new Nebula.ObjectQuery()
     *     .setSortOrder("score", false)
     *     .setSortOrder("name", true);
     * @param {string} key ソート対象のキー
     * @param {boolean} isAsc 昇順でソートするかどうかを示す。昇順はtrue, 降順はfalse。
     * @return {ObjectQuery} this
     * @deprecated since 6.5.0
     */
    setSortOrder(key: string, isAsc: boolean): ObjectQuery;
    /**
     * @function
     * @memberOf ObjectQuery
     * @description 設定したソート順序をクリアする。<p>
     * Deprecated である。{@link ObjectQuery#setSort} を使用すること。
     * @example
     * var clause = Nebula.Clause.lessThan("score", 50);
     * var query = new Nebula.ObjectQuery()
     *     .setClause(clause)
     *     .setLimit(10)
     *     .setSkipCount(5)
     *     .setSortOrder("name", true);
     * ....
     * query.clearSortOrder("name");
     * @param {string} key クリアするソート対象のキー。省略時は全キーをクリアする。
     * @return {ObjectQuery} this
     * @deprecated since 6.5.0
     */
    clearSortOrder(key?: string): ObjectQuery;
    /**
     * @function
     * @memberOf ObjectQuery
     * @description
     *      クエリ件数取得フラグを設定する.
     *      <br>
     *      クエリ件数取得フラグは、Nebula.ObjectBucket.query() を実行したときに
     *      クエリに合致した件数を取得するかどうかを表し、trueの場合は取得することを示す。
     *      <br>
     *      クエリ件数取得フラグのデフォルト値は、falseである。
     * @example
     * var bucket = ....;
     * var clause = Nebula.Clause.lessThan("score", 50);
     * var conditions = new Nebula.ObjectQuery();
     * conditions.setClause(clause);
     * conditions.setLimit(10);
     * conditions._setCountQuery(true);
     * ....
     * conditions.query(conditions)
     *     .then(function(result) {
     *         // result.count に全件数、result.objects にオブジェクト配列が返る
     *     })
     *     .catch(function(err) {...})
     * @param {Boolean} countQuery クエリ件数取得フラグ
     *      <br/>true または false を指定する。
     * @private
     */
    _setCountQuery(countQuery: boolean): ObjectQuery;
    /**
     * @function
     * @memberOf ObjectQuery
     * @description
     *      クエリ件数取得フラグを取得する.
     *      <br>
     *      クエリ件数取得フラグのデフォルト値は、falseである。
     * @return
     *      {Boolean} クエリ件数取得フラグ(trueまたはfalse)を返す
     * @private
     */
    _isCountQuery(): boolean;
    /**
     * @function
     * @memberOf ObjectQuery
     * @description
     *      プロジェクションを指定する。
     * @example
     * var clause = Nebula.Clause.lessThan("score", 50);
     * var projection = {"score":1};
     * var query = new Nebula.ObjectQuery();
     * query.setClause(clause);
     * query.setProjection(projection);
     * @param {Object} projectionJson
     *      <p>null を指定した場合は、すでに設定済みの値をクリアする。
     *      <p>設定済み状態で、本メソッドを呼び出した場合は上書きされる。
     *      デフォルトでは、null が設定されている。
     * @return {ObjectQuery} this
     */
    setProjection(projectionJson: JsonObject): ObjectQuery;
}
export interface LoginInfo {
    username?: string;
    email?: string;
    token?: string;
    password?: string;
}
export interface UserJson {
    _id?: string;
    username?: string;
    email?: string;
    password?: string;
    options?: JsonObject;
    groups?: string[];
    createdAt?: string;
    updatedAt?: string;
    lastLoginAt?: string;
    etag?: string;
    sessionToken?: string;
    expire?: number;
    clientCertUser?: boolean;
    federated?: boolean;
    token?: string;
    primaryLinkedUserId?: string;
    [index: string]: any;
}
export interface UserQuery {
    _id?: string;
    username?: string;
    email?: string;
    skip?: number;
    limit?: number;
    countQuery?: boolean;
}
/**
 * User 基底クラス
 * @private
 */
export declare class User implements UserJson {
    _service: NebulaService;
    private __id;
    private _username;
    private _email;
    private _password;
    private _options;
    private _groups;
    private _createdAt;
    private _updatedAt;
    private _lastLoginAt;
    private _etag;
    private _sessionToken;
    private _expire;
    private _clientCertUser;
    private _federated;
    private _primaryLinkedUserId;
    [index: string]: any;
    /**
     * @class User
     * @classdesc ユーザ管理 クラス
     * @description ユーザオブジェクトを生成する。
     * <p>
     * 生成しただけの状態では、まだサーバには登録されていない。ユーザ登録は {@link User#register} で実施する。
     * @example
     * var user = new Nebula.User();
     * @return {Object} 新規ユーザオブジェクトのインスタンス
     */
    constructor(service?: NebulaService);
    /**
     * ユーザID
     * @type String
     * @name User#_id
     */
    _id: string;
    /**
     * ユーザ名
     * @type String
     * @name User#username
     */
    username: string;
    /**
     * E-mail アドレス
     * @type String
     * @name User#email
     */
    email: string;
    /**
     * パスワード
     * @type String
     * @name User#password
     */
    password: string;
    /**
     * オプション (JSON)
     * @type Object
     * @name User#options
     */
    options: JsonObject;
    /**
     * 所属グループ一覧 (read only)
     * @type String[]
     * @name User#groups
     */
    groups: string[];
    /**
     * 作成日時
     * @type String
     * @name User#createdAt
     */
    createdAt: string;
    /**
     * 更新日時
     * @type String
     * @name User#updatedAt
     */
    updatedAt: string;
    /**
     * 最終ログイン日時
     * @type String
     * @name User#lastLoginAt
     */
    lastLoginAt: string;
    /**
     * ETag
     * @type String
     * @name User#etag
     */
    etag: string;
    /**
     * セッショントークン
     * @type String
     * @name User#sessionToken
     */
    sessionToken: string;
    /**
     * セッショントークン有効期限(unix time [秒])
     * @type String
     * @name User#expire
     */
    expire: number;
    /**
     * クライアント証明書認証ユーザの場合は true<br>
     * (ブラウザ、またはNode.jsのみ対応)
     * @type boolean
     * @name User#clientCertUser
     */
    clientCertUser: boolean;
    /**
     * 外部認証連携有りの場合は true<br>
     * (ブラウザ、またはNode.jsのみ対応)
     * @type boolean
     * @name User#federated
     * @default false
     */
    federated: boolean;
    /**
     * プライマリリンクユーザID<br>
     * OpenID Connect認証でユーザ自動生成時のリンクユーザID<br>
     * (ブラウザ、またはNode.jsのみ対応)
     * @type String
     * @name User#primaryLinkedUserId
     * @default null
     */
    primaryLinkedUserId: string;
    protected _setUserInfo(response: string): void;
    /**
     * @method
     * @memberOf User
     * @description ユーザプロパティ設定 (Deprecated)
     * <p>
     * ・ユーザオブジェクトのプロパティを設定する。<br>
     * ・設定可能なプロパティの詳細は、各メソッドの説明を参照のこと。<br>
     * ・本メソッドは deprecated である。各フィールドの setter を直接使用すること。<br>
     * @param {String} property プロパティ名。
     * 指定可能なプロパティ名は以下のとおり。
     * <ul>
     *     <li>_id :         ユーザID
     *     <li>username:     ユーザ名
     *     <li>email:        E-mailアドレス
     *     <li>password:     パスワード
     *     <li>options:      オプション情報 (JSON)
     *     <li>createdAt:    ユーザ登録日時
     *     <li>updatedAt:    ユーザ更新日時
     *     <li>sessionToken: セッショントークン
     *     <li>expire:       セッショントークン有効期限(unix time [秒])
     *     <li>clientCertUser: クライアント証明書ユーザ (ブラウザ、またはNode.jsのみ対応)
     *     <li>federated:    外部認証連携有無
     *     <li>primaryLinkedUserId: プライマリリンクユーザID
     * </ul>
     * @param {String} value プロパティ値
     * @return {User} this
     * @deprecated
     */
    set(property: string, value: any): void;
    /**
     * @method
     * @memberOf User
     * @description ユーザプロパティ取得 (Deprecated)
     * <p>
     * ・ユーザオブジェクトのプロパティを取得する。<br>
     * ・取得可能なプロパティの詳細は、各メソッドの説明を参照のこと。<br>
     * ・本メソッドは deprecated である。各フィールドの getter を直接使用すること。
     * @param {String} property プロパティ名。
     * 指定可能なプロパティ名は以下のとおり(APIによって取得可能なプロパティは異なる)。
     * <ul>
     *     <li>_id :         ユーザID
     *     <li>username:     ユーザ名
     *     <li>email:        E-mailアドレス
     *     <li>password:     パスワード
     *     <li>options:      オプション情報 (JSON)
     *     <li>groups:       所属グループ一覧 (配列)
     *     <li>createdAt:    ユーザ登録日時
     *     <li>updatedAt:    ユーザ更新日時
     *     <li>sessionToken: セッショントークン
     *     <li>expire:       セッショントークン有効期限(unix time [秒])
     *     <li>clientCertUser: クライアント証明書ユーザ (ブラウザ、またはNode.jsのみ対応)
     *     <li>federated:    外部認証連携有無
     *     <li>primaryLinkedUserId: プライマリリンクユーザID
     * </ul>
     * @return {String} value プロパティ値
     * @deprecated
     */
    get(property: string): any;
    /**
     * @method
     * @memberOf User
     * @description ユーザを登録する。
     * <p>
     * ユーザ登録に必要なユーザプロパティは、以下の通り。
     * <ul>
     *     <li>email     : E-mailアドレス（必須）
     *     <li>password  : パスワード（必須）
     *     <li>username  : ユーザ名（オプション）
     *     <li>options   : オプション(オプション)。JSON形式で記述された任意のオブジェクトを指定できる。
     * </ul>
     *  クライアント証明書認証用のユーザの登録を行う場合のユーザプロパティは以下の通りとする
     *  clientCertUserをtrueに設定した場合、email/passwordは無視する。
     *  (ブラウザ、またはNode.jsのみ対応)
     * <ul>
     *     <li>username          : ユーザ名（必須）
     *     <li>clientCertUser    : クライアント証明書ユーザ trueを設定すること(必須)
     *     <li>options           : オプション(オプション) optionsには、JSON形式で記述された任意のオブジェクトを指定できる。
     *  </ul>
     * @param {Callbacks} callbacks コールバック (Option)
     * @return {Promise} callbacksを指定しなかった場合、Promiseオブジェクトを返す。callback指定時は返り値なし(undefined)。
     * <p>処理完了時に渡される値は以下の通り。
     * <ul>
     * <li>成功時: ユーザオブジェクトのインスタンス。なお、処理が成功した状態ではまだログインは実施していない。
     *     以下のユーザオブジェクトのプロパティが追加格納される
     *     <ul>
     *     <li>_id         : 登録したユーザのID
     *     <li>createdAt   : 登録日付
     *     <li>updatedAt   : 最終更新日付
     *     </ul>
     * <li>失敗時: エラー要因(JSON)
     * </ul>
     */
    register(callbacks?: Callbacks): Promise<User>;
    /**
     * @method
     * @memberOf User
     * @description ログイン
     * @param {Object} userInfo ユーザ情報。
     * JSON 形式で指定する。null は指定できない。
     * <pre>
     *     {
     *         "email"         : "foo@example.com",
     *         "password"      : "passwOrd"
     *     }</pre>
     * <pre>
     *     {
     *         "token"         : "TOKEN"
     *     }</pre>
     *  <ul>
     *     <li>email       : E-mailアドレス（※）
     *     <li>username    : ユーザ名（※）
     *     <li>token       : ワンタイムトークン（※）
     *     <li>password    : パスワード（E-mailアドレス、ユーザ名指定時は必須）
     *   </ul>
     *  (※) email か username か token のいずれかを指定する。
     * @param {Callbacks} callbacks コールバック (Option)
     * @return {Promise} callbacksを指定しなかった場合、Promiseオブジェクトを返す。callback指定時は返り値なし(undefined)。
     * <p>処理完了時に渡される値は以下の通り。
     * <ul>
     * <li>成功時: ログインしたユーザオブジェクトのインスタンス。
     *           処理の成功により、以下のユーザオブジェクトのプロパティが格納される
     *     <ul>
     *     <li>_id          : ログインしたユーザのID
     *     <li>sessionToken : セッショントークン
     *     <li>expire       : ログインの有効期限 (unix time [秒])
     *     <li>(以下の情報はオフライン機能無効時のみ取得可)
     *     <li>username     : ユーザ名
     *     <li>email        : E-mail
     *     <li>options      : オプション情報(JSON)
     *     <li>groups       : ユーザが所属するグループ名の配列
     *     <li>createdAt    : ユーザの作成日時
     *     <li>updatedAt    : ユーザの更新日時
     *     <li>lastLoginAt  : ユーザの最終ログイン日時
     *     <li>etag         : ETag
     *     <li>federated    : 外部認証連携有無
     *     <li>primaryLinkedUserId : プライマリリンクユーザID
     *     </ul>
     *
     * <li>失敗時: エラー要因(JSON)
     * </ul>
     */
    static login(userInfo: LoginInfo, callbacks?: Callbacks): Promise<User>;
    protected static _login(service: NebulaService, userInfo: LoginInfo, callbacks?: Callbacks): Promise<User>;
    /**
     * @method
     * @memberOf User
     * @description ログアウト
     * @param {Callbacks} callbacks コールバック (Option)
     * @return {Promise} callbacksを指定しなかった場合、Promiseオブジェクトを返す。callback指定時は返り値なし(undefined)。
     */
    static logout(callbacks?: Callbacks): Promise<void>;
    protected static _logout(service: NebulaService, callbacks?: Callbacks): Promise<void>;
    /**
     * @method
     * @memberOf User
     * @description カレントユーザ取得
     * <p>
     * ・カレント（ログイン中）のユーザを取得する。<br>
     * ・本情報はクライアントにキャッシュされている情報のため、サーバの最新情報とは一致しない場合がある。
     * @param {Callbacks} callbacks コールバック (Deprecated)
     * <pre>
     * ・callbacks は、成功時と失敗時のコールバックを指定する。
     *   callbacks 引数は後方互換性維持のためにのみ存在するので、通常指定する必要はない。
     *     {
     *         success : function(user) {
     *             // 成功時の処理
     *         },
     *         error : function(error) {
     *             // 失敗時の処理
     *         }
     *     }
     * ・処理が成功した場合、success コールバックを呼び出す。引数は、返り値と同じ。
     * ・本 API は失敗することはないため、error が呼ばれることはない。
     * </pre>
     * @return {User} ユーザオブジェクトのインスタンス。カレントユーザが存在しない場合は null が返る。
     * <p>
     * 返り値に設定されるプロパティは以下のとおり。
     * <ul>
     *     <li>_id          : ユーザID
     *     <li>sessionToken : セッショントークン
     *     <li>expire       : セッショントークン有効期限 (unix time [秒])
     * </ul>
     * 以下の情報はオフライン機能無効時のみ取得可
     * <ul>
     *     <li>username     : ユーザ名
     *     <li>email        : E-mailアドレス
     *     <li>options      : オプション
     *     <li>groups       : 所属グループ一覧
     * </ul>
     */
    static current(callbacks?: Callbacks): User;
    protected static _current(service: NebulaService, callbacks?: Callbacks): User;
    /**
     * @method
     * @memberOf User
     * @description カレントユーザ強制設定
     * <p>
     * ・カレント（ログイン中）のユーザを強制設定する。<br>
     * ・すでにカレントユーザが存在する(ログイン中)の場合は、指定したプロパティだけが上書きされる。<br>
     * ・本情報はクライアントにキャッシュされる。<br>
     * ・本 API はオフラインモードでは使用できない。<br>
     * ・本 API は通常のアプリケーションで使用するべきものではない。<br>
     * @param {Object} userInfo ユーザ情報(JSON)。null を指定した場合は、カレントユーザを削除する。
     * <p>
     * userInfo の書式は以下の通りとする。
     * 指定したプロパティだけが上書き設定される。
     * <ul>
     *     <li>_id          : ユーザID
     *     <li>sessionToken : セッショントークン
     *     <li>expire       : セッショントークン有効期限 (unix time [秒])
     *     <li>username     : ユーザ名
     *     <li>email        : E-mailアドレス
     *     <li>options      : オプション
     *     <li>groups       : 所属グループ一覧
     * </ul>
     */
    static saveCurrent(userInfo: UserJson): void;
    protected static _saveCurrent(service: NebulaService, userInfo: UserJson): void;
    /**
     * @method
     * @memberOf User
     * @description カレントユーザ取得(サーバ問合せ)
     * <p>
     * ・カレント（ログイン中）のユーザを取得する。サーバへの問い合わせが発生する。
     * @param {Callbacks} callbacks コールバック (Option)
     * @return {Promise} callbacksを指定しなかった場合、Promiseオブジェクトを返す。callback指定時は返り値なし(undefined)。
     * <p>処理完了時に渡される値は以下の通り。
     * <ul>
     * <li>成功時: ユーザオブジェクトのインスタンス。カレントユーザが存在しない場合は null。
     *           設定されるプロパティは以下のとおり。
     *     <ul>
     *     <li>_id         : ユーザID
     *     <li>username    : ユーザ名
     *     <li>email       : E-mailアドレス
     *     <li>options     : オプション
     *     <li>groups      : 所属グループ一覧 (注: '_id' を指定して検索した場合のみ。オフライン機能有効時は無効。)
     *     <li>createdAt   : ユーザ登録日時
     *     <li>updatedAt   : 最終更新日時
     *     <li>lastLoginAt : 最終ログイン日時
     *     <li>etag        : ETag
     *     <li>federated   : 外部認証連携有無
     *     <li>primaryLinkedUserId : プライマリリンクユーザID
     * </ul>
     * <li>失敗時: エラー要因(JSON)
     * </ul>
     */
    static queryCurrent(callbacks?: Callbacks): Promise<User>;
    protected static _queryCurrent(service: NebulaService, callbacks?: Callbacks): Promise<User>;
    /**
     * @method
     * @memberOf User
     * @description ユーザ検索
     * @param {Object} conditions 検索条件。<p>
     * JSON 形式で指定する。省略した場合は全件検索となる。
     * 検索用プロパティは以下の通り。
     * <ul>
     *     <li>_id        : ユーザのID（※）
     *     <li>email      : E-mailアドレス（※）
     *     <li>username   : ユーザ名（※）
     *     <li>skip       : スキップカウント
     *     <li>limit      : 件数上限(0は無制限、デフォルトは100)
     *     <li>countQuery : 全件検索時に全件数をカウントする場合は true (デフォルトは false)
     * </ul>
     * (※) _id かemail かusername のいずれか1つを指定する。
     * いずれも指定しない場合は全件検索となる。
     * 全件検索時は skip/limit で検索範囲を指定する。
     * (ただし skip/limit はオフライン有効時は無効)
     * @param {Callbacks} callbacks コールバック (Option)
     * @return {Promise} callbacksを指定しなかった場合、Promiseオブジェクトを返す。callback指定時は返り値なし(undefined)。
     * <p>処理完了時に渡される値は以下の通り。
     * <ul>
     * <li>成功時:
     * <ul>
     *     <li>conditions.countQuery が false の場合、取得したユーザオブジェクトインスタンスの配列。
     *     配列要素毎に以下のユーザオブジェクトのプロパティが格納される。
     *     <ul>
     *     <li>username    : ユーザ名
     *     <li>email       : E-mailアドレス
     *     <li>options     : オプション
     *     <li>groups      : 所属グループ一覧 (注: '_id' を指定して検索した場合のみ。オフライン機能有効時は無効。)
     *     <li>createdAt   : ユーザ登録日付
     *     <li>updatedAt   : 最終更新日付
     *     <li>lastLoginAt : 最終ログイン日時(マスターキー使用時のみ)
     *     <li>etag        : ETag
     *     <li>federated   : 外部認証連携有無
     *     <li>primaryLinkedUserId : プライマリリンクユーザID
     *     </ul>
     *     </li>
     *
     *     <li>conditions.countQuery が true の場合、以下要素を持つ JSON オブジェクト。
     *     <ul>
     *     <li>users : 取得したユーザオブジェクトインスタンスの配列。内容は上記配列と同じ。
     *     <li>count : 全件数
     *     </ul>
     *     </li>
     * </ul>
     *
     * <li>失敗時: エラー要因(JSON)
     * </ul>
     */
    static query(conditions: UserQuery, callbacks?: Callbacks): Promise<User[]>;
    protected static _query(service: NebulaService, conditions: UserQuery, callbacks?: Callbacks): Promise<User[]>;
    /**
     * @method
     * @memberOf User
     * @description ユーザ情報更新
     * @param {User} user 更新するユーザオブジェクトのインスタンス。
     * <p>
     * user にnull は指定できない。
     * 更新に必要なインスタンスのプロパティは、以下の通り。
     * <ul>
     *     <li>_id      : 更新するユーザのID（※）
     *     <li>email    : 更新するE-mailアドレス（オプション）
     *     <li>password : 更新するパスワード（オプション）
     *     <li>username : 更新するユーザ名（オプション）
     *     <li>options  : オプション(オプション)　optionsには、JSON形式で記述された任意のオブジェクトを指定できる。
     * </ul>
     * (※) ユーザID は、ユーザ登録が成功した場合にSDK がユーザプロパティに設定する。
     * <p>
     * カレントユーザ以外を更新する場合は、SDK 初期化時のアプリケーションキーにアプリケーションのマスターキーを指定すること。
     * @param {Callbacks} callbacks コールバック (Option)
     * @return {Promise} callbacksを指定しなかった場合、Promiseオブジェクトを返す。callback指定時は返り値なし(undefined)。
     * <p>処理完了時に渡される値は以下の通り。
     * <ul>
     * <li>成功時: 更新したユーザオブジェクトのインスタンス。
     *           処理の成功により、以下のユーザオブジェクトのプロパティが更新される
     *     <ul>
     *     <li>username    : 更新されたユーザ名
     *     <li>email       : 更新されたE-mailアドレス
     *     <li>updatedAt   : 最終更新日付
     *     </ul>
     * <li>失敗時: エラー要因(JSON)
     * </ul>
     */
    static update(user: User, callbacks?: Callbacks): Promise<User>;
    protected static _update(service: NebulaService, user: User, callbacks?: Callbacks): Promise<User>;
    protected _update(callbacks?: Callbacks): Promise<User>;
    /**
     * @method
     * @memberOf User
     * @description ユーザを削除する。
     * @param {Object} user 削除するユーザオブジェクトのインスタンス。
     * user にnull は指定できない。
     * ユーザ削除に必要なインスタンスのプロパティは、以下の通り。
     * <ul>
     *     <li>_id : 更新するユーザのID
     * </ul>
     * ユーザID は、ユーザ登録が成功した場合にSDK がユーザプロパティに設定する。
     * <p>
     * カレントユーザ以外を削除する場合は、SDK 初期化時のアプリケーションキーにアプリケーションのマスターキーを指定すること。
     * @param {Callbacks} callbacks コールバック (Option)
     * @return {Promise} callbacksを指定しなかった場合、Promiseオブジェクトを返す。callback指定時は返り値なし(undefined)。
     * @since v4.0.1
     */
    static remove(user: User, callbacks?: Callbacks): Promise<void>;
    protected static _remove(service: NebulaService, user: User, callbacks?: Callbacks): Promise<void>;
    private _remove;
    /**
     * @method
     * @memberOf User
     * @name delete
     * @description ユーザ削除 (Deprecated)
     * <p>
     * 本APIは Deprecated である。{@link User.remove}を使用すること。
     * @deprecated since v4.0.1
     */
    /**
     * @method
     * @memberOf User
     * @description ユーザパスワードリセット
     * <p>
     * ・ユーザパスワードのリセットを行う。<br>
     * ・ユーザパスワードのリセットは一定の時間内にリクエストできる回数に制限がある。
     * @param {Object} userInfo ユーザ情報。
     * JSON 形式で指定する。null は指定できない。
     * 以下いずれかのプロパティを指定すること。
     * <ul>
     *     <li>email       : E-mailアドレス
     *     <li>username    : ユーザ名
     * </ul>
     * @param {Callbacks} callbacks コールバック (Option)
     * @return {Promise} callbacksを指定しなかった場合、Promiseオブジェクトを返す。callback指定時は返り値なし(undefined)。
     */
    static resetPassword(userInfo: UserJson, callbacks?: Callbacks): Promise<void>;
    protected static _resetPassword(service: NebulaService, userInfo: UserJson, callbacks?: Callbacks): Promise<void>;
    /**
     * @method
     * @memberOf User
     * @description OpenID Connectリンク情報取得
     * <p>
     * ・ユーザに設定された OpenID Connect リンク情報を取得する。<br>
     * ・本 API はオフラインモードでは使用できない。<br>
     * @param {Object} user リンク情報取得するユーザオブジェクトのインスタンス。<br>
     * null は指定できない。<br>
     * リンク情報取得に必要なインスタンスのプロパティは、以下の通り。
     * <ul>
     *     <li>_id : リンク情報取得するユーザのID
     * </ul>
     * <p>
     * カレントユーザ以外のリンク情報を取得する場合は、SDK 初期化時のアプリケーションキーにアプリケーションのマスターキーを指定すること。
     * @param {Callbacks} callbacks コールバック (Option)
     * @return {Promise} callbacksを指定しなかった場合、Promiseオブジェクトを返す。callback指定時は返り値なし(undefined)。
     * <p>処理完了時に渡される値は以下の通り。
     * <ul>
     * <li>成功時: リンク情報(Nebula.AccountLink インスタンス) の配列。リンク情報が存在しない場合は空配列。
     * <li>失敗時: エラー要因(JSON)
     * </ul>
     * @since v6.5.0
     */
    static getAccountLinks(user: User, callbacks?: Callbacks): Promise<AccountLink[]>;
    protected static _getAccountLinks(service: NebulaService, user: User, callbacks?: Callbacks): Promise<AccountLink[]>;
    protected _getAccountLinks(callbacks?: Callbacks): Promise<AccountLink[]>;
    /**
     * @method
     * @memberOf User
     * @description OpenID Connectリンク情報削除
     * <p>
     * ・ユーザに設定された OpenID Connect リンク情報を削除する。<br>
     * ・本 API はオフラインモードでは使用できない。<br>
     * @param {Object} user リンク情報削除するユーザオブジェクトのインスタンス。<br>
     * null は指定できない。<br>
     * リンク情報削除に必要なインスタンスのプロパティは、以下の通り。
     * <ul>
     *     <li>_id : リンク情報削除するユーザのID
     * </ul>
     * <p>
     * カレントユーザ以外のリンク情報を削除する場合は、SDK 初期化時のアプリケーションキーにアプリケーションのマスターキーを指定すること。
     * @param {string} linkedUserId 削除するリンクユーザID。<br>
     * null は指定できない。<br>
     * user の primaryLinkedUserId と一致した場合は、例外をスローする。
     * @param {Callbacks} callbacks コールバック (Option)
     * @return {Promise} callbacksを指定しなかった場合、Promiseオブジェクトを返す。callback指定時は返り値なし(undefined)。
     * @since v6.5.0
     */
    static deleteAccountLink(user: User, linkedUserId: string, callbacks?: Callbacks): Promise<void>;
    protected static _deleteAccountLink(service: NebulaService, user: User, linkedUserId: string, callbacks?: Callbacks): Promise<void>;
    protected _deleteAccountLink(linkedUserId: string, callbacks?: Callbacks): Promise<void>;
}
/** @private */
export declare const declareUser: (_service: NebulaService) => void;
export interface GroupJson {
    _id: string;
    name: string;
    users: string[];
    groups: string[];
    ACL: AclJson;
    createdAt: string;
    updatedAt: string;
    etag: string;
}
export interface GroupQuery {
    groupname: string;
}
/**
 * グループ実装
 * @private
 */
export declare class Group {
    _service: NebulaService;
    __id: string;
    _groupname: string;
    _users: string[];
    _groups: string[];
    _acl: Acl;
    _createdAt: string;
    _updatedAt: string;
    _etag: string;
    [index: string]: any;
    /**
     * @class Group
     * @classdesc グループ管理クラス
     * @description グループオブジェクトを生成する
     * <p>
     * ・オブジェクトを生成しただけでは、まだサーバにグループ登録されていない。グループ登録は、{@link Group#save} で実施する。<br>
     * ・グループはアプリ毎ではなく、テナント毎に作成される。
     * @example
     * var group = new Nebula.Group("group1");
     * @param {String} groupname グループ名。
     * グループ名に使用できる文字は、１バイト英数のみ。
     * @return {Group} 新規グループオブジェクトのインスタンス
     */
    constructor(groupname: string, service?: NebulaService);
    /**
     * グループID
     * @type String
     * @name Group#_id
     */
    _id: string;
    /**
     * グループ名
     * @type String
     * @name Group#groupname
     */
    groupname: string;
    /**
     * ユーザIDの一覧(配列)
     * @type String[]
     * @name Group#users
     */
    users: string[];
    /**
     * グループ名の一覧(配列)
     * @type String[]
     * @name Group#groups
     */
    groups: string[];
    /**
     * ACL
     * @type Acl
     * @name Group#acl
     */
    acl: Acl;
    /**
     * 作成日時
     * @type String
     * @name Group#createdAt
     */
    createdAt: string;
    /**
     * 更新日時
     * @type String
     * @name Group#updatedAt
     */
    updatedAt: string;
    /**
     * ETag
     * @type String
     * @name Group#etag
     */
    etag: string;
    protected _setGroupInfo(response: string): string;
    /**
     * @memberOf Group
     * @description グループプロパティ設定 (Deprecated)
     * <p>
     * ・グループオブジェクトのプロパティを設定する。<br>
     * ・設定可能なプロパティの詳細は、各メソッドの説明を参照のこと。<br>
     * ・本メソッドは Deprecated である。各フィールドの setter を使用すること。
     * @param {String} property プロパティ名
     * @param {String} value プロパティ値
     * @return {Group} this
     * @deprecated since 5.0.0
     */
    set(property: string, value: string | string[] | Acl): void;
    /**
     * @memberOf Group
     * @description グループプロパティ取得 (Deprecated)
     * <p>
     * ・グループオブジェクトのプロパティを取得する。<br>
     * ・取得可能なプロパティの詳細は、各メソッドの説明を参照のこと。<br>
     * ・本メソッドは Deprecated である。各フィールドの getter を使用すること。
     * @param {String} property プロパティ名
     * @return {String} value プロパティ値
     * @deprecated since 5.0.0
     */
    get(property: string): any;
    /**
     * @memberOf Group
     * @description グループエントリ追加
     * <p>
     * ・登録するグループにユーザまたはグループを追加する。
     * @param {Object} entry Nebula.User またはNebula.Group のインスタンス。
     * <p>
     * entry は、グループに追加する Nebula.User または Nebula.Group のインスタンスを指定する。
     * 各インスタンスには以下のプロパティが設定されていること。
     * <ul>
     *     <li>Nebula.User
     *     <ul>
     *         <li>_id             : ユーザのID
     *         <br>ユーザID は、ユーザ登録が成功した場合にSDK がユーザプロパティに設定する。
     *         ユーザ取得、ログイン、カレントユーザ取得で取得したNebula.User のインスタンスには登録時のユーザID が設定されている。
     *     </ul>
     *     </li>
     *     <li>Nebula.Group
     *     <ul>
     *         <li>groupname       : 登録済みグループ名
     *     </ul>
     *     </li>
     * </ul>
     * @return {Boolean} value エントリ結果
     * <ul>
     *     <li>value は、エントリとして追加した場合 true、パラメータが不正の場合false が返る。
     *     <li>処理の成功により、以下のグループオブジェクトのプロパティが更新される。
     *     <ul>
     *         <li>users       : グループにエントリされるユーザ(ID)の配列（※）
     *         <li>groups      : グループにエントリされるグループ名の配列（※）
     *     </ul>
     *     (※) グループプロパティ設定（group.set） でプロパティを設定した場合、エントリ追加した内容は上書きされる。
     *     </il>
     * </ul>
     */
    addEntry(entry: User | Group): boolean;
    /**
     * @memberOf Group
     * @description グループエントリ削除
     * <p>
     * ・グループからユーザまたはグループを削除する。
     * @param {Object} entry Nebula.User またはNebula.Group のインスタンス
     * <p>
     * entry は、グループから削除する Nebula.User または Nebula.Group のインスタンスを指定する。
     * 各インスタンスには以下のプロパティが設定されていること。
     * <ul>
     *     <li>Nebula.User
     *     <ul>
     *         <li>_id             : ユーザのID
     *         <br>ユーザID は、ユーザ登録が成功した場合にSDK がユーザプロパティに設定する。
     *         ユーザ取得、ログイン、カレントユーザ取得で取得したNebula.User のインスタンスには登録時のユーザID が設定されている。
     *         </li>
     *     </ul>
     *     </li>
     *     <li>Nebula.Group
     *     <ul>
     *         <li>groupname       : 登録済みグループ名</li>
     *     </ul>
     *     </li>
     * </ul>
     * @return {Boolean} value エントリ結果
     * <ul>
     *     <li>value は、エントリから削除した場合 true、パラメータが不正の場合false が返る。
     *     <li>処理の成功により、以下のグループオブジェクトのプロパティが更新される。
     *     <ul>
     *         <li>users       : グループにエントリされるユーザ(ID)の配列（※）
     *         <li>groups      : グループにエントリされるグループ名の配列（※）
     *     </ul>
     *     (※) グループプロパティ設定（group.set） でプロパティを設定した場合、エントリ追加した内容は上書きされる。
     * </ul>
     */
    removeEntry(entry: User | Group): boolean;
    /**
     * @memberOf Group
     * @description グループ登録・更新
     * <p>
     * ・グループを登録する。<br>
     * ・既に同一名称のグループが登録されている場合は更新となる。<br>
     * ・グループ登録(又は更新)に必要なグループプロパティは、以下の通り。
     * <ul>
     *   <li>groupname   : グループ名（必須）</li>
     *   <li>users       : グループに登録されるユーザ(ID)の配列（※）</li>
     *   <li>groups      : グループに登録されるグループ名の配列（※）      </li>
     *   <li>acl         : グループに設定されるNebula.Acl のインスタンス（オプション)</li>
     *   <li>etag        : グループに設定されるETag値（オプション)</li>
     *  </ul>
     *  (※) グループに登録されるユーザ(ID)とグループ名の配列は、グループ
     *  プロパティ設定で配列を設定する方法とグループエントリの追加／
     *  削除で個別に設定する方法がある。
     *  <br><br>
     * ・ETag値は、グループを登録した場合にサーバで追加され、
     *   グループを更新する度にサーバで変更される固有値である。
     *   ETag値は、グループの "etag"プロパティに格納される。
     *   グループの登録の場合は、etagがないため必ず新規に生成・保存される。<br>
     * ・グループプロパティにETag値が含まれる場合、サーバに保存されているグループのETag値と照合される。
     *   一致しなかった場合は、データ衝突として「409 Conflict」エラーとなり、グループは更新されない。
     * @param {Callbacks} callbacks 応答コールバック (Option)
     * @return {Promise} callbacksを指定しなかった場合、Promiseオブジェクトを返す。callback指定時は返り値なし(undefined)。
     * <p>処理完了時に渡される値は以下の通り。
     * <ul>
     * <li>成功時: 登録したグループオブジェクトのインスタンス。
     *      <br>acl を設定しなかった場合は以下のNebula.Acl インスタンスが自動的に設定される。
     *      <ul>
     *      <li>ログイン済みの場合   : 全フィールドが空。オーナ（作成ユーザ）のみアクセス可。
     *      <li>未ログイン状態の場合 : r, w に "g:anonymous" が設定される。誰でも読み書き可。
     *      </ul>
     * <li>失敗時: エラー要因(JSON)
     * </ul>
     */
    save(callbacks?: Callbacks): Promise<Group>;
    /**
     * @memberOf Group
     * @description グループメンバ追加
     * <p>
     * ・グループにユーザ・子グループを追加する。
     * @param {string[]} userIds 追加するユーザIDの配列
     * @param {string[]} groups 追加するグループ名の配列
     * @param {Callbacks} callbacks 応答コールバック (Option)
     * @return {Promise} callbacksを指定しなかった場合、Promiseオブジェクトを返す。callback指定時は返り値なし(undefined)。
     * <p>処理完了時に渡される値は以下の通り。
     * <ul>
     * <li>成功時: 変更したグループオブジェクトのインスタンス
     * <li>失敗時: エラー要因(JSON)
     * </ul>
     * @since 6.5.0
     */
    addMembers(userIds: string[], groups: string[], callbacks?: Callbacks): Promise<Group>;
    /**
     * @memberOf Group
     * @description グループメンバ削除
     * <p>
     * ・グループからにユーザ・子グループを削除する
     * @param {string[]} userIds 削除するユーザIDの配列
     * @param {string[]} groups 削除するグループ名の配列
     * @param {Callbacks} callbacks 応答コールバック (Option)
     * @return {Promise} callbacksを指定しなかった場合、Promiseオブジェクトを返す。callback指定時は返り値なし(undefined)。
     * <p>処理完了時に渡される値は以下の通り。
     * <ul>
     * <li>成功時: 変更したグループオブジェクトのインスタンス
     * <li>失敗時: エラー要因(JSON)
     * </ul>
     * @since 6.5.0
     */
    removeMembers(userIds: string[], groups: string[], callbacks?: Callbacks): Promise<Group>;
    protected _addRemoveMembers(mode: string, userIds: string[], groups: string[], callbacks?: Callbacks): Promise<Group>;
    /**
     * @memberOf Group
     * @description グループ削除
     * @param {Group} group 削除するグループオブジェクトのインスタンス
     * <ul>
     * <li>group にnull は指定できない。
     * <li>グループ削除に必要なインスタンスのプロパティは、以下の通りとする。
     *     <ul>
     *     <li>groupname   : グループ名（必須）
     *     <li>etag        : グループに設定されるETag値（オプション）
     *     </ul>
     * <li>ETag値は、グループ新規保存した場合にサーバで追加され、
     *   グループを更新する度にサーバで変更される固有値である。
     *   ETag値は、グループの "etag"プロパティに格納される。
     * <li>etagを指定すると、サーバに保存されているグループのETag値と照合される。
     *   一致しなかった場合は、データ衝突として「409 Conflict」エラーとなり、グループは削除されない。
     *   etagがnullの場合は、ETag値は照合されずグループは無条件で削除される。
     * </ul>
     * @param {Callbacks} callbacks 応答コールバック (Option)
     * @return {Promise} callbacksを指定しなかった場合、Promiseオブジェクトを返す。callback指定時は返り値なし(undefined)。
     * @since v4.0.1
     */
    static remove(group: Group, callbacks?: Callbacks): Promise<void>;
    protected static _remove(service: NebulaService, group: Group, callbacks?: Callbacks): Promise<void>;
    protected _remove(callbacks?: Callbacks): Promise<void>;
    /**
     * @name delete
     * @memberOf Group
     * @function
     * @description グループを削除する (Deprecated)<br>
     * ・本APIは Deprecated である。{@link Group.remove} を使用すること。
     * @deprecated since v4.0.1
     */
    /**
     * @memberOf Group
     * @description グループ検索
     * @param {Object} conditions 取得条件
     * <ul>
     * <li>conditions にnull を指定した場合は全グループ一を取得する。
     * <li>conditions は、JSON 形式で検索条件を指定する。
     *     <pre>
     *     {
     *         "groupname" : "group1"  // グループ名
     *     }</pre></li>
     * </ul>
     * @param {Callbacks} callbacks 応答コールバック (Option)
     * @return {Promise} callbacksを指定しなかった場合、Promiseオブジェクトを返す。callback指定時は返り値なし(undefined)。
     * <p>処理完了時に渡される値は以下の通り。
     * <ul>
     * <li>成功時: 取得した Nebula.Group インスタンスの配列。
     *       各要素に以下のグループのプロパティが格納される。
     *     <ul>
     *     <li>groupname : グループ名
     *     <li>users     : 所属ユーザIDの一覧
     *     <li>groups    : 所属サブグループ名の一覧
     *     <li>acl       : ACL
     *     </ul>
     * <li>失敗時: エラー要因(JSON)
     * </ul>
     */
    static query(conditions: GroupQuery, callbacks?: Callbacks): Promise<Group[]>;
    protected static _query(service: NebulaService, conditions: GroupQuery, callbacks?: Callbacks): Promise<Group[]>;
}
/** @private */
export declare const declareGroup: (_service: NebulaService) => void;
export interface FileMetadataJson {
    filename: string;
    contentType: string;
    ACL: Acl;
    length: number;
    publicUrl: string;
    createdAt: string;
    updatedAt: string;
    lastSyncTime: string;
    metaId: string;
    metaETag: string;
    fileETag: string;
    options: object;
    cacheDisabled: boolean;
    fileSyncState: number;
}
/**
 * @class FileMetadata
 * @classdesc ファイルメタデータ クラス
 * @description FileMetadata インスタンスを生成する
 * @example
 * var meta = new Nebula.FileMetadata();
 */
export declare class FileMetadata {
    static SYNC_STATE_UNDEFINED: number;
    static SYNC_STATE_SYNCED: number;
    static SYNC_STATE_DIRTY: number;
    static SYNC_STATE_SYNCING: number;
    static SYNC_STATE_CONFLICTED: number;
    _createdAt: string;
    _updatedAt: string;
    _acl: Acl;
    _contentType: string;
    _publicUrl: string;
    _fileName: string;
    _fileSize: number;
    _syncState: number;
    _lastSyncTime: string;
    _metaId: string;
    _metaETag: string;
    _fileETag: string;
    _options: object;
    _cacheDisabled: boolean;
    /** @private */
    constructor();
    /**
     * @memberOf FileMetadata
     * @description
     *      ファイル名を取得する.
     *      <br/><br/>ファイル名がセットされていない場合は null を返す
     * @example
     * fileBucket.getMetadata("MyFile.txt").then(function(metadata) {
     *     var fileName = metadata.getFileName();
     *     ....
     * @return
     *      {String} ファイル名を返す。ファイル名がセットされていない場合は、null を返す。
     */
    getFileName(): string;
    /**
     * @memberOf FileMetadata
     * @description
     *      ファイル名をセットする.
     *      <br/><br/>すでにファイル名がセットされている場合は上書きされる。
     * @example
     * fileBucket.getMetadata("MyFile.txt").then(function(metadata) {
     *     metadata.setFileName("NewFileName.txt");
     *     ....
     * @param {String} fileName ファイル名
     * @return {FileMetadata} this
     */
    setFileName(fileName: string): FileMetadata;
    /**
     * @memberOf FileMetadata
     * @description
     *      ファイルに設定されているACLを取得する.
     *      <br/><br/>ACLがセットされていない場合は null を返す
     * @example
     * fileBucket.getMetadata("MyFile.txt").then(function(metadata) {
     *     var acl = metadata.getAcl();
     *     ....
     * @return
     *      {Acl} ACLを返す。ACLがセットされていない場合は、null を返す。
     */
    getAcl(): Acl;
    /**
     * @memberOf FileMetadata
     * @description
     *      ファイルにACLをセットする.
     *      <br/><br/>すでにACLがセットされている場合は上書きされる
     * @example
     * fileBucket.getMetadata("MyFile.txt").then(function(metadata) {
     *     var newAcl = new Nebula.Acl();
     *     ....
     *     metadata.setAcl(newAcl);
     *     ....
     * @param {Acl} acl セットするACL
     * @return {FileMetadata} this
     */
    setAcl(acl: Acl): FileMetadata;
    /**
     * @memberOf FileMetadata
     * @description
     *      ファイルに設定されているコンテンツタイプを取得する.
     *      <br/><br/>コンテンツタイプがセットされていない場合は null を返す。
     * @example
     * fileBucket.getMetadata("MyFile.txt").then(function(metadata) {
     *     var contentType = metadata.getContentType();
     *     ....
     * @return
     *      {String} ファイルにセットされているコンテンツタイプを返す。セットされていない場合は、null を返す。
     */
    getContentType(): string;
    /**
     * @memberOf FileMetadata
     * @description
     *      コンテンツタイプをセットする.
     *      <br/><br/>すでにコンテンツタイプがセットされている場合は上書きされる。
     * @example
     * fileBucket.getMetadata("MyFile.txt").then(function(metadata) {
     *     metadata.setContentType("image/jpeg");
     *     ....
     * @param {Acl} contentType セットするコンテンツタイプ
     * @return {FileMetadata} this
     */
    setContentType(contentType: string): FileMetadata;
    /**
     * @memberOf FileMetadata
     * @description
     *      ファイルの作成日時を取得する.
     *      <br/><br/>作成日時は、ISO 8601日付形式の文字列として返す。(例：2014-03-12T09:12:53.000Z)
     *      <br/>作成日時がセットされていない場合は null を返す。
     * @example
     * fileBucket.getMetadata("MyFile.txt").then(function(metadata) {
     *     var createdAt = metadata.getCreatedAt();
     *     ....
     * @return
     *      {String} ファイルの作成日時を返す。セットされていない場合は、null を返す。
     */
    getCreatedAt(): string;
    /**
     * @memberOf FileMetadata
     * @description ファイルの作成日時をセットする
     * @private
     */
    _setCreatedAt(createdAt: string): FileMetadata;
    /**
     * @memberOf FileMetadata
     * @description
     *      ファイルの更新日時を取得する.
     *      <br/><br/>更新日時は、ISO 8601日付形式の文字列として返す。(例：2014-03-12T09:12:53.000Z)
     *      <br/>更新日時がセットされていない場合は null を返す。
     * @example
     * fileBucket.getMetadata("MyFile.txt").then(function(metadata) {
     *     var updatedAt = metadata.getUpdatedAt();
     *     ....
     * @return
     *      {String} ファイルの更新日時を返す。セットされていない場合は、null を返す。
     */
    getUpdatedAt(): string;
    /**
     * @memberOf FileMetadata
     * @description ファイルの更新日時をセットする
     * @private
     */
    _setUpdatedAt(updatedAt: string): FileMetadata;
    /**
     * @memberOf FileMetadata
     * @description
     *      ファイルのサイズを取得する.
     *      <br/><br/>ファイルサイズがセットされていない場合は -1 を返す
     * @example
     * fileBucket.getMetadata("MyFile.txt").then(function(metadata) {
     *     var size = metadata.getSize();
     *     ....
     * @return
     *      {Int} ファイルサイズを返す。セットされていない場合は、-1 を返す。
     */
    getSize(): number;
    /**
     * @memberOf FileMetadata
     * @description ファイルサイズをセットする
     * @private
     */
    _setSize(size: number): FileMetadata;
    /**
     * @memberOf FileMetadata
     * @description
     *      ファイルに設定されている公開URLを取得する.
     *      <br/><br/>公開URLがセットされていない場合は null を返す。
     * @example
     * fileBucket.getMetadata("MyFile.txt").then(function(metadata) {
     *     var url = metadata.getPublicUrl();
     *     ....
     * @return
     *      {String} 公開URLを返す。セットされていない場合は、null を返す。
     */
    getPublicUrl(): string;
    /**
     * @memberOf FileMetadata
     * @description 公開URLをセットする
     * @private
     */
    _setPublicUrl(url: string): FileMetadata;
    /**
     * @memberOf FileMetadata
     * @description
     *      ファイルの同期状態を取得する
     *      <br/><strong>現在、本APIは利用できません.</strong>
     *      <br/><br/>同期状態がセットされていない場合は Nebula.FileMetadata.SYNC_STATE_UNDEFINED を返す
     *      <br/><br/>本APIはオフラインのみで利用可能
     * @example
     * fileBucket.getMetadata("MyFile.txt").then(function(metadata) {
     *     var syncState = metadata.getFileSyncState();
     *     ....
     * @return
     *      {Integer} 以下のいずれかの同期状態を返す
     * <ul>
     * <li>Nebula.FileMetadata.SYNC_STATE_SYNCED      : 同期済み
     * <li>Nebula.FileMetadata.SYNC_STATE_DIRTY       : 追加/更新/削除
     * <li>Nebula.FileMetadata.SYNC_STATE_SYNCING     : 同期中
     * <li>Nebula.FileMetadata.SYNC_STATE_CONFLICTED  : 衝突発生中
     * <li>Nebula.FileMetadata.SYNC_STATE_UNDEFINED   : 未設定
     * </ul>
     * @private
     */
    getFileSyncState(): number;
    /**
     * @memberOf FileMetadata
     * @description ファイルの同期状態をセットする
     * @private
     */
    _setFileSyncState(syncState: number): FileMetadata;
    /**
     * @memberOf FileMetadata
     * @description
     *      ファイルの最終同期日時を取得する
     *      <br/><strong>現在、本APIは利用できません.</strong>
     *      <br/><br/>最終同期日時がセットされていない場合は null を返す
     *      <br/>同期が完了していないファイルは、同期されるまで null が設定されている
     *      <br/><br/>本APIはオフラインのみで利用可能
     * @example
     * fileBucket.getMetadata("MyFile.txt").then(function(metadata) {
     *     var lastSyncTime = metadata.getLastSyncTime();
     *     ....
     * @return
     *      {String} 最終同期日時を返す。セットされていない場合は、null を返す。
     * @private
     */
    getLastSyncTime(): string;
    /**
     * @memberOf FileMetadata
     * @description ファイルの最終同期日時をセットする
     * @private
     */
    _setLastSyncTime(lastSyncTime: string): FileMetadata;
    /**
     * @memberOf FileMetadata
     * @description
     *      ファイルメタデータIDを取得する.
     *      <br/><br/>ファイルメタデータIDがセットされていない場合は null を返す
     *      <br/>同期が完了していないファイルは、同期されるまで null が設定されている
     * @example
     * fileBucket.getMetadata("MyFile.txt").then(function(metadata) {
     *     var metaId = metadata.getMetaId();
     *     ....
     * @return
     *      {String} ファイルメタデータIDを返す。セットされていない場合は、null を返す。
     */
    getMetaId(): string;
    /**
     * @memberOf FileMetadata
     * @description ファイルメタIDをセットする
     * @private
     */
    _setMetaId(metaId: string): FileMetadata;
    /**
     * @memberOf FileMetadata
     * @description
     *      metaETag(ファイルメタデータに対するETag)を取得する.
     *      <br/><br/>metaEtagがセットされていない場合は null を返す
     *      <br/>同期が完了していないファイルは、同期されるまで null が設定されている
     *      <br/>metaETag値は、サーバ側で同期するときに使用され、一致しない場合は衝突と判断される
     * @example
     * fileBucket.getMetadata("MyFile.txt").then(function(metadata) {
     *     var etag = metadata.getMetaETag();
     *     ....
     * @return
     *      {String} metaEtagを返す。セットされていない場合は、null を返す。
     */
    getMetaETag(): string;
    /**
     * @memberOf FileMetadata
     * @description metaETagをセットする
     * @private
     */
    _setMetaETag(metaETag: string): FileMetadata;
    /**
     * @memberOf FileMetadata
     * @description
     *      fileETag(ファイルに対するETag)を取得する.
     *      <br/><br/>fileEtagがセットされていない場合は null を返す
     *      <br/>同期が完了していないファイルは、同期されるまで null が設定されている
     *      <br/>fileETag値は、サーバ側で同期するときに使用され、一致しない場合は衝突と判断される
     * @example
     * fileBucket.getMetadata("MyFile.txt").then(function(metadata) {
     *     var etag = metadata.getFileETag();
     *     ....
     * @return
     *      {String} fileEtagを返す。セットされていない場合は、null を返す。
     */
    getFileETag(): string;
    /**
     * @memberOf FileMetadata
     * @description metaETagをセットする
     * @private
     */
    _setFileETag(fileETag: string): FileMetadata;
    /**
     * @memberOf FileMetadata
     * @description オプション情報(JSON)を取得する
     * @returns {Object} オプション
     */
    getOptions(): object;
    /**
     * @memberOf FileMetadata
     * @description オプション情報(JSON)をセットする
     * @param options オプション
     * @return {FileMetadata} this
     */
    setOptions(options: object): FileMetadata;
    /**
     * @memberOf FileMetadata
     * @description
     *      キャッシュ禁止かどうかを問い合わせる
     *      <br/><strong>現在、本APIは利用できません.</strong>
     *      <br/><br/>setCacheDisabled()で設定したキャッシュ禁止フラグを参照する
     *      <br/>キャッシュ禁止フラグが設定されていない場合は false を返す
     *      <br/><br/>本APIはオフラインのみで利用可能
     * @example
     * fileBucket.getMetadata("MyFile.txt").then(function(metadata) {
     *     if (metadata.isCacheDisabled()) {
     *         // キャッシュ禁止の場合の処理
     *     }
     *     else {
     *         // キャッシュOKの場合の処理
     *         ....
     *     }
     *     ....
     * @return
     *      {Boolean} キャッシュ禁止の場合はtrue、それ以外の場合はfalseを返す
     * @private
     */
    isCacheDisabled(): boolean;
    /**
     * @memberOf FileMetadata
     * @description
     *      キャッシュ禁止フラグを設定する
     *      <br/><strong>現在、本APIは利用できません.</strong>
     *      <br/><br/>キャッシュ禁止がtrueの場合、キャッシュへのファイル保存が行われない
     *      <br/><br/>本APIはオフラインのみで利用可能
     * @example
     * fileBucket.getMetadata("MyFile.txt").then(function(metadata) {
     *     metadata.setCacheDisabled(true);
     *     ....
     * @param {Boolean} cacheDisabled キャッシュ禁止フラグ
     * @private
     */
    setCacheDisabled(cacheDisabled: boolean): FileMetadata;
    /**
     * @memberOf FileMetadata
     * @description JSONからFileMetadataインスタンスにデータをセットする
     * @private
     */
    _setMetadata(obj: FileMetadataJson): FileMetadata;
}
/**
 * @class バケット基底クラス
 * @private
 */
export declare class BaseBucket {
    _service: NebulaService;
    _type: string;
    _name: string;
    _acl: Acl;
    _noAcl: boolean;
    _contentAcl: Acl;
    _description: string;
    _mode: number;
    /**
     * コンストラクタ
     * @param service NebulaService
     * @param name バケット名
     * @param type 種別 ("object" or "file")
     * @param mode バケットモード(BUCKET_MODE_*)
     */
    constructor(service: NebulaService, name: string, type: string, mode?: number);
    /**
     * @description バケットの読み込み
     * @private
     */
    protected static _baseLoadBucket(type: string, service: NebulaService, name: string, mode: number, callbacks: Callbacks): Promise<BaseBucket>;
    /**
     * @description バケット一覧の取得
     * @private
     */
    protected static _baseGetBucketList(type: string, service: NebulaService, local: boolean, callbacks?: Callbacks): Promise<string[]>;
    /**
     * @description バケットの保存
     * @private
     */
    saveBucket(callbacks?: Callbacks): Promise<BaseBucket>;
    /**
     * @description バケットの削除
     * @private
     */
    deleteBucket(callbacks?: Callbacks): Promise<BaseBucket>;
    /**
     * @description ACLの設定
     * @private
     */
    setAcl(acl: Acl): void;
    /**
     * @description ACLの取得
     * @private
     */
    getAcl(): Acl;
    /**
     * @description ACLレスモードの設定
     * @private
     */
    setNoAcl(noAcl: boolean): void;
    /**
     * @description ACLレスモードの取得
     * @private
     */
    isNoAcl(): boolean;
    /**
     * @description コンテンツACLの設定
     * @param {@link acl} acl 設定するACL
     * @private
     */
    setContentAcl(acl: Acl): void;
    /**
     * @description コンテンツACLの取得
     * @private
     */
    getContentAcl(): Acl;
    /**
     * @description バケットの説明文の設定
     * @private
     */
    setDescription(description: string): void;
    /**
     * @description バケットの説明文の取得
     * @private
     */
    getDescription(): string;
    /**
     * @description バケット名の取得
     * @private
     */
    getBucketName(): string;
    /**
     * @description バケット名の設定
     * @private
     */
    setBucketName(name: string): void;
    /**
     * @description バケットモードの取得
     * @private
     */
    getBucketMode(): number;
    /**
     * @description バケットに関するREST APIのパスの取得
     * @private
     */
    getPath(option?: string): string;
    /**
     * @description バケットに含まれるデータ(ファイルまたはオブジェクト)に関するREST APIのパスの取得
     * @private
     */
    getDataPath(option?: string): string;
    /**
     * @description バケット種別からネイティブクラス名を取得する(オフライン限定)
     * @private
     */
    protected static getClassName(type?: string): string;
    /**
     * @description バケット種別からネイティブクラス名を取得する(オフライン限定)
     * @private
     */
    protected getClassName(): string;
}
/**
 * ObjectBucket 実装
 * @private
 */
export declare class ObjectBucket extends BaseBucket {
    _resolveId: string;
    /**
     * @name ObjectBucket.useLongQuery
     * @description
     *   true に設定すると、クエリはすべて longQuery 扱いとなる。
     *   デフォルトは false。
     * @since 5.0.0
     */
    static useLongQuery: boolean;
    /**
     * 衝突解決ポリシ: 手動解決(ユーザ通知)
     * @name ObjectBucket.CONFLICT_POLICY_MANUAL
     * @const
     */
    static CONFLICT_POLICY_MANUAL: number;
    /**
     * 衝突解決ポリシ: クライアント優先
     * @name ObjectBucket.CONFLICT_POLICY_CLIENT
     * @const
     */
    static CONFLICT_POLICY_CLIENT: number;
    /**
     * 衝突解決ポリシ: サーバ優先
     * @name ObjectBucket.CONFLICT_POLICY_SERVER
     * @const
     */
    static CONFLICT_POLICY_SERVER: number;
    static RESOLVE_CONFLICT_UNDEFINED: number;
    static RESOLVE_CONFLICT_CLIENT: number;
    static RESOLVE_CONFLICT_SERVER: number;
    /**
     * 同期エラー: その他のエラー
     * @name ObjectBucket.SYNC_ERROR_UNDEFINED
     * @const
     */
    static SYNC_ERROR_UNDEFINED: number;
    /**
     * 同期エラー: PUSHエラー
     * @name ObjectBucket.SYNC_ERROR_PUSH
     * @const
     */
    static SYNC_ERROR_PUSH: number;
    /**
     * 同期エラー: PULLエラー
     * @name ObjectBucket.SYNC_ERROR_PULL
     * @const
     */
    static SYNC_ERROR_PULL: number;
    /**
     * 同期エラー: ID衝突
     * @name ObjectBucket.SYNC_ERROR_OVERLAP_ID
     * @const
     */
    static SYNC_ERROR_OVERLAP_ID: number;
    /**
     * 同期エラー: PUSHエラー後、同期リトライ中
     * @name ObjectBucket.SYNC_ERROR_PUSH_RESYNCING
     * @const
     */
    static SYNC_ERROR_PUSH_RESYNCING: number;
    /**
     * @class ObjectBucket
     * @classdesc オブジェクトバケット
     * @description ObjectBucket インスタンスを生成する
     * @example
     * var bucket = new Nebula.ObjectBucket("bucket1");
     * @param {string} name バケットの名前
     * @param {number} mode バケットモード。
     * <p>
     * バケットモードには、以下のいずれかを指定する。
     * <ul>
     *   <li>{@link Nebula.BUCKET_MODE_ONLINE} ： オンラインモード
     *   <li>{@link Nebula.BUCKET_MODE_REPLICA}： レプリカモード
     *   <li>{@link Nebula.BUCKET_MODE_LOCAL} ： ローカルモード
     * </ul>
     * modeを省略した場合や上記以外が指定された場合は、オンラインモードとして処理する。
     */
    constructor(name: string, mode?: number, service?: NebulaService);
    /**
     * @memberOf ObjectBucket
     * @description
     *      オブジェクトバケットを取得する
     * @example
     * Nebula.ObjectBucket.loadBucket("Books", callbacks)
     *     .then(function(bucket) { ... })
     *     .catch(function(err) { ... });
     * @param {string} name 取得するバケットの名前
     * @param {Callbacks} callbacks コールバック (Option)
     * @param {number} mode バケットモード
     * <p>
     * バケットモードには、以下のいずれかを指定する。
     * <ul>
     *   <li>{@link Nebula.BUCKET_MODE_ONLINE} ： オンラインモード
     *   <li>{@link Nebula.BUCKET_MODE_REPLICA}： レプリカモード
     *   <li>{@link Nebula.BUCKET_MODE_LOCAL} ： ローカルモード
     * </ul>
     * modeを省略した場合や上記以外が指定された場合は、オンラインモードとして処理する。
     * @return {Promise} callbacksを指定しなかった場合、Promiseオブジェクトを返す。callback指定時は返り値なし(undefined)。
     *      ただし、modeを指定する場合は、callbacksにnullを指定すること(省略不可)。
     * <p>処理完了時に渡される値は以下の通り。
     * <ul>
     * <li>成功時: Nebula.ObjectBucketのインスタンス
     * <li>失敗時: 以下JSON形式で表されるエラー要因
     * <pre>
     *     {
     *         "status"        : ステータスコード,
     *         "statusText"    : エラーメッセージ,
     *         "responseText"  : レスポンスメッセージ,
     *         "data"          : 取得に失敗したバケットの名前(nameと同じ)
     *     }
     * </pre>
     * </ul>
     */
    static loadBucket(name: string, callbacks?: Callbacks, mode?: number): Promise<ObjectBucket>;
    protected static _loadBucket(service: NebulaService, name: string, callbacks?: Callbacks, mode?: number): Promise<ObjectBucket>;
    /**
     * @memberOf ObjectBucket
     * @description
     *      オブジェクトバケットのバケット名一覧を取得する
     * @example
     * Nebula.ObjectBucket.getBucketList()
     *     .then(function(bucketList) { ... })
     *     .catch(function(err) { ... });
     * @param {Callbacks} callbacks コールバック (Option)
     * @return {Promise} callbacksを指定しなかった場合、Promiseオブジェクトを返す。callback指定時は返り値なし(undefined)。
     * <p>処理完了時に渡される値は以下の通り。
     * <ul>
     * <li>成功時: バケットの名前の配列
     * <li>失敗時: エラー要因(JSON)
     * </ul>
     */
    static getBucketList(callbacks?: Callbacks): Promise<string[]>;
    protected static _getBucketList(service: NebulaService, callbacks?: Callbacks): Promise<string[]>;
    /**
     * @memberOf ObjectBucket
     * @description
     *      ローカル上に保存されているオブジェクトバケットのバケット名一覧を取得する.
     *      本APIはオフラインのみで利用可能
     * @example
     * Nebula.ObjectBucket.getLocalBucketList()
     *     .then(function(bucketList) { ... })
     *     .catch(function(err) { ... });
     * @param {Callbacks} callbacks コールバック (Option)
     * @return {Promise} callbacksを指定しなかった場合、Promiseオブジェクトを返す。callback指定時は返り値なし(undefined)。
     * <p>処理完了時に渡される値は以下の通り。
     * <ul>
     * <li>成功時: バケットの名前の配列
     * <li>失敗時: エラー要因(JSON)
     * </ul>
     */
    static getLocalBucketList(callbacks?: Callbacks): Promise<string[]>;
    protected static _getLocalBucketList(service: NebulaService, callbacks?: Callbacks): Promise<string[]>;
    /**
     * @memberOf ObjectBucket
     * @description
     *      オブジェクトバケットを保存する.
     *      バケットはテナント毎に作成される。同一テナント内では同一名称のバケットを複数作成できない。
     * @example
     * var bucket = new Nebula.ObjectBucket("Person");
     * ....
     * bucket.saveBucket()
     *     .then(function(bucket) {...})
     *     .catch(function(err) {...})
     * @param {Callbacks} callbacks コールバック (Option)
     * @return {Promise} callbacksを指定しなかった場合、Promiseオブジェクトを返す。callback指定時は返り値なし(undefined)。
     * <p>処理完了時に渡される値は以下の通り。
     * <ul>
     * <li>成功時: Nebula.ObjectBucketのインスタンス
     * <li>失敗時: 以下JSON形式で表されるエラー要因
     *              {
     *                  "status"        : ステータスコード,
     *                  "statusText"    : エラーメッセージ,
     *                  "responseText"  : レスポンスメッセージ,
     *                  "data"          : Nebula.ObjectBucket インスタンス
     *              }
     * </ul>
     */
    saveBucket(callbacks?: Callbacks): Promise<ObjectBucket>;
    /**
     * @memberOf ObjectBucket
     * @description
     *      オブジェクトバケットを削除する.
     *      バケットを削除する場合、事前にバケット内に格納されている全データを削除しておく必要がある。
     * @example
     * var bucket = new Nebula.ObjectBucket("Person");
     * ....
     * callbacks = {
     *     success: function(bucket) {....},
     *     error: function(bucket, err) {....}
     * };
     * bucket.deleteBucket()
     *     .then(function(bucket) {...})
     *     .catch(function(err) {...})
     * @param {Callbacks} callbacks コールバック (Option)
     * @return {Promise} callbacksを指定しなかった場合、Promiseオブジェクトを返す。callback指定時は返り値なし(undefined)。
     * <p>処理完了時に渡される値は以下の通り。
     * <ul>
     * <li>成功時: Nebula.ObjectBucketのインスタンス
     * <li>失敗時: 以下JSON形式で表されるエラー要因
     * <pre>
     *     {
     *         "status"        : ステータスコード,
     *         "statusText"    : エラーメッセージ,
     *         "responseText"  : レスポンスメッセージ,
     *         "data"          : Nebula.ObjectBucket インスタンス
     *     }
     * </pre>
     * </ul>
     */
    deleteBucket(callbacks?: Callbacks): Promise<ObjectBucket>;
    /**
     * @memberOf ObjectBucket
     * @description
     * オブジェクトバケットのACLを設定する。
     * <p>
     * 本メソッドを呼び出しただけでは、サーバに格納されているオブジェクトバケットは更新されない。
     * サーバと同期するには、saveBucket()を呼び出す必要がある。
     * @example
     * var bucket = ....;
     * var acl = new Nebula.Acl();
     * ....
     * acl.addEntry(....);
     * ....
     * bucket.setAcl(acl);
     * @param {Acl} acl Nebula.ACL のインスタンス
     * @return {ObjectBucket} this
     */
    setAcl(acl: Acl): ObjectBucket;
    /**
     * @memberOf ObjectBucket
     * @description
     *      オブジェクトバケットのACLを取得する。
     *      <p>
     *      オブジェクトバケットのACLを取得するには、loadBucket()を使用してサーバのバケット情報をロードしておく必要がある。
     * @example
     * var bucket = ....;
     * ....
     * var acl = bucket.getAcl();
     * @return
     *      {Acl} オブジェクトバケットのACL
     */
    getAcl(): Acl;
    /**
     * @memberOf ObjectBucket
     * @description
     *      オブジェクトバケットのACLレスモード有効/無効を設定する。
     *      <p>本メソッドを呼び出さない場合、ACLレスモードはデフォルト無効。
     *      <p>本メソッドを呼び出しただけでは、サーバに格納されているファイルバケットは更新されない。
     *      <br/>サーバと同期するには、saveBucket()を呼び出す必要がある。
     * @example
     * var bucket = ....;
     * ....
     * var noAcl = true;
     * bucket.setNoAcl(noAcl);
     * @param noAcl {boolean} ACLレスモードを有効にする場合はtrueを指定する。
     * @return {ObjectBucket} this
     */
    setNoAcl(noAcl: boolean): ObjectBucket;
    /**
     * @memberOf ObjectBucket
     * @description
     *      オブジェクトバケットのACLレスモード有効/無効を取得する。
     * @example
     * var bucket = ....;
     * ....
     * var noAcl = bucket.isNoAcl();
     * @return
     *      {boolean} オブジェクトバケットがACLレスモード有効の場合はtrueを返す。
     */
    isNoAcl(): boolean;
    /**
     * @memberOf ObjectBucket
     * @description
     *      オブジェクトバケットのコンテンツACLを設定する。
     *      <p>本メソッドを呼び出しただけでは、サーバに格納されているオブジェクトバケットは更新されない。
     *      サーバと同期するには、saveBucket()を呼び出す必要がある。
     * @example
     * var bucket = ....;
     * var acl = new Nebula.Acl();
     * ....
     * acl.addEntry(....);
     * ....
     * bucket.setContentAcl(acl);
     * @param {Acl} acl Nebula.ACL のインスタンス
     * @return {ObjectBucket} this
     */
    setContentAcl(acl: Acl): ObjectBucket;
    /**
     * @memberOf ObjectBucket
     * @description
     *      オブジェクトバケットのコンテンツACLを取得する。
     *      <p>オブジェクトバケットのコンテンツACLを取得するには、loadBucket()を使用してサーバのバケット情報をロードしておく必要がある。
     * @example
     * var bucket = ....;
     * ....
     * var acl = bucket.getAcl();
     * @return {Acl} オブジェクトバケットのコンテンツACL
     */
    getContentAcl(): Acl;
    /**
     * @memberOf ObjectBucket
     * @description
     *      オブジェクトバケットに「説明文」を設定する。
     *      <p>
     *      本メソッドを呼び出しただけでは、サーバに格納されているオブジェクトバケットは更新されない。
     *      サーバと同期するには、saveBucket()を呼び出す必要がある。
     * @example
     * var bucket = ....;
     * ....
     * bucket.setDescription("このバケットの説明文");
     * @param {string} description オブジェクトバケットの「説明文」
     */
    setDescription(description: string): void;
    /**
     * @memberOf ObjectBucket
     * @description
     *      オブジェクトバケットの「説明文」を取得する。
     *      <p>
     *      オブジェクトバケットの「説明文」を取得するには、loadBucket()を使用してサーバのバケット情報をロードしておく必要がある。
     * @example
     * var bucket = ....;
     * ....
     * var description = bucket.getDescription();
     * @return
     *      {string} オブジェクトバケットに設定されている「説明文」
     */
    getDescription(): string;
    /**
     * @memberOf ObjectBucket
     * @description
     *      オブジェクトバケット名を取得する
     * @example
     * var bucket = ....;
     * ....
     * var bucketName = bucket.getBucketName();
     * @return
     *      {string} オブジェクトバケット名
     */
    getBucketName(): string;
    /**
     * @memberOf ObjectBucket
     * @description バケット名をセットする
     * @private
     */
    _setBucketName(name: string): void;
    /**
     * @memberOf ObjectBucket
     * @description
     *      バケットモードを取得する
     * @example
     * var bucket = ....;
     * ....
     * var bucketMode = bucket.getBucketMode();
     * @return
     *      {number} バケットモード
     */
    getBucketMode(): number;
    /**
     * @memberOf ObjectBucket
     * @description
     *      オブジェクトバケットからオブジェクトを読み込む
     * @example
     * var bucket = ....;
     * ....
     * bucket.load("objectId")
     *     .then(function(object) {...})
     *     .catch(function(err) {...})
     * @param {string} objectId オブジェクトID
     * @param {Callbacks} callbacks コールバック (Option)
     * @return {Promise} callbacksを指定しなかった場合、Promiseオブジェクトを返す。callback指定時は返り値なし(undefined)。
     * <p>処理完了時に渡される値は以下の通り。
     * <ul>
     * <li>成功時: 読み込んだオブジェクト(JSON)
     * <li>失敗時: 以下JSON形式で表されるエラー要因
     * <pre>
     *     {
     *         "status"        : ステータスコード,
     *         "statusText"    : エラーメッセージ,
     *         "responseText"  : レスポンスメッセージ,
     *         "data"          : 読み込みに失敗したオブジェクトID
     *     }
     * </pre>
     * </ul>
     */
    load(objectId: string, callbacks?: Callbacks): Promise<JsonObject>;
    /**
     * @memberOf ObjectBucket
     * @description
     *      オブジェクトバケットからオブジェクトを削除する
     * @example
     * var bucket = ....;
     * ....
     * bucket.remove("objectId")
     *     .then(function(object) {...})
     *     .catch(function(err) {...});
     * @param {string} objectId オブジェクトID
     * @param {Callbacks} callbacks コールバック (Option)
     * @param {string} etag オブジェクトに含まれるETag値。
     *      <p>
     *      ETag値は、オブジェクトを新規保存した場合にサーバで追加され、
     *      オブジェクトを更新する度にサーバで変更される固有値である。
     *      <p>
     *      ETag値は、オブジェクトの "etag"プロパティに格納される。
     *      etagを指定すると、サーバに保存されているオブジェクトのETag値と照合される。
     *      <p>
     *      一致しなかった場合は、データ衝突として「409 Conflict」エラーとなり、オブジェクトは削除されない。
     *      etagを指定しなかった場合、または、nullを指定した場合は、ETag値は照合されずオブジェクトは無条件で削除される。
     * @return {Promise} callbacksを指定しなかった場合、Promiseオブジェクトを返す。callback指定時は返り値なし(undefined)。
     * <p>処理完了時に渡される値は以下の通り。
     * <ul>
     * <li>成功時: 削除に成功したオブジェクトID
     * <li>失敗時: 以下JSON形式で表されるエラー要因
     * <pre>
     *     {
     *         "status"        : ステータスコード,
     *         "statusText"    : エラーメッセージ,
     *         "responseText"  : レスポンスメッセージ,
     *         "data"          : 削除に失敗したオブジェクトID
     *     }
     * </pre>
     * </ul>
     * @since v4.0.1
     */
    remove(objectId: string, callbacks?: Callbacks, etag?: string): Promise<string>;
    /**
     * @memberOf ObjectBucket
     * @description
     *      オブジェクトバケットからオブジェクトを削除する (Deprecated)<p>
     * 本APIは Deprecated である。{@link ObjectBucket#remove} を使用すること。
     * @deprecated since v4.0.1
     */
    delete(objectId: string, callbacks?: Callbacks, etag?: string): Promise<string>;
    /**
     * @memberOf ObjectBucket
     * @description オブジェクトバケットへオブジェクトを保存(upsert)する.
     * <p>
     * オブジェクトに "_id" フィールドが含まれる場合は更新、含まれない場合は挿入処理となる。
     * <p>
     * オブジェクトにETag値が含まれる場合、サーバに保存されているオブジェクトのETag値と照合される。
     * 一致しなかった場合は、データ衝突として「409 Conflict」エラーとなり、オブジェクトは更新されない。
     * <p>
     * ETag値は、オブジェクトを新規保存した場合にサーバで追加され、
     * オブジェクトを更新する度にサーバで変更される固有値である。
     * ETag値は、オブジェクトの "etag"プロパティに格納される。
     * オブジェクトの新規保存の場合は、etagがないため必ず保存される。
     * <p>
     * すでに存在するオブジェクトを保存する場合、オブジェクトに指定したフィールドのみが更新される。
     * 指定しないフィールドは更新されない(フィールドは削除されずそのまま残る)
     * @example
     * var bucket = ....;
     * ....
     * var myObj = {....};
     * ....
     * bucket.save(myObj)
     *     .then(function(object) {...})
     *     .catch(function(err) {...});
     * @param {Object} object 保存するオブジェクト
     * @param {Callbacks} callbacks コールバック (Option)
     * @return {Promise} callbacksを指定しなかった場合、Promiseオブジェクトを返す。callback指定時は返り値なし(undefined)。
     * <p>処理完了時に渡される値は以下の通り。
     * <ul>
     * <li>成功時: 保存に成功したオブジェクト(JSON)。新規オブジェクトの場合は、以下のフィールドが追加される。
     * <ul>
     *     <li>_id : オブジェクトID
     *     <li>createdAt : 作成日時
     *     <li>updatedAt : 更新日時
     *     <li>ACL : このオブジェクトのACL。指定しなかった場合は追加される
     * </ul>
     * <li>失敗時: 以下JSON形式で表されるエラー要因
     * <pre>
     *     {
     *         "status"        : ステータスコード,
     *         "statusText"    : エラーメッセージ,
     *         "responseText"  : レスポンスメッセージ,
     *         "data"          : 保存に失敗したオブジェクト
     *     }
     * </pre>
     * </ul>
     * @see #insert
     */
    save(object: JsonObject, callbacks?: Callbacks): Promise<JsonObject>;
    /**
     * @memberOf ObjectBucket
     * @description オブジェクトバケットへオブジェクトを保存(insert)する.
     * <p>
     * ETag値は、オブジェクトを新規保存した場合にサーバで追加され、
     * オブジェクトを更新する度にサーバで変更される固有値である。
     * ETag値は、オブジェクトの "etag"プロパティに格納される。
     * @example
     * var bucket = ....;
     * ....
     * var myObj = {....};
     * ....
     * bucket.insert(myObj)
     *     .then(function(object) {...})
     *     .catch(function(err) {...});
     * @param {Object} object 保存するオブジェクト
     * @param {Callbacks} callbacks コールバック (Option)
     * @return {Promise} callbacksを指定しなかった場合、Promiseオブジェクトを返す。callback指定時は返り値なし(undefined)。
     * <p>処理完了時に渡される値は以下の通り。
     * <ul>
     * <li>成功時: 保存に成功したオブジェクト(JSON)。
     * <br>新規オブジェクトの場合は、以下のフィールドが追加される。
     * <ul>
     *      <li>_id : オブジェクトID
     *      <li>createdAt : 作成日時
     *      <li>updatedAt : 更新日時
     *      <li>ACL : このオブジェクトのACL。指定しなかった場合は追加される
     * </ul>
     * <li>失敗時: 以下JSON形式で表されるエラー要因
     * <pre>
     *     {
     *         "status"        : ステータスコード,
     *         "statusText"    : エラーメッセージ,
     *         "responseText"  : レスポンスメッセージ,
     *         "data"          : 保存に失敗したオブジェクト
     *     }
     * </pre>
     * </ul>
     * @see #save
     * @since 7.5.1
     */
    insert(object: JsonObject, callbacks?: Callbacks): Promise<JsonObject>;
    _save(object: JsonObject, isNew: boolean, callbacks?: Callbacks): Promise<JsonObject>;
    /**
     * @memberOf ObjectBucket
     * @description
     *      オブジェクトバケットからオブジェクトを検索する
     * @example
     * var bucket = ....;
     * ....
     * var query = new Nebula.ObjectQuery();
     * ....
     * bucket.query(query, callbacks)
     *     .then(function(objects) {...})
     *     .catch(function(err) {...});
     * @param {ObjectQuery} aQuery Nebula.ObjectQuery インスタンス
     * @param {Callbacks} callbacks コールバック (Option)
     * @return {Promise} callbacksを指定しなかった場合、Promiseオブジェクトを返す。callback指定時は返り値なし(undefined)。
     * <p>処理完了時に渡される値は以下の通り。
     * <ul>
     * <li>成功時: オブジェクト(JSON)の配列</li>
     * <li>失敗時: エラー要因(JSON)</li>
     * </ul>
     */
    query(aQuery: ObjectQuery, callbacks?: Callbacks): Promise<JsonObject[]>;
    /**
     * @memberOf ObjectBucket
     * @description
     *     オブジェクトバケットからオブジェクトを検索する。
     *     {@link ObjectBucket#query} と同じだが、クエリサイズの制限はない。
     * @param {ObjectQuery} aQuery ObjectQuery インスタンス
     * @param {Callbacks} callbacks コールバック (Option)
     * @return {Promise} Promise
     * @since 5.0.0
     */
    longQuery(aQuery: ObjectQuery, callbacks?: Callbacks): Promise<JsonObject[]>;
    /**
     * @memberOf ObjectBucket
     * @description
     *      オブジェクトバケットからオブジェクトを検索する(クエリ件数付き)
     * @example
     * var bucket = ....;
     * ....
     * var query = new Nebula.ObjectQuery();
     * ....
     * bucket.query(query)
     *     .then(function(result) {...})
     *     .catch(function(err) {...});
     * @param {ObjectQuery} aQuery ObjectQuery インスタンス
     * @param {Callbacks} callbacks コールバック (Option)
     * @return {Promise} callbacksを指定しなかった場合、Promiseオブジェクトを返す。callback指定時は返り値なし(undefined)。
     * <p>処理完了時に渡される値は以下の通り。
     * <ul>
     * <li>成功時: 検索結果(JSON)。フィールドは以下の通り。
     *     <ul>
     *     <li>objects : オブジェクト(JSON)の配列
     *     <li>count   : 検索条件に合致したオブジェクトの総数
     *     </ul>
     * <li>失敗時: エラー要因(JSON)</li>
     * </ul>
     */
    queryWithCount(aQuery: ObjectQuery, callbacks?: Callbacks): Promise<JsonObject>;
    /**
     * @memberOf ObjectBucket
     * @description
     *     オブジェクトバケットからオブジェクトを検索する(クエリ件数付き)
     *     queryWithCount() と同じだが、クエリサイズの制限はない。
     * @param {ObjectQuery} aQuery Nebula.ObjectQuery インスタンス
     * @param {Callbacks} callbacks コールバック (Option)
     * @return {Promise} Promise
     * @since 5.0.0
     */
    longQueryWithCount(aQuery: ObjectQuery, callbacks?: Callbacks): Promise<JsonObject>;
    private _query;
    private _checkOfflineService;
    /**
     * @memberOf ObjectBucket
     * @description 集計(Aggregation)を実行する (オンライン専用)。
     * @example
     * var bucket = ....;
     * var pipeline = [ { "$lookup": { ... } }, ... ];
     * var options = {};
     * bucket.aggregate(pipeline, options)
     *     .then(function(objects) {
     *     ...
     *
     * @param {JsonObject[]} pipeline Aggregation Pipeline JSON配列
     * <p>
     * 複数のアイテムに対して $sort を実行する場合は、以下のように単一アイテムの $sort を複数連結すること。
     * $sort に複数のアイテムを記載した場合は、ソート順序が保証されない。
     * <pre>
     * [
     *     { "$sort": { "item1": 1 } },
     *     { "$sort": { "item2": -1 } },
     *     { "$sort": { "item3": 1 } }
     * ]
     * </pre>
     * @param {JsonObject} options オプション
     * @param {Callbacks} callbacks コールバック
     * @returns {Promise<JsonObject[]>}
     * @since 7.0.0
     */
    aggregate(pipeline: JsonObject[], options?: JsonObject, callbacks?: Callbacks): Promise<JsonObject[]>;
    /**
     * @memberOf ObjectBucket
     * @description
     *      同期範囲を設定する(オフライン専用)。
     *      同期するには、本APIを呼び出して同期範囲を設定すること。
     * @example
     * var bucket = new Nebula.ObjectBucket("Books", Nebula.BUCKET_MODE_REPLICA);
     * var clause = Nebula.Clause.greaterThan("number", 99);
     * var scope = new Nebula.ObjectQuery();
     * scope.setClause(clause);
     * ...
     * bucket.setSyncScope(scope)
     *     .then(function() {...})
     *     .catch(function(err) {...});
     * @param {ObjectQuery} scope 設定する同期範囲。Nebula.ObjectQueryのインスタンス。
     * <ul>
     *      <li>Nebula.ObjectQueryのインスタンスで同期範囲として有効なものは、検索条件(setClause()メソッドでセット)のみである。
     *        検索条件以外のその他(検索上限数やスキップカウントなど)は無効。
     *      <li>nullを指定した場合は、設定されている同期範囲を削除する。
     *      <li>すべてのオブジェクトを同期範囲にする場合は、インスタンスを生成しただけの空のNebula.ObjectQueryのインスタンスを指定する。
     * </ul>
     * @param {Callbacks} callbacks コールバック (Option)
     * @return {Promise} callbacksを指定しなかった場合、Promiseオブジェクトを返す。callback指定時は返り値なし(undefined)。
     * <p>処理完了時に渡される値は以下の通り。
     * <ul>
     * <li>成功時: 同期範囲。Nebula.ObjectQuery のインスタンス
     * <li>失敗時: エラー要因(JSON)
     * </ul>
     */
    setSyncScope(scope: ObjectQuery, callbacks?: Callbacks): Promise<void>;
    /**
     * @memberOf ObjectBucket
     * @description
     *      同期範囲を取得する（オフライン専用)
     * @example
     * var bucket = new Nebula.ObjectBucket("Books", Nebula.BUCKET_MODE_REPLICA);
     * bucket.getSyncScope()
     *     .then(function(scope) {...})
     *     .catch(function(err) {...});
     * @param {Callbacks} callbacks コールバック (Option)
     * @return {Promise} callbacksを指定しなかった場合、Promiseオブジェクトを返す。callback指定時は返り値なし(undefined)。
     * <p>処理完了時に渡される値は以下の通り。
     * <ul>
     * <li>成功時: 同期範囲。Nebula.ObjectQuery のインスタンス
     * <li>失敗時: エラー要因(JSON)
     * </ul>
     */
    getSyncScope(callbacks?: Callbacks): Promise<ObjectQuery>;
    /**
     * @memberOf ObjectBucket
     * @description
     *      衝突解決ポリシを取得する(オフライン専用)
     * @example
     * var bucket = new Nebula.ObjectBucket(....);
     * ....
     * bucket.getResolveConflictPolicy()
     *     .then(function(policy) {...})
     *     .catch(function(err) {...});
     * @param {Callbacks} callbacks コールバック (Option)
     * @return {Promise} callbacksを指定しなかった場合、Promiseオブジェクトを返す。callback指定時は返り値なし(undefined)。
     * <p>処理完了時に渡される値は以下の通り。
     * <ul>
     * <li>成功時: 衝突解決ポリシ。以下のいずれかの値。
     *     <ul>
     *     <li>Nebula.ObjectBucket.CONFLICT_POLICY_CLIENT ： クライアント優先で解決
     *     <li>Nebula.ObjectBucket.CONFLICT_POLICY_SERVER ： サーバ優先で解決
     *     <li>Nebula.ObjectBucket.CONFLICT_POLICY_MANUAL ： ユーザ通知
     *     </ul>
     * <li>失敗時: エラー要因(JSON)
     * </ul>
     */
    getResolveConflictPolicy(callbacks?: Callbacks): Promise<number>;
    /**
     * @memberOf ObjectBucket
     * @description
     *      衝突解決ポリシを設定する(オフライン専用)
     * @example
     * var bucket = new Nebula.ObjectBucket(....);
     * var policy = ....
     * ....
     * bucket.setResolveConflictPolicy(policy)
     *     .then(function() {...})
     *     .catch(function(err) {...});
     * @param {number} policy 設定する衝突解決ポリシ
     * @param {Callbacks} callbacks コールバック (Option)
     * <p>policy は、以下のいずれかの衝突解決ポリシを指定する。
     * <ul>
     *     <li>Nebula.ObjectBucket.CONFLICT_POLICY_CLIENT ： クライアント優先で解決
     *     <li>Nebula.ObjectBucket.CONFLICT_POLICY_SERVER ： サーバ優先で解決
     *     <li>Nebula.ObjectBucket.CONFLICT_POLICY_MANUAL ： ユーザ通知
     * </ul>
     * @return {Promise} callbacksを指定しなかった場合、Promiseオブジェクトを返す。callback指定時は返り値なし(undefined)。
     */
    setResolveConflictPolicy(policy: number, callbacks?: Callbacks): Promise<void>;
    /**
     * @memberOf ObjectBucket
     * @description
     *      キャッシュデータを削除する。(オフライン専用)
     *      オフライン用データベースに保存されたバケットとバケットに保存されたオブジェクトの情報を削除する。
     * @example
     * var bucket = new Nebula.ObjectBucket(....);
     * ....
     * bucket.removeCacheBucket()
     *     .then(function() {...})
     *     .catch(function(err) {...});
     * @param {Callbacks} callbacks コールバック (Option)
     * @return {Promise} callbacksを指定しなかった場合、Promiseオブジェクトを返す。callback指定時は返り値なし(undefined)。
     */
    removeCacheBucket(callbacks?: Callbacks): Promise<void>;
    /**
     * @memberOf ObjectBucket
     * @description
     *      同期イベントリスナを登録する(オフライン専用)
     * @example
     * var bucket = new Nebula.ObjectBucket("Books", Nebula.BUCKET_MODE_REPLICA);
     * bucket.setSyncEventListener({
     *     onSyncStart: function(targetBucket) {
     *         ....
     *     },
     *     onSyncCompleted: function(targetBucket, objectIds) {
     *         ....
     *     },
     *     onSyncConflicted: function(bucket, client, server) {
     *         ....
     *     },
     *     onResolveConflict: function(resolveObject, resolve) {
     *         ....
     *     },
     *     onSyncError: function(errorCode, errorObject) {
     *         ....
     *     }
     * });
     * @param {Object} listener 同期イベントを受け取るイベントリスナ
     * <p>listener には、各同期イベント発生時のコールバックを指定する。
     * <pre>
     *      {
     *          onSyncStart: function(targetBucket) {
     *              // 同期開始時に呼び出される
     *              // targetBucket : 同期対象のバケット名
     *          },
     *          onSyncCompleted: function(targetBucket, objectIds) {
     *              // 同期完了時に呼び出される
     *              // targetBucket : 同期が完了したバケット名
     *              // objectIds    : 同期が完了したオブジェクトIDの配列
     *          },
     *          onSyncConflicted: function(bucket, client, server) {
     *              // 衝突発生時に呼び出される
     *              // bucket    : 衝突が発生したバケットのNebula.ObjectBucketインスタンス(衝突解決時に使用)
     *              // client    : クライアント側の衝突データ
     *              // server    : サーバ側の衝突データ
     *          },
     *          onResolveConflict: function(resolveObject, resolve) {
     *              // データの衝突の解決時に呼び出される
     *              // resolveObject : 解決に使用したデータ
     *              // resolve       : 解決方法
     *          },
     *          onSyncError: function(errorCode, errorObject) {
     *              // 同期処理中のエラー発生時に呼び出される
     *              // errorCode    : エラー種別
     *                  //  Nebula.ObjectBucket.SYNC_ERROR_PULL           ： 同期処理のPULLエラー
     *                  //  Nebula.ObjectBucket.SYNC_ERROR_PUSH           ： 同期処理のPUSHエラー
     *                  //  Nebula.ObjectBucket.SYNC_ERROR_PUSH_RESYNCING ： 同期処理のpushエラー後に、同期リトライ中
     *                  //  Nebula.ObjectBucket.SYNC_ERROR_OVERLAP_ID     ： 同期処理のID重複エラー
     *              // errorObject  : エラーが発生したオブジェクト
     *          }
     *     }
     * </pre>
     */
    setSyncEventListener(listener: SyncEventListener): any;
    /**
     * @memberOf ObjectBucket
     * @description
     *      すべてのオブジェクトバケットの一括同期を実行する。(オフライン専用)
     *      <p>
     *      処理の進捗はsetSyncEventListener()で指定されたコールバックにて通知する。
     *      各バケットごとにsetSyncScope()を使用して同期範囲を設定すること。
     *      同期範囲が設定されていないバケットは、同期されない。
     * @example
     * Nebula.ObjectBucket.sync()
     *     .then(function() {...})
     *     .catch(function(err) {...});
     * @param {Callbacks} callbacks コールバック (Option)
     * @return {Promise} callbacksを指定しなかった場合、Promiseオブジェクトを返す。callback指定時は返り値なし(undefined)。
     * <p>
     * 同期イベントはPromise完了時ではなく、setSyncEventListener()で指定されたコールバックにて通知する点に注意。
     */
    static sync(callbacks?: Callbacks): Promise<void>;
    protected static _sync(service: NebulaService, callbacks?: Callbacks): Promise<void>;
    /**
     * @memberOf ObjectBucket
     * @description
     *      同期を実行する(オフライン専用)。
     *      <p>
     *      特定のオブジェクトバケットに対し同期を行う。処理の進捗はsetSyncEventListener()で指定されたコールバックにて通知する。
     *      <p>
     *      setSyncScope()を使用して同期範囲を設定すること。同期範囲を設定しない場合、エラーとなり同期されない。
     *      本APIは、バケットモードがレプリカモードのバケットに対して呼び出すこと。
     * @example
     * var bucket = new Nebula.ObjectBucket(....);
     * ....
     * bucket.syncBucket()
     *     .then(function() {...})
     *     .catch(function(err) {...});
     * @param {Callbacks} callbacks コールバック (Option)
     * @return {Promise} callbacksを指定しなかった場合、Promiseオブジェクトを返す。callback指定時は返り値なし(undefined)。
     * <p>
     * 同期イベントはPromise完了時ではなく、setSyncEventListener()で指定されたコールバックにて通知する点に注意。
     */
    syncBucket(callbacks?: Callbacks): Promise<void>;
    /**
     * @memberOf ObjectBucket
     * @description
     *      衝突を解決する(オフライン専用)。
     *      同期イベントの衝突通知(onSyncConflicted)で指定されたObjectBucketインスタンスに対して実行する。
     * @example
     * var bucket = new Nebula.ObjectBucket(....);
     * ....
     *  Nebula.ObjectBucket.setSyncEventListener({
     *     onSyncStart: function(targetBucket) {
     *         ....
     *     },
     *     onSyncCompleted: function(targetBucket, objectIds) {
     *         ....
     *     },
     *     onSyncConflicted: function(bucket, client, server) {
     *         ....
     *         bucket.resolveConflict(objectId, Nebula.ObjectBucket.RESOLVE_CLIENT);
     *     },
     *     onResolveConflict: function(resolveObject, resolve) {
     *         ....
     *     },
     *     onSyncError: function(errorCode, errorObject) {
     *         ....
     *     }
     * });
     * ....
     * bucket.syncBucket().then(function() {...}).catch(function(err) {...});
     * @param {string} objectId 衝突解決するオブジェクトのID
     * @param {number} resolve 衝突解決方法
     * <ul>
     * <li>objectId には、衝突解決対象のオブジェクトのIDを指定する。
     * <li>resolve には、以下のいずれかの衝突解決方法を指定する。
     *     <ul>
     *     <li>Nebula.ObjectBucket.RESOLVE_CLIENT  ： クライアント優先で解決
     *     <li>Nebula.ObjectBucket.RESOLVE_SERVER  ： サーバ優先で解決
     *     </ul>
     * </ul>
     */
    resolveConflict(objectId: string, resolve: number): any;
    /**
     * @memberOf ObjectBucket
     * @description
     *      オブジェクトバケットにインデックス設定する(オフライン専用)。
     *      本APIはオフラインのみで利用可能
     * @example
     * var bucket = new Nebula.ObjectBucket("Books", Nebula.BUCKET_MODE_REPLICA);
     * ....
     * index = {
     *     "index": [{"name": "key1", "type": "string"}, {"name": "key2", "type": "number"}]
     * };
     * callbacks = {
     *     success: function() {....},
     *     error: function(err) {....}
     * };
     * bucket.setIndexToLocal(index, callbacks);
     * @param {Object} index インデックス情報
     *      インデックス情報は以下のようにJSONで指定する
     *      <pre>
     *      {
     *          "index": [{"name": "key1", "type": "string"}, {"name": "key2", "type": "number"}]
     *      }</pre>
     *      index にはインデックスを設定するキー名と型を指定する。型は文字列で"string","boolean","number"のいずれかを指定する。
     * @param {Callbacks} callbacks コールバック (Option)
     * @return {Promise} callbacksを指定しなかった場合、Promiseオブジェクトを返す。callback指定時は返り値なし(undefined)。
     */
    setIndexToLocal(index: JsonObject, callbacks?: Callbacks): Promise<void>;
    /**
     * @memberOf ObjectBucket
     * @description
     *      オブジェクトバケットに設定されているインデックスを取得する(オフライン専用)。
     *      本APIはオフラインのみで利用可能
     * @example
     * var bucket = new Nebula.ObjectBucket("Books", Nebula.BUCKET_MODE_REPLICA);;
     * ....
     * bucket.getIndexFromLocal()
     *     .then(function(index) {...})
     *     .catch(function(err) {...});
     * @param {Callbacks} callbacks コールバック (Option)
     * @return {Promise} callbacksを指定しなかった場合、Promiseオブジェクトを返す。callback指定時は返り値なし(undefined)。
     * <p>処理完了時に渡される値は以下の通り。
     * <ul>
     * <li>成功時: インデックス情報(JSON)。以下例を示す。
     * <pre>
     *      {
     *          "index": [{"name": "key1", "type": "string"}, {"name": "Key2", "type": "number"}]
     *      }</pre>
     * <li>失敗時: エラー要因(JSON)
     * </ul>
     */
    getIndexFromLocal(callbacks?: Callbacks): Promise<JsonObject>;
    /**
     * @memberOf ObjectBucket
     * @description
     *      最終同期日時を取得する。(オフライン専用)
     *      一度も同期していない場合、nullを返す。
     *      本APIは、バケットモードがレプリカモードのバケットに対して呼び出すこと。
     * @example
     * var bucket = new Nebula.ObjectBucket(....);
     * ....
     * bucket.getLastSyncTime()
     *     .then(function(lastSyncTime) {...})
     *     .catch(function(err) {...});
     * @param {Callbacks} callbacks コールバック (Option)
     * @return {Promise} callbacksを指定しなかった場合、Promiseオブジェクトを返す。callback指定時は返り値なし(undefined)。
     * <p>処理完了時に渡される値は以下の通り。
     * <ul>
     * <li>成功時: 最終同期日時
     * <li>失敗時: エラー要因(JSON)
     * </ul>
     */
    getLastSyncTime(callbacks?: Callbacks): Promise<string>;
    /**
     * @memberOf ObjectBucket
     * @description 衝突解決IDを取得する
     * @private
     */
    protected _getResolveId(): string;
    /**
     * @memberOf ObjectBucket
     * @description 衝突解決IDをセットする
     * @private
     */
    _setResolveId(resolveId: string): string;
    /**
     * @memberOf ObjectBucket
     * @description
     * バッチリクエストを実行する
     * @example
     * // リクエスト生成
     * var req = new Nebula.BatchRequest();
     * // 追加オブジェクト設定
     * req.addInsertRequest({"name": "Taro Nichiden", "score": 70});
     * req.addInsertRequest({"name": "Hanako Nichiden", "score": 80});
     * // バッチリクエスト実行
     * bucket.batch(req).then(function(result) {...});
     * @param {BatchRequest} request バッチリクエスト
     * @param {Callbacks} callbacks 応答コールバック (Option)
     * @return {Promise} callbacksを指定しなかった場合、Promiseオブジェクトを返す。callback指定時は返り値なし(undefined)。
     * <p>処理完了時に渡される値は以下の通り。
     * <ul>
     * <li>成功時: バッチ応答(JSON)。バッチ処理が一部でも成功した場合、成功となる。<p>
     *               応答フォーマットは REST API リファレンスを参照のこと。
     *               'results'プロパティに結果が格納される。
     *               これに加え、'failedCount'プロパティに処理失敗したリクエストの数が格納される。
     * <li>失敗時: エラー要因(JSON)。バッチ処理全体が失敗した場合にエラーとなる。
     * </ul>
     * @since v4.0.0
     */
    batch(request: BatchRequest, callbacks?: Callbacks): Promise<BatchResponseJson>;
}
/** @private */
export declare const declareObjectBucket: (_service: NebulaService) => void;
/**
 * ファイル情報
 */
export interface FileInfo {
    /** ファイルパス */
    path: string;
    /** ファイル名 */
    name: string;
    /** Content-Type */
    type: string;
}
/**
 * ファイルリクエスト用オプション
 */
export interface FileRequestOptions {
    /** Raw リクエスト(trueの場合、extraResponseは無効) **/
    rawRequest?: boolean;
    /** ステータスコード、ヘッダ情報を含めて取得する **/
    extraResponse?: boolean;
    /** if-matchヘッダの付与 **/
    ifMatch?: string;
    /** if-range ヘッダの付与 **/
    ifRange?: string;
    /** 開始位置 **/
    rangeStart?: number;
    /** 終了位置 **/
    rangeEnd?: number;
}
/**
 * FileBucket 実装
 * @private
 */
export declare class FileBucket extends BaseBucket {
    _resolveId: string;
    /**
     * @class FileBucket
     * @classdesc ファイルバケット
     * @description FileBucket インスタンスを生成する
     * @example
     * var bucket = new Nebula.FileBucket("bucket1");
     * @param name バケット名
     */
    constructor(name: string, service?: NebulaService);
    /**
     * @memberOf FileBucket
     * @description
     *      ファイルバケットを取得する
     * @example
     * Nebula.FileBucket.loadBucket()
     *     .then(function(bucket) {....})
     *     .catch(function(err) {....});
     * @param {String} name ファイルバケット名
     * @param {Callbacks} callbacks コールバック (Option)
     * @return {Promise} callbacksを指定しなかった場合、Promiseオブジェクトを返す。callback指定時は返り値なし(undefined)。
     * <p>処理完了時に渡される値は以下の通り。
     * <ul>
     * <li>成功時: ファイルバケット(Nebula.FileBucket) インスタンス
     * <li>失敗時: エラー要因(JSON)
     * <pre>
     *   {
     *       "status"        : ステータスコード,
     *       "statusText"    : エラーメッセージ,
     *       "responseText"  : レスポンスメッセージ,
     *       "data"          : ファイルバケット名(nameに同じ)
     *   }
     * </pre>
     * </ul>
     */
    static loadBucket(name: string, callbacks?: Callbacks): Promise<FileBucket>;
    protected static _loadBucket(service: NebulaService, name: string, callbacks?: Callbacks): Promise<FileBucket>;
    /**
     * @memberOf FileBucket
     * @description
     *      ファイルバケットのバケット名一覧を取得する
     * @example
     * Nebula.FileBucket.getBucketList()
     *     .then(function(bucketList) {....})
     *     .catch(function(error) {....});
     * @param {Callbacks} callbacks コールバック (Option)
     * @return {Promise} callbacksを指定しなかった場合、Promiseオブジェクトを返す。callback指定時は返り値なし(undefined)。
     * <p>処理完了時に渡される値は以下の通り。
     * <ul>
     * <li>成功時: ファイルバケット名の配列
     * <li>失敗時: エラー要因(JSON)
     * </ul>
     */
    static getBucketList(callbacks?: Callbacks): Promise<string[]>;
    protected static _getBucketList(service: NebulaService, callbacks?: Callbacks): Promise<string[]>;
    /**
     * @memberOf FileBucket
     * @description
     *      ファイルバケットを保存する
     * @example
     * var bucket = new Nebula.FileBucket("Person");
     * ....
     * bucket.saveBucket()
     *     .then(function(bucket) {....})
     *     .catch(function(error) {....});
     * @param {Callbacks} callbacks コールバック (Option)
     * @return {Promise} callbacksを指定しなかった場合、Promiseオブジェクトを返す。callback指定時は返り値なし(undefined)。
     * <p>処理完了時に渡される値は以下の通り。
     * <ul>
     * <li>成功時: ファイルバケット (Nebula.FileBucket) インスタンス
     * <li>失敗時: エラー要因(JSON)
     * <pre>
     *   {
     *       "status"        : ステータスコード,
     *       "statusText"    : エラーメッセージ,
     *       "responseText"  : レスポンスメッセージ
     *       "data"          : Nebula.FileBucket インスタンス
     *   }
     * </pre>
     * </ul>
     */
    saveBucket(callbacks?: Callbacks): Promise<FileBucket>;
    /**
     * @memberOf FileBucket
     * @description
     *      ファイルバケットを削除する
     * @example
     * var bucket = new Nebula.FileBucket("Person");
     * ....
     * callbacks = {
     *     success: function(bucket) {....},
     *     error: function(err) {....}
     * };
     * bucket.deleteBucket(callbacks);
     * @param {Callbacks} callbacks コールバック (Option)
     * @return {Promise} callbacksを指定しなかった場合、Promiseオブジェクトを返す。callback指定時は返り値なし(undefined)。
     * <p>処理完了時に渡される値は以下の通り。
     * <ul>
     * <li>成功時: ファイルバケット (Nebula.FileBucket) インスタンス
     * <li>失敗時: エラー要因(JSON)
     * <pre>
     *   {
     *       "status"        : ステータスコード,
     *       "statusText"    : エラーメッセージ,
     *       "responseText"  : レスポンスメッセージ
     *       "data"          : Nebula.FileBucket インスタンス
     *   }
     * </pre>
     * </ul>
     */
    deleteBucket(callbacks?: Callbacks): Promise<FileBucket>;
    /**
     * @memberOf FileBucket
     * @description
     *      ファイルバケットのACLを設定する.
     *      <p>本メソッドを呼び出しただけでは、サーバに格納されているファイルバケットは更新されない。
     *      <br/>サーバと同期するには、saveBucket()を呼び出す必要がある。
     * @example
     * var bucket = ....;
     * var acl = new Nebula.Acl();
     * ....
     * acl.addEntry(....);
     * ....
     * bucket.setAcl(acl);
     * @param acl {Acl} Aclインスタンス
     * @return {FileBucket} this
     */
    setAcl(acl: Acl): FileBucket;
    /**
     * @memberOf FileBucket
     * @description
     *      ファイルバケットのACLを取得する.
     *      <p>ファイルバケットのACLを取得するには、loadBucket()を使用してサーバのバケット情報をロードしておく必要がある
     * @example
     * var bucket = ....;
     * ....
     * var acl = bucket.getAcl();
     * @return
     *      {Acl} ファイルバケットのACL
     */
    getAcl(): Acl;
    /**
     * @memberOf FileBucket
     * @description
     *      ファイルバケットのACLレスモード有効/無効を設定する。
     *      <p>本メソッドを呼び出さない場合、ACLレスモードはデフォルト無効。
     *      <p>本メソッドを呼び出しただけでは、サーバに格納されているファイルバケットは更新されない。
     *      <br/>サーバと同期するには、saveBucket()を呼び出す必要がある。
     * @example
     * var bucket = ....;
     * ....
     * var noAcl = true;
     * bucket.setNoAcl(noAcl);
     * @param noAcl {boolean} ACLレスモードを有効にする場合はtrueを指定する。
     * @return {FileBucket} this
     */
    setNoAcl(noAcl: boolean): FileBucket;
    /**
     * @memberOf FileBucket
     * @description
     *      ファイルバケットのACLレスモード有効/無効を取得する。
     * @example
     * var bucket = ....;
     * ....
     * var noAcl = bucket.isNoAcl();
     * @return
     *      {boolean} ファイルバケットがACLレスモード有効の場合はtrueを返す。
     */
    isNoAcl(): boolean;
    /**
     * @memberOf FileBucket
     * @description
     *      ファイルバケットのコンテンツACLを設定する.
     *      <p>本メソッドを呼び出しただけでは、サーバに格納されているファイルバケットは更新されない。
     *      <br/>サーバと同期するには、saveBucket()を呼び出す必要がある。
     * @example
     * var bucket = ....;
     * var acl = new Nebula.Acl();
     * ....
     * acl.addEntry(....);
     * ....
     * bucket.setContentAcl(acl);
     * @param {Acl} acl Nebula.ACL のインスタンス
     * @return {FileBucket} this
     */
    setContentAcl(acl: Acl): FileBucket;
    /**
     * @memberOf FileBucket
     * @description
     *      ファイルバケットのコンテンツACLを取得する.
     *      <p>ファイルバケットのコンテンツACLを取得するには、loadBucket()を使用してサーバのバケット情報をロードしておく必要がある
     * @example
     * var bucket = ....;
     * ....
     * var acl = bucket.getAcl();
     * @return
     *      {Acl} ファイルバケットのコンテンツACL
     */
    getContentAcl(): Acl;
    /**
     * @memberOf FileBucket
     * @description
     *      ファイルバケットに「説明文」を設定する.
     *      <p>本メソッドを呼び出しただけでは、サーバに格納されているファイルバケットは更新されない。
     *      <br/>サーバと同期するには、saveBucket()を呼び出す必要がある。
     * @example
     * var bucket = ....;
     * var acl = new Nebula.Acl();
     * ....
     * acl.addEntry(....);
     * ....
     * bucket.setDescription("このバケットの説明文”);
     * @param {String} description 設定する「説明文」
     * @return {FileBucket} this
     */
    setDescription(description: string): FileBucket;
    /**
     * @memberOf FileBucket
     * @description
     *      ファイルバケットの「説明文」を取得する.
     *      <p>ファイルバケットのコンテンツACLを取得するには、loadBucket()を使用してサーバのバケット情報をロードしておく必要がある
     * @example
     * var bucket = ....;
     * ....
     * var description = bucket.getDescription();
     * @return
     *      {String} ファイルバケットの「説明文」
     */
    getDescription(): string;
    /**
     * @memberOf FileBucket
     * @description
     *      ファイルバケット名を取得する
     * @example
     * var bucket = ....;
     * ....
     * var bucketName = bucket.getBucketName();
     * @return
     *      {String} ファイルバケット名
     */
    getBucketName(): string;
    /**
     * @memberOf FileBucket
     * @description ファイルバケット名を設定する
     * @private
     */
    _setBucketName(name: string): FileBucket;
    private _save;
    /**
     * @memberOf FileBucket
     * @description
     *      ファイルバケットへファイルを新規保存する.
     *      <p>HTML5 File APIに対応しているブラウザ、もしくは Node.js のみで実行可能。
     * @example
     * var bucket = ....;
     * ....
     * var file = ....;
     * ....
     * var meta = new Nebula.FileMetadata();
     * meta.setContentType("image/jpeg");
     * bucket.saveAs("MyFileName.jpg", file, meta)
     *     .then(function(metadata) {...})
     *     .catch(function(err) {...});
     * @param {String} fileName ファイルバケットへ保存するファイル名
     * @param {Object} data 文字列、File/Blobオブジェクト、または Buffer オブジェクト。
     * <p>サーバに保存するファイルのデータを以下のいずれかで指定する。
     * <ul>
     *   <li>保存するファイルにバインドされたFileオブジェクト
     *   <li>保存するファイルのデータ。文字列/Blobオブジェクト/Bufferオブジェクトのいずれか。
     * </ul>
     * @param {FileMetadata} metadata 保存するファイルのメタデータ
     * <p>指定できるメタデータは以下の通りである。(他のメタデータは参照されない)
     * <ul>
     *   <li>ACL (オプション、省略可)
     *   <li>コンテンツタイプ (必須、省略不可)
     * </ul>
     * @param {Callbacks} callbacks コールバック (Option)
     * @return {Promise} callbacksを指定しなかった場合、Promiseオブジェクトを返す。callback指定時は返り値なし(undefined)。
     * <p>処理完了時に渡される値は以下の通り。
     * <ul>
     * <li>成功時: Nebula.FileMetadata インスタンス
     * <li>失敗時: エラー要因(JSON)
     * <pre>
     *   {
     *       "status"        : ステータスコード,
     *       "statusText"    : エラーメッセージ,
     *       "responseText"  : レスポンスメッセージ
     *       "data"          : 引数で指定されたfileName
     *   }
     * </pre>
     * </ul>
     */
    saveAs(fileName: string, data: any, metadata: FileMetadata, callbacks?: Callbacks): Promise<FileMetadata>;
    /**
     * @memberOf FileBucket
     * @description
     *      ファイルバケットのファイルを保存する.
     *      <p>HTML5 File APIに対応しているブラウザ、または Node.js のみで実行可能。
     * @example
     * var bucket = ....;
     * ....
     * var file = ....;
     * ....
     * bucket.save("MyFileName.jpg", file)
     *     .then(function(metadata) {...})
     *     .catch(function(err) {...});
     * @param {String} fileName ファイルバケットへ保存するファイル名
     * @param {Object} data 文字列、File/Blobオブジェクト、または Buffer オブジェクト
     * <p>サーバに保存するファイルのデータを以下のいずれかで指定する。
     * <ul>
     *   <li>保存するファイルにバインドされたFileオブジェクト
     *   <li>保存するファイルのデータ。文字列/Blobオブジェクト/Bufferオブジェクトのいずれか。
     * </ul>
     * @param {Callbacks} callbacks コールバック (Option)
     * @return {Promise} callbacksを指定しなかった場合、Promiseオブジェクトを返す。callback指定時は返り値なし(undefined)。
     * <p>処理完了時に渡される値は以下の通り。
     * <ul>
     * <li>成功時: Nebula.FileMetadata インスタンス
     * <li>失敗時: エラー要因(JSON)
     * <pre>
     *   {
     *       "status"        : ステータスコード,
     *       "statusText"    : エラーメッセージ,
     *       "responseText"  : レスポンスメッセージ
     *       "data"          : 引数で指定されたfileName
     *   }
     * </pre>
     * </ul>
     */
    save(fileName: string, data: any, callbacks?: Callbacks): Promise<FileMetadata>;
    /**
     * @memberOf FileBucket
     * @description
     *      ファイルバケットからファイルを読み込む.
     *      <p>HTML5 File APIに対応しているブラウザ、または Node.js のみで実行可能。
     * @example
     * var bucket = ....;
     * ....
     * bucket.load("MyFile.jpg")
     *     .then(function(blob) {...})
     *     .catch(function(err) {...});
     * @param {String} fileName ファイルバケットから読み込むファイルの名前
     * @param {Callbacks} callbacks コールバック (Option)
     * @return {Promise} callbacksを指定しなかった場合、Promiseオブジェクトを返す。callback指定時は返り値なし(undefined)。
     * <p>処理完了時に渡される値は以下の通り。
     * <ul>
     * <li>成功時: ファイルの内容が格納されたBlobオブジェクト (node.js の場合は Buffer オブジェクト)
     * <li>失敗時: エラー要因(JSON)
     * <pre>
     *   {
     *       "status"        : ステータスコード,
     *       "statusText"    : エラーメッセージ,
     *       "responseText"  : レスポンスメッセージ
     *       "data"          : 引数で指定されたfileName
     *   }
     * </pre>
     * </ul>
     */
    load(fileName: string, callbacks?: Callbacks): Promise<any>;
    /**
     * @memberOf FileBucket
     * @description
     *      ファイルバケットからオプションを指定してファイルを読み込む.
     *      <p>Node.js のみで実行可能。
     * @param {String} fileName ファイルバケットから読み込むファイルの名前
     * @param {Object} options   ファイル取得のパラメータ(オプション)。
     * <p>JSONで指定する。各フィールドの説明は以下の通り。
     * <ul>
     *  <li>"rawRequest"
     *      <p>ファイルをRaw messageとして読み込む場合にtrueを設定する。(オプション)
     *                 <p>trueの場合、extraResponseは無効となる。原則として応答の取得にはPromiseを使用すること。
     *
     *                 <p>HTTP/1.1において、処理が成功した場合、Promise には http.IncomingMessage が返される。
     *                 http.IncomingMessage に対するイベントハンドラを自身で設定、適切にハンドリングすること。
     *                 データ読み込み時は http.IncomingMessage よりレスポンスのステータスを取得、判定を行うこと。
     *
     *                 <p>リクエスト送信が失敗した場合、Promise には error が返される。
     *
     *                 <p>HTTP/2において、処理が成功した場合、Promise には http2.ClientHttp2Stream が返される。
     *                 ClientHttp2Stream に対するイベントハンドラを自身で設定、適切にハンドリングすること。
     *                 HTTP/2のステータスコードを取得するには、'response'イベントの':status'を参照する。
     *                 具体的な指定方法はexamplesを参照。
     *
     *  <li>"extraResponse"
     *      <p>レスポンスにステータスコード、ヘッダを追加する。(オプション)</p>
     *      <p>通常レスポンスにはBuffer オブジェクトを返却するが、
     *      extraResponseをtrueに設定した場合、以下のプロパティが設定されたJSONを返却する。</p>
     *      <ul>
     *          <li>status  : ステータスコード,
     *          <li>headers : レスポンスヘッダ情報を含むオブジェクト,
     *          <li>body    : ファイルデータが格納されたBufferオブジェクト
     *      </ul>
     *  </li>
     *
     *  <li>"ifMatch"
     *      <p>If-Matchヘッダを付与する場合に指定(オプション)
     *              <p>値はファイルのETagを使用する。
     *              サーバのファイルが更新されている場合、エラーを返却する。
     *
     *  <li>"ifRange"
     *      <p>If-Rangeヘッダを付与する場合に指定 (オプション)
     *      <p>値はファイルのETagを使用する。
     *      rangeStart/rangeEndを指定しない場合は無効である。
     *      <p>ETag不一致の場合、rangeStart/rangeEndをは参照せず更新済みの新しいファイルを取得する。
     *      <p>ifRange より ifMatchを優先して評価する。ファイルが更新されている場合でもファイル取得を行うには、ifRangeのみを指定すること。
     *
     *  <li>"rangeStart
     *      <p>取得するファイルの開始位置(オプション)
     *
     *  <li>"rangeEnd"
     *      <p>ファイルの終了位置(オプション)
     *      <p>rangeStartと組み合わせて、"0〜(ファイルサイズ-1)"の範囲で指定を行う。
     *      <p>rangeEndのみ指定した場合は、末尾の取得バイト数を表す。
     *      rangeStart/rangeEndの値をベースにRangeヘッダを付与する。
     *      <p>不正な範囲の場合、サーバでファイルのサイズに合わせて値を変更する場合がある。
     *      メタデータからファイルサイズを検証し、ifMatch、ifRangeと組み合わせて使用することを推奨する。
     *      具体的な指定方法はexamplesを参照。
     * </ul>
     * @param {Callbacks} callbacks コールバック (Option)
     * <ul>
     * <li>optionに {rawRequest:true}を指定した場合、callbacksは指定できない。Promiseを使用すること。
     * </ul>
     * @return {Promise} callbacksを指定しなかった場合、Promiseオブジェクトを返す。callback指定時は返り値なし(undefined)。
     * <p>処理完了時に渡される値は以下の通り。
     * <ul>
     * <li>成功時: option の extraResponse, rawRequest 指定により、渡される値が異なる。
     *     <ul>
     *     <li>a) ファイルのBufferオブジェクト (option の extraResponse, rawRequest を指定しない場合)</li>
     *
     *     <li>b) ファイルデータを含む JSON オブジェクト (optionに {extraResponse:true} を指定した場合)
     *     <pre>
     *       {
     *           status : ステータスコード,
     *           headers : レスポンスヘッダ情報を含むオブジェクト,
     *           body : ファイルデータが格納されたオブジェクト
     *       }
     *
     *       範囲囲指定のオプションを指定した場合、以下statusが返却される。
     *         ・200 ファイル全体を取得
     *         ・206 ファイルの一部取得
     *
     *       headersには以下をヘッダを含む。
     *         ・etag : ファイルのETag。
     *           値はダブルクオーテーション(")で囲まれている。
     *           etag参照時はクオーテーションを削除して使用すること。
     *             例) headers["etag"].replace(/[¥"]/g, "");
     *     </pre>
     *     </li>
     *     <li>c) http.IncomingMessage または http2.ClientHttpStream (option に {rawRequest: true} を指定した場合)</li>
     *     </ul>
     * </li>
     * <li>失敗時: エラー要因(JSON)
     * <pre>
     *     {
     *         "status"        : ステータスコード,
     *         "statusText"    : エラーメッセージ,
     *         "responseText"  : レスポンスメッセージ,
     *         "data"          : 引数で指定されたfileName,
     *     }
     *     範囲指定の読み込みでは以下statusのエラーが発生することがある。
     *     内容に応じて対処を行うこと。
     *         412 : ファイルが更新されているためダウンロード失敗
     *         416 : 範囲指定不正のためダウンロード失敗
     * </pre></li>
     * </ul>
     * @since 7.5.0
     * @example
     * // Raw Requestの例
     * // for HTTP/1.1
     * var bucket = ....;
     * ....
     * // pipe()を使用する場合
     * var writable = fs.createWriteStream(....);
     * bucket.loadWithOptions("MyFile.jpg", {rawRequest: true})
     *     .then((message) => {
     *         message.pipe(writable);
     *     });
     *
     * // 'data'を実装する場合
     * bucket.loadWithOptions("MyFile.jpg", {rawRequest: true})
     *     .then((message) => {
     *         message.on('data', () => {....});
     *         message.on('end', () => {....});
     *         message.on('error', () => {....});
     *         message.on('close', () => {....});
     *     });
     *
     * // for HTTP/2
     * // 'data'を実装する場合
     * var statusCode;
     * bucket.loadWithOptions("MyFile.jpg", {rawRequest: true})
     *     .then((message) => {
     *         message.on('response', (headers, flags) => { statusCode = headers[':status'] });
     *         message.on('data', () => {....});
     *         message.on('end', () => {....});
     *         message.on('error', () => {....});
     *         message.on('close', () => {....});
     *     });
     * @example
     * // start,end 指定の例 詳細はRFC7233を参照
     * // サーバに1000 byteのファイルが格納されている場合
     * // 最初の50byteを取得
     * var options = { rangeStart : 0, rangeEnd: 49 };
     * // 次の50byteを取得
     * options     = { rangeStart : 50, rangeEnd: 99 };
     * // 末尾の50byteを取得する(以下指定は等価である)
     * options     = { rangeStart : 950 };
     * options     = { rangeEnd   : 50 };
     * options     = { rangeStart : 950, rangeEnd: 999 };
     * // 先頭の1byteを指定
     * options     = { rangeStart: 0, rangeEnd: 0 };
     * // 末尾の1byteを指定
     * options     = { rangeEnd: 1 };
     *
     * options["extraResponse"] = true; // ステータスコードなどを含めて取得
     * // APIコール
     * var bucket = ....;
     * ....
     * callbacks = {
     *     // options["extraResponse"] がtrueでない場合、dataにはファイルデータが設定される
     *     success: function(data) {
     *         var status  = data.status;
     *         var headers = data.headers;
     *         var body    = data.body;
     *         ....
     *     },
     *     error: function(err) {....}
     * };
     * bucket.loadWithOptions("MyFile.jpg", options, callbacks);
     */
    loadWithOptions(fileName: string, options?: FileRequestOptions, callbacks?: Callbacks): Promise<any>;
    _load(fileName: string, options?: FileRequestOptions, callbacks?: Callbacks): Promise<any>;
    /**
     * @memberOf FileBucket
     * @description start/end位置からRangeヘッダに指定する値を生成する
     * @private
     */
    static _createRangeValue(start: number, end: number): string;
    /**
     * @memberOf FileBucket
     * @description
     *      ファイルバケットからファイルを削除する.
     * @example
     * var bucket = ....;
     * ....
     * bucket.remove("fileName")
     *     .then(function(fileName) {...})
     *     .catch(function(err) {...});
     * @param {String} fileName ファイルバケットから削除するファイルの名前
     * @param {Callbacks} callbacks コールバック (Option)
     * @return {Promise} callbacksを指定しなかった場合、Promiseオブジェクトを返す。callback指定時は返り値なし(undefined)。
     * <p>処理完了時に渡される値は以下の通り。
     * <ul>
     * <li>成功時: ファイル名(引数で指定されたfileNameと同じ)
     * <li>失敗時: エラー要因(JSON)
     * <pre>
     *     {
     *         "status"        : ステータスコード,
     *         "statusText"    : エラーメッセージ,
     *         "responseText"  : レスポンスメッセージ,
     *         "data"          : 引数で指定されたfileName
     *     }
     * </pre>
     * </ul>
     * @since v4.0.1
     */
    remove(fileName: string, callbacks?: Callbacks): Promise<string>;
    /**
     * @memberOf FileBucket
     * @description
     *      ファイルバケットからファイルを削除する(Deprecated)
     * <p>本APIは Deprecated である。remove() を使用すること。
     * @deprecated since v4.0.1
     */
    delete(fileName: string, callbacks?: Callbacks): Promise<string>;
    /**
     * @memberOf FileBucket
     * @description JSONからFileMetadataインスタンスを生成する
     * @private
     */
    protected _createMetadata(obj: FileMetadataJson): FileMetadata;
    private _publish;
    /**
     * @memberOf FileBucket
     * @description
     *      ファイルバケットのファイルを公開する.
     *      <p>既に公開されたファイルを再公開しても公開 URL は変更されない。
     * @example
     * var bucket = ....;
     * ....
     * bucket.publish("MyFile.jpg")
     *     .then(function(metadata) {...})
     *     .catch(function(err) {...});
     * @param {String} fileName 公開するファイルの名前
     * @param {Callbacks} callbacks コールバック (Option)
     * @return {Promise} callbacksを指定しなかった場合、Promiseオブジェクトを返す。callback指定時は返り値なし(undefined)。
     * <p>処理完了時に渡される値は以下の通り。
     * <ul>
     * <li>成功時: このファイルのメタデータ
     * <li>失敗時: エラー要因(JSON)
     * <pre>
     *    {
     *        "status"        : ステータスコード,
     *        "statusText"    : エラーメッセージ,
     *        "responseText"  : レスポンスメッセージ,
     *        "data"          : 引数で指定されたfileName
     *    }
     * </pre>
     * </ul>
     */
    publish(fileName: string, callbacks?: Callbacks): Promise<FileMetadata>;
    /**
     * @memberOf FileBucket
     * @description
     *      ファイルバケットのファイルを非公開する
     * @example
     * var bucket = ....;
     * ....
     * bucket.unpublish("MyFile.jpg", callbacks)
     *     .then(function(metadata) {...})
     *     .catch(function(err) {...});
     * @param {String} fileName 非公開にするファイルの名前
     * @param {Callbacks} callbacks コールバック (Option)
     * @return {Promise} callbacksを指定しなかった場合、Promiseオブジェクトを返す。callback指定時は返り値なし(undefined)。
     * <p>処理完了時に渡される値は以下の通り。
     * <ul>
     * <li>成功時: このファイルのメタデータ
     * <li>失敗時: エラー要因(JSON)
     * <pre>
     *   {
     *       "status"        : ステータスコード,
     *       "statusText"    : エラーメッセージ,
     *       "responseText"  : レスポンスメッセージ,
     *       "data"          : 引数で指定されたfileName
     *   }</pre>
     * </ul>
     */
    unpublish(fileName: string, callbacks?: Callbacks): Promise<FileMetadata>;
    private _getList;
    /**
     * @memberOf FileBucket
     * @description
     *      ファイルバケットからファイル一覧を取得する
     * @example
     * var bucket = ....;
     * ....
     * bucket.getList()
     *     .then(function(metadataList) {...})
     *     .catch(function(err) {...});
     * @param {Callbacks} callbacks コールバック (Option)
     * @return {Promise} callbacksを指定しなかった場合、Promiseオブジェクトを返す。callback指定時は返り値なし(undefined)。
     * <p>処理完了時に渡される値は以下の通り。
     * <ul>
     * <li>成功時: ファイルのメタデータ(Nebula.FileMetadataインスタンス)の配列
     * <li>失敗時: エラー要因(JSON)
     * </ul>
     */
    getList(callbacks?: Callbacks): Promise<FileMetadata[]>;
    /**
     * @memberOf FileBucket
     * @description
     *      ファイルバケットから公開ファイル一覧を取得する
     * @example
     * var bucket = ....;
     * ....
     * bucket.getPublishedList()
     *     .then(function(metadataList) {...})
     *     .catch(function(err) {...});
     * @param {Callbacks} callbacks コールバック (Option)
     * @return {Promise} callbacksを指定しなかった場合、Promiseオブジェクトを返す。callback指定時は返り値なし(undefined)。
     * <p>処理完了時に渡される値は以下の通り。
     * <ul>
     * <li>成功時: ファイルのメタデータ(Nebula.FileMetadataインスタンス)の配列
     * <li>失敗時: エラー要因(JSON)
     * </ul>
     */
    getPublishedList(callbacks?: Callbacks): Promise<FileMetadata[]>;
    /**
     * @memberOf FileBucket
     * @description
     *      ファイルバケットから指定されたファイルのメタデータを取得する
     * @example
     * var bucket = ....;
     * ....
     * bucket.getMetadata("MyFile.jpg")
     *     .then(function(metadata) {...})
     *     .catch(function(err) {...});
     * @param {String} fileName メタデータを取得するファイルの名前
     * @param {Callbacks} callbacks コールバック (Option)
     * @return {Promise} callbacksを指定しなかった場合、Promiseオブジェクトを返す。callback指定時は返り値なし(undefined)。
     * <p>処理完了時に渡される値は以下の通り。
     * <ul>
     * <li>成功時: ファイルのメタデータ(Nebula.FileMetadataインスタンス)
     * <li>失敗時: エラー要因(JSON)
     * <pre>
     *   {
     *       "status"        : ステータスコード,
     *       "statusText"    : エラーメッセージ,
     *       "responseText"  : レスポンスメッセージ,
     *       "data"          : 引数で指定されたfileName
     *   }</pre>
     * </ul>
     */
    getMetadata(fileName: string, callbacks?: Callbacks): Promise<FileMetadata>;
    /**
     * @memberOf FileBucket
     * @description
     *      ファイルバケットの指定されたファイルのメタデータを更新する
     * @example
     * var bucket = ....;
     * ....
     * var meta = ....;
     * ....
     * bucket.updateMetadata("MyFile.jpg", meta)
     *     .then(function(metadata) {...})
     *     .catch(function(err) {...});
     * @param {String} fileName メタデータを更新するファイルの名前
     * @param {FileMetadata} metadata 更新メタデータ
     * @param {Callbacks} callbacks コールバック (Option)
     * @return {Promise} callbacksを指定しなかった場合、Promiseオブジェクトを返す。callback指定時は返り値なし(undefined)。
     * <p>処理完了時に渡される値は以下の通り。
     * <ul>
     * <li>成功時: ファイルのメタデータ(Nebula.FileMetadataインスタンス)
     * <li>失敗時: エラー要因(JSON)
     * <pre>
     *   {
     *       "status"        : ステータスコード,
     *       "statusText"    : エラーメッセージ,
     *       "responseText"  : レスポンスメッセージ,
     *       "data"          : 引数で指定されたfileName
     *   }
     * </pre>
     * </ul>
     */
    updateMetadata(fileName: string, metadata: FileMetadata, callbacks?: Callbacks): Promise<FileMetadata>;
    private static _checkOfflineService;
    /**
     * @memberOf FileBucket
     * @description
     *      アップロードするファイルを選択する(SDE4SD).
     *      <p>本APIはオフライン(SDE4SD)のみで利用可能
     * @example
     * Nebula.FileBucket.selectUploadFile()
     *     .then(function(fileInfo) {...})
     *     .catch(function(err) {...});
     * @param {Callbacks} callbacks コールバック (Option)
     * @return {Promise} callbacksを指定しなかった場合、Promiseオブジェクトを返す。callback指定時は返り値なし(undefined)。
     * <p>処理完了時に渡される値は以下の通り。
     * <ul>
     * <li>成功時: 選択したファイル情報(以下のJSON形式)
     * <pre>
     * {
     *     "path" : "ファイルのパス情報",
     *     "name" : "ファイル名",
     *     "type" : "コンテンツタイプ"  // ※ コンテンツタイプを特定できない場合は空白
     * }
     * </pre>
     * <li>失敗時: エラー要因(JSON)
     * </ul>
     */
    static selectUploadFile(callbacks?: Callbacks): Promise<FileInfo>;
    protected static _selectUploadFile(service: NebulaService, callbacks?: Callbacks): Promise<FileInfo>;
    /**
     * @memberOf FileBucket
     * @description
     *      ディレクトリを選択する(SDE4SD).
     *      <p>本APIはオフライン(SDE4SD)のみで利用可能
     * @example
     * Nebula.FileBucket.selectDirectory()
     *     .then(function(dir) {...})
     *     .catch(function(err) {...});
     * @param {Callbacks} callbacks コールバック (Option)
     * @return {Promise} callbacksを指定しなかった場合、Promiseオブジェクトを返す。callback指定時は返り値なし(undefined)。
     * <p>処理完了時に渡される値は以下の通り。
     * <ul>
     * <li>成功時: 選択したディレクトリへのパス(文字列)
     * <li>失敗時: エラー要因(JSON)
     * </ul>
     */
    static selectDirectory(callbacks?: Callbacks): Promise<string>;
    protected static _selectDirectory(service: NebulaService, callbacks?: Callbacks): Promise<string>;
    private _uploadFile;
    /**
     * @memberOf FileBucket
     * @description
     *      ファイルを新規アップロードする(SDE4SD).
     *      <p>本APIはオフライン(SDE4SD)のみで利用可能
     * @example
     * var bucket = ....;
     * Nebula.FileBucket.selectUploadFile()
     *     .then(function(fileInfo) {
     *         var meta = new Nebula.FileMetadata();
     *         meta.setContentType(fileInfo.type);
     *         meta.setCacheDisabled(false);
     *
     *         var callbacks = {
     *             success: function(metadata) {....},
     *             error: function(err) {....}
     *         };
     *         bucket.uploadNewFile(fileInfo.name, fileInfo.path, meta, callbacks);
     *     })
     *     .catch(function(err) {....});
     * @param {String} fileName ファイルバケットへ保存するファイル名
     * @param {String} filePath 保存する元ファイルの絶対パス(ファイル名含む)
     * @param {FileMetadata} metadata 保存するファイルのメタデータ
     * <br>指定できるメタデータは以下の通りである。(他のメタデータは参照されない)
     * <ul>
     *   <li>ACL (オプション、省略可)</li>
     *   <li>コンテンツタイプ (必須、省略不可)</li>
     *   <li>キャッシュフラグ (必須、省略不可)</li>
     * </ul>
     * @param {Callbacks} callbacks コールバック (Option)
     * @return {Promise} callbacksを指定しなかった場合、Promiseオブジェクトを返す。callback指定時は返り値なし(undefined)。
     * <p>処理完了時に渡される値は以下の通り。
     * <ul>
     * <li>成功時: Nebula.FileMetadata インスタンス
     * <li>失敗時: エラー要因(JSON)
     * <pre>
     *   {
     *       "status"        : ステータスコード,
     *       "statusText"    : エラーメッセージ,
     *       "responseText"  : レスポンスメッセージ,
     *       "data"          : 引数で指定されたfileName
     *   }
     * </pre>
     * </ul>
     */
    uploadNewFile(fileName: string, filePath: string, metadata: FileMetadata, callbacks?: Callbacks): Promise<FileMetadata>;
    /**
     * @memberOf FileBucket
     * @description
     *      ファイルを更新アップロードする(SDE4SD).
     *      <p>本APIはオフライン(SDE4SD)のみで利用可能
     * @example
     * var bucket = ....;
     * Nebula.FileBucket.selectUploadFile()
     *     .then(success: function(fileInfo) {
     *         var meta = new Nebula.FileMetadata();
     *         meta.setContentType(fileInfo.type);
     *         meta.setCacheDisabled(false);
     *
     *         var callbacks = {
     *             success: function(metadata) {....},
     *             error: function(err) {....}
     *         };
     *         bucket.uploadUpdateFile(fileInfo.name, fileInfo.path, meta, callbacks);
     *     })
     *     .catch(function(err) {....});
     * @param {String} fileName ファイルバケットへ保存するファイル名
     * @param {String} filePath 保存する元ファイルの絶対パス(ファイル名含む)
     * @param {FileMetadata} metadata 保存するファイルのメタデータ。
     * <br>指定できるメタデータは以下の通りである。(他のメタデータは参照されない)
     * <ul>
     *   <li>ACL (オプション、省略可)</li>
     *   <li>コンテンツタイプ (必須、省略不可)</li>
     *   <li>キャッシュフラグ (必須、省略不可)</li>
     * </ul>
     * @param {Callbacks} callbacks コールバック (Option)
     * @return {Promise} callbacksを指定しなかった場合、Promiseオブジェクトを返す。callback指定時は返り値なし(undefined)。
     * <p>処理完了時に渡される値は以下の通り。
     * <ul>
     * <li>成功時: Nebula.FileMetadata インスタンス
     * <li>失敗時: エラー要因(JSON)
     * <pre>
     *   {
     *       "status"        : ステータスコード,
     *       "statusText"    : エラーメッセージ,
     *       "responseText"  : レスポンスメッセージ,
     *       "data"          : 引数で指定されたfileName
     *   }
     * </pre>
     * </ul>
     */
    uploadUpdateFile(fileName: string, filePath: string, metadata: FileMetadata, callbacks?: Callbacks): Promise<FileMetadata>;
    /**
     * @memberOf FileBucket
     * @description
     *      ファイルをダウンロードする (SDE4SD).
     *      <p>本APIはオフライン(SDE4SD)のみで利用可能
     * @example
     * var bucket = ....;
     * ....
     * bucket.download("MyFile.jpg", "/sdcard/MyFile.jpg")
     *     .then(function(fileName) {...})
     *     .catch(function(err) {...});
     * @param {String} fileName ファイルバケットからダウンロードするファイルの名前
     * @param {String} filePath ダウンロードするファイルの保存先(ファイル名を含む絶対パス)
     * @param {Callbacks} callbacks コールバック (Option)
     * @return {Promise} callbacksを指定しなかった場合、Promiseオブジェクトを返す。callback指定時は返り値なし(undefined)。
     * <p>処理完了時に渡される値は以下の通り。
     * <ul>
     * <li>成功時: ダウンロードが完了したファイル名
     * <li>失敗時: エラー要因(JSON)
     * <pre>
     *   {
     *       "status"        : ステータスコード,
     *       "statusText"    : エラーメッセージ,
     *       "responseText"  : レスポンスメッセージ,
     *       "data"          : 引数で指定されたfileName
     *   }
     * </pre>
     * </ul>
     */
    downloadFile(fileName: string, filePath: string, callbacks?: Callbacks): Promise<string>;
    /**
     * @memberOf FileBucket
     * @description
     *      ファイルのアップロードまたはダウンロードをキャンセルする
     *      <br/><strong>現在、本APIは利用できません.</strong>
     *      <p>本APIはキャンセル要求を受け付けるだけであり、キャンセルされたことを保障するものではない。
     *      <br/>アップロードまたはダウンロードがキャンセルされた場合は、
     *           各API(uploadNewFile(), uploadUpdateFile(), downloadFile())のエラーコールバックが呼ばれる。
     *      <p>本APIはオフラインのみで利用可能
     * @example
     * var bucket = ....;
     * ....
     * bucket.download("MyFile.jpg", "/sdcard/MyFile.jpg")
     *     .then(function(fileName) {...});
     *     .catch(function(err) {...});
     * ....
     * bucket.requestCancel(fileName)
     *     .then(function(fileName) {...});
     *     .catch(function(err) {...});
     * @param {String} fileName ファイルバケットからダウンロードするファイルの名前
     * @param {Callbacks} callbacks コールバック (Option)
     * @return {Promise} callbacksを指定しなかった場合、Promiseオブジェクトを返す。callback指定時は返り値なし(undefined)。
     * <p>処理完了時に渡される値は以下の通り。
     * <ul>
     * <li>成功時: キャンセル要求したファイル名
     * <li>失敗時: エラー要因(JSON)
     * <pre>
     *   {
     *       "status"        : ステータスコード,
     *       "statusText"    : エラーメッセージ,
     *       "responseText"  : レスポンスメッセージ,
     *       "data"          : 引数で指定されたfileName
     *   }
     * </pre>
     * </ul>
     * @private
     */
    requestCancel(fileName: string, callbacks?: Callbacks): Promise<string>;
}
/** @private */
export declare const declareFileBucket: (_service: NebulaService) => void;
/**
 * @private
 */
export declare class CustomApi {
    _service: NebulaService;
    apiname: string;
    method: string;
    subpath: string;
    path: string;
    responseType: string;
    contentType: string;
    headers: {
        [index: string]: string;
    };
    queryParams: {
        [index: string]: string;
    };
    receiveResponseHeaders: boolean;
    /**
     * @class CustomApi
     * @classdesc カスタムAPIクラス
     * @description カスタムAPIクラスインスタンスを生成する
     * @example
     * var customApi = new Nebula.CustomApi("hello", "GET", "sayHello");
     * @param {String} apiname API名
     * @param {String} method メソッド (GET/POST/PUT/DELETE のいずれか)
     * @param {String} subpath サブパス。省略時は null。
     */
    constructor(apiname: string, method: string, subpath?: string, service?: NebulaService);
    /**
     * @memberOf CustomApi
     * @description リクエストヘッダをクリアする (Content-Type を除く)
     * @returns {CustomApi} this
     */
    clearHeaders(): void;
    /**
     * @memberOf CustomApi
     * @description リクエスト Content-Type を指定する
     * @param contentType Content-Type
     * @returns {CustomApi} this
     */
    setContentType(contentType: string): CustomApi;
    /**
     * @memberOf CustomApi
     * @description リクエストヘッダを追加する
     * @param name ヘッダ名
     * @param value ヘッダ値
     * @returns {CustomApi} this
     */
    addHeader(name: string, value: string): CustomApi;
    /**
     * @memberOf CustomApi
     * @description クエリパラメータを追加する
     * @param {string} name
     * @param {string} value
     * @returns {CustomApi}
     */
    addQueryParam(name: string, value: string): CustomApi;
    /**
     * @memberOf CustomApi
     * @desciption 想定するレスポンスをバイナリに設定する。
     * レスポンスは blob または buffer で返却される。
     * @return {CustomApi} this
     */
    setBinaryResponse(): CustomApi;
    /**
     * @memberOf CustomApi
     * @description レスポンスヘッダ受信設定を行う(Node.jsのみ)。
     * <p>
     * true に設定すると、execute 成功時の応答は
     * {body: ..., headers: {...}, status: statusCode}
     * 形式となる。
     * <p>
     * ブラウザ(XHR)の場合は、headers は文字列(全ヘッダ連結したもの)、
     * Node.js の場合は headers はヘッダ名をキーとした Object となる。
     * @param receive true の場合はレスポンスヘッダを受信する
     */
    setReceiveResponseHeaders(receive: boolean): CustomApi;
    /**
     * @memberOf CustomApi
     * @description カスタムAPIの呼び出し
     * @param {Object} data API呼び出しデータ
     * <ul>
     *   <li>メソッドが GET/DELETE の場合、データはクエリパラメータに追加格納される。
     *   <li>メソッドが POST/PUT の場合、データはボディに JSON 形式で格納される。
     * </ul>
     * @param {Callbacks} callbacks 応答コールバック (Option)
     * @return {Promise} callbacksを指定しなかった場合、Promiseオブジェクトを返す。callback指定時は返り値なし(undefined)。
     * <p>処理完了時に渡される値は以下の通り。
     * <ul>
     * <li>成功時: サーバ応答データ。
     *     <ul>
     *     <li>テキストデータの場合は文字列(JSONの場合でも)。
     *     <li>ファイルの場合は Blob または Buffer オブジェクト。
     *     <li>レスポンスヘッダ受信設定をしている場合は、オブジェクトが返却され、
     *       body にサーバ応答データ、headers にヘッダが格納される。</li>
     *     </ul>
     * <li>失敗時: エラー要因(JSON)
     * </ul>
     */
    execute(data: object, callbacks?: Callbacks): Promise<string | object>;
    /**
     * @memberOf CustomApi
     * @description
     *      カスタムAPIの呼び出し(raw message版)。Node.js専用。
     *      <p>HTTP/1.1において、処理が成功した場合、Promise には http.IncomingMessage が返される。
     *      http.IncomingMessage に対するイベントハンドラを自身で設定、適切にハンドリングすること。
     *      データ読み込み時は http.IncomingMessage よりレスポンスのステータスを取得、判定を行うこと。
     *      <p>リクエスト送信が失敗した場合、Promise には error が返される。
     *      <p>HTTP/2において、処理が成功した場合、Promise には http2.ClientHttp2Stream が返される。
     *      ClientHttp2Stream に対するイベントハンドラを自身で設定、適切にハンドリングすること。
     *      HTTP/2のステータスコードを取得するには、'response'イベントの':status'を参照する。
     * @example
     * var customApi = ....;
     *
     * // for HTTP/1.1
     * // pipe()を使用する場合
     * var writable = fs.createWriteStream(....);
     * customApi.executeRaw()
     *     .then((message) => {
     *         message.pipe(writable);
     *     });
     *
     * // 'data'を実装する場合
     * customApi.executeRaw()
     *     .then((message) => {
     *         message.on('data', () => {....});
     *         message.on('end', () => {....});
     *         message.on('error', () => {....});
     *         message.on('close', () => {....});
     *     });
     *
     * // for HTTP/2
     * var statusCode;
     * customApi.executeRaw()
     *     .then((message) => {
     *         message.on('response', (headers, flags) => { statusCode = headers[':status'] });
     *         message.on('data', () => {....});
     *         message.on('end', () => {....});
     *         message.on('error', () => {....});
     *         message.on('close', () => {....});
     *     });
     * @param {Object} data API呼び出しデータ
     * @return {Promise} Promise
     * @since 7.5.0
     */
    executeRaw(data: object): Promise<any>;
    _execute(data: object, rawMessage: boolean, callbacks?: Callbacks): Promise<any>;
}
/** @private */
export declare const declareCustomApi: (_service: NebulaService) => void;
/** @private ApnsFieldsType */
export interface ApnsFieldsType {
    badge?: number;
    sound?: string;
    "content-available"?: number;
    category?: string;
}
/**
 * @class ApnsFields
 * @memberOf PushSender
 * @description APNs用Push送信パラメータ
 * @example
 * var apns = new Nebula.PushSender.ApnsFields();
 * apns.badge = 5;
 * apns.sound = "sound1.aiff";
 * apns.contentAvailable = 1;
 * apns.category = "Information";
 * var push = new Nebula.PushSender();
 * push.apnsFields = apns;
 * @since v4.0.0
 */
export declare class ApnsFields {
    _fields: ApnsFieldsType;
    constructor();
    /**
     * バッジカウント
     * @name PushSender.ApnsFields#badge
     * @type number
     * @default undefined
     */
    badge: number;
    /**
     * @description Application Bundle 内のサウンドファイル名
     * @name PushSender.ApnsFields#sound
     * @type String
     * @default undefined
     */
    sound: string;
    /**
     * @description 1 にセットすると、バックグランドPushを有効にする
     * @name PushSender.ApnsFields#contentAvailable
     * @type number
     * @default undefined
     */
    contentAvailable: number;
    /**
     * @description Notificationカテゴリ
     * @name PushSender.ApnsFields#category
     * @type String
     * @default null
     */
    category: string;
    private _isInteger;
}
/** @private */
export interface GcmFieldsType {
    title?: string;
    uri?: string;
}
/**
 * @class GcmFields
 * @memberOf PushSender
 * @description FCM(旧GCM)用Push送信パラメータ
 * @example
 * var gcm = new Nebula.PushSender.GcmFields();
 * gcm.title = "title";
 * gcm.uri = "http://www.nebula.test.com";
 * var push = new Nebula.PushSender();
 * push.gcmFields = gcm;
 * @since v4.0.0
 */
export declare class GcmFields {
    _fields: GcmFieldsType;
    constructor();
    /**
     * @description システムバーに表示するタイトル
     * @name PushSender.GcmFields#title
     * @type String
     * @default undefined
     */
    title: string;
    /**
     * @description 通知を開いたときに起動するURI
     * @name PushSender.GcmFields#uri
     * @type String
     * @default undefined
     */
    uri: string;
}
/** @private */
export interface SseFieldsType {
    sseEventId?: string;
    sseEventType?: string;
}
/**
 * @class SseFields
 * @memberOf PushSender
 * @description SSE用Push送信パラメータ
 * @example
 * var sse = new Nebula.PushSender.SseFields();
 * sse.eventId = "event01";
 * sse.eventType = "Information";
 * var push = new Nebula.PushSender();
 * push.sseFields = sse;
 * @since v4.0.0
 */
export declare class SseFields {
    _fields: SseFieldsType;
    constructor();
    /**
     * @description イベントID
     * @name PushSender.SseFields#eventId
     * @type String
     * @default null
     */
    eventId: string;
    /**
     * @description イベントタイプ
     * @name PushSender.SseFields#eventType
     * @type String
     * @default null
     */
    eventType: string;
}
export declare class PushSender {
    _service: NebulaService;
    _clause: Clause;
    _message: string;
    _allowedReceivers: string[];
    _apnsFields: ApnsFields;
    _gcmFields: GcmFields;
    _sseFields: SseFields;
    static ApnsFields: typeof ApnsFields;
    static GcmFields: typeof GcmFields;
    static SseFields: typeof SseFields;
    /**
     * @class PushSender
     * @description Push送信クラス
     * @example
     * var push = new Nebula.PushSender();
     * @since v4.0.0
     */
    constructor(service?: NebulaService);
    /**
     * @method
     * @name PushSender#send
     * @description Push送信する。
     * @param {Callbacks} callbacks 応答コールバック
     * @return {Promise} callbacksを指定しなかった場合、Promiseオブジェクトを返す。callback指定時は返り値なし(undefined)。
     * <p>処理完了時に渡される値は以下の通り。
     * <ul>
     * <li>成功時: Pushリクエストの結果(JSON)
     * <pre>
     * {
     *     "result": "ok",
     *     "installations": 条件に合致したインスタレーションの数
     * }
     * </pre>
     * </li>
     * <li>失敗時: エラー要因(JSON)
     * <pre>
     * {
     *     "status"        : ステータスコード,
     *     "statusText"    : エラーメッセージ,
     *     "responseText"  : レスポンスメッセージ
     * }
     * </pre>
     * </li>
     * </ul>
     */
    send(callbacks?: Callbacks): Promise<any>;
    private _toJson;
    private _copyKeys;
    /**
     * @description 送信先条件
     * @name PushSender#clause
     * @type Clause
     * @default null
     */
    clause: Clause;
    /**
     * @description 送信メッセージ
     * @name PushSender#message
     * @type String
     * @default null
     */
    message: string;
    /**
     * @description 受信可能なユーザ・グループの一覧
     * @name PushSender#allowedReceivers
     * @type Array
     * @default null
     */
    allowedReceivers: string[];
    /**
     * @description APNs 固有パラメータ
     * @name PushSender#apnsFields
     * @type PushSender.ApnsFields
     * @default null
     */
    apnsFields: ApnsFields;
    /**
     * @description GCM 固有パラメータ
     * @name PushSender#gcmFields
     * @type PushSender.GcmFields
     * @default null
     */
    gcmFields: GcmFields;
    /**
     * @description SSE 固有パラメータ
     * @name PushSender#sseFields
     * @type PushSender.SseFields
     * @default null
     */
    sseFields: SseFields;
}
/** @private */
export declare const declarePushSender: (_service: NebulaService) => void;
export interface BatchRequestEntry {
    op: string;
    _id?: string;
    etag?: string;
    data?: JsonObject;
}
export interface BatchRequestJson {
    requests: BatchRequestEntry[];
}
export interface BatchResponseJson {
    results: JsonObject[];
    failedCount: number;
}
/**
 * @class バッチリクエスト クラス
 * @name BatchRequest
 * @description
 * オブジェクトストレージに対するバッチリクエスト。
 * {@link ObjectBucket}.batch() で使用する。
 * @example
 * var batchReq = new Nebula.BatchRequest();
 * @since v4.0.0
 */
export declare class BatchRequest {
    requests: BatchRequestEntry[];
    json: BatchRequestJson;
    constructor();
    /**
     * @memberOf BatchRequest
     * @description INSERTリクエストを追加する
     * @param {Object} object 追加したいオブジェクト
     * @return なし
     */
    addInsertRequest(object: JsonObject): void;
    /**
     * @memberOf BatchRequest
     * @description UPDATEリクエストを追加する
     * @param {Object} object 更新したいオブジェクト。
     * _id プロパティは必須。
     * etag プロパティが存在する場合は楽観ロック付きで更新する。
     * @return なし
     */
    addUpdateRequest(object: JsonObject): void;
    /**
     * @memberOf BatchRequest
     * @description DELETEリクエストを追加する
     * @param {Object} object 削除したいオブジェクト。
     * _id プロパティのみ必須。
     * etag プロパティが存在する場合は楽観ロック付きで削除する。
     * @return なし
     */
    addDeleteRequest(object: JsonObject): void;
}
/**
 * @class ローカルストレージ実装(In Memory, for Node.js)
 * @private
 */
export declare class LocalStorageInMemory {
    data: any;
    constructor();
    getItem(key: string): any;
    setItem(key: string, value: any): void;
    removeItem(key: string): void;
}
/**
 * クライアント証明書オプション (Node.js only)
 * tls.connect() オプションのサブセット。
 * @private
 */
export interface ClientCertOptions {
    pfx?: string | Buffer;
    passphrase?: string;
    key?: string | string[] | Buffer | Buffer[];
    cert?: string | string[] | Buffer | Buffer[];
    ca?: string | Buffer | Array<string | Buffer>;
}
/**
 * @class _NebulaConfig オブジェクトクラス
 * @private
 */
export declare class NebulaConfig {
    tenant: string;
    appId: string;
    appKey: string;
    baseUri: string;
    offline: boolean;
    allowSelfSignedCert: boolean;
    serviceId: string;
    debugMode: string;
    clientCertOptions: ClientCertOptions;
    enableHttp2: boolean;
    constructor(params: any);
}
/**
 * BaaS初期化パラメータ
 */
export interface NebulaInitParam {
    tenant: string;
    appId: string;
    appKey: string;
    baseUri: string;
    offline?: boolean;
    allowSelfSignedCert?: boolean;
    serviceId?: string;
    debugMode?: string;
    enableHttp2?: boolean;
}
/**
 * プロキシサーバ設定
 */
export interface ProxyServer {
    host: string;
    port: number;
}
/**
 * @class NebulaService
 * @classdesc JavaScript SDK メインサービスクラス
 * @description NebulaService コンストラクタ。
 * <p>
 * NebulaService インスタンスを生成する。生成したインスタンス毎に異なるテナント/アプリに接続できる。
 * {@link Nebula} はデフォルトの NebulaService インスタンスである。
 * @example
 * var service2 = new Nebula.NebulaService();
 */
export declare class NebulaService {
    _config: NebulaConfig;
    [index: string]: any;
    User: typeof User;
    Group: typeof Group;
    ObjectBucket: typeof ObjectBucket;
    FileBucket: typeof FileBucket;
    CustomApi: typeof CustomApi;
    PushSender: typeof PushSender;
    Acl: typeof Acl;
    HttpRequest: typeof HttpRequest;
    NebulaService: typeof NebulaService;
    AclPermission: typeof AclPermission;
    AclGroup: typeof AclGroup;
    RegexOption: typeof RegexOption;
    Clause: typeof Clause;
    ObjectQuery: typeof ObjectQuery;
    FileMetadata: typeof FileMetadata;
    _SdeRequest: typeof _SdeRequest;
    _SdeNetworkEventListener: typeof _SdeNetworkEventListener;
    _SdeSyncEventListener: typeof _SdeSyncEventListener;
    BatchRequest: typeof BatchRequest;
    AccountLink: typeof AccountLink;
    _localStorage: any;
    /**
     * @memberOf NebulaService
     * @description バケットモード - オンラインモード
     * @const
     */
    BUCKET_MODE_ONLINE: number;
    /**
     * @memberOf NebulaService
     * @description バケットモード - レプリカモード
     * @const
     */
    BUCKET_MODE_REPLICA: number;
    /**
     * @memberOf NebulaService
     * @description バケットモード - ローカルモード
     * @const
     */
    BUCKET_MODE_LOCAL: number;
    /** @private */
    constructor();
    /**
     * @description REST API のバージョン番号を返す
     * @private
     */
    getRestApiVersion(): number;
    /**
     * @memberOf NebulaService
     * @description テナントIDを取得する
     * @return {string} テナントID
     */
    getTenantID(): string;
    /**
     * @memberOf NebulaService
     * @description エンドポイントURLを取得する
     * @return {string} エンドポイントURL
     */
    getBaseUri(): string;
    /**
     * @memberOf NebulaService
     * @description アプリケーションIDを取得する
     * @return {string} アプリケーションID
     */
    getAppID(): string;
    /**
     * @memberOf NebulaService
     * @description アプリケーションキーを取得する
     * @return {string} アプリケーションキー
     */
    getAppKey(): string;
    /**
     * @memberOf NebulaService
     * @description アプリケーションキーを変更する
     * @param {string} key アプリケーションキー
     * @return {NebulaService} this
     */
    setAppKey(key: string): NebulaService;
    /**
     * @memberOf NebulaService
     * @description サービスIDを返す
     * @return {string} サービスID
     */
    getServiceID(): string;
    /**
     * @memberOf NebulaService
     * @description ログ出力レベルを返す
     * @private
     */
    getDebugMode(): string;
    /**
     * @memberOf NebulaService
     * @description オフライン機能の有効または無効を返す
     * @private
     */
    isOffline(): boolean;
    /**
     * @memberOf NebulaService
     * @description 自己署名証明書の有効または無効を返す
     * SDE for SmartDevice、Node.js使用時(https Proxy未使用)の場合のみ有効
     * @private
     */
    isAllowSelfSignedCert(): boolean;
    /**
     * @memberOf NebulaService
     * @description クライアント証明書の設定を行う (Node.js使用時のみ有効)。
     * <p>
     * https Proxyを使用する場合、本設定は無効である。NebulaService#setHttpsProxy()のoptionsに証明書の設定を行うこと。
     * @param {Object} certInfo 証明書情報
     * <p>pfxとpassphrase(またはkeyとcert),ca を指定する。
     * pfxとcert/keyを同時に指定した場合の動作は保証しない。
     * nullを指定した場合は証明書の設定を解除する。
     * @example
     * // p12(pfx)形式のクライアント証明書(証明書/秘密鍵)を指定、p12ファイルのパスフレーズを指定
     * // 信頼するCA証明書として、2件を指定する場合
     * service.setClientCertificate({
     *   pfx: fs.readFileSync('clientCertificate.p12'),
     *   passphrase: 'password',
     *   ca: [fs.readFileSync('caCert1.pem'), fs.readFileSync('caCert2.pem')]
     * });
     *
     * // pem形式のクライアント証明、キーを使用。CA証明書を1件指定
     * service.setClientCertificate({
     *   cert: fs.readFileSync('clientCert.pem'),
     *   key: fs.readFileSync('clientKey.pem'),
     *   ca: fs.readFileSync('caCert1.pem')
     * });
     * @return {NebulaService} this
     */
    setClientCertificate(certInfo: ClientCertOptions): NebulaService;
    /**
     * @memberOf NebulaService
     * @description client証明書の設定が有効または無効を返す(Node.js使用時のみ有効)。
     * <p>
     * https Proxyを使用する場合、本設定は無効である。
     * @returns {boolean} 証明書設定済みならばtrue
     */
    isClientCertSet(): boolean;
    /**
     * @memberOf NebulaService
     * @description カレントユーザのログイン情報を返す。
     * 未ログイン、またはセッショントークンが有効期限切れの場合は null を返す。
     * @returns {Object} ユーザ情報。_id, username, email, sessionToken, expire, options, groups フィールドが含まれる。
     */
    getCurrentUser(): UserJson;
    /**
     * @memberOf NebulaService
     * @description カレントユーザのログイン情報をセットする。
     * <p>ブラウザでは local storage に永続化され、NebulaService 間で共有される。
     * Node.js では NebulaService 内(メモリ)に個別に保持される。
     * @param user {User} ユーザ
     * @return {NebulaService} this
     */
    setCurrentUser(user: User): NebulaService;
    /**
     * @memberOf NebulaService
     * @description セッショントークンをセットする。セッショントークンの有効期限は無期限扱い。
     * <p>ユーザがログイン済みの場合は、セッショントークンのみが変更される。
     * 未ログインの場合は、ダミーユーザが保存される (セッショントークン以外のフィールドは空)。
     * <p>ブラウザでは local storage に永続化され、NebulaService 間で共有される。
     * Node.js では NebulaService 内(メモリ)に個別に保持される。
     * @param {string} sessionToken セッショントークン
     * @return {NebulaService} this
     */
    setSessionToken(sessionToken: string): NebulaService;
    /**
     * @memberOf NebulaService
     * @description カレントユーザのログイン情報を破棄する
     * @return {NebulaService} this
     */
    removeCurrentUser(): NebulaService;
    _userItemKey(): string;
    /**
     * @memberOf NebulaService
     * @description HTTP/2の有効/無効を返却する (Node.js使用時のみ有効)<br>
     * HTTP/2 を使用する場合は、Node.js v8.4 以上が必要。<br>
     * @returns {boolean} HTTP/2を使用する場合は trueを返却する。
     */
    getHttp2(): boolean;
    /**
     * @memberOf NebulaService
     * @description HTTP2 の有効/無効を指定する。(Node.js使用時のみ有効)<br>
     * HTTP/2 を使用する場合は、Node.js v8.4 以上が必要。<br>
     * HTTP/2使用時は、Proxy({@link NebulaService#setHttpProxy}、{@link NebulaService#setHttpsProxy})は無効である。
     * @param {boolean} enable HTTP/2を使用する場合はtrueを設定する。
     */
    setHttp2(enable: boolean): void;
    /**
     * @memberOf NebulaService
     * @description MBaaS JavaScript SDK 初期化
     * <p>
     * ・MBaaS JavaScript SDK（以降、SDKと称す）を初期化する。<br>
     * ・アプリケーションは、SDK の初回利用またはパラメータ変更を行う際に呼び出さなければならない。
     * </pre>
     * @param {Object} params MBaaS JavaScript SDK 初期化パラメータ
     * <p>初期化パラメータをJSON 形式で指定する。JSONプロパティは以下の通り。
     *  <ul>
     *     <li>tenant (string) （必須）
     *       <p>テナント毎に割り当てられるユニークなID
     *     <li>appId  (string) （必須）
     *       <p>アプリケーション毎に割り当てられるユニークなID
     *     <li>appKey (string) (必須)
     *       <p>アプリケーション毎に割り当てられる秘密キー
     *     <li>baseUri (string)（必須）
     *       <p>MBaaS REST API のエンドポイントURL
     *     <li>offline (boolean)（オプション, 初期値：false）
     *       <p>オフライン機能の指定。
     *       <p>オフライン機能を利用する場合はtrue を指定する。
     *     <li>allowSelfSignedCert (boolean)（オプション, 初期値：false）
     *       <p>自己署名証明書の使用を認める指定。
     *       <p>オフラインモード使用時(SDE for SmartDevice使用時)、
     *       及びNode.js使用時(Https Proxy未使用時)のみ有効。
     *       (Node.jsでHttps Proxy使用時は、NebulaService#setHttpsProxy()を参照して設定を行うこと)
     *       <p>SSL接続に自己署名証明書を使用しているMBaaSサーバを
     *       利用する場合はtrue を指定する。
     *     <li>serviceId  (string)（オプション）
     *       <p>NebulaService毎に割り当てられるユニークなID
     *       <p>マルチテナント機能を使用して複数のNebulaService(インスタンス)を生成する場合等に使用。
     *       本IDはログイン情報キャッシュ時のKey情報に利用される。
     *     <li>debugMode (string)（オプション）
     *       <p>ログ出力レベル。
     *       <p>"release", "debug" のいずれかを指定
     *       <ul>
     *         <li>debug は、コンソール上にデバッグログを出力する。
     *         <li>release は、クリティカルなエラー以外のコンソール上にデバッグログを出力しない。
     *       </ul>
     *     <li>enableHttp2 (boolean)(オプション, 初期値: false)
     *       <p>HTTP/2使用設定
     *       <p>Node.js使用時(v8.4.0以降)のみ有効。
     *       通信にHTTP/2を利用する場合はtrueを指定する。
     * </ul>
     * @return {NebulaService} this
     */
    initialize(params: NebulaInitParam): NebulaService;
    /**
     * @memberOf NebulaService
     * @description ログインキャッシュ有効期限の設定（オフライン機能限定）
     * <p>
     * ・オフライン用ログインキャッシュ有効期限を設定する。
     * @param {number} expire ログインキャッシュ有効期限（秒）
     * <p>ログインキャッシュ有効期限を指定する。
     * デフォルトは、「259200秒（72時間）」である。
     * @param {Callbacks} callbacks コールバック (Option)
     * @return {Promise<any>} Promise
     */
    setLoginCacheValidTime(expire: number, callbacks?: Callbacks): Promise<void>;
    /**
     * @memberOf NebulaService
     * @description ログインキャッシュ有効期限の取得（オフライン機能限定）
     * <p>
     * ・オフライン用ログインキャッシュ有効期限を取得する。
     * @param {Callbacks} callbacks コールバック (Option)
     * @return {Promise<any>} Promise
     * <p>処理完了時に渡される値は以下の通り。
     * <ul>
     * <li>成功時: ログインキャッシュ有効期限（秒）
     * <li>失敗時: エラー要因(JSON)
     * </ul>
     */
    getLoginCacheValidTime(callbacks?: Callbacks): Promise<number>;
    /**
     * @memberOf NebulaService
     * @description ネットワークイベントリスナの登録（オフライン機能限定）
     * <p>
     * ・ネットワークの接続状態変更イベントを受け取るリスナーを設定する。
     * @param {Object} listener ネットワークイベントリスナ
     * <ul>
     * <li>listener には、イベント発生時のコールバックを指定する。
     * <pre>
     *     {
     *         onNetworkStateChanged : function(isOnline) {
     *             // ネットワークの接続状態が変更されたときに呼び出される
     *             // isOnline : trueはオンライン状態、falseはオフライン状態
     *         }
     *     }
     * </pre>
     * <li>すでに登録している場合は、上書きされる。
     * <li>登録を取り消す場合は、listener に null を指定する。
     * </ul>
     * @return {NebulaService} this
     */
    setNetworkEventListener(listener: NetworkEventListener): NebulaService;
    /**
     * @memberOf NebulaService
     * @description HTTP プロキシを設定する (Node.js専用)。
     * <p>
     * 注: 本設定はグローバル設定である(NebulaService毎ではない)
     * @param {Object} proxy プロキシ設定。host, port を指定する。
     * @example
     * Nebula.setHttpProxy({ host: 'proxysv.example.com', port: 8080});
     */
    setHttpProxy(proxy: ProxyServer): void;
    /**
     * @memberOf NebulaService
     * @description HTTPS プロキシを設定する (Node.js専用)。
     * <p>
     * 注: 本設定はグローバル設定である(NebulaService毎ではない)
     * @param {Object} proxy プロキシ設定。host, port を指定する。
     * @param {Object} options https.request() に引き渡すオプション(省略可)。
     * <p>
     * クライアント証明書認証に使用する証明書の設定などを行う。
     * 使用方法はExampleを参照のこと。
     * @example
     * // https Proxyを指定する
     * Nebula.setHttpsProxy({ host: 'proxysv.example.com', port: 8080});
     *
     * // p12(pfx)形式のクライアント証明書(証明書/秘密鍵)を指定、p12ファイルのパスフレーズを指定
     * // 信頼するCA証明書として、2件を指定する場合
     * Nebula.setHttpsProxy({ host: 'proxysv.example.com', port: 8080},
     * {
     *   pfx: fs.readFileSync('clientCertificate.p12'),
     *   passphrase: 'password',
     *   ca: [fs.readFileSync('caCert1.pem'), fs.readFileSync('caCert2.pem')]
     * });
     *
     * // pem形式のクライアント証明、キーを使用。CA証明書を1件指定
     * Nebula.setHttpsProxy({ host: 'proxysv.example.com', port: 8080},
     * {
     *   cert: fs.readFileSync('clientCert.pem'),
     *   key: fs.readFileSync('clientKey.pem'),
     *   ca: fs.readFileSync('caCert1.pem')
     * });
     *
     * // 自己署名証明書を使用しているサーバへの接続を許可する
     * Nebula.setHttpsProxy({ host: 'proxysv.example.com', port: 8080},
     * {
     *   rejectUnauthorized: false
     * });
     */
    setHttpsProxy(proxy: ProxyServer, options?: JsonObject): void;
    private static verifyProxy;
}
/**
 * @namespace Nebula
 * @description Nebula 名前空間。実体は {@link NebulaService} のデフォルトインスタンスである。
 */
export declare const Nebula: NebulaService;
