// *****************************************************************************
// Copyright 2013-2023 Aerospike, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License")
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// *****************************************************************************
/**
* @typedef {object} Host
*
* @summary Address of an Aerospike cluster seed host.
*
* @property {string} addr - The hostname/IP address of the host.
* @property {number} [port] - Optional port number; the default port number will be used if not specified.
* @property {string} [tlsname] - Optional name to use when verifying the TLS certificate for TLS encrypted server connections.
*
* @see Config#hosts
* @since v3.17.0
*/
/**
* @typedef {Object} ClientStats
*
* @summary Runtime stats about a client instance.
*
* @property {Object} commands - Array of node stats
* @property {number} commands.inFlight - Approximate number of commands
* actively being proccessed.
* @property {number} commands.queued - Approximate number of commands queued
* on the global command queue, that have not yet been started.
* @property {Object[]} nodes - Array of node stats
* @property {string} nodes.name - Node ID
* @property {Object} nodes.syncConnections - Synchronous connection stats
* @property {number} nodes.syncConnections.inPool - Connections residing in
* pool(s) for this node. There can be multiple pools per node. This value is a
* summary of those pools for this node.
* @property {number} nodes.syncConnections.inUse - Connections actively being
* used in database transactions for this node.
* @property {Object} nodes.asyncConnections - Asynchronous connection stats
* @property {number} nodes.asyncConnections.inPool - Connections residing in
* pool(s) for this node. There can be multiple pools per node. This value is a
* summary of those pools for this node.
* @property {number} nodes.asyncConnections.inUse - Connections actively being
* used in database transactions for this node.
*
* @see Client#stats
* @since v3.8.0
*/
/**
* @callback doneCallback
*
* @summary Callback function called when an operation has completed.
*
* @param {?AerospikeError} error - The error code and message or <code>null</code> if the operation was successful.
*/
/**
* @callback errorCallback
*
* @summary Callback function called when an error occured.
*
* @param {?AerospikeError} error - The error code and message or <code>null</code>.
*/
/**
* @callback recordCallback
*
* @summary Callback function returning a single record from the cluster.
*
* @description
*
* If the operation was successful, <code>null</code> will be returned for the
* error parameter. If there was an error, <code>record</code> will be
* <code>undefined</code> and the <code>error</code> paramter will provide more
* information about the error.
*
* @param {?AerospikeError} error - The error code and message or
* <code>null</code> if the operation was successful.
* @param {Record} [record] - Aerospike record incl. bins, key and meta data.
* Depending on the operation, all, some or no bin values will be returned.
*/
/**
* @callback valueCallback
*
* @summary Callback function returning a single, arbitrary return value.
*
* @param {?AerospikeError} error - The error code and message or <code>null</code> if the operation was successful.
* @param {*} value - The return value of the operation.
*/
/**
* @callback writeCallback
*
* @summary Callback function called when a write operation on a single record has completed.
*
* @param {?AerospikeError} error - The error code and message or <code>null</code> if the operation was successful.
* @param {Key} key - The key of the record.
*/
/**
* @callback batchRecordsCallback
*
* @summary Callback function returning one or more records from the cluster.
*
* @description
*
* If the operation was successful, <code>null</code> will be returned for the
* error parameter. If there was an error, <code>results</code> will be
* <code>undefined</code> and the <code>error</code> paramter will provide more
* information about the error.
*
* @param {?AerospikeError} error - The error code and message or <code>null</code> if the operation was successful.
* @param {Object[]} [results] - The results of the operation. Depending on the
* specific operation, the full record, a selection of bins or just the meta
* data for the record will be included in the results.
* @param {number} results.status - The status for fetching an individual record.
* @param {Record} [results.record] - A database record of <code>null</code> if status is not AEROSPIKE_OK.
*/
/**
* @callback connectCallback
*
* @summary The function called when the client has successfully connected to the server.
*
* @description
*
* Once you receive the connect callback the client instance
* returned in the callback is ready to accept commands for the Aerospike
* cluster.
*
* If an error occurred while connecting to the cluster, the
* <code>client</code> parameter will be <code>undefined</code> and the
* <code>error</code> parameter will include more information about the error.
*
* @param {?AerospikeError} error - The error code and message or <code>null</code> if the operation was successful.
* @param {Client} [client] - Aerospike client instance.
*/
/**
* @callback infoCallback
*
* @summary The function called when a cluster host responds to an info query.
*
* @param {?AerospikeError} error - The error code and message or <code>null</code> if the operation was successful.
* @param {string} [response] - The response string with the requested info.
*/
/**
* @callback infoAllCallback
*
* @summary The function called when all cluster nodes have responded to the
* info request. Note that the error parameter in the callback will be
* non-<code>null</code> if at least one of the cluster hosts responded with an
* error to the info request.
*
* @param {?AerospikeError} error - The error code and message or <code>null</code> if the operation was successful.
* @param {Object[]} [responses] - The response string with the requested info.
* @param {String} responses[].info - The response string with the requested info.
* @param {Object} responses[].host - The node that send the info response.
* @param {String} responses[].host.node_id - The name of the node.
*/
/**
* @callback jobCallback
*
* @summary Function called when a potentially long-running job has been started.
*
* @param {?AerospikeError} error - The error code and message or <code>null</code> if the operation was successful.
* @param {Job} [job] - Handle on a potentially long-running job which can be used to check for job completion.
*/
/**
* @callback JobdoneCallback
*
* @summary Callback function called when a job has completed.
*
* @param {?AerospikeError} error - The error code and message or <code>null</code> if the operation was successful.
*/
/**
* @callback JobinfoCallback
*
* @summary The function called with the job info response.
*
* @param {?AerospikeError} error - The error code and message or <code>null</code> if the operation was successful.
* @param {object} [info] - The job info.
* @param {number} [info.status] - Status of the job. See {@link module:aerospike.jobStatus}.
* @param {number} [info.progressPct] - Progress estimate for the job, as percentage.
* @param {number} [info.recordsRead] - How many records have been processed.
*/
/**
* @callback QueryaggregationResultCallback
*
* @summary Callback function returning the aggregation result for a query.
*
* @description
*
* If the operation was successful, <code>null</code> will be returned for the
* error parameter. If there was an error, <code>result</code> will be
* <code>undefined</code> and the <code>error</code> paramter will provide more
* information about the error.
*
* @param {?AerospikeError} error - The error code and message or <code>null</code> if the operation was successful.
* @param {(number|string|Array<*>|Object)} [result] - The aggregation result.
*/
/**
* @typedef {object} AerospikeExp
*
* @summary Aerospike Expression object
*
* @since v4.0.0
*/
/**
* @typedef {Object} Policies
*
* @property {ApplyPolicy} apply - Default apply policy
* @property {BatchPolicy} batch - Default batch policy
* @property {InfoPolicy} info - Default info policy
* @property {OperatePolicy} operate - Default operate policy
* @property {ReadPolicy} read - Default read policy
* @property {RemovePolicy} remove - Default remove policy
* @property {ScanPolicy} scan - Default scan policy
* @property {QueryPolicy} query - Default query policy
* @property {WritePolicy} write - Default write policy
* @property {MapPolicy} map - Default map policy
* @property {ListPolicy} list - Default list policy
* @property {CommandQueuePolicy} commandQueue - Default command queue policy
*/
/**
* @typedef {object} Operation
*
* @summary Aerospike Operation object
*
*/
/**
* @typedef {object} RecordObject
*
* @summary Aerospike Record object
*
*/